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 temporary contentUrl for 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 labels per extraction and filter the list by them (labels[key]=value); docType is reserved for configured document-type routing.
  • Document metadata includes a standard mimeType value such as application/pdf when Document Insights can determine it.
  • Lifecycle QUEUED -> PROCESSING -> COMPLETED, with terminal FAILED and REJECTED carrying a machine-readable error.
  • GET /document-insights/extractions supports status, time-window, sorting, and label filters; GET /document-insights/extractions/{extractionId} returns the full typed output and a temporary document contentUrl.
  • Submit field-level corrections with POST /document-insights/extractions/{extractionId}/feedback (returns 201).
  • Delete a terminal extraction with DELETE /document-insights/extractions/{extractionId}; a queued or processing extraction returns 409.

Workflows

  • Trigger Studio-configured workflows with JSON or multipart form-data (POST /workflows/{workflowId}/runs).
  • Monitor runs with GET /workflow-runs and GET /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-time t).
  • 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-subscriptions filters by name, a case-insensitive substring of the subscription name, alongside status, eventType, and the creation-time window.
  • Events are immutable workspace records and are kept even when no active subscription matched them.
  • GET /events lists 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, and T+31m.
  • Inspect events with GET /events, their exact payload with GET /events/{eventId}, and every delivery across subscriptions with GET /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-level details.
  • 422 VALIDATION_FAILED for semantically invalid bodies, 400 INVALID_REQUEST for malformed requests and bad parameters; every response carries X-Request-Id.
  • A validation message names the rejected fields and the reason (Name must not exceed 128 characters.) instead of a generic summary, and stays a rendering of details; branch on code and details[].field, never on message.