---
title: "Get Dream Pass Status"
method: GET
path: "/api/admin/memory/{user_id}/dream/{job_id}"
tags: ["v2", "admin", "memory"]
---

# Get Dream Pass Status

`GET /api/admin/memory/{user_id}/dream/{job_id}`

## Request

- The document declares no server URL.
- Auth: HTTP bearer

Read the current status of a fire-and-forget dream pass job.

## Path parameters

- `user_id` string, required: User id or 'me'
- `job_id` string, required: Job id returned by the POST

## Response `200`

Successful Response

- DreamJobStatus: JobStatus envelope for ``kind="dream_pass"``.
  - `job_id` string, required
  - `user_id` string, required
  - `kind` 'nightly' | 'dream_pass' | 'rebuild', required
  - `state` 'queued' | 'running' | 'submitted' | 'complete' | 'errored', required
  - `started_at` string, date-time, required
  - `updated_at` string, date-time, required
  - `completed_at` string, date-time, nullable
  - `current_phase` string, nullable: Free-form phase label set by the work body. Dream pass uses 'consolidate' | 'recombine' | 'sanitize' | 'apply'; nightly batch reuses those plus 'ratification'; community rebuild uses 'leiden' | 'summarize' | 'persist'.
  - `batch_id` string, nullable
  - `result` DreamPassResult: Return value of ``execute_dream_pass`` and the admin API. Mirrors ``RebuildResponse`` from the community-rebuild endpoint so the admin frontend can render both with the same toast logic.
    - `user_id` string, required
    - `pass_id` string, required
    - `started_at` string, date-time, nullable
    - `completed_at` string, date-time, nullable
    - `elapsed_seconds` number, nullable
    - `execution_path` 'sync_baseline' | 'anthropic_batch'
    - `consolidated_count` integer
    - `proposal_count` integer
    - `demotion_count` integer
    - `entity_invalidation_count` integer
    - `dropped_forgotten` integer
    - `pending_writes` integer
    - `failed_writes` integer
    - `provenance_pending` integer
    - `uncited_writes_dropped` integer
    - `cross_scope_citations_dropped` integer
    - `protected_demotions` integer
    - `indeterminate_demotion_writes` integer
    - `demotion_accounting_complete` boolean
    - `summary_for_user` string
    - `dream_session_id` string, nullable
    - `ingestion_drain_status` 'not_applied' | 'unknown' | 'drained' | 'skipped' | 'timed_out': Fate of a dream pass's enqueued graph writes at the moment the pass was reported complete. Five distinct states, so consumers (and a future Memory Visualizer) can tell a healthy by-design skip from a real failure: * ``drained`` — the worker finished every one of the pass's own episodes before the pass returned (sync path): each was written, dropped for resting on a forget (``dropped_forgotten``), or failed with a logged error; or the pass enqueued nothing to drain. Healthy. * ``skipped`` — the drain was intentionally not run to avoid stalling a shared serial loop (batch path). The episodes process fire-and-forget, counted pending; healthy by design, NOT a failure signal. * ``not_applied`` — this pass never began applying, so no drain ran. * ``unknown`` — this pass began applying but recorded no outcome: it may still be applying, or have applied before it ended (a cancel after its last check does not stop an apply), or failed partway. Its writes may have been enqueued, so whether they drained is not known. * ``timed_out`` — the sync-path drain was attempted but did not finish within its budget. The episodes not written yet are counted pending, not written; they stay queued in-process, and are lost if the worker's pod restarts. This is the only value that warrants an operator warning.
    - `operations` DreamOperationsSnapshot: Detailed per-operation rollup of a single dream pass. Shape used by three downstream consumers: 1. The admin memory-visualizer UI (renders the per-edge detail). 2. AgentProbe eval scorers (read via ``rawExchangeKey``). 3. The future chat-stream ``dream.operations`` SSE event (P6 + P9 daydreaming, see ``dream/TODO.md``). Kept additive on ``DreamPassResult`` so adding fields here doesn't bump the count-only top-level columns existing clients rely on.
      - `writes` WriteSummary[]
        - `edge_uuid` string, nullable
        - `content` string, required
        - `scope` string
        - `confidence` number, nullable
        - `status` 'active' | 'tentative'
        - `source_episode_uuids` string[]
        - `source_fact_uuids` string[]
      - `proposals` WriteSummary[]
        - `edge_uuid` string, nullable
        - `content` string, required
        - `scope` string
        - `confidence` number, nullable
        - `status` 'active' | 'tentative'
        - `source_episode_uuids` string[]
        - `source_fact_uuids` string[]
      - `demotions` DemotionSummary[]
        - `edge_uuid` string, required
        - `reason` string, required
        - `new_status` 'superseded' | 'contradicted', required
        - `applied` boolean
        - `protected` boolean
        - `indeterminate` boolean
      - `entity_invalidations` EntityInvalidationSummary[]
        - `entity_uuid` string, required
        - `reason` string, required
        - `edges_touched` string[]
        - `edges_protected` string[]
        - `indeterminate` boolean
    - `usage` DreamPassUsage: Aggregate usage across all phases of one dream pass. Surfaced on ``DreamPassResult.usage`` so eval / admin UI / billing can read tokens + cost without recomputing. Written to ``PlatformCostLog`` from apply.py with ``provider='dream_pass'``; charged against the user's rate-limit window via ``persist_and_record_usage`` so dream-pass spend rolls into the same daily/weekly subscription tier budget as chat-execution overage.
      - `phases` PhaseUsage[]
        - `phase` 'consolidate' | 'recombine' | 'sanitize', required
        - `model` string, required
        - `input_tokens` integer
        - `output_tokens` integer
        - `cache_read_tokens` integer
        - `cache_creation_tokens` integer
        - `cost_usd` number, nullable
      - `total_input_tokens` integer
      - `total_output_tokens` integer
      - `total_cache_read_tokens` integer
      - `total_cache_creation_tokens` integer
      - `total_cost_usd` number, nullable
      - `discount_applied` number
    - `error` string, nullable
    - `skipped` boolean
    - `skip_reason` string, nullable
  - `error` string, nullable

## Other responses

- `401`: Authentication required
- `422`: Validation Error

## Changes

- **2026-10-22** `48ad8f0dd980`: 2 warning
  - added the new `not_applied` enum value to the `result/anyOf[subschema #1: DreamPassResult]/ingestion_drain_status` response property for the response status `200`
  - added the new `unknown` enum value to the `result/anyOf[subschema #1: DreamPassResult]/ingestion_drain_status` response property for the response status `200`
- **2026-10-20** `270f7e615e6e`: 3 info
  - added the optional property `result/anyOf[subschema #1: DreamPassResult]/cross_scope_citations_dropped` to the response with the `200` status
  - added the optional property `result/anyOf[subschema #1: DreamPassResult]/provenance_pending` to the response with the `200` status
  - added the optional property `result/anyOf[subschema #1: DreamPassResult]/uncited_writes_dropped` to the response with the `200` status
- …earlier changes not shown

[Operation history](https://skmtc.dev/significant-gravitas/apis/autogpt-agent-server/changes/api/admin/memory/:user_id/dream/:job_id/get.md)

---

[API](https://skmtc.dev/significant-gravitas/apis/autogpt-agent-server.md) - [All operations](https://skmtc.dev/significant-gravitas/apis/autogpt-agent-server/llms.txt) - [OpenAPI document](https://skmtc.dev/significant-gravitas/apis/autogpt-agent-server/revisions/c508818c16ad?raw)
