The async contract
Every integration comes down to one thing: extraction is asynchronous. Play the run below, scrub through it, or step it beat by beat.
Upload. One POST carries the file. Nothing has been read yet.
Timeline
Pass webhook_url and Parse calls you when it finishes, so you never poll at all.
No credit card required - 100 pages/month free
Submit the file, keep the id, and ask for it until the status changes. Everything else - schemas, exports, webhooks - is built on those two calls.
# 1. submit - the call returns straight away
curl -X POST https://api-parse.conversiontools.io/v1/extract \
-H "Authorization: Bearer YOUR_API_KEY" \
-F "file=@invoice.pdf"
# 202 { "id": "ext_9f2c41d7", "status": "processing" }
# 2. poll that id until it stops saying "processing"
curl https://api-parse.conversiontools.io/v1/extractions/ext_9f2c41d7 \
-H "Authorization: Bearer YOUR_API_KEY"
# 200 { "status": "completed", "data": { ... } }POST /v1/extract returns an id right away. If your code sits and waits for data on that call, it is waiting for something that was never coming.
GET /v1/extractions/:id answers "processing" until it answers "completed". A couple of seconds between calls is plenty.
Pass webhook_url when you submit and Parse posts the finished extraction to your endpoint. No loop to write.
The free tier covers 100 pages a month, and no credit card is needed to start.