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

# GET /voyage/{task_id} — get voyage progress

> Poll the status, phase, progress, and result of a voyage requested by your organization.

`GET /voyage/{task_id}` returns the current state of a voyage your organization
requested. Poll every five minutes or slower while a voyage is active.

## Request

```http theme={null}
GET https://api.octogen.ai/v1/voyage/{task_id}
Authorization: Bearer <your-platform-api-key>
```

### Path parameters

<ParamField path="task_id" type="string" required>
  `taskId` returned by [`POST /voyage`](/docs/api-reference/start-voyage).
</ParamField>

### Example

```bash theme={null}
curl -sS https://api.octogen.ai/v1/voyage/2026-07-13-09-15-02-example \
  -H "Authorization: Bearer $OCTOGEN_PLATFORM_API_KEY"
```

## Response

<ResponseField name="taskId" type="string" required>
  Stable task identifier.
</ResponseField>

<ResponseField name="domain" type="string" required>
  Normalized registrable domain.
</ResponseField>

<ResponseField name="status" type="&#x22;queued&#x22; | &#x22;running&#x22; | &#x22;in_review&#x22; | &#x22;completed&#x22; | &#x22;failed&#x22; | &#x22;cancelled&#x22;" required>
  Machine-readable voyage status.
</ResponseField>

<ResponseField name="phase" type="&#x22;discovering_site&#x22; | &#x22;sampling_products&#x22; | &#x22;building_extraction&#x22; | &#x22;in_review&#x22; | &#x22;publishing_catalog&#x22; | &#x22;complete&#x22; | &#x22;failed&#x22;" required>
  Current pipeline phase.
</ResponseField>

<ResponseField name="phaseLabel" type="string" required>
  Human-readable label for the current phase.
</ResponseField>

<ResponseField name="progressPercent" type="integer" required>
  Monotonic progress value from 0 to 100.
</ResponseField>

<ResponseField name="createdAt" type="datetime | null">
  When the voyage was created.
</ResponseField>

<ResponseField name="updatedAt" type="datetime | null">
  When the voyage state was last updated.
</ResponseField>

<ResponseField name="completedAt" type="datetime | null">
  When the voyage reached a terminal state.
</ResponseField>

<ResponseField name="error" type="object | null">
  Populated when the voyage fails, with a stable `code` and safe `message`.
</ResponseField>

<ResponseField name="result" type="object | null">
  Populated when the catalog is live. Includes `catalog`, `productCount`, and
  the supported `search` and `lookup` endpoint paths.
</ResponseField>

### Example response

```json theme={null}
{
  "taskId": "2026-07-13-09-15-02-example",
  "domain": "example.com",
  "status": "running",
  "phase": "building_extraction",
  "phaseLabel": "Building product extraction",
  "progressPercent": 62,
  "createdAt": "2026-07-13T09:15:02Z",
  "updatedAt": "2026-07-13T11:42:10Z",
  "completedAt": null,
  "error": null,
  "result": null
}
```

## Statuses

| Status | Meaning |
| - | - |
| `queued` | Accepted and waiting to start. |
| `running` | StoreRouter is crawling, building extraction, or publishing the catalog. |
| `in_review` | StoreRouter is performing quality review. No caller action is required. |
| `completed` | The catalog is live and searchable. `result` is populated. |
| `failed` | The voyage could not be completed. `error` is populated. |
| `cancelled` | StoreRouter stopped the voyage. |

## Errors

| Status | `detail` | Meaning |
| - | - | - |
| `403` | `"voyage_org_type_forbidden"` | The API key's organization may not use the Voyage API. |
| `404` | `"voyage_not_found"` | The task does not exist or was never requested by your organization. These cases are intentionally indistinguishable. |
| `429` | `"rate_limit_exceeded"` | Your organization exceeded its request-rate limit. |
| `503` | `"voyage_unavailable"` | The voyage service is temporarily unavailable. Retry with backoff. |


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.