Paubox Form management API

Create, list, update, copy, and archive forms (requires API key)

Operations 8

Each operation below carries the questions people ask an LLM about it and the instructions they give an agent to run it. Generated by API Evangelist overlay

GET /api/forms List forms for a customer · List forms #
Ask an LLM
“What forms do I have, and can I see only the archived ones?”
“Can I search my forms by title or description?”
Tell an agent
List the forms for customer {customer_id}.
Search customer {customer_id}'s forms for {search}.
POST /api/forms Create a new form · Create a form #
Ask an LLM
“How do I build a new form through the API?”
“Can a new form collect signatures and notify people on each submission?”
Tell an agent
Create form {title} for customer {customer_id} with schema {form_json}, version {version}.
Create a marketing form {title} for customer {customer_id} that adds signups to list {subscription_list_id}, schema {form_json} v{version}.
GET /api/forms/stats Get form and submission statistics · Get form statistics #
Ask an LLM
“How many active forms do I have and how many submissions came in this past week?”
“What's my total form submission count?”
Tell an agent
Show my form statistics.
Get form stats for customer {customer_id}.
POST /api/forms/copy Duplicate a form under a new title · Copy a form #
Ask an LLM
“Can I duplicate an existing form instead of building it from scratch?”
“Does a copied form keep its submission count or vanity URL?”
Tell an agent
Copy form {form_id} as {title}.
Duplicate form {form_id} and name the copy {title}.
GET /api/forms/{form_id} Get a form's full definition as its owner · Get a form #
Ask an LLM
“How do I retrieve the full definition of one of my forms, even if it's archived?”
“Can I view an inactive form's schema from the admin side?”
Tell an agent
Get the full definition of my form {form_id}.
Show the admin view of form {form_id}, including if it's archived.
PUT /api/forms/{form_id} Update a form's settings or fields · Update a form #
Ask an LLM
“How do I change who gets notified when a form is submitted?”
“Can I reactivate a form or set a vanity URL for it?”
Tell an agent
Rename form {form_id} to {title}.
Set the notification recipients on form {form_id} to {recipient}.
POST /api/forms/{form_id}/archive Archive a form and stop submissions · Archive a form #
Ask an LLM
“How do I archive a form so it stops accepting responses?”
“Does archiving a form also deactivate it?”
Tell an agent destructive · confirm first
Archive form {form_id}.
Retire form {form_id} so nobody can submit it anymore.
POST /api/forms/{form_id}/unarchive Unarchive a form · Unarchive a form #
Ask an LLM
“Can I restore a form I archived?”
“Will unarchiving a form make it accept submissions again?”
Tell an agent
Unarchive form {form_id}.
Bring form {form_id} back out of the archive.

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/paubox:paubox-form-management-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

paubox-form-management-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Paubox Forms Form management API
  description: 'The Paubox Forms API has two kinds of endpoints. Public, respondent-facing endpoints (retrieving a form definition for rendering and submitting a form response) require no authentication. Authenticated management endpoints (creating, listing, updating, copying, archiving forms, and reading or exporting submissions) require a Paubox API key with the "forms" scope, sent as `Authorization: Bearer YOUR_API_KEY`. API keys are generated in the Paubox dashboard.'
  version: 1.0.0
servers:
- url: https://api.paubox.com/v1/forms
  description: Paubox Forms API
tags:
- name: Form management
  description: Create, list, update, copy, and archive forms (requires API key)
paths:
  /api/forms:
    get:
      tags:
      - Form management
      summary: List forms
      operationId: listForms
      security:
      - bearerAuth: []
      description: Returns a paginated list of forms belonging to a customer. Supports filtering by form ID, title/description search, and archived/active state, plus ordering and pagination.
      parameters:
      - name: customer_id
        in: query
        required: true
        schema:
          type: integer
        description: 'Your Paubox customer ID. Requests for a customer you do not have access to return 403.

          '
      - name: form_id
        in: query
        required: false
        schema:
          type: string
          format: uuid
        description: Filter the results to a single form by its UUID.
      - name: search
        in: query
        required: false
        schema:
          type: string
        description: 'Substring match against the form title or description.

          '
      - name: archived
        in: query
        required: false
        schema:
          type: boolean
        description: Filter by archived state.
      - name: active
        in: query
        required: false
        schema:
          type: boolean
        description: Filter by active state.
      - name: order_by
        in: query
        required: false
        schema:
          type: string
          enum:
          - created_at
          - title
          - updated_at
          - submission_count
          default: created_at
        description: 'Field to order results by. Unknown values fall back to `created_at`.

          '
      - name: order
        in: query
        required: false
        schema:
          type: string
          enum:
          - asc
          - desc
          default: desc
        description: Sort direction.
      - name: page
        in: query
        required: false
        schema:
          type: integer
          default: 1
        description: Page number to return.
      - name: items
        in: query
        required: false
        schema:
          type: integer
          default: 50
          maximum: 100
        description: Number of forms per page (maximum 100).
      responses:
        '200':
          description: Paginated list of forms
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FormListResponse'
              examples:
                example:
                  summary: Example response
                  value:
                    results:
                    - id: 550e8400-e29b-41d4-a716-446655440000
                      title: Patient Intake Form
                      description: Please complete before your appointment.
                      form_html: <form>...</form>
                      form_json: {}
                      form_css: 'form { font-family: sans-serif; }'
                      vanity_url: null
                      version: 2
                      active: true
                      customer_id: 123
                      old_form_id: null
                      recipient: intake@example.com,records@example.com
                      signable: false
                      signature_confirmation_label: null
                      submission_count: 42
                      type: null
                      subscription_list_id: null
                      deleted: false
                      archived: false
                      created_at: '2024-01-15T10:30:00Z'
                      updated_at: '2024-06-01T08:00:00Z'
                    page_info:
                      count: 1
                      pages: 1
                      page: 1
                      items: 50
        '401':
          description: Missing or invalid API key, or the key lacks the "forms" scope
        '403':
          description: The API key does not have access to the requested customer
    post:
      tags:
      - Form management
      summary: Create a form
      operationId: createForm
      security:
      - bearerAuth: []
      description: Creates a new form. Returns the UUID of the created form.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateFormRequest'
            examples:
              basic:
                summary: Minimal form
                value:
                  title: Patient Intake Form
                  form_json:
                    fields:
                    - label: First name
                      type: text
                      required: true
                  customer_id: 123
                  version: 1
              full:
                summary: Marketing form with notifications
                value:
                  title: Newsletter Signup
                  description: Sign up for our monthly newsletter.
                  form_json:
                    fields:
                    - label: Email
                      type: email
                      required: true
                  form_html: <form>...</form>
                  form_css: 'form { font-family: sans-serif; }'
                  customer_id: 123
                  version: 1
                  recipient: marketing@example.com
                  subscription_list_id: b3f9c2d1-4a5e-4f6b-8c7d-9e0f1a2b3c4d
                  type: marketing_form
                  active: true
      responses:
        '200':
          description: Form created
          content:
            application/json:
              schema:
                type: object
                properties:
                  id:
                    type: string
                    format: uuid
                    description: UUID of the new form
              examples:
                example:
                  summary: Example response
                  value:
                    id: 7c9e6679-7425-40de-944b-e07fc1f90ae7
        '401':
          description: Missing or invalid API key, or the key lacks the "forms" scope
        '403':
          description: The API key does not have access to the requested customer
  /api/forms/stats:
    get:
      tags:
      - Form management
      summary: Get form statistics
      operationId: getFormStats
      security:
      - bearerAuth: []
      description: 'Returns aggregate form statistics for a customer: the number of active forms, the total submission count, and the number of submissions received in the last 7 days.'
      parameters:
      - name: customer_id
        in: query
        required: false
        schema:
          type: integer
        description: 'Paubox customer ID. Defaults to the customer that owns the API key.

          '
      responses:
        '200':
          description: Form statistics
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FormStats'
              examples:
                example:
                  summary: Example response
                  value:
                    active_form_count: 8
                    total_submission_count: 1204
                    submissions_last_7_days: 37
        '401':
          description: Missing or invalid API key, or the key lacks the "forms" scope
        '403':
          description: The API key does not have access to the requested customer
  /api/forms/copy:
    post:
      tags:
      - Form management
      summary: Copy a form
      operationId: copyForm
      security:
      - bearerAuth: []
      description: Creates a copy of an existing form with a new title. The copy starts with a submission count of 0 and no vanity URL. Returns the full new form object.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CopyFormRequest'
            examples:
              example:
                summary: Copy a form
                value:
                  form_id: 550e8400-e29b-41d4-a716-446655440000
                  title: Patient Intake Form (Copy)
      responses:
        '200':
          description: The newly created form
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Form'
              examples:
                example:
                  summary: Example response
                  value:
                    id: 9f8b7c6d-5e4f-4a3b-2c1d-0e9f8a7b6c5d
                    title: Patient Intake Form (Copy)
                    description: Please complete before your appointment.
                    form_html: <form>...</form>
                    form_json: {}
                    form_css: 'form { font-family: sans-serif; }'
                    vanity_url: null
                    version: 2
                    active: false
                    customer_id: 123
                    old_form_id: null
                    recipient: intake@example.com
                    signable: false
                    signature_confirmation_label: null
                    submission_count: 0
                    type: null
                    subscription_list_id: null
                    deleted: false
                    archived: false
                    created_at: '2024-06-10T12:00:00Z'
                    updated_at: '2024-06-10T12:00:00Z'
        '401':
          description: Missing or invalid API key, or the key lacks the "forms" scope
        '403':
          description: The form belongs to a different customer
        '404':
          description: Source form not found
  /api/forms/{form_id}:
    get:
      tags:
      - Form management
      summary: Get a form
      operationId: getForm
      security:
      - bearerAuth: []
      description: Returns the full form definition by ID, including inactive and archived forms (unlike the public endpoint, which only serves renderable forms to respondents).
      parameters:
      - name: form_id
        in: path
        required: true
        schema:
          type: string
          format: uuid
        description: UUID of the form to retrieve
      responses:
        '200':
          description: Form found
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    $ref: '#/components/schemas/Form'
              examples:
                example:
                  summary: Example response
                  value:
                    data:
                      id: 550e8400-e29b-41d4-a716-446655440000
                      title: Patient Intake Form
                      description: Please complete before your appointment.
                      form_html: <form>...</form>
                      form_json: {}
                      form_css: 'form { font-family: sans-serif; }'
                      vanity_url: null
                      version: 2
                      active: true
                      customer_id: 123
                      old_form_id: null
                      recipient: intake@example.com
                      signable: false
                      signature_confirmation_label: null
                      submission_count: 42
                      type: null
                      subscription_list_id: null
                      deleted: false
                      archived: false
                      created_at: '2024-01-15T10:30:00Z'
                      updated_at: '2024-06-01T08:00:00Z'
        '401':
          description: Missing or invalid API key, or the key lacks the "forms" scope
        '403':
          description: The form belongs to a different customer
        '500':
          description: 'Form not found. The service currently returns 500 (rather than 404) for a form ID that does not exist.

            '
    put:
      tags:
      - Form management
      summary: Update a form
      operationId: updateForm
      security:
      - bearerAuth: []
      description: 'Updates a form. This is a partial update: any fields omitted from the request body are left unchanged.'
      parameters:
      - name: form_id
        in: path
        required: true
        schema:
          type: string
          format: uuid
        description: UUID of the form to update
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateFormRequest'
            examples:
              example:
                summary: Rename and activate a form
                value:
                  title: Patient Intake Form (2024)
                  active: true
      responses:
        '200':
          description: Form updated
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
                  form_id:
                    type: string
                    format: uuid
              examples:
                example:
                  summary: Example response
                  value:
                    detail: Form updated successfully
                    form_id: 550e8400-e29b-41d4-a716-446655440000
        '401':
          description: Missing or invalid API key, or the key lacks the "forms" scope
        '403':
          description: The form belongs to a different customer
        '404':
          description: Form not found or deleted
  /api/forms/{form_id}/archive:
    post:
      tags:
      - Form management
      summary: Archive a form
      operationId: archiveForm
      security:
      - bearerAuth: []
      description: 'Archives a form. Archiving also deactivates the form (sets `active` to false), so it stops accepting submissions. The endpoint does not verify that the form exists: an unknown form ID still returns a 200 success response.'
      parameters:
      - name: form_id
        in: path
        required: true
        schema:
          type: string
          format: uuid
        description: UUID of the form to archive
      responses:
        '200':
          description: Form archived
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
              examples:
                example:
                  summary: Example response
                  value:
                    detail: Form archived.
        '401':
          description: Missing or invalid API key, or the key lacks the "forms" scope
  /api/forms/{form_id}/unarchive:
    post:
      tags:
      - Form management
      summary: Unarchive a form
      operationId: unarchiveForm
      security:
      - bearerAuth: []
      description: 'Unarchives a form. This does not re-activate it: `active` stays false until the form is updated with `active: true`. The endpoint does not verify that the form exists: an unknown form ID still returns a 200 success response.'
      parameters:
      - name: form_id
        in: path
        required: true
        schema:
          type: string
          format: uuid
        description: UUID of the form to unarchive
      responses:
        '200':
          description: Form unarchived
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
              examples:
                example:
                  summary: Example response
                  value:
                    detail: Form unarchived.
        '401':
          description: Missing or invalid API key, or the key lacks the "forms" scope
components:
  schemas:
    CreateFormRequest:
      type: object
      required:
      - title
      - form_json
      - customer_id
      - version
      properties:
        title:
          type: string
          description: Title of the form
        form_json:
          type: object
          description: The form field schema
        customer_id:
          type: integer
          description: Your Paubox customer ID
        version:
          type: integer
          description: Form schema version
        description:
          type: string
        form_html:
          type: string
        form_css:
          type: string
        recipient:
          type: string
          description: 'Comma-separated email addresses notified on each submission.

            '
        signable:
          type: boolean
          default: false
          description: Whether the form collects a signature
        signature_confirmation_label:
          type: string
        subscription_list_id:
          type: string
          description: 'ID of the connected Marketing contact list. For marketing forms, new subscribers are added to this list.

            '
        type:
          type: string
          description: Form type, for example `marketing_form`
        active:
          type: boolean
          default: false
        submission_count:
          type: integer
          default: 0
    UpdateFormRequest:
      type: object
      description: 'Partial update. All fields are optional; omitted fields are left unchanged.

        '
      properties:
        title:
          type: string
        description:
          type: string
        form_json:
          type: object
          description: The form field schema
        vanity_url:
          type: string
        recipient:
          type: string
          description: 'Comma-separated email addresses notified on each submission.

            '
        active:
          type: boolean
        subscription_list_id:
          type: string
          description: 'ID of the connected Marketing contact list. For marketing forms, new subscribers are added to this list.

            '
    FormStats:
      type: object
      properties:
        active_form_count:
          type: integer
          description: Number of active forms
        total_submission_count:
          type: integer
          description: Total submissions across all forms
        submissions_last_7_days:
          type: integer
          description: Submissions received in the last 7 days
    PageInfo:
      type: object
      properties:
        count:
          type: integer
          description: Total number of matching forms
        pages:
          type: integer
          description: Total number of pages
        page:
          type: integer
          description: Current page number
        items:
          type: integer
          description: Number of items per page
    FormListResponse:
      type: object
      properties:
        results:
          type: array
          items:
            $ref: '#/components/schemas/Form'
        page_info:
          $ref: '#/components/schemas/PageInfo'
    Form:
      type: object
      properties:
        id:
          type: string
          format: uuid
        title:
          type: string
        description:
          type:
          - string
          - 'null'
        form_html:
          type:
          - string
          - 'null'
        form_json:
          type:
          - object
          - 'null'
        form_css:
          type:
          - string
          - 'null'
        vanity_url:
          type:
          - string
          - 'null'
        version:
          type: integer
        active:
          type: boolean
        customer_id:
          type: integer
        old_form_id:
          type:
          - integer
          - 'null'
        recipient:
          type:
          - string
          - 'null'
          description: 'Comma-separated email addresses notified on each submission.

            '
        signable:
          type: boolean
        signature_confirmation_label:
          type:
          - string
          - 'null'
        submission_count:
          type: integer
        type:
          type:
          - string
          - 'null'
        subscription_list_id:
          type:
          - string
          - 'null'
          description: 'ID of the connected Marketing contact list. For marketing forms, new subscribers are added to this list.

            '
        deleted:
          type: boolean
        archived:
          type: boolean
        created_at:
          type: string
          format: date-time
        updated_at:
          type: string
          format: date-time
    CopyFormRequest:
      type: object
      required:
      - form_id
      - title
      properties:
        form_id:
          type: string
          format: uuid
          description: UUID of the form to copy
        title:
          type: string
          description: Title for the copy
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: 'Paubox API key sent as `Authorization: Bearer YOUR_API_KEY`. API keys are created in the Paubox dashboard and must have the "forms" scope; a key without the forms scope receives 401 Unauthorized. A valid key used against a resource that belongs to a different customer receives 403 Forbidden.

        '