Developers
REST API
Everything the workflow action does is available over HTTP, authenticated with a workspace API key.
Base URL
https://pdfgen-api.appexpertly.comAuthenticating
Requests carry a workspace key. Keys are issued per workspace and can be rotated without downtime — see API keys.
Generating a document
POST /api/v1/generate queues the render and returns immediately with a request id and a URL to poll. This is the path to use for anything triggered by a user action, because it does not hold the connection open while Chromium works.
POST /api/v1/generate
{
"template_id": "tpl_invoice_a4",
"data": {
"contact": { "full_name": "Dana Reyes" },
"total": 1840.00
},
"expires_in_days": 30
}
202 { "request_id": "req_...", "poll_url": "/api/v1/generate/req_..." }Checking on it
GET /api/v1/generate/:request_id returns the current status, and the signed URL once the document exists.
Rendering inline
POST /api/v1/preview renders and returns the PDF bytes in the response, with Content-Type: application/pdf. It is the right call when you need the file in hand rather than a link to it, and the wrong one for bulk work — use batch jobs there.
Other endpoints
| Method and path | Does |
|---|---|
GET /api/v1/templates | Lists templates the workspace can use |
POST /api/v1/generate/batch | Queues a batch run |
GET /api/v1/jobs/:id | Reports batch progress |
GET /api/v1/workspaces/me/usage | Executions this period and what they cost |
GET /api/v1/workspaces/me/logs | Recent generations |
POST /api/v1/workspaces/keys/rotate | Issues a new key pair |
Billing
Every completed render is one execution and is charged as one, whichever path produced it. A render that fails is logged and not billed. Seepricing.