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

# Resolve Greeting Audio Playback Url

> Mint a short-lived presigned GET URL to re-preview greeting audio.

Recomputes the content fingerprint from ``request.text`` + the version's
TTS config (the same way the runtime does), then presigns the stored
object. Returns 404 if no recording exists for that exact text+voice
(e.g. the text was edited but not regenerated). The bucket and org come
from trusted server state, so there is no caller-supplied location.

For an agent with a randomized voice pool, *every* pool voice must have
a recording before this reports success: a partial set still plays, but
the calls that draw a missing voice fall back to live TTS, and the
builder saying "pre-generated" while some calls are not would be the
lie this endpoint exists to prevent. One presigned URL is returned per
pool voice so each can be auditioned.



## OpenAPI

````yaml /openapi.json post /core/agents/{id}/versions/{version}/starting-message/audio/playback-url
openapi: 3.1.0
info:
  title: Anyreach API
  version: 1.0.0
  description: >-
    REST API for the Anyreach platform.


    Every endpoint is scoped to one organization. Authenticate with a bearer
    token and, if your token can reach more than one organization, name the one
    you mean with the `X-Anyreach-Org` header. See
    [Authentication](https://docs.anyreach.ai/api-reference/authentication).


    This reference is generated from the running service, so the request and
    response shapes here are the ones the API actually enforces.
servers:
  - url: https://api.anyreach.ai
    description: Production
security:
  - bearerAuth: []
tags:
  - name: Agents
    description: >-
      Create and configure the agent that handles a conversation, and manage its
      versions. An agent's behaviour lives in a version; publishing a version is
      what puts it on the air.
  - name: Conversations
    description: >-
      Create, list, retrieve, and message conversations between your users and
      Anyreach agents.
  - name: Conversation attachments
    description: >-
      Upload files into a conversation and read them back. Uploads are two-step:
      presign, PUT to the returned URL, then mark the attachment complete.
  - name: Conversation events
    description: >-
      The ordered event stream behind a conversation — turns, tool calls,
      transfers, and status changes.
  - name: Knowledge bases
    description: >-
      A knowledge base (a `dataset` in the API) is a collection of embedded
      content an agent can retrieve from.
  - name: Knowledge base sources
    description: Attach and detach sources to a knowledge base.
  - name: Sources
    description: >-
      A source is a file or URL whose content is ingested, chunked, and
      embedded.
  - name: Phone numbers
    description: >-
      Buy, list, and release phone numbers, and point each one at the agent that
      should answer it.
  - name: Trunks
    description: >-
      SIP trunks for bringing your own carrier. A trunk carries calls between
      your carrier and Anyreach.
  - name: Inbound routing
    description: >-
      Rules that decide which agent answers an inbound call, evaluated before
      the call connects.
  - name: Agent assist
    description: >-
      Look up the live-assist context for a number so a human agent can see what
      the AI agent knows.
  - name: Human handoff
    description: >-
      Connections to the help desk a conversation escalates into, and the test
      endpoint that proves one works.
  - name: Email domains
    description: >-
      Register a sending domain and verify its DNS before an agent can send from
      it.
  - name: Email addresses
    description: >-
      The addresses on a verified domain, and the agent that handles mail
      arriving at each one.
  - name: Unsubscribes
    description: >-
      The suppression list. An address on this list is never emailed again until
      it is removed.
  - name: Web widgets
    description: >-
      The embeddable chat and voice widget: its appearance, its allowed domains,
      and the agent behind it.
  - name: Campaigns
    description: >-
      An outbound campaign dials a contact list with a given agent on a given
      schedule. Start, pause, and close control its lifecycle.
  - name: Campaign contacts
    description: >-
      The people a campaign dials. Contacts can be added while the campaign is
      running.
  - name: Campaign configurations
    description: >-
      Reusable dialing settings — calling windows, retry policy, timezone
      handling — that campaigns reference.
  - name: Campaign stats
    description: >-
      Per-campaign outcome counters, and the organization-wide cap on how many
      calls run at once.
  - name: Custom data
    description: >-
      Your own tables, queryable by an agent mid-conversation. Define a table,
      load rows, and expose read-only stored queries as agent tools.
  - name: Metrics
    description: >-
      The definitions an LLM judge scores a conversation against. Lint and
      preview a metric before you run it at scale.
  - name: Evaluations
    description: A scorecard binding a set of metrics to a population of conversations.
  - name: Evaluation runs
    description: >-
      One execution of an evaluation over a conversation set, and the results it
      produced.
  - name: Workflows
    description: >-
      Automations built from steps. A workflow is edited as a version and goes
      live when a version is published and set live.
  - name: Workflow triggers
    description: >-
      What starts a workflow — a schedule, a webhook, or a point in an agent
      conversation. Triggers are versioned alongside the workflow.
  - name: Workflow executions
    description: >-
      Run a workflow and read back what happened. Executions are synchronous by
      default; use the async endpoint for long-running work.
  - name: Workflow credentials
    description: >-
      Secrets a workflow step authenticates with. Values are write-only — they
      can be set and rotated, never read back.
paths:
  /core/agents/{id}/versions/{version}/starting-message/audio/playback-url:
    post:
      tags:
        - Agents
      summary: Resolve Greeting Audio Playback Url
      description: |-
        Mint a short-lived presigned GET URL to re-preview greeting audio.

        Recomputes the content fingerprint from ``request.text`` + the version's
        TTS config (the same way the runtime does), then presigns the stored
        object. Returns 404 if no recording exists for that exact text+voice
        (e.g. the text was edited but not regenerated). The bucket and org come
        from trusted server state, so there is no caller-supplied location.

        For an agent with a randomized voice pool, *every* pool voice must have
        a recording before this reports success: a partial set still plays, but
        the calls that draw a missing voice fall back to live TTS, and the
        builder saying "pre-generated" while some calls are not would be the
        lie this endpoint exists to prevent. One presigned URL is returned per
        pool voice so each can be auditioned.
      operationId: resolveGreetingAudioPlaybackUrl
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: string
            title: Id
        - name: version
          in: path
          required: true
          schema:
            type: string
            title: Version
        - name: x-anyreach-org
          in: header
          required: false
          schema:
            anyOf:
              - type: string
              - type: 'null'
            description: Organization ID for user PATs (pat_ prefix tokens)
            title: X-Anyreach-Org
          description: Organization ID for user PATs (pat_ prefix tokens)
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/GreetingAudioRequest'
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GreetingAudioResponse'
              example:
                recordings:
                  - voice_id: 3fa85f64-5717-4562-b3fc-2c963f66afa6
                    playback_url: https://example.com/resource
                playback_url: https://example.com/resource
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
      security:
        - HTTPBearer: []
components:
  schemas:
    GreetingAudioRequest:
      properties:
        text:
          type: string
          title: Text
        force:
          type: boolean
          title: Force
          default: false
      type: object
      required:
        - text
      title: GreetingAudioRequest
      description: >-
        Request to pre-generate (or re-preview) static-greeting audio.


        ``text`` is supplied by the caller so it works on unsaved drafts
        (mirrors

        ``suggest-action-grid``). The TTS voice is read from the saved version's

        configured TTS model, and the stored object is content-addressed over

        ``text`` + that config, so the same body identifies the same recording.
    GreetingAudioResponse:
      properties:
        recordings:
          items:
            $ref: '#/components/schemas/GreetingAudioRecording'
          type: array
          title: Recordings
        playback_url:
          type: string
          title: Playback Url
          description: |-
            The primary voice's recording (pool entry 0 when there is a pool).

            Serialized alongside ``recordings`` so a client that predates the
            per-voice list keeps working — including across a deploy where the
            backend rolls out ahead of the builder.
          readOnly: true
      type: object
      required:
        - recordings
        - playback_url
      title: GreetingAudioResponse
      description: |-
        Short-lived presigned URLs for playing/previewing greeting audio.

        An agent with a randomized voice pool has one recording per pool voice —
        any of them can open a real call, so all of them are auditionable.
    HTTPValidationError:
      properties:
        detail:
          items:
            $ref: '#/components/schemas/ValidationError'
          type: array
          title: Detail
      type: object
      title: HTTPValidationError
    GreetingAudioRecording:
      properties:
        voice_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Voice Id
        playback_url:
          type: string
          title: Playback Url
      type: object
      required:
        - playback_url
      title: GreetingAudioRecording
      description: One pre-generated greeting recording, in one voice.
    ValidationError:
      properties:
        loc:
          items:
            anyOf:
              - type: string
              - type: integer
          type: array
          title: Location
        msg:
          type: string
          title: Message
        type:
          type: string
          title: Error Type
      type: object
      required:
        - loc
        - msg
        - type
      title: ValidationError
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: Personal access token or organization API key. See Authentication.

````