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

# Get account

> The key's workspace, its plan, available credits and this key's limits. Works on every plan.



## OpenAPI

````yaml /openapi/voyager-api.yaml get /account
openapi: 3.1.0
info:
  title: Voyager API
  description: >-
    Generate images, video, speech, music, sound effects and 3D with your
    Voyager workspace's credits. Authenticate with `Authorization: Bearer
    vy_live_…`. Every response carries `X-Request-ID` and the
    `X-RateLimit-Limit` / `X-RateLimit-Remaining` / `X-RateLimit-Reset` (seconds
    until the window resets) headers; a 429 adds `Retry-After`. Errors share one
    envelope (`ErrorResponse`).
  version: 1.0.0
  x-voyager-agent-prompt: >
    Set up the Voyager API in this project.


    Voyager generates images, video, speech, music, sound effects, 3D and object
    masks with the same models

    and credits as the Voyager app. Docs: https://docs.voyager.so/api 
    (agent-readable:

    https://docs.voyager.so/llms.txt, OpenAPI:
    https://api.voyager.so/v1/openapi.json)


    1. Key: read it from the env var VOYAGER_API_KEY. Never hard-code it or
    commit it; add
       VOYAGER_API_KEY= to .env.example and make sure .env is git-ignored. If it's missing,
       ask me to create one at https://voyager.so/dashboard/api (paid plans).
    2. Base URL https://api.voyager.so/v1, header: Authorization: Bearer
    $VOYAGER_API_KEY

    3. Pick a model: GET
    /models?type=image|video|speech|music|sound_effect|3d|segment. Read
       GET /models/{id} for its input_schema before building a request.
    4. Optional cost check: POST /estimate with the same body as step 5; it
    returns
       estimated_charge (credits) and can_run.
    5. Create: POST /jobs {"model": "<id>", "operation": "<op>", "input": {...}}
    with an Idempotency-Key header
       (a new UUID per logical request; reuse it when retrying the same request).
    6. Wait: GET /jobs/{id}?wait=25 until status is succeeded, failed or
    canceled
       (honor Retry-After / poll_after_ms). Or pass "webhook_url" and verify the
       Standard Webhooks signature with the secret from the dashboard.
    7. Results: job.outputs[].url is a signed link valid for 1 hour; download it
    right
       away, or GET /jobs/{id} again for a fresh link. Files are kept 30 days.
    8. Errors are {"error": {"code","message","retryable",...}}. 402 = out of
    credits or
       not on a paid plan (show error.details.upgrade_url to me). 429 = slow down: wait
       Retry-After seconds. Retry only when retryable is true, with the same Idempotency-Key.

    Minimal example (curl):
      curl -s https://api.voyager.so/v1/jobs \
        -H "Authorization: Bearer $VOYAGER_API_KEY" -H "Content-Type: application/json" \
        -H "Idempotency-Key: $(uuidgen)" \
        -d '{"model":"nano-banana-2.1","operation":"text-to-image","input":{"prompt":"a red fox in snow","aspect_ratio":"16:9"}}'
      curl -s "https://api.voyager.so/v1/jobs/<job id>?wait=25" -H "Authorization: Bearer $VOYAGER_API_KEY"

    Write a small typed client (create → wait → download) with retries as above,
    then

    generate one test image to prove it works and tell me what it cost
    (job.credits.charged;

    if credits.state is still "pending", report job.credits.estimated and say
    it's an estimate).
servers:
  - url: https://api.voyager.so/v1
    description: Production
security: []
paths:
  /account:
    get:
      tags:
        - Account
      summary: Get account
      description: >-
        The key's workspace, its plan, available credits and this key's limits.
        Works on every plan.
      operationId: getAccount
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Account'
          headers:
            X-Request-ID:
              $ref: '#/components/headers/X-Request-ID'
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
            X-RateLimit-Reset:
              $ref: '#/components/headers/X-RateLimit-Reset'
        '401':
          description: Missing, invalid or revoked API key.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
          headers:
            X-Request-ID:
              $ref: '#/components/headers/X-Request-ID'
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
            X-RateLimit-Reset:
              $ref: '#/components/headers/X-RateLimit-Reset'
        '429':
          description: Rate limited. Retry after Retry-After seconds.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
          headers:
            X-Request-ID:
              $ref: '#/components/headers/X-Request-ID'
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
            X-RateLimit-Reset:
              $ref: '#/components/headers/X-RateLimit-Reset'
            Retry-After:
              $ref: '#/components/headers/Retry-After'
        '503':
          description: Temporarily unavailable. Retry with backoff.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
          headers:
            X-Request-ID:
              $ref: '#/components/headers/X-Request-ID'
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
            X-RateLimit-Reset:
              $ref: '#/components/headers/X-RateLimit-Reset'
      security:
        - bearerAuth: []
components:
  schemas:
    Account:
      properties:
        object:
          type: string
          const: account
          title: Object
          default: account
          description: Always "account".
        workspace:
          $ref: '#/components/schemas/Workspace'
          description: The workspace this key belongs to.
        api_key:
          $ref: '#/components/schemas/ApiKeyInfo'
          description: The key making this request.
        plan:
          $ref: '#/components/schemas/Plan'
          description: The workspace's Voyager plan.
        credits:
          $ref: '#/components/schemas/Credits'
          description: The workspace's credit balance.
        limits:
          $ref: '#/components/schemas/Limits'
          description: Rate, concurrency and queue limits that apply to this key.
      type: object
      required:
        - workspace
        - api_key
        - plan
        - credits
        - limits
      title: Account
    ErrorResponse:
      properties:
        error:
          $ref: '#/components/schemas/ErrorBody'
          description: What went wrong.
      type: object
      required:
        - error
      title: ErrorResponse
      description: Every non-2xx answer.
    Workspace:
      properties:
        id:
          type: string
          title: Id
          description: The workspace's id.
        name:
          anyOf:
            - type: string
            - type: 'null'
          title: Name
          description: The workspace's name.
      type: object
      required:
        - id
        - name
      title: Workspace
    ApiKeyInfo:
      properties:
        id:
          type: string
          title: Id
          description: The key's id.
        name:
          type: string
          title: Name
          description: The key's name, as set when it was created.
      type: object
      required:
        - id
        - name
      title: ApiKeyInfo
    Plan:
      properties:
        key:
          anyOf:
            - type: string
            - type: 'null'
          title: Key
          description: >-
            free, starter, creator, ultra or gigamax; null when the workspace
            has none.
        name:
          anyOf:
            - type: string
            - type: 'null'
          title: Name
          description: The plan's name; null without one.
        paid:
          type: boolean
          title: Paid
          description: Whether new generations and uploads are allowed through the API.
      type: object
      required:
        - key
        - name
        - paid
      title: Plan
    Credits:
      properties:
        available:
          anyOf:
            - type: integer
            - type: 'null'
          title: Available
          description: >-
            The workspace's credit balance, as its Voyager dashboard shows it;
            null when it could not be read.
        unit:
          type: string
          const: credits
          title: Unit
          default: credits
          description: Always "credits".
      type: object
      required:
        - available
      title: Credits
    Limits:
      properties:
        requests_per_minute:
          $ref: '#/components/schemas/RequestsPerMinute'
          description: Requests this key may make per minute.
        concurrency:
          $ref: '#/components/schemas/Concurrency'
          description: Jobs that may run at once.
        queue:
          $ref: '#/components/schemas/Queue'
          description: Jobs that may wait at once, and for how long.
      type: object
      required:
        - requests_per_minute
        - concurrency
        - queue
      title: Limits
    ErrorBody:
      properties:
        type:
          $ref: '#/components/schemas/ErrorType'
          description: Stable category to branch on.
        code:
          type: string
          enum:
            - invalid_request
            - invalid_input
            - content_policy
            - upstream_unavailable
            - rate_limited
            - queue_full
            - model_unavailable
            - model_not_found
            - insufficient_credits
            - paid_plan_required
            - model_not_in_plan
            - model_access_required
            - outcome_unknown
            - expired
            - not_found
            - conflict
            - forbidden
            - internal_error
            - catalog_unavailable
            - billing_unavailable
            - no_voyager_seat
            - credits_reloading
            - cast_not_supported
            - voice_cloning_unavailable
            - too_many_references
            - payload_too_large
            - upload_too_large
            - intake_full
            - invalid_url
            - fetch_failed
            - unsupported_file
            - invalid_api_key
            - idempotency_conflict
            - idempotency_in_flight
            - invalid_idempotency_key
            - invalid_cursor
            - invalid_webhook_url
            - method_not_allowed
            - account_unavailable
            - plan_required_for_faces
            - version_conflict
            - slug_taken
            - already_referenced
            - asset_in_use
            - upload_incomplete
            - cancel_unsupported
            - unsupported_model
            - invalid_job_id
            - voice_required
            - observation_timeout
            - reference_unavailable
            - queue_timeout
            - reference_missing
          title: Code
          description: >-
            Stable machine code; never renamed once published (x-voyager-errors
            lists each).
        message:
          type: string
          title: Message
          description: For developers. Not localized.
        doc_url:
          type: string
          title: Doc Url
          description: https://docs.voyager.so/api/errors#<code>
        request_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Request Id
          description: Also in the X-Request-ID header; quote it to support.
        retryable:
          anyOf:
            - type: boolean
            - type: 'null'
          title: Retryable
          description: Whether the same request can succeed later.
        retry_after_ms:
          anyOf:
            - type: integer
            - type: 'null'
          title: Retry After Ms
          description: How long to wait before retrying.
        param:
          anyOf:
            - type: string
            - type: 'null'
          title: Param
          description: >-
            The request field at fault, as a path (e.g. input.resolution); set
            on invalid_input.
        details:
          anyOf:
            - additionalProperties: true
              type: object
            - type: 'null'
          title: Details
          description: Code-specific detail, e.g. upgrade_url on a billing wall.
      type: object
      required:
        - type
        - code
        - message
        - doc_url
      title: ErrorBody
    RequestsPerMinute:
      properties:
        write:
          type: integer
          title: Write
          description: 'Per key: creates, estimates, uploads and other writes.'
        read:
          type: integer
          title: Read
          description: 'Per key: every GET.'
      type: object
      required:
        - write
        - read
      title: RequestsPerMinute
    Concurrency:
      properties:
        scope:
          type: string
          const: user
          title: Scope
          description: >-
            Counted per person across the app, the MCP and every one of their
            keys; not per workspace. Speech and 3D jobs are also bounded by a
            workspace-wide cap on those job types.
        parallel_generations:
          anyOf:
            - type: integer
            - type: 'null'
          title: Parallel Generations
          description: Generations running at once; more wait queued.
        workspace:
          $ref: '#/components/schemas/WorkspaceConcurrency'
          description: Speech and 3D jobs also share a workspace-wide cap.
      type: object
      required:
        - scope
        - parallel_generations
        - workspace
      title: Concurrency
    Queue:
      properties:
        max_queued:
          type: integer
          title: Max Queued
          description: >-
            Active jobs (queued plus running) one person may have at once,
            across workspaces; a create beyond it is 429 queue_full and nothing
            is accepted.
        max_queued_age_seconds:
          type: integer
          title: Max Queued Age Seconds
          description: A job queued longer is canceled (error.code queue_timeout).
      type: object
      required:
        - max_queued
        - max_queued_age_seconds
      title: Queue
    ErrorType:
      type: string
      enum:
        - invalid_request
        - authentication
        - permission
        - not_found
        - conflict
        - rate_limited
        - idempotency_conflict
        - unprocessable
        - upstream_error
        - internal_error
      title: ErrorType
      description: Closed set of high-level categories SDKs branch on.
    WorkspaceConcurrency:
      properties:
        speech:
          type: integer
          title: Speech
          description: Speech jobs running at once across the workspace.
        3d:
          type: integer
          title: 3D
          description: 3D jobs running at once across the workspace.
      type: object
      required:
        - speech
        - 3d
      title: WorkspaceConcurrency
      description: >-
        Workspace-wide caps on job types that count every member's jobs
        together, on top of the per-person limit.
  headers:
    X-Request-ID:
      description: This request's id (also error.request_id).
      schema:
        type: string
    X-RateLimit-Limit:
      description: >-
        Requests allowed per 60 seconds in this bucket (120 writes or 600 reads
        per minute per key).
      schema:
        type: integer
    X-RateLimit-Remaining:
      description: Requests left in this window.
      schema:
        type: integer
    X-RateLimit-Reset:
      description: Seconds until the window resets.
      schema:
        type: integer
    Retry-After:
      description: Seconds to wait before retrying.
      schema:
        type: integer
  securitySchemes:
    bearerAuth:
      type: http
      description: A Voyager API key from https://voyager.so/dashboard/api.
      scheme: bearer
      bearerFormat: vy_live_…

````

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