Limits
Developer API page limits, processing deadlines, and retry/retention windows.
Your free statement
Free includes one statement across app uploads and inbound email. Concurrent uploads share that allowance, and deleting a statement does not reset it. Email attachments beyond the allowance wait for an upgrade. Retrying an admitted attachment recovers the same document.
Available bookkeeping plans
Free, Catch-Up ($599 per tax year for 12 months of access with a 30-day money-back guarantee), and Autopilot ($59/month with a 30-day money-back guarantee) are offered at launch. There is no free trial. Catch-Up includes up to 3,000 pages per purchased tax year for one business. Both paid plans have a 30-day money-back guarantee.
GET /app/api/billing/plans lists the available plans. Business is omitted while sales are disabled. POST /app/api/billing/checkout returns 409 BUSINESS_PLAN_UNAVAILABLE for Business while disabled. Existing subscriptions keep their entitlements.
GET /app/api/billing/subscription returns the subscription's actual Stripe recurring_price and next_charge from the outstanding invoice's earliest scheduled retry, or the upcoming invoice when no open balance exists. Amounts are in the currency's Stripe minor units. Existing subscriptions keep their Stripe price. Discounts, credits and usage can change the next charge. Outstanding amounts use the remaining balance. An outstanding invoice without a scheduled retry has a null date. Unavailable amounts are null. Billing displays these amounts; the catalog describes new purchases. refund_eligibility supplies Autopilot and Catch-Up refund actions independently of the current plan, including each payment ID, settlement-based deadline and whether review by hand is required. Autopilot is null when ineligible or unavailable. Catch-Up is empty when none are eligible and null when payment evidence is unavailable. Fully refunded payments are omitted. Previously accepted automatic requests remain retryable after the deadline. Reading status does not reserve a refund; the refund request rechecks eligibility. This session-only endpoint is not exposed through integrations or MCP.
QuickBooks CSV, Xero CSV, and OFX use the same consumer entitlement or usable page-credit gate as other document exports. They count as accountant deliverables in the app and Developer API. While an automatic refund is pending, paid downloads in that business pause until it completes. Paid download attempts return 409 EXPORT_LOCKED during this pause. Failed or canceled refunds release this lock. ZIP downloads always include your own raw data. Reports for years without current access are omitted, and only included report years count as delivery. Raw extraction and original files do not count.
Request a Catch-Up or Autopilot first-charge refund from Billing within 30 days of payment settlement. The first eligible account or card request is automatic and in full before deliverable downloads or accountant share-link creation. Any paid deliverable released after settlement counts, regardless of tax year, across the business and its account or card guarantee scope. Payments before complete delivery records began require review. After delivery, or a previous account or card request, support reviews it under the same guarantee. Autopilot eligibility follows the settled payment even after subscription cancellation. A full Autopilot refund cancels that subscription. If Stripe fails or cancels the refund, Billing shows that it needs a quick manual check, alerts support, and ends the pending download pause. This session-only billing action is not available through the Developer API or MCP.
Autopilot includes 1,500 pages a month for a flat $59/month. More pages come from optional one-time page packs. After monthly included pages, Catch-Up pages, and pack credits are used, uploads return 402 QUOTA_EXCEEDED until more pages are available. Each paid Catch-Up year adds 3,000 pages that do not reset monthly, including when you have Autopilot. Pages use your monthly allowance first, then your remaining Catch-Up pages, then page packs. Refunding a year removes its 3,000 pages; pages already used stay used. AppSumo codes do not increase an active Autopilot subscription's monthly page allowance.
Business keeps its 5,000 included pages and metered overage at $15 per started block of 1,000 pages after monthly included pages, Catch-Up pages, and pack credits are used. Developer API usage follows the account's plan.
GET /v1/usage and MCP get_usage return pages_included_used for the monthly allocation and pages_catchup for pages covered by Catch-Up this period. catchup_pages_total, catchup_pages_used, and catchup_pages_remaining show capacity, consumption, and unused pages for active, unexpired purchases. Historical consumption stays in the usage ledger. Pending pages reserve capacity but are not billed until processing succeeds.
Catch-Up lasts 12 months from payment settlement for one business and one tax year, with up to 3,000 pages. At expiry, unused pages expire and that year locks for uploads, processing, edits, My year, reports, exports, downloads and accountant share links. An active Autopilot subscription covering the year or a Catch-Up repurchase restores access. A repurchase starts a fresh 12 months and 3,000 pages. Files already downloaded remain yours. Usage responses include catchup_purchases with expires_at; Billing, My year and the report show the date and a warning during the final 30 days. A won dispute restores the original term; refunds do not restore access.
Page packs and Developer API pages
Page pack checkout reuses an open checkout for the same pack size when you retry. After payment completes, you can buy another pack.
Every account starts with a free monthly page allotment for the API. Need more? Buy a page pack any time, used automatically after monthly included pages and any remaining Catch-Up pages:
| Pack | Price |
|---|---|
| 100 pages | $9 one-time |
| 500 pages | $29 one-time |
| 2,000 pages | $79 one-time |
Page pack credits stay usable for 12 months from purchase. Autopilot uses these same packs after its 1,500 monthly included pages and any remaining Catch-Up pages.
AppSumo 12-month plan
Each AppSumo code adds 300 pages per month for 12 months from redemption, and up to 5 codes can be redeemed on one account (300 to 1,500 pages/month), replacing the free monthly page allotment. Codes are redeemed while signed in, at /redeem.
Processing deadlines and the fallback extractor
- Every document reaches a terminal state (
succeeded,partial,needs_revieworfailed) within 10 minutes of upload. - Documents are normally processed by our own primary extraction servers. If those servers are unavailable (their heartbeat has gone stale for over 3 minutes), the document is automatically routed to a fallback extractor running on Cloudflare Workers AI, our own hosting provider, instead of being left waiting. A result always states which one actually produced it.
- If nothing produces a terminal result before the 10-minute deadline, the document is marked
failedwith reasonDEADLINE_EXCEEDED, never left inprocessingindefinitely.
Image size limits
A single-frame PNG, WebP, or TIFF upload is limited to 50 megapixels (width × height). These formats have no safe way to decode only part of a large image, so a frame over that limit is rejected with IMAGE_DIMENSIONS_TOO_LARGE (413). Resize it, or send it as a JPEG or PDF instead.
A JPEG gets a much higher limit: 3,200 megapixels. JPEG supports a scaled decode at half, quarter, or eighth resolution, so an ordinary 108MP or 200MP photo from a phone camera is accepted and processed at a reduced resolution rather than rejected. Only a JPEG whose dimensions still exceed the limit even at eighth resolution is rejected.
A PDF's page geometry isn't checked against a pixel limit at upload time; the 500-page-per-document limit above still applies.
Webhook retries
A delivery that doesn't get a 2xx response is retried up to 5 times, with backoff: 1 minute, 5 minutes, 30 minutes, 2 hours, then 12 hours.
Idempotency
An Idempotency-Key header on POST /v1/documents is honored for 24 hours: a retried request with the same key returns the original response instead of creating a second document.
Rate limits
Enforced per organization, on a rolling one-minute window. Exceeding either one returns 429 with a Retry-After header telling you how many seconds to wait.
- Uploading a document (
POST /v1/documents): 60 requests per minute. - Every other endpoint (listing and fetching documents, schemas, webhooks, usage): 300 requests per minute.
Upload size
A single file must be 25 MB or smaller and no more than 500 pages, whether uploaded directly, sent by email, or fetched by the MCP server's extract_document tool. A file over either limit is rejected with 413.