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

# Cancel a booked call

> 
Cancel a booked call. Runs the same lifecycle pipeline as a cancellation
performed in the Aura dashboard:

- The calendar event is deleted and guests are notified
- Cancellation emails and reminder supersede are dispatched
- Any scheduled meeting recording is torn down
- The `call.cancelled` webhook fires to all subscribers (do not expect a
  second event from this endpoint — the platform pipeline is the single
  emitter)

**Idempotency:** cancelling an already-cancelled (or declined) call returns
200 with the current call state and performs no mutation.

**Terminal outcomes:** calls whose deal already resolved (`closed` /
`lost`) cannot be cancelled — the request fails with 409
`CALL_NOT_CANCELLABLE`.

**Upstream failures:** if the upstream calendar provider rejects the
cancellation the request fails with 422 `EXTERNAL_API_ERROR`; if the
provider is degraded it fails with 502 `EXTERNAL_API_ERROR`. No partner
data is changed in either case.
	

Cancel a booked call. Runs the same lifecycle pipeline as a cancellation
performed in the Aura dashboard:

* The calendar event is deleted and guests are notified
* Cancellation emails and reminder supersede are dispatched
* Any scheduled meeting recording is torn down
* The `call.cancelled` webhook fires to all subscribers (do not expect a
  second event from this endpoint — the platform pipeline is the single
  emitter)

**Idempotency:** cancelling an already-cancelled (or declined) call returns
200 with the current call state and performs no mutation.

**Terminal outcomes:** calls whose deal already resolved (`closed` /
`lost`) cannot be cancelled — the request fails with 409
`CALL_NOT_CANCELLABLE`.

**Upstream failures:** if the upstream calendar provider rejects the
cancellation the request fails with 422 `EXTERNAL_API_ERROR`; if the
provider is degraded it fails with 502 `EXTERNAL_API_ERROR`. No partner
data is changed in either case.


## OpenAPI

````yaml openapi.json POST /v1/calls/{id}/cancel
openapi: 3.1.0
info:
  contact:
    email: support@aura-app.ai
    name: Aura Support
  description: >-
    # Aura Partner Integrations API


    > **Alpha Release** - This API is under active development. Endpoints,
    request/response schemas, and behaviors may change without prior notice. We
    recommend pinning to specific response fields you need and handling unknown
    fields gracefully.


    Enterprise REST API for external partner integrations including

    commission platforms, external mobile apps, and client booking widgets.


    ## MCP Connector


    Aura also exposes a **Model Context Protocol** server at `/mcp` so AI

    assistants (Claude, ChatGPT) can answer questions about a user's own sales
    data.

    If you are building an assistant integration rather than a server-to-server
    one,

    that is almost certainly the surface you want — it is task-shaped ("prep me
    for

    my next call") rather than resource-shaped, and it handles auth per-user.


    Read-only. OAuth 2.1 + PKCE, with Clerk as the authorization server;
    discover it

    from `/.well-known/oauth-protected-resource`. Setup guide:

    https://docs.api.aura-app.ai/mcp-connector


    ## Authentication


    Authenticated endpoints support two authentication methods:


    **1. API Key (for partners and integrations):**

    ```

    Authorization: Bearer aura_pk_live_xxxxxxxxxxxxxxxx

    ```

    Get your API key from the Aura dashboard at Settings > API Keys.


    **2. Clerk JWT (for mobile and web apps):**

    ```

    Authorization: Bearer <clerk_jwt_token>

    ```

    Use Clerk's authentication SDK to obtain a JWT token with org claims.


    ## Rate Limiting


    - **Per API Key:** 100 requests/minute

    - **Per Organization:** 1000 requests/minute


    Rate limit headers are included in all responses:

    - `X-RateLimit-Limit`: Maximum requests allowed

    - `X-RateLimit-Remaining`: Remaining requests in current window

    - `X-RateLimit-Reset`: Unix timestamp when limit resets


    These counters are held per serving instance, so under concurrency the

    effective ceiling is higher than the number above and the headers describe
    one

    instance's view rather than a global total. Treat a 429 as backpressure to
    obey

    and pace your client to the documented rate — but do not rely on us to
    reject

    your 101st request, and do not derive a global remaining-quota figure from
    the

    headers. The limit may become globally enforced without notice, so a client

    that stays within it will not be affected when that happens.


    ## Pagination


    List endpoints support cursor-based pagination:

    - `limit`: Number of results per page (default: 50, max: 100)

    - `cursor`: Opaque cursor for next page


    ## Error Handling


    All errors follow a standard format:


    ```json

    {
      "success": false,
      "error": "Error message",
      "code": "ERROR_CODE"
    }

    ```


    Common HTTP status codes:

    - **400** Bad Request - Invalid input (`VALIDATION_ERROR`)

    - **401** Unauthorized - Missing or invalid API key (`AUTHENTICATION_ERROR`)

    - **402** Payment Required - The key is valid, but the organization's
    subscription is not active (`PAYMENT_REQUIRED`). Every authenticated
    endpoint can return this. Retrying will not help until the account's payment
    method is updated in Aura; surface it to the account owner rather than
    treating it as an auth failure.

    - **403** Forbidden - Insufficient permissions (`AUTHORIZATION_ERROR`)

    - **404** Not Found - Resource not found (`NOT_FOUND`)

    - **409** Conflict - Resource state prevents the operation (`CONFLICT`)

    - **413** Payload Too Large - Request body exceeds 256KB
    (`PAYLOAD_TOO_LARGE`)

    - **429** Too Many Requests - Rate limit exceeded (`RATE_LIMIT_EXCEEDED`)

    - **500** Internal Server Error - Server error (`INTERNAL_ERROR`)


    ## Webhooks


    Subscribe to real-time events using the Webhooks API. All webhook payloads

    are signed with HMAC-SHA256 for security verification.


    Delivery is at-least-once. Every payload carries an `idempotency_key` that

    is stable across retries of the same event, so you can enforce exactly-once

    with a `(subscription_id, idempotency_key)` unique constraint on your side.


    For full documentation, visit
    [docs.aura-app.ai/api](https://docs.aura-app.ai/api)
  license:
    name: Proprietary
  title: Aura Partner Integrations API
  version: 1.0.0-alpha
servers:
  - description: Production
    url: https://api.aura-app.ai
  - description: Staging
    url: https://staging-api.aura-app.ai
  - description: Local Development
    url: http://localhost:3001
security:
  - bearerAuth: []
tags:
  - description: Lead management operations
    name: Leads
  - description: Call booking and management
    name: Calls
  - description: Booking link configuration (read-only)
    name: Booking Links
  - description: Product catalog (read-only)
    name: Products
  - description: Payment tracking (read-only)
    name: Payments
  - description: Public booking creation
    name: Bookings
  - description: Real-time event subscriptions and webhook management
    name: Webhooks
  - description: >-
      Team member information for commission attribution. **Alpha** - schema may
      change without notice.
    name: Team (Alpha)
  - description: >-
      Dashboard analytics, lead source attribution, and objection analysis.
      **Alpha** - schema may change without notice.
    name: Analytics (Alpha)
  - description: System endpoints (health checks)
    name: System
paths:
  /v1/calls/{id}/cancel:
    post:
      tags:
        - Calls
      summary: Cancel a booked call
      description: "\nCancel a booked call. Runs the same lifecycle pipeline as a cancellation\nperformed in the Aura dashboard:\n\n- The calendar event is deleted and guests are notified\n- Cancellation emails and reminder supersede are dispatched\n- Any scheduled meeting recording is torn down\n- The `call.cancelled` webhook fires to all subscribers (do not expect a\n  second event from this endpoint — the platform pipeline is the single\n  emitter)\n\n**Idempotency:** cancelling an already-cancelled (or declined) call returns\n200 with the current call state and performs no mutation.\n\n**Terminal outcomes:** calls whose deal already resolved (`closed` /\n`lost`) cannot be cancelled — the request fails with 409\n`CALL_NOT_CANCELLABLE`.\n\n**Upstream failures:** if the upstream calendar provider rejects the\ncancellation the request fails with 422 `EXTERNAL_API_ERROR`; if the\nprovider is degraded it fails with 502 `EXTERNAL_API_ERROR`. No partner\ndata is changed in either case.\n\t"
      parameters:
        - description: Call ID (UUID)
          in: path
          name: id
          required: true
          schema:
            description: Call ID (UUID)
            example: 550e8400-e29b-41d4-a716-446655440000
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CancelCallBody'
        required: false
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CallSuccessResponse'
          description: >-
            Call cancelled (or already cancelled — idempotent). Returns the
            current call state.
        '400':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
          description: Validation failed
        '401':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
          description: Invalid or missing API key
        '402':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MiddlewareErrorResponse'
          description: The organization's subscription is not active
          headers:
            X-Request-Id:
              description: Request identifier for support
              schema:
                type: string
        '403':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MiddlewareErrorResponse'
          description: The API key does not have the required scope
          headers:
            X-Request-Id:
              description: Request identifier for support
              schema:
                type: string
        '404':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
          description: Call not found
        '408':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MiddlewareErrorResponse'
          description: >-
            The request exceeded its processing time limit. Check the outcome
            before retrying a write
          headers:
            X-Request-Id:
              description: Request identifier for support
              schema:
                type: string
        '409':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
          description: Call has a terminal outcome (closed / lost) and cannot be cancelled
        '413':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MiddlewareErrorResponse'
          description: The request body exceeds 256KB
          headers:
            X-Request-Id:
              description: Request identifier for support
              schema:
                type: string
        '422':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
          description: Upstream calendar provider rejected the cancellation request
        '429':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MiddlewareErrorResponse'
          description: Rate limit exceeded. Wait before retrying
          headers:
            Retry-After:
              description: Seconds to wait before retrying
              schema:
                type: string
            X-RateLimit-Limit:
              description: Requests allowed in the current window
              schema:
                type: string
            X-RateLimit-Remaining:
              description: Requests remaining in the current window
              schema:
                type: string
            X-RateLimit-Reset:
              description: Window reset as a Unix timestamp
              schema:
                type: string
            X-Request-Id:
              description: Request identifier for support
              schema:
                type: string
        '500':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MiddlewareErrorResponse'
          description: >-
            Unexpected server failure. Include the request identifier when
            contacting support
          headers:
            X-Request-Id:
              description: Request identifier for support
              schema:
                type: string
        '502':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
          description: Upstream calendar service temporarily unavailable
      security:
        - bearerAuth: []
components:
  schemas:
    CancelCallBody:
      properties:
        reason:
          description: >-
            Optional cancellation reason, recorded on the call and included in
            guest-facing notifications
          example: Prospect requested cancellation
          maxLength: 500
          type: string
      type: object
    CallSuccessResponse:
      properties:
        data:
          $ref: '#/components/schemas/Call'
        success:
          enum:
            - true
          type: boolean
      required:
        - success
        - data
      type: object
    ErrorResponse:
      properties:
        code:
          description: Error code for programmatic handling
          example: NOT_FOUND
          type: string
        error:
          description: Human-readable error message
          example: Lead not found
          type: string
        requestId:
          description: Request ID for support debugging
          example: req_abc123
          type: string
        success:
          enum:
            - false
          type: boolean
      required:
        - success
        - error
        - code
      type: object
    MiddlewareErrorResponse:
      properties:
        code:
          type: string
        error:
          type: string
        requestId:
          type: string
        success:
          enum:
            - false
          type: boolean
      required:
        - success
        - error
        - code
      type: object
    Call:
      properties:
        action_items:
          description: >-
            Action items extracted from the call by the AI analysis pipeline,
            one sentence per item (e.g. "Send the proposal by Friday"). Null
            when analysis hasn't run.
          example:
            - Send proposal with detailed timeline
            - Book the technical demo
          items:
            type: string
          nullable: true
          type: array
        ai_summary:
          description: >-
            AI-generated summary of the call, from its AI review: the same text
            Zapier and the funnel `call.ai_review_complete` webhook send. The
            `call.analysis_completed` webhook does not carry it, so read it here
            once that fires. Null until the review completes. A call imported
            with a summary of its own returns that until it is reviewed.
            Responses to writes made with an API key that lacks the `read` scope
            leave the review out.
          nullable: true
          type: string
        attribution:
          $ref: '#/components/schemas/PublicAttribution'
        booking_link_id:
          description: Scheduler used for this call
          example: 850e8400-e29b-41d4-a716-446655440003
          nullable: true
          type: string
        calendar_attempt_id:
          description: Recovery reference for this calendar mutation
          format: uuid
          type: string
        calendar_outcome:
          enum:
            - committed
            - uncertain
          type: string
        call_kind:
          description: >-
            Type of call record: 'booking' for scheduled calls, 'intent' for
            pre-booking visitor tracking
          enum:
            - booking
            - intent
          example: booking
          type: string
        call_stage:
          description: >-
            Stage relative to the lead's meeting history: 'first' until the lead
            has attended a meeting (rebooks after a no-show stay 'first'),
            'follow_up' once an earlier call of the lead counts as a show.
            Re-derived when sibling call statuses change.
          enum:
            - first
            - follow_up
          example: first
          type: string
        closer_id:
          description: Assigned closer/sales rep ID (Clerk user ID)
          example: user_2abc123xyz
          nullable: true
          pattern: ^user_[A-Za-z0-9]+$
          type: string
        conferencing_link:
          description: Video conferencing URL
          example: https://zoom.us/j/123456789
          nullable: true
          type: string
        created_at:
          description: When the call was created
          example: '2026-01-17T08:00:00Z'
          format: date-time
          type: string
        duration_minutes:
          description: Call duration in minutes
          example: 45
          nullable: true
          type: number
        ended_at:
          description: When the call ended
          format: date-time
          nullable: true
          type: string
        expected_deal_value:
          description: >-
            Expected deal value in DOLLARS, with up to two decimal places.
            Backed by a numeric(12,2) column — the same unit as payment amounts
            and the /v1/analytics/* revenue figures.
          example: 5000
          nullable: true
          type: number
        form_answers:
          description: >-
            Normalized custom-question answers, with booking-link labels. Empty
            array when no custom answers exist.
          items:
            $ref: '#/components/schemas/CallAnswer'
          type: array
        form_data:
          $ref: '#/components/schemas/CallFormData'
        guest_rsvp_confirmed_at:
          description: >-
            Timestamp when the guest first confirmed attendance (RSVP changed to
            'yes'). Null if never confirmed.
          format: date-time
          nullable: true
          type: string
        guest_rsvp_status:
          description: >-
            Guest's calendar RSVP status (yes, no, maybe, noreply). Indicates
            whether the guest confirmed attendance via their calendar provider.
          example: 'yes'
          nullable: true
          type: string
        has_analysis:
          description: >-
            Whether the AI review has finished for this call. When true, `GET
            /v1/calls/{id}/analysis` returns the full review — scores, detected
            objections with handling feedback, key moments, the stage-by-stage
            call journey, and coaching. When false that endpoint returns 404;
            subscribe to the `call.analysis_completed` webhook to be told the
            moment it becomes available, rather than polling. Always false on
            responses to writes made with an API key that lacks the `read`
            scope.
          type: boolean
        has_recording:
          description: Whether a recording is available for this call
          type: boolean
        id:
          description: Unique identifier for the call
          example: 550e8400-e29b-41d4-a716-446655440000
          type: string
        lead_id:
          description: Associated lead ID
          example: 650e8400-e29b-41d4-a716-446655440001
          type: string
        linked_payment_id:
          description: Payment linked to this call
          nullable: true
          type: string
        notes:
          description: Notes from the call
          nullable: true
          type: string
        old_event_left_on_calendar:
          description: >-
            Present and true when a reschedule moved the call but the calendar
            provider kept the old event. Delete it from the host's calendar.
          type: boolean
        product_id:
          description: Product associated with this call
          example: 950e8400-e29b-41d4-a716-446655440004
          nullable: true
          type: string
        recording_url:
          description: URL to the call recording (if available)
          nullable: true
          type: string
        referral:
          description: >-
            Referral/affiliate identifier (e.g., partner_abc). Separate from
            utm_source for dedicated affiliate/partner tracking.
          nullable: true
          type: string
        scheduled_at:
          description: >-
            Scheduled date/time of the booked call. For intent calls this is a
            tracking placeholder, not a meeting time
          example: '2026-01-20T15:00:00Z'
          format: date-time
          type: string
        setter_id:
          description: Assigned setter/appointment setter ID (Clerk user ID)
          example: user_2def456uvw
          nullable: true
          pattern: ^user_[A-Za-z0-9]+$
          type: string
        started_at:
          description: When the call actually started
          format: date-time
          nullable: true
          type: string
        status:
          description: >-
            Call status (shown, no_show, cancelled, rescheduled, closed, lost,
            follow_up, declined)
          example: closed
          nullable: true
          type: string
        transcript_data:
          $ref: '#/components/schemas/TranscriptData'
        updated_at:
          description: When the call was last updated
          example: '2026-01-17T09:30:00Z'
          format: date-time
          type: string
        utm_campaign:
          description: >-
            UTM campaign parameter — identifies the specific marketing campaign
            or initiative
          example: summer_promo
          nullable: true
          type: string
        utm_content:
          description: >-
            UTM content parameter — differentiates ad creatives or A/B test
            variants within the same campaign
          nullable: true
          type: string
        utm_medium:
          description: >-
            UTM medium parameter — identifies the marketing channel type (e.g.,
            cpc, email, social, organic)
          example: cpc
          nullable: true
          type: string
        utm_source:
          description: >-
            UTM source parameter — identifies the traffic platform (e.g.,
            google, facebook, twitter). Captured from the booking page URL.
          example: google
          nullable: true
          type: string
        utm_term:
          description: >-
            UTM term parameter — paid search keywords or targeting criteria for
            granular attribution
          nullable: true
          type: string
      required:
        - id
        - call_kind
        - call_stage
        - lead_id
        - closer_id
        - setter_id
        - booking_link_id
        - product_id
        - scheduled_at
        - started_at
        - ended_at
        - duration_minutes
        - status
        - conferencing_link
        - expected_deal_value
        - linked_payment_id
        - ai_summary
        - action_items
        - form_answers
        - form_data
        - notes
        - recording_url
        - has_recording
        - has_analysis
        - utm_source
        - utm_medium
        - utm_campaign
        - utm_term
        - utm_content
        - referral
        - attribution
        - guest_rsvp_status
        - guest_rsvp_confirmed_at
        - transcript_data
        - created_at
        - updated_at
      type: object
    PublicAttribution:
      additionalProperties:
        maxLength: 500
        minLength: 1
        type: string
      description: >-
        Flat map of every attribution parameter the record carried, returned
        under its own name. Known and provider-specific keys share one object.
        New keys may appear without a contract version change.
      example:
        am_wuid: wuid_4o251b0b130v3z6d5q0n
        fbclid: IwAR_sample_fbclid
        utm_source: facebook
      nullable: true
      properties:
        attribution_platform:
          maxLength: 500
          minLength: 1
          type: string
        city:
          maxLength: 500
          minLength: 1
          type: string
        country:
          maxLength: 500
          minLength: 1
          type: string
        country_code:
          maxLength: 500
          minLength: 1
          type: string
        epik:
          maxLength: 500
          minLength: 1
          type: string
        fbc:
          maxLength: 500
          minLength: 1
          type: string
        fbclid:
          maxLength: 500
          minLength: 1
          type: string
        fbp:
          maxLength: 500
          minLength: 1
          type: string
        gbraid:
          maxLength: 500
          minLength: 1
          type: string
        gclid:
          maxLength: 500
          minLength: 1
          type: string
        hyclid:
          maxLength: 500
          minLength: 1
          type: string
        landing_page:
          maxLength: 500
          minLength: 1
          type: string
        li_fat_id:
          maxLength: 500
          minLength: 1
          type: string
        msclkid:
          maxLength: 500
          minLength: 1
          type: string
        rdt_cid:
          maxLength: 500
          minLength: 1
          type: string
        referrer:
          maxLength: 500
          minLength: 1
          type: string
        region:
          maxLength: 500
          minLength: 1
          type: string
        sc_cid:
          maxLength: 500
          minLength: 1
          type: string
        ttclid:
          maxLength: 500
          minLength: 1
          type: string
        twclid:
          maxLength: 500
          minLength: 1
          type: string
        utm_campaign:
          maxLength: 500
          minLength: 1
          type: string
        utm_content:
          maxLength: 500
          minLength: 1
          type: string
        utm_id:
          maxLength: 500
          minLength: 1
          type: string
        utm_medium:
          maxLength: 500
          minLength: 1
          type: string
        utm_source:
          maxLength: 500
          minLength: 1
          type: string
        utm_term:
          maxLength: 500
          minLength: 1
          type: string
        wbraid:
          maxLength: 500
          minLength: 1
          type: string
      type: object
    CallAnswer:
      properties:
        field_id:
          description: >-
            Field identifier, matches the key of a field on GET
            /v1/booking-links/:id/fields when the call was booked through a
            link.
          example: field_1718000000000
          type: string
        label:
          description: >-
            Question text, enriched from the scheduler's field schema when
            available.
          example: What is your monthly revenue?
          type: string
        type:
          description: >-
            Input type of the answered field (text, select, checkbox, number)
            when recorded. Omitted for legacy v1.0 flat form data.
          example: select
          type: string
        value:
          anyOf:
            - type: string
            - items:
                type: string
              type: array
            - type: boolean
          description: >-
            The booker's answer. Multi-select answers are string arrays;
            checkboxes are booleans; everything else is stringified.
          example: $10k-$50k
      required:
        - field_id
        - label
        - value
      type: object
    CallFormData:
      anyOf:
        - $ref: '#/components/schemas/FormDataArray'
        - additionalProperties:
            nullable: true
          type: object
        - nullable: true
      description: >-
        Form data submitted during booking (prequalification answers). Ordered
        array of FormDataField entries with field_id, label, and value. Internal
        fields prefixed with `__` (such as the `__disqualification` record) are
        not included; why a lead was disqualified is on the lead's
        `disqualification_data`.
    TranscriptData:
      additionalProperties:
        nullable: true
      description: >-
        Full AI transcript with time-coded segments + detected language + total
        duration. See the TranscriptData schema for the full shape. Null when
        the call has not been transcribed.
      nullable: true
      properties:
        duration_seconds:
          description: Total transcribed duration.
          nullable: true
          type: number
        language:
          description: >-
            Detected language code (BCP-47, e.g. 'en'). Null if not yet
            inferred.
          nullable: true
          type: string
        segments:
          description: Time-coded utterances.
          items:
            $ref: '#/components/schemas/TranscriptSegment'
          type: array
      required:
        - segments
      type: object
    FormDataArray:
      description: Ordered array of form fields captured during the booking flow.
      items:
        $ref: '#/components/schemas/FormDataField'
      type: array
    TranscriptSegment:
      additionalProperties:
        nullable: true
      properties:
        end_seconds:
          description: End offset in seconds from the call start.
          nullable: true
          type: number
        speaker:
          description: >-
            Speaker label (e.g. 'closer', 'lead', or a name). Null when speaker
            diarization is unavailable.
          nullable: true
          type: string
        start_seconds:
          description: Start offset in seconds from the call start.
          nullable: true
          type: number
        text:
          description: Utterance text.
          type: string
      required:
        - text
      type: object
    FormDataField:
      additionalProperties:
        nullable: true
      properties:
        field_id:
          description: >-
            The key of the question on the scheduler. Internal fields prefixed
            with `__` (e.g. `__disqualification`) are not partner-visible.
          example: budget
          type: string
        label:
          description: Human-readable label as shown to the lead at capture time.
          example: What is your budget?
          type: string
        value:
          description: >-
            The value the lead entered. String / number / boolean / object
            depending on the field type.
          nullable: true
      required:
        - field_id
        - label
      type: object

````

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