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