Before you begin
You need:- An Internal app API key (
sk-...). See Authentication. The flow uses thefiles:write,quotes:write,quotes:approve,orders:read,documents:read, andwebhooks:managescopes. - Net-terms invoicing on your account if you want to approve quotes through the API. Contact support to turn it on. Without it, you can still create quotes through the API and approve them in the Customer Portal.
- An HTTPS endpoint that can receive webhooks.
Choose an evaluation type
Setevaluation_type on the quote to one of these values:
Most employment and H-1B cases need a
diploma_evaluation. Licensing boards,
universities, and credit transfers usually need a course_by_course_evaluation.
If you’re not sure, add a question in notes and our team will confirm before
pricing the quote.
1
Register a webhook endpoint
Register your endpoint once and reuse it for every order. Subscribe to the
quote, order, and file events:The response contains the endpoint’s signing secret (
whsec_...). Store it
somewhere safe. You need it to verify signatures.2
Upload the candidate's documents
Upload each diploma, transcript, or mark sheet with the files API:Keep each
id. If your documents are already hosted somewhere, skip this step
and pass their URLs in document_urls when you create the quote.3
Create the quote
201 and the new quote in status requested:The API reference has the full list of
visa_type values.4
Wait for quote.ready
Our team reviews the documents and prices the quote. When it’s ready, the quote
moves to Check
awaiting_payment and your endpoint receives quote.ready:total_cents and items before you approve. If the quote is cancelled,
you receive quote.cancelled.5
Approve the quote
201) is the new order:quote.approved and order.created. If approval fails, the
API returns 422 with an error_code. See
Approving quotes for the full list.6
Track the order
The order sends an event each time its status changes:
Use
PUT /v1/orders/{id} to attach your own custom_reference or
custom_metadata to the order at any point.7
Download the report
Order events don’t include documents, so fetch the order when you receive
The order’s The URL expires after one hour. Download the file right away and store your own
copy.
order.completed:documents include the files you uploaded (document_role: "source")
and the deliverables. Evaluation reports have document_role set to
evaluation or course_evaluation. Request a download URL for each one:Put it together
This Express handler verifies each event, then approves quotes under a budget and downloads reports when orders complete. It uses theverifyFortisSignature
function from the webhooks guide.
Node.js
Deliveries can arrive out of order or more than once. Deduplicate on the
X-Fortis-Delivery header. When you need the current state, fetch the resource
from the API.Without webhooks
If you can’t receive webhooks, poll instead:GET /v1/quotes/{id}untilstatusisawaiting_payment.GET /v1/orders/{id}untilstatusiscompleted.