# Track Requests & Status Codes

Most AutoContent generation endpoints are asynchronous. Submit the job, save the returned request ID exactly as-is, poll the status endpoint, and only read final asset fields once the request reaches `100`.

## Step 1: Save the Request ID

Different endpoints may return the same concept with slightly different field names:

* `request_id`
* `requestId`

Examples:

```json
{
  "request_id": "550e8400-e29b-41d4-a716-446655440000",
  "status": 0
}
```

```json
{
  "requestId": "video-550e8400-e29b-41d4-a716-446655440000",
  "status": 0
}
```

Keep the full value unchanged. Some endpoints prefix the ID with the job type, such as `video-...` or `research-podcast-...`.

## Step 2: Poll `/content/Status/{id}`

Use the exact request ID returned by the create call:

```bash
curl -X GET "https://api.autocontentapi.com/content/Status/YOUR_REQUEST_ID" \
  -H "Authorization: Bearer YOUR_API_TOKEN"
```

Typical in-progress response:

```json
{
  "id": "YOUR_REQUEST_ID",
  "status": 5,
  "updated_on": "2026-03-11T19:10:00Z",
  "error_code": 0,
  "requested_on": "2026-03-11T19:08:00Z"
}
```

## Step 3: Interpret the Status Value

The two stable states are:

* `0`: accepted and queued
* `100`: completed

Intermediate values vary by endpoint. Common examples include:

| Status                             | Meaning           | Where you may see it                           |
| ---------------------------------- | ----------------- | ---------------------------------------------- |
| `5`                                | Early processing  | Podcasts, research-backed flows, several tools |
| `10`, `20`, `30`, `60`, `80`, `90` | Mid-pipeline work | Endpoint-specific generation stages            |

Treat any value between `1` and `99` as "still running" unless the response also includes an error.

## Step 4: Read Success and Error Fields

Once the request reaches `100`, the payload includes output-specific fields. Common ones include:

* `audio_url` for podcast outputs
* `video_url` or similar media URLs for video endpoints
* `document_url` or `briefing_doc_url` for PDF briefing documents
* `document_content` for `html` or `text` briefing documents
* `response_text` for generated transcript or text content
* `share_url` for hosted result pages

Error metadata can also vary slightly by endpoint. Watch for either:

* `error_code` or `errorCode`
* `error_message` or `errorMessage`

If the response includes a non-zero error value, use [Error Codes](https://docs.autocontentapi.com/error-codes) to diagnose the failure before retrying.

## Step 5: Use `callbackData` for Reconciliation

Some endpoints accept an optional `callbackData` field. Use it as your own stable job reference, for example:

* a CMS entry ID
* a campaign or customer ID
* an internal workflow run ID

When a workflow supports webhook notifications, `callbackData` is the safest way to map the incoming event back to your system. Keep it short, machine-readable, and unique per job.

## Endpoint-Specific Notes

* Briefing documents: poll `/content/Status/{id}` first, then use `/documents/{id}` only after the job has completed.
* Deep research: the research creation flow uses `/deep-research/research/{id}` while the downstream content generation still uses `/content/Status/{id}`.
* Tools such as transcription, speaker separation, and voice cloning still follow the same "save ID, poll, read final result" pattern.

## Related Endpoints

* `GET /content/Status/{id}` - Check the status of a generated content request.
* `GET /deep-research/research/{id}` - Check the status of a deep research request.

## What's Next?

* Need a reusable file ID first? Follow [Upload Private Files](https://docs.autocontentapi.com/quick-start/tools/upload-files).
* Working with documents? See [Create a Briefing Document](https://docs.autocontentapi.com/quick-start/documents/create-document).
* Need troubleshooting details? Review [Error Codes](https://docs.autocontentapi.com/error-codes).
