Skip to main content
A job can stop to ask something only you can answer: a choice the website offers, a code it just sent you, or a login. Answer it, and the job continues.

See the question

The job reads status needs_input, and input_request holds the question. On Instacart, a run might ask for a delivery window:
Question types are choice, multi_choice, text, confirm, secret and login.

Answer it

Answer every question at once with POST /v1/jobs/{id}/answers or answer_job:
The job continues from the same page. Keep waiting for it.

Keep secrets out of chat

Never ask for a password in chat. A secret or login sent through the API or MCP reaches your client and its model provider. Give the person answer_url instead: it opens a protected Pomerado page that keeps the value out of the conversation. Never send authenticator seeds or durable tokens.

Answer in time

A question waits at most 10 minutes. Unanswered, the job fails with no_response and is never retried.

Correct a rejected saved login

When the website rejects a saved login before anything changed, the job waits instead of failing. It reads needs_input with input_request null and error.code credentials_rejected, whose details.login_id names the login. Give the user the page to correct it: MCP’s next names it as answer_url. Anyone who can edit that login can correct it. The job then resumes as the same job, so don’t submit it again. Uncorrected after 60 minutes, it fails with credentials_rejected.
  • Answer formats: an option ID for choice, an array of option IDs for multi_choice, a string for text and secret, {"confirmed": true} for confirm, and {"username", "password", "save_login"} for login, with only the fields the question’s fields lists. A choice also takes {"other": text} when allow_other and {"option": id, "note": text} when allow_note.
  • An answer that doesn’t fit is refused with invalid_answer, and the question stays open. A question that already closed answers input_not_pending; read the job again.
  • Sending the same answers again counts as one answer.
  • A login given in the call itself, or a rejected one-time code, fails the job instead of waiting. See saved logins.