For developers and aviation integrators
EASA Form 1 Extraction API

There is no public REST POST /extract that turns an EASA Form 1 into JSON. The contract is Streamable HTTP MCP with OAuth at https://doana.ca/api/mcp.
Map the fields, finish OAuth, and learn the job envelope and weekly quota before the first tools/call. Assisted extraction is for human review, not airworthiness, authenticity, or customs clearance.
Public catalog as of 12 September 2026: extract_easa_form1 only.
EASA Form 1 API (MCP, not REST)
Initialize a session at https://doana.ca/api/mcp, complete OAuth, list tools, and call extract_easa_form1. OpenAPI is discovery. The /mcp marketing page is not the protocol endpoint.
EASA describes Form 1 as an Authorised Release Certificate for production and maintenance. The API returns those sections as structured fields. It does not certify authenticity, part airworthiness, or regulatory compliance. Start with one representative certificate before any batch loop.
Fields on a succeeded job
When status is succeeded and documentType is easa_form_1, the result uses schemaVersion easa-form-1-v1. Headers cover box1Authority, box3TrackingNumber, organisation name and address, and box5WorkOrder. Each item has box6Item through box12Remarks. Serial numbers are box10SerialNumbers, an array of value, confidence and page objects rather than a comma-joined string.
release13 and release14 stay separate objects with fields A–E. An empty production block beside a filled maintenance block is expected on many maintenance certificates. Each scalar field has value, confidence and page. uncertainFields lists paths that need a human, using a 0.7 confidence threshold on non-empty values.
- Header: authority, tracking number, organisation, work order.
- Items: item number, description, part number, quantity, serial array, status, remarks.
- Release: section 13 and section 14 as separate A–E objects.
Authenticate and upload
Create a Doana personal account, add the remote server URL, and finish OAuth. Call get_usage. PDF files may be 50 MB and 20 pages; JPEG and PNG may be 20 MB. TIFF is rejected as UNSUPPORTED_FILE_TYPE. TOO_MANY_PAGES applies above 20 PDF pages.
Outside ChatGPT, send lossless content_base64 for an original file up to 64 KiB. Larger files, or files that cannot fit in a tool call, need create_mcp_upload. PUT raw bytes to upload_url with every required_headers entry before expires_at, or open browser_upload_url while signed in. Then call extract_easa_form1 with upload_id.
- Create the personal account and complete OAuth on https://doana.ca/api/mcp.
- List tools and confirm extract_easa_form1, get_extraction_result, create_mcp_upload and get_usage.
- Choose file, content_base64 or upload_id — never a local path or arbitrary https URL.
- Poll get_extraction_result with job_id while status is dispatch_pending, queued, running or outcome_unknown.
Succeeded job envelope
The first extract_easa_form1 envelope returns job_id, status, poll_after_seconds, replayed, quota and an optional result. Status can already be succeeded, failed_refundable or failed_charged, or still dispatch_pending, queued, running or outcome_unknown. Retrieval through get_extraction_result is the payload you import. Re-sending the same file within 24 hours can replay the existing job instead of consuming another weekly unit.
The excerpt below is synthetic. The fictional source line is “Block 8 — Part No.: DEMO-PN-001”. It is not a complete response and not a real certificate. Import only when status is succeeded, documentType is easa_form_1 and result is present. documentType unknown is usually a succeeded job with no Form 1 — not a status named unknown.
{
"status": "succeeded",
"documentType": "easa_form_1",
"result": {
"schemaVersion": "easa-form-1-v1",
"items": [
{
"box8PartNumber": {
"value": "DEMO-PN-001",
"confidence": 0.98,
"page": 1
}
}
]
},
"uncertainFields": []
}Quota and review
The base allowance is five EASA Form 1 files per personal account per UTC week. MCP_QUOTA_EXHAUSTED means the weekly quota is used and the account holds no paid credits. The period resets Monday 00:00 UTC. Failed or out-of-scope jobs refund the unit. On failed_refundable or failed_charged, show lastError.
Confidence is a model estimate, not a measured accuracy guarantee. Assisted extraction does not certify document authenticity, part airworthiness or regulatory compliance. Compare part numbers, serial arrays and remarks with the source PDF before any inventory or customs mapping.
- DOWNLOAD_URL_EXPIRED: attach the ChatGPT file again in the same turn.
- FILE_TOO_LARGE / TOO_MANY_PAGES: do not retry the same bytes; send a smaller Form 1 PDF.
- UNSUPPORTED_FILE_TYPE: TIFF and other non-PDF/JPEG/PNG uploads are rejected.
- Unknown documentType: report the outcome; do not reconstruct a certificate in chat.