Significant-Gravitas/AutoGPT · info · HTTPException
job not found
Error message
job not found
What it means
HTTP 404 from the dream-pass job status endpoint. The route looks up the job via read_status(kind='dream_pass', job_id=job_id); if no status row exists for that exact kind+job_id combination, it returns 404 'job not found'. The job_id must be the UUID returned by the POST that triggered the pass.
Source
Thrown at autogpt_platform/backend/backend/api/features/admin/memory_admin_routes.py:803
)
async def get_dream_pass_status(
request: Request,
user_id: Annotated[str, Path(description="User id or 'me'")],
job_id: Annotated[str, Path(description="Job id returned by the POST")],
caller_id: Annotated[str, Depends(get_user_id)],
jwt_payload: Annotated[dict, Security(get_jwt_payload)],
) -> DreamJobStatus:
"""Read the current status of a fire-and-forget dream pass job."""
target = _resolve_user_id(user_id, caller_id)
_audit_cross_user_access(
request=request,
caller_id=caller_id,
target_id=target,
jwt_payload=jwt_payload,
)
status = await read_status(kind="dream_pass", job_id=job_id)
if status is None:
raise HTTPException(status_code=404, detail="job not found")
if status.user_id != target:
raise HTTPException(status_code=403, detail="job belongs to a different user")
return DreamJobStatus.model_validate(status.model_dump())
@router.post("/{user_id}/ratification", response_model=RatificationResult)
async def trigger_ratification_pass(
request: Request,
user_id: Annotated[str, Path(description="User id or 'me'")],
caller_id: Annotated[str, Depends(get_user_id)],
jwt_payload: Annotated[dict, Security(get_jwt_payload)],
) -> RatificationResult:
"""Trigger an on-demand ratification sweep for the user (in isolation).
Forwards to ``Scheduler.execute_ratification_pass_now``. Runs ONLY
the ratification supersession sweep — does NOT run dream pass or
community rebuild. Useful for testing ratification behavior
without the full nightly fan-out.View on GitHub (pinned to 9c8bb5550f)
Solutions
- Confirm you are polling the dream-pass status route with the exact job_id from the POST /{user_id}/dream 202 response body
- Verify the status backing store (where read_status persists) is up and was not wiped
- Check logs that the POST actually returned 202 and printed the job_id
- If the store was reset, re-trigger the dream pass to obtain a fresh job_id
Defensive patterns
Strategy: validation
Validate before calling
from uuid import UUID
def valid_job_id(job_id: str) -> bool:
try:
UUID(job_id)
return True
except ValueError:
return False
assert valid_job_id(job_id), "job_id must be the UUID from the trigger response" Try / catch
except httpx.HTTPStatusError as e:
if e.response.status_code == 404:
stop_polling() # job unknown; re-trigger rather than retry forever
raise Prevention
- Persist the trigger response's job_id immediately (keyed by user and kind)
- Poll the status route matching the trigger route family
- UUID.parse job ids before using them
When it happens
Trigger: GET /{user_id}/dream/{job_id}/status with a job_id that was never issued, was issued for a different job kind (e.g. a nightly or rebuild job id), was truncated/copied incorrectly, or whose status record expired or was cleared from storage.
Common situations: Polling with a job_id from a different endpoint family (nightly vs dream_pass); losing the job_id between the 202 response and the status poll (page reload, lost state); status store flushed/reset (Redis restart without persistence) so even valid jobs 404; typos from manual transcription of the UUID.
Related errors
- Execution not found
- job belongs to a different user
- Organization {org_id} not found
- Invitation {invitation_id} not found
- Invitation not found
AI-assisted analysis of Significant-Gravitas/AutoGPT@9c8bb5550f (2026-08-14).
Data as JSON: /api/errors/c572350146b59bb3.
Report an issue: GitHub.