Skip to main content
Account holds everything Leads and Send depend on. Most of it you configure once and then forget. Start by confirming what your organization can do:
That returns your plan, capability flags, how many agent runs you can have in flight at once, and your project counts. Capability flags matter — features like sender warmup are plan-gated and return 409 WARMUP_UNAVAILABLE if yours doesn’t include them.

Senders

A sender is a mailbox or LinkedIn account Origami sends from. They belong to the organization, so connect once and use across every campaign.
OAuth never completes inside an API call. POST /account/senders/connect returns a handoff URL that a human opens in a browser. Your code’s job is to surface that link, not to follow it.
Any SMTP/IMAP mailbox can be connected straight from the API instead:
Credentials are write-only — no read ever returns them. Bad credentials fail immediately with SMTP_AUTH_FAILED or IMAP_UNREACHABLE rather than failing silently at send time.

Keeping senders healthy

A sender whose authorization expired reports needs_reauth and blocks any campaign launch that depends on it. Poll GET /account/senders?status=needs_reauth on a schedule and alert whoever owns the mailbox — a reconnect is another handoff.

Domains and mailboxes

Cold outreach on your primary domain risks your real email. Origami can buy lookalike domains and run mailboxes on them for you.
1

Find domains

Search never charges. It returns availability and price.
2

Buy them

Without confirm=true you get a priced preview and nothing is charged. Charges hit the card on file, so this is admin-only and returns 409 NO_PAYMENT_METHOD if there isn’t one. Set forwarding_domain so the apex redirects to your real site — a domain that resolves to nothing hurts deliverability.
3

Provision mailboxes

Always async — you get a Job. Once it succeeds the mailbox shows up as a sender.
Domains auto-renew. Turn that off with POST …/renewal/cancel, and change your mind with …/renewal/undo.

Exclusion lists

Two lists — people and companies — checked when leads are sourced and again when people are enrolled. This is your do-not-contact record: customers, competitors, churned accounts, anyone who asked to be left alone.
Adds are idempotent upserts, up to 1,000 per call. An entry with nothing matchable in it returns UNMATCHABLE_IDENTIFIER — an email, a LinkedIn slug, or a company domain is enough. Each organization has one exclusion list. A project can either share its parent’s or keep a private one:
Agencies usually want project so one client’s suppression list never leaks into another’s. GET /account/exclusion-lists tells you which is in effect and how many entries it holds.

Credits

The balance is reservation-aware: credits committed to running Jobs are already subtracted, so what you see is what you can actually spend. For a monthly breakdown by section, use GET /account/credits/usage?period=2026-08. Reads never cost anything. Sourcing and enrichment do. Per-Job spend is on the Job itself — see credits on the Job object.

Projects

A project is a child organization with its own lists, campaigns, and chats. One per client, if you run an agency.
hard enforcement blocks spend at the cap; soft tracks it and lets work through. Credits still come from the parent’s wallet either way. Then scope requests with the x-origami-project header — see conventions for exactly which routes honor it.

Webhooks

Rather than polling Jobs, have Origami call you.
The signing secret is returned once, at creation. Store it immediately — there is no way to read it back, only to rotate it. Verify every delivery with it before trusting the payload. POST …/test sends a webhook.test event so you can confirm your endpoint works before real traffic depends on it.

Webhooks guide

Event catalog, signature verification, and retry behavior.

API keys

Like webhook secrets, the key is shown once. A key can’t be created with a role above its creator’s, and member keys get 403 on admin-only operations — webhook management, key management, and domain purchase. One key per integration. Revoking one takes effect immediately.

Chats

The Origami app’s assistant, over the API. Send a prompt and it does the work, creating lists and campaigns as it goes.
Each message returns a Job, and that Job may come back needs_input if the agent has a question — answer it with POST /jobs/{job_id}/input and the same Job resumes. Use chats when you want Origami to decide the steps. Use the Leads and Send endpoints directly when your code should decide them.