Microsoft-Decision-1 returns 422 or 404: deployment name and endpoint
Decision-1 wants your deployment name in `model`, not the model name. A 422 means a bad name or question; a 404 means a wrong endpoint or path.

If a Microsoft-Decision-1 call returns 422, check that model holds your deployment name and that every question has a supported type. If it returns 404, check the resource endpoint and the path /providers/microsoft/v1/systemone. Those are the causes Microsoft's troubleshooting table lists, and they are the two mistakes people make first when they wire a gate in front of a paid Sume call.
The error table
Microsoft's Learn page gives one table for the decision API. A gate in front of Sume should map each row to an action, and every row except a fixed request should end in review, never in a render.
| Status | Microsoft's cause | Gate action |
|---|---|---|
| 400 | Invalid question type or shape; check state, questions, type, criteria | Fix the request in code; treat the brief as review |
| 401 | Credential missing, invalid or expired | Refresh the token or key; review meanwhile |
| 403 | Identity lacks access to the deployment | Fix the role assignment; review meanwhile |
| 404 | Endpoint or API path is incorrect | Copy the endpoint from the deployment details page |
| 422 | Deployment name or question definition not supported | Check the model value and each question |
| 429 | Deployment rate limit exceeded | Retry with exponential backoff, or request more quota |
Deployment name versus model name
The request's model is the deployment name. Microsoft's example: a deployment called pi-decision-1 is sent as "model": "pi-decision-1". The response's model field names the underlying model and can differ, so do not compare the two. Put the deployment name in an environment variable and read it from there, so a rename is a config change.
Keep the Sume side separate
None of these errors touches Sume. Nothing has been submitted, no credits have moved, and there is no job to poll. When the gate does say render, the Sume call is a separate request with its own Idempotency-Key, and a 402 there is documented on the errors page. Log the two request ids separately so a support question about either side is answerable.
A five-line health check
Before you trust a gate, send one known brief with a fixed question and print the HTTP status and the selected option. Do that on deploy and in a nightly job. A 401 or 403 after a quiet week usually means an expired token or a changed role; a 404 or 422 after a deployment rename means the config did not follow.
Remember that both Entra ID and an API key are accepted; Microsoft recommends Entra ID.
- Same brief, same question, every run.
- Alert on any non-200.
- Keep the deployment name in config.
Sources
Related posts
More in Developers
- Decision-1 score question: order a Sume render queue by urgency
A Decision-1 score is a probability-weighted index, good for ordering but not an absolute grade. Sort briefs with it, then respect Sume's queue limits.
- Decision-1: judge a pending generate_video call as JSON state
Decision-1 accepts JSON as state. Pass the tool arguments of a pending Sume call and ask one noul question; keep keys and signed URLs out of the state.
- Decision-1: ask three questions in one request before a Sume render
Questions sharing a state can share one Decision-1 request. Route, rate severity and check repeat contact once, then render only if all three pass.
- Image API returned 202 at 4K: handle the job envelope in Python
A slow 4K, high-quality or large-n request can miss the 30 second wait and return 202 with a job, not images. Branch on the status code, then poll.
Written by Sume