Amigo Surfaces API

The Surfaces API from Amigo — 8 operation(s) for surfaces.

Operations 11

POST /v1/{workspace_id}/surfaces Create Surface #
GET /v1/{workspace_id}/surfaces List Surfaces #
GET /v1/{workspace_id}/surfaces/review List surfaces pending review #
GET /v1/{workspace_id}/surfaces/{surface_id} Get Surface #
PATCH /v1/{workspace_id}/surfaces/{surface_id} Update a surface spec #
DELETE /v1/{workspace_id}/surfaces/{surface_id} Archive (soft-delete) a surface #
POST /v1/{workspace_id}/surfaces/{surface_id}/approve Approve a surface pending review #
POST /v1/{workspace_id}/surfaces/{surface_id}/reject Reject a surface pending review #
GET /v1/{workspace_id}/surfaces/{surface_id}/progress Get field-level completion status #
POST /v1/{workspace_id}/surfaces/{surface_id}/reshape Create new surface with only unfilled fields #
POST /v1/{workspace_id}/surfaces/{surface_id}/deliver Deliver Surface #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/amigo-surfaces-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

amigo-surfaces-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Amigo Account Surfaces API
  version: 0.1.0
servers:
- url: https://api.amigo.ai
- url: https://internal-api.amigo.ai
- url: https://api-eu-central-1.amigo.ai
- url: https://api-ap-southeast-2.amigo.ai
- url: https://api-ca-central-1.amigo.ai
security:
- Bearer-Authorization: []
  Bearer-Authorization-Organization: []
  Basic: []
tags:
- name: Surfaces
paths:
  /v1/{workspace_id}/surfaces:
    post:
      tags:
      - Surfaces
      summary: Create Surface
      description: 'Create a new data collection surface.


        Stores the surface spec as a world.event with domain="surface".

        The entity_id is stored inside event data (not on the event row)

        to avoid entity state recomputation.


        Returns a signed patient-facing token and URL if SURFACE_TOKEN_SECRET is configured.


        Permissions: member, admin, owner (surfaces:write)'
      operationId: create-surface
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateSurfaceRequest'
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CreateSurfaceResponse'
        '422':
          description: Validation error
        '429':
          description: Rate limited
      parameters:
      - name: workspace_id
        in: path
        required: true
        schema:
          type: string
          format: uuid
          title: Workspace Id
    get:
      tags:
      - Surfaces
      summary: List Surfaces
      description: 'List surfaces with pagination and optional filters.


        Permissions: viewer, member, admin, owner (surfaces:read)'
      operationId: list-surfaces
      parameters:
      - name: workspace_id
        in: path
        required: true
        schema:
          type: string
          format: uuid
          title: Workspace Id
      - name: entity_id
        in: query
        required: false
        schema:
          anyOf:
          - type: string
            format: uuid
          - type: 'null'
          description: Filter by entity ID
          title: Entity Id
        description: Filter by entity ID
      - name: status
        in: query
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          description: Filter by status
          title: Status
        description: Filter by status
      - name: channel
        in: query
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          description: Filter by channel
          title: Channel
        description: Filter by channel
      - name: limit
        in: query
        required: false
        schema:
          type: integer
          maximum: 100
          exclusiveMinimum: 0
          default: 10
          title: Limit
      - name: continuation_token
        in: query
        required: false
        schema:
          type: integer
          default: 0
          title: Continuation Token
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PaginatedResponse_SurfaceResponse_'
        '429':
          description: Rate limited
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /v1/{workspace_id}/surfaces/review:
    get:
      tags:
      - Surfaces
      summary: List surfaces pending review
      description: 'List surfaces pending review.


        Field engineers use this to approve or reject surfaces before delivery.


        Permissions: operator, member, admin, owner (ReviewQueue:View)'
      operationId: list-surface-review-queue
      parameters:
      - name: workspace_id
        in: path
        required: true
        schema:
          type: string
          format: uuid
          title: Workspace Id
      - name: limit
        in: query
        required: false
        schema:
          type: integer
          maximum: 100
          exclusiveMinimum: 0
          default: 10
          title: Limit
      - name: continuation_token
        in: query
        required: false
        schema:
          type: integer
          default: 0
          title: Continuation Token
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PaginatedResponse_SurfaceResponse_'
        '429':
          description: Rate limited
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /v1/{workspace_id}/surfaces/{surface_id}:
    get:
      tags:
      - Surfaces
      summary: Get Surface
      description: 'Get a surface by ID.


        Returns the surface spec and current lifecycle status. Also mints the

        patient-facing ``url`` so operators can copy/share the link from the read

        view (the token isn''t stored, so it''s re-minted on each read).


        Permissions: viewer, member, admin, owner (surfaces:read)'
      operationId: get-surface
      parameters:
      - name: workspace_id
        in: path
        required: true
        schema:
          type: string
          format: uuid
          title: Workspace Id
      - name: surface_id
        in: path
        required: true
        schema:
          type: string
          format: uuid
          title: Surface Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SurfaceResponse'
        '404':
          description: Surface not found
        '429':
          description: Rate limited
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
    patch:
      tags:
      - Surfaces
      summary: Update a surface spec
      description: 'Update an existing surface spec.


        Only allowed while status is CREATED or DELIVERED. Writes a

        surface.updated event preserving the full audit trail.


        Permissions: member, admin, owner (Surface:Create)'
      operationId: update-surface
      parameters:
      - name: workspace_id
        in: path
        required: true
        schema:
          type: string
          format: uuid
          title: Workspace Id
      - name: surface_id
        in: path
        required: true
        schema:
          type: string
          format: uuid
          title: Surface Id
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateSurfaceRequest'
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SurfaceResponse'
        '404':
          description: Surface not found
        '409':
          description: Cannot update in current status
        '422':
          description: Validation error
        '429':
          description: Rate limited
    delete:
      tags:
      - Surfaces
      summary: Archive (soft-delete) a surface
      description: 'Archive (soft-delete) a surface.


        Works for any non-terminal surface. Terminal surfaces (completed,

        expired, already archived) cannot be archived.


        Permissions: member, admin, owner (Surface:Create)'
      operationId: archive-surface
      parameters:
      - name: workspace_id
        in: path
        required: true
        schema:
          type: string
          format: uuid
          title: Workspace Id
      - name: surface_id
        in: path
        required: true
        schema:
          type: string
          format: uuid
          title: Surface Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ArchiveResponse'
        '404':
          description: Surface not found
        '409':
          description: Cannot archive terminal surface
        '429':
          description: Rate limited
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /v1/{workspace_id}/surfaces/{surface_id}/approve:
    post:
      tags:
      - Surfaces
      summary: Approve a surface pending review
      description: 'Approve a surface pending review.


        The surface returns to CREATED status and can then be delivered.


        Permissions: operator, member, admin, owner (ReviewQueue:Review)'
      operationId: approve-surface
      parameters:
      - name: workspace_id
        in: path
        required: true
        schema:
          type: string
          format: uuid
          title: Workspace Id
      - name: surface_id
        in: path
        required: true
        schema:
          type: string
          format: uuid
          title: Surface Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ReviewActionResponse'
        '404':
          description: Surface not found
        '409':
          description: Surface is not pending review
        '429':
          description: Rate limited
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /v1/{workspace_id}/surfaces/{surface_id}/reject:
    post:
      tags:
      - Surfaces
      summary: Reject a surface pending review
      description: 'Reject a surface pending review.


        The surface is marked as expired and will not be delivered.


        Permissions: operator, member, admin, owner (ReviewQueue:Review)'
      operationId: reject-surface
      parameters:
      - name: workspace_id
        in: path
        required: true
        schema:
          type: string
          format: uuid
          title: Workspace Id
      - name: surface_id
        in: path
        required: true
        schema:
          type: string
          format: uuid
          title: Surface Id
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RejectSurfaceRequest'
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ReviewActionResponse'
        '404':
          description: Surface not found
        '409':
          description: Surface is not pending review
        '429':
          description: Rate limited
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /v1/{workspace_id}/surfaces/{surface_id}/progress:
    get:
      tags:
      - Surfaces
      summary: Get field-level completion status
      description: 'Get field-level completion status for a surface.


        Returns which fields are filled vs empty, useful for abandonment

        intelligence and targeted re-engagement.


        Permissions: viewer, member, admin, owner (surfaces:read)'
      operationId: get-surface-progress
      parameters:
      - name: workspace_id
        in: path
        required: true
        schema:
          type: string
          format: uuid
          title: Workspace Id
      - name: surface_id
        in: path
        required: true
        schema:
          type: string
          format: uuid
          title: Surface Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SurfaceProgressResponse'
        '404':
          description: Surface not found
        '429':
          description: Rate limited
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /v1/{workspace_id}/surfaces/{surface_id}/reshape:
    post:
      tags:
      - Surfaces
      summary: Create new surface with only unfilled fields
      description: 'Create a new surface with only the unfilled fields from the original.


        Used for re-engaging patients who abandoned a form. The new surface

        contains only the fields they haven''t completed yet, reducing friction.


        Permissions: member, admin, owner (surfaces:write)'
      operationId: reshape-surface
      parameters:
      - name: workspace_id
        in: path
        required: true
        schema:
          type: string
          format: uuid
          title: Workspace Id
      - name: surface_id
        in: path
        required: true
        schema:
          type: string
          format: uuid
          title: Surface Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CreateSurfaceResponse'
        '404':
          description: Surface not found
        '409':
          description: All fields already filled
        '429':
          description: Rate limited
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /v1/{workspace_id}/surfaces/{surface_id}/deliver:
    post:
      tags:
      - Surfaces
      summary: Deliver Surface
      description: 'Record a real delivery handoff for a surface.


        Email targets are delivered through channel-manager''s

        ``POST /v1/email/`` (CM owns SES sender identity, IP pool, DKIM,

        suppression — keyed on the surface row''s ``use_case_id``). Phone-shaped

        addresses return 422 — SMS surface delivery was removed in PR #2783.

        Other targets record an external handoff that was completed outside

        platform-api.


        Permissions: member, admin, owner (surfaces:write)'
      operationId: deliver-surface
      parameters:
      - name: workspace_id
        in: path
        required: true
        schema:
          type: string
          format: uuid
          title: Workspace Id
      - name: surface_id
        in: path
        required: true
        schema:
          type: string
          format: uuid
          title: Surface Id
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DeliverSurfaceRequest'
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DeliverSurfaceResponse'
        '404':
          description: Surface not found
        '409':
          description: Surface already delivered/completed/expired
        '422':
          description: Validation error
        '429':
          description: Rate limited
components:
  schemas:
    FieldType:
      type: string
      enum:
      - text
      - textarea
      - date
      - phone
      - email
      - number
      - select
      - multiselect
      - checkbox
      - photo
      - signature
      - file
      - heading
      - info
      title: FieldType
      description: Input field types for surface data collection.
    DeliverSurfaceRequest:
      properties:
        channel_address:
          type: string
          maxLength: 256
          minLength: 1
          title: Channel Address
          description: Delivery address (phone number, email, etc.)
      type: object
      required:
      - channel_address
      title: DeliverSurfaceRequest
      description: Request to mark a surface as delivered.
    CreateSurfaceRequest:
      properties:
        entity_id:
          type: string
          format: uuid
          title: Entity Id
        title:
          $ref: '#/components/schemas/NameString'
        description:
          anyOf:
          - $ref: '#/components/schemas/DescriptionString'
          - type: 'null'
        fields:
          items:
            $ref: '#/components/schemas/SurfaceField'
          type: array
          maxItems: 200
          minItems: 1
          title: Fields
        channel:
          $ref: '#/components/schemas/ChannelType'
          default: web
        use_case_id:
          anyOf:
          - type: string
            format: uuid
          - type: 'null'
          title: Use Case Id
        expires_in_hours:
          type: integer
          maximum: 8760.0
          minimum: 1.0
          title: Expires In Hours
          default: 168
        context:
          additionalProperties: true
          type: object
          title: Context
          default: {}
        resource_type:
          anyOf:
          - type: string
            maxLength: 64
          - type: 'null'
          title: Resource Type
        branding:
          anyOf:
          - $ref: '#/components/schemas/BrandingConfig'
          - type: 'null'
        sections:
          anyOf:
          - items:
              $ref: '#/components/schemas/SurfaceSection'
            type: array
          - type: 'null'
          title: Sections
        completion_title:
          anyOf:
          - type: string
            maxLength: 256
          - type: 'null'
          title: Completion Title
        completion_message:
          anyOf:
          - type: string
            maxLength: 2000
          - type: 'null'
          title: Completion Message
        completion_action_url:
          anyOf:
          - type: string
            maxLength: 2048
          - type: 'null'
          title: Completion Action Url
        submit_button_text:
          anyOf:
          - type: string
            maxLength: 128
          - type: 'null'
          title: Submit Button Text
      type: object
      required:
      - entity_id
      - title
      - fields
      title: CreateSurfaceRequest
      description: 'Request to create a new surface.


        The agent generates a SurfaceSpec and sends it here.'
    SurfaceSection:
      properties:
        title:
          $ref: '#/components/schemas/NameString'
        description:
          anyOf:
          - $ref: '#/components/schemas/DescriptionString'
          - type: 'null'
        field_keys:
          items:
            type: string
          type: array
          maxItems: 100
          minItems: 1
          title: Field Keys
        condition:
          anyOf:
          - additionalProperties: true
            type: object
          - type: 'null'
          title: Condition
      type: object
      required:
      - title
      - field_keys
      title: SurfaceSection
      description: A page/step in a multi-page surface form.
    DescriptionString:
      type: string
      maxLength: 2000
    BrandingConfig:
      properties:
        logo_url:
          anyOf:
          - type: string
            maxLength: 2048
          - type: 'null'
          title: Logo Url
        primary_color:
          anyOf:
          - type: string
            maxLength: 32
          - type: 'null'
          title: Primary Color
        background_color:
          anyOf:
          - type: string
            maxLength: 32
          - type: 'null'
          title: Background Color
        font_family:
          anyOf:
          - type: string
            maxLength: 256
          - type: 'null'
          title: Font Family
      type: object
      title: BrandingConfig
      description: Visual branding for patient-facing surfaces.
    NameString:
      type: string
      maxLength: 256
      minLength: 1
    SurfaceProgressResponse:
      properties:
        surface_id:
          type: string
          format: uuid
          title: Surface Id
        total_fields:
          type: integer
          title: Total Fields
        filled_count:
          type: integer
          title: Filled Count
        empty_count:
          type: integer
          title: Empty Count
        filled_keys:
          items:
            type: string
          type: array
          title: Filled Keys
        empty_keys:
          items:
            type: string
          type: array
          title: Empty Keys
        required_empty_keys:
          items:
            type: string
          type: array
          title: Required Empty Keys
      type: object
      required:
      - surface_id
      - total_fields
      - filled_count
      - empty_count
      - filled_keys
      - empty_keys
      - required_empty_keys
      title: SurfaceProgressResponse
    DeliverSurfaceResponse:
      properties:
        surface_id:
          type: string
          format: uuid
          title: Surface Id
        status:
          type: string
          enum:
          - delivered
          - pending_review
          title: Status
        channel:
          anyOf:
          - $ref: '#/components/schemas/ChannelType'
          - type: 'null'
        url:
          anyOf:
          - type: string
          - type: 'null'
          title: Url
        channel_address:
          type: string
          title: Channel Address
        message_id:
          anyOf:
          - type: string
          - type: 'null'
          title: Message Id
        from_number:
          anyOf:
          - type: string
          - type: 'null'
          title: From Number
        from_address:
          anyOf:
          - type: string
          - type: 'null'
          title: From Address
        delivery_provider:
          anyOf:
          - type: string
          - type: 'null'
          title: Delivery Provider
        delivered_at:
          anyOf:
          - type: string
          - type: 'null'
          title: Delivered At
      type: object
      required:
      - surface_id
      - status
      - channel_address
      title: DeliverSurfaceResponse
    UpdateSurfaceRequest:
      properties:
        title:
          anyOf:
          - $ref: '#/components/schemas/NameString'
          - type: 'null'
        description:
          anyOf:
          - $ref: '#/components/schemas/DescriptionString'
          - type: 'null'
        fields:
          anyOf:
          - items:
              $ref: '#/components/schemas/SurfaceField'
            type: array
            maxItems: 200
            minItems: 1
          - type: 'null'
          title: Fields
        branding:
          anyOf:
          - $ref: '#/components/schemas/BrandingConfig'
          - type: 'null'
        sections:
          anyOf:
          - items:
              $ref: '#/components/schemas/SurfaceSection'
            type: array
          - type: 'null'
          title: Sections
        completion_title:
          anyOf:
          - type: string
            maxLength: 256
          - type: 'null'
          title: Completion Title
        completion_message:
          anyOf:
          - type: string
            maxLength: 2000
          - type: 'null'
          title: Completion Message
        completion_action_url:
          anyOf:
          - type: string
            maxLength: 2048
          - type: 'null'
          title: Completion Action Url
        submit_button_text:
          anyOf:
          - type: string
            maxLength: 128
          - type: 'null'
          title: Submit Button Text
        channel:
          anyOf:
          - $ref: '#/components/schemas/ChannelType'
          - type: 'null'
        resource_type:
          anyOf:
          - type: string
            maxLength: 64
          - type: 'null'
          title: Resource Type
      type: object
      title: UpdateSurfaceRequest
      description: 'Partial update to an existing surface.


        All fields are optional. Only provided fields are merged into the spec.

        Only allowed while status is CREATED or DELIVERED.'
    RejectSurfaceRequest:
      properties:
        reason:
          anyOf:
          - type: string
            maxLength: 2000
          - type: 'null'
          title: Reason
      type: object
      title: RejectSurfaceRequest
    SurfaceStatus:
      type: string
      enum:
      - created
      - pending_review
      - delivered
      - opened
      - partial
      - completed
      - expired
      - archived
      title: SurfaceStatus
      description: Lifecycle status of a surface.
    CreateSurfaceResponse:
      properties:
        id:
          type: string
          format: uuid
          title: Id
        event_id:
          type: string
          format: uuid
          title: Event Id
        entity_id:
          type: string
          format: uuid
          title: Entity Id
        title:
          type: string
          title: Title
        description:
          anyOf:
          - type: string
          - type: 'null'
          title: Description
        status:
          $ref: '#/components/schemas/SurfaceStatus'
        channel:
          $ref: '#/components/schemas/ChannelType'
        use_case_id:
          anyOf:
          - type: string
            format: uuid
          - type: 'null'
          title: Use Case Id
        fields_count:
          type: integer
          title: Fields Count
        expires_at:
          type: string
          title: Expires At
        created_at:
          type: string
          title: Created At
        token:
          anyOf:
          - type: string
          - type: 'null'
          title: Token
        url:
          anyOf:
          - type: string
          - type: 'null'
          title: Url
      type: object
      required:
      - id
      - event_id
      - entity_id
      - title
      - status
      - channel
      - fields_count
      - expires_at
      - created_at
      title: CreateSurfaceResponse
    ArchiveResponse:
      properties:
        surface_id:
          type: string
          format: uuid
          title: Surface Id
        status:
          type: string
          const: archived
          title: Status
      type: object
      required:
      - surface_id
      - status
      title: ArchiveResponse
    HTTPValidationError:
      properties:
        detail:
          items:
            $ref: '#/components/schemas/ValidationError'
          type: array
          title: Detail
      type: object
      title: HTTPValidationError
    ValidationError:
      properties:
        loc:
          items:
            anyOf:
            - type: string
            - type: integer
          type: array
          title: Location
        msg:
          type: string
          title: Message
        type:
          type: string
          title: Error Type
        input:
          title: Input
        ctx:
          type: object
          title: Context
      type: object
      required:
      - loc
      - msg
      - type
      title: ValidationError
    PaginatedResponse_SurfaceResponse_:
      properties:
        items:
          items:
            $ref: '#/components/schemas/SurfaceResponse'
          type: array
          title: Items
        has_more:
          type: boolean
          title: Has More
        continuation_token:
          anyOf:
          - type: integer
          - type: 'null'
          title: Continuation Token
        total:
          anyOf:
          - type: integer
          - type: 'null'
          title: Total
      type: object
      required:
      - items
      - has_more
      title: PaginatedResponse[SurfaceResponse]
    SurfaceField:
      properties:
        key:
          type: string
          maxLength: 128
          minLength: 1
          title: Key
        label:
          $ref: '#/components/schemas/NameString'
        field_type:
          $ref: '#/components/schemas/FieldType'
        required:
          type: boolean
          title: Required
          default: true
        options:
          anyOf:
          - items:
              type: string
            type: array
          - type: 'null'
          title: Options
        description:
          anyOf:
          - $ref: '#/components/schemas/DescriptionString'
          - type: 'null'
        placeholder:
          anyOf:
          - type: string
            maxLength: 256
          - type: 'null'
          title: Placeholder
        prefill_value:
          anyOf:
          - {}
          - type: 'null'
          title: Prefill Value
        validation:
          anyOf:
          - additionalProperties: true
            type: object
          - type: 'null'
          title: Validation
        sensitive:
          type: boolean
          title: Sensitive
          default: false
        condition:
          anyOf:
          - additionalProperties: true
            type: object
          - type: 'null'
          title: Condition
        consent_text:
          anyOf:
          - type: string
            maxLength: 5000
          - type: 'null'
          title: Consent Text
      type: object
      required:
      - key
      - label
      - field_type
      title: SurfaceField
      description: 'A single data collection field in a surface spec.


        Generated by agents from HSM analysis. Each field maps

        to a specific piece of data the world model needs.'
    SurfaceResponse:
      properties:
        id:
          type: string
          format: uuid
          title: Id
        event_id:
          type: string
          format: uuid
          title: Event Id
        entity_id:
          anyOf:
          - type: string
            format: uuid
          - type: 'null'
          title: Entity Id
        title:
          anyOf:
          - type: string
          - type: 'null'
          title: Title
        description:
          anyOf:
          - type: string
          - type: 'null'
          title: Description
        status:
          $ref: '#/components/schemas/SurfaceStatus'
        channel:
          anyOf:
          - $ref: '#/components/schemas/ChannelType'
          - type: 'null'
        use_case_id:
          anyOf:
          - type: string
            format: uuid
          - type: 'null'
          title: Use Case Id
        fields_count:
          type: integer
          title: Fields Count
        fields:
          items:
            additionalProperties: true
            type: object
          type: array
          title: Fields
          default: []
        resource_type:
          anyOf:
          - type: string
          - type: 'null'
          title: Resource Type
        context:
          additionalProperties: true
          type: object
          title: Context
          default: {}
        expires_at:
          anyOf:
          - type: string
          - type: 'null'
          title: Expires At
        created_at:
          anyOf:
          - type: string
          - type: 'null'
          title: Created At
        delivered_at:
          anyOf:
          - type: string
          - type: 'null'
          title: Delivered At
        opened_at:
          anyOf:
          - type: string
          - type: 'null'
          title: Opened At
        submitted_at:
          anyOf:
          - type: string
          - type: 'null'
          title: Submitted At
        submitted_data:
          anyOf:
          - additionalProperties: true
            type: object
          - type: 'null'
          title: Submitted Data
        delivery_metadata:
          anyOf:
          - additionalProperties: true
            type: object
          - type: 'null'
          title: Delivery Metadata
        review_notes:
          anyOf:
          - type: string
          - type: 'null'
          title: Review Notes
        reviewed_by:
          anyOf:
          - type: string
            format: uuid
          - type: 'null'
          title: Reviewed By
        reviewe

# --- truncated at 32 KB (33 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/amigo/refs/heads/main/openapi/amigo-surfaces-api-openapi.yml