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

# Verify Processing

> Check the processing status of ingested content.

## When to use it

Both `/ingestion/upload_knowledge` and `/memories/add_memory` are asynchronous. After ingesting, use this endpoint to check whether content is fully indexed and ready to be recalled.

Common patterns:

* **Polling after upload** – wait until status is `completed` before running recall queries
* **Bulk progress tracking** – pass multiple IDs to check many sources in one call
* **Error inspection** – see why a specific item failed

## Endpoint

* **Auth:** Bearer token
* **Idempotency:** Read-only
* **Async:** No

## Example

<CodeGroup>
  ```bash cURL theme={"dark"}
  curl -X POST 'https://api.hydradb.com/ingestion/verify_processing?file_ids=ef3ea754019855e2b39e9ab5c2d26096&file_ids=9a8b7c6d5e4f3a2b1c0d9e8f7a6b5c4d&tenant_id=my_first_tenant&sub_tenant_id=my_first_tenant' \
    -H "Authorization: Bearer <your_api_key>"
  ```

  ```typescript TypeScript SDK theme={"dark"}
  const response = await client.upload.verifyProcessing({
    tenant_id: "my_first_tenant",
    sub_tenant_id: "my_first_tenant",
    file_ids: [
      "ef3ea754019855e2b39e9ab5c2d26096",
      "9a8b7c6d5e4f3a2b1c0d9e8f7a6b5c4d",
    ],
  });
  ```

  ```python Python SDK theme={"dark"}
  response = client.upload.verify_processing(
      tenant_id="my_first_tenant",
      sub_tenant_id="my_first_tenant",
      file_ids=[
          "ef3ea754019855e2b39e9ab5c2d26096",
          "9a8b7c6d5e4f3a2b1c0d9e8f7a6b5c4d",
      ],
  )
  ```
</CodeGroup>

## Query parameters

Per [`api-reference/openapi.json`](/api-reference/openapi.json), **all** query parameters below are **optional** in the spec (each has a default).

| Name            | Type           | Required (OpenAPI) | Description                                                                  |
| --------------- | -------------- | ------------------ | ---------------------------------------------------------------------------- |
| `file_id`       | string \| null | No                 | **Deprecated** in OpenAPI: single ID; use `file_ids` instead.                |
| `file_ids`      | string\[]      | No                 | One or more `source_id` values returned at ingestion. OpenAPI default: `[]`. |
| `tenant_id`     | string         | No                 | Tenant the items belong to. OpenAPI default: `""`.                           |
| `sub_tenant_id` | string \| null | No                 | Sub-tenant scope. If omitted or null, the default sub-tenant is used.        |

<Info>
  The query parameter is named `file_ids` for legacy reasons. It accepts the `source_id` returned by both `/ingestion/upload_knowledge` and `/memories/add_memory` – not only file-backed sources.
</Info>

## Response

`200` response body matches OpenAPI schema **`BatchProcessingStatus`** (`statuses`: array of **`ProcessingStatus`**).

```json theme={"dark"}
{
  "statuses": [
    {
      "file_id": "ef3ea754019855e2b39e9ab5c2d26096",
      "indexing_status": "completed",
      "error_code": "",
      "success": true,
      "message": "Processing status retrieved successfully"
    },
    {
      "file_id": "9a8b7c6d5e4f3a2b1c0d9e8f7a6b5c4d",
      "indexing_status": "graph_creation",
      "error_code": "",
      "success": true,
      "message": "Processing status retrieved successfully"
    }
  ]
}
```

| Field                        | Description                                                                            |
| ---------------------------- | -------------------------------------------------------------------------------------- |
| `statuses[]`                 | One entry per requested ID.                                                            |
| `statuses[].file_id`         | The ID being reported on.                                                              |
| `statuses[].indexing_status` | Current status. See [Status values](#status-values).                                   |
| `statuses[].error_code`      | Diagnostic code if `errored`. Empty string when absent (OpenAPI default `""`).         |
| `statuses[].success`         | Whether the file was processed successfully (OpenAPI field; see spec for semantics).   |
| `statuses[].message`         | Detailed status message (OpenAPI default: `Processing status retrieved successfully`). |

## Status values

```mermaid theme={"dark"}
flowchart LR
    %% HydraDB Dark Mode Styling System
    classDef standard fill:#0f172a,stroke:#334155,stroke-width:2px,color:#f8fafc;
    classDef innovation fill:#CC4515,stroke:#FF571A,stroke-width:3px,color:#ffffff,font-weight:bold;
    classDef success fill:#0f172a,stroke:#10b981,stroke-width:2px,color:#f8fafc;
    classDef failure fill:#0f172a,stroke:#ef4444,stroke-width:2px,color:#f8fafc;

    subgraph processing_flow [ ]
      direction LR
      Q([queued])
      P([processing])
      G([graph_creation])
      C([completed])
      E([errored])
    end

    Q --> P
    P --> G
    G --> C
    P -.failure.-> E
    G -.failure.-> E

    class Q,P standard;
    class G innovation;
    class C success;
    class E failure;

    linkStyle default stroke:#64748b,stroke-width:2px;
```

| Status           | Meaning                                                                                                                                         |
| ---------------- | ----------------------------------------------------------------------------------------------------------------------------------------------- |
| `queued`         | Accepted by the server, not yet picked up by a worker.                                                                                          |
| `processing`     | Content is being parsed, chunked, and embedded.                                                                                                 |
| `graph_creation` | Content is indexed; the knowledge graph is being built on top. Already searchable via vector recall, but graph context may still be incomplete. |
| `completed`      | Fully indexed and graphed. Ready for all recall modes.                                                                                          |
| `errored`        | Processing failed. Inspect `error_code` and `message` on the status object (OpenAPI `ProcessingStatus`).                                        |
| `success`        | Alias for `completed`. May appear in some legacy responses.                                                                                     |

## Polling pattern

```python theme={"dark"}
import time

source_ids = ["ef3ea754019855e2b39e9ab5c2d26096", "9a8b7c6d5e4f3a2b1c0d9e8f7a6b5c4d"]

while True:
    response = client.upload.verify_processing(
        tenant_id="my_first_tenant",
        sub_tenant_id="my_first_tenant",
        file_ids=source_ids,
    )
    statuses = [s.indexing_status for s in response.statuses]

    if all(s == "completed" for s in statuses):
        break
    if any(s == "errored" for s in statuses):
        # inspect response.statuses for which failed
        break

    time.sleep(5)
```

Typical processing time:

* **Memories** (text, markdown, conversation pairs): seconds
* **Small documents** (under 50 pages): 1–5 minutes
* **Large documents** (50+ pages): 5–15 minutes

## Behavior notes

<Info>
  **`graph_creation` is searchable.** Items in the `graph_creation` state are already retrievable via `full_recall` and `recall_preferences`. Wait for `completed` only if you specifically need full graph context.
</Info>

## Related endpoints

* **Before this:** [Upload knowledge](/api-reference/endpoint/upload-knowledge) · [Add memory](/api-reference/endpoint/add-memory)
* **After completion:** [Full recall](/api-reference/endpoint/full-recall) · [Recall preferences](/api-reference/endpoint/recall-preferences)

## Errors

Common codes: `400 INVALID_PARAMETERS`, `404 TENANT_NOT_FOUND`, `422 VALIDATION_ERROR`. See [Error Responses](/api-reference/error-responses) for the full list.

Read more: [Essentials → Memories](/essentials/memories)


## OpenAPI

````yaml POST /ingestion/verify_processing
openapi: 3.1.0
info:
  title: HydraDB API
  description: REST APIs for the HydraDB retrieval engine
  version: 0.0.1
servers:
  - url: https://api.hydradb.com
    description: Production
    x-fern-server-name: hydradb-prod
security: []
paths:
  /ingestion/verify_processing:
    post:
      tags:
        - ingestion
      summary: Verify Processing
      operationId: verify_processing_ingestion_verify_processing_post
      parameters:
        - name: file_id
          in: query
          required: false
          deprecated: true
          schema:
            anyOf:
              - type: string
              - type: 'null'
            description: Single file ID (deprecated - use file_ids instead).
            title: File Id
            example: <str>
          description: Single file ID (deprecated - use file_ids instead).
        - name: file_ids
          in: query
          required: false
          schema:
            type: array
            items:
              type: string
            description: One or more file IDs to check processing status for.
            default: []
            title: File Ids
            example: <str>
          description: One or more file IDs to check processing status for.
        - name: tenant_id
          in: query
          required: false
          schema:
            type: string
            description: Unique identifier for the tenant/organization
            default: ''
            title: Tenant Id
            example: tenant_1234
          description: Unique identifier for the tenant/organization
        - name: sub_tenant_id
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: 'null'
            title: Sub Tenant Id
            description: >-
              Optional sub-tenant identifier used to organize data within a
              tenant. If omitted, the default sub-tenant created during tenant
              setup will be used.
            example: sub_tenant_4567
          description: >-
            Optional sub-tenant identifier used to organize data within a
            tenant. If omitted, the default sub-tenant created during tenant
            setup will be used.
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BatchProcessingStatus'
        '400':
          description: Bad Request - Invalid input parameters
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/cortex__models__response__commons__ActualErrorResponse
        '401':
          description: Unauthorized - Authentication required
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/cortex__models__response__commons__ActualErrorResponse
        '403':
          description: Forbidden - Access denied
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/cortex__models__response__commons__ActualErrorResponse
        '404':
          description: Not Found - Resource does not exist
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/cortex__models__response__commons__ActualErrorResponse
        '422':
          description: Unprocessable Entity - Validation failed
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/cortex__models__response__commons__ActualErrorResponse
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/cortex__models__response__commons__ActualErrorResponse
        '503':
          description: Service Unavailable
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/cortex__models__response__commons__ActualErrorResponse
      security:
        - HTTPBearer: []
components:
  schemas:
    BatchProcessingStatus:
      properties:
        statuses:
          items:
            $ref: '#/components/schemas/ProcessingStatus'
          type: array
          title: Statuses
          description: List of processing statuses, one per requested file ID.
          example: []
      type: object
      required:
        - statuses
      title: BatchProcessingStatus
    cortex__models__response__commons__ActualErrorResponse:
      properties:
        detail:
          $ref: >-
            #/components/schemas/cortex__models__response__commons__ErrorResponse
      type: object
      required:
        - detail
      title: ActualErrorResponse
    ProcessingStatus:
      properties:
        file_id:
          type: string
          title: File Id
          description: Identifier for the file whose status is being retrieved
          example: <file_id>
        indexing_status:
          type: string
          enum:
            - queued
            - processing
            - completed
            - errored
            - graph_creation
            - success
          title: Indexing Status
          description: >-
            Current status of the file. Possible values are 'queued',
            'processing', 'completed', 'errored', 'graph_creation', 'success'.
            'graph_creation' indicates the file is indexed but the knowledge
            graph is still being created. 'success' is an alias for 'completed'.
          example: <indexing_status>
        error_code:
          type: string
          title: Error Code
          description: >-
            Error code for the file. You may share this code with us to help us
            diagnose and resolve the issue.
          default: ''
          example: <error_code>
        success:
          type: boolean
          title: Success
          description: Whether the file was processed successfully.
          default: true
          example: true
        message:
          type: string
          title: Message
          description: Detailed status message about the processing operation
          default: Processing status retrieved successfully
      type: object
      required:
        - file_id
        - indexing_status
      title: ProcessingStatus
    cortex__models__response__commons__ErrorResponse:
      properties:
        success:
          type: boolean
          title: Success
          default: false
          example: true
        message:
          type: string
          title: Message
          default: Error occurred
        error_code:
          anyOf:
            - type: string
            - type: 'null'
          title: Error Code
      type: object
      title: ErrorResponse
  securitySchemes:
    HTTPBearer:
      type: http
      scheme: bearer

````