FoxForm Integrations API

Manage account-level Connect destinations (tracking pixels, webhooks, Zapier/Make, Slack, Google Sheets) and link them to forms.

GitHub OpenAPI

Operations 7

GET /forms/integrations List Connect destinations #
POST /forms/integrations Create a Connect destination #
PUT /forms/integrations/{connectionId} Update a Connect destination #
DELETE /forms/integrations/{connectionId} Delete a Connect destination #
GET /forms/integrations/{connectionId}/usage Get which forms use a Connect destination #
POST /forms/integrations/{connectionId}/test Send a test event/message to a destination #

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/foxform-app:foxform-app-integrations-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.

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

foxform-app-integrations-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: FoxForm Integrations API
  version: 1.0.0
  description: Public REST API for FoxForm — manage forms, read responses and analytics. Authenticate with a FoxForm API key (see the "MCP & API" area in the dashboard). Account/billing/onboarding endpoints are internal and not part of the public API.
  contact:
    name: FoxForm
    url: https://foxform.app
  license:
    name: Proprietary
servers:
- url: https://api.foxform.app
  description: Production
- url: https://api-staging.foxform.app
  description: Staging
security:
- ApiKey: []
tags:
- name: Integrations
  description: Manage account-level Connect destinations (tracking pixels, webhooks, Zapier/Make, Slack, Google Sheets) and link them to forms.
paths:
  /forms/integrations:
    get:
      tags:
      - Integrations
      summary: List Connect destinations
      description: Returns the account's Connect destinations (connections). Pass form_id to also resolve enabled_in_form and events for that specific form.
      parameters:
      - name: form_id
        in: query
        required: false
        schema:
          type: string
      responses:
        '200':
          description: Connections.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ListIntegrationsResponse'
      security:
      - ApiKey: []
      operationId: getFormsIntegrations
      x-operation-id-source: derived
    post:
      tags:
      - Integrations
      summary: Create a Connect destination
      description: Creates an account-level connection for one provider. Shape of config/events depends on provider — see the Connection schema.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateIntegrationRequest'
      responses:
        '201':
          description: Created.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetIntegrationResponse'
      security:
      - ApiKey: []
      operationId: postFormsIntegrations
      x-operation-id-source: derived
  /forms/integrations/{connectionId}:
    put:
      tags:
      - Integrations
      summary: Update a Connect destination
      parameters:
      - name: connectionId
        in: path
        required: true
        schema:
          type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateIntegrationRequest'
      responses:
        '200':
          description: Updated.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetIntegrationResponse'
      security:
      - ApiKey: []
      operationId: putFormsIntegrationsByConnectionId
      x-operation-id-source: derived
    delete:
      tags:
      - Integrations
      summary: Delete a Connect destination
      parameters:
      - name: connectionId
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          $ref: '#/components/responses/Success'
      security:
      - ApiKey: []
      operationId: deleteFormsIntegrationsByConnectionId
      x-operation-id-source: derived
  /forms/integrations/{connectionId}/usage:
    get:
      tags:
      - Integrations
      summary: Get which forms use a Connect destination
      parameters:
      - name: connectionId
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Usage.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/IntegrationUsageResponse'
      security:
      - ApiKey: []
      operationId: getFormsIntegrationsByConnectionIdUsage
      x-operation-id-source: derived
  /forms/integrations/{connectionId}/link:
    put:
      tags:
      - Integrations
      summary: Link or unlink a destination to a form
      description: Toggles a connection on/off for one form and sets which events (open/start/submit, or provider-specific) trigger it on that form.
      parameters:
      - name: connectionId
        in: path
        required: true
        schema:
          type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/LinkIntegrationRequest'
      responses:
        '200':
          $ref: '#/components/responses/Success'
      security:
      - ApiKey: []
      operationId: putFormsIntegrationsByConnectionIdLink
      x-operation-id-source: derived
  /forms/integrations/{connectionId}/test:
    post:
      tags:
      - Integrations
      summary: Send a test event/message to a destination
      description: Fires one test delivery (e.g. a sample Slack message, a sample Google Sheets row, or a test webhook POST). Optional form_id scopes the sample payload to that form.
      parameters:
      - name: connectionId
        in: path
        required: true
        schema:
          type: string
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                form_id:
                  type: string
      responses:
        '200':
          $ref: '#/components/responses/Success'
      security:
      - ApiKey: []
      operationId: postFormsIntegrationsByConnectionIdTest
      x-operation-id-source: derived
components:
  schemas:
    Connection:
      type: object
      description: An account-level Connect destination, cross-referenced with the form passed as form_id (if any).
      properties:
        id:
          type: string
        provider:
          type: string
          enum:
          - meta_pixel
          - google_ads
          - ga4
          - gtm
          - tiktok_pixel
          - webhook
          - automation_key
          - slack
          - google_sheets
          description: automation_key covers both Zapier and Make (same underlying connection, two logos in the dashboard).
        name:
          type: string
        config:
          type: object
          description: 'Provider-specific bag. webhook/slack: { url }. slack: url must be a slack.com Incoming Webhook. google_sheets: { spreadsheet_id, spreadsheet_url, headers[] } (spreadsheet is created by FoxForm on connect). pixel providers: { id } (and label/eventNames for gtm/ga4/tiktok_pixel/google_ads).'
          additionalProperties: true
        secret_masked:
          type:
          - string
          - 'null'
        server_side:
          type:
          - object
          - 'null'
          properties:
            enabled:
              type: boolean
            status:
              type: string
              enum:
              - pending
              - active
              - invalid
            test_event_code:
              type: string
            last_error:
              type:
              - string
              - 'null'
        last_delivery:
          type:
          - object
          - 'null'
          properties:
            at:
              type: string
            ok:
              type: boolean
            status:
              type: integer
            code:
              type: string
        failure_count:
          type: integer
        created_at:
          type: string
        enabled_in_form:
          type: boolean
          description: Whether this connection is toggled on for the form_id passed to the list call.
        events:
          type: object
          description: Events configured for THIS form (open/start/submit mapping, or provider-specific). A connection can have different events per form.
          additionalProperties: true
    CreateIntegrationRequest:
      type: object
      required:
      - provider
      properties:
        provider:
          type: string
          enum:
          - meta_pixel
          - google_ads
          - ga4
          - gtm
          - tiktok_pixel
          - webhook
          - automation_key
          - slack
          - google_sheets
        name:
          type: string
        config:
          type: object
          description: Required shape depends on provider — see Connection.config. google_sheets connections are created via the OAuth flow in the dashboard, not directly through this endpoint.
          additionalProperties: true
    SuccessResponse:
      type: object
      properties:
        success:
          type: boolean
          example: true
        message:
          type: string
    LinkIntegrationRequest:
      type: object
      required:
      - form_id
      properties:
        form_id:
          type: string
        enabled:
          type: boolean
        events:
          type: object
          additionalProperties: true
    IntegrationUsageResponse:
      type: object
      properties:
        success:
          type: boolean
        data:
          type: array
          items:
            type: object
            properties:
              form_id:
                type: string
              form_title:
                type: string
              enabled:
                type: boolean
    ListIntegrationsResponse:
      type: object
      properties:
        success:
          type: boolean
        data:
          type: array
          items:
            $ref: '#/components/schemas/Connection'
    GetIntegrationResponse:
      type: object
      properties:
        success:
          type: boolean
        data:
          $ref: '#/components/schemas/Connection'
    UpdateIntegrationRequest:
      type: object
      properties:
        name:
          type: string
        config:
          type: object
          additionalProperties: true
  responses:
    Success:
      description: Generic success.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/SuccessResponse'
  securitySchemes:
    ApiKey:
      type: apiKey
      in: header
      name: x-api-key
      description: 'FoxForm API key (ff_live_…), generated in the dashboard under "MCP & API". Also accepted as ''Authorization: Bearer ff_live_…'' or a ''?key='' query param. Keys are scoped read or read+write.'