One-time send API reference

Updated

11 operations of the Fax for Agents API, from the OpenAPI document version 1.20.0, snapshot of 2026-11-13. The base URL is https://api.faxforagents.com/v1. This is one group of the full reference.

  • Creating a one-time order charges nothing and sends nothing.
  • The card of a one-time order is authorized at checkout and charged when the carrier confirms delivery.
  • The confirmation link of a one-time order works once, and a repeat by anyone else answers 409 link_used.

Operations

What is a one-time order?

One document to one fax number, paid by card. There is no wallet behind it and no top-up before it. The order moves through four steps: create, pay, confirm, send. Each step is one operation in this group, and the read of the order says which step comes next in next.

GET /v1/one-time-sends/config says whether one-time sends are open, and returns the card and the limits an order is priced and checked by. It takes no credential.

Who can create an order?

Anyone. POST /v1/one-time-sends needs no credential, as its description states. The body carries the text of the document, the destination in to and a sender_name for the cover sheet. accept_aup records that the sender accepts the acceptable use policy. Without a credential it also needs an email, where the confirmation link and the receipt go.

The answer carries the price, the page count and the status token. Nothing is charged and nothing is sent by this call. A live key with fax:send, or a signed-in session, may create an order for its organization in the same way.

What is the status token?

The credential of a person who has no account. Four operations accept it next to a key or a session: the read of the order, the checkout, the receipt and the resend. It travels as the header X-FFA-Order-Token or as ?t= in the address. It opens that one order and nothing else.

How is the order paid?

POST /v1/one-time-sends/{one_time_order_id}/checkout answers the hosted payment page of the order. The card is authorized there, not charged. It is charged when the carrier confirms delivery. A second call answers the same page while it can still be paid, and a new one after it expired.

An order whose aup_accepted is false needs {"accept_aup": true} in the body once, from the status token or a session. The person who pays accepts the policy, never a key.

Because it proves the sender's address. After the payment a confirmation link goes to the order's email. POST /v1/one-time-sends/{one_time_order_id}/confirm takes the token of that link and releases the fax. The link works once. A repeat by the same signed-in person answers the confirmed order again. Any other repeat answers 409 link_used and sends nothing.

POST /v1/one-time-sends/by-token lets the confirm page show what the link is for before the click. It reads and consumes nothing, and the token travels in the body so it stays out of the address. An older route with the token in the path is kept for pages loaded before 2026-11-12.

POST /v1/one-time-sends/{one_time_order_id}/resend-confirmation mails the link again, at most three times per order and once in ten minutes. Earlier links keep working.

Can an API key use a quote here?

Yes. POST /v1/one-time-sends/from-quote creates an order from a live quote the wallet does not cover. The quote supplies the document, the destination and the cover. The price is the card's one-time price, not the quote's. An API key needs what a wallet send of the quote needs: an approval_id, or a delegated policy that allows the send. Paying by card replaces neither. Without one the answer is 403 approval_required.

How do I read the outcome?

GET /v1/one-time-sends/{one_time_order_id} returns where the order stands, what to do next and the fax with its evidence. GET /v1/one-time-sends/{one_time_order_id}/receipt.pdf is the delivery receipt as a one-page PDF. It says charged only once the payment provider confirmed the capture, and it answers 409 while the fax has not ended. GET /v1/one-time-sends lists an organization's orders, newest first, with fax:read.

Each operation in detail

GET /v1/one-time-sends

List the organization's one-time orders, newest first

Credential: an API key or a signed-in session. Scope: fax:read.

Parameters

GET /v1/one-time-sends parameters
NameInTypeRequiredNotes
cursorquerystring or nullno
limitqueryintegerno Default 50.
statusquerystring (draft, checkout_open, authorized, awaiting_confirmation, released, capturing, canceling, captured, released_hold, expired, refused, settle_failed) or nullno

Responses

GET /v1/one-time-sends responses
StatusMeaning
200Successful Response
401No credential, or one that was not accepted: invalid_token for an API key, unauthenticated where a signed-in session is needed. error.details.reason says why a key was refused.
403The credential is valid and is not allowed to do this. scope_missing puts the scope in error.details.scope. Other codes are agent_forbidden and approval_required. A session can also meet csrf_invalid and reauth_required.
422A field failed validation: invalid_request, with one entry per field in error.details, or a code that names the rule.
429rate_limited. Retry-After and the RateLimit-* headers say when to try again.

Response fields

GET /v1/one-time-sends response fields
FieldTypeRequiredDescription
itemsarray of object OneTimeOrderyes
next_cursorstring or nullno

Example

curl https://api.faxforagents.com/v1/one-time-sends \
  -H "Authorization: Bearer ffa_test_..."

POST /v1/one-time-sends

Create a one-time order: one document to one fax number, priced from the card

No credential is needed. The answer carries the price, the page count and the status token; the next step is the checkout. A live key with fax:send or a signed-in session may create an order for its organization. Nothing is charged and nothing is sent by this call.

Credential: an API key or a signed-in session. Works without one too. Scope: fax:send.

Parameters

POST /v1/one-time-sends parameters
NameInTypeRequiredNotes
Idempotency-KeyheaderstringnoReplay the first successful response for the same request within 24 hours. Reusing the idempotency header with a different request returns 409 idempotency_key_conflict. Responses include Idempotent-Replayed: true on replay.

Request body application/json, required

The JSON form of an order: text only. A file (PDF, PNG, JPEG, TIFF) goes as ``multipart/form-data`` with the same field names and the part ``file``.

POST /v1/one-time-sends request body
FieldTypeRequiredDescription
accept_aupbooleanyesTrue: the sender accepts the acceptable use policy and the terms the config route names.
delete_after_sendbooleannoDelete the document and the transmitted copy the moment the fax ends in delivered, partial or failed. The order, the receipt and the carrier evidence stay; they hold no document content. A fax that ends unknown keeps the document until the carrier reports, or until the retention period ends. Default: keep the document for the retention period.
emailstring or nullnoWhere the confirmation link, the receipt and the evidence go. Required without a credential; a signed-in session uses its own address; a key may leave it out to use the organization's.
messagestring or nullno
sender_namestringyesPrinted on the cover sheet. 2 to 120 characters.
source_refstring or nullnoWhere the sender came from (a short tag, never a URL).
subjectstring or nullno
textstringyesThe document as plain text or Markdown.
text_formatstring (text, markdown)no
tostringyesThe destination fax number, E.164.
to_namestring or nullno

Request body multipart/form-data, required

The JSON form of an order: text only. A file (PDF, PNG, JPEG, TIFF) goes as ``multipart/form-data`` with the same field names and the part ``file``.

POST /v1/one-time-sends request body
FieldTypeRequiredDescription
accept_aupbooleanyesTrue: the sender accepts the acceptable use policy and the terms the config route names.
delete_after_sendbooleannoDelete the document and the transmitted copy the moment the fax ends in delivered, partial or failed. The order, the receipt and the carrier evidence stay; they hold no document content. A fax that ends unknown keeps the document until the carrier reports, or until the retention period ends. Default: keep the document for the retention period.
emailstring or nullnoWhere the confirmation link, the receipt and the evidence go. Required without a credential; a signed-in session uses its own address; a key may leave it out to use the organization's.
filestring (binary)noThe document: PDF, PNG, JPEG or TIFF. Send this or text, not both.
messagestring or nullno
sender_namestringyesPrinted on the cover sheet. 2 to 120 characters.
source_refstring or nullnoWhere the sender came from (a short tag, never a URL).
subjectstring or nullno
textstringnoThe document as plain text or Markdown.
text_formatstring (text, markdown)no
tostringyesThe destination fax number, E.164.
to_namestring or nullno

Responses

POST /v1/one-time-sends responses
StatusMeaning
201Successful Response
401No credential, or one that was not accepted: invalid_token for an API key, unauthenticated where a signed-in session is needed. error.details.reason says why a key was refused.
403The credential is valid and is not allowed to do this. scope_missing puts the scope in error.details.scope. Other codes are agent_forbidden and approval_required. A session can also meet csrf_invalid and reauth_required.
404not_found: no such resource for this credential. A resource of another organization answers the same.
409The resource is in a state that refuses the call, or the Idempotency-Key was used with a different request (idempotency_key_conflict). error.code names the state.
422A field failed validation: invalid_request, with one entry per field in error.details, or a code that names the rule.
429rate_limited. Retry-After and the RateLimit-* headers say when to try again.
503Something this call depends on is not available or not set up here, for example billing_unavailable or provider_unavailable. error.retryable says whether to send the same call again.

Response fields

POST /v1/one-time-sends response fields
FieldTypeRequiredDescription
amount_microintegeryes
aup_acceptedbooleannoWhether a person accepted the acceptable use policy and the terms for this order. False for an order a key created until the payer accepts on the order's page; the checkout needs it.
aup_versionstringyes
authorized_atstring or nullyes
capture_deadline_atstring or nullyes
captured_microintegeryes
cardobject OneTimeCard or nullyes
checkout_expires_atstring or nullyes
checkout_urlstring or nullyes
confirm_deadline_atstring or nullyes
confirm_mail_sent_atstring or nullyes
coverobject or nullyes
created_atstringyes
delete_after_sendbooleannoThe sender asked for the document and the transmitted copy to be deleted the moment the fax ends in delivered, partial or failed.
document_deletedbooleannoTrue once no copy of the document is held: it was deleted after the send, by the retention period or by its owner, or the order ended before it was released and the uploaded file was removed. The order, the fax and the carrier evidence stay; they hold no document content.
document_expires_atstring or nullnoWhen the retention period deletes the stored document. Null before the release and once the document is deleted.
document_idstring or nullyes
document_pagesintegeryes
document_sha256stringyes
emailstringyes
email_verifiedbooleanyes
environmentstring (live, test)yes
failure_codestring or nullyes
faxobject or nullnoThe fax job (the FaxJob shape) once the order was released; null before.
fax_job_idstring or nullyes
idstringyes
nextstring (checkout, confirm, wait, done)yes
priceobject OneTimePriceyes
queueobject OneTimeQueue or nullnoThe wait for a carrier line while the order has not ended and its fax is not on a line yet. Null for an ended order, a fax that is sending, and a test order.
quote_idstring or nullyes
refunded_microintegernoWhat was refunded to the card after the charge, in micro-units, as the ledger holds it. Zero when nothing was refunded. captured_micro stays what was charged.
released_atstring or nullyes
resend_allowed_atstring or nullnoWhen the confirmation mail may be asked for again; null when it may not.
routestringyes
sender_namestringyes
settled_atstring or nullyes
sourcestring (web, api, mcp)yes
statusstring (draft, checkout_open, authorized, awaiting_confirmation, released, capturing, canceling, captured, released_hold, expired, refused, settle_failed)yes
status_tokenstringyes
status_urlstringyes
tostringyes
updated_atstringyes
warningsarray of objectno

Example

curl https://api.faxforagents.com/v1/one-time-sends \
  -X POST \
  -H "Content-Type: application/json" \
  -d '{"sender_name":"example","to":"+15550000001","accept_aup":false,"text":"example"}'

POST /v1/one-time-sends/by-token

What a confirmation link is for, without using it

The confirm page reads this before the click, with the token in the body. Nothing is consumed by reading it, and nothing is changed: the call is a read that keeps the token out of the address. Idempotency-Key is accepted but ignored.

Credential: none.

Request body application/json, required

POST /v1/one-time-sends/by-token request body
FieldTypeRequiredDescription
tokenstringyesThe token of the link in the confirmation mail.

Responses

POST /v1/one-time-sends/by-token responses
StatusMeaning
200Successful Response
404not_found: no such resource for this credential. A resource of another organization answers the same.
422A field failed validation: invalid_request, with one entry per field in error.details, or a code that names the rule.
429rate_limited. Retry-After and the RateLimit-* headers say when to try again.

Response fields

POST /v1/one-time-sends/by-token response fields
FieldTypeRequiredDescription
amount_microintegeryes
confirm_deadline_atstring or nullyes
currencystringyes
document_pagesintegeryes
emailstringyes
order_idstringyes
sender_namestringyes
statestring (ok, link_used, link_expired)yes
statusstring (draft, checkout_open, authorized, awaiting_confirmation, released, capturing, canceling, captured, released_hold, expired, refused, settle_failed)yes
tostringyes

Example

curl https://api.faxforagents.com/v1/one-time-sends/by-token \
  -X POST \
  -H "Content-Type: application/json" \
  -d '{"token":"example"}'

GET /v1/one-time-sends/by-token/{token}

What a confirmation link is for, without using it (token in the path)

Kept for pages loaded before 2026-11-12. The token in a path reaches access logs, so new callers post it to /v1/one-time-sends/by-token instead. Nothing is consumed by reading it.

Credential: none.

Parameters

GET /v1/one-time-sends/by-token/{token} parameters
NameInTypeRequiredNotes
tokenpathstringyes

Responses

GET /v1/one-time-sends/by-token/{token} responses
StatusMeaning
200Successful Response
404not_found: no such resource for this credential. A resource of another organization answers the same.
422A field failed validation: invalid_request, with one entry per field in error.details, or a code that names the rule.
429rate_limited. Retry-After and the RateLimit-* headers say when to try again.

Response fields

GET /v1/one-time-sends/by-token/{token} response fields
FieldTypeRequiredDescription
amount_microintegeryes
confirm_deadline_atstring or nullyes
currencystringyes
document_pagesintegeryes
emailstringyes
order_idstringyes
sender_namestringyes
statestring (ok, link_used, link_expired)yes
statusstring (draft, checkout_open, authorized, awaiting_confirmation, released, capturing, canceling, captured, released_hold, expired, refused, settle_failed)yes
tostringyes

Example

curl https://api.faxforagents.com/v1/one-time-sends/by-token/TOKEN

GET /v1/one-time-sends/config

Whether one-time sends are open here, and the card and limits an order is priced and checked by

Credential: none.

Responses

GET /v1/one-time-sends/config responses
StatusMeaning
200Successful Response
429rate_limited. Retry-After and the RateLimit-* headers say when to try again.

Response fields

GET /v1/one-time-sends/config response fields
FieldTypeRequiredDescription
aup_urlstringyes
aup_versionstringyes
currencystringyes
effective_fromstringyes
enabledbooleanyes
formatsarray of stringyes
max_document_pagesintegeryes
max_text_charsintegeryes
max_upload_bytesintegeryes
price_versionstringyes
queueobject OneTimeQueue or nullnoThe wait a fax ordered now would face for a carrier line. Null when one-time sends are closed here or the carrier has no line limit.
reasonstring or nullno
routesobjectyes
terms_urlstringyes

Example

curl https://api.faxforagents.com/v1/one-time-sends/config

POST /v1/one-time-sends/from-quote

Create a one-time order from a live quote the wallet does not cover

The quote supplies the document, the destination and the cover; the price is the card's one-time price, not the quote's. The quote then belongs to the order. Needs a live key with fax:send. A key needs what a wallet send of the quote needs: approval_id, or a delegated policy that allows the send. Paying by card replaces neither; without one the answer is 403 approval_required.

Credential: an API key or a signed-in session. Scope: fax:send.

Parameters

POST /v1/one-time-sends/from-quote parameters
NameInTypeRequiredNotes
Idempotency-KeyheaderstringnoReplay the first successful response for the same request within 24 hours. Reusing the idempotency header with a different request returns 409 idempotency_key_conflict. Responses include Idempotent-Replayed: true on replay.

Request body application/json, required

POST /v1/one-time-sends/from-quote request body
FieldTypeRequiredDescription
accept_aupbooleannoA session sends true: the signed-in person accepts the acceptable use policy and the terms. A key's value is not recorded: the person who pays accepts on the order's page.
approval_idstring or nullnoAn approved, unused approval request for this quote (POST /v1/approval-requests). A key needs it unless a delegated policy allows the send. A session needs none.
delete_after_sendboolean or nullnoDelete the document and the transmitted copy the moment the fax ends in delivered, partial or failed. The order, the receipt and the carrier evidence stay; they hold no document content. A fax that ends unknown keeps the document until the carrier reports, or until the retention period ends. Left out, the quote's own delete_after_send applies.
emailstring or nullno
quote_idstringyes
sender_namestringyesPrinted on the cover sheet. 2 to 120 characters.
source_refstring or nullno

Responses

POST /v1/one-time-sends/from-quote responses
StatusMeaning
201Successful Response
401No credential, or one that was not accepted: invalid_token for an API key, unauthenticated where a signed-in session is needed. error.details.reason says why a key was refused.
403The credential is valid and is not allowed to do this. scope_missing puts the scope in error.details.scope. Other codes are agent_forbidden and approval_required. A session can also meet csrf_invalid and reauth_required.
404not_found: no such resource for this credential. A resource of another organization answers the same.
409The resource is in a state that refuses the call, or the Idempotency-Key was used with a different request (idempotency_key_conflict). error.code names the state.
422A field failed validation: invalid_request, with one entry per field in error.details, or a code that names the rule.
429rate_limited. Retry-After and the RateLimit-* headers say when to try again.
503Something this call depends on is not available or not set up here, for example billing_unavailable or provider_unavailable. error.retryable says whether to send the same call again.

Response fields

POST /v1/one-time-sends/from-quote response fields
FieldTypeRequiredDescription
amount_microintegeryes
aup_acceptedbooleannoWhether a person accepted the acceptable use policy and the terms for this order. False for an order a key created until the payer accepts on the order's page; the checkout needs it.
aup_versionstringyes
authorized_atstring or nullyes
capture_deadline_atstring or nullyes
captured_microintegeryes
cardobject OneTimeCard or nullyes
checkout_expires_atstring or nullyes
checkout_urlstring or nullyes
confirm_deadline_atstring or nullyes
confirm_mail_sent_atstring or nullyes
coverobject or nullyes
created_atstringyes
delete_after_sendbooleannoThe sender asked for the document and the transmitted copy to be deleted the moment the fax ends in delivered, partial or failed.
document_deletedbooleannoTrue once no copy of the document is held: it was deleted after the send, by the retention period or by its owner, or the order ended before it was released and the uploaded file was removed. The order, the fax and the carrier evidence stay; they hold no document content.
document_expires_atstring or nullnoWhen the retention period deletes the stored document. Null before the release and once the document is deleted.
document_idstring or nullyes
document_pagesintegeryes
document_sha256stringyes
emailstringyes
email_verifiedbooleanyes
environmentstring (live, test)yes
failure_codestring or nullyes
faxobject or nullnoThe fax job (the FaxJob shape) once the order was released; null before.
fax_job_idstring or nullyes
idstringyes
nextstring (checkout, confirm, wait, done)yes
priceobject OneTimePriceyes
queueobject OneTimeQueue or nullnoThe wait for a carrier line while the order has not ended and its fax is not on a line yet. Null for an ended order, a fax that is sending, and a test order.
quote_idstring or nullyes
refunded_microintegernoWhat was refunded to the card after the charge, in micro-units, as the ledger holds it. Zero when nothing was refunded. captured_micro stays what was charged.
released_atstring or nullyes
resend_allowed_atstring or nullnoWhen the confirmation mail may be asked for again; null when it may not.
routestringyes
sender_namestringyes
settled_atstring or nullyes
sourcestring (web, api, mcp)yes
statusstring (draft, checkout_open, authorized, awaiting_confirmation, released, capturing, canceling, captured, released_hold, expired, refused, settle_failed)yes
status_tokenstringyes
status_urlstringyes
tostringyes
updated_atstringyes
warningsarray of objectno

Example

curl https://api.faxforagents.com/v1/one-time-sends/from-quote \
  -X POST \
  -H "Authorization: Bearer ffa_test_..." \
  -H "Content-Type: application/json" \
  -d '{"quote_id":"quote_example","sender_name":"example"}'

GET /v1/one-time-sends/{one_time_order_id}

Read a one-time order: where it stands, what to do next, and the fax with its evidence

Credential: an API key, a signed-in session or the status token of the order. Scope: fax:read.

Parameters

GET /v1/one-time-sends/{one_time_order_id} parameters
NameInTypeRequiredNotes
one_time_order_idpathstringyes
tquerystring or nullnoThe status token, when no header carries it.
X-FFA-Order-TokenheaderstringnoThe status token of the order, for a caller without a key or a session.

Responses

GET /v1/one-time-sends/{one_time_order_id} responses
StatusMeaning
200Successful Response
401No credential, or one that was not accepted: invalid_token for an API key, unauthenticated where a signed-in session is needed. error.details.reason says why a key was refused.
403The credential is valid and is not allowed to do this. scope_missing puts the scope in error.details.scope. Other codes are agent_forbidden and approval_required. A session can also meet csrf_invalid and reauth_required.
404not_found: no such resource for this credential. A resource of another organization answers the same.
422A field failed validation: invalid_request, with one entry per field in error.details, or a code that names the rule.
429rate_limited. Retry-After and the RateLimit-* headers say when to try again.

Response fields

GET /v1/one-time-sends/{one_time_order_id} response fields
FieldTypeRequiredDescription
amount_microintegeryes
aup_acceptedbooleannoWhether a person accepted the acceptable use policy and the terms for this order. False for an order a key created until the payer accepts on the order's page; the checkout needs it.
aup_versionstringyes
authorized_atstring or nullyes
capture_deadline_atstring or nullyes
captured_microintegeryes
cardobject OneTimeCard or nullyes
checkout_expires_atstring or nullyes
checkout_urlstring or nullyes
confirm_deadline_atstring or nullyes
confirm_mail_sent_atstring or nullyes
coverobject or nullyes
created_atstringyes
delete_after_sendbooleannoThe sender asked for the document and the transmitted copy to be deleted the moment the fax ends in delivered, partial or failed.
document_deletedbooleannoTrue once no copy of the document is held: it was deleted after the send, by the retention period or by its owner, or the order ended before it was released and the uploaded file was removed. The order, the fax and the carrier evidence stay; they hold no document content.
document_expires_atstring or nullnoWhen the retention period deletes the stored document. Null before the release and once the document is deleted.
document_idstring or nullyes
document_pagesintegeryes
document_sha256stringyes
emailstringyes
email_verifiedbooleanyes
environmentstring (live, test)yes
failure_codestring or nullyes
faxobject or nullnoThe fax job (the FaxJob shape) once the order was released; null before.
fax_job_idstring or nullyes
idstringyes
nextstring (checkout, confirm, wait, done)yes
priceobject OneTimePriceyes
queueobject OneTimeQueue or nullnoThe wait for a carrier line while the order has not ended and its fax is not on a line yet. Null for an ended order, a fax that is sending, and a test order.
quote_idstring or nullyes
refunded_microintegernoWhat was refunded to the card after the charge, in micro-units, as the ledger holds it. Zero when nothing was refunded. captured_micro stays what was charged.
released_atstring or nullyes
resend_allowed_atstring or nullnoWhen the confirmation mail may be asked for again; null when it may not.
routestringyes
sender_namestringyes
settled_atstring or nullyes
sourcestring (web, api, mcp)yes
statusstring (draft, checkout_open, authorized, awaiting_confirmation, released, capturing, canceling, captured, released_hold, expired, refused, settle_failed)yes
status_urlstring or nullnoThe order's page for the person who pays or confirms, with a fresh status token. Present on a read by a key or session of the order's organization while the order is not done.
tostringyes
updated_atstringyes
warningsarray of objectno

Example

curl https://api.faxforagents.com/v1/one-time-sends/ONE_TIME_ORDER_ID \
  -H "Authorization: Bearer ffa_test_..."

POST /v1/one-time-sends/{one_time_order_id}/checkout

Open the card payment of a one-time order

Answers the hosted payment page of the order. The card is authorized there, not charged: it is charged when the carrier confirms delivery. A second call answers the same page while it can still be paid, and a new one after it expired. An order whose aup_accepted is false needs {"accept_aup": true} in the body once, from the status token or a session: the person who pays accepts the policy, never a key.

Credential: an API key, a signed-in session or the status token of the order. Scope: fax:send.

Parameters

POST /v1/one-time-sends/{one_time_order_id}/checkout parameters
NameInTypeRequiredNotes
one_time_order_idpathstringyes
tquerystring or nullnoThe status token, when no header carries it.
Idempotency-KeyheaderstringnoReplay the first successful response for the same request within 24 hours. Reusing the idempotency header with a different request returns 409 idempotency_key_conflict. Responses include Idempotent-Replayed: true on replay.
X-FFA-Order-TokenheaderstringnoThe status token of the order, for a caller without a key or a session.

Request body application/json

POST /v1/one-time-sends/{one_time_order_id}/checkout request body
FieldTypeRequiredDescription
accept_aupbooleannoTrue: the person who pays accepts the acceptable use policy and the terms. Needed once, for an order whose aup_accepted is false, and taken only from the status token or a session.

Responses

POST /v1/one-time-sends/{one_time_order_id}/checkout responses
StatusMeaning
201Successful Response
401No credential, or one that was not accepted: invalid_token for an API key, unauthenticated where a signed-in session is needed. error.details.reason says why a key was refused.
402The prepaid balance does not cover the call: insufficient_balance.
403The credential is valid and is not allowed to do this. scope_missing puts the scope in error.details.scope. Other codes are agent_forbidden and approval_required. A session can also meet csrf_invalid and reauth_required.
404not_found: no such resource for this credential. A resource of another organization answers the same.
409The resource is in a state that refuses the call, or the Idempotency-Key was used with a different request (idempotency_key_conflict). error.code names the state.
422A field failed validation: invalid_request, with one entry per field in error.details, or a code that names the rule.
429rate_limited. Retry-After and the RateLimit-* headers say when to try again.
503Something this call depends on is not available or not set up here, for example billing_unavailable or provider_unavailable. error.retryable says whether to send the same call again.

Response fields

POST /v1/one-time-sends/{one_time_order_id}/checkout response fields
FieldTypeRequiredDescription
amount_microintegeryes
checkout_urlstringyes
currencystringyes
expires_atstringyes
order_idstringyes

Example

curl https://api.faxforagents.com/v1/one-time-sends/ONE_TIME_ORDER_ID/checkout \
  -X POST \
  -H "Authorization: Bearer ffa_test_..."

POST /v1/one-time-sends/{one_time_order_id}/confirm

Confirm a one-time order with the token of the mailed link: the fax is released

Proves the sender's address and releases the fax. In a browser without a session it also signs the payer in and sets the session cookies. Idempotency-Key is accepted but ignored: the link works once. A repeat by the same signed-in person answers the confirmed order again; any other repeat answers 409 link_used and sends nothing.

Credential: none.

Parameters

POST /v1/one-time-sends/{one_time_order_id}/confirm parameters
NameInTypeRequiredNotes
one_time_order_idpathstringyes

Request body application/json, required

POST /v1/one-time-sends/{one_time_order_id}/confirm request body
FieldTypeRequiredDescription
tokenstringyesThe token of the link in the confirmation mail.

Responses

POST /v1/one-time-sends/{one_time_order_id}/confirm responses
StatusMeaning
200Successful Response
404not_found: no such resource for this credential. A resource of another organization answers the same.
409The resource is in a state that refuses the call, or the Idempotency-Key was used with a different request (idempotency_key_conflict). error.code names the state.
422A field failed validation: invalid_request, with one entry per field in error.details, or a code that names the rule.
429rate_limited. Retry-After and the RateLimit-* headers say when to try again.
503Something this call depends on is not available or not set up here, for example billing_unavailable or provider_unavailable. error.retryable says whether to send the same call again.

Response fields

POST /v1/one-time-sends/{one_time_order_id}/confirm response fields
FieldTypeRequiredDescription
meobject or nullno
orderobject OneTimeOrderyesOne order of the one-time send. ``next`` is what the caller does now: ``checkout`` (open the payment), ``confirm`` (the payer clicks the link in the mail), ``wait`` (nothing to do; read again) or ``done``. Money is integer micro-USD. ``captured_micro`` is what the card was charged, written only once the payment provider confirmed it. ``fax`` is the fax job once the order was released, with the carrier's evidence once it has any.
signed_inbooleanyes

Example

curl https://api.faxforagents.com/v1/one-time-sends/ONE_TIME_ORDER_ID/confirm \
  -X POST \
  -H "Content-Type: application/json" \
  -d '{"token":"example"}'

GET /v1/one-time-sends/{one_time_order_id}/receipt.pdf

The receipt of a one-time order's fax as a one-page PDF

The delivery receipt of the order's fax: the state, the pages, the document hash, the carrier's evidence as it was reported, and what became of the card. It says charged only once the payment provider confirmed the capture. A key or session of the order's organization may read it, and so may the status token, as the header or as ?t=. 409 conflict while the fax has not ended or the order has no fax.

Credential: an API key, a signed-in session or the status token of the order. Scope: fax:read.

Parameters

GET /v1/one-time-sends/{one_time_order_id}/receipt.pdf parameters
NameInTypeRequiredNotes
one_time_order_idpathstringyes
tquerystring or nullnoThe status token, when no header carries it.
X-FFA-Order-TokenheaderstringnoThe status token of the order, for a caller without a key or a session.

Responses

GET /v1/one-time-sends/{one_time_order_id}/receipt.pdf responses
StatusMeaning
200The receipt as a PDF
401No credential, or one that was not accepted: invalid_token for an API key, unauthenticated where a signed-in session is needed. error.details.reason says why a key was refused.
403The credential is valid and is not allowed to do this. scope_missing puts the scope in error.details.scope. Other codes are agent_forbidden and approval_required. A session can also meet csrf_invalid and reauth_required.
404not_found: no such resource for this credential. A resource of another organization answers the same.
409The resource is in a state that refuses the call, or the Idempotency-Key was used with a different request (idempotency_key_conflict). error.code names the state.
422A field failed validation: invalid_request, with one entry per field in error.details, or a code that names the rule.
429rate_limited. Retry-After and the RateLimit-* headers say when to try again.

Example

curl https://api.faxforagents.com/v1/one-time-sends/ONE_TIME_ORDER_ID/receipt.pdf \
  -H "Authorization: Bearer ffa_test_..."

POST /v1/one-time-sends/{one_time_order_id}/resend-confirmation

Mail the confirmation link of a one-time order again

At most three times per order and once in ten minutes. The earlier links keep working.

Credential: an API key, a signed-in session or the status token of the order. Scope: fax:send.

Parameters

POST /v1/one-time-sends/{one_time_order_id}/resend-confirmation parameters
NameInTypeRequiredNotes
one_time_order_idpathstringyes
tquerystring or nullnoThe status token, when no header carries it.
Idempotency-KeyheaderstringnoReplay the first successful response for the same request within 24 hours. Reusing the idempotency header with a different request returns 409 idempotency_key_conflict. Responses include Idempotent-Replayed: true on replay.
X-FFA-Order-TokenheaderstringnoThe status token of the order, for a caller without a key or a session.

Responses

POST /v1/one-time-sends/{one_time_order_id}/resend-confirmation responses
StatusMeaning
200Successful Response
401No credential, or one that was not accepted: invalid_token for an API key, unauthenticated where a signed-in session is needed. error.details.reason says why a key was refused.
403The credential is valid and is not allowed to do this. scope_missing puts the scope in error.details.scope. Other codes are agent_forbidden and approval_required. A session can also meet csrf_invalid and reauth_required.
404not_found: no such resource for this credential. A resource of another organization answers the same.
409The resource is in a state that refuses the call, or the Idempotency-Key was used with a different request (idempotency_key_conflict). error.code names the state.
422A field failed validation: invalid_request, with one entry per field in error.details, or a code that names the rule.
429rate_limited. Retry-After and the RateLimit-* headers say when to try again.
503Something this call depends on is not available or not set up here, for example billing_unavailable or provider_unavailable. error.retryable says whether to send the same call again.

Response fields

POST /v1/one-time-sends/{one_time_order_id}/resend-confirmation response fields
FieldTypeRequiredDescription
amount_microintegeryes
aup_acceptedbooleannoWhether a person accepted the acceptable use policy and the terms for this order. False for an order a key created until the payer accepts on the order's page; the checkout needs it.
aup_versionstringyes
authorized_atstring or nullyes
capture_deadline_atstring or nullyes
captured_microintegeryes
cardobject OneTimeCard or nullyes
checkout_expires_atstring or nullyes
checkout_urlstring or nullyes
confirm_deadline_atstring or nullyes
confirm_mail_sent_atstring or nullyes
coverobject or nullyes
created_atstringyes
delete_after_sendbooleannoThe sender asked for the document and the transmitted copy to be deleted the moment the fax ends in delivered, partial or failed.
document_deletedbooleannoTrue once no copy of the document is held: it was deleted after the send, by the retention period or by its owner, or the order ended before it was released and the uploaded file was removed. The order, the fax and the carrier evidence stay; they hold no document content.
document_expires_atstring or nullnoWhen the retention period deletes the stored document. Null before the release and once the document is deleted.
document_idstring or nullyes
document_pagesintegeryes
document_sha256stringyes
emailstringyes
email_verifiedbooleanyes
environmentstring (live, test)yes
failure_codestring or nullyes
faxobject or nullnoThe fax job (the FaxJob shape) once the order was released; null before.
fax_job_idstring or nullyes
idstringyes
nextstring (checkout, confirm, wait, done)yes
priceobject OneTimePriceyes
queueobject OneTimeQueue or nullnoThe wait for a carrier line while the order has not ended and its fax is not on a line yet. Null for an ended order, a fax that is sending, and a test order.
quote_idstring or nullyes
refunded_microintegernoWhat was refunded to the card after the charge, in micro-units, as the ledger holds it. Zero when nothing was refunded. captured_micro stays what was charged.
released_atstring or nullyes
resend_allowed_atstring or nullnoWhen the confirmation mail may be asked for again; null when it may not.
routestringyes
sender_namestringyes
settled_atstring or nullyes
sourcestring (web, api, mcp)yes
statusstring (draft, checkout_open, authorized, awaiting_confirmation, released, capturing, canceling, captured, released_hold, expired, refused, settle_failed)yes
status_urlstring or nullnoThe order's page for the person who pays or confirms, with a fresh status token. Present on a read by a key or session of the order's organization while the order is not done.
tostringyes
updated_atstringyes
warningsarray of objectno

Example

curl https://api.faxforagents.com/v1/one-time-sends/ONE_TIME_ORDER_ID/resend-confirmation \
  -X POST \
  -H "Authorization: Bearer ffa_test_..."