Plextera Public API v1
The first version of the Plextera Public API: document processing, workflow automation, and webhook notifications behind one API key.
Files
- Upload documents up to 50 MB (
POST /files): PDF, JPEG, PNG, TIFF, WebP, DOCX, XLSX, PPTX, plain text, CSV, HTML, archives, audio, and video. Executable and script files are rejected. GET /files/{fileId}returns metadata including a temporarycontentUrlfor downloading the content directly.- Reference one uploaded file from any number of extractions and workflow runs.
Document Insights
- Submit documents for structured field extraction by
fileId, HTTPS URL, or direct multipart upload. - Attach up to 50 string
labelsper extraction and filter the list by them (labels[key]=value);docTypeis reserved for configured document-type routing. - Document metadata includes a standard
mimeTypevalue such asapplication/pdfwhen Document Insights can determine it. - Lifecycle
QUEUED -> PROCESSING -> COMPLETED, with terminalFAILEDandREJECTEDcarrying a machine-readableerror. GET /document-insights/extractionssupports status, time-window, sorting, and label filters;GET /document-insights/extractions/{extractionId}returns the full typedoutputand a temporary documentcontentUrl.- Submit field-level corrections with
POST /document-insights/extractions/{extractionId}/feedback(returns201). - Delete a terminal extraction with
DELETE /document-insights/extractions/{extractionId}; a queued or processing extraction returns409.
Workflows
- Trigger Studio-configured workflows with JSON or multipart form-data (
POST /workflows/{workflowId}/runs). - Monitor runs with
GET /workflow-runsandGET /workflow-runs/{runId}, including step-level output and nested runs.
Event Subscriptions
- HTTPS webhooks for extraction and workflow run terminal states, signed with HMAC-SHA256 (
X-Plextera-Signature, send-timet). - Plextera generates each signing secret. Create returns it once with the new active subscription.
- Generic PATCH does not accept a signing secret, and ordinary subscription responses do not expose it.
GET /event-subscriptionsfilters byname, a case-insensitive substring of the subscription name, alongsidestatus,eventType, and the creation-time window.- Events are immutable workspace records and are kept even when no active subscription matched them.
GET /eventslists the event types the workspace subscribes to: events a paused or mis-filtered subscription missed stay visible, event types nobody subscribes to are not listed.- Automatic delivery uses at most 6 total attempts at approximately
T+0,T+1m,T+3m,T+7m,T+15m, andT+31m. - Inspect events with
GET /events, their exact payload withGET /events/{eventId}, and every delivery across subscriptions withGET /events/{eventId}/deliveries. - Inspect one delivery’s payload and up to the 100 most recent chronological HTTP attempt records with
GET /events/{eventId}/deliveries/{deliveryId}. - Resend any delivery with
POST /events/{eventId}/deliveries/{deliveryId}/resend; each request creates a new one-attempt delivery for the same event.
Error model
- One envelope on every error:
error.code,error.message,error.requestId,error.retryable, and field-leveldetails. 422 VALIDATION_FAILEDfor semantically invalid bodies,400 INVALID_REQUESTfor malformed requests and bad parameters; every response carriesX-Request-Id.- A validation
messagenames the rejected fields and the reason (Name must not exceed 128 characters.) instead of a generic summary, and stays a rendering ofdetails; branch oncodeanddetails[].field, never onmessage.