---
title: "Get a task created by the authenticated API key"
method: GET
path: "/api/v1/jobs/recordInfo"
tags: ["Tasks"]
---

# Get a task created by the authenticated API key

`GET /api/v1/jobs/recordInfo`

## Request

- Base URL: `https://api.popnow.ai`
- URL: `https://api.popnow.ai/api/v1/jobs/recordInfo`
- Auth: HTTP bearer

## Query parameters

- `taskId` string, required

## Response `200`

Current task record. Terminal and non-terminal states share this shape.

- TaskRecordEnvelope
  - `code` 200, required
  - `msg` 'success', required
  - `request_id` string, required: Correlation identifier. Include it in support requests.
  - `data` TaskRecord, required
    - `taskId` string, required
    - `sourceTaskId` string: Present when this task was created by explicit retry.
    - `model` string, required: Model call name, `<publisher>/<model>/<task>`.
    - `state` 'queued' | 'running' | 'succeeded' | 'failed' | 'canceled' | 'expired', required
    - `input` object: Normalized model input; inline images become account-bound file URIs. Includes the random `seed` we picked when you omitted one (see CreateTaskRequest.input). Omitted after retention redaction.
    - `output` TaskOutput: First-party result metadata. Ready assets include directly usable temporary URLs; no download-ticket request is needed. Poll again to refresh an expired URL. Temporary URLs are bearer access grants; never attach your API key when fetching them.
      - `text` string: Text result (transcription). For transcription with multichannel on, one line per channel in channel order.
      - `transcript` TaskTranscript: Structured transcription result, present only on speech-to-text endpoints that return it. `text` above stays the plain transcript; this object adds timing and language details. Erased together with the rest of the task output on the prompt-retention schedule.
        - `text` string: Full transcript.
        - `language` string: Detected language, as reported by the model (for example en).
        - `languageCode` string: Detected language code (ISO 639-3, for example eng) when available.
        - `languageProbability` number: Confidence of the detected language, 0 to 1, when available.
        - `durationSeconds` number: Length of the transcribed audio in seconds.
        - `words` TaskTranscriptWord[]
          - `text` string, required
          - `start` number, required: Start time in seconds from the beginning of the audio.
          - `end` number, required: End time in seconds.
          - `type` string: Segment type (for example word) when the model reports one.
          - `speakerId` string: Speaker label; only present when the model performs speaker separation.
        - `channels` TaskTranscriptChannel[]: Present when multichannel transcription was requested; one entry per audio channel.
          - `index` integer, required: Zero-based channel index.
          - `text` string
          - `language` string
          - `languageCode` string
          - `words` TaskTranscriptWord[]
            - `text` string, required
            - `start` number, required: Start time in seconds from the beginning of the audio.
            - `end` number, required: End time in seconds.
            - `type` string: Segment type (for example word) when the model reports one.
            - `speakerId` string: Speaker label; only present when the model performs speaker separation.
      - `assets` TaskOutputAsset[]
        - `key` string: Compatibility identifier for optional download-url requests.
        - `url` string, uri: First-party signed GET URL on PopNow storage, normally valid for 20 minutes. Absent while pending or unavailable. Request a fresh one with recordInfo or common/download-url after it expires.
        - `expiresAt` string, date-time: Expiry of this URL, not the result retention deadline.
        - `mime` string
        - `width` integer
        - `height` integer
        - `durationSeconds` number
        - `bytes` integer
        - `role` string: What the asset is: `video`, `image`, `audio` or a model-specific role. Video extend endpoints that join the source clip to the new footage return two assets in a fixed order: the joined clip first (`video`), then the newly generated part on its own (`segment`). Endpoints that return only the new part have no `segment` asset.
        - `pending` boolean
        - `unavailable` boolean
        - `deleted` boolean: PopNow only: the owner permanently deleted this output (one output of a multi-output task). Always comes with unavailable true and no key or url; the stored file is being deleted.
        - `layer` object: Present only on layer decomposition results. The first asset is the base image (the source with the separated elements removed, `zIndex` 0); every other asset is one transparent PNG layer. Stack them by ascending `zIndex` to rebuild the picture. `boundingBox` is `[x1, y1, x2, y2]` in base-image pixels and places the layer on the base (scale the layer to that box); it is absent on the base image and on models that do not report positions, in which case the layers can still be used as standalone cut-outs. `name` is the model's label for the layer when it gives one.
          - `zIndex` integer, required
          - `name` string
          - `boundingBox` integer[]
    - `errorCode` 'invalid_request' | 'unsupported_combination' | 'content_rejected' | 'rate_limited' | 'upstream_unavailable' | 'generation_failed' | 'timeout' | 'invalid_asset' | 'upstream_failed': Stable PopNow failure identifier from a closed set; never an internal diagnostic code. The set is closed: any other value a client sees should be handled as `upstream_failed`.
    - `errorMessage` string: Human-readable failure reason. When the model service reported a specific reason (for example a corrupted reference image or a copyright restriction on generated audio), that reason is returned in English with internal service names, hosts, URLs, request and task IDs, error-code suffixes and account or billing details removed; otherwise a normalized message that follows the same language selection as `msg`. `errorCode` never changes and remains the value to branch on.
    - `cost` string, required: Decimal USD amount encoded as a string to avoid binary floating-point loss.
    - `credits` integer, required: The same amount as `cost`, in credits (1 credit = $0.001), rounded up to a whole credit. Before settlement it is the held amount; after settlement it is the final charge.
    - `exactCredits` string, required: The same amount as `credits`, not rounded, as a decimal string (for example `"0.0731"`). Chat calls are charged their actual token usage in fractional credits, so use this field to see what a chat call cost.
    - `settled` boolean, required: When false, `cost` is the held estimate. When true, `cost` is the final charge. On success the final charge is capped at that hold; unused funds are released. Failed or expired tasks normally release the hold in full; the one exception is a `content_rejected` task on a model whose page states that such refusals are billed, which is settled at the accepted estimate.
    - `createdAt` string, date-time, required
    - `deadlineAt` string, date-time: Server execution deadline. Present in current responses; historical stored webhook events may omit it. Not the result retention or URL expiry time.
    - `completedAt` string, date-time
    - `contentState` 'present' | 'expired' | 'purged': Whether the task content is still stored, and why it is not. `expired` means the retention policy removed it; `purged` means the account owner destroyed it with `purgeTask`. The two are deliberately distinct: telling a customer their own deletion was an expiry reads as the platform losing their data.
    - `contentRemovedBy` 'user' | 'system': Present only once content has been removed. Omitted while `contentState` is `present`.
    - `purgedAt` string, date-time: Present only for a task destroyed with `purgeTask`. Expiry does not set it.
    - `retention` TaskRetention: When this task's content is scheduled to be removed, and which layer decided it. Omitted for tasks created before per-task retention existed; those follow the platform maximum.
      - `outputsExpireAt` string, date-time, required: When the generated media objects and the result payload are removed. Before the task finishes this is measured from acceptance; when the task reaches a terminal state it is re-based on the completion time using the same window, so it only ever moves later, never earlier.
      - `promptsExpireAt` string, date-time, required: When the stored request text is erased. The task row, its state, amounts and request_id remain.
      - `source` 'header' | 'account' | 'platform', required: Which layer actually constrained the value: the per-request `X-PopNow-Retention` header, the account setting, or the platform maximum. A request that sends the header and still sees `account` has an account setting that is already shorter than it asked for.

## Other responses

- `400`: Invalid JSON, query, callback URL, model input, or media declaration. Invalid callBackUrl values return code 400 and msg "Invalid callback URL" with request_id. Submitted hosts, IP addresses, and DNS diagnostics are not echoed.
- `401`: Missing, malformed, expired, revoked, or otherwise invalid API key.
- `403`: Account, model, API-key, IP, or region authorization failed.
- `404`: Task does not exist or belongs to another account or API key; these cases are indistinguishable.
- `429`: Account-level request limit exceeded.
- `500`: Internal failure. Details are not exposed; report `request_id` to support.

## Changes

- **2026-10-20** `fede911a6e9b`: 72 warning
  - added the new `agent_project_budget` enum value to the `allOf[subschema #2]/data/reason` response property for the response status `400`
  - added the new `agent_project_budget` enum value to the `allOf[subschema #2]/data/reason` response property for the response status `401`
  - added the new `agent_project_budget` enum value to the `allOf[subschema #2]/data/reason` response property for the response status `403`
  - added the new `agent_project_budget` enum value to the `allOf[subschema #2]/data/reason` response property for the response status `404`
  - …68 more

[Operation history](https://skmtc.dev/popnow/apis/popnow-api/changes/api/v1/jobs/recordInfo/get.md)

---

[API](https://skmtc.dev/popnow/apis/popnow-api.md) · [All operations](https://skmtc.dev/popnow/apis/popnow-api/llms.txt) · [OpenAPI document](https://skmtc.dev/popnow/apis/popnow-api/revisions/fede911a6e9b?raw)
