---
title: "Report one claimed attempt as running, needs_input, ready_for_review, shipped or failed, with its exact attempt_id. needs_input requires question (one question for the user, at most 500 characters) and leaves the job running. shipped on a managed attempt freezes the result and records completion with published_url, the live https address; a merged change to the user's own site takes its page address as planned_url (the pull request as receipt_url) and stays prepared until AfterLaunch sees the text there; do not poll it. A report from any key of the same person is accepted. Ready requires prepared_content or a prepared asset_url (or the pull request address when you opened one) and remains unpublished; a listing or profile form left on its review page is reported here, with what is filled and what is left. It can be reported again with a better result until the user has used it on AfterLaunch, after which it is locked and review_move revise starts a new attempt. If you cannot read the whole thread or page (a login wall, a cloud session), say so and ask the user for a screenshot; do not draft from a snippet as if it were the thread. On a stored legacy job, attempt_id null, shipped settles its move and job in one transaction. Scope 'act'; free."
method: POST
path: "/api/v1/queue/{id}/report"
---

# Report one claimed attempt as running, needs_input, ready_for_review, shipped or failed, with its exact attempt_id. needs_input requires question (one question for the user, at most 500 characters) and leaves the job running. shipped on a managed attempt freezes the result and records completion with published_url, the live https address; a merged change to the user's own site takes its page address as planned_url (the pull request as receipt_url) and stays prepared until AfterLaunch sees the text there; do not poll it. A report from any key of the same person is accepted. Ready requires prepared_content or a prepared asset_url (or the pull request address when you opened one) and remains unpublished; a listing or profile form left on its review page is reported here, with what is filled and what is left. It can be reported again with a better result until the user has used it on AfterLaunch, after which it is locked and review_move revise starts a new attempt. If you cannot read the whole thread or page (a login wall, a cloud session), say so and ask the user for a screenshot; do not draft from a snippet as if it were the thread. On a stored legacy job, attempt_id null, shipped settles its move and job in one transaction. Scope 'act'; free.

`POST /api/v1/queue/{id}/report`

## Request

- Base URL: `https://afterlaunch.io`
- URL: `https://afterlaunch.io/api/v1/queue/{id}/report`
- Auth: HTTP bearer

## Path parameters

- `id` string, uuid, required

## Request body

- object
  - `attempt_id` string, uuid, nullable, required
  - `state` 'running' | 'needs_input' | 'ready_for_review' | 'shipped' | 'failed', required: What has happened to the job.
  - `asset_url` string: URL of the prepared asset. This does not claim publication.
  - `prepared_content` string: Prepared result body for ready_for_review.
  - `receipt_url` string: A permalink to the proof, when there is one.
  - `session_url` string: Optional. The launch already gave your user the link to this session; pass it only when you opened this session yourself and can see its address.
  - `site_repository` string, nullable: Optional, for a routine working a site move: the repository it can write to, as owner/name, or null if it has none. Omit it to say nothing.
  - `fail_reason` string: Required with 'failed': one sentence on what stopped the agent.
  - `question` string: Required with 'needs_input': the one question the agent is asking its user.
  - `published_url` string, nullable: With 'shipped': the live https address of the work, when it has one.
  - `planned_url` string, nullable: With 'shipped': the page on the user's own site a merged change lives at, while it deploys. AfterLaunch checks it.

## Response `200`

Recorded. state is where the job now stands; a repeat of the same state comes back unchanged.

- object
  - `data` object, required
  - `meta` object, required
    - `enrollment_id` string, uuid, required
    - `generated_at` string, date-time, required

## Other responses

- `400`: Invalid state, attempt, required result, failure reason or URL.
- `401`: Missing, invalid or revoked API key.
- `403`: The key does not carry the scope this endpoint requires.
- `404`: No job with that id is on this product run.
- `409`: Stale attempt, a job not in progress, or illegal transition.
- `429`: Per-key rate limit exceeded. Honour Retry-After.

---

[API](https://skmtc.dev/afterlaunch/apis/afterlaunch-public-api.md) · [All operations](https://skmtc.dev/afterlaunch/apis/afterlaunch-public-api/llms.txt) · [OpenAPI document](https://skmtc.dev/afterlaunch/apis/afterlaunch-public-api/revisions/d67a599194a4?raw)
