> ## 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.

# Update a callback's status

> Flip a callback between `open` and `done` as your team works through them. Only the status changes, and either direction is idempotent. Ids come from the campaign's callbacks list and contain `#` and `+`, so percent-encode the path value — an under-encoded id returns not found.



## OpenAPI

````yaml /voice-agents/api-reference/openapi.yaml patch /campaigns/callbacks/{callbackId}
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:
  /campaigns/callbacks/{callbackId}:
    patch:
      tags:
        - Campaign outcomes
      summary: Update a callback's status
      description: >-
        Flip a callback between `open` and `done` as your team works through
        them. Only the status changes, and either direction is idempotent. Ids
        come from the campaign's callbacks list and contain `#` and `+`, so
        percent-encode the path value — an under-encoded id returns not found.
      operationId: updateCallbackStatus
      parameters:
        - name: callbackId
          in: path
          required: true
          description: >-
            Comes from the campaign's callbacks list. Ids embed `#` and the
            contact's `+92…` number, so the path must be percent-encoded:
            `/campaigns/callbacks/9f4c2a1e-…%23%2B923001234567%23a1%23cb`.
            Unique within the API key's project.
          schema:
            type: string
          example: 9f4c2a1e-xxxx-xxxx-xxxx-xxxxxxxxxxxx#+923001234567#a1#cb
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateCallbackStatusRequest'
            example:
              status: done
      responses:
        '200':
          description: The callback's status after the write.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UpdateCallbackStatusResponse'
              example:
                callbackId: 9f4c2a1e-xxxx-xxxx-xxxx-xxxxxxxxxxxx#+923001234567#a1#cb
                status: done
        '400':
          description: Validation failed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                message:
                  - 'status must be one of the following values: open, done'
                error: Bad Request
                statusCode: 400
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          description: >-
            No callback with that id in the API key's project. An under-encoded
            id lands here too.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                message: >-
                  Callback not found:
                  9f4c2a1e-xxxx-xxxx-xxxx-xxxxxxxxxxxx#+923001234567#a1#cb
                error: Not Found
                statusCode: 404
components:
  schemas:
    UpdateCallbackStatusRequest:
      type: object
      properties:
        status:
          type: string
          enum:
            - open
            - done
          description: >-
            `done` marks the request handled; `open` reopens it. Either
            direction is idempotent.
      required:
        - status
    UpdateCallbackStatusResponse:
      type: object
      properties:
        callbackId:
          type: string
          description: The path id, URL-decoded.
        status:
          type: string
          enum:
            - open
            - done
    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
  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_…`).

````