> ## Documentation Index
> Fetch the complete documentation index at: https://docs.adskull.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Responses

> Success, job, list, asset, and error response shapes.

AdSkull returns stable JSON with snake\_case fields. Generation endpoints return jobs; completed jobs include generated assets.

## Job Statuses

| Status       | Meaning                                         |
| ------------ | ----------------------------------------------- |
| `queued`     | Job was accepted and is waiting to start.       |
| `processing` | Job is actively generating.                     |
| `completed`  | Job completed and assets are available.         |
| `failed`     | Job failed. Refundable credits were reconciled. |
| `canceled`   | Job was canceled before completion.             |

## Job Response

```json theme={"theme":"github-dark"}
{
  "id": "job_01HX...",
  "object": "video_generation_job",
  "status": "processing",
  "progress_percent": 35,
  "credits_reserved": 45,
  "credits_used": null,
  "credits_refunded": 0,
  "created_at": "2026-05-17T12:00:00Z",
  "updated_at": "2026-05-17T12:01:00Z",
  "completed_at": null,
  "failed_at": null,
  "failure_code": null,
  "failure_message": null,
  "request": {
    "model_id": "wan-2.7",
    "duration_seconds": 5
  },
  "assets": []
}
```

## List Response

```json theme={"theme":"github-dark"}
{
  "object": "list",
  "data": [],
  "has_more": false,
  "next_cursor": null
}
```

List endpoints should support `limit` and `cursor` query parameters. Default `limit` should be 20, maximum `limit` should be 100.

## Asset Response

```json theme={"theme":"github-dark"}
{
  "id": "asset_01HX...",
  "object": "asset",
  "type": "video",
  "url": "https://cdn.adskull.io/generated/video.mp4",
  "mime_type": "video/mp4",
  "duration_seconds": 8,
  "width": 1080,
  "height": 1920,
  "expires_at": "2026-05-18T12:00:00Z"
}
```

## Failed Job Response

```json theme={"theme":"github-dark"}
{
  "id": "job_01HX...",
  "object": "video_generation_job",
  "status": "failed",
  "progress_percent": 100,
  "credits_reserved": 45,
  "credits_used": 0,
  "credits_refunded": 45,
  "created_at": "2026-05-17T12:00:00Z",
  "updated_at": "2026-05-17T12:02:00Z",
  "failed_at": "2026-05-17T12:02:00Z",
  "failure_code": "generation_failed",
  "failure_message": "The generation could not be completed. Refunded credits were returned to your account.",
  "assets": []
}
```

## Error Response

```json theme={"theme":"github-dark"}
{
  "error": {
    "code": "insufficient_credits",
    "message": "Not enough credits for this request.",
    "request_id": "req_01HX...",
    "details": {
      "credits_required": 50,
      "credits_available": 12
    }
  }
}
```

Every failed response includes `request_id`. Include it when contacting support.
