--- id: "301bb14c-905c-4380-8565-2abe2d18965b" name: "Exact Job Step Logs" micro_summary: "Exact job number to v1.1 build details to action output_url yields full step logs; never substitute a pipeline number or persist the presigned URL." status: "resolved" see_also: [] scope: "Retrieve exact CircleCI step logs from an authenticated browser session by discovering a real job number, reading v1.1 build details, and following the selected action's output URL." warnings: "Use an exact discovered job number, never a pipeline number. Presigned output URLs contain ephemeral tokens: consume immediately and never persist or print them beyond the active extraction process." --- ## Recipe First discover an exact `job_number` through the workflow monitoring child. From the authenticated `app.circleci.com` page context, fetch build details: ```javascript const build = await (await fetch('/api/v1.1/project/github/ORG/PROJECT/JOB_NUMBER', {credentials: 'include'})).json(); const actions = (build.steps || []).flatMap(step => (step.actions || []).map(action => ({ step: step.name, status: action.status, output_url: action.output_url || null }))); ``` Select the intended step by its exact name and retrieve its `output_url`. The URL is presigned and contains an ephemeral token; consume it immediately and never store it in a tree, report, chat, or long-lived log. Parse the returned JSON message fragments when present, otherwise treat the response as text. ## Verification Positively verified 2026-08-14: an exact successful Terraform apply job was discovered, its v1.1 details returned the `terraform apply` action and output URL, and the full apply log exposed the generated IAM role output. A guessed build number previously returned 404; the exact job number is load-bearing.