Formify is an AI‑assisted e‑signing platform that helps businesses reduce language barriers and streamline contract workflows. It offers specialized AI assistants, multilingual support, contextual guidance, biometric verification, and compliance with GDPR and eIDAS, targeting SaaS, real‑estate and international enterprises.
Formify publishes 10 API contracts indexed on the APIs.io network, including Account API, Auth API, Docs API, and 7 more. Tagged areas include Company, Artificial Intelligence, E-signing, Legal Tech, and Multilingual.
The Formify catalog on APIs.io includes 1 event-driven AsyncAPI specification, 1 JSON-LD context, and 1 Spectral governance ruleset.
Formify’s developer surface includes changelog, authentication, pricing, engineering blog, API reference, and 19 more developer resources.
Regulatory Posture applies to this provider. Its tags matched the
Horizontal (data, software, accessibility, platform) regime, so
Regulatory Posture carries 15 points of the composite.
If this regime is wrong for your business, say so on your
provider repo — the
applicability map is public and we will correct it.
Create-or-Update Ergonomics could not be measured. We hold no machine-readable contract for
this provider to read, so there is nothing to measure a write surface against. Excluded rather than scored zero:
never-measured and measured-empty are different facts. Publishing an OpenAPI is what makes this facet — and
several others — scorable at all.
The six quality facets above are damped to 85 points between them,
because the conditional facet above carries the other
15. That is why each facet's contribution is shown against a damped
maximum: raising a quality facet moves the composite by 85% of its nominal
weight, not 100%. The full arithmetic is at apis.io/rating/.
Show this score on your site.
It updates itself when the score changes. Paste this where you link to your API docs:
<a href="https://apis.io/providers/formify-eu/"><img src="https://apis.io/badge/formify-eu/card.svg" alt="Formify on APIs.io — Kin Score by API Evangelist"></a>
Other styles, a README pill and a shields.io endpoint are on the badge page.
Raise your score.
Agent readiness — checks not met, largest first (exact, from this profile):
MCP Server+12 pts — deployment.mode + probe verdict on the mcp/ manifest, not the pointer; an unprobed slug falls back to authorship Ask about this →
Idempotency+9 pts — OpenAPI mutating operations declare an idempotency key — a header, a request-body property, or a named de-duplication token whose own description says so (verified); else common[].type matches /idempoten/i (documented) Ask about this →
Rate-Limit Signaling+7 pts — OpenAPI responses document X-RateLimit-* / RateLimit headers (verified), else a rate_limits artifact or RateLimits link (documented) Ask about this →
Pagination+5 pts — share of collection GETs (an array, or one wrapped in data/items/results ...) that declare a page/limit/offset/cursor parameter, a Link header or a next/cursor field; na with no collection GETs Ask about this →
5 more unmet checks in the Agent Readiness table above.
Kin Score — facets with the most composite points still available (weight × headroom):
Each check links to what satisfies it. Publish the artifact, or tell us where it already lives, and the score moves on the next scoring run.
Not sure how this applies to your stack? Ask about any one item. Kin Lane reads every question, looks at your profile and your situation, and replies with what a fix would take — scoped to that one area, priced up front, yours whether you ship it or not. Ask a question →
Standards this provider implements or carries. De facto ones are profiled and measured by the API Commons; formal ones come from the standards directory and are linked by the provider's own tags. The evidence column says how each claim was established — not that it was made.
## API Key Token Exchange OAuth 2.0 with PKCE is the recommended authentication method for Formify API integrations because users authorize access in Formify and clients do not ...
Drafts allow you to save a document as a work-in-progress before sending it for signing. A draft stores all document settings (name, signees, signature placements, AI assistant,...
A **public link** is one reusable signing link that anyone who has it can open and sign. Every opener gets their own copy of the document, so one link can produce any number of ...
## OAuth 2.0 Authorization Code Grant Flow Formify uses OAuth 2.0 to allow third-party applications to access the API on behalf of users. This section provides a step-by-step gu...
A template is a reusable document with its signature fields already positioned, so creating a document from it only has to supply the recipients. **A template's `signeeDetails` ...
aid: formify-eu
name: Formify
accessModel:
pricing: freemium
onboarding: unknown
trial: false
try_now: false
public: false
label: Freemium
confidence: medium
source:
- plans
- authentication
- security
generated: '2026-11-13'
method: derived
image: https://cdn.prod.website-files.com/660bfb2f82e549c13f7d5d09/66d920a7271220d0fe169bc0_img-formify-opengraph.png
description: Formify is an AI‑assisted e‑signing platform that helps businesses reduce language barriers and streamline contract
workflows. It offers specialized AI assistants, multilingual support, contextual guidance, biometric verification, and compliance
with GDPR and eIDAS, targeting SaaS, real‑estate and international enterprises.
url: https://artifacts.apis.io/formify-eu/apis.yml
x-type: company
x-source: harvest:mcp-registry
x-tier: profiled
x-tier-reason: enrichment pass 2026-11-08 (modular-v1; was harvest)
specificationVersion: '0.20'
created: '2026-11-08'
modified: '2026-11-08'
tags:
- Company
- Artificial Intelligence
- E-signing
- Legal Tech
- Multilingual
tags_raw:
- Company
- AI
- E-signing
- LegalTech
- Multilingual
maintainers:
- FN: Kin Lane
email: kin@apievangelist.com
- FN: APIs.json
email: info@apis.io
common:
- type: AgenticAccess
url: agentic-access/formify-eu-agentic-access.yml
- type: Plans
url: plans/formify-eu-plans-pricing.yml
- type: Spectral
url: rules/formify-eu-rules.yml
- type: JSONLD
url: json-ld/formify-eu-context.jsonld
- type: Vocabulary
url: vocabulary/formify-eu-vocabulary.yml
- type: AgentSkill
url: skills/_index.yml
- type: Webhooks
url: asyncapi/formify-eu-webhooks.yml
- type: DataModel
url: data-model/formify-eu-data-model.yml
- type: ChangeLog
url: changelog/formify-eu-changelog.yml
- type: Authentication
url: authentication/formify-eu-authentication.yml
- type: ErrorCatalog
url: errors/formify-eu-problem-types.yml
- type: Conformance
url: conformance/formify-eu-conformance.yml
- type: LLMsTxt
url: llms/formify-eu-llms.txt
- type: WellKnown
url: well-known/formify-eu-well-known.yml
- type: Hosts
url: hosts/formify-eu-hosts.yml
- type: Vendors
url: vendors/formify-eu-vendors.yml
- type: TermsOfService
url: https://formify.eu/privacy/terms
- type: Pricing
url: https://formify.eu/pricing
- type: ChangeLog
url: https://developers.formify.eu/changelog/
- type: Blog
url: https://formify.eu/blog
- type: APIReference
url: https://developers.formify.eu/
- type: OAuthScopes
url: scopes/formify-eu-scopes.yml
- type: DomainSecurity
url: security/formify-eu-domain-security.yml
- type: Website
url: https://formify.eu/
apis:
- aid: formify-eu:formify-eu-account-api
name: Formify Account API
description: Account info and operations
humanURL: https://developers.formify.eu/
baseURL: https://docs-api.formify.eu/v1
tags:
- Account
tags_raw:
- account
properties:
- type: OpenAPI
url: openapi/formify-eu-account-api-openapi.yml
- type: JSONSchema
url: json-schema/formify-eu-account-capabilities-schema.json
- aid: formify-eu:formify-eu-auth-api
name: Formify Auth API
description: '## API Key Token Exchange
OAuth 2.0 with PKCE is the recommended authentication method for Formify API integrations because users authorize access
in Formify and clients do not need to store long-lived API keys.
Some MCP clients and third-party platforms cannot complete an OAuth/PKCE flow and only allow a user to paste a token.
For those cases, a Formify API key can be exchanged for a short-lived Bearer `access_token` using `POST /auth/token`.
Use the returned `access_token` with `Authorization: Bearer {access_token}` when calling protected API endpoints. Do not
call protected endpoints directly with the API key.'
humanURL: https://developers.formify.eu/
baseURL: https://docs-api.formify.eu/v1
tags:
- Authentication
tags_raw:
- auth
properties:
- type: OpenAPI
url: openapi/formify-eu-auth-api-openapi.yml
- type: JSONSchema
url: json-schema/formify-eu-api-key-token-response-schema.json
- aid: formify-eu:formify-eu-docs-api
name: Formify Docs API
description: Handle and create document signature requests
humanURL: https://developers.formify.eu/
baseURL: https://docs-api.formify.eu/v1
tags:
- Docs
tags_raw:
- docs
properties:
- type: OpenAPI
url: openapi/formify-eu-docs-api-openapi.yml
- type: JSONSchema
url: json-schema/formify-eu-signature-field-schema.json
- type: JSONSchema
url: json-schema/formify-eu-form-field-schema.json
- aid: formify-eu:formify-eu-drafts-api
name: Formify Drafts API
description: 'Drafts allow you to save a document as a work-in-progress before sending it for signing.
A draft stores all document settings (name, signees, signature placements, AI assistant, etc.)
without actually sending invitations to signees.
**Draft Lifecycle:**
1. **Create** a draft with `POST /docs/drafts` — saves the document configuration
2. **Update** the draft with `PUT /docs/drafts/{draftId}` — modify any settings before sending
3. Optionally **preview** the draft with `GET /docs/drafts/{draftId}/file` — returns a PDF showing signature field placements
4. **Send** the draft with `POST /docs/drafts/{draftId}/send` — converts the draft into a live document and sends invitations
to signees
5. Optionally **list** drafts with `GET /docs/drafts` or **get details** with `GET /docs/drafts/{draftId}`
6. **Delete** a draft with `DELETE /docs/drafts/{draftId}` if it''s no longer needed
**Who sees what:** `GET /docs/drafts` lists your own drafts plus the ones colleagues set to
`sharingSetting: "shared"` — the same rule as `GET /docs`, `GET /templates` and `GET /links`. A
`private` draft is readable by its owner alone. Each entry carries `userId` and `sharingSetting`, so
you can tell your own from a colleague''s.
**Key Differences from `POST /docs`:**
- Drafts do **not** send invitations to signees upon creation — they are saved for later.
- Signee details are optional when creating/updating a draft. You can add them later via `PUT /docs/drafts/{draftId}`.
- Signees in a draft do not need a contact method (email/phone) until the draft is sent.
- Signature placement coordinates can be omitted or incomplete during the draft phase.
- When sent via `POST /docs/drafts/{draftId}/send`, all the same validations as `POST /docs` apply (contact methods, signature
coordinates, etc.).
- Drafts expire automatically after the same auto-deletion period as other documents. Expired drafts cannot be edited
or sent.
**Shared Properties with `POST /docs`:**
The request body for creating and updating drafts shares many of the same properties as `POST /docs`, including:
- `signeeDetails` (signature types, placements, signatureBox, idScanBox, signingOrder)
- `enableSigningOrder` (requires `signingOrder` capability)
- `aiAssistant` configuration
- `language`, `sharingSetting`, `personalMessage`
- Signature type permission requirements (`signatureBankId`, `signatureIdScan`, `signatureFaceLiveness` capabilities)
Refer to the `POST /docs` documentation above for details on these shared properties.'
humanURL: https://developers.formify.eu/
baseURL: https://docs-api.formify.eu/v1
tags:
- Drafts
tags_raw:
- drafts
properties:
- type: OpenAPI
url: openapi/formify-eu-drafts-api-openapi.yml
- type: JSONSchema
url: json-schema/formify-eu-create-draft-request-schema.json
- type: JSONSchema
url: json-schema/formify-eu-update-draft-request-schema.json
- aid: formify-eu:formify-eu-files-api
name: Formify Files API
description: Upload files to use for signature requests
humanURL: https://developers.formify.eu/
baseURL: https://docs-api.formify.eu/v1
tags:
- File
tags_raw:
- files
properties:
- type: OpenAPI
url: openapi/formify-eu-files-api-openapi.yml
- type: JSONSchema
url: json-schema/formify-eu-form-field-schema.json
- aid: formify-eu:formify-eu-links-api
name: Formify Links API
description: "A **public link** is one reusable signing link that anyone who has it can open and sign. Every opener\ngets\
\ their own copy of the document, so one link can produce any number of finished documents.\n\nThis is not the same thing\
\ as the per-recipient links of a document you have already sent — those come\nfrom `GET /docs/{documentId}/recipient-links`\
\ and are addressed to one named signee each.\n\n**Lifecycle:**\n1. **Create** a link with `POST /links` from a file you\
\ uploaded with `POST /files`\n2. Share the returned `linkUrl` however you like — Formify sends no invitations\n3. **List**\
\ the documents it has produced with `GET /links/{linkId}/documents`\n4. **Update** it with `PUT /links/{linkId}` — the\
\ public URL survives an edit\n5. **Disable** it with `PUT /links/{linkId}/disable` when it should stop accepting new\
\ signers\n6. **Delete** it with `DELETE /links/{linkId}` — only once it has been disabled\n\n**Key differences from `POST\
\ /docs`:**\n- There are no recipients. `signeeDetails` describes the signature slots on the page, not people, so it\n\
\ carries no email, phone, delivery method or signing order. A `fullName` on a slot is a label\n pre-filled on the signature\
\ line — usually a role such as `\"Buyer\"` — which the signer can change.\n- `signatureBox` is **required** for every\
\ slot placed on an existing page. A document can inherit\n coordinates from a template; a link has nothing to fall back\
\ on.\n- Nothing is sent anywhere. Distribution is entirely yours.\n\n> **Availability and billing:** requires the `publicLinks`\
\ capability to read and `publicLinksCreate`\n> to create. Check `GET /account/capabilities`. On the credits pricing model\
\ each live link is a billed\n> instance, charged pro rata for the remainder of the current period when it is created\
\ and renewed each\n> period while it stays active. **Duplicating a link is billed exactly like creating one.** Editing\
\ is\n> not billed again. Disabling or deleting releases the instance but does not refund the current period."
humanURL: https://developers.formify.eu/
baseURL: https://docs-api.formify.eu/v1
tags:
- Links
tags_raw:
- links
properties:
- type: OpenAPI
url: openapi/formify-eu-links-api-openapi.yml
- type: JSONSchema
url: json-schema/formify-eu-form-field-schema.json
- aid: formify-eu:formify-eu-oauth-api
name: Formify OAuth API
description: "## OAuth 2.0 Authorization Code Grant Flow\n\nFormify uses OAuth 2.0 to allow third-party applications to\
\ access the API on behalf of users. This section provides a step-by-step guide to implementing the authorization flow.\n\
\n### Prerequisites\n\nSee the **[Getting Access](/guides/getting-access/)** guide for details, but in short you must:\n\
\n1. Obtain your `client_id` and `client_secret`.\n2. Register your application at [app.formify.eu](https://app.formify.eu)\n\
3. Configure your `redirect_uri` (must match exactly what you registered)\n\n### Authorization Flow\n\n#### Step 1: Redirect\
\ User to Authorization URL\n\nRedirect the user to Formify's authorization endpoint:\n\n```\nhttps://docs-api.formify.eu/v1/oauth/authorize?client_id=YOUR_CLIENT_ID&redirect_uri=YOUR_REDIRECT_URI&response_type=code&scope=read%20write&state=RANDOM_STATE_STRING\n\
```\n\n**Parameters:**\n- `client_id` (required): Your application's client ID\n- `redirect_uri` (required): Where to\
\ redirect after authorization (must be registered)\n- `response_type` (required): Always use `code` for authorization\
\ code flow\n- `scope` (required): Space-separated list of permissions (`read`, `write`, or `read write`)\n- `state` (recommended):\
\ Random string to prevent CSRF attacks\n\n#### Step 2: User Authorizes Your Application\n\nThe user sees a consent screen\
\ and approves your application's access to their Formify account.\n\n#### Step 3: Receive Authorization Code\n\nAfter\
\ approval, Formify redirects back to your `redirect_uri` with an authorization code:\n\n```\nhttps://your-app.com/callback?code=AUTH_CODE_HERE&state=RANDOM_STATE_STRING\n\
```\n\n**Important:** Verify that the `state` parameter matches what you sent in Step 1.\n\n#### Step 4: Exchange Code\
\ for Access Token\n\nMake a POST request to the token endpoint to exchange the authorization code for an access token:\n\
\n```bash\nPOST https://docs-api.formify.eu/v1/oauth/token\nContent-Type: application/x-www-form-urlencoded\n\ngrant_type=authorization_code\n\
&code=AUTH_CODE_HERE\n&redirect_uri=YOUR_REDIRECT_URI\n&client_id=YOUR_CLIENT_ID\n&client_secret=YOUR_CLIENT_SECRET\n\
```\n\n**Response:**\n```json\n{\n \"access_token\": \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...\",\n \"token_type\":\
\ \"Bearer\",\n \"expires_in\": 3600,\n \"refresh_token\": \"def502004a1b2c3d...\",\n \"scope\": \"read write\"\n}\n\
```\n\n#### Step 5: Use Access Token\n\nInclude the access token in the `Authorization` header for all API requests:\n\
\n```bash\nGET https://docs-api.formify.eu/v1/docs\nAuthorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...\n```\n\
\n### Token Refresh\n\nAccess tokens expire after the time specified in `expires_in` (typically 1 hour). Use the refresh\
\ token to obtain a new access token without requiring user interaction:\n\n```bash\nPOST https://docs-api.formify.eu/v1/oauth/token\n\
Content-Type: application/x-www-form-urlencoded\n\ngrant_type=refresh_token\n&refresh_token=YOUR_REFRESH_TOKEN\n&client_id=YOUR_CLIENT_ID\n\
&client_secret=YOUR_CLIENT_SECRET\n```\n\n**Response:** Same structure as the initial token response, including a new\
\ `refresh_token`.\n\n### Scope\n\n- **`read`**: Allows reading documents, files, user info, and account settings\n- **`write`**:\
\ Allows creating/updating documents, uploading files, and modifying settings\n\nRequest only the scopes your application\
\ needs. Users see which permissions you're requesting during authorization.\n\n### Common Errors\n\n| Error | Description\
\ | Solution |\n|-------|-------------|----------|\n| `invalid_grant` | Authorization code expired or already used | Codes\
\ expire after 10 minutes. Start the flow again. |\n| `invalid_client` | Invalid client_id or client_secret | Verify your\
\ credentials in app.formify.eu |\n| `redirect_uri_mismatch` | redirect_uri doesn't match registered URI | Must match\
\ exactly (including trailing slash) |\n| `invalid_scope` | Requested scope not allowed | Use only `read` and/or `write`\
\ |\n| `access_denied` | User denied authorization | User must approve for your app to work |\n\n### Security Best Practices\n\
\n- **Never expose** `client_secret` in client-side code\n- **Always use HTTPS** for redirect URIs\n- **Validate state\
\ parameter** to prevent CSRF attacks\n- **Store tokens securely** (encrypted database, secure session storage)\n- **Refresh\
\ tokens proactively** before they expire to avoid service interruption"
humanURL: https://developers.formify.eu/
baseURL: https://docs-api.formify.eu/v1
tags:
- OAuth
tags_raw:
- oauth
properties:
- type: OpenAPI
url: openapi/formify-eu-oauth-api-openapi.yml
- aid: formify-eu:formify-eu-templates-api
name: Formify Templates API
description: 'A template is a reusable document with its signature fields already positioned, so creating a document
from it only has to supply the recipients.
**A template''s `signeeDetails` describes roles, not people.** You usually build a template long before
you know who will sign, so `fullName` on a template field is a **label** — `"Buyer"`, `"Tenant"`,
`"Witness"` — and contact details are optional. Whatever the document supplies at
`POST /docs` replaces it. Store a real name and address only when the same person genuinely signs every
time.'
humanURL: https://developers.formify.eu/
baseURL: https://docs-api.formify.eu/v1
tags:
- Templates
tags_raw:
- templates
properties:
- type: OpenAPI
url: openapi/formify-eu-templates-api-openapi.yml
- type: JSONSchema
url: json-schema/formify-eu-template-signature-field-schema.json
- type: JSONSchema
url: json-schema/formify-eu-form-field-schema.json
- aid: formify-eu:formify-eu-user-api
name: Formify User API
description: User info and operations
humanURL: https://developers.formify.eu/
baseURL: https://docs-api.formify.eu/v1
tags:
- User
tags_raw:
- user
properties:
- type: OpenAPI
url: openapi/formify-eu-user-api-openapi.yml
- aid: formify-eu:formify-eu-webhooks-api
name: Formify Webhooks API
description: Webhooks operations
humanURL: https://developers.formify.eu/
baseURL: https://docs-api.formify.eu/v1
tags:
- Webhook
tags_raw:
- webhooks
properties:
- type: OpenAPI
url: openapi/formify-eu-webhooks-api-openapi.yml
x-enrichment:
date: '2026-11-08'
status: enriched
artifacts_added: 27
pass: modular-v1
engine: identity=local,contract=local,surfaces=local,docs=local,regulatory=local
Formify API — frequently asked questions
Does Formify have an API?
Yes. APIs.io lists 10 APIs from Formify, including Formify Account API, Formify Auth API and Formify Docs API, and 7 more.
Is there an OpenAPI specification for the Formify API?
Yes. APIs.io indexes 10 OpenAPI specifications for Formify, each linked for download from this page.
How do I authenticate with the Formify API?
Formify documents its authentication (1 scheme). The details are profiled on APIs.io as Formify Authentication.
How much does the Formify API cost?
Formify publishes its prices; its Free plan is €0/ month as of 2026-11-08. APIs.io lists 4 pricing plans for Formify, with each plan's price, limits and inclusions under Pricing on this page.
Is the Formify API ready for AI agents?
Formify has a Kin Score of 44.6 out of 100 (developing) and an Agent Readiness score of 43.0 (agent-ready), scored by API Evangelist on 2026-11-13.
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.