> ## Documentation Index
> Fetch the complete documentation index at: https://docs.linqalpha.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Transcriptions — Poll / Retrieve

> Step 3. Reads stored state only; never restarts processing. 200 for any owned job including failed ones; 404 for unknown or foreign jobs, and for jobs whose stored files have been deleted (one year after the job finishes). Signed artifact URLs expire after expires_in seconds — call again for fresh ones.

Step 3. Reads stored job state; it never restarts processing. Returns `200` for any job your organization owns, including failed ones, and `404` for unknown or foreign jobs.

```bash theme={null}
curl --request GET \
  --url 'https://api.linqalpha.com/v2/transcriptions/<job_id>' \
  --header 'X-API-KEY: <api-key>'
```

## Status values

| status | meaning |
| - | - |
| `queued` | accepted, waiting to start |
| `processing` | speech-to-text or translation running |
| `succeeded` | every requested step completed (terminal) |
| `failed` | a requested step failed (terminal) |

Poll every 30–60 seconds and honor `Retry-After`. Stop on `succeeded` or `failed`.

## Result

On success `payload.result` carries the versioned segment list plus signed download URLs:

* `segments[]`: `start_seconds`, `end_seconds`, `speaker` (`speaker_1`, `speaker_2`, … consistent within the job when the speech-to-text provider labels speakers; `null` otherwise), `language` (code of the original speech), `text` (raw speech-to-text output, always preserved, no cleanup applied), `translated_text` (requested language, or `null` when no `target_language` was given).
* `artifacts`: `raw_text`, `raw_json` (speech-to-text output with no cleanup applied) and, when translation was requested and at least one segment was translated, `translated_text`, `translated_json`. Each has a signed `url` and `expires_in` (1 hour). Call `GET` again to receive fresh URLs.

## Errors

Job-level failures sit in `payload.error` (the envelope's top-level `error` stays `null`, because the lookup itself succeeded):

| payload.error.code | meaning |
| - | - |
| `TRANSCRIPTION_FAILED` | audio could not be transcribed; no `result` |
| `TRANSLATION_FAILED` | speech-to-text succeeded but translation failed. `result.segments` is retained with `translated_text: null` for the segments that failed |

> [!NOTE]
>
> Translation quality is best effort. Missing or invalid translation output is reported with `TRANSLATION_FAILED` and `translated_text: null` for the affected segments. The original `text` is always preserved.

## Polling notes

* Polls do not count against your organization's transcription limit; only `POST /v2/transcriptions/uploads` and `POST /v2/transcriptions` do.
* Uploaded audio is deleted 90 days after it is uploaded, and a job's results and artifacts one year after the job finishes. Deletion can happen up to a day later. Download the results you need to keep. After deletion, `GET` answers `404` for the job, and a new submission for an upload whose audio has been deleted answers `404` (upload the file again).
* `503` with the envelope's top-level `error.code` `TRANSCRIPTION_RESULT_UNAVAILABLE` means the job reached a terminal status but its stored result could not be read at that moment. The job is unchanged: wait for the `Retry-After` seconds in the response and call `GET` again. A `succeeded` job is never answered without its `result`; a `failed` job may have none (see the table above). A `500` with `TRANSCRIPTION_GET_FAIL` on a terminal job means the stored result could not be read in a way polling will not fix; contact support with the `job_id`.


## OpenAPI

````yaml GET /v2/transcriptions/{job_id}
openapi: 3.0.1
info:
  title: LinqAlpha API
  description: >-
    Linq helps finance professionals make informed decisions using
    Retrieval-Augmented Generation (RAG)-enhanced answers. By leveraging
    cutting-edge Large Language Models (LLM) and supplementary technology, Linq
    provides the most optimized responses based on your queries.
  version: 1.0.0
  license:
    name: MIT
servers:
  - url: https://api.linqalpha.com
security:
  - ApiKeyAuth: []
tags:
  - name: Meeting Agent
    description: Book and manage meeting recording agents
  - name: Search
    description: Search and generate responses
  - name: Data
    description: Data retrieval and mapping
  - name: Feedback
    description: Conversation feedback
  - name: RMS
    description: Research Management System
  - name: Source Management
    description: Source batch and file management
  - name: MCP
    description: >-
      LinqAlpha MCP — Financial data tools for AI assistants via Model Context
      Protocol
  - name: Connectors
    description: Customer Connectors — customer-owned MCP connector management
  - name: Briefing
    description: Briefing Agent — automated market briefings with scheduling and delivery
  - name: Status
    description: Sync status — check organization, document, and container sync progress
paths:
  /v2/transcriptions/{job_id}:
    get:
      tags:
        - Transcriptions
      summary: Transcriptions — Poll / Retrieve
      description: >-
        Step 3. Reads stored state only; never restarts processing. 200 for any
        owned job including failed ones; 404 for unknown or foreign jobs, and
        for jobs whose stored files have been deleted (one year after the job
        finishes). Signed artifact URLs expire after expires_in seconds — call
        again for fresh ones.
      parameters:
        - name: job_id
          in: path
          required: true
          schema:
            type: string
            format: uuid
      responses:
        '200':
          description: Job state
          headers:
            Retry-After:
              schema:
                type: integer
              description: Present while queued/processing.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TranscriptionJobResponse'
              examples:
                processing:
                  value:
                    error: null
                    payload:
                      job_id: 5a1d3f6e-9c2b-4e7a-8f10-6b2c3d4e5f60
                      status: processing
                succeeded:
                  value:
                    error: null
                    payload:
                      job_id: 5a1d3f6e-9c2b-4e7a-8f10-6b2c3d4e5f60
                      status: succeeded
                      result:
                        schema_version: '1'
                        source_language: zh
                        target_language: en
                        segments:
                          - start_seconds: 0
                            end_seconds: 2.5
                            speaker: speaker_1
                            language: zh
                            text: 大家好。
                            translated_text: Hello, everyone.
                        artifacts:
                          raw_text:
                            url: https://...
                            expires_in: 3600
                          raw_json:
                            url: https://...
                            expires_in: 3600
                          translated_text:
                            url: https://...
                            expires_in: 3600
                          translated_json:
                            url: https://...
                            expires_in: 3600
                translation_failed:
                  value:
                    error: null
                    payload:
                      job_id: 5a1d3f6e-9c2b-4e7a-8f10-6b2c3d4e5f60
                      status: failed
                      error:
                        code: TRANSLATION_FAILED
                        message: Translation failed for 3 of 120 segments.
                      result:
                        schema_version: '1'
                        source_language: zh
                        target_language: en
                        segments:
                          - start_seconds: 0
                            end_seconds: 2.5
                            speaker: speaker_1
                            language: zh
                            text: 大家好。
                            translated_text: null
                        artifacts:
                          raw_text:
                            url: https://...
                            expires_in: 3600
                          raw_json:
                            url: https://...
                            expires_in: 3600
                          translated_text:
                            url: https://...
                            expires_in: 3600
                          translated_json:
                            url: https://...
                            expires_in: 3600
                failed:
                  value:
                    error: null
                    payload:
                      job_id: 5a1d3f6e-9c2b-4e7a-8f10-6b2c3d4e5f60
                      status: failed
                      error:
                        code: TRANSCRIPTION_FAILED
                        message: Audio could not be transcribed.
        '401':
          description: Unauthorized — invalid or missing API key
        '404':
          description: >-
            Unknown job, not owned by this organization, or older than one year
            (its stored files have been deleted)
        '503':
          description: >-
            The job's status or stored result could not be read right now
            (error.code TRANSCRIPTION_RESULT_UNAVAILABLE). The job is unchanged:
            wait Retry-After seconds and call again. A succeeded job is never
            answered without its result; a failed job may have none.
          headers:
            Retry-After:
              schema:
                type: integer
              description: Seconds to wait before polling again.
      security:
        - ApiKeyAuth: []
components:
  schemas:
    TranscriptionJobResponse:
      type: object
      properties:
        error:
          type: object
          nullable: true
          properties:
            code:
              type: string
            msg:
              type: string
            message:
              type: string
        payload:
          $ref: '#/components/schemas/TranscriptionJobPayload'
      required:
        - error
        - payload
    TranscriptionJobPayload:
      type: object
      required:
        - job_id
        - status
      properties:
        job_id:
          type: string
          format: uuid
        status:
          type: string
          enum:
            - queued
            - processing
            - succeeded
            - failed
        result:
          $ref: '#/components/schemas/TranscriptionResult'
        error:
          type: object
          properties:
            code:
              type: string
              enum:
                - TRANSCRIPTION_FAILED
                - TRANSLATION_FAILED
            message:
              type: string
    TranscriptionResult:
      type: object
      properties:
        schema_version:
          type: string
          example: '1'
        source_language:
          type: string
          nullable: true
        target_language:
          type: string
          nullable: true
        segments:
          type: array
          items:
            $ref: '#/components/schemas/TranscriptionSegment'
        artifacts:
          type: object
          additionalProperties:
            $ref: '#/components/schemas/TranscriptionArtifact'
    TranscriptionSegment:
      type: object
      properties:
        start_seconds:
          type: number
          nullable: true
        end_seconds:
          type: number
          nullable: true
        speaker:
          type: string
          nullable: true
          example: speaker_1
        language:
          type: string
          nullable: true
          description: Language code of the original speech.
          example: zh
        text:
          type: string
          description: Original transcript, always preserved.
        translated_text:
          type: string
          nullable: true
          description: >-
            Best-effort translation into target_language; null when no target
            was requested or a translation failure was detected for this
            segment. Original text is always preserved.
    TranscriptionArtifact:
      type: object
      properties:
        url:
          type: string
        expires_in:
          type: integer
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: X-API-KEY

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.