/v1 has the same shape:
A call that answers an error charges nothing. After
outcome_unknown, send the same request with the same Idempotency-Key to see whether a job started.
Codes
invalid_input
The request does not match the model’s input.param names the field, such as input.duration, and message says what it takes. Read the model’s inputSchema with GET /v1/models/{id}. A missing Idempotency-Key header on POST /v1/jobs also answers this, and so does an expired quoteId (param is quoteId): estimate again.
moved
The name you sent was replaced.message names the new one.
not_signed_in
No token, or the token expired or its app was revoked. A token lasts one hour: get a new one withsummer token and send the request again. With no sign-in on this computer, or after the person revoked the app, run summer login first.
no_credits
The account’s paid credits cannot cover this job, next to the jobs it already holds a price for. Nothing ran and nothing was charged.fix_url opens the page where the person adds credits; show them message. Check what this app can spend with GET /v1/balance. A refused batch also has details: fits, jobs, totalUsd and shortUsd.
over_limit
The app reached the spend limit the person set for it. Nothing ran and nothing was charged. Show the personmessage: fix_url opens Settings > Connected agents & apps, where they raise it. Or wait until resets_at from GET /v1/key. Do not ask for a top-up: the balance is not the problem. A refused batch also has details, as for no_credits.
forbidden
This app or account may not do this.limit_raise_needs_person
PATCH /v1/key asked for a higher limit, no limit, or a reset that comes sooner. An app may only lower its own limit. The person raises it in Settings > Connected agents & apps.
not_found
No such model, job or route. Model ids come fromGET /v1/models. Job ids are sent as they are, colon included.
conflict
The price went up since yourquoteId. Nothing was charged. Ask POST /v1/estimate again and start the job with the new quote.
idempotency_conflict
ThisIdempotency-Key was already used for a different request. Use a new key for a new job.
in_progress
A request with thisIdempotency-Key is still running. Wait a moment and send the same request again: you get its answer.
unsupported
This job does not support that action, such as cancelling a Summer API job: it runs to the end.rate_limited
Paid Summer API work has no rate limits: a job past your running slots answers202 queued instead. If a call ever answers 429, wait the seconds in the Retry-After header, then send the same request with the same Idempotency-Key.
internal
Something broke on Summer’s side. Retry once with the sameIdempotency-Key. If it fails again, send request_id to Summer support.
outcome_unknown
Summer could not tell whether the work started. Do not start a new job: send the same request with the sameIdempotency-Key, which returns the first job if there was one.

