# Check run status

When you [store memories](store-memories.md), Engram processes them asynchronously through a [pipeline](../engram-concepts/pipelines.md). Each request returns a `run_id` that you can use to track progress.

:::callout{intent="tip"}
In most cases, you don't need to poll for completion — memories are eventually consistent and will be available for search once the pipeline finishes. Check the initial response from `memories.add` to catch immediate errors. Use `runs.get` only when you need to confirm that a specific run has completed, such as during testing or debugging.
:::

::::accordion{title="All examples below use a connected client"}
See [Connect to Engram](../engram/quickstart.md#step-3-connect-to-engram) for how to instantiate one.

:::code-group{sync="languages"}
```python title="Python"
import os
from engram import EngramClient

client = EngramClient(api_key=os.environ["ENGRAM_API_KEY"])
```

```python title="Python (Async)"
import os
from engram import AsyncEngramClient

client = AsyncEngramClient(api_key=os.environ["ENGRAM_API_KEY"])
```

```bash title="cURL"
export ENGRAM_API_KEY="eng_..."
```
:::
::::

## Poll a run

:::code-group{sync="languages"}
```python title="Python"
status = client.runs.wait(run.run_id)

print(status.run_id)
print(status.status)
print(status.committed_operations)
```

```pyindent title="Python (Async)"
status = await client.runs.wait(run.run_id)

print(status.run_id)
print(status.status)
print(status.committed_operations)
```

```bash title="cURL"
curl https://api.engram.weaviate.io/v1/runs/{run-id} \
  -H "Authorization: Bearer $ENGRAM_API_KEY"
```
:::

### Response

```json
{
  "run_id": "run-uuid",
  "status": "completed",
  "group_id": "group-uuid",
  "user_id": "user-uuid",
  "starting_step": 1,
  "input_type": "string",
  "committed_operations": {
    "created": [
      {
        "memory_id": "memory-uuid-1",
        "committed_at": "2025-01-01T00:00:01Z"
      }
    ]
  },
  "created_at": "2025-01-01T00:00:00Z",
  "updated_at": "2025-01-01T00:00:01Z"
}
```

## Run statuses

| Status      | Meaning                                                           |
| ----------- | ----------------------------------------------------------------- |
| `running`   | Pipeline is actively processing the content                       |
| `in_buffer` | Run is paused at a buffer step, waiting for a trigger to continue |
| `completed` | All operations have been committed successfully                   |
| `failed`    | An error occurred during processing                               |

## Committed operations

When a run completes, the `committed_operations` field tells you exactly what changed:

- **`created`** — New memories that were added to storage.
- **`updated`** — Existing memories that were modified (e.g. merged or refined).
- **`deleted`** — Memories that were removed (e.g. superseded by an update).

Each entry includes the `memory_id` and a `committed_at` timestamp.

## Handling failures

If a run fails, the `error` field contains a description of what went wrong.

```json
{
  "run_id": "run-uuid",
  "status": "failed",
  "group_id": "group-uuid",
  "user_id": "user-uuid",
  "starting_step": 1,
  "input_type": "string",
  "error": "extraction failed: invalid input format",
  "created_at": "2025-01-01T00:00:00Z",
  "updated_at": "2025-01-01T00:00:01Z"
}
```

## Questions and feedback

Have a question or feedback? Here's how to reach us.

::::card-grid
:::card{title="Community Forum" href="https://forum.weaviate.io/c/support" icon="messages-square"}
Ask questions and connect with other developers on our **Community forum**.
:::

:::card{title="Support" href="/guides/support-overview" icon="life-buoy"}
Weaviate Cloud user or customer? Find the right channel on the **Support page**.
:::
::::

## Related pages

- [Agents](./agents-index.md)
- [AI-assisted Weaviate code generation](./ai-assisted-vibe-coding-index.md)
- [APIs](./apis-index.md)
- [Authorization and authentication](./authorization-and-authentication-index.md)
- [Benchmarks](./benchmarks-index.md)
- [Best practices](./best-practices-index.md)
- [Client libraries](./clients-index.md)
- [Client Libraries / SDKs](./client-libraries-index.md)
- [Cloud](./cloud-index.md)
- [Cloud account management](./cloud-account-management-index.md)

# Agent Instructions

This portal answers questions programmatically. To receive a synthesized,
source-cited answer instead of crawling page by page, append the `?ask=`
query parameter to any page URL on this site:

    /guides/quickstart?ask=how+do+I+authenticate

Optional parameters:

- `&goal=<what-you-are-trying-to-do>` steers the answer toward your
  objective (e.g. `&goal=write+a+python+client`).
- `&version=<label>` scopes the answer to a mounted version when the
  portal publishes more than one.

The response is `text/markdown`: the answer followed by a `# Sources` list
of the portal pages it was grounded in. Status codes are the contract:

- `200` — the answer; `402` — the portal owner’s plan or answer credits are
  exhausted (surface this to your operator; do NOT retry); `429` — you are
  rate-limited; back off for the `Retry-After` seconds; `503` — the answer
  lane is temporarily unavailable; fall back to crawling the `.md` pages.

For the full corpus map read `llms.txt` at the site root; for the tool
surface (search + page fetch as MCP tools) see `/mcp`.
