Create document fields
Adds fields to a document. Send the fields in fields, even when you create one.
Field Types:
TEXT- Rich text content section (Tiptap editor format)HTML- Raw HTML content with custom styling (API-only, sanitized for security)FORM- Form with input fields for signersPDF- PDF file sectionPRODUCT_TABLE- Product/service table with pricingTABLE- Simple table with custom rows and columnsSPACER,PAGE_BREAK,DURATION- Layout and duration blocks
Field Position: Determines the order fields appear in the document (0-based index).
Field Metadata: Each field type has specific metadata requirements. See schema documentation for details.
Placing fields on a PDF: a PDF field renders an uploaded PDF (fieldMeta.value is the storage key returned by the files endpoint). Add boxes on its pages with fieldMeta.placedFields. Each entry has a unique id, page (0-based), rect (x, y, width, height in PDF points, origin at the bottom-left corner of the page), and a kind. The server fills pageWidth, pageHeight, and pageRotation from the PDF page when you omit them. If you send pageWidth and pageHeight, rect is measured on a page of that size and scaled to the real page. The box kinds are the following:
INPUTwithinputTypeSIGNATUREorINITIALSand apartyId: a mark the party draws at signing, sealed into the PDF at that position.INPUTwithinputTypeTEXT,DATE,CHECKBOXorSELECTand apartyId: a value the party fills in before signing. Setrequiredto block signing until it is filled.STATICwithcontent(HTML): fixed text stamped at that position.
Set key on an INPUT box to fill it in by that key through PATCH /api/v1/documents/{id}/field-values. A key can contain lowercase letters, digits, hyphens, and underscores.
The following example creates a PDF field with a signature box:
{
"fields": [
{
"type": "PDF",
"position": 0,
"fieldMeta": {
"type": "PDF",
"value": "f/org_123/abc123def/contract.pdf",
"placedFields": [
{
"id": "sig-1",
"kind": "INPUT",
"inputType": "SIGNATURE",
"page": 2,
"rect": { "x": 72, "y": 96, "width": 200, "height": 48 },
"pageWidth": 595.28,
"pageHeight": 841.89,
"partyId": "PARTY_ID",
"required": true
}
]
}
}
]
}
The request fails with an HTTP 400 Bad Request status code, and writes nothing, when a box has a page the PDF doesn’t have, doesn’t fit on its page, names a partyId that isn’t a party on the document, or is a SIGNATURE or INITIALS box without a party with the SIGNER role. The issues array in the response lists every problem with its path, such as fields.0.fieldMeta.placedFields.2.rect.
The response lists the created fields in request order, each in the same shape as GET /api/v1/documents/{id}/fields/{fieldId}. To add, move, or remove single boxes later, use PATCH /api/v1/documents/{id}/fields/{fieldId}/placed-fields.
Product tables: a PRODUCT_TABLE field’s price values are decimal amounts in the table’s currency, such as 1499.5, not minor units. vat is a rate in percent, such as 25.
HTML Field Security: HTML fields accept raw HTML but are automatically sanitized server-side to allow only safe formatting tags (p, div, span, headings, lists, tables, images) and basic CSS styling. Links, script tags, and dangerous attributes are stripped. Images support HTTP/HTTPS URLs and data URIs for inline images.
Authorizations
Personal API key, e.g. Authorization: Bearer sajn_sk_.... Not scope-limited — acts as the issuing user.
Headers
API version for this request. Without it, the request uses the organization's default version; an organization without a default is pinned to the latest version by its first request.
2026-09, 2026-10 Makes retries safe. A retry with the same key and the same request replays the stored response for 24 hours (header Idempotent-Replayed: true); the same key with a different request returns 400.
255Path Parameters
The document ID.
Body
Body
The fields to create, in the order the response lists them
1Response
200
The created fields, in request order

