REST API

The /api/v1 surface — documents, sending, and workspaces.

FolioSign exposes a JSON REST API under /api/v1. Authenticate with an API key (or a session token) as a bearer credential — see API keys.

The endpoints below are the ones most integrations need. For the complete surface — every endpoint, parameter and response, generated from the OpenAPI spec — see the [API reference](/docs/api). The machine-readable spec is served at /api/v1/openapi.json.

Documents

GET/api/v1/documents

List documents, cursor-paginated, newest first.

GET/api/v1/documents/{id}

Document detail with recipients and payments.

GET/api/v1/documents/{id}/content

Builder blocks and variables.

PATCH/api/v1/documents/{id}/content

Update a draft's blocks. Totals are recomputed server-side at render.

GET/api/v1/documents/{id}/analytics

Per-recipient timeline and per-page view stats.

Recipients & sending

PUT/api/v1/documents/{id}/recipients

Replace the recipients on a draft.

POST/api/v1/documents/{id}/send

Send a draft for signature.

POST/api/v1/documents/{id}/remind

Nudge a recipient, or all outstanding signers.

POST/api/v1/documents/{id}/recipients/{rid}/resend

Re-mint a recipient's signing link and re-email it.

POST/api/v1/documents/{id}/void

Void a draft or an in-flight document.

POST/api/v1/documents/from-pdf

Create from a PDF, place a signature field, add the signer, and send.

Workspaces

On the Corporate plan an account holds several workspaces — separate documents, templates and teams under one bill. These endpoints need a session token, not an API key: creating a workspace changes what the account is billed for, so it stays a decision a signed-in owner or admin makes.

GET/api/v1/workspaces

List your workspaces, with how many the plan allows and how many are used.

POST/api/v1/workspaces

Create one under the same billing account. Refused once the allowance is reached.

POST/api/v1/organizations/{orgId}/switch

Set the active workspace for this session — every other call is scoped to it.

Errors

Failures return the matching HTTP status and a consistent body:

400 Bad Request
{
  "error": {
    "code": "validation_error",
    "message": "…",
    "details": { }
  }
}
StatuscodeMeaning
400validation_errorThe request body or query failed validation.
401unauthorizedMissing or invalid bearer credential.
403forbiddenAuthenticated, but not allowed to do that.
404not_foundNo such resource in your workspace.
409conflictThe resource isn't in a state that allows this.

OpenAPI

The full machine-readable spec is served live and stays in sync with the running API:

GET/api/v1/openapi.json
Note

/api/v1/health and /api/v1/openapi.json are the only public paths — everything else requires a bearer credential.