Lifecycle
POST /v1/quotescreates a quote with statusrequested, together with the documents you attach.- Our team reviews and prices it. The quote becomes
awaiting_paymentand aquote.readywebhook fires — the quote now carries priced lineitemsand atotal. POST /v1/quotes/{id}/approveapproves it. The quote becomesapproved, an order is created (webhooksquote.approvedandorder.created), and the order is billed to your account’s open invoice.- The order progresses through
in_progress→ready_for_review→completed, each firing a webhook. Completed deliverables are available viaGET /v1/documents/{id}/download.
Creating quotes
The main request fields (see the API reference for the full schema):quote_type—academic_evaluation,expert_opinion_letter, ortranslation, plus its type-specific fields (evaluation_type,expert_letter_type,source_language).- Documents —
document_ids(files staged via the files API), and/ordocument_urls(public URLs we download server-side). Up to 50 combined. candidate— the person the evaluation concerns.turnaround,reference,notes,cc_emails,team.
Approving quotes
Approval requires net-terms invoicing on your account: the order is added to your open Fortis invoice, which is closed and sent on your billing cadence. No card payment happens in the API. Contact support to enable invoicing. A quote can only be approved while it isawaiting_payment. Failures return
422 with an error_code:
Approval is race-safe: concurrent approve calls result in exactly one order —
subsequent calls return
quote_not_awaiting_payment.
Custom metadata
PUT /v1/orders/{id} lets you attach your own identifiers to an order:
custom_reference (a string shown alongside the order) and custom_metadata
(up to 64 key-value pairs, merged per key; set a key to null to remove it).