Ship document flows in an afternoon
One key works for REST and MCP. Every fill returns per-field results — your agent knows exactly what fit, what was reformatted, and what needs a human.

Key to working call in 60 seconds
MCP first — the same key also works for plain REST. The output is what your agent gets back; hover a line to see the field it describes.
Quickstart
# 1 · connect any MCP client claude mcp add appliflo --transport http <APP_URL>/api/mcp --header "Authorization: Bearer aflo_live_..." # 2 · call a tool > fill_document({ document_id: "doc_8f2a", values: { name: "A. Whitfield-Harrington", ssn: "523481962", start: "2026-08-01" } })
→ fill application.pdf name: filled @ 8pt (shrunk to fit) ssn: comb 9/9 cells start: formatted → 08/01/2026 employer_address: overflowed — not stamped
The ⚠ line is the feature: every fill returns per-field results, so your agent branches on what actually happened instead of shipping a broken PDF.
Residential Rental Application
Form RA-2 · Page 1 of 1
1Applicant
Applicant full nameAlexandra Whitfield-Harringtonname · textFits 8pt
Middle initialtextSkipped
Date of birth03/04/1991date · MM/DD/YYYYFormatted
Social security no.987654320ssn · comb 9Filled
Phone(415) 555-0142textFilled
Emaila.whitfield@example.comtextFilled
2Rental
Property address14 Alder Lane, Unit 3BtextFilled
Move-in date08/01/2026textFormatted
Monthly rent$2,150.00textFilled
3Employment
EmployerNorthwind LogisticstextFilled
Monthly income$6,400.00textFilled
Employer addressWon’t fit — not stampedtextOverflowed — flagged
4Signature
Applicant signatureXsignature
Date signedtext
I certify this application is true and complete.
RA-2Endpoints
Each REST endpoint has a matching MCP tool with the same name and the same per-field results.
| Method | Path | MCP tool |
|---|---|---|
| POST | /api/v1/documentsUpload a PDF and create a document. | upload_document |
| POST | /api/v1/documents/:id/detectDetect fields — typed, with confidence and flagged status. | detect_fields |
| GET | /api/v1/documents/:id/fieldsList a document's current fields. | list_fields |
| PATCH | /api/v1/documents/:id/fields/:fieldIdCorrect a field's label, type, semantic type, or box. | correct_field |
| POST | /api/v1/documents/:id/fillFill a persisted document's fields with values. | fill_document |
| POST | /api/v1/fillOne-shot: PDF + values in, filled PDF out. No document_id needed. | fill_form_oneshot |
| POST | /api/v1/documents/:id/sendRoute a filled document for signature. | send_envelope |
| GET | /api/v1/envelopesList envelopes and their status. | list_envelopes |
| GET | /api/v1/openapi.jsonThe full OpenAPI spec for every endpoint above. | — |
Routing a document for signature is not legal advice — check your own compliance requirements before sending contracts.