API Overview
Provision end-user accounts, assign plans and access grants, and read usage from your own systems with the FormWise External API.
API Overview
The FormWise External API lets you manage the end users of your Storefronts from your own systems. The headline use case is bring-your-own-billing: you take payment anywhere (your own checkout, an invoice, a partner platform), then call the API to create the account, assign plans, and grant access - no Stripe Connect required.
The API is versioned under /api/v1. Once published, the v1 surface only changes additively - fields are added, never renamed or removed.
Base URL: https://builder.formwise.ai/api/v1Beta
API keys are managed from a Storefront's Webhooks page. Storefronts are currently in beta - if you don't see them in your sidebar, the feature isn't enabled for your organization yet.
Authentication
Every request carries an organization API key as a bearer token:
curl https://builder.formwise.ai/api/v1/end-users \
-H "Authorization: Bearer fw_live_..."Keys are organization-wide - one key works across every Storefront and Suite in your organization.
Creating a key
- Open any Storefront and go to its Webhooks page.
- In the Provisioning API card, name the key (for example "Production - Zapier") and click Create key.
- Copy the secret immediately. It is shown exactly once - FormWise stores only a hash, so a lost secret can't be recovered. Create a new key instead.
Each key shows its display prefix (fw_live_xxxx), creation date, and when it was last used. Revoking a key takes effect immediately - requests using it start failing with api_key_revoked. An organization can hold up to 20 active keys.
Scopes
| Scope | Grants |
|---|---|
end_users:read | List and read end users and the plan catalog |
end_users:write | Create and update end users |
Keys are created with both scopes today; the API enforces them per endpoint, so future keys can be read-only.
Requests and responses
- Request bodies are JSON (
Content-Type: application/json). - Every response - success or error - carries an
X-Request-Idheader. Include it when contacting support about a specific call. - Errors use one stable envelope:
{ "error": { "code": "...", "message": "..." } }. Branch oncode;messageis human-readable text and may change. See Errors for the full code table.
Rate limits
Each key may make 120 requests per minute (sliding 60-second window). Exceeding the limit returns 429 with a Retry-After header giving the number of seconds to wait.
Quickstart
Create an end user with a plan in one call:
curl -X POST https://builder.formwise.ai/api/v1/end-users \
-H "Authorization: Bearer fw_live_..." \
-H "Content-Type: application/json" \
-d '{
"email": "customer@example.com",
"fullName": "Sam Customer",
"tierPlanIds": ["<tier-plan-uuid>"]
}'The person then signs in to your Storefront with that email address using a one-time code - there is no password to distribute. Find plan IDs with GET /tier-plans or from the plan editor in the dashboard.
OpenAPI specification
The full machine-readable spec is available at
https://builder.formwise.ai/api/v1/openapi.json --
use it to generate typed clients or import the API into your tooling. The
reference pages below are generated from the same spec.
The surface covers the full lifecycle: create or update by email (adding plans and grants is a re-POST -- it's idempotent), inspect and list, adjust bonus credits, and take access away again -- remove a plan, remove a grant, or revoke the whole identity.
Create or update an end user
Provision accounts with plans and access grants.
Get an end user
Identity, subscriptions with credit usage, and grant ids.
Revoke access
Idempotent identity revoke; re-POST restores.
Remove a plan
Delete a subscription and its credit pool.
Remove a grant
Take back a specific access grant.
Errors
Error envelope, codes, and rate limits.