v1.0.0
OpenAPI 3.1.0

Manage Form Plume forms, submissions, delivery settings, and integrations with an organization API key.

Server:https://api.formplume.com

Production

Client Libraries

Forms

Create and manage forms and their settings.

List forms

Returns the forms in your organization, ordered for display in the dashboard and API clients.

Query Parameters
  • external_key
    Type: string

    Filter to the form carrying this config-as-code key.

Responses
  • application/json
  • application/json
  • application/json
Request Example for get/v1/forms
curl https://api.formplume.com/v1/forms \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
[
  {
    "id": "0196f2f6-2ec3-7d91-9ea3-6a63175fc8a1",
    "name": "Contact form",
    "emoji": "📬",
    "public_slug": "contact",
    "access_mode": "public",
    "is_active": true,
    "external_key": "website-contact",
    "created_at": "2026-07-13T18:30:00Z",
    "submission_count": 1,
    "unread_submission_count": 1
  }
]

Create form

Creates a form with its public submission endpoint and initial settings.

Body·
required
application/json
  • name
    Type: string
    min length:  
    1
    max length:  
    120
    required
  • access_mode
    Type: string enum
    values
    • public
    • protected
  • emoji
    Type: string
    min length:  
    1
    max length:  
    32
  • external_key
    Type: string
Responses
  • application/json
  • application/json
  • application/json
  • application/json
  • application/json
Request Example for post/v1/forms
curl https://api.formplume.com/v1/forms \
  --request POST \
  --header 'Content-Type: application/json' \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN' \
  --data '{
  "name": "Contact form",
  "emoji": "📬",
  "access_mode": "public",
  "external_key": "website-contact"
}'
{
  "id": "0196f2f6-2ec3-7d91-9ea3-6a63175fc8a1",
  "name": "Contact form",
  "emoji": "📬",
  "public_slug": "contact",
  "access_mode": "public",
  "is_active": true,
  "external_key": "website-contact",
  "created_at": "2026-07-13T18:30:00Z",
  "submission_count": 1,
  "unread_submission_count": 1,
  "settings": {
    "response": {
      "success": {
        "type": "hosted_page",
        "redirect_url": "https://example.com/integrations/callback"
      },
      "error": {
        "type": "hosted_page",
        "redirect_url": "https://example.com/integrations/callback"
      }
    },
    "spam": {
      "enabled": true,
      "strictness": "low",
      "blocked_keywords": [
        "viagra"
      ]
    },
    "rate_limit": {
      "disabled": false,
      "limit": 1,
      "window_seconds": 30,
      "burst": 20,
      "burst_window_seconds": 600
    },
    "privacy": {
      "redact_fields": [
        "password"
      ],
      "do_not_store_fields": [
        "credit_card"
      ]
    },
    "email": {
      "notify_spam": false
    },
    "retention": {
      "days": 30
    }
  },
  "notify_emails": [
    "alex@example.com"
  ],
  "notify_cc_emails": [
    "alex@example.com"
  ],
  "notify_bcc_emails": [
    "alex@example.com"
  ],
  "notify_routing_aliases": [
    {
      "alias": "sales",
      "to_emails": [
        "alex@example.com"
      ],
      "cc_emails": [
        "alex@example.com"
      ],
      "bcc_emails": [
        "alex@example.com"
      ]
    }
  ],
  "notify_subject": "New submission on {{form_name}}",
  "allowed_origins": [
    "https://example.com"
  ],
  "updated_at": "2026-07-13T18:35:00Z"
}

Get form

Returns one form, including its public slug, status, and configured settings.

Path Parameters
  • id
    Type: string
    required
Responses
  • application/json
  • application/json
  • application/json
  • application/json
  • application/json
Request Example for get/v1/forms/{id}
curl 'https://api.formplume.com/v1/forms/{id}' \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
{
  "id": "0196f2f6-2ec3-7d91-9ea3-6a63175fc8a1",
  "name": "Contact form",
  "emoji": "📬",
  "public_slug": "contact",
  "access_mode": "public",
  "is_active": true,
  "external_key": "website-contact",
  "created_at": "2026-07-13T18:30:00Z",
  "submission_count": 1,
  "unread_submission_count": 1,
  "settings": {
    "response": {
      "success": {
        "type": "hosted_page",
        "redirect_url": "https://example.com/integrations/callback"
      },
      "error": {
        "type": "hosted_page",
        "redirect_url": "https://example.com/integrations/callback"
      }
    },
    "spam": {
      "enabled": true,
      "strictness": "low",
      "blocked_keywords": [
        "viagra"
      ]
    },
    "rate_limit": {
      "disabled": false,
      "limit": 1,
      "window_seconds": 30,
      "burst": 20,
      "burst_window_seconds": 600
    },
    "privacy": {
      "redact_fields": [
        "password"
      ],
      "do_not_store_fields": [
        "credit_card"
      ]
    },
    "email": {
      "notify_spam": false
    },
    "retention": {
      "days": 30
    }
  },
  "notify_emails": [
    "alex@example.com"
  ],
  "notify_cc_emails": [
    "alex@example.com"
  ],
  "notify_bcc_emails": [
    "alex@example.com"
  ],
  "notify_routing_aliases": [
    {
      "alias": "sales",
      "to_emails": [
        "alex@example.com"
      ],
      "cc_emails": [
        "alex@example.com"
      ],
      "bcc_emails": [
        "alex@example.com"
      ]
    }
  ],
  "notify_subject": "New submission on {{form_name}}",
  "allowed_origins": [
    "https://example.com"
  ],
  "updated_at": "2026-07-13T18:35:00Z"
}

Update form

Updates the supplied settings for a form while leaving omitted settings unchanged.

Path Parameters
  • id
    Type: string
    required
Body·
required
application/json
  • access_mode
    Type: string enum
    values
    • public
    • protected
  • allowed_origins
    Type: array string[]
  • emoji
    Type: string
    min length:  
    1
    max length:  
    32
  • external_key
    Type: string
  • is_active
    Type: boolean
  • name
    Type: string
    min length:  
    1
    max length:  
    120
  • notify_bcc_emails
    Type: array string[]
  • notify_cc_emails
    Type: array string[]
  • notify_emails
    Type: array string[]
  • notify_routing_aliases
    Type: array object[] ·
  • notify_subject
    Type: string nullable
  • settings
    Type: object ·

    Per-form behavior settings. Send only the sections you want to change; omitted sections keep their stored values. Unknown extra top-level keys are preserved for forward compatibility. CAPTCHA and email hygiene are managed through their dedicated endpoints (/v1/forms/{id}/captcha, /v1/forms/{id}/email-hygiene) and may appear here read-only.

Responses
  • application/json
  • application/json
  • application/json
  • application/json
  • application/json
Request Example for patch/v1/forms/{id}
curl 'https://api.formplume.com/v1/forms/{id}' \
  --request PATCH \
  --header 'Content-Type: application/json' \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN' \
  --data '{
  "name": "Contact form",
  "emoji": "📬",
  "access_mode": "public",
  "is_active": true,
  "settings": {
    "response": {
      "success": {
        "type": "hosted_page",
        "redirect_url": "https://example.com/integrations/callback"
      },
      "error": {
        "type": "hosted_page",
        "redirect_url": "https://example.com/integrations/callback"
      }
    },
    "spam": {
      "enabled": true,
      "strictness": "low",
      "blocked_keywords": [
        "viagra"
      ]
    },
    "rate_limit": {
      "disabled": false,
      "limit": 1,
      "window_seconds": 30,
      "burst": 20,
      "burst_window_seconds": 600
    },
    "privacy": {
      "redact_fields": [
        "password"
      ],
      "do_not_store_fields": [
        "credit_card"
      ]
    },
    "email": {
      "notify_spam": false
    },
    "retention": {
      "days": 30
    }
  },
  "notify_emails": [
    "alex@example.com"
  ],
  "notify_cc_emails": [
    "alex@example.com"
  ],
  "notify_bcc_emails": [
    "alex@example.com"
  ],
  "notify_routing_aliases": [
    {
      "alias": "sales",
      "to_emails": [
        "alex@example.com"
      ],
      "cc_emails": [
        "alex@example.com"
      ],
      "bcc_emails": [
        "alex@example.com"
      ]
    }
  ],
  "notify_subject": "New submission on {{form_name}}",
  "allowed_origins": [
    "https://example.com"
  ],
  "external_key": "website-contact"
}'
{
  "id": "0196f2f6-2ec3-7d91-9ea3-6a63175fc8a1",
  "name": "Contact form",
  "emoji": "📬",
  "public_slug": "contact",
  "access_mode": "public",
  "is_active": true,
  "external_key": "website-contact",
  "created_at": "2026-07-13T18:30:00Z",
  "submission_count": 1,
  "unread_submission_count": 1,
  "settings": {
    "response": {
      "success": {
        "type": "hosted_page",
        "redirect_url": "https://example.com/integrations/callback"
      },
      "error": {
        "type": "hosted_page",
        "redirect_url": "https://example.com/integrations/callback"
      }
    },
    "spam": {
      "enabled": true,
      "strictness": "low",
      "blocked_keywords": [
        "viagra"
      ]
    },
    "rate_limit": {
      "disabled": false,
      "limit": 1,
      "window_seconds": 30,
      "burst": 20,
      "burst_window_seconds": 600
    },
    "privacy": {
      "redact_fields": [
        "password"
      ],
      "do_not_store_fields": [
        "credit_card"
      ]
    },
    "email": {
      "notify_spam": false
    },
    "retention": {
      "days": 30
    }
  },
  "notify_emails": [
    "alex@example.com"
  ],
  "notify_cc_emails": [
    "alex@example.com"
  ],
  "notify_bcc_emails": [
    "alex@example.com"
  ],
  "notify_routing_aliases": [
    {
      "alias": "sales",
      "to_emails": [
        "alex@example.com"
      ],
      "cc_emails": [
        "alex@example.com"
      ],
      "bcc_emails": [
        "alex@example.com"
      ]
    }
  ],
  "notify_subject": "New submission on {{form_name}}",
  "allowed_origins": [
    "https://example.com"
  ],
  "updated_at": "2026-07-13T18:35:00Z"
}

Delete form

Moves a form to trash so it no longer accepts new submissions.

Path Parameters
  • id
    Type: string
    required
Responses
  • 204

    Form deactivated.

  • application/json
  • application/json
  • application/json
  • application/json
Request Example for delete/v1/forms/{id}
curl 'https://api.formplume.com/v1/forms/{id}' \
  --request DELETE \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
No Body

Files (Collapsed)

Upload and download files attached to submissions.

Email (Collapsed)

Analytics & usage (Collapsed)

Inspect form analytics, organization totals, and plan usage.

Form access keys (Collapsed)

Create and revoke keys for protected form submissions.

API keys (Collapsed)

Inspect the organization API key used for the current request.

API keys Operations