Get started
Template types
The three Doclift template families (custom, fillable form, and workflow) and precisely what each lets you do through the API versus the dashboard.
Three families, one generation call
Every template carries a category: custom, fillable_form, or
workflow. Once published, all three are listed by GET /api/v1/templates,
read by GET /api/v1/templates/:id, and generated from with the same
POST /api/v1/document_requests payload shape. The index and show
endpoints never filter by category. What differs sharply is how each one is
authored, and how much of that authoring the classic API exposes.
custom | fillable_form | workflow | |
|---|---|---|---|
| Authored via | dashboard editor or the API | PDF upload, dashboard only | dedicated workflow API, dashboard only |
| POST /api/v1/templates | yes | no | no |
| Update / delete / publish / unpublish | yes | no | no |
| /api/v1/templates/:id/variables | full CRUD | no | no |
| GET /api/v1/templates | yes | yes | yes |
| POST /api/v1/document_requests | yes, once published | yes, once published | yes, once published |
| Availability | everyone | everyone | private beta, on request |
The 404 you cannot tell apart from a typo
The classic write endpoints (POST/PUT/PATCH/DELETE on
/api/v1/templates and every action under
/api/v1/templates/:template_id/variables) only ever operate on custom
templates. Send a fillable_form or workflow id to any of them and you get
404 {"error": "Template not found"}, the exact body an id that does not
exist at all would produce. There is no status code or field that tells you
"this exists, but it is not a custom template."
Custom (category: "custom")
A freeform HTML template: you control every element of the layout, and you define every variable yourself.
- What it's for: any document you want to design yourself. The layout is not constrained by an existing file.
- Authored: in the dashboard's online HTML editor, or through the API's
contentandvariables_attributesfields. - Through the API: full CRUD, publish/unpublish, and full CRUD on its variables. This is the only category the classic API can create.
See Templates API and Variables API.
Fillable form (category: "fillable_form")
A template backed by an uploaded PDF that already carries form fields (AcroForm widgets): text inputs, checkboxes, radio groups, drop-downs.
- What it's for: reusing an existing PDF layout (a regulated form, a document that already has its final design) instead of rebuilding it as HTML.
- Authored: by uploading the PDF from the dashboard. Doclift extracts
every form field into a variable:
titleis the field's technical name,descriptionis the field's label (falling back to the technical name),field_typeandallowed_valuesare inferred from the PDF widget, andseed_valuecomes from the field's default value, if any. Re-uploading a new version of the PDF resyncs the variables: new fields become new variables, and fields no longer present are destroyed. From the dashboard you can edit only a variable'sdescriptionandseed_value; itstitleandfield_typealways mirror the PDF and cannot be renamed or retyped by hand. - Through the API: read-only.
GET /api/v1/templatesand/:idreturn it once published, with its auto-detected variables embedded in the show response.POST /api/v1/document_requestsgenerates from it exactly like a custom template. Nothing else: no create, update, delete, publish/unpublish, or variables endpoint accepts it.
See Fillable forms for the full generation and variable-mapping reference.
Workflow (category: "workflow")
A tree of sections (nested groups and content blocks, each with its own
condition) instead of one HTML blob. It has its own API, mounted entirely
under /api/v1/workflows/*: templates, sections, variables, theme, and
publication are all separate resources there. The classic
/api/v1/templates write endpoints never touch a workflow.
- What it's for: documents assembled from many conditionally-included parts (long contracts, multi-scenario documents) where you need structure the single-blob HTML editor does not give you.
- Authored: entirely through the workflow API (or the dashboard's workflow builder); the classic API cannot create, edit, or delete a workflow template.
- Through the classic API: the same read-only and generate-only access
as
fillable_form.GET /api/v1/templatesand/:idlist and show it once published, andPOST /api/v1/document_requestsgenerates from it.
Private beta
Workflows are a private beta, not open to every account. Access is granted on request, by writing to [email protected]. Once granted, a workflow template behaves exactly as described above: readable and generatable through the classic API, authored through the separate workflow API. See Workflows for the full picture.