Supplier Quote Extraction API
Extract supplier quotes with one POST. Send an email's subject, sender and body, and get back structured JSON: vendor, quote number, line items, totals, dates and a confidence score.
What the API does
The ProcureMind API runs the same extraction engine as the Gmail extension: it reads a supplier quote (quote, purchase order, BOM or RFI) and returns 23+ structured fields, from vendor details down to individual line items, with a confidence score on every result. Every extraction lands in your ProcureMind dashboard, counts against your plan's monthly quota, and can fire a signed webhook to your own systems.
Authentication
API requests authenticate with an API key in the X-API-Key header. Keys are created in the dashboard under Settings → API keys and require a Pro or Team plan.
- Keys look like
pm_followed by 64 hex characters. - Only the SHA-256 hash is stored. The raw key is shown once at creation. Copy it somewhere safe.
- Maximum 10 active keys per account; each key tracks its own last-used timestamp.
Quickstart
- 1.Create an account, then generate an API key in the dashboard under Settings → API keys (Pro or Team plan).
- 2.POST a quote email to the extraction endpoint:
curl -X POST https://www.procuremind.io/api/extract \
-H "Content-Type: application/json" \
-H "X-API-Key: pm_your_key_here" \
-d '{
"email_subject": "Quote Q-1042 - Acme Fasteners",
"email_sender": "sales@acme-fasteners.com",
"email_body": "Hi, please find our quote: 500x M6 hex bolts @ $0.12 each, total $60.00 USD, valid until 2026-10-01..."
}'- 3.Use the structured data. The response looks like this (truncated):
{
"extraction_id": "9f1c2a7e-...",
"extracted_data": {
"document_type": "quote",
"vendor_name": "Acme Fasteners",
"vendor_email": "sales@acme-fasteners.com",
"quote_number": "Q-1042",
"currency": "USD",
"total_amount": "60.00",
"due_date": "2026-10-01",
"items": [
{
"description": "M6 hex bolts",
"quantity": "500",
"unit_price": "0.12",
"line_total": "60.00"
}
],
"confidence_score": 0.97
},
"confidence_score": 0.97,
"model_used": "gpt-4o-mini",
"tokens_used": 1180
}Full request and response schemas, the PDF/Excel file endpoints, and every error code are in the API reference.
Rate limits
| Scope | Limit | Applies to |
|---|---|---|
| Email extraction | 10 requests / minute / user | POST /api/extract |
| File extraction | 3 requests / minute / user | POST /api/extract/pdf · POST /api/extract/excel |
| IP baseline | 200 requests / minute / IP | All routes (platform-wide) |
| Invalid API keys | 10 failed lookups / 15 min / IP | Brute-force protection on key auth |
Exceeding a limit returns 429 with a Retry-After header telling you how many seconds to wait. Monthly extraction volume is governed by your plan quota, not the rate limiter. Hitting that returns 402.
Frequently asked questions
Which plans include API access?
Pro and Team. API keys can only be created on those plans, and requests authenticated with an API key return 403 on Free and Starter. The Chrome extension and web dashboard are unaffected. They use session auth, not API keys.
How are API keys stored?
Keys are 64-character hexadecimal strings with a pm_ prefix. Only the SHA-256 hash is stored in our database. The raw key is shown exactly once at creation and cannot be recovered afterwards. If you lose it, revoke it and create a new one. You can have up to 10 active keys.
What are the rate limits?
10 extraction requests per minute on the email endpoint, 3 per minute on the file endpoints (PDF/Excel), per user. Exceeding a limit returns 429 with a Retry-After header. There is also a platform-wide baseline of 200 requests per minute per IP, and repeated invalid API-key attempts from one IP are blocked for 15 minutes.
How is the API different from the Gmail extension?
Same extraction engine, different front door. The Chrome extension reads the quote email you have open in Gmail and syncs results to Google Sheets. The API is for your own systems: POST the email subject, sender and body as JSON, get the same structured fields back. API requests also land in your dashboard and can fire webhooks.
Where do I get help?
Email support@procuremind.io. Include the extraction_id from a failed or unexpected response and we can look up exactly what happened.
Your first extraction is one POST away.
Create an account, grab an API key, and see structured quote data come back.
Start free