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

# Get an assistant's build record

> The durable record behind an assistant's builds: the brief, prompt version, gate result, and chosen sample transcripts — it never expires. It is not live progress: `status` is whatever the last run wrote when it ended, so an in-flight refine still reads the previous outcome. Poll the build status for anything currently running.



## OpenAPI

````yaml /voice-agents/api-reference/openapi.yaml get /realtime-assistants/builds/{assistantId}
openapi: 3.1.0
info:
  title: UpliftAI Voice Agents API
  version: '1.0'
  description: >-
    Build voice assistants, start conversations on the web or the phone, run
    calling campaigns, and receive outcomes by webhook. All endpoints take a
    bearer API key unless noted otherwise.
servers:
  - url: https://api.upliftai.org/v1
security:
  - apiKey: []
tags:
  - name: Assistants
  - name: Authoring an assistant
  - name: Starting a conversation
  - name: Sessions & call records
  - name: Campaigns
  - name: Campaign outcomes
  - name: Contacts
  - name: Google Sheet sources
  - name: Integrations & delivery health
paths:
  /realtime-assistants/builds/{assistantId}:
    get:
      tags:
        - Authoring an assistant
      summary: Get an assistant's build record
      description: >-
        The durable record behind an assistant's builds: the brief, prompt
        version, gate result, and chosen sample transcripts — it never expires.
        It is not live progress: `status` is whatever the last run wrote when it
        ended, so an in-flight refine still reads the previous outcome. Poll the
        build status for anything currently running.
      operationId: getAssistantBuild
      parameters:
        - name: assistantId
          in: path
          required: true
          description: The `assistantId` the build returned.
          schema:
            type: string
            format: uuid
          example: ee42ac3b-xxxx-xxxx-xxxx-xxxxxxxxxxxx
      responses:
        '200':
          description: The build record.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AssistantBuildRecord'
              examples:
                building:
                  summary: The pipeline is still running
                  value:
                    organizationId: a12b7e74-xxxx-xxxx-xxxx-xxxxxxxxxxxx
                    projectId: c782a4ec-xxxx-xxxx-xxxx-xxxxxxxxxxxx
                    assistantId: b424880f-xxxx-xxxx-xxxx-xxxxxxxxxxxx
                    status: building
                    promptVersion: 1
                    brief:
                      organizationId: a12b7e74-xxxx-xxxx-xxxx-xxxxxxxxxxxx
                      projectId: c782a4ec-xxxx-xxxx-xxxx-xxxxxxxxxxxx
                      goal: payment_reminder
                      voiceId: v_meklc281
                      gender: female
                      context: >-
                        Bright Future School, Rawalpindi. Call parents about the
                        pending monthly fee, tell them the amount and the due
                        date, and ask when they can pay.
                      sampleRows:
                        - name: فرحان ملک
                          phone: '+923215558842'
                          amount: 12,500
                          dueDate: 25 اگست
                    updatedAt: '2026-08-18T05:16:58.583Z'
                ready:
                  summary: Finished after three rounds, with the grader still objecting
                  value:
                    organizationId: a12b7e74-xxxx-xxxx-xxxx-xxxxxxxxxxxx
                    projectId: c782a4ec-xxxx-xxxx-xxxx-xxxxxxxxxxxx
                    assistantId: ee42ac3b-xxxx-xxxx-xxxx-xxxxxxxxxxxx
                    status: ready
                    promptVersion: 3
                    passed: false
                    agentName: ثناء
                    businessName: Shifa Clinic
                    brief:
                      organizationId: a12b7e74-xxxx-xxxx-xxxx-xxxxxxxxxxxx
                      projectId: c782a4ec-xxxx-xxxx-xxxx-xxxxxxxxxxxx
                      goal: appointment
                      voiceId: v_meklc281
                      gender: female
                      context: >-
                        Shifa Clinic, Lahore. Call patients to confirm
                        tomorrow's doctor appointment, remind them of the time,
                        and offer to reschedule if they cannot come.
                      sampleRows:
                        - name: عائشہ صدیقی
                          phone: '+923001234567'
                          doctor: ڈاکٹر عمران شیخ
                          appointmentTime: کل صبح 11 بجے
                    sampleTranscripts:
                      happy:
                        label: >-
                          عائشہ صدیقی — cheerful appointment confirmation for
                          Dr. عمران شیخ, Lahore
                        archetype: happy
                        path: happy
                        turns:
                          - speaker: agent
                            text: >-
                              السلام علیکم، کیا میں عائشہ صدیقی سے بات کر رہی
                              ہوں؟


                              میں Shifa Clinic سے ثناء بات کر رہی ہوں۔ کل کی
                              appointment confirm کرنی تھی، ایک منٹ بات کر سکتی
                              ہوں؟
                          - speaker: caller
                            text: >-
                              وعلیکم السلام بھئی جی، جی میں عائشہ صدیقی ہی بول
                              رہی ہوں۔ ہاں جی بالکل، آپ ایک منٹ بات کر لیں۔
                          - speaker: agent
                            text: >-
                              شکریہ عائشہ۔


                              آپ کی کل صبح گیارہ بجے ڈاکٹر عمران شیخ کے ساتھ
                              appointment ہے۔


                              آپ اُس وقت آ سکیں گی؟
                          - speaker: caller
                            text: >-
                              جی ہاں بھئی! میں کل صبح 11 بجے بالکل آ جاؤں گی،
                              اپائنٹمنٹ کنفرم کر دیں۔ خدا حافظ
                    updatedAt: '2026-08-18T05:13:44.008Z'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          description: >-
            No build record under that id in the API key's project — an
            assistant created by hand rather than by a build has none.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                message: >-
                  No build found for assistant
                  c723a299-xxxx-xxxx-xxxx-xxxxxxxxxxxx
                error: Not Found
                statusCode: 404
components:
  schemas:
    AssistantBuildRecord:
      type: object
      description: >-
        `passed`, `agentName`, `businessName` and `sampleTranscripts` land only
        when a build finishes; the rest is written the moment it starts.
      properties:
        organizationId:
          type: string
          format: uuid
        projectId:
          type: string
          format: uuid
        assistantId:
          type: string
          format: uuid
        status:
          type: string
          enum:
            - building
            - ready
            - failed
          description: >-
            `building` while the first run is in flight, then `ready` on success
            or `failed` on a crash — the reason lands in `error`. A refine keeps
            the previous value until its run ends.
        promptVersion:
          type: integer
          description: >-
            Counts up once per rewrite, so anything above `1` means the grader
            sent the prompt back.
        passed:
          type: boolean
          description: >-
            Whether the final round ended with nothing flagged. `false` means
            the rounds ran out with the grader still objecting: the assistant is
            callable either way, so read the sample transcripts first.
        agentName:
          type: string
          description: >-
            The name the assistant introduces itself by, chosen during
            authoring.
        businessName:
          type: string
          description: The business it says it is calling for, taken from the brief.
        brief:
          allOf:
            - $ref: '#/components/schemas/BuildBrief'
          description: >-
            The brief this build ran from, echoed with the ids it was stored
            under. A refine that sends a new brief replaces it.
        sampleTranscripts:
          type: object
          description: >-
            The cleanest rehearsal on each path — fewest findings, longest
            conversation breaking ties. Either path may be missing.
          properties:
            happy:
              $ref: '#/components/schemas/SampleTranscript'
            negative:
              $ref: '#/components/schemas/SampleTranscript'
        buildId:
          type: string
          format: uuid
          description: >-
            The run that last wrote this record — what the status poll's durable
            fallback matches on.
        error:
          type: string
          description: Why the last run failed. Only present when `status` is `failed`.
        updatedAt:
          type: string
          format: date-time
          description: When the record was last written — build start or finish.
    Error:
      type: object
      properties:
        message:
          description: >-
            One message per failed field for validation errors, a single string
            otherwise.
          oneOf:
            - type: string
            - type: array
              items:
                type: string
        error:
          type: string
        statusCode:
          type: integer
    BuildBrief:
      type: object
      properties:
        goal:
          type: string
          description: >-
            What the call is for. Also picks the tool the assistant gets for
            recording the outcome.
          enum:
            - appointment
            - event
            - lead
            - order_confirmation
            - payment_reminder
            - outreach
            - reservation_confirmation
        voiceId:
          type: string
          description: >-
            Voice for the built assistant's `tts.default` — ids are in the
            voices gallery.
        gender:
          type: string
          enum:
            - male
            - female
          description: >-
            The agent's own gender. Urdu verb forms are gendered, so the prompt
            is written and graded against it — match it to `voiceId`.
        context:
          type: string
          maxLength: 8000
          description: >-
            The brief in your own words: the business, what the call must
            achieve, the key message, who is being called. Passed to the
            authoring model verbatim, so its detail sets the prompt's quality.
        sampleRows:
          type: array
          maxItems: 20
          description: >-
            Real contact rows, using the column names your campaign will send.
            Each test persona is grounded in one row, injected the way a live
            call receives a contact — no call is placed, the rehearsals are
            text-only.
          items:
            type: object
            additionalProperties:
              type: string
      required:
        - goal
        - voiceId
        - gender
        - context
    SampleTranscript:
      type: object
      properties:
        label:
          type: string
          description: The persona this rehearsal was run against.
        archetype:
          type: string
          description: The behavior the persona was built to test.
          enum:
            - happy
            - chatty
            - busy
            - suspicious
            - jailbreak
            - opt_out
            - wrong_party
            - mishearing
            - price_pusher
            - polite_no
            - maybe_later
            - angry
        path:
          type: string
          enum:
            - happy
            - negative
        turns:
          type: array
          items:
            $ref: '#/components/schemas/TranscriptTurn'
    TranscriptTurn:
      type: object
      properties:
        speaker:
          type: string
          enum:
            - agent
            - caller
        text:
          type: string
  responses:
    Unauthorized:
      description: A bearer key was sent but is not recognized.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            message: invalid authorization
            error: Unauthorized
            statusCode: 401
    Forbidden:
      description: No API key sent, or the key lacks permission for this resource.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            message: Forbidden resource
            error: Forbidden
            statusCode: 403
  securitySchemes:
    apiKey:
      type: http
      scheme: bearer
      description: Project API key (`sk_api_…`).

````