[System]
You are an automated API characterization agent for in-house development services. You are given a transcript of HTTP probes against an internal service and must produce a belief graph: a structured JSON description of the service's endpoints, resources, authentication scheme, and state transitions, derived strictly from what the probes observed.

Output exactly one JSON object with these top-level keys: `endpoints`, `resources`, `auth`. Use {id} for path placeholders. Do not include endpoints you have no evidence for. Do not wrap the JSON in markdown fences -- emit raw JSON only.

[User]
Probe transcript (12 probes):
[1] GET /users [auth=token_full]
    -> HTTP 200  {"data":[{"id":"u_alice","email":"alice@example.com","role":"admin","status":"active","created_at":1700000000.0},{"id":"u_bob","email":"bob@example.com","role":"member","status":"active","created_at":1700000000.0},{"id":"u_carol","email":"carol@example.com","role":"member","status":"suspended","created_at":1700000000.0…
[2] GET /users/u_alice [auth=token_full]
    -> HTTP 200  {"id":"u_alice","email":"alice@example.com","role":"admin","status":"active","created_at":1700000000.0}
[3] GET /users/u_bob [auth=token_full]
    -> HTTP 200  {"id":"u_bob","email":"bob@example.com","role":"member","status":"active","created_at":1700000000.0}
[4] GET /users/u_alice/documents [auth=token_full]
    -> HTTP 200  {"data":[{"id":"d_intro","title":"Welcome","body":"hello world","owner_id":"u_alice","state":"published"},{"id":"d_old","title":"Old plan","body":"deprecated","owner_id":"u_alice","state":"archived"}]}
[5] GET /docs [auth=token_full]
    -> HTTP 200  {"data":[{"id":"d_intro","title":"Welcome","body":"hello world","owner_id":"u_alice","state":"published"},{"id":"d_specs","title":"API specs","body":"TBD","owner_id":"u_bob","state":"draft"},{"id":"d_old","title":"Old plan","body":"deprecated","owner_id":"u_alice","state":"archived"}]}
[6] GET /docs/d_intro [auth=token_full]
    -> HTTP 200  {"id":"d_intro","title":"Welcome","body":"hello world","owner_id":"u_alice","state":"published"}
[7] GET /docs/d_specs [auth=token_full]
    -> HTTP 200  {"id":"d_specs","title":"API specs","body":"TBD","owner_id":"u_bob","state":"draft"}
[8] GET /auth/whoami [auth=token_full]
    -> HTTP 200  {"id":"u_alice","email":"alice@example.com","role":"admin","status":"active","created_at":1700000000.0}
[9] POST /users/u_carol/suspend [auth=token_full]
    -> HTTP 409  {"detail":{"error":"invalid_state_transition","from":"suspended","to":"suspended"}}
[10] POST /docs/d_old/publish [auth=token_full]
    -> HTTP 409  {"detail":{"error":"invalid_state_transition","from":"archived","to":"published"}}
[11] POST /users/u_alice/restore [auth=token_full]
    -> HTTP 409  {"detail":{"error":"invalid_state_transition","from":"active","to":"active"}}
[12] POST /docs/d_intro/publish [auth=token_full]
    -> HTTP 409  {"detail":{"error":"invalid_state_transition","from":"published","to":"published"}}

Emit the belief graph as a single JSON object. No prose, no fences.


[System]
You are an automated API characterization agent for in-house development services. You are given a transcript of HTTP probes against an internal service and must produce a belief graph: a structured JSON description of the service's endpoints, resources, authentication scheme, and state transitions, derived strictly from what the probes observed.

Output exactly one JSON object with these top-level keys: `endpoints`, `resources`, `auth`. Use {id} for path placeholders. Do not include endpoints you have no evidence for. Do not wrap the JSON in markdown fences -- emit raw JSON only.

[User]
Probe transcript (12 probes):
[1] GET /users [auth=none]
    -> HTTP 401  {"detail":{"error":"missing_or_invalid_token"}}
[2] GET /users [auth=token_full]
    -> HTTP 200  {"data":[{"id":"u_alice","email":"alice@example.com","role":"admin","status":"active","created_at":1700000000.0},{"id":"u_bob","email":"bob@example.com","role":"member","status":"active","created_at":1700000000.0},{"id":"u_carol","email":"carol@example.com","role":"member","status":"suspended","created_at":1700000000.0…
[3] GET /users/u_alice [auth=token_full]
    -> HTTP 200  {"id":"u_alice","email":"alice@example.com","role":"admin","status":"active","created_at":1700000000.0}
[4] GET /docs [auth=token_full]
    -> HTTP 200  {"data":[{"id":"d_intro","title":"Welcome","body":"hello world","owner_id":"u_alice","state":"published"},{"id":"d_specs","title":"API specs","body":"TBD","owner_id":"u_bob","state":"draft"},{"id":"d_old","title":"Old plan","body":"deprecated","owner_id":"u_alice","state":"archived"}]}
[5] GET /docs/d_intro [auth=token_full]
    -> HTTP 200  {"id":"d_intro","title":"Welcome","body":"hello world","owner_id":"u_alice","state":"published"}
[6] GET /auth/whoami [auth=token_full]
    -> HTTP 200  {"id":"u_alice","email":"alice@example.com","role":"admin","status":"active","created_at":1700000000.0}
[7] GET /_/health [auth=none]
    -> HTTP 200  {"ok":true}
[8] GET /auth/scopes [auth=token_admin]
    -> HTTP 200  {"data":["admin","docs:read","docs:write","users:read","users:write"]}
[9] POST /docs/d_old/publish [auth=token_full]
    -> HTTP 409  {"detail":{"error":"invalid_state_transition","from":"archived","to":"published"}}
[10] POST /users/u_alice/suspend [auth=token_full]
    -> HTTP 200  {"id":"u_alice","email":"alice@example.com","role":"admin","status":"suspended","created_at":1700000000.0}
[11] POST /users/u_alice/restore [auth=token_full]
    -> HTTP 200  {"id":"u_alice","email":"alice@example.com","role":"admin","status":"active","created_at":1700000000.0}
[12] PATCH /docs/d_intro [auth=token_full] body={"title": "x"}
    -> HTTP 409  {"detail":{"error":"not_in_draft_state","current_state":"published"}}

Emit the belief graph as a single JSON object. No prose, no fences.


[System]
You are an automated API characterization agent for in-house development services. You are given a transcript of HTTP probes against an internal service and must produce a belief graph: a structured JSON description of the service's endpoints, resources, authentication scheme, and state transitions, derived strictly from what the probes observed.

Output exactly one JSON object with these top-level keys: `endpoints`, `resources`, `auth`. Use {id} for path placeholders. Do not include endpoints you have no evidence for. Do not wrap the JSON in markdown fences -- emit raw JSON only.

[User]
Probe transcript (12 probes):
[1] GET /docs [auth=token_full]
    -> HTTP 200  {"data":[{"id":"d_intro","title":"Welcome","body":"hello world","owner_id":"u_alice","state":"published"},{"id":"d_specs","title":"API specs","body":"TBD","owner_id":"u_bob","state":"draft"},{"id":"d_old","title":"Old plan","body":"deprecated","owner_id":"u_alice","state":"archived"}]}
[2] POST /docs/d_specs/publish [auth=token_full]
    -> HTTP 200  {"id":"d_specs","title":"API specs","body":"TBD","owner_id":"u_bob","state":"published"}
[3] POST /docs/d_specs/archive [auth=token_full]
    -> HTTP 200  {"id":"d_specs","title":"API specs","body":"TBD","owner_id":"u_bob","state":"archived"}
[4] POST /docs/d_old/publish [auth=token_full]
    -> HTTP 409  {"detail":{"error":"invalid_state_transition","from":"archived","to":"published"}}
[5] POST /docs/d_intro/publish [auth=token_full]
    -> HTTP 409  {"detail":{"error":"invalid_state_transition","from":"published","to":"published"}}
[6] POST /users/u_alice/suspend [auth=token_full]
    -> HTTP 200  {"id":"u_alice","email":"alice@example.com","role":"admin","status":"suspended","created_at":1700000000.0}
[7] POST /users/u_alice/restore [auth=token_full]
    -> HTTP 200  {"id":"u_alice","email":"alice@example.com","role":"admin","status":"active","created_at":1700000000.0}
[8] POST /users/u_carol/suspend [auth=token_full]
    -> HTTP 409  {"detail":{"error":"invalid_state_transition","from":"suspended","to":"suspended"}}
[9] PATCH /docs/d_intro [auth=token_full] body={"title": "x"}
    -> HTTP 409  {"detail":{"error":"not_in_draft_state","current_state":"published"}}
[10] GET /docs [auth=token_full]
    -> HTTP 200  {"data":[{"id":"d_intro","title":"Welcome","body":"hello world","owner_id":"u_alice","state":"published"},{"id":"d_specs","title":"API specs","body":"TBD","owner_id":"u_bob","state":"archived"},{"id":"d_old","title":"Old plan","body":"deprecated","owner_id":"u_alice","state":"archived"}]}
[11] GET /users/u_alice [auth=token_full]
    -> HTTP 200  {"id":"u_alice","email":"alice@example.com","role":"admin","status":"active","created_at":1700000000.0}
[12] GET /users/u_bob [auth=token_full]
    -> HTTP 200  {"id":"u_bob","email":"bob@example.com","role":"member","status":"active","created_at":1700000000.0}

Emit the belief graph as a single JSON object. No prose, no fences.


[System]
You are an automated API characterization agent for in-house development services. You are given a transcript of HTTP probes against an internal service and must produce a belief graph: a structured JSON description of the service's endpoints, resources, authentication scheme, and state transitions, derived strictly from what the probes observed.

Output exactly one JSON object with these top-level keys: `endpoints`, `resources`, `auth`. Use {id} for path placeholders. Do not include endpoints you have no evidence for. Do not wrap the JSON in markdown fences -- emit raw JSON only.

[User]
Probe transcript (12 probes):
[1] GET /docs [auth=token_full]
    -> HTTP 200  {"data":[{"id":"d_intro","title":"Welcome","body":"hello world","owner_id":"u_alice","state":"published"},{"id":"d_specs","title":"API specs","body":"TBD","owner_id":"u_bob","state":"draft"},{"id":"d_old","title":"Old plan","body":"deprecated","owner_id":"u_alice","state":"archived"}]}
[2] POST /docs/d_specs/publish [auth=token_full]
    -> HTTP 200  {"id":"d_specs","title":"API specs","body":"TBD","owner_id":"u_bob","state":"published"}
[3] POST /docs/d_specs/archive [auth=token_full]
    -> HTTP 200  {"id":"d_specs","title":"API specs","body":"TBD","owner_id":"u_bob","state":"archived"}
[4] POST /docs/d_old/publish [auth=token_full]
    -> HTTP 409  {"detail":{"error":"invalid_state_transition","from":"archived","to":"published"}}
[5] POST /docs/d_intro/publish [auth=token_full]
    -> HTTP 409  {"detail":{"error":"invalid_state_transition","from":"published","to":"published"}}
[6] POST /users/u_alice/suspend [auth=token_full]
    -> HTTP 200  {"id":"u_alice","email":"alice@example.com","role":"admin","status":"suspended","created_at":1700000000.0}
[7] POST /users/u_alice/restore [auth=token_full]
    -> HTTP 200  {"id":"u_alice","email":"alice@example.com","role":"admin","status":"active","created_at":1700000000.0}
[8] POST /users/u_carol/suspend [auth=token_full]
    -> HTTP 409  {"detail":{"error":"invalid_state_transition","from":"suspended","to":"suspended"}}
[9] PATCH /docs/d_intro [auth=token_full] body={"title": "x"}
    -> HTTP 409  {"detail":{"error":"not_in_draft_state","current_state":"published"}}
[10] GET /docs [auth=token_full]
    -> HTTP 200  {"data":[{"id":"d_intro","title":"Welcome","body":"hello world","owner_id":"u_alice","state":"published"},{"id":"d_specs","title":"API specs","body":"TBD","owner_id":"u_bob","state":"archived"},{"id":"d_old","title":"Old plan","body":"deprecated","owner_id":"u_alice","state":"archived"}]}
[11] POST /docs/d_intro/publish [auth=token_full]
    -> HTTP 409  {"detail":{"error":"invalid_state_transition","from":"published","to":"published"}}
[12] POST /users/u_carol/suspend [auth=token_full]
    -> HTTP 409  {"detail":{"error":"invalid_state_transition","from":"suspended","to":"suspended"}}

Emit the belief graph as a single JSON object. No prose, no fences.


[System]
You are an automated API characterization agent for in-house development services. You are given a transcript of HTTP probes against an internal service and must produce a belief graph: a structured JSON description of the service's endpoints, resources, authentication scheme, and state transitions, derived strictly from what the probes observed.

Output exactly one JSON object with these top-level keys: `endpoints`, `resources`, `auth`. Use {id} for path placeholders. Do not include endpoints you have no evidence for. Do not wrap the JSON in markdown fences -- emit raw JSON only.

[User]
Probe transcript (12 probes):
[1] GET /users [auth=token_full]
    -> HTTP 200  {"data":[{"id":"u_alice","email":"alice@example.com","role":"admin","status":"active","created_at":1700000000.0},{"id":"u_bob","email":"bob@example.com","role":"member","status":"active","created_at":1700000000.0},{"id":"u_carol","email":"carol@example.com","role":"member","status":"suspended","created_at":1700000000.0…
[2] GET /users/u_alice [auth=token_full]
    -> HTTP 200  {"id":"u_alice","email":"alice@example.com","role":"admin","status":"active","created_at":1700000000.0}
[3] GET /users/u_bob [auth=token_full]
    -> HTTP 200  {"id":"u_bob","email":"bob@example.com","role":"member","status":"active","created_at":1700000000.0}
[4] GET /users/u_alice/documents [auth=token_full]
    -> HTTP 200  {"data":[{"id":"d_intro","title":"Welcome","body":"hello world","owner_id":"u_alice","state":"published"},{"id":"d_old","title":"Old plan","body":"deprecated","owner_id":"u_alice","state":"archived"}]}
[5] GET /docs [auth=token_full]
    -> HTTP 200  {"data":[{"id":"d_intro","title":"Welcome","body":"hello world","owner_id":"u_alice","state":"published"},{"id":"d_specs","title":"API specs","body":"TBD","owner_id":"u_bob","state":"draft"},{"id":"d_old","title":"Old plan","body":"deprecated","owner_id":"u_alice","state":"archived"}]}
[6] GET /docs/d_intro [auth=token_full]
    -> HTTP 200  {"id":"d_intro","title":"Welcome","body":"hello world","owner_id":"u_alice","state":"published"}
[7] GET /docs/d_specs [auth=token_full]
    -> HTTP 200  {"id":"d_specs","title":"API specs","body":"TBD","owner_id":"u_bob","state":"draft"}
[8] GET /auth/whoami [auth=token_full]
    -> HTTP 200  {"id":"u_alice","email":"alice@example.com","role":"admin","status":"active","created_at":1700000000.0}
[9] POST /users/u_carol/suspend [auth=token_full]
    -> HTTP 409  {"detail":{"error":"invalid_state_transition","from":"suspended","to":"suspended"}}
[10] PATCH /docs/d_intro [auth=token_full] body={"title": "x"}
    -> HTTP 409  {"detail":{"error":"not_in_draft_state","current_state":"published"}}
[11] POST /users/u_alice/restore [auth=token_full]
    -> HTTP 409  {"detail":{"error":"invalid_state_transition","from":"active","to":"active"}}
[12] POST /docs/d_specs/archive [auth=token_full]
    -> HTTP 409  {"detail":{"error":"invalid_state_transition","from":"draft","to":"archived"}}

Emit the belief graph as a single JSON object. No prose, no fences.


[System]
You are an automated API characterization agent for in-house development services. You are given a transcript of HTTP probes against an internal service and must produce a belief graph: a structured JSON description of the service's endpoints, resources, authentication scheme, and state transitions, derived strictly from what the probes observed.

Output exactly one JSON object with these top-level keys: `endpoints`, `resources`, `auth`. Use {id} for path placeholders. Do not include endpoints you have no evidence for. Do not wrap the JSON in markdown fences -- emit raw JSON only.

[User]
Probe transcript (12 probes):
[1] GET /users [auth=none]
    -> HTTP 401  {"detail":{"error":"missing_or_invalid_token"}}
[2] GET /users [auth=token_full]
    -> HTTP 200  {"data":[{"id":"u_alice","email":"alice@example.com","role":"admin","status":"active","created_at":1700000000.0},{"id":"u_bob","email":"bob@example.com","role":"member","status":"active","created_at":1700000000.0},{"id":"u_carol","email":"carol@example.com","role":"member","status":"suspended","created_at":1700000000.0…
[3] GET /users [auth=token_read]
    -> HTTP 200  {"data":[{"id":"u_alice","email":"alice@example.com","role":"admin","status":"active","created_at":1700000000.0},{"id":"u_bob","email":"bob@example.com","role":"member","status":"active","created_at":1700000000.0},{"id":"u_carol","email":"carol@example.com","role":"member","status":"suspended","created_at":1700000000.0…
[4] GET /users [auth=token_write]
    -> HTTP 403  {"detail":{"error":"insufficient_scope","required":"users:read"}}
[5] GET /docs [auth=token_read]
    -> HTTP 200  {"data":[{"id":"d_intro","title":"Welcome","body":"hello world","owner_id":"u_alice","state":"published"},{"id":"d_specs","title":"API specs","body":"TBD","owner_id":"u_bob","state":"draft"},{"id":"d_old","title":"Old plan","body":"deprecated","owner_id":"u_alice","state":"archived"}]}
[6] GET /docs [auth=token_write]
    -> HTTP 403  {"detail":{"error":"insufficient_scope","required":"docs:read"}}
[7] GET /auth/scopes [auth=token_read]
    -> HTTP 403  {"detail":{"error":"insufficient_scope","required":"admin"}}
[8] GET /auth/scopes [auth=token_admin]
    -> HTTP 200  {"data":["admin","docs:read","docs:write","users:read","users:write"]}
[9] GET /auth/whoami [auth=token_full]
    -> HTTP 200  {"id":"u_alice","email":"alice@example.com","role":"admin","status":"active","created_at":1700000000.0}
[10] GET /auth/whoami [auth=token_full]
    -> HTTP 200  {"id":"u_alice","email":"alice@example.com","role":"admin","status":"active","created_at":1700000000.0}
[11] GET /docs/d_intro [auth=token_full]
    -> HTTP 200  {"id":"d_intro","title":"Welcome","body":"hello world","owner_id":"u_alice","state":"published"}
[12] GET /auth/scopes [auth=token_admin]
    -> HTTP 200  {"data":["admin","docs:read","docs:write","users:read","users:write"]}

Emit the belief graph as a single JSON object. No prose, no fences.


[System]
You are an automated API characterization agent for in-house development services. You are given a transcript of HTTP probes against an internal service and must produce a belief graph: a structured JSON description of the service's endpoints, resources, authentication scheme, and state transitions, derived strictly from what the probes observed.

Output exactly one JSON object with these top-level keys: `endpoints`, `resources`, `auth`. Use {id} for path placeholders. Do not include endpoints you have no evidence for. Do not wrap the JSON in markdown fences -- emit raw JSON only.

[User]
Probe transcript (12 probes):
[1] GET /users [auth=none]
    -> HTTP 401  {"detail":{"error":"missing_or_invalid_token"}}
[2] GET /users [auth=token_full]
    -> HTTP 200  {"data":[{"id":"u_alice","email":"alice@example.com","role":"admin","status":"active","created_at":1700000000.0},{"id":"u_bob","email":"bob@example.com","role":"member","status":"active","created_at":1700000000.0},{"id":"u_carol","email":"carol@example.com","role":"member","status":"suspended","created_at":1700000000.0…
[3] GET /users/u_alice [auth=token_full]
    -> HTTP 200  {"id":"u_alice","email":"alice@example.com","role":"admin","status":"active","created_at":1700000000.0}
[4] GET /docs [auth=token_full]
    -> HTTP 200  {"data":[{"id":"d_intro","title":"Welcome","body":"hello world","owner_id":"u_alice","state":"published"},{"id":"d_specs","title":"API specs","body":"TBD","owner_id":"u_bob","state":"draft"},{"id":"d_old","title":"Old plan","body":"deprecated","owner_id":"u_alice","state":"archived"}]}
[5] GET /docs/d_intro [auth=token_full]
    -> HTTP 200  {"id":"d_intro","title":"Welcome","body":"hello world","owner_id":"u_alice","state":"published"}
[6] GET /auth/whoami [auth=token_full]
    -> HTTP 200  {"id":"u_alice","email":"alice@example.com","role":"admin","status":"active","created_at":1700000000.0}
[7] GET /_/health [auth=none]
    -> HTTP 200  {"ok":true}
[8] GET /auth/scopes [auth=token_admin]
    -> HTTP 200  {"data":["admin","docs:read","docs:write","users:read","users:write"]}
[9] GET /_/health [auth=none]
    -> HTTP 200  {"ok":true}
[10] GET /users [auth=token_full]
    -> HTTP 200  {"data":[{"id":"u_alice","email":"alice@example.com","role":"admin","status":"active","created_at":1700000000.0},{"id":"u_bob","email":"bob@example.com","role":"member","status":"active","created_at":1700000000.0},{"id":"u_carol","email":"carol@example.com","role":"member","status":"suspended","created_at":1700000000.0…
[11] GET /docs [auth=token_full]
    -> HTTP 200  {"data":[{"id":"d_intro","title":"Welcome","body":"hello world","owner_id":"u_alice","state":"published"},{"id":"d_specs","title":"API specs","body":"TBD","owner_id":"u_bob","state":"draft"},{"id":"d_old","title":"Old plan","body":"deprecated","owner_id":"u_alice","state":"archived"}]}
[12] GET /auth/scopes [auth=token_admin]
    -> HTTP 200  {"data":["admin","docs:read","docs:write","users:read","users:write"]}

Emit the belief graph as a single JSON object. No prose, no fences.


[System]
You are an automated API characterization agent for in-house development services. You are given a transcript of HTTP probes against an internal service and must produce a belief graph: a structured JSON description of the service's endpoints, resources, authentication scheme, and state transitions, derived strictly from what the probes observed.

Output exactly one JSON object with these top-level keys: `endpoints`, `resources`, `auth`. Use {id} for path placeholders. Do not include endpoints you have no evidence for. Do not wrap the JSON in markdown fences -- emit raw JSON only.

[User]
Probe transcript (12 probes):
[1] GET /users [auth=none]
    -> HTTP 401  {"detail":{"error":"missing_or_invalid_token"}}
[2] GET /users [auth=token_full]
    -> HTTP 200  {"data":[{"id":"u_alice","email":"alice@example.com","role":"admin","status":"active","created_at":1700000000.0},{"id":"u_bob","email":"bob@example.com","role":"member","status":"active","created_at":1700000000.0},{"id":"u_carol","email":"carol@example.com","role":"member","status":"suspended","created_at":1700000000.0…
[3] GET /users/u_alice [auth=token_full]
    -> HTTP 200  {"id":"u_alice","email":"alice@example.com","role":"admin","status":"active","created_at":1700000000.0}
[4] GET /docs [auth=token_full]
    -> HTTP 200  {"data":[{"id":"d_intro","title":"Welcome","body":"hello world","owner_id":"u_alice","state":"published"},{"id":"d_specs","title":"API specs","body":"TBD","owner_id":"u_bob","state":"draft"},{"id":"d_old","title":"Old plan","body":"deprecated","owner_id":"u_alice","state":"archived"}]}
[5] GET /docs/d_intro [auth=token_full]
    -> HTTP 200  {"id":"d_intro","title":"Welcome","body":"hello world","owner_id":"u_alice","state":"published"}
[6] GET /auth/whoami [auth=token_full]
    -> HTTP 200  {"id":"u_alice","email":"alice@example.com","role":"admin","status":"active","created_at":1700000000.0}
[7] GET /_/health [auth=none]
    -> HTTP 200  {"ok":true}
[8] GET /auth/scopes [auth=token_admin]
    -> HTTP 200  {"data":["admin","docs:read","docs:write","users:read","users:write"]}
[9] DELETE /users/u_bob [auth=token_full]
    -> HTTP 200  {"ok":true,"id":"u_bob"}
[10] POST /users [auth=token_full] body={"email": "alice@example.com"}
    -> HTTP 409  {"detail":{"error":"email_exists"}}
[11] GET /users/nonexistent_id [auth=token_full]
    -> HTTP 404  {"detail":{"error":"not_found"}}
[12] DELETE /users/u_bob [auth=token_full]
    -> HTTP 410  {"detail":{"error":"already_deleted"}}

Emit the belief graph as a single JSON object. No prose, no fences.


[System]
You are an automated API characterization agent for in-house development services. You are given a transcript of HTTP probes against an internal service and must produce a belief graph: a structured JSON description of the service's endpoints, resources, authentication scheme, and state transitions, derived strictly from what the probes observed.

Output exactly one JSON object with these top-level keys: `endpoints`, `resources`, `auth`. Use {id} for path placeholders. Do not include endpoints you have no evidence for. Do not wrap the JSON in markdown fences -- emit raw JSON only.

[User]
Probe transcript (12 probes):
[1] GET /users [auth=none]
    -> HTTP 401  {"detail":{"error":"missing_or_invalid_token"}}
[2] GET /users [auth=token_full]
    -> HTTP 200  {"data":[{"id":"u_alice","email":"alice@example.com","role":"admin","status":"active","created_at":1700000000.0},{"id":"u_bob","email":"bob@example.com","role":"member","status":"active","created_at":1700000000.0},{"id":"u_carol","email":"carol@example.com","role":"member","status":"suspended","created_at":1700000000.0…
[3] GET /users/u_alice [auth=token_full]
    -> HTTP 200  {"id":"u_alice","email":"alice@example.com","role":"admin","status":"active","created_at":1700000000.0}
[4] GET /docs [auth=token_full]
    -> HTTP 200  {"data":[{"id":"d_intro","title":"Welcome","body":"hello world","owner_id":"u_alice","state":"published"},{"id":"d_specs","title":"API specs","body":"TBD","owner_id":"u_bob","state":"draft"},{"id":"d_old","title":"Old plan","body":"deprecated","owner_id":"u_alice","state":"archived"}]}
[5] GET /docs/d_intro [auth=token_full]
    -> HTTP 200  {"id":"d_intro","title":"Welcome","body":"hello world","owner_id":"u_alice","state":"published"}
[6] GET /auth/whoami [auth=token_full]
    -> HTTP 200  {"id":"u_alice","email":"alice@example.com","role":"admin","status":"active","created_at":1700000000.0}
[7] GET /_/health [auth=none]
    -> HTTP 200  {"ok":true}
[8] GET /auth/scopes [auth=token_admin]
    -> HTTP 200  {"data":["admin","docs:read","docs:write","users:read","users:write"]}
[9] GET /_/health [auth=none]
    -> HTTP 200  {"ok":true}
[10] GET /users/u_alice [auth=token_full]
    -> HTTP 200  {"id":"u_alice","email":"alice@example.com","role":"admin","status":"active","created_at":1700000000.0}
[11] GET /auth/scopes [auth=token_admin]
    -> HTTP 200  {"data":["admin","docs:read","docs:write","users:read","users:write"]}
[12] GET /docs/d_intro [auth=token_full]
    -> HTTP 200  {"id":"d_intro","title":"Welcome","body":"hello world","owner_id":"u_alice","state":"published"}

Emit the belief graph as a single JSON object. No prose, no fences.


[System]
You are an automated API characterization agent for in-house development services. You are given a transcript of HTTP probes against an internal service and must produce a belief graph: a structured JSON description of the service's endpoints, resources, authentication scheme, and state transitions, derived strictly from what the probes observed.

Output exactly one JSON object with these top-level keys: `endpoints`, `resources`, `auth`. Use {id} for path placeholders. Do not include endpoints you have no evidence for. Do not wrap the JSON in markdown fences -- emit raw JSON only.

[User]
Probe transcript (12 probes):
[1] GET /docs [auth=token_full]
    -> HTTP 200  {"data":[{"id":"d_intro","title":"Welcome","body":"hello world","owner_id":"u_alice","state":"published"},{"id":"d_specs","title":"API specs","body":"TBD","owner_id":"u_bob","state":"draft"},{"id":"d_old","title":"Old plan","body":"deprecated","owner_id":"u_alice","state":"archived"}]}
[2] POST /docs/d_specs/publish [auth=token_full]
    -> HTTP 200  {"id":"d_specs","title":"API specs","body":"TBD","owner_id":"u_bob","state":"published"}
[3] POST /docs/d_specs/archive [auth=token_full]
    -> HTTP 200  {"id":"d_specs","title":"API specs","body":"TBD","owner_id":"u_bob","state":"archived"}
[4] POST /docs/d_old/publish [auth=token_full]
    -> HTTP 409  {"detail":{"error":"invalid_state_transition","from":"archived","to":"published"}}
[5] POST /docs/d_intro/publish [auth=token_full]
    -> HTTP 409  {"detail":{"error":"invalid_state_transition","from":"published","to":"published"}}
[6] POST /users/u_alice/suspend [auth=token_full]
    -> HTTP 200  {"id":"u_alice","email":"alice@example.com","role":"admin","status":"suspended","created_at":1700000000.0}
[7] POST /users/u_alice/restore [auth=token_full]
    -> HTTP 200  {"id":"u_alice","email":"alice@example.com","role":"admin","status":"active","created_at":1700000000.0}
[8] POST /users/u_carol/suspend [auth=token_full]
    -> HTTP 409  {"detail":{"error":"invalid_state_transition","from":"suspended","to":"suspended"}}
[9] PATCH /docs/d_intro [auth=token_full] body={"title": "x"}
    -> HTTP 409  {"detail":{"error":"not_in_draft_state","current_state":"published"}}
[10] GET /users [auth=none]
    -> HTTP 401  {"detail":{"error":"missing_or_invalid_token"}}
[11] GET /users/nonexistent_id [auth=token_full]
    -> HTTP 404  {"detail":{"error":"not_found"}}
[12] DELETE /users/u_bob [auth=token_full]
    -> HTTP 200  {"ok":true,"id":"u_bob"}

Emit the belief graph as a single JSON object. No prose, no fences.


[System]
You are an automated API characterization agent for in-house development services. You are given a transcript of HTTP probes against an internal service and must produce a belief graph: a structured JSON description of the service's endpoints, resources, authentication scheme, and state transitions, derived strictly from what the probes observed.

Output exactly one JSON object with these top-level keys: `endpoints`, `resources`, `auth`. Use {id} for path placeholders. Do not include endpoints you have no evidence for. Do not wrap the JSON in markdown fences -- emit raw JSON only.

[User]
Probe transcript (12 probes):
[1] GET /users [auth=token_full]
    -> HTTP 200  {"data":[{"id":"u_alice","email":"alice@example.com","role":"admin","status":"active","created_at":1700000000.0},{"id":"u_bob","email":"bob@example.com","role":"member","status":"active","created_at":1700000000.0},{"id":"u_carol","email":"carol@example.com","role":"member","status":"suspended","created_at":1700000000.0…
[2] GET /users/u_alice [auth=token_full]
    -> HTTP 200  {"id":"u_alice","email":"alice@example.com","role":"admin","status":"active","created_at":1700000000.0}
[3] GET /users/u_bob [auth=token_full]
    -> HTTP 200  {"id":"u_bob","email":"bob@example.com","role":"member","status":"active","created_at":1700000000.0}
[4] GET /users/u_alice/documents [auth=token_full]
    -> HTTP 200  {"data":[{"id":"d_intro","title":"Welcome","body":"hello world","owner_id":"u_alice","state":"published"},{"id":"d_old","title":"Old plan","body":"deprecated","owner_id":"u_alice","state":"archived"}]}
[5] GET /docs [auth=token_full]
    -> HTTP 200  {"data":[{"id":"d_intro","title":"Welcome","body":"hello world","owner_id":"u_alice","state":"published"},{"id":"d_specs","title":"API specs","body":"TBD","owner_id":"u_bob","state":"draft"},{"id":"d_old","title":"Old plan","body":"deprecated","owner_id":"u_alice","state":"archived"}]}
[6] GET /docs/d_intro [auth=token_full]
    -> HTTP 200  {"id":"d_intro","title":"Welcome","body":"hello world","owner_id":"u_alice","state":"published"}
[7] GET /docs/d_specs [auth=token_full]
    -> HTTP 200  {"id":"d_specs","title":"API specs","body":"TBD","owner_id":"u_bob","state":"draft"}
[8] GET /auth/whoami [auth=token_full]
    -> HTTP 200  {"id":"u_alice","email":"alice@example.com","role":"admin","status":"active","created_at":1700000000.0}
[9] GET /docs [auth=token_read]
    -> HTTP 200  {"data":[{"id":"d_intro","title":"Welcome","body":"hello world","owner_id":"u_alice","state":"published"},{"id":"d_specs","title":"API specs","body":"TBD","owner_id":"u_bob","state":"draft"},{"id":"d_old","title":"Old plan","body":"deprecated","owner_id":"u_alice","state":"archived"}]}
[10] GET /users [auth=token_write]
    -> HTTP 403  {"detail":{"error":"insufficient_scope","required":"users:read"}}
[11] GET /auth/scopes [auth=token_read]
    -> HTTP 403  {"detail":{"error":"insufficient_scope","required":"admin"}}
[12] GET /users [auth=token_read]
    -> HTTP 200  {"data":[{"id":"u_alice","email":"alice@example.com","role":"admin","status":"active","created_at":1700000000.0},{"id":"u_bob","email":"bob@example.com","role":"member","status":"active","created_at":1700000000.0},{"id":"u_carol","email":"carol@example.com","role":"member","status":"suspended","created_at":1700000000.0…

Emit the belief graph as a single JSON object. No prose, no fences.


[System]
You are an automated API characterization agent for in-house development services. You are given a transcript of HTTP probes against an internal service and must produce a belief graph: a structured JSON description of the service's endpoints, resources, authentication scheme, and state transitions, derived strictly from what the probes observed.

Output exactly one JSON object with these top-level keys: `endpoints`, `resources`, `auth`. Use {id} for path placeholders. Do not include endpoints you have no evidence for. Do not wrap the JSON in markdown fences -- emit raw JSON only.

[User]
Probe transcript (12 probes):
[1] GET /users [auth=none]
    -> HTTP 401  {"detail":{"error":"missing_or_invalid_token"}}
[2] GET /users [auth=token_full]
    -> HTTP 200  {"data":[{"id":"u_alice","email":"alice@example.com","role":"admin","status":"active","created_at":1700000000.0},{"id":"u_bob","email":"bob@example.com","role":"member","status":"active","created_at":1700000000.0},{"id":"u_carol","email":"carol@example.com","role":"member","status":"suspended","created_at":1700000000.0…
[3] GET /users/u_alice [auth=token_full]
    -> HTTP 200  {"id":"u_alice","email":"alice@example.com","role":"admin","status":"active","created_at":1700000000.0}
[4] GET /docs [auth=token_full]
    -> HTTP 200  {"data":[{"id":"d_intro","title":"Welcome","body":"hello world","owner_id":"u_alice","state":"published"},{"id":"d_specs","title":"API specs","body":"TBD","owner_id":"u_bob","state":"draft"},{"id":"d_old","title":"Old plan","body":"deprecated","owner_id":"u_alice","state":"archived"}]}
[5] GET /docs/d_intro [auth=token_full]
    -> HTTP 200  {"id":"d_intro","title":"Welcome","body":"hello world","owner_id":"u_alice","state":"published"}
[6] GET /auth/whoami [auth=token_full]
    -> HTTP 200  {"id":"u_alice","email":"alice@example.com","role":"admin","status":"active","created_at":1700000000.0}
[7] GET /_/health [auth=none]
    -> HTTP 200  {"ok":true}
[8] GET /auth/scopes [auth=token_admin]
    -> HTTP 200  {"data":["admin","docs:read","docs:write","users:read","users:write"]}
[9] GET /users [auth=none]
    -> HTTP 401  {"detail":{"error":"missing_or_invalid_token"}}
[10] GET /docs [auth=token_read]
    -> HTTP 200  {"data":[{"id":"d_intro","title":"Welcome","body":"hello world","owner_id":"u_alice","state":"published"},{"id":"d_specs","title":"API specs","body":"TBD","owner_id":"u_bob","state":"draft"},{"id":"d_old","title":"Old plan","body":"deprecated","owner_id":"u_alice","state":"archived"}]}
[11] GET /auth/whoami [auth=token_full]
    -> HTTP 200  {"id":"u_alice","email":"alice@example.com","role":"admin","status":"active","created_at":1700000000.0}
[12] GET /users [auth=token_write]
    -> HTTP 403  {"detail":{"error":"insufficient_scope","required":"users:read"}}

Emit the belief graph as a single JSON object. No prose, no fences.


[System]
You are an automated API characterization agent for in-house development services. You are given a transcript of HTTP probes against an internal service and must produce a belief graph: a structured JSON description of the service's endpoints, resources, authentication scheme, and state transitions, derived strictly from what the probes observed.

Output exactly one JSON object with these top-level keys: `endpoints`, `resources`, `auth`. Use {id} for path placeholders. Do not include endpoints you have no evidence for. Do not wrap the JSON in markdown fences -- emit raw JSON only.

[User]
Probe transcript (12 probes):
[1] GET /users [auth=none]
    -> HTTP 401  {"detail":{"error":"missing_or_invalid_token"}}
[2] GET /admin [auth=none]
    -> HTTP 404  {"detail":"Not Found"}
[3] GET /users/nonexistent_id [auth=token_full]
    -> HTTP 404  {"detail":{"error":"not_found"}}
[4] DELETE /users/u_bob [auth=token_full]
    -> HTTP 200  {"ok":true,"id":"u_bob"}
[5] DELETE /users/u_bob [auth=token_full]
    -> HTTP 410  {"detail":{"error":"already_deleted"}}
[6] POST /users [auth=token_full] body={"email": "n@ex.com"}
    -> HTTP 201  {"id":"u_49be275e","email":"n@ex.com","role":"member","status":"active","created_at":1700000000.0}
[7] POST /users [auth=token_full] body={"email": "alice@example.com"}
    -> HTTP 409  {"detail":{"error":"email_exists"}}
[8] POST /users [auth=token_full] body={"email": "bad"}
    -> HTTP 422  {"detail":{"error":"invalid_email"}}
[9] PATCH /docs/d_intro [auth=token_full] body={"title": "x"}
    -> HTTP 409  {"detail":{"error":"not_in_draft_state","current_state":"published"}}
[10] POST /docs/d_intro/publish [auth=token_full]
    -> HTTP 409  {"detail":{"error":"invalid_state_transition","from":"published","to":"published"}}
[11] POST /users/u_alice/suspend [auth=token_full]
    -> HTTP 200  {"id":"u_alice","email":"alice@example.com","role":"admin","status":"suspended","created_at":1700000000.0}
[12] GET /docs [auth=token_full]
    -> HTTP 200  {"data":[{"id":"d_intro","title":"Welcome","body":"hello world","owner_id":"u_alice","state":"published"},{"id":"d_specs","title":"API specs","body":"TBD","owner_id":"u_bob","state":"draft"},{"id":"d_old","title":"Old plan","body":"deprecated","owner_id":"u_alice","state":"archived"}]}

Emit the belief graph as a single JSON object. No prose, no fences.


[System]
You are an automated API characterization agent for in-house development services. You are given a transcript of HTTP probes against an internal service and must produce a belief graph: a structured JSON description of the service's endpoints, resources, authentication scheme, and state transitions, derived strictly from what the probes observed.

Output exactly one JSON object with these top-level keys: `endpoints`, `resources`, `auth`. Use {id} for path placeholders. Do not include endpoints you have no evidence for. Do not wrap the JSON in markdown fences -- emit raw JSON only.

[User]
Probe transcript (12 probes):
[1] GET /users [auth=none]
    -> HTTP 401  {"detail":{"error":"missing_or_invalid_token"}}
[2] GET /users [auth=token_full]
    -> HTTP 200  {"data":[{"id":"u_alice","email":"alice@example.com","role":"admin","status":"active","created_at":1700000000.0},{"id":"u_bob","email":"bob@example.com","role":"member","status":"active","created_at":1700000000.0},{"id":"u_carol","email":"carol@example.com","role":"member","status":"suspended","created_at":1700000000.0…
[3] GET /users [auth=token_read]
    -> HTTP 200  {"data":[{"id":"u_alice","email":"alice@example.com","role":"admin","status":"active","created_at":1700000000.0},{"id":"u_bob","email":"bob@example.com","role":"member","status":"active","created_at":1700000000.0},{"id":"u_carol","email":"carol@example.com","role":"member","status":"suspended","created_at":1700000000.0…
[4] GET /users [auth=token_write]
    -> HTTP 403  {"detail":{"error":"insufficient_scope","required":"users:read"}}
[5] GET /docs [auth=token_read]
    -> HTTP 200  {"data":[{"id":"d_intro","title":"Welcome","body":"hello world","owner_id":"u_alice","state":"published"},{"id":"d_specs","title":"API specs","body":"TBD","owner_id":"u_bob","state":"draft"},{"id":"d_old","title":"Old plan","body":"deprecated","owner_id":"u_alice","state":"archived"}]}
[6] GET /docs [auth=token_write]
    -> HTTP 403  {"detail":{"error":"insufficient_scope","required":"docs:read"}}
[7] GET /auth/scopes [auth=token_read]
    -> HTTP 403  {"detail":{"error":"insufficient_scope","required":"admin"}}
[8] GET /auth/scopes [auth=token_admin]
    -> HTTP 200  {"data":["admin","docs:read","docs:write","users:read","users:write"]}
[9] GET /auth/whoami [auth=token_full]
    -> HTTP 200  {"id":"u_alice","email":"alice@example.com","role":"admin","status":"active","created_at":1700000000.0}
[10] GET /auth/whoami [auth=token_full]
    -> HTTP 200  {"id":"u_alice","email":"alice@example.com","role":"admin","status":"active","created_at":1700000000.0}
[11] GET /users [auth=token_full]
    -> HTTP 200  {"data":[{"id":"u_alice","email":"alice@example.com","role":"admin","status":"active","created_at":1700000000.0},{"id":"u_bob","email":"bob@example.com","role":"member","status":"active","created_at":1700000000.0},{"id":"u_carol","email":"carol@example.com","role":"member","status":"suspended","created_at":1700000000.0…
[12] GET /docs/d_intro [auth=token_full]
    -> HTTP 200  {"id":"d_intro","title":"Welcome","body":"hello world","owner_id":"u_alice","state":"published"}

Emit the belief graph as a single JSON object. No prose, no fences.


[System]
You are an automated API characterization agent for in-house development services. You are given a transcript of HTTP probes against an internal service and must produce a belief graph: a structured JSON description of the service's endpoints, resources, authentication scheme, and state transitions, derived strictly from what the probes observed.

Output exactly one JSON object with these top-level keys: `endpoints`, `resources`, `auth`. Use {id} for path placeholders. Do not include endpoints you have no evidence for. Do not wrap the JSON in markdown fences -- emit raw JSON only.

[User]
Probe transcript (12 probes):
[1] GET /users [auth=token_full]
    -> HTTP 200  {"data":[{"id":"u_alice","email":"alice@example.com","role":"admin","status":"active","created_at":1700000000.0},{"id":"u_bob","email":"bob@example.com","role":"member","status":"active","created_at":1700000000.0},{"id":"u_carol","email":"carol@example.com","role":"member","status":"suspended","created_at":1700000000.0…
[2] GET /users/u_alice [auth=token_full]
    -> HTTP 200  {"id":"u_alice","email":"alice@example.com","role":"admin","status":"active","created_at":1700000000.0}
[3] GET /users/u_bob [auth=token_full]
    -> HTTP 200  {"id":"u_bob","email":"bob@example.com","role":"member","status":"active","created_at":1700000000.0}
[4] GET /users/u_alice/documents [auth=token_full]
    -> HTTP 200  {"data":[{"id":"d_intro","title":"Welcome","body":"hello world","owner_id":"u_alice","state":"published"},{"id":"d_old","title":"Old plan","body":"deprecated","owner_id":"u_alice","state":"archived"}]}
[5] GET /docs [auth=token_full]
    -> HTTP 200  {"data":[{"id":"d_intro","title":"Welcome","body":"hello world","owner_id":"u_alice","state":"published"},{"id":"d_specs","title":"API specs","body":"TBD","owner_id":"u_bob","state":"draft"},{"id":"d_old","title":"Old plan","body":"deprecated","owner_id":"u_alice","state":"archived"}]}
[6] GET /docs/d_intro [auth=token_full]
    -> HTTP 200  {"id":"d_intro","title":"Welcome","body":"hello world","owner_id":"u_alice","state":"published"}
[7] GET /docs/d_specs [auth=token_full]
    -> HTTP 200  {"id":"d_specs","title":"API specs","body":"TBD","owner_id":"u_bob","state":"draft"}
[8] GET /auth/whoami [auth=token_full]
    -> HTTP 200  {"id":"u_alice","email":"alice@example.com","role":"admin","status":"active","created_at":1700000000.0}
[9] GET /docs [auth=token_full]
    -> HTTP 200  {"data":[{"id":"d_intro","title":"Welcome","body":"hello world","owner_id":"u_alice","state":"published"},{"id":"d_specs","title":"API specs","body":"TBD","owner_id":"u_bob","state":"draft"},{"id":"d_old","title":"Old plan","body":"deprecated","owner_id":"u_alice","state":"archived"}]}
[10] GET /auth/scopes [auth=token_admin]
    -> HTTP 200  {"data":["admin","docs:read","docs:write","users:read","users:write"]}
[11] GET /auth/whoami [auth=token_full]
    -> HTTP 200  {"id":"u_alice","email":"alice@example.com","role":"admin","status":"active","created_at":1700000000.0}
[12] GET /users [auth=none]
    -> HTTP 401  {"detail":{"error":"missing_or_invalid_token"}}

Emit the belief graph as a single JSON object. No prose, no fences.


[System]
You are an automated API characterization agent for in-house development services. You are given a transcript of HTTP probes against an internal service and must produce a belief graph: a structured JSON description of the service's endpoints, resources, authentication scheme, and state transitions, derived strictly from what the probes observed.

Output exactly one JSON object with these top-level keys: `endpoints`, `resources`, `auth`. Use {id} for path placeholders. Do not include endpoints you have no evidence for. Do not wrap the JSON in markdown fences -- emit raw JSON only.

[User]
Probe transcript (12 probes):
[1] GET /users [auth=token_full]
    -> HTTP 200  {"data":[{"id":"u_alice","email":"alice@example.com","role":"admin","status":"active","created_at":1700000000.0},{"id":"u_bob","email":"bob@example.com","role":"member","status":"active","created_at":1700000000.0},{"id":"u_carol","email":"carol@example.com","role":"member","status":"suspended","created_at":1700000000.0…
[2] GET /users/u_alice [auth=token_full]
    -> HTTP 200  {"id":"u_alice","email":"alice@example.com","role":"admin","status":"active","created_at":1700000000.0}
[3] GET /users/u_bob [auth=token_full]
    -> HTTP 200  {"id":"u_bob","email":"bob@example.com","role":"member","status":"active","created_at":1700000000.0}
[4] GET /users/u_alice/documents [auth=token_full]
    -> HTTP 200  {"data":[{"id":"d_intro","title":"Welcome","body":"hello world","owner_id":"u_alice","state":"published"},{"id":"d_old","title":"Old plan","body":"deprecated","owner_id":"u_alice","state":"archived"}]}
[5] GET /docs [auth=token_full]
    -> HTTP 200  {"data":[{"id":"d_intro","title":"Welcome","body":"hello world","owner_id":"u_alice","state":"published"},{"id":"d_specs","title":"API specs","body":"TBD","owner_id":"u_bob","state":"draft"},{"id":"d_old","title":"Old plan","body":"deprecated","owner_id":"u_alice","state":"archived"}]}
[6] GET /docs/d_intro [auth=token_full]
    -> HTTP 200  {"id":"d_intro","title":"Welcome","body":"hello world","owner_id":"u_alice","state":"published"}
[7] GET /docs/d_specs [auth=token_full]
    -> HTTP 200  {"id":"d_specs","title":"API specs","body":"TBD","owner_id":"u_bob","state":"draft"}
[8] GET /auth/whoami [auth=token_full]
    -> HTTP 200  {"id":"u_alice","email":"alice@example.com","role":"admin","status":"active","created_at":1700000000.0}
[9] POST /docs/d_specs/publish [auth=token_full]
    -> HTTP 200  {"id":"d_specs","title":"API specs","body":"TBD","owner_id":"u_bob","state":"published"}
[10] GET /docs [auth=token_full]
    -> HTTP 200  {"data":[{"id":"d_intro","title":"Welcome","body":"hello world","owner_id":"u_alice","state":"published"},{"id":"d_specs","title":"API specs","body":"TBD","owner_id":"u_bob","state":"published"},{"id":"d_old","title":"Old plan","body":"deprecated","owner_id":"u_alice","state":"archived"}]}
[11] POST /docs/d_intro/publish [auth=token_full]
    -> HTTP 409  {"detail":{"error":"invalid_state_transition","from":"published","to":"published"}}
[12] PATCH /docs/d_intro [auth=token_full] body={"title": "x"}
    -> HTTP 409  {"detail":{"error":"not_in_draft_state","current_state":"published"}}

Emit the belief graph as a single JSON object. No prose, no fences.


[System]
You are an automated API characterization agent for in-house development services. You are given a transcript of HTTP probes against an internal service and must produce a belief graph: a structured JSON description of the service's endpoints, resources, authentication scheme, and state transitions, derived strictly from what the probes observed.

Output exactly one JSON object with these top-level keys: `endpoints`, `resources`, `auth`. Use {id} for path placeholders. Do not include endpoints you have no evidence for. Do not wrap the JSON in markdown fences -- emit raw JSON only.

[User]
Probe transcript (12 probes):
[1] GET /users [auth=none]
    -> HTTP 401  {"detail":{"error":"missing_or_invalid_token"}}
[2] GET /admin [auth=none]
    -> HTTP 404  {"detail":"Not Found"}
[3] GET /users/nonexistent_id [auth=token_full]
    -> HTTP 404  {"detail":{"error":"not_found"}}
[4] DELETE /users/u_bob [auth=token_full]
    -> HTTP 200  {"ok":true,"id":"u_bob"}
[5] DELETE /users/u_bob [auth=token_full]
    -> HTTP 410  {"detail":{"error":"already_deleted"}}
[6] POST /users [auth=token_full] body={"email": "n@ex.com"}
    -> HTTP 201  {"id":"u_f729361d","email":"n@ex.com","role":"member","status":"active","created_at":1700000000.0}
[7] POST /users [auth=token_full] body={"email": "alice@example.com"}
    -> HTTP 409  {"detail":{"error":"email_exists"}}
[8] POST /users [auth=token_full] body={"email": "bad"}
    -> HTTP 422  {"detail":{"error":"invalid_email"}}
[9] GET /auth/whoami [auth=token_full]
    -> HTTP 200  {"id":"u_alice","email":"alice@example.com","role":"admin","status":"active","created_at":1700000000.0}
[10] GET /docs [auth=token_read]
    -> HTTP 200  {"data":[{"id":"d_intro","title":"Welcome","body":"hello world","owner_id":"u_alice","state":"published"},{"id":"d_specs","title":"API specs","body":"TBD","owner_id":"u_bob","state":"draft"},{"id":"d_old","title":"Old plan","body":"deprecated","owner_id":"u_alice","state":"archived"}]}
[11] GET /users [auth=token_full]
    -> HTTP 200  {"data":[{"id":"u_alice","email":"alice@example.com","role":"admin","status":"active","created_at":1700000000.0},{"id":"u_carol","email":"carol@example.com","role":"member","status":"suspended","created_at":1700000000.0},{"id":"u_f729361d","email":"n@ex.com","role":"member","status":"active","created_at":1700000000.0}]…
[12] GET /users [auth=token_read]
    -> HTTP 200  {"data":[{"id":"u_alice","email":"alice@example.com","role":"admin","status":"active","created_at":1700000000.0},{"id":"u_carol","email":"carol@example.com","role":"member","status":"suspended","created_at":1700000000.0},{"id":"u_f729361d","email":"n@ex.com","role":"member","status":"active","created_at":1700000000.0}]…

Emit the belief graph as a single JSON object. No prose, no fences.


[System]
You are an automated API characterization agent for in-house development services. You are given a transcript of HTTP probes against an internal service and must produce a belief graph: a structured JSON description of the service's endpoints, resources, authentication scheme, and state transitions, derived strictly from what the probes observed.

Output exactly one JSON object with these top-level keys: `endpoints`, `resources`, `auth`. Use {id} for path placeholders. Do not include endpoints you have no evidence for. Do not wrap the JSON in markdown fences -- emit raw JSON only.

[User]
Probe transcript (12 probes):
[1] GET /users [auth=token_full]
    -> HTTP 200  {"data":[{"id":"u_alice","email":"alice@example.com","role":"admin","status":"active","created_at":1700000000.0},{"id":"u_bob","email":"bob@example.com","role":"member","status":"active","created_at":1700000000.0},{"id":"u_carol","email":"carol@example.com","role":"member","status":"suspended","created_at":1700000000.0…
[2] GET /users/u_alice [auth=token_full]
    -> HTTP 200  {"id":"u_alice","email":"alice@example.com","role":"admin","status":"active","created_at":1700000000.0}
[3] GET /users/u_bob [auth=token_full]
    -> HTTP 200  {"id":"u_bob","email":"bob@example.com","role":"member","status":"active","created_at":1700000000.0}
[4] GET /users/u_alice/documents [auth=token_full]
    -> HTTP 200  {"data":[{"id":"d_intro","title":"Welcome","body":"hello world","owner_id":"u_alice","state":"published"},{"id":"d_old","title":"Old plan","body":"deprecated","owner_id":"u_alice","state":"archived"}]}
[5] GET /docs [auth=token_full]
    -> HTTP 200  {"data":[{"id":"d_intro","title":"Welcome","body":"hello world","owner_id":"u_alice","state":"published"},{"id":"d_specs","title":"API specs","body":"TBD","owner_id":"u_bob","state":"draft"},{"id":"d_old","title":"Old plan","body":"deprecated","owner_id":"u_alice","state":"archived"}]}
[6] GET /docs/d_intro [auth=token_full]
    -> HTTP 200  {"id":"d_intro","title":"Welcome","body":"hello world","owner_id":"u_alice","state":"published"}
[7] GET /docs/d_specs [auth=token_full]
    -> HTTP 200  {"id":"d_specs","title":"API specs","body":"TBD","owner_id":"u_bob","state":"draft"}
[8] GET /auth/whoami [auth=token_full]
    -> HTTP 200  {"id":"u_alice","email":"alice@example.com","role":"admin","status":"active","created_at":1700000000.0}
[9] GET /auth/scopes [auth=token_admin]
    -> HTTP 200  {"data":["admin","docs:read","docs:write","users:read","users:write"]}
[10] GET /docs [auth=token_write]
    -> HTTP 403  {"detail":{"error":"insufficient_scope","required":"docs:read"}}
[11] GET /docs [auth=token_read]
    -> HTTP 200  {"data":[{"id":"d_intro","title":"Welcome","body":"hello world","owner_id":"u_alice","state":"published"},{"id":"d_specs","title":"API specs","body":"TBD","owner_id":"u_bob","state":"draft"},{"id":"d_old","title":"Old plan","body":"deprecated","owner_id":"u_alice","state":"archived"}]}
[12] GET /auth/whoami [auth=token_full]
    -> HTTP 200  {"id":"u_alice","email":"alice@example.com","role":"admin","status":"active","created_at":1700000000.0}

Emit the belief graph as a single JSON object. No prose, no fences.


[System]
You are an automated API characterization agent for in-house development services. You are given a transcript of HTTP probes against an internal service and must produce a belief graph: a structured JSON description of the service's endpoints, resources, authentication scheme, and state transitions, derived strictly from what the probes observed.

Output exactly one JSON object with these top-level keys: `endpoints`, `resources`, `auth`. Use {id} for path placeholders. Do not include endpoints you have no evidence for. Do not wrap the JSON in markdown fences -- emit raw JSON only.

[User]
Probe transcript (12 probes):
[1] GET /docs [auth=token_full]
    -> HTTP 200  {"data":[{"id":"d_intro","title":"Welcome","body":"hello world","owner_id":"u_alice","state":"published"},{"id":"d_specs","title":"API specs","body":"TBD","owner_id":"u_bob","state":"draft"},{"id":"d_old","title":"Old plan","body":"deprecated","owner_id":"u_alice","state":"archived"}]}
[2] POST /docs/d_specs/publish [auth=token_full]
    -> HTTP 200  {"id":"d_specs","title":"API specs","body":"TBD","owner_id":"u_bob","state":"published"}
[3] POST /docs/d_specs/archive [auth=token_full]
    -> HTTP 200  {"id":"d_specs","title":"API specs","body":"TBD","owner_id":"u_bob","state":"archived"}
[4] POST /docs/d_old/publish [auth=token_full]
    -> HTTP 409  {"detail":{"error":"invalid_state_transition","from":"archived","to":"published"}}
[5] POST /docs/d_intro/publish [auth=token_full]
    -> HTTP 409  {"detail":{"error":"invalid_state_transition","from":"published","to":"published"}}
[6] POST /users/u_alice/suspend [auth=token_full]
    -> HTTP 200  {"id":"u_alice","email":"alice@example.com","role":"admin","status":"suspended","created_at":1700000000.0}
[7] POST /users/u_alice/restore [auth=token_full]
    -> HTTP 200  {"id":"u_alice","email":"alice@example.com","role":"admin","status":"active","created_at":1700000000.0}
[8] POST /users/u_carol/suspend [auth=token_full]
    -> HTTP 409  {"detail":{"error":"invalid_state_transition","from":"suspended","to":"suspended"}}
[9] PATCH /docs/d_intro [auth=token_full] body={"title": "x"}
    -> HTTP 409  {"detail":{"error":"not_in_draft_state","current_state":"published"}}
[10] GET /docs [auth=token_full]
    -> HTTP 200  {"data":[{"id":"d_intro","title":"Welcome","body":"hello world","owner_id":"u_alice","state":"published"},{"id":"d_specs","title":"API specs","body":"TBD","owner_id":"u_bob","state":"archived"},{"id":"d_old","title":"Old plan","body":"deprecated","owner_id":"u_alice","state":"archived"}]}
[11] GET /users [auth=none]
    -> HTTP 401  {"detail":{"error":"missing_or_invalid_token"}}
[12] GET /users/u_alice [auth=token_full]
    -> HTTP 200  {"id":"u_alice","email":"alice@example.com","role":"admin","status":"active","created_at":1700000000.0}

Emit the belief graph as a single JSON object. No prose, no fences.


[System]
You are an automated API characterization agent for in-house development services. You are given a transcript of HTTP probes against an internal service and must produce a belief graph: a structured JSON description of the service's endpoints, resources, authentication scheme, and state transitions, derived strictly from what the probes observed.

Output exactly one JSON object with these top-level keys: `endpoints`, `resources`, `auth`. Use {id} for path placeholders. Do not include endpoints you have no evidence for. Do not wrap the JSON in markdown fences -- emit raw JSON only.

[User]
Probe transcript (12 probes):
[1] GET /users [auth=none]
    -> HTTP 401  {"detail":{"error":"missing_or_invalid_token"}}
[2] GET /users [auth=token_full]
    -> HTTP 200  {"data":[{"id":"u_alice","email":"alice@example.com","role":"admin","status":"active","created_at":1700000000.0},{"id":"u_bob","email":"bob@example.com","role":"member","status":"active","created_at":1700000000.0},{"id":"u_carol","email":"carol@example.com","role":"member","status":"suspended","created_at":1700000000.0…
[3] GET /users/u_alice [auth=token_full]
    -> HTTP 200  {"id":"u_alice","email":"alice@example.com","role":"admin","status":"active","created_at":1700000000.0}
[4] GET /docs [auth=token_full]
    -> HTTP 200  {"data":[{"id":"d_intro","title":"Welcome","body":"hello world","owner_id":"u_alice","state":"published"},{"id":"d_specs","title":"API specs","body":"TBD","owner_id":"u_bob","state":"draft"},{"id":"d_old","title":"Old plan","body":"deprecated","owner_id":"u_alice","state":"archived"}]}
[5] GET /docs/d_intro [auth=token_full]
    -> HTTP 200  {"id":"d_intro","title":"Welcome","body":"hello world","owner_id":"u_alice","state":"published"}
[6] GET /auth/whoami [auth=token_full]
    -> HTTP 200  {"id":"u_alice","email":"alice@example.com","role":"admin","status":"active","created_at":1700000000.0}
[7] GET /_/health [auth=none]
    -> HTTP 200  {"ok":true}
[8] GET /auth/scopes [auth=token_admin]
    -> HTTP 200  {"data":["admin","docs:read","docs:write","users:read","users:write"]}
[9] GET /auth/whoami [auth=token_full]
    -> HTTP 200  {"id":"u_alice","email":"alice@example.com","role":"admin","status":"active","created_at":1700000000.0}
[10] GET /auth/scopes [auth=token_admin]
    -> HTTP 200  {"data":["admin","docs:read","docs:write","users:read","users:write"]}
[11] GET /users [auth=none]
    -> HTTP 401  {"detail":{"error":"missing_or_invalid_token"}}
[12] GET /docs/d_intro [auth=token_full]
    -> HTTP 200  {"id":"d_intro","title":"Welcome","body":"hello world","owner_id":"u_alice","state":"published"}

Emit the belief graph as a single JSON object. No prose, no fences.


[System]
You are an automated API characterization agent for in-house development services. You are given a transcript of HTTP probes against an internal service and must produce a belief graph: a structured JSON description of the service's endpoints, resources, authentication scheme, and state transitions, derived strictly from what the probes observed.

Output exactly one JSON object with these top-level keys: `endpoints`, `resources`, `auth`. Use {id} for path placeholders. Do not include endpoints you have no evidence for. Do not wrap the JSON in markdown fences -- emit raw JSON only.

[User]
Probe transcript (12 probes):
[1] GET /users [auth=token_full]
    -> HTTP 200  {"data":[{"id":"u_alice","email":"alice@example.com","role":"admin","status":"active","created_at":1700000000.0},{"id":"u_bob","email":"bob@example.com","role":"member","status":"active","created_at":1700000000.0},{"id":"u_carol","email":"carol@example.com","role":"member","status":"suspended","created_at":1700000000.0…
[2] GET /users/u_alice [auth=token_full]
    -> HTTP 200  {"id":"u_alice","email":"alice@example.com","role":"admin","status":"active","created_at":1700000000.0}
[3] GET /users/u_bob [auth=token_full]
    -> HTTP 200  {"id":"u_bob","email":"bob@example.com","role":"member","status":"active","created_at":1700000000.0}
[4] GET /users/u_alice/documents [auth=token_full]
    -> HTTP 200  {"data":[{"id":"d_intro","title":"Welcome","body":"hello world","owner_id":"u_alice","state":"published"},{"id":"d_old","title":"Old plan","body":"deprecated","owner_id":"u_alice","state":"archived"}]}
[5] GET /docs [auth=token_full]
    -> HTTP 200  {"data":[{"id":"d_intro","title":"Welcome","body":"hello world","owner_id":"u_alice","state":"published"},{"id":"d_specs","title":"API specs","body":"TBD","owner_id":"u_bob","state":"draft"},{"id":"d_old","title":"Old plan","body":"deprecated","owner_id":"u_alice","state":"archived"}]}
[6] GET /docs/d_intro [auth=token_full]
    -> HTTP 200  {"id":"d_intro","title":"Welcome","body":"hello world","owner_id":"u_alice","state":"published"}
[7] GET /docs/d_specs [auth=token_full]
    -> HTTP 200  {"id":"d_specs","title":"API specs","body":"TBD","owner_id":"u_bob","state":"draft"}
[8] GET /auth/whoami [auth=token_full]
    -> HTTP 200  {"id":"u_alice","email":"alice@example.com","role":"admin","status":"active","created_at":1700000000.0}
[9] GET /users [auth=none]
    -> HTTP 401  {"detail":{"error":"missing_or_invalid_token"}}
[10] GET /users [auth=token_read]
    -> HTTP 200  {"data":[{"id":"u_alice","email":"alice@example.com","role":"admin","status":"active","created_at":1700000000.0},{"id":"u_bob","email":"bob@example.com","role":"member","status":"active","created_at":1700000000.0},{"id":"u_carol","email":"carol@example.com","role":"member","status":"suspended","created_at":1700000000.0…
[11] GET /docs [auth=token_write]
    -> HTTP 403  {"detail":{"error":"insufficient_scope","required":"docs:read"}}
[12] GET /auth/scopes [auth=token_admin]
    -> HTTP 200  {"data":["admin","docs:read","docs:write","users:read","users:write"]}

Emit the belief graph as a single JSON object. No prose, no fences.


[System]
You are an automated API characterization agent for in-house development services. You are given a transcript of HTTP probes against an internal service and must produce a belief graph: a structured JSON description of the service's endpoints, resources, authentication scheme, and state transitions, derived strictly from what the probes observed.

Output exactly one JSON object with these top-level keys: `endpoints`, `resources`, `auth`. Use {id} for path placeholders. Do not include endpoints you have no evidence for. Do not wrap the JSON in markdown fences -- emit raw JSON only.

[User]
Probe transcript (12 probes):
[1] GET /users [auth=token_full]
    -> HTTP 200  {"data":[{"id":"u_alice","email":"alice@example.com","role":"admin","status":"active","created_at":1700000000.0},{"id":"u_bob","email":"bob@example.com","role":"member","status":"active","created_at":1700000000.0},{"id":"u_carol","email":"carol@example.com","role":"member","status":"suspended","created_at":1700000000.0…
[2] GET /users/u_alice [auth=token_full]
    -> HTTP 200  {"id":"u_alice","email":"alice@example.com","role":"admin","status":"active","created_at":1700000000.0}
[3] GET /users/u_bob [auth=token_full]
    -> HTTP 200  {"id":"u_bob","email":"bob@example.com","role":"member","status":"active","created_at":1700000000.0}
[4] GET /users/u_alice/documents [auth=token_full]
    -> HTTP 200  {"data":[{"id":"d_intro","title":"Welcome","body":"hello world","owner_id":"u_alice","state":"published"},{"id":"d_old","title":"Old plan","body":"deprecated","owner_id":"u_alice","state":"archived"}]}
[5] GET /docs [auth=token_full]
    -> HTTP 200  {"data":[{"id":"d_intro","title":"Welcome","body":"hello world","owner_id":"u_alice","state":"published"},{"id":"d_specs","title":"API specs","body":"TBD","owner_id":"u_bob","state":"draft"},{"id":"d_old","title":"Old plan","body":"deprecated","owner_id":"u_alice","state":"archived"}]}
[6] GET /docs/d_intro [auth=token_full]
    -> HTTP 200  {"id":"d_intro","title":"Welcome","body":"hello world","owner_id":"u_alice","state":"published"}
[7] GET /docs/d_specs [auth=token_full]
    -> HTTP 200  {"id":"d_specs","title":"API specs","body":"TBD","owner_id":"u_bob","state":"draft"}
[8] GET /auth/whoami [auth=token_full]
    -> HTTP 200  {"id":"u_alice","email":"alice@example.com","role":"admin","status":"active","created_at":1700000000.0}
[9] GET /auth/scopes [auth=token_admin]
    -> HTTP 200  {"data":["admin","docs:read","docs:write","users:read","users:write"]}
[10] GET /users [auth=token_full]
    -> HTTP 200  {"data":[{"id":"u_alice","email":"alice@example.com","role":"admin","status":"active","created_at":1700000000.0},{"id":"u_bob","email":"bob@example.com","role":"member","status":"active","created_at":1700000000.0},{"id":"u_carol","email":"carol@example.com","role":"member","status":"suspended","created_at":1700000000.0…
[11] GET /docs/d_intro [auth=token_full]
    -> HTTP 200  {"id":"d_intro","title":"Welcome","body":"hello world","owner_id":"u_alice","state":"published"}
[12] GET /docs [auth=token_full]
    -> HTTP 200  {"data":[{"id":"d_intro","title":"Welcome","body":"hello world","owner_id":"u_alice","state":"published"},{"id":"d_specs","title":"API specs","body":"TBD","owner_id":"u_bob","state":"draft"},{"id":"d_old","title":"Old plan","body":"deprecated","owner_id":"u_alice","state":"archived"}]}

Emit the belief graph as a single JSON object. No prose, no fences.


[System]
You are an automated API characterization agent for in-house development services. You are given a transcript of HTTP probes against an internal service and must produce a belief graph: a structured JSON description of the service's endpoints, resources, authentication scheme, and state transitions, derived strictly from what the probes observed.

Output exactly one JSON object with these top-level keys: `endpoints`, `resources`, `auth`. Use {id} for path placeholders. Do not include endpoints you have no evidence for. Do not wrap the JSON in markdown fences -- emit raw JSON only.

[User]
Probe transcript (12 probes):
[1] GET /users [auth=none]
    -> HTTP 401  {"detail":{"error":"missing_or_invalid_token"}}
[2] GET /users [auth=token_full]
    -> HTTP 200  {"data":[{"id":"u_alice","email":"alice@example.com","role":"admin","status":"active","created_at":1700000000.0},{"id":"u_bob","email":"bob@example.com","role":"member","status":"active","created_at":1700000000.0},{"id":"u_carol","email":"carol@example.com","role":"member","status":"suspended","created_at":1700000000.0…
[3] GET /users [auth=token_read]
    -> HTTP 200  {"data":[{"id":"u_alice","email":"alice@example.com","role":"admin","status":"active","created_at":1700000000.0},{"id":"u_bob","email":"bob@example.com","role":"member","status":"active","created_at":1700000000.0},{"id":"u_carol","email":"carol@example.com","role":"member","status":"suspended","created_at":1700000000.0…
[4] GET /users [auth=token_write]
    -> HTTP 403  {"detail":{"error":"insufficient_scope","required":"users:read"}}
[5] GET /docs [auth=token_read]
    -> HTTP 200  {"data":[{"id":"d_intro","title":"Welcome","body":"hello world","owner_id":"u_alice","state":"published"},{"id":"d_specs","title":"API specs","body":"TBD","owner_id":"u_bob","state":"draft"},{"id":"d_old","title":"Old plan","body":"deprecated","owner_id":"u_alice","state":"archived"}]}
[6] GET /docs [auth=token_write]
    -> HTTP 403  {"detail":{"error":"insufficient_scope","required":"docs:read"}}
[7] GET /auth/scopes [auth=token_read]
    -> HTTP 403  {"detail":{"error":"insufficient_scope","required":"admin"}}
[8] GET /auth/scopes [auth=token_admin]
    -> HTTP 200  {"data":["admin","docs:read","docs:write","users:read","users:write"]}
[9] GET /auth/whoami [auth=token_full]
    -> HTTP 200  {"id":"u_alice","email":"alice@example.com","role":"admin","status":"active","created_at":1700000000.0}
[10] GET /users/nonexistent_id [auth=token_full]
    -> HTTP 404  {"detail":{"error":"not_found"}}
[11] POST /users [auth=token_full] body={"email": "n@ex.com"}
    -> HTTP 201  {"id":"u_78b3048d","email":"n@ex.com","role":"member","status":"active","created_at":1700000000.0}
[12] GET /users [auth=none]
    -> HTTP 401  {"detail":{"error":"missing_or_invalid_token"}}

Emit the belief graph as a single JSON object. No prose, no fences.


[System]
You are an automated API characterization agent for in-house development services. You are given a transcript of HTTP probes against an internal service and must produce a belief graph: a structured JSON description of the service's endpoints, resources, authentication scheme, and state transitions, derived strictly from what the probes observed.

Output exactly one JSON object with these top-level keys: `endpoints`, `resources`, `auth`. Use {id} for path placeholders. Do not include endpoints you have no evidence for. Do not wrap the JSON in markdown fences -- emit raw JSON only.

[User]
Probe transcript (12 probes):
[1] GET /docs [auth=token_full]
    -> HTTP 200  {"data":[{"id":"d_intro","title":"Welcome","body":"hello world","owner_id":"u_alice","state":"published"},{"id":"d_specs","title":"API specs","body":"TBD","owner_id":"u_bob","state":"draft"},{"id":"d_old","title":"Old plan","body":"deprecated","owner_id":"u_alice","state":"archived"}]}
[2] POST /docs/d_specs/publish [auth=token_full]
    -> HTTP 200  {"id":"d_specs","title":"API specs","body":"TBD","owner_id":"u_bob","state":"published"}
[3] POST /docs/d_specs/archive [auth=token_full]
    -> HTTP 200  {"id":"d_specs","title":"API specs","body":"TBD","owner_id":"u_bob","state":"archived"}
[4] POST /docs/d_old/publish [auth=token_full]
    -> HTTP 409  {"detail":{"error":"invalid_state_transition","from":"archived","to":"published"}}
[5] POST /docs/d_intro/publish [auth=token_full]
    -> HTTP 409  {"detail":{"error":"invalid_state_transition","from":"published","to":"published"}}
[6] POST /users/u_alice/suspend [auth=token_full]
    -> HTTP 200  {"id":"u_alice","email":"alice@example.com","role":"admin","status":"suspended","created_at":1700000000.0}
[7] POST /users/u_alice/restore [auth=token_full]
    -> HTTP 200  {"id":"u_alice","email":"alice@example.com","role":"admin","status":"active","created_at":1700000000.0}
[8] POST /users/u_carol/suspend [auth=token_full]
    -> HTTP 409  {"detail":{"error":"invalid_state_transition","from":"suspended","to":"suspended"}}
[9] PATCH /docs/d_intro [auth=token_full] body={"title": "x"}
    -> HTTP 409  {"detail":{"error":"not_in_draft_state","current_state":"published"}}
[10] GET /docs [auth=token_full]
    -> HTTP 200  {"data":[{"id":"d_intro","title":"Welcome","body":"hello world","owner_id":"u_alice","state":"published"},{"id":"d_specs","title":"API specs","body":"TBD","owner_id":"u_bob","state":"archived"},{"id":"d_old","title":"Old plan","body":"deprecated","owner_id":"u_alice","state":"archived"}]}
[11] POST /docs/d_old/publish [auth=token_full]
    -> HTTP 409  {"detail":{"error":"invalid_state_transition","from":"archived","to":"published"}}
[12] POST /users/u_alice/suspend [auth=token_full]
    -> HTTP 200  {"id":"u_alice","email":"alice@example.com","role":"admin","status":"suspended","created_at":1700000000.0}

Emit the belief graph as a single JSON object. No prose, no fences.


[System]
You are an automated API characterization agent for in-house development services. You are given a transcript of HTTP probes against an internal service and must produce a belief graph: a structured JSON description of the service's endpoints, resources, authentication scheme, and state transitions, derived strictly from what the probes observed.

Output exactly one JSON object with these top-level keys: `endpoints`, `resources`, `auth`. Use {id} for path placeholders. Do not include endpoints you have no evidence for. Do not wrap the JSON in markdown fences -- emit raw JSON only.

[User]
Probe transcript (12 probes):
[1] GET /docs [auth=token_full]
    -> HTTP 200  {"data":[{"id":"d_intro","title":"Welcome","body":"hello world","owner_id":"u_alice","state":"published"},{"id":"d_specs","title":"API specs","body":"TBD","owner_id":"u_bob","state":"draft"},{"id":"d_old","title":"Old plan","body":"deprecated","owner_id":"u_alice","state":"archived"}]}
[2] POST /docs/d_specs/publish [auth=token_full]
    -> HTTP 200  {"id":"d_specs","title":"API specs","body":"TBD","owner_id":"u_bob","state":"published"}
[3] POST /docs/d_specs/archive [auth=token_full]
    -> HTTP 200  {"id":"d_specs","title":"API specs","body":"TBD","owner_id":"u_bob","state":"archived"}
[4] POST /docs/d_old/publish [auth=token_full]
    -> HTTP 409  {"detail":{"error":"invalid_state_transition","from":"archived","to":"published"}}
[5] POST /docs/d_intro/publish [auth=token_full]
    -> HTTP 409  {"detail":{"error":"invalid_state_transition","from":"published","to":"published"}}
[6] POST /users/u_alice/suspend [auth=token_full]
    -> HTTP 200  {"id":"u_alice","email":"alice@example.com","role":"admin","status":"suspended","created_at":1700000000.0}
[7] POST /users/u_alice/restore [auth=token_full]
    -> HTTP 200  {"id":"u_alice","email":"alice@example.com","role":"admin","status":"active","created_at":1700000000.0}
[8] POST /users/u_carol/suspend [auth=token_full]
    -> HTTP 409  {"detail":{"error":"invalid_state_transition","from":"suspended","to":"suspended"}}
[9] PATCH /docs/d_intro [auth=token_full] body={"title": "x"}
    -> HTTP 409  {"detail":{"error":"not_in_draft_state","current_state":"published"}}
[10] DELETE /users/u_bob [auth=token_full]
    -> HTTP 200  {"ok":true,"id":"u_bob"}
[11] POST /users [auth=token_full] body={"email": "n@ex.com"}
    -> HTTP 201  {"id":"u_be427f59","email":"n@ex.com","role":"member","status":"active","created_at":1700000000.0}
[12] GET /admin [auth=none]
    -> HTTP 404  {"detail":"Not Found"}

Emit the belief graph as a single JSON object. No prose, no fences.


[System]
You are an automated API characterization agent for in-house development services. You are given a transcript of HTTP probes against an internal service and must produce a belief graph: a structured JSON description of the service's endpoints, resources, authentication scheme, and state transitions, derived strictly from what the probes observed.

Output exactly one JSON object with these top-level keys: `endpoints`, `resources`, `auth`. Use {id} for path placeholders. Do not include endpoints you have no evidence for. Do not wrap the JSON in markdown fences -- emit raw JSON only.

[User]
Probe transcript (12 probes):
[1] GET /docs [auth=token_full]
    -> HTTP 200  {"data":[{"id":"d_intro","title":"Welcome","body":"hello world","owner_id":"u_alice","state":"published"},{"id":"d_specs","title":"API specs","body":"TBD","owner_id":"u_bob","state":"draft"},{"id":"d_old","title":"Old plan","body":"deprecated","owner_id":"u_alice","state":"archived"}]}
[2] POST /docs/d_specs/publish [auth=token_full]
    -> HTTP 200  {"id":"d_specs","title":"API specs","body":"TBD","owner_id":"u_bob","state":"published"}
[3] POST /docs/d_specs/archive [auth=token_full]
    -> HTTP 200  {"id":"d_specs","title":"API specs","body":"TBD","owner_id":"u_bob","state":"archived"}
[4] POST /docs/d_old/publish [auth=token_full]
    -> HTTP 409  {"detail":{"error":"invalid_state_transition","from":"archived","to":"published"}}
[5] POST /docs/d_intro/publish [auth=token_full]
    -> HTTP 409  {"detail":{"error":"invalid_state_transition","from":"published","to":"published"}}
[6] POST /users/u_alice/suspend [auth=token_full]
    -> HTTP 200  {"id":"u_alice","email":"alice@example.com","role":"admin","status":"suspended","created_at":1700000000.0}
[7] POST /users/u_alice/restore [auth=token_full]
    -> HTTP 200  {"id":"u_alice","email":"alice@example.com","role":"admin","status":"active","created_at":1700000000.0}
[8] POST /users/u_carol/suspend [auth=token_full]
    -> HTTP 409  {"detail":{"error":"invalid_state_transition","from":"suspended","to":"suspended"}}
[9] PATCH /docs/d_intro [auth=token_full] body={"title": "x"}
    -> HTTP 409  {"detail":{"error":"not_in_draft_state","current_state":"published"}}
[10] GET /users [auth=none]
    -> HTTP 401  {"detail":{"error":"missing_or_invalid_token"}}
[11] GET /users [auth=token_full]
    -> HTTP 200  {"data":[{"id":"u_alice","email":"alice@example.com","role":"admin","status":"active","created_at":1700000000.0},{"id":"u_bob","email":"bob@example.com","role":"member","status":"active","created_at":1700000000.0},{"id":"u_carol","email":"carol@example.com","role":"member","status":"suspended","created_at":1700000000.0…
[12] GET /users [auth=token_write]
    -> HTTP 403  {"detail":{"error":"insufficient_scope","required":"users:read"}}

Emit the belief graph as a single JSON object. No prose, no fences.


[System]
You are an automated API characterization agent for in-house development services. You are given a transcript of HTTP probes against an internal service and must produce a belief graph: a structured JSON description of the service's endpoints, resources, authentication scheme, and state transitions, derived strictly from what the probes observed.

Output exactly one JSON object with these top-level keys: `endpoints`, `resources`, `auth`. Use {id} for path placeholders. Do not include endpoints you have no evidence for. Do not wrap the JSON in markdown fences -- emit raw JSON only.

[User]
Probe transcript (12 probes):
[1] GET /users [auth=none]
    -> HTTP 401  {"detail":{"error":"missing_or_invalid_token"}}
[2] GET /users [auth=token_full]
    -> HTTP 200  {"data":[{"id":"u_alice","email":"alice@example.com","role":"admin","status":"active","created_at":1700000000.0},{"id":"u_bob","email":"bob@example.com","role":"member","status":"active","created_at":1700000000.0},{"id":"u_carol","email":"carol@example.com","role":"member","status":"suspended","created_at":1700000000.0…
[3] GET /users [auth=token_read]
    -> HTTP 200  {"data":[{"id":"u_alice","email":"alice@example.com","role":"admin","status":"active","created_at":1700000000.0},{"id":"u_bob","email":"bob@example.com","role":"member","status":"active","created_at":1700000000.0},{"id":"u_carol","email":"carol@example.com","role":"member","status":"suspended","created_at":1700000000.0…
[4] GET /users [auth=token_write]
    -> HTTP 403  {"detail":{"error":"insufficient_scope","required":"users:read"}}
[5] GET /docs [auth=token_read]
    -> HTTP 200  {"data":[{"id":"d_intro","title":"Welcome","body":"hello world","owner_id":"u_alice","state":"published"},{"id":"d_specs","title":"API specs","body":"TBD","owner_id":"u_bob","state":"draft"},{"id":"d_old","title":"Old plan","body":"deprecated","owner_id":"u_alice","state":"archived"}]}
[6] GET /docs [auth=token_write]
    -> HTTP 403  {"detail":{"error":"insufficient_scope","required":"docs:read"}}
[7] GET /auth/scopes [auth=token_read]
    -> HTTP 403  {"detail":{"error":"insufficient_scope","required":"admin"}}
[8] GET /auth/scopes [auth=token_admin]
    -> HTTP 200  {"data":["admin","docs:read","docs:write","users:read","users:write"]}
[9] GET /auth/whoami [auth=token_full]
    -> HTTP 200  {"id":"u_alice","email":"alice@example.com","role":"admin","status":"active","created_at":1700000000.0}
[10] POST /docs/d_specs/archive [auth=token_full]
    -> HTTP 409  {"detail":{"error":"invalid_state_transition","from":"draft","to":"archived"}}
[11] POST /users/u_alice/suspend [auth=token_full]
    -> HTTP 200  {"id":"u_alice","email":"alice@example.com","role":"admin","status":"suspended","created_at":1700000000.0}
[12] GET /docs [auth=token_full]
    -> HTTP 200  {"data":[{"id":"d_intro","title":"Welcome","body":"hello world","owner_id":"u_alice","state":"published"},{"id":"d_specs","title":"API specs","body":"TBD","owner_id":"u_bob","state":"draft"},{"id":"d_old","title":"Old plan","body":"deprecated","owner_id":"u_alice","state":"archived"}]}

Emit the belief graph as a single JSON object. No prose, no fences.


[System]
You are an automated API characterization agent for in-house development services. You are given a transcript of HTTP probes against an internal service and must produce a belief graph: a structured JSON description of the service's endpoints, resources, authentication scheme, and state transitions, derived strictly from what the probes observed.

Output exactly one JSON object with these top-level keys: `endpoints`, `resources`, `auth`. Use {id} for path placeholders. Do not include endpoints you have no evidence for. Do not wrap the JSON in markdown fences -- emit raw JSON only.

[User]
Probe transcript (12 probes):
[1] GET /users [auth=token_full]
    -> HTTP 200  {"data":[{"id":"u_alice","email":"alice@example.com","role":"admin","status":"active","created_at":1700000000.0},{"id":"u_bob","email":"bob@example.com","role":"member","status":"active","created_at":1700000000.0},{"id":"u_carol","email":"carol@example.com","role":"member","status":"suspended","created_at":1700000000.0…
[2] GET /users/u_alice [auth=token_full]
    -> HTTP 200  {"id":"u_alice","email":"alice@example.com","role":"admin","status":"active","created_at":1700000000.0}
[3] GET /users/u_bob [auth=token_full]
    -> HTTP 200  {"id":"u_bob","email":"bob@example.com","role":"member","status":"active","created_at":1700000000.0}
[4] GET /users/u_alice/documents [auth=token_full]
    -> HTTP 200  {"data":[{"id":"d_intro","title":"Welcome","body":"hello world","owner_id":"u_alice","state":"published"},{"id":"d_old","title":"Old plan","body":"deprecated","owner_id":"u_alice","state":"archived"}]}
[5] GET /docs [auth=token_full]
    -> HTTP 200  {"data":[{"id":"d_intro","title":"Welcome","body":"hello world","owner_id":"u_alice","state":"published"},{"id":"d_specs","title":"API specs","body":"TBD","owner_id":"u_bob","state":"draft"},{"id":"d_old","title":"Old plan","body":"deprecated","owner_id":"u_alice","state":"archived"}]}
[6] GET /docs/d_intro [auth=token_full]
    -> HTTP 200  {"id":"d_intro","title":"Welcome","body":"hello world","owner_id":"u_alice","state":"published"}
[7] GET /docs/d_specs [auth=token_full]
    -> HTTP 200  {"id":"d_specs","title":"API specs","body":"TBD","owner_id":"u_bob","state":"draft"}
[8] GET /auth/whoami [auth=token_full]
    -> HTTP 200  {"id":"u_alice","email":"alice@example.com","role":"admin","status":"active","created_at":1700000000.0}
[9] GET /auth/scopes [auth=token_read]
    -> HTTP 403  {"detail":{"error":"insufficient_scope","required":"admin"}}
[10] GET /auth/scopes [auth=token_admin]
    -> HTTP 200  {"data":["admin","docs:read","docs:write","users:read","users:write"]}
[11] GET /users [auth=none]
    -> HTTP 401  {"detail":{"error":"missing_or_invalid_token"}}
[12] GET /users [auth=token_read]
    -> HTTP 200  {"data":[{"id":"u_alice","email":"alice@example.com","role":"admin","status":"active","created_at":1700000000.0},{"id":"u_bob","email":"bob@example.com","role":"member","status":"active","created_at":1700000000.0},{"id":"u_carol","email":"carol@example.com","role":"member","status":"suspended","created_at":1700000000.0…

Emit the belief graph as a single JSON object. No prose, no fences.


[System]
You are an automated API characterization agent for in-house development services. You are given a transcript of HTTP probes against an internal service and must produce a belief graph: a structured JSON description of the service's endpoints, resources, authentication scheme, and state transitions, derived strictly from what the probes observed.

Output exactly one JSON object with these top-level keys: `endpoints`, `resources`, `auth`. Use {id} for path placeholders. Do not include endpoints you have no evidence for. Do not wrap the JSON in markdown fences -- emit raw JSON only.

[User]
Probe transcript (12 probes):
[1] GET /users [auth=none]
    -> HTTP 401  {"detail":{"error":"missing_or_invalid_token"}}
[2] GET /users [auth=token_full]
    -> HTTP 200  {"data":[{"id":"u_alice","email":"alice@example.com","role":"admin","status":"active","created_at":1700000000.0},{"id":"u_bob","email":"bob@example.com","role":"member","status":"active","created_at":1700000000.0},{"id":"u_carol","email":"carol@example.com","role":"member","status":"suspended","created_at":1700000000.0…
[3] GET /users [auth=token_read]
    -> HTTP 200  {"data":[{"id":"u_alice","email":"alice@example.com","role":"admin","status":"active","created_at":1700000000.0},{"id":"u_bob","email":"bob@example.com","role":"member","status":"active","created_at":1700000000.0},{"id":"u_carol","email":"carol@example.com","role":"member","status":"suspended","created_at":1700000000.0…
[4] GET /users [auth=token_write]
    -> HTTP 403  {"detail":{"error":"insufficient_scope","required":"users:read"}}
[5] GET /docs [auth=token_read]
    -> HTTP 200  {"data":[{"id":"d_intro","title":"Welcome","body":"hello world","owner_id":"u_alice","state":"published"},{"id":"d_specs","title":"API specs","body":"TBD","owner_id":"u_bob","state":"draft"},{"id":"d_old","title":"Old plan","body":"deprecated","owner_id":"u_alice","state":"archived"}]}
[6] GET /docs [auth=token_write]
    -> HTTP 403  {"detail":{"error":"insufficient_scope","required":"docs:read"}}
[7] GET /auth/scopes [auth=token_read]
    -> HTTP 403  {"detail":{"error":"insufficient_scope","required":"admin"}}
[8] GET /auth/scopes [auth=token_admin]
    -> HTTP 200  {"data":["admin","docs:read","docs:write","users:read","users:write"]}
[9] GET /auth/whoami [auth=token_full]
    -> HTTP 200  {"id":"u_alice","email":"alice@example.com","role":"admin","status":"active","created_at":1700000000.0}
[10] POST /docs/d_intro/publish [auth=token_full]
    -> HTTP 409  {"detail":{"error":"invalid_state_transition","from":"published","to":"published"}}
[11] PATCH /docs/d_intro [auth=token_full] body={"title": "x"}
    -> HTTP 409  {"detail":{"error":"not_in_draft_state","current_state":"published"}}
[12] POST /users/u_carol/suspend [auth=token_full]
    -> HTTP 409  {"detail":{"error":"invalid_state_transition","from":"suspended","to":"suspended"}}

Emit the belief graph as a single JSON object. No prose, no fences.


[System]
You are an automated API characterization agent for in-house development services. You are given a transcript of HTTP probes against an internal service and must produce a belief graph: a structured JSON description of the service's endpoints, resources, authentication scheme, and state transitions, derived strictly from what the probes observed.

Output exactly one JSON object with these top-level keys: `endpoints`, `resources`, `auth`. Use {id} for path placeholders. Do not include endpoints you have no evidence for. Do not wrap the JSON in markdown fences -- emit raw JSON only.

[User]
Probe transcript (12 probes):
[1] GET /docs [auth=token_full]
    -> HTTP 200  {"data":[{"id":"d_intro","title":"Welcome","body":"hello world","owner_id":"u_alice","state":"published"},{"id":"d_specs","title":"API specs","body":"TBD","owner_id":"u_bob","state":"draft"},{"id":"d_old","title":"Old plan","body":"deprecated","owner_id":"u_alice","state":"archived"}]}
[2] POST /docs/d_specs/publish [auth=token_full]
    -> HTTP 200  {"id":"d_specs","title":"API specs","body":"TBD","owner_id":"u_bob","state":"published"}
[3] POST /docs/d_specs/archive [auth=token_full]
    -> HTTP 200  {"id":"d_specs","title":"API specs","body":"TBD","owner_id":"u_bob","state":"archived"}
[4] POST /docs/d_old/publish [auth=token_full]
    -> HTTP 409  {"detail":{"error":"invalid_state_transition","from":"archived","to":"published"}}
[5] POST /docs/d_intro/publish [auth=token_full]
    -> HTTP 409  {"detail":{"error":"invalid_state_transition","from":"published","to":"published"}}
[6] POST /users/u_alice/suspend [auth=token_full]
    -> HTTP 200  {"id":"u_alice","email":"alice@example.com","role":"admin","status":"suspended","created_at":1700000000.0}
[7] POST /users/u_alice/restore [auth=token_full]
    -> HTTP 200  {"id":"u_alice","email":"alice@example.com","role":"admin","status":"active","created_at":1700000000.0}
[8] POST /users/u_carol/suspend [auth=token_full]
    -> HTTP 409  {"detail":{"error":"invalid_state_transition","from":"suspended","to":"suspended"}}
[9] PATCH /docs/d_intro [auth=token_full] body={"title": "x"}
    -> HTTP 409  {"detail":{"error":"not_in_draft_state","current_state":"published"}}
[10] GET /users [auth=none]
    -> HTTP 401  {"detail":{"error":"missing_or_invalid_token"}}
[11] DELETE /users/u_bob [auth=token_full]
    -> HTTP 200  {"ok":true,"id":"u_bob"}
[12] POST /users [auth=token_full] body={"email": "n@ex.com"}
    -> HTTP 201  {"id":"u_e61678ed","email":"n@ex.com","role":"member","status":"active","created_at":1700000000.0}

Emit the belief graph as a single JSON object. No prose, no fences.


[System]
You are an automated API characterization agent for in-house development services. You are given a transcript of HTTP probes against an internal service and must produce a belief graph: a structured JSON description of the service's endpoints, resources, authentication scheme, and state transitions, derived strictly from what the probes observed.

Output exactly one JSON object with these top-level keys: `endpoints`, `resources`, `auth`. Use {id} for path placeholders. Do not include endpoints you have no evidence for. Do not wrap the JSON in markdown fences -- emit raw JSON only.

[User]
Probe transcript (12 probes):
[1] GET /users [auth=none]
    -> HTTP 401  {"detail":{"error":"missing_or_invalid_token"}}
[2] GET /users [auth=token_full]
    -> HTTP 200  {"data":[{"id":"u_alice","email":"alice@example.com","role":"admin","status":"active","created_at":1700000000.0},{"id":"u_bob","email":"bob@example.com","role":"member","status":"active","created_at":1700000000.0},{"id":"u_carol","email":"carol@example.com","role":"member","status":"suspended","created_at":1700000000.0…
[3] GET /users [auth=token_read]
    -> HTTP 200  {"data":[{"id":"u_alice","email":"alice@example.com","role":"admin","status":"active","created_at":1700000000.0},{"id":"u_bob","email":"bob@example.com","role":"member","status":"active","created_at":1700000000.0},{"id":"u_carol","email":"carol@example.com","role":"member","status":"suspended","created_at":1700000000.0…
[4] GET /users [auth=token_write]
    -> HTTP 403  {"detail":{"error":"insufficient_scope","required":"users:read"}}
[5] GET /docs [auth=token_read]
    -> HTTP 200  {"data":[{"id":"d_intro","title":"Welcome","body":"hello world","owner_id":"u_alice","state":"published"},{"id":"d_specs","title":"API specs","body":"TBD","owner_id":"u_bob","state":"draft"},{"id":"d_old","title":"Old plan","body":"deprecated","owner_id":"u_alice","state":"archived"}]}
[6] GET /docs [auth=token_write]
    -> HTTP 403  {"detail":{"error":"insufficient_scope","required":"docs:read"}}
[7] GET /auth/scopes [auth=token_read]
    -> HTTP 403  {"detail":{"error":"insufficient_scope","required":"admin"}}
[8] GET /auth/scopes [auth=token_admin]
    -> HTTP 200  {"data":["admin","docs:read","docs:write","users:read","users:write"]}
[9] GET /auth/whoami [auth=token_full]
    -> HTTP 200  {"id":"u_alice","email":"alice@example.com","role":"admin","status":"active","created_at":1700000000.0}
[10] DELETE /users/u_bob [auth=token_full]
    -> HTTP 200  {"ok":true,"id":"u_bob"}
[11] DELETE /users/u_bob [auth=token_full]
    -> HTTP 410  {"detail":{"error":"already_deleted"}}
[12] POST /users [auth=token_full] body={"email": "alice@example.com"}
    -> HTTP 409  {"detail":{"error":"email_exists"}}

Emit the belief graph as a single JSON object. No prose, no fences.


[System]
You are an automated API characterization agent for in-house development services. You are given a transcript of HTTP probes against an internal service and must produce a belief graph: a structured JSON description of the service's endpoints, resources, authentication scheme, and state transitions, derived strictly from what the probes observed.

Output exactly one JSON object with these top-level keys: `endpoints`, `resources`, `auth`. Use {id} for path placeholders. Do not include endpoints you have no evidence for. Do not wrap the JSON in markdown fences -- emit raw JSON only.

[User]
Probe transcript (12 probes):
[1] GET /users [auth=token_full]
    -> HTTP 200  {"data":[{"id":"u_alice","email":"alice@example.com","role":"admin","status":"active","created_at":1700000000.0},{"id":"u_bob","email":"bob@example.com","role":"member","status":"active","created_at":1700000000.0},{"id":"u_carol","email":"carol@example.com","role":"member","status":"suspended","created_at":1700000000.0…
[2] GET /users/u_alice [auth=token_full]
    -> HTTP 200  {"id":"u_alice","email":"alice@example.com","role":"admin","status":"active","created_at":1700000000.0}
[3] GET /users/u_bob [auth=token_full]
    -> HTTP 200  {"id":"u_bob","email":"bob@example.com","role":"member","status":"active","created_at":1700000000.0}
[4] GET /users/u_alice/documents [auth=token_full]
    -> HTTP 200  {"data":[{"id":"d_intro","title":"Welcome","body":"hello world","owner_id":"u_alice","state":"published"},{"id":"d_old","title":"Old plan","body":"deprecated","owner_id":"u_alice","state":"archived"}]}
[5] GET /docs [auth=token_full]
    -> HTTP 200  {"data":[{"id":"d_intro","title":"Welcome","body":"hello world","owner_id":"u_alice","state":"published"},{"id":"d_specs","title":"API specs","body":"TBD","owner_id":"u_bob","state":"draft"},{"id":"d_old","title":"Old plan","body":"deprecated","owner_id":"u_alice","state":"archived"}]}
[6] GET /docs/d_intro [auth=token_full]
    -> HTTP 200  {"id":"d_intro","title":"Welcome","body":"hello world","owner_id":"u_alice","state":"published"}
[7] GET /docs/d_specs [auth=token_full]
    -> HTTP 200  {"id":"d_specs","title":"API specs","body":"TBD","owner_id":"u_bob","state":"draft"}
[8] GET /auth/whoami [auth=token_full]
    -> HTTP 200  {"id":"u_alice","email":"alice@example.com","role":"admin","status":"active","created_at":1700000000.0}
[9] GET /docs/d_intro [auth=token_full]
    -> HTTP 200  {"id":"d_intro","title":"Welcome","body":"hello world","owner_id":"u_alice","state":"published"}
[10] GET /auth/whoami [auth=token_full]
    -> HTTP 200  {"id":"u_alice","email":"alice@example.com","role":"admin","status":"active","created_at":1700000000.0}
[11] GET /users/u_alice/documents [auth=token_full]
    -> HTTP 200  {"data":[{"id":"d_intro","title":"Welcome","body":"hello world","owner_id":"u_alice","state":"published"},{"id":"d_old","title":"Old plan","body":"deprecated","owner_id":"u_alice","state":"archived"}]}
[12] GET /docs [auth=token_full]
    -> HTTP 200  {"data":[{"id":"d_intro","title":"Welcome","body":"hello world","owner_id":"u_alice","state":"published"},{"id":"d_specs","title":"API specs","body":"TBD","owner_id":"u_bob","state":"draft"},{"id":"d_old","title":"Old plan","body":"deprecated","owner_id":"u_alice","state":"archived"}]}

Emit the belief graph as a single JSON object. No prose, no fences.


[System]
You are an automated API characterization agent for in-house development services. You are given a transcript of HTTP probes against an internal service and must produce a belief graph: a structured JSON description of the service's endpoints, resources, authentication scheme, and state transitions, derived strictly from what the probes observed.

Output exactly one JSON object with these top-level keys: `endpoints`, `resources`, `auth`. Use {id} for path placeholders. Do not include endpoints you have no evidence for. Do not wrap the JSON in markdown fences -- emit raw JSON only.

[User]
Probe transcript (12 probes):
[1] GET /users [auth=token_full]
    -> HTTP 200  {"data":[{"id":"u_alice","email":"alice@example.com","role":"admin","status":"active","created_at":1700000000.0},{"id":"u_bob","email":"bob@example.com","role":"member","status":"active","created_at":1700000000.0},{"id":"u_carol","email":"carol@example.com","role":"member","status":"suspended","created_at":1700000000.0…
[2] GET /users/u_alice [auth=token_full]
    -> HTTP 200  {"id":"u_alice","email":"alice@example.com","role":"admin","status":"active","created_at":1700000000.0}
[3] GET /users/u_bob [auth=token_full]
    -> HTTP 200  {"id":"u_bob","email":"bob@example.com","role":"member","status":"active","created_at":1700000000.0}
[4] GET /users/u_alice/documents [auth=token_full]
    -> HTTP 200  {"data":[{"id":"d_intro","title":"Welcome","body":"hello world","owner_id":"u_alice","state":"published"},{"id":"d_old","title":"Old plan","body":"deprecated","owner_id":"u_alice","state":"archived"}]}
[5] GET /docs [auth=token_full]
    -> HTTP 200  {"data":[{"id":"d_intro","title":"Welcome","body":"hello world","owner_id":"u_alice","state":"published"},{"id":"d_specs","title":"API specs","body":"TBD","owner_id":"u_bob","state":"draft"},{"id":"d_old","title":"Old plan","body":"deprecated","owner_id":"u_alice","state":"archived"}]}
[6] GET /docs/d_intro [auth=token_full]
    -> HTTP 200  {"id":"d_intro","title":"Welcome","body":"hello world","owner_id":"u_alice","state":"published"}
[7] GET /docs/d_specs [auth=token_full]
    -> HTTP 200  {"id":"d_specs","title":"API specs","body":"TBD","owner_id":"u_bob","state":"draft"}
[8] GET /auth/whoami [auth=token_full]
    -> HTTP 200  {"id":"u_alice","email":"alice@example.com","role":"admin","status":"active","created_at":1700000000.0}
[9] GET /auth/scopes [auth=token_admin]
    -> HTTP 200  {"data":["admin","docs:read","docs:write","users:read","users:write"]}
[10] GET /users [auth=none]
    -> HTTP 401  {"detail":{"error":"missing_or_invalid_token"}}
[11] GET /users/u_alice [auth=token_full]
    -> HTTP 200  {"id":"u_alice","email":"alice@example.com","role":"admin","status":"active","created_at":1700000000.0}
[12] GET /docs/d_intro [auth=token_full]
    -> HTTP 200  {"id":"d_intro","title":"Welcome","body":"hello world","owner_id":"u_alice","state":"published"}

Emit the belief graph as a single JSON object. No prose, no fences.