Check the balance
Requires balance:read.
curl -sS \
-H "Authorization: Bearer ${EDWYNA_API_KEY}" \
https://edwyna.com/v1/balanceAPI documentation
Edwyna is a JSON API for individual and transactional faxing. Prepare and validate a PDF first; charge and send it only after reviewing the returned destination and price.
Edwyna’s production REST API and remote MCP server are available for individual and transactional faxes. MCP clients connect through OAuth; REST clients use a narrowly scoped API key.
Compatible AI clients
In an MCP-compatible client, add https://edwyna.com/mcp as a remote Streamable HTTP server. The client discovers Edwyna’s sign-in and permissions flow automatically. Sign in to an existing verified Edwyna account—or create and verify one—then approve the requested permissions. You do not copy an Edwyna API key into the AI client.
The client can then discover seven focused tools for checking price and balance, preparing a PDF, sending only after authorization, checking delivery, listing recent faxes, and optionally retrieving the transmitted PDF. Preparing and sending remain separate operations: prepare_fax does not charge or send; send_fax deducts $4 and communicates externally.
MCP resources: server metadata · authorization discovery
REST API quick start
Create an account, verify its email, add prepaid credit, and create an API key. Production keys begin with edwyna_live_; test keys cannot authenticate to production. Grant only the scopes the software needs. Store the secret in a secret manager or protected environment variable named EDWYNA_API_KEY; never put it in a prompt, PDF, URL, or source file.
Requires balance:read.
curl -sS \
-H "Authorization: Bearer ${EDWYNA_API_KEY}" \
https://edwyna.com/v1/balanceRequires fax:prepare and enough available Edwyna credit to cover the quote (currently at least $4). The request waits for isolated validation: success returns a ready fax, while rejection returns an error without creating a fax. It does not charge or send, and there is no validation-status polling step. Preparation attempts and active drafts are rate-limited.
curl -sS \
-H "Authorization: Bearer ${EDWYNA_API_KEY}" \
-F destination_country=US \
-F recipient_name="Recipient name" \
-F recipient_fax="503-555-1212" \
-F sender_name="Sender name" \
-F sender_email="sender@example.com" \
-F sender_phone="503-555-0100" \
-F client_reference="your-reference" \
-F document=@/path/to/document.pdf \
https://edwyna.com/v1/fax-draftsPresent the normalized fax number, page count, SHA-256 fingerprint, and exact price to the person authorizing the fax. Retain the returned fax_id. Quotes expire after 30 minutes.
{
"fax_id": "FAX_ID",
"status": "ready",
"financial_status": "not_charged",
"recipient": {"fax": "+15035551212", "country": "US"},
"document": {"pages": 1, "sha256": "..."},
"quote": {"price": {"amount_cents": 400, "display": "$4.00"}}
}Requires fax:send. This is the consequential request: it deducts $4 and queues an external fax. Use a new idempotency key of 16–255 characters for this intended fax.
curl -sS -X POST \
-H "Authorization: Bearer ${EDWYNA_API_KEY}" \
-H "Idempotency-Key: YOUR_UNIQUE_SEND_KEY" \
https://edwyna.com/v1/fax-drafts/FAX_ID/sendRequires fax:read. Poll responsibly until the status is delivered or failed. Delivery commonly takes 5–10 minutes and can take up to 45 minutes.
curl -sS \
-H "Authorization: Bearer ${EDWYNA_API_KEY}" \
https://edwyna.com/v1/faxes/FAX_IDThis optional download is available after the status is delivered. It requires fax:read and returns the fax backend’s PDF representation of the pages Edwyna submitted. It is not proof of exactly what the receiving machine printed.
curl -sS \
-H "Authorization: Bearer ${EDWYNA_API_KEY}" \
--output edwyna-transmitted-FAX_ID.pdf \
https://edwyna.com/v1/faxes/FAX_ID/transmitted-documentInstructions for AI agents
fax_id and check status. Never describe ready, queued, submitted, or transmitting as delivered.Machine-readable resources: OpenAPI 3.1 contract · concise agent instructions · MCP server metadata
Reference
| Method | Path | Scope | Effect |
|---|---|---|---|
GET | /v1/pricing?destination_country=US | Any active key | Returns authoritative price and page limit. |
GET | /v1/balance | balance:read | Returns available prepaid credit. |
POST | /v1/fax-drafts | fax:prepare | Requires sufficient available credit, validates one PDF, and creates a 30-minute quote. |
POST | /v1/fax-drafts/{fax_id}/send | fax:send | Deducts $4 and queues one fax exactly once. |
GET | /v1/faxes/{fax_id} | fax:read | Returns current delivery and financial status. |
GET | /v1/faxes/{fax_id}/transmitted-document | fax:read | Optionally downloads the transmitted PDF after delivery. |
GET | /v1/faxes?status=delivered&limit=25 | fax:read | Lists the account’s recent faxes. |
Errors and retries
401AuthenticationMissing, invalid, expired, or revoked API key.
402BalanceInsufficient prepaid credit.
403AuthorityMissing scope, suspended account, or configured key limit.
409ConflictFax state, expired quote, or idempotency conflict.
422ValidationUnsupported destination, invalid fields, or rejected PDF.
429LimitsDaily fax or spending limit reached.
{
"error": {
"code": "insufficient_balance",
"message": "The prepaid balance is insufficient.",
"request_id": "...",
"details": []
}
}Ready to begin?