PaperTotal client API

The whole PaperTotal client API: every route the web app and the iOS and Android apps call. The public developer reference, /v1/openapi.json, is the part of this that a key or a token can reach.

Sign in with Firebase Authentication and send the ID token as Authorization: Bearer <token>. The first verified token creates the person, a personal workspace, the default categories and a trial, so GET /v1/me is also the first call after sign-up. There is no sign-up route. Refresh the token as Firebase says to: an expired one answers 401 UNAUTHENTICATED.

Each operation's security lists every way in. session is that ID token. Where a route has a scope, apiKey and oauth2 take a key or an access token holding it, and x-required-scope names it. No entry at all means the route takes no credential.

x-workspace-scoped says a route runs inside one workspace. A session picks it with the X-Workspace-Id header, or lands on the person's default workspace. A key or a token is tied to one workspace and no header moves it. A workspace the caller is not in answers 404, not 403, and so does a record in another workspace. The X-Act-As header acts for someone who named the caller their delegate; it is listed only on the routes a delegate can reach.

x-requires-active-plan means the route changes data, so a lapsed plan answers 402 SUBSCRIPTION_REQUIRED. Reading and exporting never stop. x-required-permission is what the caller's role must grant, or it answers 403. x-required-feature is what the workspace's plan must include, or it answers 402 PLAN_FEATURE_REQUIRED with details.feature and details.plan. x-full-access-only means a delegate on limited access is refused.

Sending a file. Ask POST /v1/uploads for a ticket, saying what the file is for (purpose), its type and its size in bytes. PUT exactly that many bytes to the ticket's url, with its headers and no others: the file goes straight to storage and never through this API. Then call the route the file is for with JSON naming uploadId where it would otherwise take a multipart file: POST /v1/documents or any other route that reads a document, such as POST /v1/documents/classify, POST /v1/parse or POST /v1/split, for document, POST /v1/expenses/{id}/receipts for expense_receipt, POST /v1/mileage/{id}/odometer-photos for odometer_photo, POST /v1/approvals/policy for policy_document, the statement imports under /v1/payment-accounts for statement, and POST /v1/attachments for attachment. Nothing counts until that route has checked the stored file: its bytes decide its type, and a file that is not acceptable is refused there and deleted. The ticket stops working at expiresAt, and a failed PUT is treated as an expired one: ask for a new ticket and try once more. A multipart file on the same routes still works, and is the simple way for a script.

Lists answer { data, nextCursor }. Pass nextCursor back as cursor until it is null. A route with an Idempotency-Key parameter is safe to retry with the same key. Signed links to files last 15 minutes, so fetch them when they are needed and do not store them.

Money is an integer in minor units with a currency code, dates are YYYY-MM-DD, and every error has the same body with a stable code and a message written for a person. code is one of: BAD_REQUEST (400), VALIDATION_FAILED (422), UNAUTHENTICATED (401), FORBIDDEN (403), NOT_FOUND (404), CONFLICT (409), INVALID_STATE (409), PAYLOAD_TOO_LARGE (413), UNSUPPORTED_FILE (415), RATE_LIMITED (429), PLAN_LIMIT_REACHED (402), PLAN_FEATURE_REQUIRED (402), SUBSCRIPTION_REQUIRED (402), STORE_MANAGED (409), IDEMPOTENCY_CONFLICT (409), IDEMPOTENCY_IN_PROGRESS (409), FILE_TOO_SMALL (422), FILE_CORRUPTED (422), FILE_ENCRYPTED (422), IMAGE_TOO_SMALL (422), SANDBOX_LIMIT_REACHED (402), CLIENT_UPDATE_REQUIRED (426), UNAVAILABLE (503), NOT_CONFIGURED (503), UPSTREAM_ERROR (502), INTERNAL (500). Validation errors answer 422 with details as a list of { path, message }. Some refusals also carry details.reason for a client to act on without reading the wording.

Sessions are limited to 600 requests a minute by address. Requests are limited per workspace, across all of its keys and tokens: 600 a minute on Business, 120 on Pro, 60 on Starter and 30 with no plan. Past that the API answers 429 with code RATE_LIMITED and a Retry-After header. OAuth access tokens last 30 minutes, and /oauth/token swaps a refresh token for a new pair.

Base URL: https://api.papertotal.com

Need help with the API? Write to [email protected] with the X-Request-Id of the call. A person answers by email.

Try a call from the web app, with your own session or a key you paste.

agent rules

GET /v1/agent-rules List agent rules

Only a signed-in session reaches this. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Response

200 Success.

application/json AgentRuleList

POST /v1/agent-rules Create an agent rule

Only a signed-in session reaches this. Needs the settings.manage permission. Needs a live plan. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Request body (optional)

application/json SaveAgentRuleInput

Response

201 Success.

application/json AgentRule

DELETE /v1/agent-rules/{id} Delete an agent rule

Only a signed-in session reaches this. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Response

204 Done, with no content.

PATCH /v1/agent-rules/{id} Change an agent rule

Only a signed-in session reaches this. Needs a live plan. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Request body (optional)

application/json UpdateAgentRuleInput

Response

200 Success.

application/json AgentRule

POST /v1/agent-rules/describe Turn words into a rule to read over

Saves nothing.

Only a signed-in session reaches this. Needs the settings.manage permission. Needs a live plan. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Request body (optional)

application/json DescribeRuleInput

Response

200 Success.

application/json AgentRuleDescribed

GET /v1/agent-rules/suggestions List suggested agent rules

Only a signed-in session reaches this. Needs the settings.manage permission. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Response

200 Success.

application/json SuggestedAgentRuleList

agents

GET /v1/agents List agents

Only a signed-in session reaches this. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Response

200 Success.

application/json AgentList

POST /v1/agents Create an agent

Only a signed-in session reaches this. Needs a live plan. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Request body (optional)

application/json CreateAgentInput

Response

201 Success.

application/json Agent

DELETE /v1/agents/{id} Delete an agent

Only a signed-in session reaches this. Needs a live plan. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Response

204 Done, with no content.

GET /v1/agents/{id} Get an agent

Only a signed-in session reaches this. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Response

200 Success.

application/json Agent

PATCH /v1/agents/{id} Change an agent

Only a signed-in session reaches this. Needs a live plan. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Request body (optional)

application/json UpdateAgentInput

Response

200 Success.

application/json Agent

GET /v1/agents/{id}/activity List what an agent did

Only a signed-in session reaches this. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Response

200 Success.

application/json AgentActivityList

GET /v1/agents/{id}/inbox See what an agent's own account holds

The chats it is in, what waits on it to approve, and what it waits on its owner to confirm.

Only a signed-in session reaches this. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Response

200 Success.

application/json AgentInbox

POST /v1/agents/{id}/join Add an agent to a workspace

The agent is found in this workspace. With no workspaceId it joins this workspace, and with one it joins that workspace instead, where you have to manage members too. It takes a seat there as a member, and joining again changes nothing.

Only a signed-in session reaches this. Needs a live plan. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Request body (optional)

application/json AgentJoinInput

Response

200 Success.

application/json Agent

POST /v1/agents/{id}/rules Give an agent a rule

Only a signed-in session reaches this. Needs a live plan. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Request body (optional)

application/json SaveAgentRuleInput

Response

201 Success.

application/json AgentRule

GET /v1/agents/{id}/schedules List an agent's schedules

Only a signed-in session reaches this. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Response

200 Success.

application/json AgentScheduleList

POST /v1/agents/{id}/schedules Schedule an agent

Only a signed-in session reaches this. Needs a live plan. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Request body (optional)

application/json AgentScheduleInput

Response

201 Success.

application/json AgentSchedule

DELETE /v1/agents/{id}/schedules/{scheduleId} Cancel an agent's schedule

Only a signed-in session reaches this. Try it

Parameters

id requiredpathstring
scheduleId requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Response

204 Done, with no content.

PATCH /v1/agents/{id}/schedules/{scheduleId} Change an agent's schedule

Only a signed-in session reaches this. Needs a live plan. Try it

Parameters

id requiredpathstring
scheduleId requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Request body (optional)

application/json AgentScheduleInput

Response

200 Success.

application/json AgentSchedule

POST /v1/agents/bulk-delete Delete many agents

Only a signed-in session reaches this. Needs a live plan. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Request body (optional)

application/json BulkDeleteAgentsInput

Response

200 Success.

application/json AgentBulkDeleteResult

POST /v1/agents/draft Draft an agent from a description

Saves nothing.

Only a signed-in session reaches this. Needs a live plan. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Request body (optional)

application/json DraftAgentInput

Response

200 Success.

application/json AgentDraft

GET /v1/agents/templates List agent templates

Only a signed-in session reaches this. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Response

200 Success.

application/json AgentTemplateList

analytics

POST /v1/analytics/ask Ask a question about spending

A question is a read, so it works on a lapsed plan.

Only a signed-in session reaches this. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Request body (optional)

application/json AskInsightsInput

Response

200 Success.

application/json InsightAnswer

GET /v1/analytics/by-category Spending by category

A signed-in session, or an API key or OAuth token with the expenses:read scope. Try it

Parameters

statusqueryPROCESSING NEEDS_REVIEW READY SUBMITTED APPROVED REJECTED REIMBURSED VOID or array of PROCESSING NEEDS_REVIEW READY SUBMITTED APPROVED REJECTED REIMBURSED VOID
kindqueryRECEIPT MANUAL MILEAGE PER_DIEM TIME CARD
paymentTypequeryCASH PERSONAL_CARD COMPANY_CARD BANK_TRANSFER CHECK PAYPAL OTHER
ownerIdquerystring
scopequerymine all
categoryIdquerystring
merchantIdquerystring
projectIdquerystring
clientIdquerystring
tagIdquerystring
departmentquerystring
reportIdquerystring
externalIdquerystring
unreportedqueryboolean
needsReviewqueryboolean
billablequeryboolean
reimbursablequeryboolean
moneyFlowqueryIN OUT
dateFieldquerydate createdAt updatedAt submittedAt approvedAt
fromquerystring
toquerystring
minMinorqueryinteger
maxMinorqueryinteger
qquerystring
limitqueryinteger
intervalqueryday week month quarter year running
groupCurrencyquerystring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json Breakdown

GET /v1/analytics/by-department Spending by department

A signed-in session, or an API key or OAuth token with the expenses:read scope. Try it

Parameters

statusqueryPROCESSING NEEDS_REVIEW READY SUBMITTED APPROVED REJECTED REIMBURSED VOID or array of PROCESSING NEEDS_REVIEW READY SUBMITTED APPROVED REJECTED REIMBURSED VOID
kindqueryRECEIPT MANUAL MILEAGE PER_DIEM TIME CARD
paymentTypequeryCASH PERSONAL_CARD COMPANY_CARD BANK_TRANSFER CHECK PAYPAL OTHER
ownerIdquerystring
scopequerymine all
categoryIdquerystring
merchantIdquerystring
projectIdquerystring
clientIdquerystring
tagIdquerystring
departmentquerystring
reportIdquerystring
externalIdquerystring
unreportedqueryboolean
needsReviewqueryboolean
billablequeryboolean
reimbursablequeryboolean
moneyFlowqueryIN OUT
dateFieldquerydate createdAt updatedAt submittedAt approvedAt
fromquerystring
toquerystring
minMinorqueryinteger
maxMinorqueryinteger
qquerystring
limitqueryinteger
intervalqueryday week month quarter year running
groupCurrencyquerystring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json Breakdown

GET /v1/analytics/by-member Spending by member

A signed-in session, or an API key or OAuth token with the expenses:read scope. Try it

Parameters

statusqueryPROCESSING NEEDS_REVIEW READY SUBMITTED APPROVED REJECTED REIMBURSED VOID or array of PROCESSING NEEDS_REVIEW READY SUBMITTED APPROVED REJECTED REIMBURSED VOID
kindqueryRECEIPT MANUAL MILEAGE PER_DIEM TIME CARD
paymentTypequeryCASH PERSONAL_CARD COMPANY_CARD BANK_TRANSFER CHECK PAYPAL OTHER
ownerIdquerystring
scopequerymine all
categoryIdquerystring
merchantIdquerystring
projectIdquerystring
clientIdquerystring
tagIdquerystring
departmentquerystring
reportIdquerystring
externalIdquerystring
unreportedqueryboolean
needsReviewqueryboolean
billablequeryboolean
reimbursablequeryboolean
moneyFlowqueryIN OUT
dateFieldquerydate createdAt updatedAt submittedAt approvedAt
fromquerystring
toquerystring
minMinorqueryinteger
maxMinorqueryinteger
qquerystring
limitqueryinteger
intervalqueryday week month quarter year running
groupCurrencyquerystring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json Breakdown

GET /v1/analytics/by-merchant Spending by merchant

A signed-in session, or an API key or OAuth token with the expenses:read scope. Try it

Parameters

statusqueryPROCESSING NEEDS_REVIEW READY SUBMITTED APPROVED REJECTED REIMBURSED VOID or array of PROCESSING NEEDS_REVIEW READY SUBMITTED APPROVED REJECTED REIMBURSED VOID
kindqueryRECEIPT MANUAL MILEAGE PER_DIEM TIME CARD
paymentTypequeryCASH PERSONAL_CARD COMPANY_CARD BANK_TRANSFER CHECK PAYPAL OTHER
ownerIdquerystring
scopequerymine all
categoryIdquerystring
merchantIdquerystring
projectIdquerystring
clientIdquerystring
tagIdquerystring
departmentquerystring
reportIdquerystring
externalIdquerystring
unreportedqueryboolean
needsReviewqueryboolean
billablequeryboolean
reimbursablequeryboolean
moneyFlowqueryIN OUT
dateFieldquerydate createdAt updatedAt submittedAt approvedAt
fromquerystring
toquerystring
minMinorqueryinteger
maxMinorqueryinteger
qquerystring
limitqueryinteger
intervalqueryday week month quarter year running
groupCurrencyquerystring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json Breakdown

GET /v1/analytics/by-project Spending by project

A signed-in session, or an API key or OAuth token with the expenses:read scope. Try it

Parameters

statusqueryPROCESSING NEEDS_REVIEW READY SUBMITTED APPROVED REJECTED REIMBURSED VOID or array of PROCESSING NEEDS_REVIEW READY SUBMITTED APPROVED REJECTED REIMBURSED VOID
kindqueryRECEIPT MANUAL MILEAGE PER_DIEM TIME CARD
paymentTypequeryCASH PERSONAL_CARD COMPANY_CARD BANK_TRANSFER CHECK PAYPAL OTHER
ownerIdquerystring
scopequerymine all
categoryIdquerystring
merchantIdquerystring
projectIdquerystring
clientIdquerystring
tagIdquerystring
departmentquerystring
reportIdquerystring
externalIdquerystring
unreportedqueryboolean
needsReviewqueryboolean
billablequeryboolean
reimbursablequeryboolean
moneyFlowqueryIN OUT
dateFieldquerydate createdAt updatedAt submittedAt approvedAt
fromquerystring
toquerystring
minMinorqueryinteger
maxMinorqueryinteger
qquerystring
limitqueryinteger
intervalqueryday week month quarter year running
groupCurrencyquerystring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json Breakdown

GET /v1/analytics/by-tag Spending by tag

A signed-in session, or an API key or OAuth token with the expenses:read scope. Try it

Parameters

statusqueryPROCESSING NEEDS_REVIEW READY SUBMITTED APPROVED REJECTED REIMBURSED VOID or array of PROCESSING NEEDS_REVIEW READY SUBMITTED APPROVED REJECTED REIMBURSED VOID
kindqueryRECEIPT MANUAL MILEAGE PER_DIEM TIME CARD
paymentTypequeryCASH PERSONAL_CARD COMPANY_CARD BANK_TRANSFER CHECK PAYPAL OTHER
ownerIdquerystring
scopequerymine all
categoryIdquerystring
merchantIdquerystring
projectIdquerystring
clientIdquerystring
tagIdquerystring
departmentquerystring
reportIdquerystring
externalIdquerystring
unreportedqueryboolean
needsReviewqueryboolean
billablequeryboolean
reimbursablequeryboolean
moneyFlowqueryIN OUT
dateFieldquerydate createdAt updatedAt submittedAt approvedAt
fromquerystring
toquerystring
minMinorqueryinteger
maxMinorqueryinteger
qquerystring
limitqueryinteger
intervalqueryday week month quarter year running
groupCurrencyquerystring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json Breakdown

GET /v1/analytics/summary Spending totals for a period, with the period before it

A signed-in session, or an API key or OAuth token with the expenses:read scope. Try it

Parameters

statusqueryPROCESSING NEEDS_REVIEW READY SUBMITTED APPROVED REJECTED REIMBURSED VOID or array of PROCESSING NEEDS_REVIEW READY SUBMITTED APPROVED REJECTED REIMBURSED VOID
kindqueryRECEIPT MANUAL MILEAGE PER_DIEM TIME CARD
paymentTypequeryCASH PERSONAL_CARD COMPANY_CARD BANK_TRANSFER CHECK PAYPAL OTHER
ownerIdquerystring
scopequerymine all
categoryIdquerystring
merchantIdquerystring
projectIdquerystring
clientIdquerystring
tagIdquerystring
departmentquerystring
reportIdquerystring
externalIdquerystring
unreportedqueryboolean
needsReviewqueryboolean
billablequeryboolean
reimbursablequeryboolean
moneyFlowqueryIN OUT
dateFieldquerydate createdAt updatedAt submittedAt approvedAt
fromquerystring
toquerystring
minMinorqueryinteger
maxMinorqueryinteger
qquerystring
limitqueryinteger
intervalqueryday week month quarter year running
groupCurrencyquerystring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json AnalyticsSummary

GET /v1/analytics/trend Spending over time

A signed-in session, or an API key or OAuth token with the expenses:read scope. Try it

Parameters

statusqueryPROCESSING NEEDS_REVIEW READY SUBMITTED APPROVED REJECTED REIMBURSED VOID or array of PROCESSING NEEDS_REVIEW READY SUBMITTED APPROVED REJECTED REIMBURSED VOID
kindqueryRECEIPT MANUAL MILEAGE PER_DIEM TIME CARD
paymentTypequeryCASH PERSONAL_CARD COMPANY_CARD BANK_TRANSFER CHECK PAYPAL OTHER
ownerIdquerystring
scopequerymine all
categoryIdquerystring
merchantIdquerystring
projectIdquerystring
clientIdquerystring
tagIdquerystring
departmentquerystring
reportIdquerystring
externalIdquerystring
unreportedqueryboolean
needsReviewqueryboolean
billablequeryboolean
reimbursablequeryboolean
moneyFlowqueryIN OUT
dateFieldquerydate createdAt updatedAt submittedAt approvedAt
fromquerystring
toquerystring
minMinorqueryinteger
maxMinorqueryinteger
qquerystring
limitqueryinteger
intervalqueryday week month quarter year running
groupCurrencyquerystring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json Trend

api calls

GET /v1/api-calls List the calls keys and apps made

A credential cannot read what credentials did: this takes a person.

Only a signed-in session reaches this. Try it

Parameters

keyquerystring
statusquerystring
fromquerystring
toquerystring
limitqueryinteger
cursorquerystring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json ApiCallPage

api keys

GET /v1/api-keys List API keys

Only a signed-in session reaches this. Try it

Parameters

limitqueryinteger
cursorquerystring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json ApiKeyPage

POST /v1/api-keys Create an API key

The key is in this response and nowhere else.

Only a signed-in session reaches this. Needs the developer.manage permission. Needs the developer_api plan feature. Needs a live plan. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Request body

application/json CreateApiKeyInput

Response

201 Success.

application/json ApiKeyCreated

DELETE /v1/api-keys/{id} Revoke an API key

Only a signed-in session reaches this. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Response

204 Done, with no content.

GET /v1/api-keys/{id} Get an API key

Only a signed-in session reaches this. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json ApiKey

PATCH /v1/api-keys/{id} Change an API key

Only a signed-in session reaches this. Needs the developer_api plan feature. Needs a live plan. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Request body

application/json UpdateApiKeyInput

Response

200 Success.

application/json ApiKey

POST /v1/api-keys/{id}/client-secret Issue a key's signing secret

The secret is in this response and nowhere else.

Only a signed-in session reaches this. Needs the developer.manage permission. Needs the developer_api plan feature. Needs a live plan. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Response

201 Success.

application/json ApiKeyClientSecret

POST /v1/api-keys/{id}/rotate Replace an API key

The new key is in this response and nowhere else.

Only a signed-in session reaches this. Needs the developer.manage permission. Needs the developer_api plan feature. Needs a live plan. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Response

201 Success.

application/json ApiKeyCreated

GET /v1/api-keys/available-permissions List the scopes a key can be given

Only a signed-in session reaches this. Needs the developer.manage permission. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Response

200 Success.

application/json ApiKeyPermissions

GET /v1/api-keys/verify See what the calling key grants

Any key may call this about itself, whatever its scopes. It says what the key can reach, in which workspace, and until when. Every other route under /v1/api-keys takes a person, so a key cannot mint a stronger key.

A signed-in session, or any API key, whatever its scopes. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json ApiKeyVerification

approval workflows

GET /v1/approval-workflows List approval workflows

Only a signed-in session reaches this. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json ApprovalWorkflowList

POST /v1/approval-workflows Create an approval workflow

Only a signed-in session reaches this. Needs the settings.manage permission. Needs the approvals plan feature. Needs a live plan. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body

application/json ApprovalWorkflowInput

Response

201 Success.

application/json ApprovalWorkflow

DELETE /v1/approval-workflows/{id} Delete an approval workflow

Only a signed-in session reaches this. Needs the settings.manage permission. Needs the approvals plan feature. Needs a live plan. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

204 Done, with no content.

PATCH /v1/approval-workflows/{id} Change an approval workflow

Only a signed-in session reaches this. Needs the settings.manage permission. Needs the approvals plan feature. Needs a live plan. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body

application/json ApprovalWorkflowInput

Response

200 Success.

application/json ApprovalWorkflow

GET /v1/approval-workflows/export Download approval workflows as CSV

Only a signed-in session reaches this. Needs the settings.manage permission. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

text/csv string (binary)

POST /v1/approval-workflows/import Import approval workflows from CSV

Only a signed-in session reaches this. Needs the settings.manage permission. Needs the multi_level_approvals plan feature. Needs a live plan. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body

application/json CatalogImportInput

Response

200 Success.

application/json CatalogImportResult

approvals

GET /v1/approvals List the reports waiting on the caller

With counts of what is pending, clean, flagged and delegated.

Only a signed-in session reaches this. Try it

Parameters

scopequerymine all
limitqueryinteger
cursorquerystring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json ApprovalQueue

POST /v1/approvals/bulk-approve Approve many reports

Only a signed-in session reaches this. Needs a live plan. Refuses a delegate on limited access. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Request body

application/json BulkApproveInput

Response

200 Success.

application/json BulkReportResult

DELETE /v1/approvals/policy Remove the policy PDF

Only a signed-in session reaches this. Needs the settings.manage permission. Needs a live plan. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

204 Done, with no content.

GET /v1/approvals/policy Read the expense policy

Every member can read it. The link to the PDF is short-lived.

Only a signed-in session reaches this. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json Policy

POST /v1/approvals/policy Upload the expense policy as a PDF

Multipart with the PDF in a field named file, or JSON naming an uploadId from POST /v1/uploads.

Only a signed-in session reaches this. Needs the settings.manage permission. Needs a live plan. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body

multipart/form-data

file requiredstring (binary)

application/json

uploadId requiredstring

From POST /v1/uploads, once the file has been sent to the URL it answered with.

Response

201 Success.

application/json Policy

GET /v1/approvals/settings Get the report settings

Only a signed-in session reaches this. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json ReportSettings

PATCH /v1/approvals/settings Change the report settings

Only a signed-in session reaches this. Needs the settings.manage permission. Needs a live plan. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body

application/json ReportSettingsInput

Response

200 Success.

application/json ReportSettings

assistant

POST /v1/assistant/actions/{id}/confirm Confirm what Concierge proposed

Only a signed-in session reaches this. Needs a live plan. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Response

200 Success.

application/json PendingAction

POST /v1/assistant/actions/{id}/decline Decline what Concierge proposed

Only a signed-in session reaches this. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Response

200 Success.

application/json PendingAction

POST /v1/assistant/ask Ask Concierge something

Reading needs no confirmation. A change waits as a pending action until the person confirms it.

Only a signed-in session reaches this. Needs a live plan. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Request body (optional)

application/json AskAssistantInput

Response

200 Success.

application/json AssistantAsk

GET /v1/assistant/expenses/{id}/explain Explain how an expense was filed

Where its category came from, and every decision Concierge made about it.

Only a signed-in session reaches this. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Response

200 Success.

application/json ExpenseExplanation

GET /v1/assistant/reports/{id}/explain Explain how a report got where it is

Each thing that happened to it, by whom and through what. No model is asked.

Only a signed-in session reaches this. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Response

200 Success.

application/json ReportExplain

POST /v1/assistant/room Open the caller's room with Concierge

Only a signed-in session reaches this. Needs a live plan. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Response

200 Success.

application/json AssistantRoom

GET /v1/assistant/runs/{id} Explain a Concierge run

What it read and did, in order, and the facts it went on.

Only a signed-in session reaches this. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Response

200 Success.

application/json ExplainRun

GET /v1/assistant/status See whether Concierge is available

Without a Claude key it says so, and everything else keeps working.

Only a signed-in session reaches this. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Response

200 Success.

application/json AssistantStatus

attachments

POST /v1/attachments Make a file a comment or a message can carry

From a finished upload with the purpose attachment. Name its id in attachmentIds on a comment or a message. A file nothing names is deleted after a week.

A signed-in session, or an API key or OAuth token with the expenses:write scope. Needs a live plan. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body

application/json CreateAttachmentInput

Response

201 Success.

application/json Attachment

audit

GET /v1/audit List audit events

Only a signed-in session reaches this. Needs the audit.read permission. Needs the audit_log plan feature. Needs a live plan. Try it

Parameters

actionquerystring
entityTypequerystring
entityIdquerystring
actorIdquerystring
fromquerystring
toquerystring
limitqueryinteger
cursorquerystring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json AuditEventPage

auth

POST /v1/auth/discover Find out how an address signs in

Needs no sign-in. Call it before showing a password box: an address on a domain with single sign-on goes to its identity provider.

No credential needed. Try it

Request body

application/json DiscoverSignInInput

Response

200 Success.

application/json SignInDiscovery

POST /v1/auth/email-sign-in Send a sign-in link by email

Answers 202 whether or not the address has an account, so an address cannot be probed.

No credential needed. Try it

Request body

application/json EmailSignInInput

Response

202 Success.

application/json EmailSignInSent

POST /v1/auth/email-sign-in/redeem Finish signing in from an email link

No credential needed. Try it

Request body

application/json RedeemEmailSignInInput

Response

200 Success.

application/json EmailSignInRedeemed

POST /v1/auth/recovery-code Use a recovery code

Needs no sign-in: this is for someone who lost their second factor.

No credential needed. Try it

Request body

application/json UseRecoveryCodeInput

Response

204 Done, with no content.

automation rules

GET /v1/automation-rules List automation rules

The workspace's rules, top to bottom. The first rule to set a field wins it.

A signed-in session, or an API key or OAuth token with the rules:read scope. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json AutomationRuleList

POST /v1/automation-rules Add an automation rule

Conditions match on the expense, its line items, its tags and flags, the words on its document, or a question for Claude.

A signed-in session, or an API key or OAuth token with the rules:write scope. Needs the policies.manage permission. Needs the automation_rules plan feature. Needs a live plan. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body

application/json AutomationRuleInput

Response

201 Success.

application/json AutomationRule

DELETE /v1/automation-rules/{id} Delete an automation rule

A signed-in session, or an API key or OAuth token with the rules:write scope. Needs the policies.manage permission. Needs the automation_rules plan feature. Needs a live plan. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

204 Done, with no content.

PATCH /v1/automation-rules/{id} Change an automation rule

A signed-in session, or an API key or OAuth token with the rules:write scope. Needs the policies.manage permission. Needs the automation_rules plan feature. Needs a live plan. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body

application/json UpdateAutomationRuleInput

Response

200 Success.

application/json AutomationRule

POST /v1/automation-rules/{id}/apply Run a rule over expenses not yet submitted

A field a person set keeps their value. Running it twice changes nothing more.

A signed-in session, or an API key or OAuth token with the rules:write scope. Needs the policies.manage permission. Needs the automation_rules plan feature. Needs a live plan. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json AutomationApply

POST /v1/automation-rules/{id}/test Count what a saved rule would match

Changes nothing.

A signed-in session, or an API key or OAuth token with the rules:write scope. Needs the policies.manage permission. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json AutomationPreview

GET /v1/automation-rules/export Export automation rules as a file

Every workspace rule, in order, with names in place of ids, so another workspace can import it. Needs policies.manage.

A signed-in session, or an API key or OAuth token with the rules:read scope. Needs the policies.manage permission. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json RulesDocument

POST /v1/automation-rules/import Import automation rules from CSV

A signed-in session, or an API key or OAuth token with the rules:write scope. Needs the policies.manage permission. Needs the automation_rules plan feature. Needs a live plan. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body

application/json CatalogImportInput

Response

200 Success.

application/json CatalogImportResult

POST /v1/automation-rules/import-file Import automation rules from a file

Takes what the export route gives. Each name is looked up in this workspace, and a rule that names something it does not have comes back in errors, with the reason. A rule already here is skipped.

A signed-in session, or an API key or OAuth token with the rules:write scope. Needs the policies.manage permission. Needs the automation_rules plan feature. Needs a live plan. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body

application/json RulesDocument

Response

200 Success.

application/json CatalogImportResult

POST /v1/automation-rules/preview Count what some conditions would match

Changes nothing. The sample shows expenses, so it needs rules:write and policies.manage.

A signed-in session, or an API key or OAuth token with the rules:write scope. Needs the policies.manage permission. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body

application/json AutomationPreviewInput

Response

200 Success.

application/json AutomationPreview

POST /v1/automation-rules/reorder Put the rules in a new order

A signed-in session, or an API key or OAuth token with the rules:write scope. Needs the policies.manage permission. Needs the automation_rules plan feature. Needs a live plan. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body

application/json ReorderAutomationRulesInput

Response

200 Success.

application/json AutomationRuleOrder

bank statements

POST /v1/bank-statements Read a bank statement

POST /v1/documents/url with the type fixed: the same body, wait and answer. Bank and tax numbers are masked; POST /v1/documents/{id}/reveal opens them.

A signed-in session, or an API key or OAuth token with the documents:write scope. Needs the developer_api plan feature. Needs a live plan. Try it

Parameters

Idempotency-Keyheaderstring

Replaying a key returns the first record instead of creating, and charging for, a second. While the first request is still running, a retry answers 409 IDEMPOTENCY_IN_PROGRESS with a Retry-After, and is not charged. The same key on a different request answers 409 IDEMPOTENCY_CONFLICT.

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Request body

application/json SubmitDocumentInput

Response

201 Success.

application/json DocumentUpload

202 Accepted. The document is still being read.

application/json DocumentUpload

POST /v1/bank-statements/async Read a bank statement in the background

POST /v1/documents/url with the type fixed: the same body, wait and answer. Bank and tax numbers are masked; POST /v1/documents/{id}/reveal opens them.

A signed-in session, or an API key or OAuth token with the documents:write scope. Needs the developer_api plan feature. Needs a live plan. Try it

Parameters

Idempotency-Keyheaderstring

Replaying a key returns the first record instead of creating, and charging for, a second. While the first request is still running, a retry answers 409 IDEMPOTENCY_IN_PROGRESS with a Retry-After, and is not charged. The same key on a different request answers 409 IDEMPOTENCY_CONFLICT.

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Request body

application/json SubmitDocumentInput

Response

201 Success.

application/json DocumentUpload

bank statements set

GET /v1/bank-statements-set List bank statement sets

A signed-in session, or an API key or OAuth token with the documents:read scope. Needs the developer_api plan feature. Needs a live plan. Try it

Parameters

limitqueryinteger
cursorquerystring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json DocumentSetPage

POST /v1/bank-statements-set Split a PDF of bank statements and read each one

Multipart with a field named file, or JSON with uploadId, file_url or file_data. Up to 250 pages and 50 MB. Answers at once. bank_statement_set.created says when every statement is read, and bank_statement_set.failed why not. Account numbers are masked in every view.

A signed-in session, or an API key or OAuth token with the documents:write scope. Needs the developer_api plan feature. Needs a live plan. Try it

Parameters

Idempotency-Keyheaderstring

Replaying a key returns the first record instead of creating, and charging for, a second. While the first request is still running, a retry answers 409 IDEMPOTENCY_IN_PROGRESS with a Retry-After, and is not charged. The same key on a different request answers 409 IDEMPOTENCY_CONFLICT.

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Request body

multipart/form-data

file requiredstring (binary)
split_by_blank_pageboolean
every_pageboolean
rangesstring
document_typesarray of string
blueprint_namestring
external_idstring

application/json

Name the file with one of uploadId, file_url or file_data.

uploadIdstring

From POST /v1/uploads, once the file has been sent to the URL it answered with.

split_by_blank_pageboolean
every_pageboolean
rangesstring
document_typesarray of string
blueprint_namestring
file_urlstring

A public https address to fetch the file from. Redirects are not followed.

file_datastring

The file itself in base64, raw or as a data URI.

file_namestring

What to call a file sent as file_url or file_data.

external_idstring

Response

202 Success.

application/json DocumentSet

GET /v1/bank-statements-set/{id} Get a bank statement set

A signed-in session, or an API key or OAuth token with the documents:read scope. Needs the developer_api plan feature. Needs a live plan. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json DocumentSet

billing

GET /v1/billing Get the plan, seats and this month's usage

A signed-in session, or an API key or OAuth token with the billing:read scope. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json Billing

POST /v1/billing/cancel Cancel the subscription

It ends when the period already paid for does, as cancelling in the billing portal does. Asking twice changes nothing. Needs billing.manage.

A signed-in session, or an API key or OAuth token with the billing:write scope. Needs the billing.manage permission. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Response

200 Success.

application/json Billing

GET /v1/billing/cashsdk/token Get a CashSDK user token

For the phone apps: send it as X-CashSDK-User-Token. Never cached.

Only a signed-in session reaches this. Needs the billing.manage permission. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Response

200 Success.

application/json CashsdkToken

POST /v1/billing/checkout Start a checkout

Answers with a link. A workspace billed through a store answers 409 STORE_MANAGED.

Only a signed-in session reaches this. Needs the billing.manage permission. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Request body

application/json CheckoutRequest

Response

200 Success.

application/json BillingRedirect

GET /v1/billing/invoices List invoices

Newest first, from Stripe, with Stripe's own links to each invoice's page and PDF. A plan bought in a store has its invoices there.

A signed-in session, or an API key or OAuth token with the billing:read scope. Needs the billing.manage permission. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Response

200 Success.

application/json BillingInvoicePage

GET /v1/billing/plans List the plans and their prices

Needs no sign-in. Every figure is also an App Store and Google Play price point.

No credential needed. Try it

Response

200 Success.

application/json BillingPlans

POST /v1/billing/portal Open the billing portal

Answers with a link. A workspace billed through a store answers 409 STORE_MANAGED.

Only a signed-in session reaches this. Needs the billing.manage permission. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Response

200 Success.

application/json BillingRedirect

POST /v1/billing/restore Read store purchases again

For a Restore purchases button: PaperTotal asks CashSDK again what this workspace holds.

Only a signed-in session reaches this. Needs the billing.manage permission. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Response

200 Success.

application/json Billing

POST /v1/billing/seats Change the seats on the plan

Only a signed-in session reaches this. Needs the billing.manage permission. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Request body

application/json SeatsRequest

Response

200 Success.

application/json Billing

blueprints

GET /v1/blueprints List blueprints

This workspace's own, then the built-in catalogue.

A signed-in session, or an API key or OAuth token with the documents:read scope. Needs the developer_api plan feature. Needs a live plan. Try it

Parameters

documentTypequeryRECEIPT INVOICE BILL BANK_STATEMENT CHECK TAX_FORM BUSINESS_CARD OTHER UNKNOWN PURCHASE_ORDER CONTRACT PACKING_SLIP REMITTANCE_ADVICE CREDIT_NOTE STATEMENT
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json BlueprintList

POST /v1/blueprints Create a blueprint

A strict subset of JSON schema: object, array, string, number, integer and boolean, nested up to four levels and up to 150 fields. A keyword outside it, such as $ref, pattern or anyOf, is refused by name. Needs settings.manage.

A signed-in session, or an API key or OAuth token with the documents:write scope. Needs the settings.manage permission. Needs the developer_api plan feature. Needs a live plan. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body

application/json CreateBlueprintInput

Response

201 Success.

application/json Blueprint

DELETE /v1/blueprints/{name} Delete a blueprint

Results it made stay, and its name can be used again.

A signed-in session, or an API key or OAuth token with the documents:write scope. Needs the settings.manage permission. Needs the developer_api plan feature. Needs a live plan. Try it

Parameters

name requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

204 Done, with no content.

GET /v1/blueprints/{name} Get a blueprint

Asks for an older version with version.

A signed-in session, or an API key or OAuth token with the documents:read scope. Needs the developer_api plan feature. Needs a live plan. Try it

Parameters

name requiredpathstring
versionqueryinteger
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json Blueprint

PATCH /v1/blueprints/{name} Change a blueprint

A new schema or new field guidance adds a version. Results keep the version that made them.

A signed-in session, or an API key or OAuth token with the documents:write scope. Needs the settings.manage permission. Needs the developer_api plan feature. Needs a live plan. Try it

Parameters

name requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body

application/json UpdateBlueprintInput

Response

200 Success.

application/json Blueprint

POST /v1/blueprints/draft Propose a blueprint from a sample

Multipart, or JSON naming an uploadId from POST /v1/uploads. Reads one sample and proposes fields. Nothing is saved until it is sent to POST /v1/blueprints. Costs one scan.

A signed-in session, or an API key or OAuth token with the documents:write scope. Needs the settings.manage permission. Needs the developer_api plan feature. Needs a live plan. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body

multipart/form-data

file requiredstring (binary)

application/json

uploadId requiredstring

From POST /v1/uploads, once the file has been sent to the URL it answered with.

Response

201 Success.

application/json BlueprintDraft

GET /v1/blueprints/draft/{documentId} Get a proposed blueprint

The document id from proposing one. Answers READING until it has been read.

A signed-in session, or an API key or OAuth token with the documents:read scope. Needs the developer_api plan feature. Needs a live plan. Try it

Parameters

documentId requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json BlueprintDraft

budgets

GET /v1/budgets List budgets

A signed-in session, or an API key or OAuth token with the expenses:read scope. Try it

Parameters

limitqueryinteger
cursorquerystring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json BudgetPage

POST /v1/budgets Create a budget

Only a signed-in session reaches this. Needs the settings.manage permission. Needs the policies plan feature. Needs a live plan. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body

application/json BudgetInput

Response

201 Success.

application/json Budget

DELETE /v1/budgets/{id} Delete a budget

Only a signed-in session reaches this. Needs the settings.manage permission. Needs the policies plan feature. Needs a live plan. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

204 Done, with no content.

GET /v1/budgets/{id} Get a budget and how it stands

A signed-in session, or an API key or OAuth token with the expenses:read scope. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json Budget

PATCH /v1/budgets/{id} Change a budget

Only a signed-in session reaches this. Needs the settings.manage permission. Needs the policies plan feature. Needs a live plan. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body

application/json UpdateBudgetInput

Response

200 Success.

application/json Budget

business cards

POST /v1/business-cards Read a business card

POST /v1/documents/url with the type fixed: the same body, wait and answer. Bank and tax numbers are masked; POST /v1/documents/{id}/reveal opens them.

A signed-in session, or an API key or OAuth token with the documents:write scope. Needs the developer_api plan feature. Needs a live plan. Try it

Parameters

Idempotency-Keyheaderstring

Replaying a key returns the first record instead of creating, and charging for, a second. While the first request is still running, a retry answers 409 IDEMPOTENCY_IN_PROGRESS with a Retry-After, and is not charged. The same key on a different request answers 409 IDEMPOTENCY_CONFLICT.

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Request body

application/json SubmitDocumentInput

Response

201 Success.

application/json DocumentUpload

202 Accepted. The document is still being read.

application/json DocumentUpload

card layouts

GET /v1/card-layouts List saved statement layouts

Only a signed-in session reaches this. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json CardLayoutList

POST /v1/card-layouts Save a statement layout

Only a signed-in session reaches this. Needs the card_feeds plan feature. Needs a live plan. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Request body

application/json CardLayoutInput

Response

201 Success.

application/json CardLayout

DELETE /v1/card-layouts/{id} Delete a statement layout

Only a signed-in session reaches this. Needs a live plan. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Response

204 Done, with no content.

catalog imports

POST /v1/catalog-imports/spreadsheet Read a spreadsheet into CSV

For a .xls or .xlsx file sent straight to storage. It is read once and gone, and the rows come back to send to an import route.

Only a signed-in session reaches this. Needs the settings.manage permission. Needs a live plan. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body

application/json SpreadsheetUpload

Response

200 Success.

application/json SpreadsheetText

categories

GET /v1/categories List categories

A signed-in session, or an API key or OAuth token with the expenses:read scope. Try it

Parameters

qquerystring
enabledquerystring
typequeryEXPENSE COGS INCOME REFUND
originquerySYSTEM CUSTOM ACCOUNTING
headersquerystring
limitqueryinteger
cursorquerystring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json CategoryPage

POST /v1/categories Create a category

A signed-in session, or an API key or OAuth token with the expenses:write scope. Needs the settings.manage permission. Needs a live plan. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body

application/json CategoryInput

Response

201 Success.

application/json Category

DELETE /v1/categories/{id} Delete a category

A signed-in session, or an API key or OAuth token with the expenses:write scope. Needs the settings.manage permission. Needs a live plan. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

204 Done, with no content.

GET /v1/categories/{id} Get a category

A signed-in session, or an API key or OAuth token with the expenses:read scope. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json Category

PATCH /v1/categories/{id} Change a category

A signed-in session, or an API key or OAuth token with the expenses:write scope. Needs the settings.manage permission. Needs a live plan. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body

application/json UpdateCategoryInput

Response

200 Success.

application/json Category

GET /v1/categories/{id}/access See who has a category in their list

Nobody listed means everyone does.

Only a signed-in session reaches this. Needs the settings.manage permission. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json CategoryAccess

PUT /v1/categories/{id}/access Set who has a category in their list

An empty list gives it back to everyone.

Only a signed-in session reaches this. Needs the settings.manage permission. Needs a live plan. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body

application/json CategoryAccessInput

Response

200 Success.

application/json CategoryAccess

POST /v1/categories/import Import categories from CSV

Send the CSV as text/plain, or as JSON with a csv field. Rows that match an existing category update it. Columns: Name, Enabled, GL code, Payroll code, Comment required, Comment hint, Max expense. With mode=replace the list becomes what the file says: a category it leaves out is deleted, or turned off if something uses it, and a file with a row it cannot read changes nothing.

A signed-in session, or an API key or OAuth token with the expenses:write scope. Needs the settings.manage permission. Needs a live plan. Try it

Parameters

modequerymerge replace
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body

application/json CatalogImportInput

Response

201 Success.

application/json CatalogImportResult

chat

GET /v1/chat/flags List flagged messages

Only a signed-in session reaches this. Needs the settings.manage permission. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Response

200 Success.

application/json MessageFlagList

GET /v1/chat/people Find people to talk to

Only a signed-in session reaches this. Try it

Parameters

qquerystring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Response

200 Success.

application/json ChatPersonList

POST /v1/chat/preferences Change how the chat list is ordered

Only a signed-in session reaches this. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Request body (optional)

application/json ChatPreferenceInput

Response

200 Success.

application/json ChatPreference

POST /v1/chat/restrictions Stop someone posting in chat

Only a signed-in session reaches this. Needs the settings.manage permission. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Request body (optional)

application/json RestrictSenderInput

Response

204 Done, with no content.

DELETE /v1/chat/restrictions/{userId} Let someone post in chat again

Only a signed-in session reaches this. Needs the settings.manage permission. Needs a live plan. Try it

Parameters

userId requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Response

204 Done, with no content.

GET /v1/chat/stream Follow chat as it happens

Server-sent events, one chat event for each change. What comes down is ids, and no text but Concierge's words to the person asking: re-read through the other routes, which check access. The stream ends after a while, so reconnect with the last event id, and what was missed comes first. Polling messages keeps working when a stream cannot.

Only a signed-in session reaches this. Try it

Parameters

lastEventIdquerystring

The same as the Last-Event-ID header.

Last-Event-IDheaderstring

The id of the last event this client received, sent again on reconnecting so the events missed since come first.

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Response

200 A stream of server-sent events.

text/event-stream string

GET /v1/chat/threads Open the thread on a report or an expense

Send reportId or expenseId.

Only a signed-in session reaches this. Try it

Parameters

reportIdquerystring
expenseIdquerystring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Response

200 Success.

application/json Room

check with document

POST /v1/check-with-document Read a check with its remittance

Two documents, read apart: the check, and what came with it.

A signed-in session, or an API key or OAuth token with the documents:write scope. Needs the developer_api plan feature. Needs a live plan. Try it

Parameters

Idempotency-Keyheaderstring

Replaying a key returns the first record instead of creating, and charging for, a second. While the first request is still running, a retry answers 409 IDEMPOTENCY_IN_PROGRESS with a Retry-After, and is not charged. The same key on a different request answers 409 IDEMPOTENCY_CONFLICT.

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Request body

application/json CheckWithDocumentInput

Response

201 Success.

application/json CheckWithDocument

202 Accepted. One or both are still being read.

application/json CheckWithDocument

checks

POST /v1/checks Read a bank check

POST /v1/documents/url with the type fixed: the same body, wait and answer. Bank and tax numbers are masked; POST /v1/documents/{id}/reveal opens them.

A signed-in session, or an API key or OAuth token with the documents:write scope. Needs the developer_api plan feature. Needs a live plan. Try it

Parameters

Idempotency-Keyheaderstring

Replaying a key returns the first record instead of creating, and charging for, a second. While the first request is still running, a retry answers 409 IDEMPOTENCY_IN_PROGRESS with a Retry-After, and is not charged. The same key on a different request answers 409 IDEMPOTENCY_CONFLICT.

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Request body

application/json SubmitDocumentInput

Response

201 Success.

application/json DocumentUpload

202 Accepted. The document is still being read.

application/json DocumentUpload

POST /v1/checks/async Read a bank check in the background

POST /v1/documents/url with the type fixed: the same body, wait and answer. Bank and tax numbers are masked; POST /v1/documents/{id}/reveal opens them.

A signed-in session, or an API key or OAuth token with the documents:write scope. Needs the developer_api plan feature. Needs a live plan. Try it

Parameters

Idempotency-Keyheaderstring

Replaying a key returns the first record instead of creating, and charging for, a second. While the first request is still running, a retry answers 409 IDEMPOTENCY_IN_PROGRESS with a Retry-After, and is not charged. The same key on a different request answers 409 IDEMPOTENCY_CONFLICT.

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Request body

application/json SubmitDocumentInput

Response

201 Success.

application/json DocumentUpload

clients

GET /v1/clients GET /v1/clients

A signed-in session, or an API key or OAuth token with the expenses:read scope. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

POST /v1/clients POST /v1/clients

A signed-in session, or an API key or OAuth token with the expenses:write scope. Needs the settings.manage permission. Needs a live plan. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

DELETE /v1/clients/{id} DELETE /v1/clients/:id

A signed-in session, or an API key or OAuth token with the expenses:write scope. Needs the settings.manage permission. Needs a live plan. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

GET /v1/clients/{id} GET /v1/clients/:id

A signed-in session, or an API key or OAuth token with the expenses:read scope. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

PATCH /v1/clients/{id} PATCH /v1/clients/:id

A signed-in session, or an API key or OAuth token with the expenses:write scope. Needs the settings.manage permission. Needs a live plan. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

contacts

GET /v1/contacts List contacts

A signed-in session, or an API key or OAuth token with the contacts:read scope. Try it

Parameters

qquerystring
documentIdquerystring
namequerystring
companyquerystring
emailquerystring
phonequerystring
websitequerystring
cityquerystring
regionquerystring
postalCodequerystring
countryquerystring
limitqueryinteger
cursorquerystring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json ContactPage

POST /v1/contacts Add a contact

Only a signed-in session reaches this. Needs the business_cards plan feature. Needs a live plan. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Request body

application/json CreateContactInput

Response

201 Success.

application/json Contact

DELETE /v1/contacts/{id} Delete a contact

Only a signed-in session reaches this. Needs a live plan. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Response

204 Done, with no content.

GET /v1/contacts/{id} Get a contact

A signed-in session, or an API key or OAuth token with the contacts:read scope. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json Contact

PATCH /v1/contacts/{id} Change a contact

A field changed here stays when the card is read again.

Only a signed-in session reaches this. Needs the business_cards plan feature. Needs a live plan. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Request body

application/json UpdateContactInput

Response

200 Success.

application/json Contact

GET /v1/contacts/{id}/vcard Download a contact as a vCard

A signed-in session, or an API key or OAuth token with the contacts:read scope. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

text/vcard string (binary)

POST /v1/contacts/export Export contacts as vCard or CSV

A signed-in session, or an API key or OAuth token with the contacts:read scope. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Request body

application/json ContactExportInput

Response

200 Success.

text/vcard string (binary)

text/csv string (binary)

custom fields

GET /v1/custom-fields List custom fields

A signed-in session, or an API key or OAuth token with the expenses:read scope. Try it

Parameters

limitqueryinteger
cursorquerystring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json CustomFieldPage

POST /v1/custom-fields Create a custom field

Only a signed-in session reaches this. Needs the settings.manage permission. Needs the custom_fields plan feature. Needs a live plan. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body

application/json CustomFieldInput

Response

201 Success.

application/json CustomField

DELETE /v1/custom-fields/{id} Delete a custom field

Only a signed-in session reaches this. Needs the settings.manage permission. Needs the custom_fields plan feature. Needs a live plan. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

204 Done, with no content.

GET /v1/custom-fields/{id} Get a custom field

A signed-in session, or an API key or OAuth token with the expenses:read scope. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json CustomField

PATCH /v1/custom-fields/{id} Change a custom field

Only a signed-in session reaches this. Needs the settings.manage permission. Needs the custom_fields plan feature. Needs a live plan. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body

application/json UpdateCustomFieldInput

Response

200 Success.

application/json CustomField

delegations

GET /v1/delegations List who can act for whom

Only a signed-in session reaches this. Try it

Parameters

limitqueryinteger
cursorquerystring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json DelegationPage

POST /v1/delegations Name a delegate

Acting for someone then takes the X-Act-As header.

Only a signed-in session reaches this. Needs a live plan. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Request body

application/json CreateDelegationInput

Response

201 Success.

application/json DelegationCreated

DELETE /v1/delegations/{id} End a delegation

It stops working on the next request. This works on a lapsed plan.

Only a signed-in session reaches this. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Response

204 Done, with no content.

PATCH /v1/delegations/{id} Change a delegation

Only a signed-in session reaches this. Needs a live plan. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Request body

application/json UpdateDelegationInput

Response

200 Success.

application/json Delegation

devices

DELETE /v1/devices Remove a device from push

Send the token in the body, or in the token query for a client that cannot send a body on DELETE.

Only a signed-in session reaches this. Try it

Parameters

tokenquerystring

The push token, for a client that cannot send a body on DELETE.

Request body (optional)

application/json RemoveDeviceInput

Response

204 Done, with no content.

POST /v1/devices Register a device for push

Only a signed-in session reaches this. Try it

Request body

application/json RegisterDeviceInput

Response

204 Done, with no content.

document settings

GET /v1/document-settings Get how this workspace reads and files documents

Only a signed-in session reaches this. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json DocumentSettings

PATCH /v1/document-settings Change how this workspace reads and files documents

Only a signed-in session reaches this. Needs the settings.manage permission. Needs a live plan. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body

application/json UpdateDocumentSettingsInput

Response

200 Success.

application/json DocumentSettings

DELETE /v1/document-settings/s3 Disconnect the workspace's own S3 bucket

Only a signed-in session reaches this. Needs the security.manage permission. Needs a live plan. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json DocumentSettings

PUT /v1/document-settings/s3 Connect the workspace's own S3 bucket

The secret is sealed when it arrives, and no route gives it back.

Only a signed-in session reaches this. Needs the security.manage permission. Needs a live plan. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body

application/json S3AccessInput

Response

200 Success.

application/json DocumentSettings

document shares

GET /v1/document-shares List documents shared with or by the caller

Only a signed-in session reaches this. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Response

200 Success.

application/json DocumentShareList

POST /v1/document-shares Share documents with someone

Answers with every share it made.

Only a signed-in session reaches this. Needs a live plan. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Request body (optional)

application/json CreateDocumentShareInput

Response

201 Success.

application/json DocumentShareList

DELETE /v1/document-shares/{id} Take a share back

Open on a lapsed plan: it only ever closes something.

Only a signed-in session reaches this. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Response

204 Done, with no content.

POST /v1/document-shares/{id}/accept Accept a shared document

Only a signed-in session reaches this. Needs a live plan. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Response

200 Success.

application/json DocumentShare

documents

GET /v1/documents List documents

Ranges take __gt, __gte, __lt and __lte on created, updated, issued, total and tax: created__gte=2026-01-01, total__lt=5000. Issued, total and tax are what the document's expense holds, with whatever a person corrected, and a document with no expense has none. A day covers all of itself. order_by sorts, and a leading minus sorts down: -total. A document with no value comes last either way. A cursor resumes the created order only, so any other order pages with offset or page. is_empty names fields that must be empty. q searches the title, file name, notes, OCR text and extracted fields in any case; with an asterisk it searches the OCR text and extracted fields, case sensitive, and returns at most the newest 5,000 matches.

A signed-in session, or an API key or OAuth token with the documents:read scope. Try it

Parameters

typequeryRECEIPT INVOICE BILL BANK_STATEMENT CHECK TAX_FORM BUSINESS_CARD OTHER UNKNOWN PURCHASE_ORDER CONTRACT PACKING_SLIP REMITTANCE_ADVICE CREDIT_NOTE STATEMENT
statusqueryUPLOADED PROCESSING PROCESSED FAILED
sourcequeryWEB IOS ANDROID EMAIL API MAIL_IN INTEGRATION
source_idquerystring
external_idquerystring
blueprint_namequerystring
ownerquerystring
device_idquerystring
device_user_uuidquerystring
viewedqueryboolean
trashedqueryboolean
envelopequerystring
created__gtquerystring or string (date-time)
created__gtequerystring or string (date-time)
created__ltquerystring or string (date-time)
created__ltequerystring or string (date-time)
updated__gtquerystring or string (date-time)
updated__gtequerystring or string (date-time)
updated__ltquerystring or string (date-time)
updated__ltequerystring or string (date-time)
issuedquerystring
issued__gtquerystring
issued__gtequerystring
issued__ltquerystring
issued__ltequerystring
totalqueryinteger
total__gtqueryinteger
total__gtequeryinteger
total__ltqueryinteger
total__ltequeryinteger
taxqueryinteger
tax__gtqueryinteger
tax__gtequeryinteger
tax__ltqueryinteger
tax__ltequeryinteger
currencyquerystring
categoryquerystring
vendorquerystring
notesquerystring
payment_typequeryCASH PERSONAL_CARD COMPANY_CARD BANK_TRANSFER CHECK PAYPAL OTHER
last_four_digitsquerystring
first_namequerystring
last_namequerystring
work_phonequerystring
cell_phonequerystring
companyquerystring
emailquerystring
websitequerystring
countryquerystring
statequerystring
cityquerystring
zipquerystring
namequerystring
is_emptyquerystring
order_byquerycreated updated issued total tax -created -updated -issued -total -tax
folderIdquerystring
mailInBatchIdquerystring
setIdquerystring
externalIdquerystring
tagquerystring
archivedqueryboolean
unviewedqueryboolean
qquerystring
fromquerystring
toquerystring
fraudColorqueryGREEN YELLOW RED
fraudSignalquerydigital_tampering fraudulent_pdf fraudulent_image generated_document ai_generated lcd_photo screenshot digital_background not_a_document duplicate similar_documents handwritten_characters invalid_qr_data invalid_mrz_data suspicious_content data_inconsistency vendor_layout_mismatch total_in_words_mismatch aspect_ratio_mismatch high_velocity critical_velocity multiple_profiles_or_devices fraud_history blocked_device other
fraudReviewqueryPENDING FRAUD NOT_FRAUD UNKNOWN
limitqueryinteger
cursorquerystring
offsetqueryinteger
pagequeryinteger
page_sizequeryinteger
track_total_resultsqueryboolean
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json DocumentList

POST /v1/documents Upload a file

Multipart, or JSON naming an uploadId from POST /v1/uploads. The file's type comes from its bytes. Use a JPEG, PNG, WebP, HEIC, TIFF, PDF, DOCX, XLSX, CSV, TXT, HTML, EML or ZIP file. Up to 25 MB, or 50 MB for a PDF sent to be split into a set of documents. Reads best at 300 DPI for a PDF and 1000 pixels on the shorter side of an image. A ZIP unpacks into one document per file, up to 200 files and 200 MB, and each file counts against the plan. A ZIP inside a ZIP is refused. With a key this waits for the reading and answers with it, unless async is set. Name a type, or leave it out and the classifier says what it is.

A signed-in session, or an API key or OAuth token with the documents:write scope. Needs a live plan. Try it

Parameters

clientqueryios android

The app sending the file. Leave it out in a browser.

Idempotency-Keyheaderstring

Replaying a key returns the first record instead of creating, and charging for, a second. While the first request is still running, a retry answers 409 IDEMPOTENCY_IN_PROGRESS with a Retry-After, and is not charged. The same key on a different request answers 409 IDEMPOTENCY_CONFLICT.

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body

multipart/form-data

file requiredstring (binary)
tagsarray of string
categoriesarray of string
taxonomyarray of string
allowed_async_enrichmentsarray of duplicates similar_documents line_item_expansion line_item_categorization line_item_custom_categorization xero_line_coding address_parsing fraud rules vendor_resolution
bounding_boxesboolean
confidence_detailsboolean
computeboolean
parse_addressboolean
countrystring
max_pages_to_processinteger
boost_modeboolean
auto_deleteboolean
stitchboolean
crop_documentboolean
blueprint_namestring
blueprint_versioninteger
asyncboolean
line_item_expansionboolean
tiff_dpinumber
typeRECEIPT INVOICE BILL BANK_STATEMENT CHECK TAX_FORM BUSINESS_CARD OTHER UNKNOWN PURCHASE_ORDER CONTRACT PACKING_SLIP REMITTANCE_ADVICE CREDIT_NOTE STATEMENT
clientIdstring
externalIdstring
folderIdstring
notesstring
capturedAtstring (date-time)
latitudenumber
longitudenumber
locationAccuracyMnumber
deviceIdstring
merchantNamestring
datestring
totalMinorinteger
taxMinorinteger
categorystring

application/json

uploadId requiredstring

From POST /v1/uploads, once the file has been sent to the URL it answered with.

tagsarray of string
categoriesarray of string
taxonomyarray of string
allowed_async_enrichmentsarray of duplicates similar_documents line_item_expansion line_item_categorization line_item_custom_categorization xero_line_coding address_parsing fraud rules vendor_resolution
bounding_boxesboolean
confidence_detailsboolean
computeboolean
parse_addressboolean
countrystring
max_pages_to_processinteger
boost_modeboolean
auto_deleteboolean
stitchboolean
crop_documentboolean
blueprint_namestring
blueprint_versioninteger
asyncboolean
line_item_expansionboolean
tiff_dpinumber
typeRECEIPT INVOICE BILL BANK_STATEMENT CHECK TAX_FORM BUSINESS_CARD OTHER UNKNOWN PURCHASE_ORDER CONTRACT PACKING_SLIP REMITTANCE_ADVICE CREDIT_NOTE STATEMENT
clientIdstring
externalIdstring
folderIdstring
notesstring
capturedAtstring (date-time)
latitudenumber
longitudenumber
locationAccuracyMnumber
deviceIdstring
merchantNamestring
datestring
totalMinorinteger
taxMinorinteger
categorystring

Response

201 Success.

application/json DocumentUpload

DELETE /v1/documents/{id} Delete a document

A signed-in session, or an API key or OAuth token with the documents:write scope. Needs a live plan. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

204 Done, with no content.

GET /v1/documents/{id} Get a document and its extraction

Links are signed again on every read, with no new reading. detailed=true adds the reading with each field wrapped as value, score, ocrScore, rotation, boundingBox, boundingRegion and enriched. with_scores=true adds lineItemsWithScores and taxLinesWithScores. recordStatus says processed, reviewed or archived. bounding_boxes=true adds every line read with its box and four corners, and where each field was read from: boundingBox as [page, x1, y1, x2, y2] and boundingRegion as [x1, y1, x2, y2, x3, y3, x4, y4], both as fractions of the page. confidence_details=true adds how sure the read of each field was. Both can be sent on a submission too.

A signed-in session, or an API key or OAuth token with the documents:read scope. Try it

Parameters

id requiredpathstring
bounding_boxesqueryboolean
confidence_detailsqueryboolean
detailedqueryboolean
with_scoresqueryboolean
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json DocumentDetail

PATCH /v1/documents/{id} Change a document

status REVIEWED marks it checked, approved sets your own flag, fraudReview records a decision, and billable, merchantName and the totals change its expense, under the rules of PATCH /v1/expenses/{id}. What can be refused is checked first, so nothing changes when any of it is.

A signed-in session, or an API key or OAuth token with the documents:write scope. Needs a live plan. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body

application/json UpdateDocumentInput

Response

200 Success.

application/json Document

PUT /v1/documents/{id} Change a document, for a client written for PUT

The same as PATCH: it changes what the body names and nothing else.

A signed-in session, or an API key or OAuth token with the documents:write scope. Needs a live plan. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body

application/json UpdateDocumentInput

Response

200 Success.

application/json Document

POST /v1/documents/{id}/cancel Stop reading a document

For filling in the details by hand. The file stays, and it can be read again.

A signed-in session, or an API key or OAuth token with the documents:write scope. Needs a live plan. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json Document

POST /v1/documents/{id}/crop Crop a photo

A box as fractions of the page as it shows now. The original stays as it came: a new page is drawn from it and read again, and it stays cropped through every later read. Only images can be cropped.

A signed-in session, or an API key or OAuth token with the documents:write scope. Needs a live plan. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body

application/json CropDocumentInput

Response

200 Success.

application/json Document

POST /v1/documents/{id}/fraud-review Record a person's decision on a document

Fraud, not fraud or unknown, with the signals they agree with. A re-read replaces the evidence and leaves this alone. Nobody decides on their own upload except the workspace owner.

A signed-in session, or an API key or OAuth token with the documents:write scope. Needs a live plan. Refuses a delegate on limited access. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body

application/json FraudReviewInput

Response

200 Success.

application/json Document

DELETE /v1/documents/{id}/line-items Delete every line item

The total stays as the receipt printed it.

A signed-in session, or an API key or OAuth token with the documents:write scope. Needs a live plan. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

204 Done, with no content.

GET /v1/documents/{id}/line-items List a document's line items

A signed-in session, or an API key or OAuth token with the documents:read scope. Try it

Parameters

id requiredpathstring
limitqueryinteger
cursorquerystring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json ExpenseLinePage

POST /v1/documents/{id}/line-items Add a line item

The lines of the document's expense. When they added up to its total, a change to one moves the total and the converted amount with it. Refused once the expense is on a submitted report.

A signed-in session, or an API key or OAuth token with the documents:write scope. Needs a live plan. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body

application/json ExpenseLineInput

Response

201 Success.

application/json ExpenseLine

DELETE /v1/documents/{id}/line-items/{lineId} Delete a line item

The lines of the document's expense. When they added up to its total, a change to one moves the total and the converted amount with it. Refused once the expense is on a submitted report.

A signed-in session, or an API key or OAuth token with the documents:write scope. Needs a live plan. Try it

Parameters

id requiredpathstring
lineId requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

204 Done, with no content.

GET /v1/documents/{id}/line-items/{lineId} Get a line item

A signed-in session, or an API key or OAuth token with the documents:read scope. Try it

Parameters

id requiredpathstring
lineId requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json ExpenseLine

PATCH /v1/documents/{id}/line-items/{lineId} Change a line item

The lines of the document's expense. When they added up to its total, a change to one moves the total and the converted amount with it. Refused once the expense is on a submitted report.

A signed-in session, or an API key or OAuth token with the documents:write scope. Needs a live plan. Try it

Parameters

id requiredpathstring
lineId requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body

application/json UpdateExpenseLineInput

Response

200 Success.

application/json ExpenseLine

GET /v1/documents/{id}/ofx Download a bank statement as OFX

OFX 1.0.2, the file accounting software and personal finance programs import, from the latest reading of a bank statement: the rules' reading, Claude's, or the bank_statement blueprint's. Each account on the statement gets its own transactions, with FITIDs that stay the same each time. Account and routing numbers are masked, so match the file to an account when importing it. A document that is not a statement, or one with nothing read from it, answers 409 saying which.

A signed-in session, or an API key or OAuth token with the documents:read scope. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/x-ofx string (binary)

GET /v1/documents/{id}/original Get a short-lived link to the original file

A signed-in session, or an API key or OAuth token with the documents:read scope. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json DocumentOriginal

GET /v1/documents/{id}/pdf Download a document as a PDF

A file that already is a PDF answers 302 to a short-lived link on storage, so follow the redirect, without your Authorization header. Anything else is built on the spot and comes back here.

A signed-in session, or an API key or OAuth token with the documents:read scope. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/pdf string (binary)

POST /v1/documents/{id}/reprocess Read a document again

Fields a person changed are left alone.

A signed-in session, or an API key or OAuth token with the documents:write scope. Needs a live plan. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

201 Success.

application/json Document

POST /v1/documents/{id}/reveal Open the bank and tax numbers read from a document

Needs the documents.reveal permission and, for a key, the documents:reveal scope. Every call writes an audit row. Also returns a link to the original file and, for a check, its TIFF images. Nothing else hands these out.

A signed-in session, or an API key or OAuth token with the documents:reveal scope. Needs the documents.reveal permission. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Request body (optional)

application/json RevealDocumentInput

Response

200 Success.

application/json RevealedDocument

POST /v1/documents/{id}/rotate Turn a page

A quarter turn, counter-clockwise by default. The original stays as it came: a new page is drawn from it and read again, and it stays turned through every later read.

A signed-in session, or an API key or OAuth token with the documents:write scope. Needs a live plan. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body (optional)

application/json RotateDocumentInput

Response

200 Success.

application/json Document

POST /v1/documents/{id}/split Split a PDF already uploaded

Every page, or the ranges given. Each part is a document and counts as a scan, and the whole goes to the trash once the parts exist.

A signed-in session, or an API key or OAuth token with the documents:write scope. Needs a live plan. Try it

Parameters

id requiredpathstring
clientqueryios android

The app sending the file. Leave it out in a browser.

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body

application/json SplitDocumentInput

Response

202 Success.

application/json DocumentSet

DELETE /v1/documents/{id}/tags Take every tag off a document

A signed-in session, or an API key or OAuth token with the documents:write scope. Needs a live plan. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

204 Done, with no content.

GET /v1/documents/{id}/tags List a document's tags

Any type of document: receipts, checks, bank statements, business cards, contracts, tax forms and the rest.

A signed-in session, or an API key or OAuth token with the documents:read scope. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json DocumentTagList

POST /v1/documents/{id}/tags Add several tags to a document

A signed-in session, or an API key or OAuth token with the documents:write scope. Needs a live plan. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body

application/json DocumentTagsInput

Response

200 Success.

application/json DocumentTagList

PUT /v1/documents/{id}/tags Add a tag to a document

By name. A name the workspace does not have makes the tag. Adding one it already has changes nothing.

A signed-in session, or an API key or OAuth token with the documents:write scope. Needs a live plan. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body

application/json DocumentTagInput

Response

200 Success.

application/json DocumentTagList

DELETE /v1/documents/{id}/tags/{tagId} Take a tag off a document

The tag stays in the workspace.

A signed-in session, or an API key or OAuth token with the documents:write scope. Needs a live plan. Try it

Parameters

id requiredpathstring
tagId requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

204 Done, with no content.

GET /v1/documents/{id}/tax-lines List a document's tax lines

A signed-in session, or an API key or OAuth token with the documents:read scope. Try it

Parameters

id requiredpathstring
limitqueryinteger
cursorquerystring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json ExpenseTaxLinePage

POST /v1/documents/{id}/tax-lines Add a tax line

The expense's tax is the sum of its tax lines. When its total was what is under the tax and on top of it, the total moves with the tax. Refused once the expense is on a submitted report.

A signed-in session, or an API key or OAuth token with the documents:write scope. Needs a live plan. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body

application/json ExpenseTaxLineInput

Response

201 Success.

application/json ExpenseTaxLine

DELETE /v1/documents/{id}/tax-lines/{taxLineId} Delete a tax line

The expense's tax is the sum of its tax lines. When its total was what is under the tax and on top of it, the total moves with the tax. Refused once the expense is on a submitted report.

A signed-in session, or an API key or OAuth token with the documents:write scope. Needs a live plan. Try it

Parameters

id requiredpathstring
taxLineId requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

204 Done, with no content.

GET /v1/documents/{id}/tax-lines/{taxLineId} Get a tax line

A signed-in session, or an API key or OAuth token with the documents:read scope. Try it

Parameters

id requiredpathstring
taxLineId requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json ExpenseTaxLine

PATCH /v1/documents/{id}/tax-lines/{taxLineId} Change a tax line

The expense's tax is the sum of its tax lines. When its total was what is under the tax and on top of it, the total moves with the tax. Refused once the expense is on a submitted report.

A signed-in session, or an API key or OAuth token with the documents:write scope. Needs a live plan. Try it

Parameters

id requiredpathstring
taxLineId requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body

application/json UpdateExpenseTaxLineInput

Response

200 Success.

application/json ExpenseTaxLine

GET /v1/documents/{id}/text Get the text read from a document

A signed-in session, or an API key or OAuth token with the documents:read scope. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json DocumentText

POST /v1/documents/{id}/viewed Mark a document as viewed

Reading is not a change to the record, so this stays open after a plan lapses.

Only a signed-in session reaches this. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

204 Done, with no content.

POST /v1/documents/any Read a document with a blueprint

Multipart with a field named file, or JSON with uploadId, file_url or file_data. The answer is in blueprint.result. Without a Claude key on the server, blueprint.error says so and the text is still read. 20 pages by default and 50 at most.

A signed-in session, or an API key or OAuth token with the documents:write scope. Needs the developer_api plan feature. Needs a live plan. Try it

Parameters

Idempotency-Keyheaderstring

Replaying a key returns the first record instead of creating, and charging for, a second. While the first request is still running, a retry answers 409 IDEMPOTENCY_IN_PROGRESS with a Retry-After, and is not charged. The same key on a different request answers 409 IDEMPOTENCY_CONFLICT.

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body

multipart/form-data

file requiredstring (binary)
external_idstring
asyncboolean
tagsarray of string
auto_deleteboolean
blueprint_name requiredstring
blueprint_versioninteger
max_pages_to_processinteger

application/json

Name the file with one of uploadId, file_url or file_data.

uploadIdstring

From POST /v1/uploads, once the file has been sent to the URL it answered with.

file_urlstring

A public https address to fetch the file from. Redirects are not followed.

file_datastring

The file itself in base64, raw or as a data URI.

file_namestring

What to call a file sent as file_url or file_data.

external_idstring
asyncboolean
tagsarray of string
auto_deleteboolean
blueprint_name requiredstring
blueprint_versioninteger
max_pages_to_processinteger

Response

201 Success.

application/json Document

POST /v1/documents/any/async Read a document with a blueprint, in the background

Multipart with a field named file, or JSON with uploadId, file_url or file_data. Answers at once. document.processed says when it is done.

A signed-in session, or an API key or OAuth token with the documents:write scope. Needs the developer_api plan feature. Needs a live plan. Try it

Parameters

Idempotency-Keyheaderstring

Replaying a key returns the first record instead of creating, and charging for, a second. While the first request is still running, a retry answers 409 IDEMPOTENCY_IN_PROGRESS with a Retry-After, and is not charged. The same key on a different request answers 409 IDEMPOTENCY_CONFLICT.

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body

multipart/form-data

file requiredstring (binary)
external_idstring
asyncboolean
tagsarray of string
auto_deleteboolean
blueprint_name requiredstring
blueprint_versioninteger
max_pages_to_processinteger

application/json

Name the file with one of uploadId, file_url or file_data.

uploadIdstring

From POST /v1/uploads, once the file has been sent to the URL it answered with.

file_urlstring

A public https address to fetch the file from. Redirects are not followed.

file_datastring

The file itself in base64, raw or as a data URI.

file_namestring

What to call a file sent as file_url or file_data.

external_idstring
asyncboolean
tagsarray of string
auto_deleteboolean
blueprint_name requiredstring
blueprint_versioninteger
max_pages_to_processinteger

Response

202 Success.

application/json Document

POST /v1/documents/batch Submit up to 100 addresses at once

Answers at once with a set. Each address becomes a document with its own webhook, and an address that fails is listed under refused without stopping the rest.

A signed-in session, or an API key or OAuth token with the documents:write scope. Needs the developer_api plan feature. Needs a live plan. Try it

Parameters

Idempotency-Keyheaderstring

Replaying a key returns the first record instead of creating, and charging for, a second. While the first request is still running, a retry answers 409 IDEMPOTENCY_IN_PROGRESS with a Retry-After, and is not charged. The same key on a different request answers 409 IDEMPOTENCY_CONFLICT.

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body

application/json BatchDocumentsInput

Response

202 Success.

application/json DocumentSet

POST /v1/documents/bulk Act on many documents

Send ids, or a filter to act on everything that matches. With a filter, call again with nextCursor until it is null.

A signed-in session, or an API key or OAuth token with the documents:write scope. Needs a live plan. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body

application/json BulkDocumentInput

Response

200 Success.

application/json BulkDocumentResult

POST /v1/documents/classify Say what a document is

Multipart with a field named file, or JSON with uploadId, file_url or file_data. Answers with a value and a score, from the built-in list or from document_types. It works with no Claude key for the common types, and Claude only decides what the rules cannot.

A signed-in session, or an API key or OAuth token with the documents:write scope. Needs the developer_api plan feature. Needs a live plan. Try it

Parameters

Idempotency-Keyheaderstring

Replaying a key returns the first record instead of creating, and charging for, a second. While the first request is still running, a retry answers 409 IDEMPOTENCY_IN_PROGRESS with a Retry-After, and is not charged. The same key on a different request answers 409 IDEMPOTENCY_CONFLICT.

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body

multipart/form-data

file requiredstring (binary)
external_idstring
asyncboolean
tagsarray of string
auto_deleteboolean
document_typesarray of string

application/json

Name the file with one of uploadId, file_url or file_data.

uploadIdstring

From POST /v1/uploads, once the file has been sent to the URL it answered with.

file_urlstring

A public https address to fetch the file from. Redirects are not followed.

file_datastring

The file itself in base64, raw or as a data URI.

file_namestring

What to call a file sent as file_url or file_data.

external_idstring
asyncboolean
tagsarray of string
auto_deleteboolean
document_typesarray of string

Response

201 Success.

application/json Classification

GET /v1/documents/count Count the documents a filter matches

A signed-in session, or an API key or OAuth token with the documents:read scope. Try it

Parameters

typequeryRECEIPT INVOICE BILL BANK_STATEMENT CHECK TAX_FORM BUSINESS_CARD OTHER UNKNOWN PURCHASE_ORDER CONTRACT PACKING_SLIP REMITTANCE_ADVICE CREDIT_NOTE STATEMENT
statusqueryUPLOADED PROCESSING PROCESSED FAILED
sourcequeryWEB IOS ANDROID EMAIL API MAIL_IN INTEGRATION
source_idquerystring
external_idquerystring
blueprint_namequerystring
ownerquerystring
device_idquerystring
device_user_uuidquerystring
viewedqueryboolean
trashedqueryboolean
envelopequerystring
created__gtquerystring or string (date-time)
created__gtequerystring or string (date-time)
created__ltquerystring or string (date-time)
created__ltequerystring or string (date-time)
updated__gtquerystring or string (date-time)
updated__gtequerystring or string (date-time)
updated__ltquerystring or string (date-time)
updated__ltequerystring or string (date-time)
issuedquerystring
issued__gtquerystring
issued__gtequerystring
issued__ltquerystring
issued__ltequerystring
totalqueryinteger
total__gtqueryinteger
total__gtequeryinteger
total__ltqueryinteger
total__ltequeryinteger
taxqueryinteger
tax__gtqueryinteger
tax__gtequeryinteger
tax__ltqueryinteger
tax__ltequeryinteger
currencyquerystring
categoryquerystring
vendorquerystring
notesquerystring
payment_typequeryCASH PERSONAL_CARD COMPANY_CARD BANK_TRANSFER CHECK PAYPAL OTHER
last_four_digitsquerystring
first_namequerystring
last_namequerystring
work_phonequerystring
cell_phonequerystring
companyquerystring
emailquerystring
websitequerystring
countryquerystring
statequerystring
cityquerystring
zipquerystring
namequerystring
is_emptyquerystring
order_byquerycreated updated issued total tax -created -updated -issued -total -tax
folderIdquerystring
mailInBatchIdquerystring
setIdquerystring
externalIdquerystring
tagquerystring
archivedqueryboolean
unviewedqueryboolean
qquerystring
fromquerystring
toquerystring
fraudColorqueryGREEN YELLOW RED
fraudSignalquerydigital_tampering fraudulent_pdf fraudulent_image generated_document ai_generated lcd_photo screenshot digital_background not_a_document duplicate similar_documents handwritten_characters invalid_qr_data invalid_mrz_data suspicious_content data_inconsistency vendor_layout_mismatch total_in_words_mismatch aspect_ratio_mismatch high_velocity critical_velocity multiple_profiles_or_devices fraud_history blocked_device other
fraudReviewqueryPENDING FRAUD NOT_FRAUD UNKNOWN
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json DocumentCount

POST /v1/documents/extract Say what a document is and read it, in one call

Multipart with a field named file, or JSON with uploadId, file_url or file_data. document_types may name built-in types and blueprints. Answers with extraction, or extraction_error when it could not be read.

A signed-in session, or an API key or OAuth token with the documents:write scope. Needs the developer_api plan feature. Needs a live plan. Try it

Parameters

Idempotency-Keyheaderstring

Replaying a key returns the first record instead of creating, and charging for, a second. While the first request is still running, a retry answers 409 IDEMPOTENCY_IN_PROGRESS with a Retry-After, and is not charged. The same key on a different request answers 409 IDEMPOTENCY_CONFLICT.

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body

multipart/form-data

file requiredstring (binary)
external_idstring
asyncboolean
tagsarray of string
auto_deleteboolean
document_typesarray of string

application/json

Name the file with one of uploadId, file_url or file_data.

uploadIdstring

From POST /v1/uploads, once the file has been sent to the URL it answered with.

file_urlstring

A public https address to fetch the file from. Redirects are not followed.

file_datastring

The file itself in base64, raw or as a data URI.

file_namestring

What to call a file sent as file_url or file_data.

external_idstring
asyncboolean
tagsarray of string
auto_deleteboolean
document_typesarray of string

Response

201 Success.

application/json Extraction

POST /v1/documents/split Split a PDF on storage into documents

The PDF named by uploadId, from POST /v1/uploads with purpose document_set, up to 50 MB. mode says where it is cut, and detect is the default. Each part is a document, counts as a scan and is held to 25 MB: a part past that is listed under refused, and the rest are filed.

A signed-in session, or an API key or OAuth token with the documents:write scope. Needs a live plan. Try it

Parameters

clientqueryios android

The app sending the file. Leave it out in a browser.

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body

application/json SplitUploadInput

Response

202 Success.

application/json DocumentSet

GET /v1/documents/trash List deleted documents

Each can be restored for 30 days.

A signed-in session, or an API key or OAuth token with the documents:read scope. Try it

Parameters

limitqueryinteger
cursorquerystring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json TrashedDocumentPage

POST /v1/documents/trash Restore deleted documents, or delete them for good

A signed-in session, or an API key or OAuth token with the documents:write scope. Needs a live plan. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body

application/json TrashActionInput

Response

200 Success.

application/json TrashActionResult

POST /v1/documents/url Submit a file by URL or base64

By default the call waits up to 30 seconds and returns the extraction with 201. With async: true, or if reading takes longer, it answers 202 and the document.processed webhook says when it is done. file_url must be public https; redirects are not followed. file_urls reads several images as one document, in order. bucket and package_path read from your own S3 bucket, with keys saved in document settings. Use a JPEG, PNG, WebP, HEIC, TIFF, PDF, DOCX, XLSX, CSV, TXT, HTML, EML or ZIP file. Up to 25 MB, or 50 MB for a PDF sent to be split into a set of documents. Reads best at 300 DPI for a PDF and 1000 pixels on the shorter side of an image. A ZIP unpacks into one document per file, up to 200 files and 200 MB, and each file counts against the plan. A ZIP inside a ZIP is refused.

A signed-in session, or an API key or OAuth token with the documents:write scope. Needs the developer_api plan feature. Needs a live plan. Try it

Parameters

Idempotency-Keyheaderstring

Replaying a key returns the first record instead of creating, and charging for, a second. While the first request is still running, a retry answers 409 IDEMPOTENCY_IN_PROGRESS with a Retry-After, and is not charged. The same key on a different request answers 409 IDEMPOTENCY_CONFLICT.

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body

application/json SubmitDocumentInput

Response

201 Success.

application/json DocumentUpload

202 Accepted. The document is still being read.

application/json DocumentUpload

documents set

GET /v1/documents-set List sets of documents

Includes ZIPs and batches of addresses.

A signed-in session, or an API key or OAuth token with the documents:read scope. Needs the developer_api plan feature. Needs a live plan. Try it

Parameters

limitqueryinteger
cursorquerystring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json DocumentSetPage

POST /v1/documents-set Split a PDF and read each document in it

Multipart with a field named file, or JSON with uploadId, file_url or file_data. Up to 250 pages and 50 MB. Answers at once. Each part fires document.processed and counts as a scan, and document_set.completed says when all are read.

A signed-in session, or an API key or OAuth token with the documents:write scope. Needs the developer_api plan feature. Needs a live plan. Try it

Parameters

Idempotency-Keyheaderstring

Replaying a key returns the first record instead of creating, and charging for, a second. While the first request is still running, a retry answers 409 IDEMPOTENCY_IN_PROGRESS with a Retry-After, and is not charged. The same key on a different request answers 409 IDEMPOTENCY_CONFLICT.

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Request body

multipart/form-data

file requiredstring (binary)
split_by_blank_pageboolean
every_pageboolean
rangesstring
document_typesarray of string
blueprint_namestring
external_idstring

application/json

Name the file with one of uploadId, file_url or file_data.

uploadIdstring

From POST /v1/uploads, once the file has been sent to the URL it answered with.

split_by_blank_pageboolean
every_pageboolean
rangesstring
document_typesarray of string
blueprint_namestring
file_urlstring

A public https address to fetch the file from. Redirects are not followed.

file_datastring

The file itself in base64, raw or as a data URI.

file_namestring

What to call a file sent as file_url or file_data.

external_idstring

Response

202 Success.

application/json DocumentSet

GET /v1/documents-set/{id} Get a set and the documents it made

A signed-in session, or an API key or OAuth token with the documents:read scope. Needs the developer_api plan feature. Needs a live plan. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json DocumentSet

domains

GET /v1/domains List the domains the caller runs

Only a signed-in session reaches this. Try it

Response

200 Success.

application/json DomainList

POST /v1/domains Claim a domain

The caller's verified sign-in address must be on it. Public mail domains are refused.

Only a signed-in session reaches this. Try it

Request body

application/json ClaimDomainInput

Response

201 Success.

application/json Domain

DELETE /v1/domains/{id} Give up a domain

Only a signed-in session reaches this. Try it

Parameters

id requiredpathstring

Response

204 Done, with no content.

GET /v1/domains/{id} Get a domain

Only a signed-in session reaches this. Try it

Parameters

id requiredpathstring

Response

200 Success.

application/json Domain

PATCH /v1/domains/{id} Change a domain

Only a signed-in session reaches this. Try it

Parameters

id requiredpathstring

Request body

application/json UpdateDomainInput

Response

200 Success.

application/json Domain

GET /v1/domains/{id}/access-requests List who has asked to help run a domain

Only a signed-in session reaches this. Try it

Parameters

id requiredpathstring

Response

200 Success.

application/json DomainAccessRequestList

POST /v1/domains/{id}/access-requests/{requestId} Answer a request to help run a domain

Only a signed-in session reaches this. Try it

Parameters

id requiredpathstring
requestId requiredpathstring

Request body

application/json DecideAccessInput

Response

204 Done, with no content.

GET /v1/domains/{id}/admins List domain admins

Only a signed-in session reaches this. Try it

Parameters

id requiredpathstring

Response

200 Success.

application/json DomainAdminList

POST /v1/domains/{id}/admins Add a domain admin

Only a signed-in session reaches this. Try it

Parameters

id requiredpathstring

Request body

application/json AddDomainAdminInput

Response

201 Success.

application/json DomainAdminList

DELETE /v1/domains/{id}/admins/{userId} Remove a domain admin

Only a signed-in session reaches this. Try it

Parameters

id requiredpathstring
userId requiredpathstring

Response

204 Done, with no content.

GET /v1/domains/{id}/groups List domain groups

Only a signed-in session reaches this. Try it

Parameters

id requiredpathstring

Response

200 Success.

application/json DomainGroupList

POST /v1/domains/{id}/groups Create a domain group

Only a signed-in session reaches this. Try it

Parameters

id requiredpathstring

Request body

application/json DomainGroupInput

Response

201 Success.

application/json DomainGroup

DELETE /v1/domains/{id}/groups/{groupId} Delete a domain group

Only a signed-in session reaches this. Try it

Parameters

id requiredpathstring
groupId requiredpathstring

Response

204 Done, with no content.

PATCH /v1/domains/{id}/groups/{groupId} Change a domain group

Only a signed-in session reaches this. Try it

Parameters

id requiredpathstring
groupId requiredpathstring

Request body

application/json DomainGroupInput

Response

200 Success.

application/json DomainGroup

PUT /v1/domains/{id}/groups/{groupId}/members/{userId} Put a person in a domain group

Only a signed-in session reaches this. Try it

Parameters

id requiredpathstring
groupId requiredpathstring
userId requiredpathstring

Response

204 Done, with no content.

POST /v1/domains/{id}/invite Invite someone from a domain

Only a signed-in session reaches this. Try it

Parameters

id requiredpathstring

Request body

application/json DomainInviteInput

Response

201 Success.

application/json DomainInviteResult

GET /v1/domains/{id}/members List the people on a domain

Only a signed-in session reaches this. Try it

Parameters

id requiredpathstring

Response

200 Success.

application/json DomainMemberList

POST /v1/domains/{id}/members/{userId}/close Close a domain member's account

Only a signed-in session reaches this. Try it

Parameters

id requiredpathstring
userId requiredpathstring

Response

204 Done, with no content.

POST /v1/domains/{id}/migrations Start moving people into a domain

Only a signed-in session reaches this. Try it

Parameters

id requiredpathstring

Request body

application/json StartDomainMigrationInput

Response

201 Success.

application/json DomainMigration

GET /v1/domains/{id}/migrations/{migrationId} See how a domain migration stands

Only a signed-in session reaches this. Try it

Parameters

id requiredpathstring
migrationId requiredpathstring

Response

200 Success.

application/json DomainMigration

GET /v1/domains/{id}/report Get a domain's report

Only a signed-in session reaches this. Try it

Parameters

id requiredpathstring

Response

200 Success.

application/json DomainReport

POST /v1/domains/{id}/vacation-delegates Set a vacation delegate for a domain member

Only a signed-in session reaches this. Try it

Parameters

id requiredpathstring

Request body

application/json VacationDelegateInput

Response

204 Done, with no content.

POST /v1/domains/{id}/verify Check a domain's DNS record

Only a signed-in session reaches this. Try it

Parameters

id requiredpathstring

Response

200 Success.

application/json Domain

POST /v1/domains/access-requests Ask to help run a domain

Answers 202. A domain admin decides.

Only a signed-in session reaches this. Try it

Request body

application/json RequestDomainAccessInput

Response

202 Success.

application/json DomainAccessRequested

email

GET /v1/email/unsubscribe See what an unsubscribe link would stop

Needs no sign-in: the token in the link proves who it is for.

No credential needed. Try it

Parameters

token requiredquerystring

Response

200 Success.

application/json Unsubscribe

POST /v1/email/unsubscribe Unsubscribe with one click

As RFC 8058 has it. The token comes in the query or the body.

No credential needed. Try it

Parameters

token requiredquerystring

Request body (optional)

application/json UnsubscribeInput

Response

200 Success.

application/json Unsubscribe

expenses

GET /v1/expenses List expenses

A signed-in session, or an API key or OAuth token with the expenses:read scope. Try it

Parameters

statusqueryPROCESSING NEEDS_REVIEW READY SUBMITTED APPROVED REJECTED REIMBURSED VOID or array of PROCESSING NEEDS_REVIEW READY SUBMITTED APPROVED REJECTED REIMBURSED VOID
kindqueryRECEIPT MANUAL MILEAGE PER_DIEM TIME CARD
paymentTypequeryCASH PERSONAL_CARD COMPANY_CARD BANK_TRANSFER CHECK PAYPAL OTHER
ownerIdquerystring
scopequerymine all
categoryIdquerystring
merchantIdquerystring
projectIdquerystring
clientIdquerystring
tagIdquerystring
departmentquerystring
reportIdquerystring
externalIdquerystring
unreportedqueryboolean
needsReviewqueryboolean
billablequeryboolean
reimbursablequeryboolean
moneyFlowqueryIN OUT
dateFieldquerydate createdAt updatedAt submittedAt approvedAt
fromquerystring
toquerystring
minMinorqueryinteger
maxMinorqueryinteger
qquerystring
sortquerydate:asc date:desc merchant:asc merchant:desc category:asc category:desc status:asc status:desc amount:asc amount:desc
limitqueryinteger
cursorquerystring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json ExpensePage

POST /v1/expenses Create an expense

A signed-in session, or an API key or OAuth token with the expenses:write scope. Needs a live plan. Try it

Parameters

Idempotency-Keyheaderstring

Replaying a key returns the first record instead of creating, and charging for, a second. While the first request is still running, a retry answers 409 IDEMPOTENCY_IN_PROGRESS with a Retry-After, and is not charged. The same key on a different request answers 409 IDEMPOTENCY_CONFLICT.

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body

application/json CreateExpenseInput

Response

201 Success.

application/json ExpenseDetail

DELETE /v1/expenses/{id} Void an expense

A voided expense stays for audit and leaves every total.

A signed-in session, or an API key or OAuth token with the expenses:write scope. Needs a live plan. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

204 Done, with no content.

GET /v1/expenses/{id} Get an expense

A signed-in session, or an API key or OAuth token with the expenses:read scope. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json ExpenseDetail

PATCH /v1/expenses/{id} Change an expense

Send If-Match with the updatedAt you last read to make this conditional: if someone changed the expense since, it answers 409 CONFLICT with details.reason STALE_WRITE and changes nothing.

A signed-in session, or an API key or OAuth token with the expenses:write scope. Needs a live plan. Try it

Parameters

id requiredpathstring
If-Matchheaderstring

The expense's updatedAt, as read.

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body

application/json UpdateExpenseInput

Response

200 Success.

application/json ExpenseDetail

GET /v1/expenses/{id}/comments List comments on an expense

A signed-in session, or an API key or OAuth token with the expenses:read scope. Try it

Parameters

id requiredpathstring
limitqueryinteger
cursorquerystring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json CommentPage

POST /v1/expenses/{id}/comments Comment on an expense

A signed-in session, or an API key or OAuth token with the expenses:write scope. Needs a live plan. Try it

Parameters

id requiredpathstring
Idempotency-Keyheaderstring

Replaying a key returns the first record instead of creating, and charging for, a second. While the first request is still running, a retry answers 409 IDEMPOTENCY_IN_PROGRESS with a Retry-After, and is not charged. The same key on a different request answers 409 IDEMPOTENCY_CONFLICT.

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body (optional)

application/json CommentInput

Response

201 Success.

application/json PostedComment

POST /v1/expenses/{id}/comments/{commentId}/reach Reach someone a comment on this expense could not

An expense has no participants of its own, so they join the report it is on, and then they are told. Refused when it is on no report.

A signed-in session, or an API key or OAuth token with the reports:write scope. Needs a live plan. Refuses a delegate on limited access. Try it

Parameters

id requiredpathstring
commentId requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body (optional)

application/json ReachMentionedInput

Response

200 Success.

application/json Reached

GET /v1/expenses/{id}/comments/mentionable List who a comment on this expense can mention

A signed-in session, or an API key or OAuth token with the expenses:read scope. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json MentionablePeople

POST /v1/expenses/{id}/confirm Confirm an expense after review

A reviewer's sign-off: the extraction is right, so the expense leaves the review list.

Only a signed-in session reaches this. Needs a live plan. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

201 Success.

application/json ExpenseDetail

POST /v1/expenses/{id}/duplicate Copy an expense, dated today, with no receipt

A signed-in session, or an API key or OAuth token with the expenses:write scope. Needs a live plan. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

201 Success.

application/json CreatedId

GET /v1/expenses/{id}/duplicates List an expense and its possible duplicates

Every copy in the group, not just a pair. hidden counts any the caller cannot read.

A signed-in session, or an API key or OAuth token with the expenses:read scope. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json ExpenseDuplicateGroup

POST /v1/expenses/{id}/flags/{code}/dismiss Dismiss a flag on an expense

For whoever has it for approval, or someone who manages expenses. The flag goes from the expense and stays in the audit log. Not for a hold.

A signed-in session, or an API key or OAuth token with the expenses:write scope. Needs a live plan. Refuses a delegate on limited access. Try it

Parameters

id requiredpathstring
code requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body (optional)

application/json DismissFlagInput

Response

200 Success.

application/json Hold

GET /v1/expenses/{id}/history What happened to an expense, oldest first

Only a signed-in session reaches this. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json ExpenseHistory

POST /v1/expenses/{id}/hold Put an expense on hold

A signed-in session, or an API key or OAuth token with the expenses:write scope. Needs a live plan. Refuses a delegate on limited access. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body (optional)

application/json HoldExpenseInput

Response

200 Success.

application/json Hold

POST /v1/expenses/{id}/keep Keep both expenses of a likely duplicate

A person compared the pair and these are two purchases, so the duplicate flag comes off.

Only a signed-in session reaches this. Needs a live plan. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json ExpenseDetail

POST /v1/expenses/{id}/mark-cash Mark an expense as paid in cash

Only a signed-in session reaches this. Needs a live plan. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json ExpenseDetail

POST /v1/expenses/{id}/move Move your expense to another of your workspaces

Makes it new there and voids the row here, which stays for audit. A trip is priced by the destination's rate, in its currency and unit. Refused once the expense is on a report.

Only a signed-in session reaches this. Needs a live plan. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body

application/json MoveExpenseInput

Response

200 Success.

application/json MovedExpense

POST /v1/expenses/{id}/receipts Attach a receipt to an expense

Multipart, or JSON naming an uploadId from POST /v1/uploads. add files it beside what is there, and a first receipt on a receipt expense is read onto it. replace takes the current ones to the trash and reads the new one. Fields a person changed are left alone.

A signed-in session, or an API key or OAuth token with the documents:write scope. Needs a live plan. Try it

Parameters

id requiredpathstring
clientqueryios android

The app sending the file. Leave it out in a browser.

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body

multipart/form-data

file requiredstring (binary)
modeadd replace
clientIdstring
deviceIdstring

application/json

uploadId requiredstring

From POST /v1/uploads, once the file has been sent to the URL it answered with.

modeadd replace
clientIdstring
deviceIdstring

Response

201 Success.

application/json Document

POST /v1/expenses/{id}/restore Restore a voided expense

Only a signed-in session reaches this. Needs a live plan. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json ExpenseDetail

POST /v1/expenses/{id}/settle-duplicates Answer a duplicate question

keep all takes the hold off every one of them. keep selected keeps this one, discards the others and can take values from them, all in one step. The submitter and whoever holds the open approval can do this on an outstanding report.

A signed-in session, or an API key or OAuth token with the expenses:write scope. Needs a live plan. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body

application/json SettleDuplicatesInput

Response

200 Success.

application/json ExpenseDetail

GET /v1/expenses/{id}/split The parts a split expense has now

Only a signed-in session reaches this. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json SplitRows

POST /v1/expenses/{id}/split Split an expense into parts

Answers with the expenses it became.

Only a signed-in session reaches this. Needs a live plan. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body

application/json SplitExpenseInput

Response

201 Success.

application/json ExpenseDetails

PUT /v1/expenses/{id}/split Change the parts of a split expense

A row with an id changes that part, a row with none adds one, and a part left out goes. One row left turns it back into a single expense.

Only a signed-in session reaches this. Needs a live plan. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body

application/json EditSplitInput

Response

200 Success.

application/json ExpenseDetails

GET /v1/expenses/{id}/tag-suggestions Tags similar past expenses carried

From the same person's earlier expenses at this merchant. Nothing goes on until someone takes it, and a group already filled is left out.

Only a signed-in session reaches this. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json TagSuggestionList

GET /v1/expenses/{id}/tax-lines List an expense's tax lines

For an expense with a receipt or without one. A document's own tax lines are under /v1/documents/{id}/tax-lines.

Only a signed-in session reaches this. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json ExpenseTaxLinePage

POST /v1/expenses/{id}/tax-lines Add a tax line to an expense

Only a signed-in session reaches this. Needs a live plan. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body

application/json ExpenseTaxLineInput

Response

201 Success.

application/json ExpenseTaxLine

DELETE /v1/expenses/{id}/tax-lines/{taxLineId} Remove a tax line from an expense

Only a signed-in session reaches this. Needs a live plan. Try it

Parameters

id requiredpathstring
taxLineId requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

204 Done, with no content.

POST /v1/expenses/{id}/unhold Take an expense off hold

A signed-in session, or an API key or OAuth token with the expenses:write scope. Needs a live plan. Refuses a delegate on limited access. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json Hold

GET /v1/expenses/attendees/recent People the caller has listed on expenses lately

Only a signed-in session reaches this. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json RecentAttendees

POST /v1/expenses/bulk Change many expenses

A signed-in session, or an API key or OAuth token with the expenses:write scope. Needs a live plan. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body

application/json BulkExpenseInput

Response

201 Success.

application/json BulkExpenseResult

POST /v1/expenses/bulk/edit Overwrite the same fields on several expenses

Each field named replaces what every selected expense holds. Expenses the caller cannot edit are skipped and counted.

Only a signed-in session reaches this. Needs a live plan. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body

application/json BulkEditInput

Response

200 Success.

application/json BulkEditResult

POST /v1/expenses/bulk/options Which fields Edit multiple can change for a selection

A field restricted on any selected expense is closed, with the reason.

Only a signed-in session reaches this. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body

application/json BulkEditOptionsInput

Response

200 Success.

application/json BulkEditOptions

POST /v1/expenses/duplicates Duplicate expenses

Up to 50 at a time. Each is copied by itself, and one that cannot be comes back in skipped with why.

Only a signed-in session reaches this. Needs a live plan. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body

application/json DuplicateExpensesInput

Response

201 Success.

application/json ExpensesDuplicated

GET /v1/expenses/groups Group the expenses that match a filter, with each group's total

As far as the caller reaches: someone who can read only their own expenses groups only those.

Only a signed-in session reaches this. Try it

Parameters

statusqueryPROCESSING NEEDS_REVIEW READY SUBMITTED APPROVED REJECTED REIMBURSED VOID or array of PROCESSING NEEDS_REVIEW READY SUBMITTED APPROVED REJECTED REIMBURSED VOID
kindqueryRECEIPT MANUAL MILEAGE PER_DIEM TIME CARD
paymentTypequeryCASH PERSONAL_CARD COMPANY_CARD BANK_TRANSFER CHECK PAYPAL OTHER
ownerIdquerystring
scopequerymine all
categoryIdquerystring
merchantIdquerystring
projectIdquerystring
clientIdquerystring
tagIdquerystring
departmentquerystring
reportIdquerystring
externalIdquerystring
unreportedqueryboolean
needsReviewqueryboolean
billablequeryboolean
reimbursablequeryboolean
moneyFlowqueryIN OUT
dateFieldquerydate createdAt updatedAt submittedAt approvedAt
fromquerystring
toquerystring
minMinorqueryinteger
maxMinorqueryinteger
qquerystring
groupBy requiredquerycategory merchant member project status month
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json ExpenseGroups

POST /v1/expenses/hold Hold or release expenses

Each by the rules for holding one: whose it is, and how far it has gone. One that cannot change comes back in skipped with why.

Only a signed-in session reaches this. Needs a live plan. Refuses a delegate on limited access. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body

application/json BulkHoldInput

Response

200 Success.

application/json ExpensesHeld

POST /v1/expenses/merge Merge two expenses into one

keepId stays and the other is gone for good. What to keep of each is chosen field by field. An imported card expense is always the one kept.

Only a signed-in session reaches this. Needs a live plan. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body

application/json MergeExpensesInput

Response

200 Success.

application/json ExpenseDetail

GET /v1/expenses/money-flow Money in beside money out, a month at a time

Only a signed-in session reaches this. Try it

Parameters

monthsqueryinteger
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json MoneyFlow

POST /v1/expenses/move Move expenses to a report

To a report that is a draft or still out for approval, a new draft, the draft automatic reporting is filling, or off every report. A report holds one person's expenses. Each expense is judged by itself, and one that cannot move comes back in skipped with why.

Only a signed-in session reaches this. Needs a live plan. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body

application/json MoveExpensesInput

Response

200 Success.

application/json ExpensesMoved

GET /v1/expenses/totals Total the expenses that match a filter, or the ones selected, in any currency

A signed-in session, or an API key or OAuth token with the expenses:read scope. Try it

Parameters

statusqueryPROCESSING NEEDS_REVIEW READY SUBMITTED APPROVED REJECTED REIMBURSED VOID or array of PROCESSING NEEDS_REVIEW READY SUBMITTED APPROVED REJECTED REIMBURSED VOID
kindqueryRECEIPT MANUAL MILEAGE PER_DIEM TIME CARD
paymentTypequeryCASH PERSONAL_CARD COMPANY_CARD BANK_TRANSFER CHECK PAYPAL OTHER
ownerIdquerystring
scopequerymine all
categoryIdquerystring
merchantIdquerystring
projectIdquerystring
clientIdquerystring
tagIdquerystring
departmentquerystring
reportIdquerystring
externalIdquerystring
unreportedqueryboolean
needsReviewqueryboolean
billablequeryboolean
reimbursablequeryboolean
moneyFlowqueryIN OUT
dateFieldquerydate createdAt updatedAt submittedAt approvedAt
fromquerystring
toquerystring
minMinorqueryinteger
maxMinorqueryinteger
qquerystring
idsquerystring or array of string
currencyquerystring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json ExpenseTotals

export history

GET /v1/export-history List which documents went where

Files from exports, postings to connected services, and what programs recorded, with the id each has there. Needs expenses.read_all.

A signed-in session, or an API key or OAuth token with the documents:read scope. Needs the expenses.read_all permission. Try it

Parameters

documentIdquerystring
targetquerystring
externalIdquerystring
viaqueryEXPORT SYNC API
limitqueryinteger
cursorquerystring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json ExportRecordPage

POST /v1/export-history Record that documents went somewhere

For an export a program made itself. A record already held is not written again, so a retry is safe.

A signed-in session, or an API key or OAuth token with the documents:write scope. Needs a live plan. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Request body

application/json ExportRecordInput

Response

201 Success.

application/json ExportRecordsAppended

export templates

GET /v1/export-templates List export templates

Only a signed-in session reaches this. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json ExportTemplateList

POST /v1/export-templates Create an export template

Only a signed-in session reaches this. Needs a live plan. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Request body

application/json ExportTemplateInput

Response

201 Success.

application/json ExportTemplate

DELETE /v1/export-templates/{id} Delete an export template

Only a signed-in session reaches this. Needs a live plan. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Response

204 Done, with no content.

PATCH /v1/export-templates/{id} Change an export template

Only a signed-in session reaches this. Needs a live plan. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Request body

application/json UpdateExportTemplateInput

Response

200 Success.

application/json ExportTemplate

exports

GET /v1/exports List exports

A signed-in session, or an API key or OAuth token with the expenses:read scope. Try it

Parameters

limitqueryinteger
cursorquerystring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json ExportJobPage

POST /v1/exports Start an export

Filters select by expense, or by report with reportState, reportIds, startDate and endDate (one year at most), approvedAfter and exported. policyIds takes workspace ids, and a key can only name its own. template is the file's whole layout as text, with ${expense.merchant}, <#list reports as report> and <#if report.exported>, and takes CSV, TXT, JSON or XML: a mistake in it answers 422 with the line. onFinish can email the file, mark the reports it covers as exported, which needs reports:write, and upload it by SFTP. SFTP needs the host key fingerprint of the server, refuses a private address, and never returns the credentials.

A signed-in session, or an API key or OAuth token with the expenses:read scope. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body

application/json CreateExportInput

Response

201 Success.

application/json ExportJob

GET /v1/exports/{id} Get an export and, when ready, its link

A signed-in session, or an API key or OAuth token with the expenses:read scope. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json ExportJob

folders

GET /v1/folders List folders

A signed-in session, or an API key or OAuth token with the documents:read scope. Try it

Parameters

qquerystring
parentIdquerystring
limitqueryinteger
cursorquerystring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json FolderPage

POST /v1/folders Create a folder

A signed-in session, or an API key or OAuth token with the documents:write scope. Needs the expenses.write_all permission. Needs a live plan. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body

application/json FolderInput

Response

201 Success.

application/json Folder

DELETE /v1/folders/{id} Delete a folder

A signed-in session, or an API key or OAuth token with the documents:write scope. Needs the expenses.write_all permission. Needs a live plan. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

204 Done, with no content.

GET /v1/folders/{id} Get a folder

A signed-in session, or an API key or OAuth token with the documents:read scope. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json Folder

PATCH /v1/folders/{id} Change a folder

A signed-in session, or an API key or OAuth token with the documents:write scope. Needs the expenses.write_all permission. Needs a live plan. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body

application/json UpdateFolderInput

Response

200 Success.

application/json Folder

forwarding

GET /v1/forwarding Get the addresses that receive documents by email

Only a signed-in session reaches this. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Response

200 Success.

application/json Forwarding

GET /v1/forwarding/emails List email sent to the caller's forwarding addresses

Every message, filed or not, with the sender, subject, received time, whether it carried a file, and any file left out and why.

A signed-in session, or an API key or OAuth token with the documents:read scope. Try it

Parameters

limitqueryinteger
cursorquerystring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Response

200 Success.

application/json InboundEmailPage

POST /v1/forwarding/merchant-copies Choose which merchants copied receipts come from

Only a signed-in session reaches this. Needs the email_capture plan feature. Needs a live plan. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Request body

application/json MerchantCopiesInput

Response

200 Success.

application/json Forwarding

POST /v1/forwarding/senders Add a sender address

Only a signed-in session reaches this. Needs the email_capture plan feature. Needs a live plan. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Request body

application/json AddSenderInput

Response

201 Success.

application/json ForwardingSender

DELETE /v1/forwarding/senders/{id} Remove a sender address

Only a signed-in session reaches this. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Response

204 Done, with no content.

POST /v1/forwarding/senders/verify Verify a sender address

Only a signed-in session reaches this. Needs a live plan. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Request body

application/json VerifySenderInput

Response

200 Success.

application/json ForwardingSender

fraud

GET /v1/fraud/blocklist List blocked devices

A signed-in session, or an API key or OAuth token with the documents:read scope. Needs the expenses.read_all permission. Try it

Parameters

limitqueryinteger
cursorquerystring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json DeviceBlockPage

POST /v1/fraud/blocklist Block a device

A blocked device still captures. Its documents read red, with the reason stated, for a reviewer.

A signed-in session, or an API key or OAuth token with the documents:write scope. Needs the settings.manage permission. Needs a live plan. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body

application/json BlockDeviceInput

Response

201 Success.

application/json DeviceBlock

DELETE /v1/fraud/blocklist/{deviceId} Remove a device from the blocklist

A signed-in session, or an API key or OAuth token with the documents:write scope. Needs the settings.manage permission. Needs a live plan. Try it

Parameters

deviceId requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

204 Done, with no content.

GET /v1/fraud/blocklist/{deviceId} Check whether a device is blocked

A device nobody blocked answers blocked: false, not 404.

A signed-in session, or an API key or OAuth token with the documents:read scope. Needs the expenses.read_all permission. Try it

Parameters

deviceId requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json DeviceBlockStatus

GET /v1/fraud/export Download the evidence on documents that match a filter

The same filter as listing documents. Needs expenses.read_all.

A signed-in session, or an API key or OAuth token with the documents:read scope. Needs the expenses.read_all permission. Try it

Parameters

typequeryRECEIPT INVOICE BILL BANK_STATEMENT CHECK TAX_FORM BUSINESS_CARD OTHER UNKNOWN PURCHASE_ORDER CONTRACT PACKING_SLIP REMITTANCE_ADVICE CREDIT_NOTE STATEMENT
statusqueryUPLOADED PROCESSING PROCESSED FAILED
sourcequeryWEB IOS ANDROID EMAIL API MAIL_IN INTEGRATION
source_idquerystring
external_idquerystring
blueprint_namequerystring
ownerquerystring
device_idquerystring
device_user_uuidquerystring
viewedqueryboolean
trashedqueryboolean
envelopequerystring
created__gtquerystring or string (date-time)
created__gtequerystring or string (date-time)
created__ltquerystring or string (date-time)
created__ltequerystring or string (date-time)
updated__gtquerystring or string (date-time)
updated__gtequerystring or string (date-time)
updated__ltquerystring or string (date-time)
updated__ltequerystring or string (date-time)
issuedquerystring
issued__gtquerystring
issued__gtequerystring
issued__ltquerystring
issued__ltequerystring
totalqueryinteger
total__gtqueryinteger
total__gtequeryinteger
total__ltqueryinteger
total__ltequeryinteger
taxqueryinteger
tax__gtqueryinteger
tax__gtequeryinteger
tax__ltqueryinteger
tax__ltequeryinteger
currencyquerystring
categoryquerystring
vendorquerystring
notesquerystring
payment_typequeryCASH PERSONAL_CARD COMPANY_CARD BANK_TRANSFER CHECK PAYPAL OTHER
last_four_digitsquerystring
first_namequerystring
last_namequerystring
work_phonequerystring
cell_phonequerystring
companyquerystring
emailquerystring
websitequerystring
countryquerystring
statequerystring
cityquerystring
zipquerystring
namequerystring
is_emptyquerystring
order_byquerycreated updated issued total tax -created -updated -issued -total -tax
folderIdquerystring
mailInBatchIdquerystring
setIdquerystring
externalIdquerystring
tagquerystring
archivedqueryboolean
unviewedqueryboolean
qquerystring
fromquerystring
toquerystring
fraudColorqueryGREEN YELLOW RED
fraudSignalquerydigital_tampering fraudulent_pdf fraudulent_image generated_document ai_generated lcd_photo screenshot digital_background not_a_document duplicate similar_documents handwritten_characters invalid_qr_data invalid_mrz_data suspicious_content data_inconsistency vendor_layout_mismatch total_in_words_mismatch aspect_ratio_mismatch high_velocity critical_velocity multiple_profiles_or_devices fraud_history blocked_device other
fraudReviewqueryPENDING FRAUD NOT_FRAUD UNKNOWN
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

text/csv string (binary)

GET /v1/fraud/my-device/{deviceId} Ask whether this device is blocked

For a device asking about itself: any member can, and it says only whether. Capture carries on either way.

Only a signed-in session reaches this. Try it

Parameters

deviceId requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json MyDeviceStatus

GET /v1/fraud/settings Get the fraud check settings

Only a signed-in session reaches this. Needs the expenses.read_all permission. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json FraudSettings

PUT /v1/fraud/settings Change the fraud check settings

Only a signed-in session reaches this. Needs the settings.manage permission. Needs a live plan. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body

application/json FraudSettingsInput

Response

200 Success.

application/json FraudSettings

home

GET /v1/home Get your home screen

What can stop your work today, what reports wait on you, upcoming travel, insights from your own expenses and announcements. Spending shows for someone who can see it.

Only a signed-in session reaches this. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json Home

inbox

GET /v1/inbox List what is waiting on the caller in chat

Only a signed-in session reaches this. Try it

Parameters

tabqueryall unread todos
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Response

200 Success.

application/json Inbox

integrations

GET /v1/integrations List connected services and what can be connected

A signed-in session, or an API key or OAuth token with the integrations:read scope. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json IntegrationList

DELETE /v1/integrations/{provider} Disconnect a service

Open on a lapsed plan: taking away access is never something to charge for.

Only a signed-in session reaches this. Needs the integrations.manage permission. Try it

Parameters

provider requiredpathstring

The service, by its slug: quickbooks-online, quickbooks-desktop, xero, freshbooks, wave, zoho-books, sage, microsoft-dynamics, myob, oracle, sap, netsuite, gusto, hr, gmail, google-drive, dropbox, box, onedrive, slack, zapier.

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json DisconnectResult

POST /v1/integrations/{provider}/connect Start connecting a service

Answers with the provider's sign-in link. Open it in a browser: the provider sends the person back to PaperTotal.

Only a signed-in session reaches this. Needs the integrations.manage permission. Needs the accounting_sync plan feature. Needs a live plan. Try it

Parameters

provider requiredpathstring

The service, by its slug: quickbooks-online, quickbooks-desktop, xero, freshbooks, wave, zoho-books, sage, microsoft-dynamics, myob, oracle, sap, netsuite, gusto, hr, gmail, google-drive, dropbox, box, onedrive, slack, zapier.

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

201 Success.

application/json ConnectResult

GET /v1/integrations/{provider}/health See how a connection stands

A signed-in session, or an API key or OAuth token with the integrations:read scope. Needs the integrations.manage permission. Try it

Parameters

provider requiredpathstring

The service, by its slug: quickbooks-online, quickbooks-desktop, xero, freshbooks, wave, zoho-books, sage, microsoft-dynamics, myob, oracle, sap, netsuite, gusto, hr, gmail, google-drive, dropbox, box, onedrive, slack, zapier.

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json IntegrationHealth

GET /v1/integrations/{provider}/import Get what comes in from a service

Only a signed-in session reaches this. Needs the integrations.manage permission. Try it

Parameters

provider requiredpathstring

The service, by its slug: quickbooks-online, quickbooks-desktop, xero, freshbooks, wave, zoho-books, sage, microsoft-dynamics, myob, oracle, sap, netsuite, gusto, hr, gmail, google-drive, dropbox, box, onedrive, slack, zapier.

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json Import

PUT /v1/integrations/{provider}/import Change what comes in from a service

Only a signed-in session reaches this. Needs the integrations.manage permission. Needs the accounting_sync plan feature. Needs a live plan. Try it

Parameters

provider requiredpathstring

The service, by its slug: quickbooks-online, quickbooks-desktop, xero, freshbooks, wave, zoho-books, sage, microsoft-dynamics, myob, oracle, sap, netsuite, gusto, hr, gmail, google-drive, dropbox, box, onedrive, slack, zapier.

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body

application/json UpdateImportSettingsInput

Response

200 Success.

application/json Import

POST /v1/integrations/{provider}/invite-employees Invite the employees a service lists

Inviting people is managing members, so this needs members.manage, whoever manages the connection.

Only a signed-in session reaches this. Needs the members.manage permission. Needs the accounting_sync plan feature. Needs a live plan. Try it

Parameters

provider requiredpathstring

The service, by its slug: quickbooks-online, quickbooks-desktop, xero, freshbooks, wave, zoho-books, sage, microsoft-dynamics, myob, oracle, sap, netsuite, gusto, hr, gmail, google-drive, dropbox, box, onedrive, slack, zapier.

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Response

200 Success.

application/json InviteEmployeesResult

GET /v1/integrations/{provider}/mappings Get the account mappings

Only a signed-in session reaches this. Needs the integrations.manage permission. Try it

Parameters

provider requiredpathstring

The service, by its slug: quickbooks-online, quickbooks-desktop, xero, freshbooks, wave, zoho-books, sage, microsoft-dynamics, myob, oracle, sap, netsuite, gusto, hr, gmail, google-drive, dropbox, box, onedrive, slack, zapier.

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json Mappings

PUT /v1/integrations/{provider}/mappings Change the account mappings

Only a signed-in session reaches this. Needs the integrations.manage permission. Needs the accounting_sync plan feature. Needs a live plan. Try it

Parameters

provider requiredpathstring

The service, by its slug: quickbooks-online, quickbooks-desktop, xero, freshbooks, wave, zoho-books, sage, microsoft-dynamics, myob, oracle, sap, netsuite, gusto, hr, gmail, google-drive, dropbox, box, onedrive, slack, zapier.

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body

application/json UpdateMappingsInput

Response

200 Success.

application/json SaveMappingsResult

POST /v1/integrations/{provider}/organisation Choose which organisation to post to

Only a signed-in session reaches this. Needs the integrations.manage permission. Needs the accounting_sync plan feature. Needs a live plan. Try it

Parameters

provider requiredpathstring

The service, by its slug: quickbooks-online, quickbooks-desktop, xero, freshbooks, wave, zoho-books, sage, microsoft-dynamics, myob, oracle, sap, netsuite, gusto, hr, gmail, google-drive, dropbox, box, onedrive, slack, zapier.

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body

application/json ChooseOrganisationInput

Response

201 Success.

application/json Integration

GET /v1/integrations/{provider}/records List what was sent to a service

Each record names the expense and the id it has in the other system.

A signed-in session, or an API key or OAuth token with the integrations:read scope. Needs the integrations.manage permission. Try it

Parameters

provider requiredpathstring

The service, by its slug: quickbooks-online, quickbooks-desktop, xero, freshbooks, wave, zoho-books, sage, microsoft-dynamics, myob, oracle, sap, netsuite, gusto, hr, gmail, google-drive, dropbox, box, onedrive, slack, zapier.

statequeryPENDING SYNCED FAILED SKIPPED VOIDED
limitqueryinteger
cursorquerystring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json SyncRecordPage

POST /v1/integrations/{provider}/records/{id}/retry Try a failed record again

Only a signed-in session reaches this. Needs the integrations.manage permission. Needs the accounting_sync plan feature. Needs a live plan. Try it

Parameters

provider requiredpathstring

The service, by its slug: quickbooks-online, quickbooks-desktop, xero, freshbooks, wave, zoho-books, sage, microsoft-dynamics, myob, oracle, sap, netsuite, gusto, hr, gmail, google-drive, dropbox, box, onedrive, slack, zapier.

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

201 Success.

application/json SyncRecord

POST /v1/integrations/{provider}/records/{id}/skip Skip a failed record

Only a signed-in session reaches this. Needs the integrations.manage permission. Needs a live plan. Try it

Parameters

provider requiredpathstring

The service, by its slug: quickbooks-online, quickbooks-desktop, xero, freshbooks, wave, zoho-books, sage, microsoft-dynamics, myob, oracle, sap, netsuite, gusto, hr, gmail, google-drive, dropbox, box, onedrive, slack, zapier.

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

201 Success.

application/json SyncRecord

POST /v1/integrations/{provider}/refresh Pull the service's reference data again

Answers 202 and carries on in the background.

Only a signed-in session reaches this. Needs the integrations.manage permission. Needs the accounting_sync plan feature. Needs a live plan. Try it

Parameters

provider requiredpathstring

The service, by its slug: quickbooks-online, quickbooks-desktop, xero, freshbooks, wave, zoho-books, sage, microsoft-dynamics, myob, oracle, sap, netsuite, gusto, hr, gmail, google-drive, dropbox, box, onedrive, slack, zapier.

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

202 Done, with no content.

POST /v1/integrations/{provider}/resume Resume posting after a failure

Only a signed-in session reaches this. Needs the integrations.manage permission. Needs the accounting_sync plan feature. Needs a live plan. Try it

Parameters

provider requiredpathstring

The service, by its slug: quickbooks-online, quickbooks-desktop, xero, freshbooks, wave, zoho-books, sage, microsoft-dynamics, myob, oracle, sap, netsuite, gusto, hr, gmail, google-drive, dropbox, box, onedrive, slack, zapier.

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json ExportSettings

GET /v1/integrations/{provider}/review List what would post, with any problems

Only a signed-in session reaches this. Needs the integrations.manage permission. Try it

Parameters

provider requiredpathstring

The service, by its slug: quickbooks-online, quickbooks-desktop, xero, freshbooks, wave, zoho-books, sage, microsoft-dynamics, myob, oracle, sap, netsuite, gusto, hr, gmail, google-drive, dropbox, box, onedrive, slack, zapier.

fromquerystring
toquerystring
resendquerytrue false
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json Review

PATCH /v1/integrations/{provider}/review/{expenseId} Recode an expense before it posts

Only a signed-in session reaches this. Needs the integrations.manage permission. Needs the accounting_sync plan feature. Needs a live plan. Try it

Parameters

provider requiredpathstring

The service, by its slug: quickbooks-online, quickbooks-desktop, xero, freshbooks, wave, zoho-books, sage, microsoft-dynamics, myob, oracle, sap, netsuite, gusto, hr, gmail, google-drive, dropbox, box, onedrive, slack, zapier.

expenseId requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body

application/json RecodeExpenseInput

Response

204 Done, with no content.

POST /v1/integrations/{provider}/review/calc-gst Work out GST on some expenses

Only a signed-in session reaches this. Needs the integrations.manage permission. Needs the accounting_sync plan feature. Needs a live plan. Try it

Parameters

provider requiredpathstring

The service, by its slug: quickbooks-online, quickbooks-desktop, xero, freshbooks, wave, zoho-books, sage, microsoft-dynamics, myob, oracle, sap, netsuite, gusto, hr, gmail, google-drive, dropbox, box, onedrive, slack, zapier.

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body

application/json CalcGstInput

Response

200 Success.

application/json UpdatedCount

GET /v1/integrations/{provider}/settings Get how a service posts

Only a signed-in session reaches this. Needs the integrations.manage permission. Try it

Parameters

provider requiredpathstring

The service, by its slug: quickbooks-online, quickbooks-desktop, xero, freshbooks, wave, zoho-books, sage, microsoft-dynamics, myob, oracle, sap, netsuite, gusto, hr, gmail, google-drive, dropbox, box, onedrive, slack, zapier.

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json ExportSettings

PUT /v1/integrations/{provider}/settings Change how a service posts

Only a signed-in session reaches this. Needs the integrations.manage permission. Needs the accounting_sync plan feature. Needs a live plan. Try it

Parameters

provider requiredpathstring

The service, by its slug: quickbooks-online, quickbooks-desktop, xero, freshbooks, wave, zoho-books, sage, microsoft-dynamics, myob, oracle, sap, netsuite, gusto, hr, gmail, google-drive, dropbox, box, onedrive, slack, zapier.

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body

application/json UpdateExportSettingsInput

Response

200 Success.

application/json ExportSettings

GET /v1/integrations/{provider}/storage See how a storage service stands

Only a signed-in session reaches this. Needs the integrations.manage permission. Try it

Parameters

provider requiredpathstring

The service, by its slug: quickbooks-online, quickbooks-desktop, xero, freshbooks, wave, zoho-books, sage, microsoft-dynamics, myob, oracle, sap, netsuite, gusto, hr, gmail, google-drive, dropbox, box, onedrive, slack, zapier.

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json StorageStatus

PUT /v1/integrations/{provider}/storage Change what goes to a storage service

Only a signed-in session reaches this. Needs the integrations.manage permission. Needs a live plan. Try it

Parameters

provider requiredpathstring

The service, by its slug: quickbooks-online, quickbooks-desktop, xero, freshbooks, wave, zoho-books, sage, microsoft-dynamics, myob, oracle, sap, netsuite, gusto, hr, gmail, google-drive, dropbox, box, onedrive, slack, zapier.

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body

application/json UpdateStorageInput

Response

200 Success.

application/json StorageStatus

POST /v1/integrations/{provider}/sync Post expenses to the service

Only a signed-in session reaches this. Needs the integrations.manage permission. Needs the accounting_sync plan feature. Needs a live plan. Try it

Parameters

provider requiredpathstring

The service, by its slug: quickbooks-online, quickbooks-desktop, xero, freshbooks, wave, zoho-books, sage, microsoft-dynamics, myob, oracle, sap, netsuite, gusto, hr, gmail, google-drive, dropbox, box, onedrive, slack, zapier.

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body (optional)

application/json SyncInput

Response

201 Success.

application/json SyncResult

GET /v1/integrations/{provider}/vendors List a service's vendors

Only a signed-in session reaches this. Needs the integrations.manage permission. Try it

Parameters

provider requiredpathstring

The service, by its slug: quickbooks-online, quickbooks-desktop, xero, freshbooks, wave, zoho-books, sage, microsoft-dynamics, myob, oracle, sap, netsuite, gusto, hr, gmail, google-drive, dropbox, box, onedrive, slack, zapier.

qquerystring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json VendorList

PATCH /v1/integrations/{provider}/vendors/{id} Change a vendor

Only a signed-in session reaches this. Needs the integrations.manage permission. Needs the accounting_sync plan feature. Needs a live plan. Try it

Parameters

provider requiredpathstring

The service, by its slug: quickbooks-online, quickbooks-desktop, xero, freshbooks, wave, zoho-books, sage, microsoft-dynamics, myob, oracle, sap, netsuite, gusto, hr, gmail, google-drive, dropbox, box, onedrive, slack, zapier.

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body

application/json UpdateVendorInput

Response

200 Success.

application/json Vendor

PUT /v1/integrations/{provider}/vendors/{id}/account Set the account a vendor posts to

Only a signed-in session reaches this. Needs the integrations.manage permission. Needs the accounting_sync plan feature. Needs a live plan. Try it

Parameters

provider requiredpathstring

The service, by its slug: quickbooks-online, quickbooks-desktop, xero, freshbooks, wave, zoho-books, sage, microsoft-dynamics, myob, oracle, sap, netsuite, gusto, hr, gmail, google-drive, dropbox, box, onedrive, slack, zapier.

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body

application/json VendorAccountInput

Response

200 Success.

application/json VendorAccount

GET /v1/integrations/expenses/{expenseId}/vendor See the vendor an expense posts to

Only a signed-in session reaches this. Needs the integrations.manage permission. Try it

Parameters

expenseId requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json ExpenseVendor

PUT /v1/integrations/expenses/{expenseId}/vendor Choose the vendor an expense posts to

Only a signed-in session reaches this. Needs the integrations.manage permission. Needs the accounting_sync plan feature. Needs a live plan. Try it

Parameters

expenseId requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body

application/json ExpenseVendorInput

Response

200 Success.

application/json ExpenseVendor

GET /v1/integrations/gmail/scan See how the Gmail scan stands

Only a signed-in session reaches this. Needs the integrations.manage permission. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json GmailScan

POST /v1/integrations/gmail/scan Scan Gmail now

Answers 202 and carries on in the background.

Only a signed-in session reaches this. Needs the integrations.manage permission. Needs the accounting_sync plan feature. Needs a live plan. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

202 Done, with no content.

PUT /v1/integrations/netsuite/credentials Save NetSuite credentials

Write-only: no route reads these back. The next step is the ordinary connect.

Only a signed-in session reaches this. Needs the integrations.manage permission. Needs the accounting_sync plan feature. Needs a live plan. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body

application/json NetSuiteCredentialsInput

Response

204 Done, with no content.

POST /v1/integrations/quickbooks-desktop/iif Import QuickBooks Desktop lists from an IIF file

Takes an upload from POST /v1/uploads with purpose iif_lists. Reads accounts, customers, vendors, items and classes, and the file is gone once read.

Only a signed-in session reaches this. Needs the integrations.manage permission. Needs the accounting_sync plan feature. Needs a live plan. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body

application/json ImportIifInput

Response

201 Success.

application/json IifImport

GET /v1/integrations/quickbooks-desktop/reusable List connectors another workspace of yours could share

Only a signed-in session reaches this. Needs the integrations.manage permission. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json ReusableConnectorList

POST /v1/integrations/quickbooks-desktop/reuse Share a connector another workspace of yours set up

One company file takes one connector, so a second workspace on the same file shares it.

Only a signed-in session reaches this. Needs the integrations.manage permission. Needs the accounting_sync plan feature. Needs a live plan. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body

application/json ReuseConnectorInput

Response

201 Success.

application/json DesktopSetup

POST /v1/integrations/quickbooks-desktop/setup Set up QuickBooks Desktop

Answers with the file to open in the Web Connector.

Only a signed-in session reaches this. Needs the integrations.manage permission. Needs the accounting_sync plan feature. Needs a live plan. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

201 Success.

application/json DesktopSetup

GET /v1/integrations/slack/settings Get the Slack settings

Only a signed-in session reaches this. Needs the integrations.manage permission. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json SlackSettings

PUT /v1/integrations/slack/settings Change the Slack settings

Only a signed-in session reaches this. Needs the integrations.manage permission. Needs the accounting_sync plan feature. Needs a live plan. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body

application/json SlackSettingsInput

Response

200 Success.

application/json SlackSettings

invitations

GET /v1/invitations List invitations

A signed-in session, or an API key or OAuth token with the members:read scope. Needs the members.manage permission. Try it

Parameters

statusqueryPENDING EXPIRED ACCEPTED REVOKED
limitqueryinteger
cursorquerystring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Response

200 Success.

application/json InvitationPage

POST /v1/invitations Invite someone to this workspace

They join when they accept, signed in with this address. An open invitation holds a seat.

A signed-in session, or an API key or OAuth token with the members:write scope. Needs the members.manage permission. Needs a live plan. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Request body

application/json CreateInvitationInput

Response

201 Success.

application/json InvitationSent

DELETE /v1/invitations/{id} Withdraw an invitation

Works on a lapsed plan.

A signed-in session, or an API key or OAuth token with the members:write scope. Needs the members.manage permission. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Response

204 Done, with no content.

POST /v1/invitations/{id}/resend Send an invitation again

A new link. The old one stops working.

A signed-in session, or an API key or OAuth token with the members:write scope. Needs the members.manage permission. Needs a live plan. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Response

200 Success.

application/json InvitationSent

POST /v1/invitations/accept Accept an invitation

Runs outside any workspace, since the invited person is not in one yet. Sign in with the address that was invited.

Only a signed-in session reaches this. Try it

Request body

application/json AcceptInvitationInput

Response

200 Success.

application/json InvitationAccepted

POST /v1/invitations/import Invite many people from CSV

Send the CSV as text/plain, or as JSON with a csv field, with an Email column and an optional Role column.

A signed-in session, or an API key or OAuth token with the members:write scope. Needs the members.manage permission. Needs a live plan. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Request body

application/json CatalogImportInput

Response

201 Success.

application/json CatalogImportResult

invoices

GET /v1/invoices List invoices

Only a signed-in session reaches this. Needs the reimbursements.manage permission. Try it

Parameters

statusqueryDRAFT SENT VIEWED PARTIALLY_PAID PAID VOID OVERDUE
qquerystring
limitqueryinteger
cursorquerystring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json InvoicePage

POST /v1/invoices Create an invoice

A draft, from lines typed here, tracked expenses pulled in by expenseIds, or both. Needs invoices turned on for this workspace.

Only a signed-in session reaches this. Needs the reimbursements.manage permission. Needs a live plan. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body

application/json CreateInvoiceInput

Response

201 Success.

application/json Invoice

DELETE /v1/invoices/{id} Delete a draft invoice

Only a draft. Void one that has gone out, so its record stays.

Only a signed-in session reaches this. Needs the reimbursements.manage permission. Needs a live plan. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

204 Done, with no content.

GET /v1/invoices/{id} Get an invoice

Only a signed-in session reaches this. Needs the reimbursements.manage permission. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json Invoice

PATCH /v1/invoices/{id} Change a draft invoice

Only a draft. Undo the send first to change one that has gone out.

Only a signed-in session reaches this. Needs the reimbursements.manage permission. Needs a live plan. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body

application/json UpdateInvoiceInput

Response

200 Success.

application/json Invoice

POST /v1/invoices/{id}/messages Write on an invoice's conversation

The recipient reads it at their link.

Only a signed-in session reaches this. Needs the reimbursements.manage permission. Needs a live plan. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body

application/json InvoiceMessageInput

Response

201 Success.

application/json Invoice

POST /v1/invoices/{id}/payments Record a payment or a refund

A record of money that moved some other way. PaperTotal takes and sends no money.

Only a signed-in session reaches this. Needs the reimbursements.manage permission. Needs a live plan. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body

application/json RecordInvoicePaymentInput

Response

201 Success.

application/json Invoice

POST /v1/invoices/{id}/remind Remind the recipient to pay

Only while it waits for payment, and once an hour at most.

Only a signed-in session reaches this. Needs the reimbursements.manage permission. Needs a live plan. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json Invoice

POST /v1/invoices/{id}/send Send an invoice

By email, to its recipient and whoever it is shared with. A phone number alone cannot be sent to. Needs invoices turned on for this workspace.

Only a signed-in session reaches this. Needs the reimbursements.manage permission. Needs a live plan. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json Invoice

POST /v1/invoices/{id}/undo-send Take a sent invoice back

Back to a draft, and its link stops working. Not once money is recorded against it.

Only a signed-in session reaches this. Needs the reimbursements.manage permission. Needs a live plan. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json Invoice

POST /v1/invoices/{id}/void Void an invoice

Not while payments stand on it: refund them first.

Only a signed-in session reaches this. Needs the reimbursements.manage permission. Needs a live plan. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json Invoice

POST /v1/invoices/bulk Create invoices from a CSV

One invoice for each Send To and Report Name in the file, with a line for each row. Its first line names the columns: Send To, Share, Report Name, Merchant, Amount, Date, Due Date. A row already imported adds nothing. Needs invoices turned on for this workspace.

Only a signed-in session reaches this. Needs the reimbursements.manage permission. Needs a live plan. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body

application/json BulkInvoiceInput

Response

201 Success.

application/json BulkInvoiceResult

GET /v1/invoices/settings Read the invoice settings

Only a signed-in session reaches this. Needs the reimbursements.manage permission. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json InvoiceSettings

PUT /v1/invoices/settings Change the invoice settings

Turns invoices on or off, and sets what every invoice says about who sent it.

Only a signed-in session reaches this. Needs the settings.manage permission. Needs a live plan. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body

application/json InvoiceSettingsInput

Response

200 Success.

application/json InvoiceSettings

join

POST /v1/join/email Send a code to prove another address

Answers 202. An address on another account is refused.

Only a signed-in session reaches this. Try it

Request body

application/json JoinEmailInput

Response

202 Success.

application/json JoinEmailSent

GET /v1/join/link See what a join link opens

Needs no sign-in, so a link can say where it leads before anyone signs in.

No credential needed. Try it

Parameters

tokenquerystring

Response

200 Success.

application/json JoinLinkPreview

GET /v1/join/options List the workspaces the caller could join

From addresses they have proven and invitations waiting for them.

Only a signed-in session reaches this. Try it

Response

200 Success.

application/json JoinOptions

POST /v1/join/verify Prove another address with its code

The address becomes a proven second address on this account, and that is what opens the workspaces on its domain.

Only a signed-in session reaches this. Try it

Request body

application/json JoinVerifyInput

Response

200 Success.

application/json JoinOptions

POST /v1/join/workspaces/{id} Join a workspace the caller was offered

A workspace not in the offer reads as missing.

Only a signed-in session reaches this. Try it

Parameters

id requiredpathstring

Response

200 Success.

application/json JoinResult

join requests

GET /v1/join-requests List requests to join this workspace

Only a signed-in session reaches this. Needs the members.manage permission. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Response

200 Success.

application/json JoinRequestList

POST /v1/join-requests/{id} Answer a request to join this workspace

Only a signed-in session reaches this. Needs the members.manage permission. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Request body

application/json DecideAccessInput

Response

204 Done, with no content.

mail in

GET /v1/mail-in List mail-in batches

A member sees the batches they asked for.

A signed-in session, or an API key or OAuth token with the mailin:read scope. Try it

Parameters

limitqueryinteger
cursorquerystring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json MailInBatchPage

POST /v1/mail-in Request envelopes and a mail-in batch

envelopes is how many to send, and the answer says how many can still be requested this week. The estimate holds that many documents of this month's allowance. Both holds commit with the batch, or not at all. Left out, afterScan follows the workspace's shredding setting.

A signed-in session, or an API key or OAuth token with the mailin:write scope. Needs the mail_in plan feature. Needs a live plan. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Request body

application/json CreateMailInInput

Response

201 Success.

application/json MailInRequested

GET /v1/mail-in/{id} Get a mail-in batch

A signed-in session, or an API key or OAuth token with the mailin:read scope. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json MailInBatch

PATCH /v1/mail-in/{id} Change the address on a batch

For the person who asked or a manager, until the batch finishes. A batch's code cannot be changed.

A signed-in session, or an API key or OAuth token with the mailin:write scope. Needs a live plan. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Request body

application/json ChangeMailInAddressInput

Response

200 Success.

application/json MailInBatch

GET /v1/mail-in/{id}/barcode Get a batch's barcode

A Code 128 image of the batch reference.

A signed-in session, or an API key or OAuth token with the mailin:read scope. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

image/png string (binary)

POST /v1/mail-in/{id}/cancel Cancel a batch nobody has started on

A signed-in session, or an API key or OAuth token with the mailin:write scope. Needs a live plan. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Response

200 Success.

application/json MailInBatch

GET /v1/mail-in/{id}/cover-sheet Get a batch's cover sheet

A signed-in session, or an API key or OAuth token with the mailin:read scope. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/pdf string (binary)

GET /v1/mail-in/{id}/documents List what came out of a batch

A signed-in session, or an API key or OAuth token with the mailin:read scope. Try it

Parameters

id requiredpathstring
limitqueryinteger
cursorquerystring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json MailInDocumentPage

GET /v1/mail-in/allowance See this month's paper allowance

A signed-in session, or an API key or OAuth token with the mailin:read scope. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json MailInAllowance

GET /v1/mail-in/barcode Get the workspace's barcode

A Code 128 image of the workspace reference.

A signed-in session, or an API key or OAuth token with the mailin:read scope. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

image/png string (binary)

GET /v1/mail-in/cover-sheet Get the workspace's cover sheet

One page to put on top of a stack of paper, with the barcode on it.

A signed-in session, or an API key or OAuth token with the mailin:read scope. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/pdf string (binary)

GET /v1/mail-in/settings See your saved mail-in address

One person's own, in this workspace. Nobody else reads it.

A signed-in session, or an API key or OAuth token with the mailin:read scope. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json MailInSettings

PUT /v1/mail-in/settings Save your mail-in address

Envelopes and returned paper go here when a request names no address. Null forgets it. Batches already requested keep theirs: change those one at a time.

A signed-in session, or an API key or OAuth token with the mailin:write scope. Needs a live plan. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Request body

application/json MailInSettingsInput

Response

200 Success.

application/json MailInSettings

mcp

POST /mcp Call the MCP server

One JSON-RPC 2.0 message in each request. Only an OAuth token issued for this server gets in, never a key or a session, and it is held to one workspace and to what the person can do. A plain answer is JSON. Only subscriptions/listen answers with server-sent events.

Only an OAuth token with the mcp:tools scope reaches this. Try it

Parameters

MCP-Protocol-Versionheaderstring

The revision in use, once initialize has settled one. It must match the version in the message.

Mcp-Methodheaderstring

The method, on the current revision: the same value as in the message.

Mcp-Nameheaderstring

The tool or resource named in the message, on the current revision.

Request body

application/json McpRequest

Response

200 Success.

application/json McpResponse

text/event-stream string

202 A notification, which has no id, accepted with no content.

400 Not one JSON-RPC message, or a protocol version this server does not have.

application/json McpResponse

401 No token, or one not issued for this server. WWW-Authenticate says where to get one.

application/json Error

403 The token lacks a scope the call needs, or the Origin is not one this server knows. A token without mcp:tools gets the usual error body.

application/json McpResponse

404 No such method, on the current protocol revision. Older revisions answer 200 with the same error.

application/json McpResponse

429 Too many requests. Retry-After says when to try again.

application/json Error

me

DELETE /v1/me Close the caller's account

Answers 202: the account closes now and the data follows after the grace period.

Only a signed-in session reaches this. Try it

Request body

application/json DeleteAccountInput

Response

202 Success.

application/json AccountDeletion

GET /v1/me Get the signed-in person and their workspaces

The first verified token creates the person, a personal workspace, the default categories and a trial, so this is also the first call after sign-up. There is no sign-up route.

Only a signed-in session reaches this. Try it

Response

200 Success.

application/json Me

PATCH /v1/me Change the signed-in person's profile

Only a signed-in session reaches this. Try it

Request body

application/json UpdateProfileInput

Response

200 Success.

application/json Me

GET /v1/me/clients List the workspaces you serve

Every workspace where you are an owner, admin or accountant, with what waits on it: expenses to review, reports to approve and pay, and unmatched card charges.

Only a signed-in session reaches this. Try it

Response

200 Success.

application/json ClientWorkspaces

POST /v1/me/email-bounce/clear Clear the bounce on the caller's address

Mail to it starts again.

Only a signed-in session reaches this. Try it

Response

204 Done, with no content.

DELETE /v1/me/forwarding-address Give up the chosen forwarding address

The random address keeps working. Only the chosen one stops.

A signed-in session, or an API key or OAuth token with the documents:write scope. Try it

Response

204 Done, with no content.

POST /v1/me/forwarding-address Choose a forwarding address

Beside the random one, which keeps working. A name someone else holds is refused.

A signed-in session, or an API key or OAuth token with the documents:write scope. Try it

Request body

application/json ForwardingAliasInput

Response

200 Success.

application/json ForwardingAlias

POST /v1/me/forwarding-address/rotate Issue a new forwarding address

The old address stops working the moment this one is issued.

A signed-in session, or an API key or OAuth token with the documents:write scope. Try it

Response

201 Success.

application/json Me

GET /v1/me/invoices List invoices sent to you

Found by your own verified email address or phone number, whoever sent them. Drafts and void invoices are left out.

Only a signed-in session reaches this. Try it

Parameters

qquerystring

Response

200 Success.

application/json InvoicesToPay

POST /v1/me/merge Start merging another account into this one

Answers 202. A code goes to the other address.

Only a signed-in session reaches this. Try it

Request body

application/json StartMergeInput

Response

202 Success.

application/json MergeStarted

POST /v1/me/merge/confirm Finish merging another account into this one

Only a signed-in session reaches this. Try it

Request body

application/json ConfirmMergeInput

Response

200 Success.

application/json AccountMerged

POST /v1/me/onboarding Save what the person came for on first run

Only a signed-in session reaches this. Try it

Request body

application/json OnboardingInput

Response

200 Success.

application/json OnboardingResult

GET /v1/me/recovery-codes See how many recovery codes are left

Only a signed-in session reaches this. Try it

Response

200 Success.

application/json RecoveryCodes

POST /v1/me/recovery-codes Issue new recovery codes

They are in this response and nowhere else, and the old ones stop working.

Only a signed-in session reaches this. Try it

Response

201 Success.

application/json RecoveryCodesIssued

GET /v1/me/report-archives List the caller's archived reports

What is left to read of workspaces that closed.

Only a signed-in session reaches this. Try it

Response

200 Success.

application/json ReportArchiveList

GET /v1/me/report-archives/{id} Read an archived report

Only a signed-in session reaches this. Try it

Parameters

id requiredpathstring

Response

200 Success.

application/json ReportArchiveDetail

POST /v1/me/report-suspicious Report suspicious activity

Locks the account against changes until support unlocks it. Reading stays open.

Only a signed-in session reaches this. Try it

Request body (optional)

application/json ReportSuspiciousInput

Response

204 Done, with no content.

GET /v1/me/sessions List the caller's sessions

Only a signed-in session reaches this. Try it

Response

200 Success.

application/json SessionList

DELETE /v1/me/sessions/{id} Sign one session out

Only a signed-in session reaches this. Try it

Parameters

id requiredpathstring

Response

204 Done, with no content.

POST /v1/me/sign-out-everywhere Sign out everywhere

Every session, and every app connected before now, stops on its next request.

Only a signed-in session reaches this. Try it

Response

204 Done, with no content.

GET /v1/me/travel-profile Read your travel profile

Yours alone: no admin, manager or other workspace can read it. Document numbers come back as their last four.

Only a signed-in session reaches this. Try it

Response

200 Success.

application/json TravelProfile

PATCH /v1/me/travel-profile Change your travel profile

Only a signed-in session reaches this. Try it

Request body

application/json UpdateTravelProfileInput

Response

200 Success.

application/json TravelProfile

DELETE /v1/me/travel-profile/documents/{type} Remove a travel document

Only a signed-in session reaches this. Try it

Parameters

type requiredpathstring

Response

204 Done, with no content.

PUT /v1/me/travel-profile/documents/{type} Save a travel document

One of each kind: a passport, national ID, Known Traveler Number or Redress Number. The number is stored encrypted.

Only a signed-in session reaches this. Try it

Parameters

type requiredpathstring

Request body

application/json SaveTravelDocumentInput

Response

200 Success.

application/json TravelProfile

members

GET /v1/members List the members of this workspace

Pay-adjacent fields stay empty unless the caller has members.manage.

A signed-in session, or an API key or OAuth token with the members:read scope. Try it

Parameters

qquerystring
statusqueryACTIVE SUSPENDED
rolequeryOWNER ADMIN APPROVER ACCOUNTANT AUDITOR MEMBER EDITOR CARD_ADMIN PEOPLE_ADMIN PAYMENTS_ADMIN
limitqueryinteger
cursorquerystring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json MemberPage

DELETE /v1/members/{id} Remove a member

Their expenses stay. Anyone may remove their own membership. Taking access away works on a lapsed plan.

A signed-in session, or an API key or OAuth token with the members:write scope. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Response

204 Done, with no content.

GET /v1/members/{id} Get a member

A signed-in session, or an API key or OAuth token with the members:read scope. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json Member

PATCH /v1/members/{id} Change a member

Only an owner can change an owner, or make someone an owner.

A signed-in session, or an API key or OAuth token with the members:write scope. Needs the members.manage permission. Needs a live plan. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Request body

application/json UpdateMemberInput

Response

200 Success.

application/json Member

POST /v1/members/{id}/reset-2fa Reset a member's two-factor sign-in

Only a signed-in session reaches this. Needs the members.manage permission. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Response

204 Done, with no content.

GET /v1/members/{id}/sessions List a member's sessions

Only a signed-in session reaches this. Needs the members.manage permission. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Response

200 Success.

application/json SessionList

DELETE /v1/members/{id}/sessions/{sessionId} Sign one of a member's sessions out

Open on a lapsed plan: taking access away is never stopped.

Only a signed-in session reaches this. Needs the members.manage permission. Try it

Parameters

id requiredpathstring
sessionId requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Response

204 Done, with no content.

POST /v1/members/bulk Change many members at once

A member the rules refuse stays as they were, and the rest still change.

A signed-in session, or an API key or OAuth token with the members:write scope. Needs the members.manage permission. Needs a live plan. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Request body

application/json BulkMemberInput

Response

200 Success.

application/json BulkMemberResult

POST /v1/members/provision Provision and remove people from a list

From a request body or an https address, with a dry run. Answers with who was added, updated and removed, and who was skipped and why. A change of address needs a domain this workspace verified. SFTP is not offered.

A signed-in session, or an API key or OAuth token with the members:write scope. Needs the members.manage permission. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Request body

application/json ProvisionInput

Response

200 Success.

application/json ProvisionResult

GET /v1/members/seats See seats in use against the plan

A signed-in session, or an API key or OAuth token with the members:read scope. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json SeatUsage

merchants

GET /v1/merchants List merchants

A signed-in session, or an API key or OAuth token with the expenses:read scope. Try it

Parameters

qquerystring
archivedquerystring
limitqueryinteger
cursorquerystring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json MerchantPage

POST /v1/merchants Create a merchant

A signed-in session, or an API key or OAuth token with the expenses:write scope. Needs the settings.manage permission. Needs a live plan. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body

application/json CreateMerchantInput

Response

201 Success.

application/json Merchant

GET /v1/merchants/{id} Get a merchant

A signed-in session, or an API key or OAuth token with the expenses:read scope. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json Merchant

PATCH /v1/merchants/{id} Change a merchant

A signed-in session, or an API key or OAuth token with the expenses:write scope. Needs the settings.manage permission. Needs a live plan. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body

application/json MerchantInput

Response

200 Success.

application/json Merchant

DELETE /v1/merchants/{id}/aliases/{aliasId} Remove a spelling from a merchant

A signed-in session, or an API key or OAuth token with the expenses:write scope. Needs the settings.manage permission. Needs a live plan. Try it

Parameters

id requiredpathstring
aliasId requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json Merchant

POST /v1/merchants/{id}/merge Merge another merchant into this one

A signed-in session, or an API key or OAuth token with the expenses:write scope. Needs the settings.manage permission. Needs a live plan. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body

application/json MergeMerchantInput

Response

200 Success.

application/json Merchant

mileage

POST /v1/mileage Record a trip

A signed-in session, or an API key or OAuth token with the expenses:write scope. Needs the mileage plan feature. Needs a live plan. Try it

Parameters

Idempotency-Keyheaderstring

Replaying a key returns the first record instead of creating, and charging for, a second. While the first request is still running, a retry answers 409 IDEMPOTENCY_IN_PROGRESS with a Retry-After, and is not charged. The same key on a different request answers 409 IDEMPOTENCY_CONFLICT.

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body

application/json CreateTripInput

Response

201 Success.

application/json Trip

PUT /v1/mileage/{id} Replace a trip

A signed-in session, or an API key or OAuth token with the expenses:write scope. Needs the mileage plan feature. Needs a live plan. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body

application/json CreateTripInput

Response

200 Success.

application/json Trip

POST /v1/mileage/{id}/odometer-photos Attach an odometer photo to a trip

A signed-in session, or an API key or OAuth token with the expenses:write scope. Needs the mileage plan feature. Needs a live plan. Try it

Parameters

id requiredpathstring
clientqueryios android

The app sending the file. Leave it out in a browser.

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body

multipart/form-data

file requiredstring (binary)
reading requiredSTART END

application/json

uploadId requiredstring

From POST /v1/uploads, once the file has been sent to the URL it answered with.

reading requiredSTART END

Response

201 Success.

application/json Trip

GET /v1/mileage/commute Read your commute

What a workspace that excludes commutes takes off your trips.

Only a signed-in session reaches this. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json Commute

PUT /v1/mileage/commute Save your commute

Your home address, as you type it on a trip, and the distance one way.

Only a signed-in session reaches this. Needs the mileage plan feature. Needs a live plan. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body

application/json CommuteInput

Response

200 Success.

application/json Commute

GET /v1/mileage/log Read the mileage log

A signed-in session, or an API key or OAuth token with the expenses:read scope. Try it

Parameters

fromquerystring
toquerystring
scopequerymine all
ownerIdquerystring
vehicleIdquerystring
purposequerybusiness medical charity
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json MileageLog

GET /v1/mileage/log/export Export the mileage log

The file comes back as JSON, with its content as text.

A signed-in session, or an API key or OAuth token with the expenses:read scope. Try it

Parameters

fromquerystring
toquerystring
scopequerymine all
ownerIdquerystring
vehicleIdquerystring
purposequerybusiness medical charity
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json DownloadableFile

GET /v1/mileage/places List saved places

Only a signed-in session reaches this. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json SavedPlaceList

PUT /v1/mileage/places Save a place

Only a signed-in session reaches this. Needs the mileage plan feature. Needs a live plan. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body

application/json SavedPlaceInput

Response

200 Success.

application/json SavedPlace

DELETE /v1/mileage/places/{id} Delete a saved place

Only a signed-in session reaches this. Needs a live plan. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

204 Done, with no content.

POST /v1/mileage/route-estimate Estimate a route's distance

Show attribution beside the figures. Each route has a token: send it back as routeToken with exactly that distance and those addresses, and the trip counts as measured by a map.

Only a signed-in session reaches this. Needs the mileage plan feature. Needs a live plan. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body

application/json RouteEstimateInput

Response

200 Success.

application/json RouteEstimate

GET /v1/mileage/route-service See whether route distances are available

Only a signed-in session reaches this. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json RouteService

GET /v1/mileage/routes List saved routes

A signed-in session, or an API key or OAuth token with the expenses:read scope. Try it

Parameters

qquerystring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json TripRoutes

GET /v1/mileage/year Total the distance driven in a year

Only a signed-in session reaches this. Try it

Parameters

date requiredquerystring
tripIdquerystring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json MileageYear

mileage rates

GET /v1/mileage-rates List mileage rates

A signed-in session, or an API key or OAuth token with the expenses:read scope. Try it

Parameters

qquerystring
archivedquerystring
limitqueryinteger
cursorquerystring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json MileageRatePage

POST /v1/mileage-rates Create a mileage rate

Rates are in hundredths of a cent per unit, so 72.5 cents is 7250.

Only a signed-in session reaches this. Needs the settings.manage permission. Needs a live plan. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body

application/json MileageRateInput

Response

201 Success.

application/json MileageRate

DELETE /v1/mileage-rates/{id} Delete a mileage rate

Only a signed-in session reaches this. Needs the settings.manage permission. Needs a live plan. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

204 Done, with no content.

GET /v1/mileage-rates/{id} Get a mileage rate

A signed-in session, or an API key or OAuth token with the expenses:read scope. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json MileageRate

PATCH /v1/mileage-rates/{id} Change a mileage rate

A change to the amount, the start or the end clears autoGenerated.

Only a signed-in session reaches this. Needs the settings.manage permission. Needs a live plan. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body

application/json UpdateMileageRateInput

Response

200 Success.

application/json MileageRate

GET /v1/mileage-rates/settings Read the distance settings

Track tax, Require GPS or map entry, Exclude commutes and Auto-update government rate.

Only a signed-in session reaches this. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json DistanceSettings

PUT /v1/mileage-rates/settings Change the distance settings

Any Exclude commutes value but NONE holds Require GPS or map entry on. Turning Auto-update government rate on adds the rates at once.

Only a signed-in session reaches this. Needs the settings.manage permission. Needs a live plan. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body

application/json UpdateDistanceSettingsInput

Response

200 Success.

application/json DistanceSettings

notification preferences

GET /v1/notification-preferences Get notification preferences

Only a signed-in session reaches this. Try it

Response

200 Success.

application/json NotificationPreferenceList

PUT /v1/notification-preferences Change notification preferences

Only a signed-in session reaches this. Try it

Request body

application/json UpdatePreferencesInput

Response

200 Success.

application/json NotificationPreferenceList

notifications

GET /v1/notifications List notifications

With how many are unread.

Only a signed-in session reaches this. Try it

Parameters

limitqueryinteger
cursorquerystring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json NotificationPage

POST /v1/notifications/{id}/read Mark a notification as read

Only a signed-in session reaches this. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Response

200 Success.

application/json Notification

POST /v1/notifications/read-all Mark every notification as read

Only a signed-in session reaches this. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Response

200 Success.

application/json UpdatedCount

oauth

GET /oauth/authorize Start an authorization

Open this in the person's browser. It never renders anything itself: it sends them to the consent screen in the web app, or back to redirect_uri with an error. A bad client or redirect cannot be sent back to anyone, so it stops here with an error instead.

No credential needed. Try it

Parameters

response_type requiredquerycode
client_id requiredquerystring

A registered client id, or the URL of a client metadata document.

redirect_uri requiredquerystring

Exactly as registered.

scopequerystring

Scopes separated by spaces. all asks for every API scope.

statequerystring

Comes back unchanged on the redirect.

code_challenge requiredquerystring

43 characters of base64url: the SHA-256 of the verifier.

code_challenge_method requiredqueryS256
resourcequerystring

The API or the MCP server. A token for one is refused at the other.

Response

302 To the consent screen, or back to redirect_uri with error, error_description and state.

POST /oauth/register Register an app dynamically

Open to anyone, as RFC 7591 has it. A client nobody authorizes is deleted after a week.

No credential needed. Try it

Request body

application/json OAuthClientMetadata

Response

201 Registered. Never cached.

application/json OAuthRegisteredClient

POST /oauth/revoke Revoke a token

Takes a form, not JSON. Answers 200 for a token this client does not hold too, as RFC 7009 says.

No credential needed. Try it

Request body

application/x-www-form-urlencoded OAuthRevokeForm

Response

200 Revoked, with no content.

POST /oauth/token Exchange a code or a refresh token

Takes a form, not JSON. A refresh token rotates: using an old one ends the whole family.

No credential needed. Try it

Request body

application/x-www-form-urlencoded OAuthTokenForm

Response

200 A new pair. Never cached.

application/json OAuthToken

GET /v1/oauth/clients List registered apps

Only a signed-in session reaches this. Needs the developer.manage permission. Try it

Parameters

limitqueryinteger
cursorquerystring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Response

200 Success.

application/json OAuthClientPage

POST /v1/oauth/clients Register an app

A confidential app has a secret. It is in this response and the rotate response, and nowhere else.

Only a signed-in session reaches this. Needs the developer.manage permission. Needs the developer_api plan feature. Needs a live plan. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Request body

application/json CreateOAuthClientInput

Response

201 Success.

application/json OAuthClientWithSecret

DELETE /v1/oauth/clients/{id} Delete a registered app

Open on a lapsed plan, like revoking a key.

Only a signed-in session reaches this. Needs the developer.manage permission. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Response

204 Done, with no content.

GET /v1/oauth/clients/{id} Get a registered app

Only a signed-in session reaches this. Needs the developer.manage permission. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Response

200 Success.

application/json OAuthClient

PATCH /v1/oauth/clients/{id} Change a registered app

Setting enabled to false stops every token this app holds on the next request.

Only a signed-in session reaches this. Needs the developer.manage permission. Needs a live plan. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Request body

application/json UpdateOAuthClientInput

Response

200 Success.

application/json OAuthClient

POST /v1/oauth/clients/{id}/rotate-secret Issue a new client secret

Only a signed-in session reaches this. Needs the developer.manage permission. Needs a live plan. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Response

201 Success.

application/json OAuthClientWithSecret

GET /v1/oauth/connections List the apps connected to the caller's account

Only a signed-in session reaches this. Try it

Parameters

limitqueryinteger
cursorquerystring

Response

200 Success.

application/json OAuthConnectionPage

DELETE /v1/oauth/connections/{id} Disconnect an app

Open on a lapsed plan and for any role: nobody should have to pay to cut an app off.

Only a signed-in session reaches this. Try it

Parameters

id requiredpathstring

Response

204 Done, with no content.

POST /v1/oauth/consent Approve an app

Answers with where to send the browser next. scopes may only narrow what was asked for.

Only a signed-in session reaches this. Try it

Request body

application/json OAuthConsentInput

Response

200 Success.

application/json OAuthRedirect

POST /v1/oauth/consent/deny Refuse an app

Answers with where to send the browser next.

Only a signed-in session reaches this. Try it

Request body

application/json OAuthDenyInput

Response

200 Success.

application/json OAuthRedirect

parse

GET /v1/parse List documents turned into Markdown

A signed-in session, or an API key or OAuth token with the documents:read scope. Needs the developer_api plan feature. Needs a live plan. Try it

Parameters

detailsqueryboolean
tagquerystring
limitqueryinteger
cursorquerystring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json ParsedDocumentPage

POST /v1/parse Turn a document into Markdown

Multipart with a field named file, or JSON with uploadId, file_url or file_data. Tables and reading order are kept. details adds a box for each line, and meta holds pages, sharpness and OCR scores. Up to 50 pages.

A signed-in session, or an API key or OAuth token with the documents:write scope. Needs the developer_api plan feature. Needs a live plan. Try it

Parameters

Idempotency-Keyheaderstring

Replaying a key returns the first record instead of creating, and charging for, a second. While the first request is still running, a retry answers 409 IDEMPOTENCY_IN_PROGRESS with a Retry-After, and is not charged. The same key on a different request answers 409 IDEMPOTENCY_CONFLICT.

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Request body

multipart/form-data

file requiredstring (binary)
external_idstring
asyncboolean
tagsarray of string
auto_deleteboolean
detailsboolean

application/json

Name the file with one of uploadId, file_url or file_data.

uploadIdstring

From POST /v1/uploads, once the file has been sent to the URL it answered with.

file_urlstring

A public https address to fetch the file from. Redirects are not followed.

file_datastring

The file itself in base64, raw or as a data URI.

file_namestring

What to call a file sent as file_url or file_data.

external_idstring
asyncboolean
tagsarray of string
auto_deleteboolean
detailsboolean

Response

201 Success.

application/json ParsedDocument

DELETE /v1/parse/{id} Delete one

A signed-in session, or an API key or OAuth token with the documents:write scope. Needs the developer_api plan feature. Needs a live plan. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Response

204 Done, with no content.

GET /v1/parse/{id} Get a document as Markdown

A signed-in session, or an API key or OAuth token with the documents:read scope. Needs the developer_api plan feature. Needs a live plan. Try it

Parameters

id requiredpathstring
detailsqueryboolean
tagquerystring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json ParsedDocument

PATCH /v1/parse/{id} Change the title, notes or tags of one

A signed-in session, or an API key or OAuth token with the documents:write scope. Needs the developer_api plan feature. Needs a live plan. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Request body

application/json ParseUpdateInput

Response

200 Success.

application/json ParsedDocument

POST /v1/parse/async Turn a document into Markdown, in the background

Answers at once. document.processed says when it is done.

A signed-in session, or an API key or OAuth token with the documents:write scope. Needs the developer_api plan feature. Needs a live plan. Try it

Parameters

Idempotency-Keyheaderstring

Replaying a key returns the first record instead of creating, and charging for, a second. While the first request is still running, a retry answers 409 IDEMPOTENCY_IN_PROGRESS with a Retry-After, and is not charged. The same key on a different request answers 409 IDEMPOTENCY_CONFLICT.

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Request body

multipart/form-data

file requiredstring (binary)
external_idstring
asyncboolean
tagsarray of string
auto_deleteboolean
detailsboolean

application/json

Name the file with one of uploadId, file_url or file_data.

uploadIdstring

From POST /v1/uploads, once the file has been sent to the URL it answered with.

file_urlstring

A public https address to fetch the file from. Redirects are not followed.

file_datastring

The file itself in base64, raw or as a data URI.

file_namestring

What to call a file sent as file_url or file_data.

external_idstring
asyncboolean
tagsarray of string
auto_deleteboolean
detailsboolean

Response

202 Success.

application/json ParsedDocument

parse set

GET /v1/parse-set List Markdown sets

A signed-in session, or an API key or OAuth token with the documents:read scope. Needs the developer_api plan feature. Needs a live plan. Try it

Parameters

limitqueryinteger
cursorquerystring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json DocumentSetPage

POST /v1/parse-set Split a PDF and turn each document in it into Markdown

Multipart with a field named file, or JSON with uploadId, file_url or file_data. Up to 50 MB. Answers at once.

A signed-in session, or an API key or OAuth token with the documents:write scope. Needs the developer_api plan feature. Needs a live plan. Try it

Parameters

Idempotency-Keyheaderstring

Replaying a key returns the first record instead of creating, and charging for, a second. While the first request is still running, a retry answers 409 IDEMPOTENCY_IN_PROGRESS with a Retry-After, and is not charged. The same key on a different request answers 409 IDEMPOTENCY_CONFLICT.

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Request body

multipart/form-data

file requiredstring (binary)
split_by_blank_pageboolean
every_pageboolean
rangesstring
document_typesarray of string
blueprint_namestring
external_idstring

application/json

Name the file with one of uploadId, file_url or file_data.

uploadIdstring

From POST /v1/uploads, once the file has been sent to the URL it answered with.

split_by_blank_pageboolean
every_pageboolean
rangesstring
document_typesarray of string
blueprint_namestring
file_urlstring

A public https address to fetch the file from. Redirects are not followed.

file_datastring

The file itself in base64, raw or as a data URI.

file_namestring

What to call a file sent as file_url or file_data.

external_idstring

Response

202 Success.

application/json DocumentSet

GET /v1/parse-set/{id} Get a Markdown set

A signed-in session, or an API key or OAuth token with the documents:read scope. Needs the developer_api plan feature. Needs a live plan. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json DocumentSet

payment accounts

GET /v1/payment-accounts List cards and bank accounts

A member sees their own and those of the people reporting to them. Numbers are last four only.

A signed-in session, or an API key or OAuth token with the cards:read scope. Try it

Parameters

archivedquerystring
limitqueryinteger
cursorquerystring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json PaymentAccountPage

POST /v1/payment-accounts Add a card or bank account

Only a signed-in session reaches this. Needs the card_feeds plan feature. Needs a live plan. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Request body

application/json PaymentAccountInput

Response

201 Success.

application/json PaymentAccount

DELETE /v1/payment-accounts/{id} Delete a card or bank account

Only a signed-in session reaches this. Needs a live plan. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Response

204 Done, with no content.

GET /v1/payment-accounts/{id} Get a card or bank account

A signed-in session, or an API key or OAuth token with the cards:read scope. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json PaymentAccount

PATCH /v1/payment-accounts/{id} Change a card or bank account

Only a signed-in session reaches this. Needs the card_feeds plan feature. Needs a live plan. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Request body

application/json UpdatePaymentAccountInput

Response

200 Success.

application/json PaymentAccount

POST /v1/payment-accounts/{id}/assign Assign a card to a member

Only a signed-in session reaches this. Needs the card_feeds plan feature. Needs a live plan. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Request body

application/json AssignCardInput

Response

200 Success.

application/json PaymentAccount

POST /v1/payment-accounts/{id}/import Import a statement for one card

A statement imported twice adds nothing.

Only a signed-in session reaches this. Needs the card_feeds plan feature. Needs a live plan. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Request body

multipart/form-data

file requiredstring (binary)
forcestring
createExpensesstring
reimbursablestring
mappingstring

The column mapping, as JSON text. Leave it out to use the suggested one. OFX and QFX need none.

application/json

uploadId requiredstring

From POST /v1/uploads, once the file has been sent to the URL it answered with.

forcestring
createExpensesstring
reimbursablestring
mappingstring

The column mapping, as JSON text. Leave it out to use the suggested one. OFX and QFX need none.

Response

201 Success.

application/json StatementImportResult

POST /v1/payment-accounts/{id}/import/preview Preview a statement for one card

Reads the file and stores nothing.

Only a signed-in session reaches this. Needs the card_feeds plan feature. Needs a live plan. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Request body

multipart/form-data

file requiredstring (binary)
mappingstring

The column mapping, as JSON text. Leave it out to use the suggested one. OFX and QFX need none.

application/json

uploadId requiredstring

From POST /v1/uploads, once the file has been sent to the URL it answered with.

mappingstring

The column mapping, as JSON text. Leave it out to use the suggested one. OFX and QFX need none.

Response

200 Success.

application/json StatementPreview

GET /v1/payment-accounts/{id}/statements List a card's statement periods

A signed-in session, or an API key or OAuth token with the cards:read scope. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json CardStatements

POST /v1/payment-accounts/bulk Change many cards at once

Only a signed-in session reaches this. Needs the card_feeds plan feature. Needs a live plan. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Request body

application/json BulkPaymentAccountInput

Response

200 Success.

application/json BulkPaymentAccountResult

GET /v1/payment-accounts/export Export the card table

The file comes back as JSON, with its content as text.

A signed-in session, or an API key or OAuth token with the cards:read scope. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json DownloadableFile

POST /v1/payment-accounts/import-feed Import a statement file holding many cards

Each row goes to its own card. A card new to this workspace is created.

Only a signed-in session reaches this. Needs the card_feeds plan feature. Needs a live plan. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Request body

multipart/form-data

file requiredstring (binary)
forcestring
createExpensesstring
reimbursablestring
mappingstring

The column mapping, as JSON text. Leave it out to use the suggested one. OFX and QFX need none.

application/json

uploadId requiredstring

From POST /v1/uploads, once the file has been sent to the URL it answered with.

forcestring
createExpensesstring
reimbursablestring
mappingstring

The column mapping, as JSON text. Leave it out to use the suggested one. OFX and QFX need none.

Response

201 Success.

application/json StatementFeedImportResult

POST /v1/payment-accounts/import-feed/preview Preview a statement file holding many cards

Reads the file and stores nothing. Each row names its own card.

Only a signed-in session reaches this. Needs the card_feeds plan feature. Needs a live plan. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Request body

multipart/form-data

file requiredstring (binary)
mappingstring

The column mapping, as JSON text. Leave it out to use the suggested one. OFX and QFX need none.

application/json

uploadId requiredstring

From POST /v1/uploads, once the file has been sent to the URL it answered with.

mappingstring

The column mapping, as JSON text. Leave it out to use the suggested one. OFX and QFX need none.

Response

200 Success.

application/json StatementPreview

GET /v1/payment-accounts/import-template Download the card import template

The file comes back as JSON, with its content as text.

Only a signed-in session reaches this. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json DownloadableFile

people sync

GET /v1/people-sync See the HR connection

The systems on offer, this workspace's connection if it has one, and its recent runs.

Only a signed-in session reaches this. Needs the members.manage permission. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Response

200 Success.

application/json PeopleSync

POST /v1/people-sync/complete-setup Finish setting up the HR connection

Runs the first import. A file connection starts waiting for its first file.

Only a signed-in session reaches this. Needs the members.manage permission. Needs a live plan. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Response

200 Success.

application/json PeopleSync

DELETE /v1/people-sync/connection Disconnect the HR system

Everyone it added stays, and the lock it put on approvals lifts.

Only a signed-in session reaches this. Needs the members.manage permission. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Response

204 Done, with no content.

PUT /v1/people-sync/connection Connect an HR system

With the credentials that system asks for, which are tried against it before anything is saved. One HR system per workspace. For a file connection, the answer carries the token behind the file drop and webhook, once.

Only a signed-in session reaches this. Needs the members.manage permission. Needs a live plan. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Request body

application/json ConnectHrInput

Response

200 Success.

application/json HrConnected

PUT /v1/people-sync/drop/{token} Drop an HR export at its address

For a scheduled job: curl -T export.csv to this address. A drop is everyone, so anyone it leaves out has left. Needs no sign-in: the token in the address, shown once when the HR system was connected, is the credential. Nothing imports until setup is complete.

No credential needed. Try it

Parameters

token requiredpathstring

Request body

text/csv string

Response

200 Success.

application/json PeopleSyncRun

POST /v1/people-sync/import Import people from a file

A CSV sent first to POST /v1/uploads, read once and not kept. With complete, anyone the file leaves out has left.

Only a signed-in session reaches this. Needs the members.manage permission. Needs a live plan. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Request body

application/json ImportPeopleFileInput

Response

200 Success.

application/json PeopleSyncRun

PATCH /v1/people-sync/settings Change how the HR system sets approvers

Only a signed-in session reaches this. Needs the members.manage permission. Needs a live plan. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Request body

application/json UpdateHrSettingsInput

Response

200 Success.

application/json PeopleSync

POST /v1/people-sync/sync Sync people now

Up to 2 times in 24 hours. The daily sync runs whatever the count.

Only a signed-in session reaches this. Needs the members.manage permission. Needs a live plan. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Response

200 Success.

application/json PeopleSync

POST /v1/people-sync/webhook/{token} Send people from your own system

A list of people as JSON. With complete, anyone it leaves out has left. Needs no sign-in: the token in the address, shown once when the HR system was connected, is the credential. Nothing imports until setup is complete.

No credential needed. Try it

Parameters

token requiredpathstring

Request body

application/json PeopleWebhookInput

Response

200 Success.

application/json PeopleSyncRun

per diem

POST /v1/per-diem Record a per diem

Meals and lodging file as separate expenses, so each deducts at its own percentage.

A signed-in session, or an API key or OAuth token with the expenses:write scope. Needs the per_diem plan feature. Needs a live plan. Try it

Parameters

Idempotency-Keyheaderstring

Replaying a key returns the first record instead of creating, and charging for, a second. While the first request is still running, a retry answers 409 IDEMPOTENCY_IN_PROGRESS with a Retry-After, and is not charged. The same key on a different request answers 409 IDEMPOTENCY_CONFLICT.

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body

application/json CreatePerDiemInput

Response

201 Success.

application/json ExpenseDetails

per diem rates

GET /v1/per-diem-rates List per diem rates

A signed-in session, or an API key or OAuth token with the expenses:read scope. Try it

Parameters

qquerystring
archivedquerystring
limitqueryinteger
cursorquerystring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json PerDiemRatePage

POST /v1/per-diem-rates Create a per diem rate

Only a signed-in session reaches this. Needs the settings.manage permission. Needs the per_diem plan feature. Needs a live plan. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body

application/json PerDiemRateInput

Response

201 Success.

application/json PerDiemRate

DELETE /v1/per-diem-rates/{id} Delete a per diem rate

Only a signed-in session reaches this. Needs the settings.manage permission. Needs the per_diem plan feature. Needs a live plan. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

204 Done, with no content.

GET /v1/per-diem-rates/{id} Get a per diem rate

A signed-in session, or an API key or OAuth token with the expenses:read scope. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json PerDiemRate

PATCH /v1/per-diem-rates/{id} Change a per diem rate

Only a signed-in session reaches this. Needs the settings.manage permission. Needs the per_diem plan feature. Needs a live plan. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body

application/json UpdatePerDiemRateInput

Response

200 Success.

application/json PerDiemRate

POST /v1/per-diem-rates/bulk Change or delete several per diem rates

All of them or none: an id that is not in this workspace stops the whole request with a 404.

Only a signed-in session reaches this. Needs the settings.manage permission. Needs the per_diem plan feature. Needs a live plan. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body

application/json BulkPerDiemInput

Response

200 Success.

application/json BulkPerDiemResult

GET /v1/per-diem-rates/export Download per diem rates as CSV

The file comes back as JSON, with its content as text, in the columns the import reads.

Only a signed-in session reaches this. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json DownloadableFile

POST /v1/per-diem-rates/import Import per diem rates from CSV

Send the CSV as text/plain, or as JSON with a csv field.

Only a signed-in session reaches this. Needs the settings.manage permission. Needs the per_diem plan feature. Needs a live plan. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body

application/json CatalogImportInput

Response

201 Success.

application/json CatalogImportResult

GET /v1/per-diem-rates/settings Read the per diem settings

Only a signed-in session reaches this. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json PerDiemSettings

PUT /v1/per-diem-rates/settings Set the default per diem category

Only a signed-in session reaches this. Needs the settings.manage permission. Needs the per_diem plan feature. Needs a live plan. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body

application/json UpdatePerDiemSettingsInput

Response

200 Success.

application/json PerDiemSettings

POST /v1/per-diem-rates/templates Add per diem rates from a country template

Adds the rates, or puts ones already in the list back to the figures. Nobody has checked these figures against the authority yet.

Only a signed-in session reaches this. Needs the settings.manage permission. Needs the per_diem plan feature. Needs a live plan. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body

application/json PerDiemTemplateInput

Response

200 Success.

application/json CatalogImportResult

personal rules

GET /v1/personal-rules List a person's rules

The caller's own, or with ownerId, an employee's. Naming someone else needs policies.manage.

A signed-in session, or an API key or OAuth token with the rules:read scope. Try it

Parameters

ownerIdquerystring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json AutomationRuleList

POST /v1/personal-rules Add a rule for a person

For the caller, or with ownerId, for an employee. It runs on what that person spends, and can set tags and billable.

A signed-in session, or an API key or OAuth token with the rules:write scope. Needs a live plan. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Request body

application/json PersonalRuleInput

Response

201 Success.

application/json AutomationRule

DELETE /v1/personal-rules/{id} Delete a person's rule

Name the person with ownerId when the rule is not the caller's.

A signed-in session, or an API key or OAuth token with the rules:write scope. Needs a live plan. Try it

Parameters

id requiredpathstring
ownerIdquerystring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Response

204 Done, with no content.

PATCH /v1/personal-rules/{id} Change a person's rule

Name the person with ownerId when the rule is not the caller's.

A signed-in session, or an API key or OAuth token with the rules:write scope. Needs a live plan. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Request body

application/json PersonalRuleInput

Response

200 Success.

application/json AutomationRule

POST /v1/personal-rules/{id}/apply Run the caller's own rule over their unsubmitted expenses

A field the caller set by hand stays as it is.

Only a signed-in session reaches this. Needs a live plan. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Response

200 Success.

application/json AutomationApply

POST /v1/personal-rules/{id}/test Count what the caller's own rule would match

Across the caller's own expenses. Changes nothing.

Only a signed-in session reaches this. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Response

200 Success.

application/json AutomationPreview

POST /v1/personal-rules/reorder Put the caller's own rules in a new order

A signed-in session, or an API key or OAuth token with the rules:write scope. Needs a live plan. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Request body

application/json ReorderAutomationRulesInput

Response

200 Success.

application/json AutomationRuleOrder

plaid

POST /v1/plaid/exchange Finish linking a bank

Only a signed-in session reaches this. Needs the card_feeds plan feature. Needs a live plan. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Request body

application/json PlaidExchangeInput

Response

201 Success.

application/json PlaidItem

GET /v1/plaid/items List linked banks

Only a signed-in session reaches this. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json PlaidItemList

DELETE /v1/plaid/items/{id} Unlink a bank

Only a signed-in session reaches this. Needs a live plan. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Response

204 Done, with no content.

PATCH /v1/plaid/items/{id} Rename a linked bank

Only a signed-in session reaches this. Needs the card_feeds plan feature. Needs a live plan. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Request body

application/json RenamePlaidItemInput

Response

200 Success.

application/json PlaidItem

POST /v1/plaid/items/{id}/link-token Start signing in to a bank again

Link in update mode, for a connection that needs the person to sign in again.

Only a signed-in session reaches this. Needs the card_feeds plan feature. Needs a live plan. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Response

201 Success.

application/json PlaidLinkToken

POST /v1/plaid/items/{id}/reconnected Finish signing in to a bank again

Link finished in update mode: the same connection, signed in again.

Only a signed-in session reaches this. Needs the card_feeds plan feature. Needs a live plan. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Response

200 Success.

application/json PlaidItem

POST /v1/plaid/items/{id}/refresh-accounts Bring in cards the bank has added

They come in as new accounts, and nothing else moves.

Only a signed-in session reaches this. Needs the card_feeds plan feature. Needs a live plan. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Response

200 Success.

application/json PlaidItem

POST /v1/plaid/items/{id}/share Move a linked bank's accounts to another workspace

To a workspace the caller manages. No transaction is copied.

Only a signed-in session reaches this. Needs the card_feeds plan feature. Needs a live plan. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Request body

application/json SharePlaidItemInput

Response

200 Success.

application/json PlaidItem

POST /v1/plaid/items/{id}/sync Sync a linked bank now

Only a signed-in session reaches this. Needs the card_feeds plan feature. Needs a live plan. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Response

202 Success.

application/json PlaidItem

POST /v1/plaid/link-token Start linking a bank

The token opens Plaid Link.

Only a signed-in session reaches this. Needs the card_feeds plan feature. Needs a live plan. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Response

201 Success.

application/json PlaidLinkToken

GET /v1/plaid/status See whether bank linking is available

Only a signed-in session reaches this. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json PlaidStatus

policies

GET /v1/policies List policy rules

Name a tab to list the rules on that tab of the rules screen.

Only a signed-in session reaches this. Try it

Parameters

tabquerygeneral cards fields flags
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json PolicyRuleList

POST /v1/policies Create a policy rule

Only a signed-in session reaches this. Needs the policies.manage permission. Needs the policies plan feature. Needs a live plan. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body

application/json PolicyRuleInput

Response

201 Success.

application/json PolicyRule

DELETE /v1/policies/{id} Delete a policy rule

Only a signed-in session reaches this. Needs the policies.manage permission. Needs the policies plan feature. Needs a live plan. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

204 Done, with no content.

PATCH /v1/policies/{id} Change a policy rule

Only a signed-in session reaches this. Needs the policies.manage permission. Needs the policies plan feature. Needs a live plan. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body

application/json UpdatePolicyRuleInput

Response

200 Success.

application/json PolicyRule

profile

DELETE /v1/profile/photo Remove your profile photo

Only a signed-in session reaches this. Try it

Response

204 Done, with no content.

POST /v1/profile/photo Set your profile photo

Send the image to POST /v1/uploads with the purpose profile_photo first. The photo is yours across every workspace.

Only a signed-in session reaches this. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Request body

application/json ProfilePhotoInput

Response

200 Success.

application/json ProfilePhoto

PUT /v1/profile/private Save your private details

With the unlockToken from opening them, before it runs out.

Only a signed-in session reaches this. Try it

Request body

application/json SavePrivateDetailsInput

Response

200 Success.

application/json PrivateDetailsSaved

POST /v1/profile/private/code Email a code that opens your private details

Your legal name, date of birth, a personal phone and a home address, kept sealed. The code goes to the address you sign in with, three an hour at most, and a new one replaces the last.

Only a signed-in session reaches this. Try it

Response

202 Success.

application/json PrivateDetailsCodeSent

POST /v1/profile/private/unlock Open your private details with the emailed code

Your legal name, date of birth, a personal phone and a home address, kept sealed.

Only a signed-in session reaches this. Try it

Request body

application/json UnlockPrivateDetailsInput

Response

200 Success.

application/json PrivateDetailsUnlocked

projects

GET /v1/projects List projects

A signed-in session, or an API key or OAuth token with the expenses:read scope. Try it

Parameters

qquerystring
archivedquerystring
clientIdquerystring
limitqueryinteger
cursorquerystring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json ProjectPage

POST /v1/projects Create a project

A signed-in session, or an API key or OAuth token with the expenses:write scope. Needs the settings.manage permission. Needs a live plan. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body

application/json ProjectInput

Response

201 Success.

application/json Project

DELETE /v1/projects/{id} Delete a project

A signed-in session, or an API key or OAuth token with the expenses:write scope. Needs the settings.manage permission. Needs a live plan. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

204 Done, with no content.

GET /v1/projects/{id} Get a project

A signed-in session, or an API key or OAuth token with the expenses:read scope. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json Project

PATCH /v1/projects/{id} Change a project

A signed-in session, or an API key or OAuth token with the expenses:write scope. Needs the settings.manage permission. Needs a live plan. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body

application/json UpdateProjectInput

Response

200 Success.

application/json Project

POST /v1/projects/import Import projects from CSV

Send the CSV as text/plain, or as JSON with a csv field. Rows that match an existing project update it.

A signed-in session, or an API key or OAuth token with the expenses:write scope. Needs the settings.manage permission. Needs a live plan. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body

application/json CatalogImportInput

Response

201 Success.

application/json CatalogImportResult

public

GET /v1/public/invoices/{token} Read an invoice by its link

Needs no sign-in: the token in the link is the whole of the access. The first read marks it viewed, and the sender hears.

No credential needed. Try it

Parameters

token requiredpathstring

Response

200 Success.

application/json PublicInvoice

POST /v1/public/invoices/{token}/messages Write on an invoice's conversation by its link

Needs no sign-in: the token in the link is the whole of the access.

No credential needed. Try it

Parameters

token requiredpathstring

Request body

application/json InvoiceMessageInput

Response

201 Success.

application/json PublicInvoice

public receipts

GET /v1/public-receipts/{token} Open a public receipt

Needs no sign-in: the signed link is the whole of the access, and it works only while the workspace has public receipts on.

No credential needed. Try it

Parameters

token requiredpathstring

Response

200 Success.

application/json PublicReceipt

reference

GET /v1/reference/countries List country codes and the currency each prints

A signed-in session, or an API key or OAuth token with the expenses:read scope. Try it

Response

200 Success.

application/json ReferenceCountryPage

GET /v1/reference/currencies List currency codes

A signed-in session, or an API key or OAuth token with the expenses:read scope. Try it

Response

200 Success.

application/json ReferenceCurrencyPage

GET /v1/reference/locales List the locales offered in a picker

A workspace can hold any language tag; these are the usual ones.

A signed-in session, or an API key or OAuth token with the expenses:read scope. Try it

Response

200 Success.

application/json ReferenceLocalePage

GET /v1/reference/system-categories List the categories a new workspace starts with

A workspace's own are at GET /v1/categories.

A signed-in session, or an API key or OAuth token with the expenses:read scope. Try it

Response

200 Success.

application/json ReferenceSystemCategoryPage

reimbursements

GET /v1/reimbursements List reimbursement batches

Only a signed-in session reaches this. Needs the reimbursements.manage permission. Try it

Parameters

statusqueryPENDING PROCESSING PAID FAILED CANCELLED
payeeIdquerystring
limitqueryinteger
cursorquerystring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json ReimbursementPage

POST /v1/reimbursements Create reimbursement batches

Answers with one batch per person paid.

Only a signed-in session reaches this. Needs the reimbursements.manage permission. Needs the reimbursements plan feature. Needs a live plan. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body

application/json CreateReimbursementInput

Response

201 Success.

application/json ReimbursementList

GET /v1/reimbursements/{id} Get a reimbursement batch

Only a signed-in session reaches this. Needs the reimbursements.manage permission. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json Reimbursement

POST /v1/reimbursements/{id}/cancel Cancel a batch

Only a signed-in session reaches this. Needs the reimbursements.manage permission. Needs the reimbursements plan feature. Needs a live plan. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json Reimbursement

POST /v1/reimbursements/{id}/confirm-received Confirm the money arrived

The payee says so. No role needed: it is their money.

Only a signed-in session reaches this. Needs a live plan. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Response

200 Success.

application/json Reimbursement

POST /v1/reimbursements/{id}/mark-failed Mark a batch as failed

Only a signed-in session reaches this. Needs the reimbursements.manage permission. Needs the reimbursements plan feature. Needs a live plan. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body

application/json FailReimbursementInput

Response

200 Success.

application/json Reimbursement

POST /v1/reimbursements/{id}/mark-paid Mark a batch as paid

Only a signed-in session reaches this. Needs the reimbursements.manage permission. Needs the reimbursements plan feature. Needs a live plan. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body (optional)

application/json MarkReimbursementPaidInput

Response

200 Success.

application/json Reimbursement

POST /v1/reimbursements/exports/aba Build an ABA file

The file comes back as JSON, with its content as text.

Only a signed-in session reaches this. Needs the reimbursements.manage permission. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body

application/json AbaExportInput

Response

200 Success.

application/json AbaFile

POST /v1/reimbursements/exports/details Download who is owed what, with their bank details

Approved reports only, and only once a workspace has added this export. Account and routing numbers show their last four digits unless fullNumbers is sent by someone who may reveal them, which is audited. The file comes back as JSON, with its content as text, and no copy is kept.

Only a signed-in session reaches this. Needs the reimbursements.manage permission. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body

application/json ReimbursementDetailsInput

Response

200 Success.

application/json DownloadableFile

POST /v1/reimbursements/exports/nacha Build a NACHA file

The file comes back as JSON, with its content as text.

Only a signed-in session reaches this. Needs the reimbursements.manage permission. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body

application/json NachaExportInput

Response

200 Success.

application/json NachaFile

GET /v1/reimbursements/exports/payroll Export what is owed for payroll

The file comes back as JSON, with its content as text.

Only a signed-in session reaches this. Needs the reimbursements.manage permission. Try it

Parameters

idsquerystring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json DownloadableFile

GET /v1/reimbursements/mine List the caller's own reimbursements

Only a signed-in session reaches this. Try it

Parameters

limitqueryinteger
cursorquerystring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json ReimbursementPage

DELETE /v1/reimbursements/my-bank-account Remove the caller's own bank account

Only a signed-in session reaches this. Needs a live plan. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Response

204 Done, with no content.

GET /v1/reimbursements/my-bank-account Get the caller's own bank account

No role needed to say where your own money goes.

Only a signed-in session reaches this. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Response

200 Success.

application/json MyBankAccount

PUT /v1/reimbursements/my-bank-account Set the caller's own bank account

A workspace based in AUD sends a BSB and an account number, and every other workspace a routing and an account number.

Only a signed-in session reaches this. Needs the reimbursements plan feature. Needs a live plan. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Request body

application/json PayeeAccountInput

Response

200 Success.

application/json PayeeBankAccount

GET /v1/reimbursements/originator Get the ACH originator details

Only a signed-in session reaches this. Needs the reimbursements.manage permission. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json AchOriginatorSetting

PUT /v1/reimbursements/originator Set the ACH originator details

Only a signed-in session reaches this. Needs the reimbursements.manage permission. Needs the reimbursements plan feature. Needs a live plan. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body

application/json AchOriginatorInput

Response

200 Success.

application/json AchOriginator

GET /v1/reimbursements/originator/aba Get the ABA originator details

Only a signed-in session reaches this. Needs the reimbursements.manage permission. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json AbaOriginatorSetting

PUT /v1/reimbursements/originator/aba Set the ABA originator details

Only a signed-in session reaches this. Needs the reimbursements.manage permission. Needs the reimbursements plan feature. Needs a live plan. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body

application/json AbaOriginatorInput

Response

200 Success.

application/json AbaOriginator

GET /v1/reimbursements/outstanding See what is owed, by person

Only a signed-in session reaches this. Needs the reimbursements.manage permission. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json Outstanding

GET /v1/reimbursements/payee-accounts List members' bank accounts

Numbers are masked.

Only a signed-in session reaches this. Needs the reimbursements.manage permission. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json PayeeBankAccountList

DELETE /v1/reimbursements/payee-accounts/{userId} Remove a member's bank account

Only a signed-in session reaches this. Needs the reimbursements.manage permission. Needs a live plan. Try it

Parameters

userId requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

204 Done, with no content.

PUT /v1/reimbursements/payee-accounts/{userId} Set a member's bank account

A workspace based in AUD sends a BSB and an account number, and every other workspace a routing and an account number.

Only a signed-in session reaches this. Needs the reimbursements.manage permission. Needs the reimbursements plan feature. Needs a live plan. Try it

Parameters

userId requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body

application/json PayeeAccountInput

Response

200 Success.

application/json PayeeBankAccount

GET /v1/reimbursements/settings Get the reimbursement settings

Only a signed-in session reaches this. Needs the reimbursements.manage permission. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json ReimbursementSettings

PUT /v1/reimbursements/settings Change the reimbursement settings

Only a signed-in session reaches this. Needs the reimbursements.manage permission. Needs the reimbursements plan feature. Needs a live plan. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body

application/json ReimbursementSettingsInput

Response

200 Success.

application/json ReimbursementSettings

release notifications

GET /v1/release-notifications List release notes

Versioned notes on what changed, newest first. Any key or token may read them, whatever its scopes.

A signed-in session, or any API key or OAuth token, whatever it holds. Try it

Parameters

productqueryapp_web api mcp model_document_extraction model_bank_statements model_checks model_fraud_detection
environmentqueryproduction sandbox
limitqueryinteger
cursorquerystring

Response

200 Success.

application/json ReleaseNotePage

release subscriptions

GET /v1/release-subscriptions List who hears about releases

Only a signed-in session reaches this. Needs the members.manage permission. Try it

Parameters

limitqueryinteger
cursorquerystring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Response

200 Success.

application/json ReleaseSubscriptionPage

DELETE /v1/release-subscriptions/{userId} Stop someone hearing about releases

Only a signed-in session reaches this. Needs the members.manage permission. Try it

Parameters

userId requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Response

204 Done, with no content.

PUT /v1/release-subscriptions/{userId} Choose how someone hears about releases

Only a signed-in session reaches this. Needs the members.manage permission. Needs a live plan. Try it

Parameters

userId requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Request body

application/json ReleaseSubscriptionInput

Response

200 Success.

application/json ReleaseSubscription

report catalog

GET /v1/report-catalog List the ready-made reports

Only a signed-in session reaches this. Needs the expenses.read_all permission. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json CatalogReportList

GET /v1/report-catalog/{key} Run one ready-made report

Only a signed-in session reaches this. Needs the expenses.read_all permission. Try it

Parameters

key requiredpathstring
fromquerystring
toquerystring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json CatalogReport

GET /v1/report-catalog/{key}/export Download one ready-made report as CSV

Only a signed-in session reaches this. Needs the expenses.read_all permission. Try it

Parameters

key requiredpathstring
fromquerystring
toquerystring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

text/csv string (binary)

report fields

GET /v1/report-fields List report fields

A signed-in session, or an API key or OAuth token with the workspace:read scope. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json ReportFieldList

POST /v1/report-fields Add a report field

TEXT, DATE, LIST for a dropdown, or FORMULA.

A signed-in session, or an API key or OAuth token with the workspace:write scope. Needs the settings.manage permission. Needs the custom_fields plan feature. Needs a live plan. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body

application/json ReportFieldInput

Response

201 Success.

application/json ReportField

DELETE /v1/report-fields/{id} Delete a report field

A signed-in session, or an API key or OAuth token with the workspace:write scope. Needs the settings.manage permission. Needs a live plan. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

204 Done, with no content.

PATCH /v1/report-fields/{id} Change a report field

Name and type stay as they were created, since reports already hold values by them.

A signed-in session, or an API key or OAuth token with the workspace:write scope. Needs the settings.manage permission. Needs the custom_fields plan feature. Needs a live plan. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body

application/json UpdateReportFieldInput

Response

200 Success.

application/json ReportField

POST /v1/report-fields/turn-off Turn report fields off

Lists are kept and turned off, and the rest are deleted.

A signed-in session, or an API key or OAuth token with the workspace:write scope. Needs the settings.manage permission. Needs a live plan. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json ReportFieldsOff

reports

GET /v1/reports List reports

A signed-in session, or an API key or OAuth token with the reports:read scope. Try it

Parameters

statusqueryDRAFT SUBMITTED APPROVED REJECTED REIMBURSED EXPORTED CLOSED or array of DRAFT SUBMITTED APPROVED REJECTED REIMBURSED EXPORTED CLOSED
scopequerymine all assigned
ownerIdquerystring
qquerystring
fromquerystring
toquerystring
limitqueryinteger
cursorquerystring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json ReportPage

POST /v1/reports Create a report

A signed-in session, or an API key or OAuth token with the reports:write scope. Needs a live plan. Try it

Parameters

Idempotency-Keyheaderstring

Replaying a key returns the first record instead of creating, and charging for, a second. While the first request is still running, a retry answers 409 IDEMPOTENCY_IN_PROGRESS with a Retry-After, and is not charged. The same key on a different request answers 409 IDEMPOTENCY_CONFLICT.

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body (optional)

application/json CreateReportInput

Response

201 Success.

application/json ReportDetail

DELETE /v1/reports/{id} Delete a draft report

A signed-in session, or an API key or OAuth token with the reports:write scope. Needs a live plan. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

204 Done, with no content.

GET /v1/reports/{id} Get a report

A signed-in session, or an API key or OAuth token with the reports:read scope. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json ReportDetail

PATCH /v1/reports/{id} Change a report

A signed-in session, or an API key or OAuth token with the reports:write scope. Needs a live plan. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body

application/json UpdateReportInput

Response

200 Success.

application/json ReportDetail

POST /v1/reports/{id}/accept-findings Accept what the receipt checks found

A signed-in session, or an API key or OAuth token with the reports:write scope. Needs a live plan. Refuses a delegate on limited access. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json ReportDetail

POST /v1/reports/{id}/approve Approve a report

A signed-in session, or an API key or OAuth token with the reports:write scope. Needs a live plan. Refuses a delegate on limited access. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body (optional)

application/json ApproveReportInput

Response

200 Success.

application/json ReportDetail

POST /v1/reports/{id}/close Close a report

A signed-in session, or an API key or OAuth token with the reports:write scope. Needs a live plan. Refuses a delegate on limited access. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json ReportDetail

GET /v1/reports/{id}/comments List comments on a report

A signed-in session, or an API key or OAuth token with the reports:read scope. Try it

Parameters

id requiredpathstring
limitqueryinteger
cursorquerystring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json CommentPage

POST /v1/reports/{id}/comments Comment on a report

A signed-in session, or an API key or OAuth token with the reports:write scope. Needs a live plan. Try it

Parameters

id requiredpathstring
Idempotency-Keyheaderstring

Replaying a key returns the first record instead of creating, and charging for, a second. While the first request is still running, a retry answers 409 IDEMPOTENCY_IN_PROGRESS with a Retry-After, and is not charged. The same key on a different request answers 409 IDEMPOTENCY_CONFLICT.

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body (optional)

application/json CommentInput

Response

201 Success.

application/json PostedComment

POST /v1/reports/{id}/comments/{commentId}/reach Reach someone a comment on this report could not

The author adds them to the report, and then they are told.

A signed-in session, or an API key or OAuth token with the reports:write scope. Needs a live plan. Refuses a delegate on limited access. Try it

Parameters

id requiredpathstring
commentId requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body (optional)

application/json ReachMentionedInput

Response

200 Success.

application/json Reached

GET /v1/reports/{id}/comments/mentionable List who a comment on this report can mention

A signed-in session, or an API key or OAuth token with the reports:read scope. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json MentionablePeople

POST /v1/reports/{id}/duplicate Start a new report from this one

A signed-in session, or an API key or OAuth token with the reports:write scope. Needs a live plan. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

201 Success.

application/json ReportDetail

POST /v1/reports/{id}/expenses Add expenses to a report

A signed-in session, or an API key or OAuth token with the reports:write scope. Needs a live plan. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body

application/json ReportExpensesInput

Response

200 Success.

application/json ReportDetail

DELETE /v1/reports/{id}/expenses/{expenseId} Take an expense off a report

A signed-in session, or an API key or OAuth token with the reports:write scope. Needs a live plan. Try it

Parameters

id requiredpathstring
expenseId requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json ReportDetail

POST /v1/reports/{id}/expenses/{expenseId}/reject Reject one expense on a report

A signed-in session, or an API key or OAuth token with the reports:write scope. Needs a live plan. Refuses a delegate on limited access. Try it

Parameters

id requiredpathstring
expenseId requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body (optional)

application/json RejectExpenseInput

Response

200 Success.

application/json ReportDetail

POST /v1/reports/{id}/mark-exported Mark a report as exported

A signed-in session, or an API key or OAuth token with the reports:write scope. Needs a live plan. Refuses a delegate on limited access. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json ReportDetail

POST /v1/reports/{id}/mark-reimbursed Mark a report as reimbursed

A signed-in session, or an API key or OAuth token with the reports:write scope. Needs a live plan. Refuses a delegate on limited access. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json ReportDetail

POST /v1/reports/{id}/move Move a draft report to another workspace

For its owner, who has to belong to both. Its expenses, receipts and comments go with it under new numbers. Categories and tags carry over by name. A charge on a card here, anything posted to the books or split apart stays, and the answer says why.

Only a signed-in session reaches this. Needs a live plan. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body

application/json MoveReportInput

Response

200 Success.

application/json ReportMoved

POST /v1/reports/{id}/participants Add a person to a report

A signed-in session, or an API key or OAuth token with the reports:write scope. Needs a live plan. Refuses a delegate on limited access. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body (optional)

application/json ReportParticipantInput

Response

200 Success.

application/json ReportDetail

DELETE /v1/reports/{id}/participants/{userId} Take a person off a report

A signed-in session, or an API key or OAuth token with the reports:write scope. Needs a live plan. Refuses a delegate on limited access. Try it

Parameters

id requiredpathstring
userId requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json ReportDetail

POST /v1/reports/{id}/reassign Hand a report to another approver

A signed-in session, or an API key or OAuth token with the reports:write scope. Needs a live plan. Refuses a delegate on limited access. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body (optional)

application/json ReassignReportInput

Response

200 Success.

application/json ReportDetail

POST /v1/reports/{id}/received-payment Say the payment for a report has arrived

Only a signed-in session reaches this. Needs a live plan. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json ReportDetail

POST /v1/reports/{id}/reject Send a report back

A signed-in session, or an API key or OAuth token with the reports:write scope. Needs a live plan. Refuses a delegate on limited access. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body (optional)

application/json RejectReportInput

Response

200 Success.

application/json ReportDetail

POST /v1/reports/{id}/reopen Reopen a report

A signed-in session, or an API key or OAuth token with the reports:write scope. Needs a live plan. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json ReportDetail

POST /v1/reports/{id}/retract Take a submitted report back

A signed-in session, or an API key or OAuth token with the reports:write scope. Needs a live plan. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json ReportDetail

POST /v1/reports/{id}/submit Submit a report

A signed-in session, or an API key or OAuth token with the reports:write scope. Needs a live plan. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body (optional)

application/json SubmitReportInput

Response

200 Success.

application/json ReportDetail

POST /v1/reports/{id}/submit-via-pdf Submit a report and make a PDF that can approve it

For an approver outside PaperTotal. The PDF is made by an export, which exportJobId names.

Only a signed-in session reaches this. Needs a live plan. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json ReportSubmittedViaPdf

POST /v1/reports/bulk-reassign Hand many reports to another approver

A signed-in session, or an API key or OAuth token with the reports:write scope. Needs a live plan. Refuses a delegate on limited access. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body

application/json BulkReassignInput

Response

200 Success.

application/json BulkReportResult

POST /v1/reports/bulk-submit Submit many reports

A signed-in session, or an API key or OAuth token with the reports:write scope. Needs a live plan. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body

application/json BulkReportsInput

Response

200 Success.

application/json BulkReportResult

GET /v1/reports/lookup Find a report by the ID printed on it

Someone who cannot open the report gets the same 404 as one that is not there.

Only a signed-in session reaches this. Try it

Parameters

reference requiredquerystring

The ID printed on the report, such as RPT-0012.

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json CreatedId

POST /v1/reports/mark-reimbursed Mark many reports as reimbursed

Answers 200 when all of them went through, and 207 when some did not. A report that is not approved yet, already paid or in a batch is skipped. One the caller cannot find or mark has failed.

A signed-in session, or an API key or OAuth token with the reports:write scope. Needs a live plan. Refuses a delegate on limited access. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body

application/json BulkReportsInput

Response

200 Success.

application/json BulkReimbursed

207 Some went through. The body says what became of each.

application/json BulkReimbursed

rooms

GET /v1/rooms List rooms

Only a signed-in session reaches this. Try it

Parameters

qquerystring
sortqueryname members activity
directionqueryasc desc
openquerytrue false
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Response

200 Success.

application/json RoomList

POST /v1/rooms Create a room

Only a signed-in session reaches this. Needs a live plan. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Request body (optional)

application/json CreateRoomInput

Response

201 Success.

application/json Room

DELETE /v1/rooms/{id} Archive a room

Only a signed-in session reaches this. Needs a live plan. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Response

204 Done, with no content.

GET /v1/rooms/{id} Get a room

Only a signed-in session reaches this. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Response

200 Success.

application/json Room

PATCH /v1/rooms/{id} Change a room

Only a signed-in session reaches this. Needs a live plan. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Request body (optional)

application/json UpdateRoomInput

Response

200 Success.

application/json Room

POST /v1/rooms/{id}/invites Make an invite link for a room

Shown once. It opens the room to members of this workspace and to nobody else.

Only a signed-in session reaches this. Needs a live plan. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Response

201 Success.

application/json RoomInvite

POST /v1/rooms/{id}/join Join a room

Only a signed-in session reaches this. Needs a live plan. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Response

200 Success.

application/json Room

GET /v1/rooms/{id}/members List a room's members

Only a signed-in session reaches this. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Response

200 Success.

application/json RoomMemberList

POST /v1/rooms/{id}/members Add someone to a room

Only a signed-in session reaches this. Needs a live plan. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Request body (optional)

application/json RoomMemberInput

Response

201 Success.

application/json Room

DELETE /v1/rooms/{id}/members/{userId} Take someone out of a room

Only a signed-in session reaches this. Try it

Parameters

id requiredpathstring
userId requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Response

204 Done, with no content.

GET /v1/rooms/{id}/messages List a room's messages

Pass after to poll for what is new.

Only a signed-in session reaches this. Try it

Parameters

id requiredpathstring
parentIdquerystring
afterquerystring
limitqueryinteger
cursorquerystring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Response

200 Success.

application/json MessagePage

POST /v1/rooms/{id}/messages Post a message

Only a signed-in session reaches this. Needs a live plan. Try it

Parameters

id requiredpathstring
Idempotency-Keyheaderstring

Replaying a key returns the first record instead of creating, and charging for, a second. While the first request is still running, a retry answers 409 IDEMPOTENCY_IN_PROGRESS with a Retry-After, and is not charged. The same key on a different request answers 409 IDEMPOTENCY_CONFLICT.

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Request body (optional)

application/json PostMessageInput

Response

201 Success.

application/json PostedMessage

DELETE /v1/rooms/{id}/messages/{messageId} Delete a message

Only a signed-in session reaches this. Try it

Parameters

id requiredpathstring
messageId requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Response

204 Done, with no content.

PATCH /v1/rooms/{id}/messages/{messageId} Change a message

Only a signed-in session reaches this. Needs a live plan. Try it

Parameters

id requiredpathstring
messageId requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Request body (optional)

application/json EditMessageInput

Response

200 Success.

application/json Message

POST /v1/rooms/{id}/messages/{messageId}/flag Flag a message

Only a signed-in session reaches this. Try it

Parameters

id requiredpathstring
messageId requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Request body (optional)

application/json FlagMessageInput

Response

200 Success.

application/json MessageFlagged

POST /v1/rooms/{id}/messages/{messageId}/moderate Decide on a flagged message

Only a signed-in session reaches this. Try it

Parameters

id requiredpathstring
messageId requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Request body (optional)

application/json ModerateMessageInput

Response

200 Success.

application/json Message

POST /v1/rooms/{id}/pin Pin or unpin a room

Only a signed-in session reaches this. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Request body (optional)

application/json PinRoomInput

Response

200 Success.

application/json Room

POST /v1/rooms/{id}/read Mark a room as read

Only a signed-in session reaches this. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Request body (optional)

application/json MarkReadInput

Response

200 Success.

application/json Room

POST /v1/rooms/{id}/unread Mark a room as unread

Only a signed-in session reaches this. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Request body (optional)

application/json MarkUnreadInput

Response

200 Success.

application/json Room

POST /v1/rooms/direct Open a direct conversation

Only a signed-in session reaches this. Needs a live plan. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Request body (optional)

application/json OpenDirectInput

Response

200 Success.

application/json Room

POST /v1/rooms/group Start a group conversation

Only a signed-in session reaches this. Needs a live plan. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Request body (optional)

application/json CreateGroupInput

Response

201 Success.

application/json Room

POST /v1/rooms/join Join a room with an invite code

Only a signed-in session reaches this. Needs a live plan. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Request body (optional)

application/json JoinRoomInput

Response

200 Success.

application/json Room

sandbox

GET /v1/sandbox See this workspace's sandbox

Only a signed-in session reaches this. Needs the developer.manage permission. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Response

200 Success.

application/json SandboxState

POST /v1/sandbox Open the sandbox

Creates it the first time and returns it after that, so it is safe to retry.

Only a signed-in session reaches this. Needs the developer.manage permission. Needs the developer_api plan feature. Needs a live plan. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Response

200 Success.

application/json Sandbox

saved searches

GET /v1/saved-searches List saved searches

Only a signed-in session reaches this. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json SavedSearchList

POST /v1/saved-searches Save a search

Only a signed-in session reaches this. Needs a live plan. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Request body

application/json SavedSearchInput

Response

201 Success.

application/json SavedSearch

DELETE /v1/saved-searches/{id} Delete a saved search

Only a signed-in session reaches this. Needs a live plan. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Response

204 Done, with no content.

PATCH /v1/saved-searches/{id} Change a saved search

Only a signed-in session reaches this. Needs a live plan. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Request body

application/json UpdateSavedSearchInput

Response

200 Success.

application/json SavedSearch

scheduled reports

GET /v1/scheduled-reports List scheduled reports

Only a signed-in session reaches this. Try it

Parameters

limitqueryinteger
cursorquerystring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json ScheduledReportPage

POST /v1/scheduled-reports Schedule a report

Only a signed-in session reaches this. Needs the scheduled_reports plan feature. Needs a live plan. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Request body

application/json ScheduledReportInput

Response

201 Success.

application/json ScheduledReport

DELETE /v1/scheduled-reports/{id} Delete a scheduled report

Only a signed-in session reaches this. Needs the scheduled_reports plan feature. Needs a live plan. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Response

204 Done, with no content.

GET /v1/scheduled-reports/{id} Get a scheduled report

Only a signed-in session reaches this. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json ScheduledReport

PATCH /v1/scheduled-reports/{id} Change a scheduled report

Only a signed-in session reaches this. Needs the scheduled_reports plan feature. Needs a live plan. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Request body

application/json UpdateScheduledReportInput

Response

200 Success.

application/json ScheduledReport

scim tokens

GET /v1/scim-tokens List SCIM tokens

Only a signed-in session reaches this. Needs the security.manage permission. Needs the sso plan feature. Needs a live plan. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json ScimTokenList

POST /v1/scim-tokens Create a SCIM token

The token is in this response and nowhere else.

Only a signed-in session reaches this. Needs the security.manage permission. Needs the sso plan feature. Needs a live plan. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body

application/json CreateScimTokenInput

Response

201 Success.

application/json ScimTokenCreated

DELETE /v1/scim-tokens/{id} Revoke a SCIM token

Open on a lapsed plan: withdrawing access is never stopped.

Only a signed-in session reaches this. Needs the security.manage permission. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

204 Done, with no content.

GET /v1/search/accounting The accounting shortcuts your role gives you

Only a signed-in session reaches this. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json AccountingShortcutList

GET /v1/search/accounting/{shortcut} One accounting shortcut, with a footer total over every row the filters select

Only a signed-in session reaches this. Try it

Parameters

shortcut requiredpathstring
fromquerystring
toquerystring
accountIdquerystring
withdrawalTypequeryMANUAL PAYROLL ACH ACH_FILE ACH_PROVIDER
groupByquerymonth week quarter year
cursorquerystring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json AccountingShortcut

GET /v1/search/accounting/{shortcut}/export Download the rows behind an accounting shortcut as CSV

The rows only: a grouped total or a footer is never in the file.

Only a signed-in session reaches this. Try it

Parameters

shortcut requiredpathstring
fromquerystring
toquerystring
accountIdquerystring
withdrawalTypequeryMANUAL PAYROLL ACH ACH_FILE ACH_PROVIDER
groupByquerymonth week quarter year
cursorquerystring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

text/csv string (binary)

GET /v1/search/accounting/bank-reconciliation/{reportId}/expenses The expenses on one reimbursed report

Only a signed-in session reaches this. Try it

Parameters

reportId requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json BankReconciliationExpenses

GET /v1/search/shortcuts What is waiting on you, across your workspaces

Drafts, Needs approval and Ready to pay, each by the role you hold in each workspace.

Only a signed-in session reaches this. Try it

Response

200 Success.

application/json SearchShortcuts

split

GET /v1/split List splits

A signed-in session, or an API key or OAuth token with the documents:read scope. Needs the developer_api plan feature. Needs a live plan. Try it

Parameters

limitqueryinteger
cursorquerystring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json DocumentSetPage

POST /v1/split Find the documents in a PDF

Multipart with a field named file, or JSON with uploadId, file_url or file_data. Returns page ranges and extracts nothing. Up to 250 pages and 50 MB. split_by_blank_page cuts on blank pages instead of detected boundaries.

A signed-in session, or an API key or OAuth token with the documents:write scope. Needs the developer_api plan feature. Needs a live plan. Try it

Parameters

Idempotency-Keyheaderstring

Replaying a key returns the first record instead of creating, and charging for, a second. While the first request is still running, a retry answers 409 IDEMPOTENCY_IN_PROGRESS with a Retry-After, and is not charged. The same key on a different request answers 409 IDEMPOTENCY_CONFLICT.

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Request body

multipart/form-data

file requiredstring (binary)
split_by_blank_pageboolean
every_pageboolean
rangesstring
document_typesarray of string
blueprint_namestring
external_idstring

application/json

Name the file with one of uploadId, file_url or file_data.

uploadIdstring

From POST /v1/uploads, once the file has been sent to the URL it answered with.

split_by_blank_pageboolean
every_pageboolean
rangesstring
document_typesarray of string
blueprint_namestring
file_urlstring

A public https address to fetch the file from. Redirects are not followed.

file_datastring

The file itself in base64, raw or as a data URI.

file_namestring

What to call a file sent as file_url or file_data.

external_idstring

Response

201 Success.

application/json DocumentSet

GET /v1/split/{id} Get a split

A signed-in session, or an API key or OAuth token with the documents:read scope. Needs the developer_api plan feature. Needs a live plan. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json DocumentSet

POST /v1/split/async Find the documents in a PDF, in the background

Answers at once with the id. split.completed and split.created deliver the ranges, and split.failed says why not.

A signed-in session, or an API key or OAuth token with the documents:write scope. Needs the developer_api plan feature. Needs a live plan. Try it

Parameters

Idempotency-Keyheaderstring

Replaying a key returns the first record instead of creating, and charging for, a second. While the first request is still running, a retry answers 409 IDEMPOTENCY_IN_PROGRESS with a Retry-After, and is not charged. The same key on a different request answers 409 IDEMPOTENCY_CONFLICT.

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Request body

multipart/form-data

file requiredstring (binary)
split_by_blank_pageboolean
every_pageboolean
rangesstring
document_typesarray of string
blueprint_namestring
external_idstring

application/json

Name the file with one of uploadId, file_url or file_data.

uploadIdstring

From POST /v1/uploads, once the file has been sent to the URL it answered with.

split_by_blank_pageboolean
every_pageboolean
rangesstring
document_typesarray of string
blueprint_namestring
file_urlstring

A public https address to fetch the file from. Redirects are not followed.

file_datastring

The file itself in base64, raw or as a data URI.

file_namestring

What to call a file sent as file_url or file_data.

external_idstring

Response

202 Success.

application/json DocumentSet

split and classify

POST /v1/split-and-classify Find the documents in a PDF and say what each one is

Multipart with a field named file, or JSON with uploadId, file_url or file_data. Each range has a type and a score, optionally from your own document_types.

A signed-in session, or an API key or OAuth token with the documents:write scope. Needs the developer_api plan feature. Needs a live plan. Try it

Parameters

Idempotency-Keyheaderstring

Replaying a key returns the first record instead of creating, and charging for, a second. While the first request is still running, a retry answers 409 IDEMPOTENCY_IN_PROGRESS with a Retry-After, and is not charged. The same key on a different request answers 409 IDEMPOTENCY_CONFLICT.

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Request body

multipart/form-data

file requiredstring (binary)
split_by_blank_pageboolean
every_pageboolean
rangesstring
document_typesarray of string
blueprint_namestring
external_idstring

application/json

Name the file with one of uploadId, file_url or file_data.

uploadIdstring

From POST /v1/uploads, once the file has been sent to the URL it answered with.

split_by_blank_pageboolean
every_pageboolean
rangesstring
document_typesarray of string
blueprint_namestring
file_urlstring

A public https address to fetch the file from. Redirects are not followed.

file_datastring

The file itself in base64, raw or as a data URI.

file_namestring

What to call a file sent as file_url or file_data.

external_idstring

Response

201 Success.

application/json DocumentSet

POST /v1/split-and-classify/async Find and classify the documents in a PDF, in the background

Answers at once. split.completed and split_and_classify.created deliver the same result, and split.failed and split_and_classify.failed say why not.

A signed-in session, or an API key or OAuth token with the documents:write scope. Needs the developer_api plan feature. Needs a live plan. Try it

Parameters

Idempotency-Keyheaderstring

Replaying a key returns the first record instead of creating, and charging for, a second. While the first request is still running, a retry answers 409 IDEMPOTENCY_IN_PROGRESS with a Retry-After, and is not charged. The same key on a different request answers 409 IDEMPOTENCY_CONFLICT.

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Request body

multipart/form-data

file requiredstring (binary)
split_by_blank_pageboolean
every_pageboolean
rangesstring
document_typesarray of string
blueprint_namestring
external_idstring

application/json

Name the file with one of uploadId, file_url or file_data.

uploadIdstring

From POST /v1/uploads, once the file has been sent to the URL it answered with.

split_by_blank_pageboolean
every_pageboolean
rangesstring
document_typesarray of string
blueprint_namestring
file_urlstring

A public https address to fetch the file from. Redirects are not followed.

file_datastring

The file itself in base64, raw or as a data URI.

file_namestring

What to call a file sent as file_url or file_data.

external_idstring

Response

202 Success.

application/json DocumentSet

sso

DELETE /v1/sso Remove the single sign-on connection

Only a signed-in session reaches this. Needs the security.manage permission. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

204 Done, with no content.

GET /v1/sso Get the single sign-on connection

Null when there is none.

Only a signed-in session reaches this. Needs the security.manage permission. Needs the sso plan feature. Needs a live plan. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json SsoConnectionOrNone

PUT /v1/sso Set up the single sign-on connection

Only a signed-in session reaches this. Needs the security.manage permission. Needs the sso plan feature. Needs a live plan. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body

application/json PutSsoConnectionInput

Response

200 Success.

application/json SsoConnection

PUT /v1/sso/enforcement Turn single sign-on enforcement on or off

Not behind the plan: a workspace that downgraded still has to be able to let its people back in.

Only a signed-in session reaches this. Needs the security.manage permission. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body

application/json SsoEnforcementInput

Response

200 Success.

application/json SsoConnection

GET /v1/sso/metadata Get the service provider metadata

The XML to give an identity provider.

Only a signed-in session reaches this. Needs the security.manage permission. Needs the sso plan feature. Needs a live plan. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json SsoMetadata

status

GET /v1/status Read the service status

Needs no sign-in, and holds nothing about any customer.

No credential needed. Try it

Response

200 Success.

application/json StatusPage

tags

GET /v1/tags List tags

A signed-in session, or an API key or OAuth token with the expenses:read scope. Try it

Parameters

qquerystring
archivedquerystring
limitqueryinteger
cursorquerystring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json TagPage

POST /v1/tags Create a tag

A signed-in session, or an API key or OAuth token with the expenses:write scope. Needs the settings.manage permission. Needs a live plan. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body

application/json TagInput

Response

201 Success.

application/json Tag

DELETE /v1/tags/{id} Delete a tag

A signed-in session, or an API key or OAuth token with the expenses:write scope. Needs the settings.manage permission. Needs a live plan. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

204 Done, with no content.

GET /v1/tags/{id} Get a tag

A signed-in session, or an API key or OAuth token with the expenses:read scope. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json Tag

PATCH /v1/tags/{id} Change a tag

A signed-in session, or an API key or OAuth token with the expenses:write scope. Needs the settings.manage permission. Needs a live plan. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body

application/json UpdateTagInput

Response

200 Success.

application/json Tag

POST /v1/tags/import Import tags from CSV

Send the CSV as text/plain, or as JSON with a csv field, with commas or tabs. Rows that match an existing tag update it. With mode=replace, what the file leaves out is deleted, or archived if something uses it. Columns: Name, Group, GL code, Color, Enabled, Depends on. A tag that depends on another goes on an expense only with that one.

A signed-in session, or an API key or OAuth token with the expenses:write scope. Needs the settings.manage permission. Needs a live plan. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body

application/json CatalogImportInput

Response

201 Success.

application/json CatalogImportResult

POST /v1/tags/import-levels Import multi-level tags

Names a CSV or TSV file sent straight to storage, up to 50,000 rows, one column per level. It replaces the list.

Only a signed-in session reaches this. Needs the settings.manage permission. Needs a live plan. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body

application/json TagLevelImportInput

Response

201 Success.

application/json CatalogImportResult

GET /v1/tags/levels What each Tag field offers on an expense

One level per tag group. On a dependent list, each level narrows to what the levels above it allow.

Only a signed-in session reaches this. Try it

Parameters

tagIdsquerystring
levelquerystring
qquerystring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json TagLevels

tasks

GET /v1/tasks List tasks

Only a signed-in session reaches this. Try it

Parameters

statusqueryOPEN DONE
minequerystring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Response

200 Success.

application/json TaskList

POST /v1/tasks Create a task

Only a signed-in session reaches this. Needs a live plan. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Request body (optional)

application/json CreateTaskInput

Response

201 Success.

application/json Task

GET /v1/tasks/{id} Get a task

Only a signed-in session reaches this. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Response

200 Success.

application/json Task

PATCH /v1/tasks/{id} Change a task

Only a signed-in session reaches this. Needs a live plan. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Request body (optional)

application/json UpdateTaskInput

Response

200 Success.

application/json Task

POST /v1/tasks/{id}/complete Complete a task

Only a signed-in session reaches this. Needs a live plan. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Response

200 Success.

application/json Task

POST /v1/tasks/{id}/reopen Reopen a task

Only a signed-in session reaches this. Needs a live plan. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Response

200 Success.

application/json Task

tax

GET /v1/tax/summary Totals by tax line for a year

A signed-in session, or an API key or OAuth token with the expenses:read scope. Try it

Parameters

yearqueryinteger
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json TaxSummary

time

POST /v1/time Record time

A signed-in session, or an API key or OAuth token with the expenses:write scope. Needs a live plan. Try it

Parameters

Idempotency-Keyheaderstring

Replaying a key returns the first record instead of creating, and charging for, a second. While the first request is still running, a retry answers 409 IDEMPOTENCY_IN_PROGRESS with a Retry-After, and is not charged. The same key on a different request answers 409 IDEMPOTENCY_CONFLICT.

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body

application/json CreateTimeInput

Response

201 Success.

application/json ExpenseDetail

tls certificates

GET /v1/tls-certificates List the client certificates this workspace trusts

A signed-in session, or an API key or OAuth token with the workspace:read scope. Needs the developer.manage permission. Try it

Parameters

limitqueryinteger
cursorquerystring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Response

200 Success.

application/json ClientCertificatePage

POST /v1/tls-certificates Add a client certificate

PEM, and never a private key. Only its SHA-256 fingerprint decides anything, and adding the same one twice is one row. Mutual TLS ends at the edge, and has to be set up for this server before a workspace can require it.

A signed-in session, or an API key or OAuth token with the workspace:write scope. Needs the developer.manage permission. Needs a live plan. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Request body

application/json CreateClientCertificateInput

Response

201 Success.

application/json ClientCertificate

DELETE /v1/tls-certificates/{id} Stop trusting a client certificate

The last one cannot go while the workspace requires one.

A signed-in session, or an API key or OAuth token with the workspace:write scope. Needs the developer.manage permission. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Response

204 Done, with no content.

GET /v1/tls-certificates/enforcement See whether keys must present a client certificate

Only a signed-in session reaches this. Needs the developer.manage permission. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Response

200 Success.

application/json ClientCertificateEnforcement

PUT /v1/tls-certificates/enforcement Require a client certificate, or stop requiring one

Only a signed-in session reaches this. Needs the developer.manage permission. Needs a live plan. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Request body

application/json SetClientCertificateEnforcementInput

Response

200 Success.

application/json ClientCertificateEnforcement

transactions

GET /v1/transactions List card transactions

A signed-in session, or an API key or OAuth token with the cards:read scope. Try it

Parameters

statequeryUNMATCHED MATCHED IGNORED EXPENSED PENDING
paymentAccountIdquerystring
paymentAccountIdsquerystring
fromquerystring
toquerystring
qquerystring
minMinorqueryinteger
maxMinorqueryinteger
missingReceiptquerystring
unreportedquerystring
currencyquerystring
limitqueryinteger
cursorquerystring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json TransactionPage

DELETE /v1/transactions/{id} Delete a card transaction

Only a signed-in session reaches this. Needs the card_feeds plan feature. Needs a live plan. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

204 Done, with no content.

GET /v1/transactions/{id} Get a card transaction

A signed-in session, or an API key or OAuth token with the cards:read scope. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json Transaction

POST /v1/transactions/{id}/create-expense Make an expense from a card transaction

Only a signed-in session reaches this. Needs the card_feeds plan feature. Needs a live plan. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body (optional)

application/json CreateExpenseFromTransactionInput

Response

201 Success.

application/json ExpenseDetail

POST /v1/transactions/{id}/ignore Ignore a card transaction

Only a signed-in session reaches this. Needs the card_feeds plan feature. Needs a live plan. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json Transaction

POST /v1/transactions/{id}/match Match a card transaction to an expense

Only a signed-in session reaches this. Needs the card_feeds plan feature. Needs a live plan. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body

application/json MatchTransactionInput

Response

200 Success.

application/json Transaction

POST /v1/transactions/{id}/unmatch Undo a match

Only a signed-in session reaches this. Needs the card_feeds plan feature. Needs a live plan. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json Transaction

POST /v1/transactions/bulk Act on many card transactions

Only a signed-in session reaches this. Needs the card_feeds plan feature. Needs a live plan. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body

application/json BulkTransactionInput

Response

200 Success.

application/json BulkTransactionResult

GET /v1/transactions/export Export card data

By date range and card, with unreported=true for lines on no report. Leave it out for all of them. The file comes back as JSON, with its content as text.

A signed-in session, or an API key or OAuth token with the cards:read scope. Try it

Parameters

statequeryUNMATCHED MATCHED IGNORED EXPENSED PENDING
paymentAccountIdquerystring
paymentAccountIdsquerystring
fromquerystring
toquerystring
qquerystring
minMinorqueryinteger
maxMinorqueryinteger
missingReceiptquerystring
unreportedquerystring
currencyquerystring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json DownloadableFile

GET /v1/transactions/reconciliation Reconcile card data for a date range

Imported, approved and what is stuck, by where it is stuck.

A signed-in session, or an API key or OAuth token with the cards:read scope. Try it

Parameters

from requiredquerystring
to requiredquerystring
paymentAccountIdquerystring
feedquerystring
currencyquerystring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json Reconciliation

GET /v1/transactions/summary Total the card transactions that match a filter

A signed-in session, or an API key or OAuth token with the cards:read scope. Try it

Parameters

statequeryUNMATCHED MATCHED IGNORED EXPENSED PENDING
paymentAccountIdquerystring
paymentAccountIdsquerystring
fromquerystring
toquerystring
qquerystring
minMinorqueryinteger
maxMinorqueryinteger
missingReceiptquerystring
unreportedquerystring
currencyquerystring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json TransactionSummary

travel

GET /v1/travel/trips List travel trips

Trips filed from itineraries, newest first. Your own, or everyone's with scope=all when your role reads everyone's expenses. Trips driven are in the mileage log.

A signed-in session, or an API key or OAuth token with the expenses:read scope. Try it

Parameters

scopequerymine all
fromquerystring
toquerystring
limitqueryinteger
cursorquerystring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json TravelTripPage

GET /v1/travel/trips/{id} Get a travel trip

One trip, with its segments and the documents filed against it.

A signed-in session, or an API key or OAuth token with the expenses:read scope. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json TravelTrip

uploads

POST /v1/uploads Sign an upload straight to storage

The way to send a file: its bytes do not pass through this API. Say what it is for and how big it is, PUT the file to the URL in the answer, then name the uploadId on that feature's route in place of a multipart file. The file's own bytes decide what it is. Video goes to an attachment, up to 500 MiB, and is never read.

A signed-in session, or an API key or OAuth token with the documents:write scope. Needs a live plan. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body

application/json CreateUploadInput

Response

201 Success.

application/json UploadTicket

usage

GET /v1/usage/documents Count this month's documents, by type and by source

For Home's usage meter. Reading never needs a plan.

Only a signed-in session reaches this. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json DocumentUsage

GET /v1/usage/processing Report how long documents took to read

For the processing report on Insights: the median, the spread, and the files behind them.

Only a signed-in session reaches this. Try it

Parameters

from requiredquerystring
to requiredquerystring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json ProcessingReport

vehicles

GET /v1/vehicles List vehicles

A signed-in session, or an API key or OAuth token with the expenses:read scope. Try it

Parameters

qquerystring
archivedquerystring
userIdquerystring
limitqueryinteger
cursorquerystring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json VehiclePage

POST /v1/vehicles Add a vehicle

Only a signed-in session reaches this. Needs a live plan. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body

application/json VehicleInput

Response

201 Success.

application/json Vehicle

DELETE /v1/vehicles/{id} Delete a vehicle

Only a signed-in session reaches this. Needs a live plan. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

204 Done, with no content.

GET /v1/vehicles/{id} Get a vehicle

A signed-in session, or an API key or OAuth token with the expenses:read scope. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json Vehicle

PATCH /v1/vehicles/{id} Change a vehicle

Only a signed-in session reaches this. Needs a live plan. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body

application/json UpdateVehicleInput

Response

200 Success.

application/json Vehicle

w 8ben e

POST /v1/w-8ben-e Read a Form W-8BEN-E

POST /v1/documents/url with the type fixed: the same body, wait and answer. Bank and tax numbers are masked; POST /v1/documents/{id}/reveal opens them.

A signed-in session, or an API key or OAuth token with the documents:write scope. Needs the developer_api plan feature. Needs a live plan. Try it

Parameters

Idempotency-Keyheaderstring

Replaying a key returns the first record instead of creating, and charging for, a second. While the first request is still running, a retry answers 409 IDEMPOTENCY_IN_PROGRESS with a Retry-After, and is not charged. The same key on a different request answers 409 IDEMPOTENCY_CONFLICT.

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Request body

application/json SubmitDocumentInput

Response

201 Success.

application/json DocumentUpload

202 Accepted. The document is still being read.

application/json DocumentUpload

w2s

POST /v1/w2s Read a Form W-2

POST /v1/documents/url with the type fixed: the same body, wait and answer. Bank and tax numbers are masked; POST /v1/documents/{id}/reveal opens them.

A signed-in session, or an API key or OAuth token with the documents:write scope. Needs the developer_api plan feature. Needs a live plan. Try it

Parameters

Idempotency-Keyheaderstring

Replaying a key returns the first record instead of creating, and charging for, a second. While the first request is still running, a retry answers 409 IDEMPOTENCY_IN_PROGRESS with a Retry-After, and is not charged. The same key on a different request answers 409 IDEMPOTENCY_CONFLICT.

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Request body

application/json SubmitDocumentInput

Response

201 Success.

application/json DocumentUpload

202 Accepted. The document is still being read.

application/json DocumentUpload

w2s set

GET /v1/w2s-set List W-2 sets

A signed-in session, or an API key or OAuth token with the documents:read scope. Needs the developer_api plan feature. Needs a live plan. Try it

Parameters

limitqueryinteger
cursorquerystring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json DocumentSetPage

POST /v1/w2s-set Split a PDF of W-2s and read each one

Multipart with a field named file, or JSON with uploadId, file_url or file_data. Up to 100 pages and 50 MB. Answers at once. w2_set.created says when every form is read, and w2_set.failed why not. Social security and employer numbers are masked in every view.

A signed-in session, or an API key or OAuth token with the documents:write scope. Needs the developer_api plan feature. Needs a live plan. Try it

Parameters

Idempotency-Keyheaderstring

Replaying a key returns the first record instead of creating, and charging for, a second. While the first request is still running, a retry answers 409 IDEMPOTENCY_IN_PROGRESS with a Retry-After, and is not charged. The same key on a different request answers 409 IDEMPOTENCY_CONFLICT.

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Request body

multipart/form-data

file requiredstring (binary)
split_by_blank_pageboolean
every_pageboolean
rangesstring
document_typesarray of string
blueprint_namestring
external_idstring

application/json

Name the file with one of uploadId, file_url or file_data.

uploadIdstring

From POST /v1/uploads, once the file has been sent to the URL it answered with.

split_by_blank_pageboolean
every_pageboolean
rangesstring
document_typesarray of string
blueprint_namestring
file_urlstring

A public https address to fetch the file from. Redirects are not followed.

file_datastring

The file itself in base64, raw or as a data URI.

file_namestring

What to call a file sent as file_url or file_data.

external_idstring

Response

202 Success.

application/json DocumentSet

GET /v1/w2s-set/{id} Get a W-2 set

A signed-in session, or an API key or OAuth token with the documents:read scope. Needs the developer_api plan feature. Needs a live plan. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json DocumentSet

w9s

POST /v1/w9s Read a Form W-9

POST /v1/documents/url with the type fixed: the same body, wait and answer. Bank and tax numbers are masked; POST /v1/documents/{id}/reveal opens them.

A signed-in session, or an API key or OAuth token with the documents:write scope. Needs the developer_api plan feature. Needs a live plan. Try it

Parameters

Idempotency-Keyheaderstring

Replaying a key returns the first record instead of creating, and charging for, a second. While the first request is still running, a retry answers 409 IDEMPOTENCY_IN_PROGRESS with a Retry-After, and is not charged. The same key on a different request answers 409 IDEMPOTENCY_CONFLICT.

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Request body

application/json SubmitDocumentInput

Response

201 Success.

application/json DocumentUpload

202 Accepted. The document is still being read.

application/json DocumentUpload

webhooks

GET /v1/webhooks List webhook endpoints

Pending and confirmed alike. Endpoints that belong to one API key are left out unless you ask: send apiKeyId for one key, or include=keys for all of them.

A signed-in session, or an API key or OAuth token with the webhooks:manage scope. Needs the developer.manage permission. Try it

Parameters

apiKeyIdquerystring
includequerykeys
limitqueryinteger
cursorquerystring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Response

200 Success.

application/json WebhookEndpointPage

POST /v1/webhooks Add a webhook endpoint

Step one of the handshake. The URL must be public https, and not on papertotal.com. The endpoint starts PENDING, and PaperTotal sends it one signed subscription event holding a one-time token in data.token. Confirm it with POST /v1/webhooks/confirm within a day. Until then it receives nothing else, and after that it is deleted. An address on hooks.zapier.com is confirmed at once, because a catch hook cannot run a handshake. Send apiKeyId to make this one key's own endpoint: documents that key submits report here and not to the workspace's endpoints, it takes document events only, and a key has one. Changing the URL later goes through the handshake again. The signing secret is in this response and the rotate response, and nowhere else.

A signed-in session, or an API key or OAuth token with the webhooks:manage scope. Needs the developer.manage permission. Needs the developer_api plan feature. Needs a live plan. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Request body

application/json CreateWebhookInput

Response

201 Success.

application/json WebhookEndpointWithSecret

DELETE /v1/webhooks/{id} Delete a webhook endpoint

A signed-in session, or an API key or OAuth token with the webhooks:manage scope. Needs the developer.manage permission. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Response

204 Done, with no content.

GET /v1/webhooks/{id} Get a webhook endpoint

A signed-in session, or an API key or OAuth token with the webhooks:manage scope. Needs the developer.manage permission. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Response

200 Success.

application/json WebhookEndpoint

PATCH /v1/webhooks/{id} Change a webhook endpoint

A signed-in session, or an API key or OAuth token with the webhooks:manage scope. Needs the developer.manage permission. Needs the developer_api plan feature. Needs a live plan. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Request body

application/json UpdateWebhookInput

Response

200 Success.

application/json WebhookEndpoint

GET /v1/webhooks/{id}/deliveries List an endpoint's deliveries

A signed-in session, or an API key or OAuth token with the webhooks:manage scope. Needs the developer.manage permission. Try it

Parameters

id requiredpathstring
limitqueryinteger
cursorquerystring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Response

200 Success.

application/json WebhookDeliveryPage

POST /v1/webhooks/{id}/rotate-secret Issue a new signing secret

A signed-in session, or an API key or OAuth token with the webhooks:manage scope. Needs the developer.manage permission. Needs the developer_api plan feature. Needs a live plan. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Response

201 Success.

application/json WebhookEndpointWithSecret

POST /v1/webhooks/{id}/test Send a test event

A signed-in session, or an API key or OAuth token with the webhooks:manage scope. Needs the developer.manage permission. Needs the developer_api plan feature. Needs a live plan. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Response

201 Success.

application/json WebhookDelivery

POST /v1/webhooks/confirm Confirm a webhook endpoint

Step three of the handshake. Send the token from the subscription event that went to the address. It works once, and expires after a day.

A signed-in session, or an API key or OAuth token with the webhooks:manage scope. Needs the developer.manage permission. Needs the developer_api plan feature. Needs a live plan. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Request body

application/json ConfirmWebhookInput

Response

200 Success.

application/json WebhookEndpoint

POST /v1/webhooks/deliveries/{id}/retry Send a delivery again

A signed-in session, or an API key or OAuth token with the webhooks:manage scope. Needs the developer.manage permission. Needs the developer_api plan feature. Needs a live plan. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Response

201 Success.

application/json WebhookDelivery

well known

GET /.well-known/oauth-authorization-server Read the authorization server metadata

RFC 8414.

No credential needed. Try it

Response

200 Success.

application/json OAuthServerMetadata

GET /.well-known/oauth-protected-resource/mcp Read how to get a token for the MCP server

RFC 9728, at the path of the MCP endpoint.

No credential needed. Try it

Response

200 Success.

application/json OAuthProtectedResource

GET /.well-known/oauth-protected-resource/v1 Read how to get a token for the API

RFC 9728.

No credential needed. Try it

Response

200 Success.

application/json OAuthProtectedResource

workflow approvals

workflows

GET /v1/workflows List workflows

The no-code workflows in this workspace. Not approval workflows, which live under /v1/approval-workflows.

Only a signed-in session reaches this. Needs the settings.manage permission. Try it

Parameters

limitqueryinteger
cursorquerystring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json WorkflowPage

POST /v1/workflows Create a workflow

A name, and a graph if you have one. A graph can be unfinished until it is turned on.

Only a signed-in session reaches this. Needs the settings.manage permission. Needs the automation_rules plan feature. Needs a live plan. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body

application/json CreateWorkflowInput

Response

201 Success.

application/json Workflow

DELETE /v1/workflows/{id} Delete a workflow

With its versions and runs. A file a run wrote stays in Exports until it expires.

Only a signed-in session reaches this. Needs the settings.manage permission. Needs a live plan. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

204 Done, with no content.

GET /v1/workflows/{id} Get a workflow

The graph on the canvas, the version that runs, and what starts it: an Email collector's address, and when a schedule comes round next.

Only a signed-in session reaches this. Needs the settings.manage permission. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json Workflow

PATCH /v1/workflows/{id} Change a workflow

Changes the canvas. What runs stays as it was until the workflow is turned on again.

Only a signed-in session reaches this. Needs the settings.manage permission. Needs the automation_rules plan feature. Needs a live plan. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body

application/json UpdateWorkflowInput

Response

200 Success.

application/json Workflow

POST /v1/workflows/{id}/disable Turn a workflow off

Nothing new starts. Runs already going finish.

Only a signed-in session reaches this. Needs the settings.manage permission. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json Workflow

POST /v1/workflows/{id}/enable Turn a workflow on

Refused with the same findings as checking it. What is on the canvas becomes a version, and runs already going keep the one they started with.

Only a signed-in session reaches this. Needs the settings.manage permission. Needs the automation_rules plan feature. Needs a live plan. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json Workflow

GET /v1/workflows/{id}/runs List a workflow's runs

A signed-in session, or an API key or OAuth token with the documents:read scope. Needs the settings.manage permission. Try it

Parameters

id requiredpathstring
limitqueryinteger
cursorquerystring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json WorkflowRunPage

POST /v1/workflows/{id}/runs Start a run

Sends a file named by uploadId from POST /v1/uploads, or documents already in this workspace, to the workflow's API import. nodeId starts it at another input instead: a Document aggregator gathers what has come in, and Business insights runs its query. An upload, or an Idempotency-Key, makes a repeat answer with the first run.

A signed-in session, or an API key or OAuth token with the documents:write scope. Needs the settings.manage permission. Needs the automation_rules plan feature. Needs a live plan. Try it

Parameters

id requiredpathstring
Idempotency-Keyheaderstring

Replaying a key returns the first record instead of creating, and charging for, a second. While the first request is still running, a retry answers 409 IDEMPOTENCY_IN_PROGRESS with a Retry-After, and is not charged. The same key on a different request answers 409 IDEMPOTENCY_CONFLICT.

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body (optional)

application/json StartWorkflowRunInput

Response

201 Success.

application/json WorkflowRunSummary

GET /v1/workflows/{id}/runs/{runId} Get a run and each of its steps

Each step says what happened. A file comes with a signed link that lasts 15 minutes, and an approval says who was asked and who answered.

A signed-in session, or an API key or OAuth token with the documents:read scope. Needs the settings.manage permission. Try it

Parameters

id requiredpathstring
runId requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json WorkflowRun

POST /v1/workflows/{id}/runs/{runId}/cancel Stop a run

A step already going finishes. Nothing after it starts.

Only a signed-in session reaches this. Needs the settings.manage permission. Try it

Parameters

id requiredpathstring
runId requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json WorkflowRun

POST /v1/workflows/{id}/runs/{runId}/steps/{stepId}/answer Answer an Email approval from the app

The first answer settles the step. Repeating one changes nothing.

Only a signed-in session reaches this. Needs the settings.manage permission. Needs a live plan. Try it

Parameters

id requiredpathstring
runId requiredpathstring
stepId requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body

application/json AnswerWorkflowStepInput

Response

200 Success.

application/json WorkflowRun

POST /v1/workflows/{id}/validate Check a workflow

Says what would stop it being turned on: a loop, missing settings, a connection between steps that cannot work, and a service that is not connected. Saves nothing.

Only a signed-in session reaches this. Needs the settings.manage permission. Try it

Parameters

id requiredpathstring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body (optional)

application/json ValidateWorkflowInput

Response

200 Success.

application/json WorkflowValidation

workspace

DELETE /v1/workspace Close this workspace

Needs the workspace:delete scope, which no preset holds, on a key an owner made. Send the name of the workspace to confirm. Its data is purged after the grace period.

A signed-in session, or an API key or OAuth token with the workspace:delete scope. Needs the workspace.delete permission. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Request body

application/json CloseWorkspaceInput

Response

200 Success.

application/json WorkspaceClosed

GET /v1/workspace Get this workspace, its plan and its usage

A signed-in session, or an API key or OAuth token with the workspace:read scope. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json Workspace

PATCH /v1/workspace Change this workspace

A signed-in session, or an API key or OAuth token with the workspace:write scope. Needs the settings.manage permission. Needs a live plan. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body

application/json UpdateWorkspaceInput

Response

200 Success.

application/json Workspace

POST /v1/workspace/copy-settings Copy this workspace's settings to another

Takes two workspaces, so a key, which reaches one, cannot call it. The source stays as it was.

Only a signed-in session reaches this. Needs the settings.manage permission. Needs a live plan. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body

application/json CopySettingsInput

Response

200 Success.

application/json CopySettingsResult

GET /v1/workspace/counts Count what is waiting on the caller

A signed-in session, or an API key or OAuth token with the workspace:read scope. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json WorkspaceCounts

GET /v1/workspace/offboarding List what someone leaving still holds

Someone leaving can read their own. Anyone else needs members.manage.

Only a signed-in session reaches this. Try it

Parameters

userIdquerystring
X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json OffboardingList

GET /v1/workspace/security Get the workspace sign-in rules

Only a signed-in session reaches this. Needs the security.manage permission. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Response

200 Success.

application/json WorkspaceSecurity

PUT /v1/workspace/security Change the workspace sign-in rules

Only a signed-in session reaches this. Needs the security.manage permission. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

X-Act-Asheaderstring

The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and details.reason.

Request body

application/json WorkspaceSecurityInput

Response

200 Success.

application/json WorkspaceSecurity

POST /v1/workspace/transfer Hand this workspace to another owner

Only a signed-in session reaches this. Needs the workspace.delete permission. Try it

Parameters

X-Workspace-Idheaderstring

The workspace this request is for, from the person's workspaces on GET /v1/me. Left out, it is their default workspace. A workspace they are not in answers 404.

Request body

application/json TransferWorkspaceInput

Response

200 Success.

application/json WorkspaceTransferred

workspaces

GET /v1/workspaces List the workspaces this credential reaches

A key or an app is bound to one workspace, so it lists that one. A person lists all of theirs.

A signed-in session, or an API key or OAuth token with the workspace:read scope. Try it

Parameters

limitqueryinteger
cursorquerystring

Response

200 Success.

application/json WorkspacePage

POST /v1/workspaces Create a workspace

The caller's person owns it. It starts with what their one trial has left, or with no plan: reading and exporting work, and capture waits on a plan. A plan cannot be bought by an API call, so naming one returns the billing link where a person pays for it. A key stays bound to its own workspace, so the new one needs a key of its own.

A signed-in session, or an API key or OAuth token with the workspace:write scope. Try it

Parameters

Idempotency-Keyheaderstring

Replaying a key returns the first record instead of creating, and charging for, a second. While the first request is still running, a retry answers 409 IDEMPOTENCY_IN_PROGRESS with a Retry-After, and is not charged. The same key on a different request answers 409 IDEMPOTENCY_CONFLICT.

Request body

application/json CreateWorkspaceInput

Response

201 Success.

application/json WorkspaceCreated

Webhook events

Answer with any 2xx within 10 seconds. A 410 turns the endpoint off. Anything else is retried with exponential backoff, 8 attempts over about 24 hours. Redirects are not followed. Delivery is at least once, so use the event id to ignore repeats.

X-PaperTotal-Signature HMAC-SHA256 of "<t>.<body>" with the endpoint's signing secret, in hex, sent as t=<unix seconds>,v1=<hex>. Compute it over the raw bytes, and refuse a timestamp more than five minutes old.

X-PaperTotal-Event The event type.

Each one posts WebhookEventPayload.

Schemas

TravelTripListQuery

scopemine all
fromstring
tostring

CreateClientCertificateInput

name requiredstring
certificate requiredstring

ReleaseNotificationQuery

productReleaseProduct
environmentReleaseEnvironment

CreateAttachmentInput

uploadId requiredstring

CreateUploadInput

filename requiredstring
contentType requiredstring
sizeBytes requiredinteger
purpose requireddocument document_set expense_receipt odometer_photo policy_document statement attachment catalog_import iif_lists people_list profile_photo
clientIdstring

ExportRecordInput

documentIds requiredarray of string
target requiredstring
externalIdstring

ExportRecordQuery

documentIdstring
targetstring
externalIdstring
viaEXPORT SYNC API

DocumentReadQuery

bounding_boxesboolean
confidence_detailsboolean
detailedboolean
with_scoresboolean

DocumentTagInput

name requiredstring

DocumentTagsInput

tags requiredarray of string

ExpenseLineInput

description requiredstring
skustring or null
quantitynumber,null
unitPriceMinorinteger or null
amountMinor requiredinteger
taxMinorinteger or null
categoryIdstring,null

ExpenseTaxLineInput

namestring or null
codestring or null
ratePctnumber or null
baseMinorinteger or null
amountMinor requiredinteger

UpdateExpenseLineInput

descriptionstring
skustring or null
quantitynumber,null
unitPriceMinorinteger or null
amountMinorinteger
taxMinorinteger or null
categoryIdstring,null

UpdateExpenseTaxLineInput

namestring or null
codestring or null
ratePctnumber or null
baseMinorinteger or null
amountMinorinteger

CategoryImportQuery

modemerge replace

CloseWorkspaceInput

confirmName requiredstring

ProvisionInput

employeesarray of object
Fields
employeeEmail requiredstring (email)
managerEmailstring (email)
employeeIDstring
policyIDstring
approvalLimitinteger
overLimitApproverstring (email)
workerStatusstring
isTerminatedboolean
domainGroupIDstring
approvesTostring (email)
rolestring
additionalPolicyIDsarray of string
defaultTagsarray of string
firstNamestring
lastNamestring
customField1string
customField2string
payrollCodestring
titlestring
departmentstring
costCenterstring
officeLocationstring
legalEntitystring
workerTypestring
urlstring (uri)
dryRunboolean
shouldFixApprovalChainsboolean
removeMissingboolean

AutomationPreviewInput

conditions requiredarray of object
Fields
field requiredmerchantName description amountMinor currency cardLast4 paymentType categoryId merchantType date notes invoiceNumber ocrText subtotalMinor taxMinor tipMinor confidence billable reimbursable documentType source tags flags lineItems.description lineItems.sku lineItems.amountMinor lineItems.quantity ai
op requiredequals contains contains_case starts_with gte lte not_equals not_contains gt lt is_empty is_not_empty matches_regex not_matches_regex between within_days_before_today within_days_after_date within_days_before_date ask
valuestring or number or boolean or object or object
Fields
from requiredstring
to requiredstring
fallbackno_match match

AutomationRuleInput

name requiredstring
enabledboolean
conditions requiredarray of object
Fields
field requiredmerchantName description amountMinor currency cardLast4 paymentType categoryId merchantType date notes invoiceNumber ocrText subtotalMinor taxMinor tipMinor confidence billable reimbursable documentType source tags flags lineItems.description lineItems.sku lineItems.amountMinor lineItems.quantity ai
op requiredequals contains contains_case starts_with gte lte not_equals not_contains gt lt is_empty is_not_empty matches_regex not_matches_regex between within_days_before_today within_days_after_date within_days_before_date ask
valuestring or number or boolean or object or object
Fields
from requiredstring
to requiredstring
fallbackno_match match
actions requiredobject
Fields
categoryIdstring
projectIdstring
clientIdstring
tagIdsarray of string
billableboolean
reimbursableboolean
paymentTypePaymentType
descriptionstring
merchantNamestring
taxBasisPointsinteger
vendorIdstring (uuid)
postToBookstrue
cleararray of categoryId tagIds taxMinor
reportIdstring
autoApprovetrue
rejectobject
Fields
reason requiredstring
flagForReviewobject
Fields
reason requiredstring
setStatusNEEDS_REVIEW READY
groupobject
Fields
report requiredstring
setCustomFieldsmap of string or number or boolean
extractarray of object or object
Fields
kind requiredregex
field requiredstring
pattern requiredstring
llmExtractarray of object
Fields
field requiredstring
prompt requiredstring
examplesarray of object
Fields
input requiredstring
output requiredstring
fallback requiredobject or object or object
Fields
action requirednone

BulkMemberInput

ids requiredarray of string
roleMemberRole
statusMemberStatus
managerIdstring,null

CreateInvitationInput

email requiredstring (email)
namestring
roleMemberRole
messagestring

ChangeMailInAddressInput

shippingAddress requiredobject
Fields
name requiredstring
companystring or null
line1 requiredstring
line2string or null
city requiredstring
region requiredstring
postalCode requiredstring
countrystring

MailInSettingsInput

address requiredobject or null
Fields
name requiredstring
companystring or null
line1 requiredstring
line2string or null
city requiredstring
region requiredstring
postalCode requiredstring
countrystring

CreateMailInInput

envelopesinteger
expectedDocuments requiredinteger
afterScanMailInDisposal
shippingAddressobject
Fields
name requiredstring
companystring or null
line1 requiredstring
line2string or null
city requiredstring
region requiredstring
postalCode requiredstring
countrystring
folderIdstring,null
notesstring or null

CreateWorkspaceInput

name requiredstring
baseCurrencystring
countrystring
timezonestring
copyFromIdstring
copySectionsarray of categories tags customFields reportFields distanceRates perDiem workflows rules merchantRules policies members accountingConnection overview
planPlanKey
intervalBillingInterval

InvitationListQuery

statusInvitationStatus

MemberListQuery

qstring
statusMemberStatus
roleMemberRole

PaymentAccountListQuery

archivedstring

PersonalRuleInput

name requiredstring
enabledboolean
merchantContains requiredstring
actions requiredobject
Fields
categoryIdstring
projectIdstring
clientIdstring
tagIdsarray of string
billableboolean
reimbursableboolean
paymentTypePaymentType
descriptionstring
merchantNamestring
taxBasisPointsinteger
vendorIdstring (uuid)
postToBookstrue
cleararray of categoryId tagIds taxMinor
reportIdstring
autoApprovetrue
rejectobject
Fields
reason requiredstring
flagForReviewobject
Fields
reason requiredstring
setStatusNEEDS_REVIEW READY
groupobject
Fields
report requiredstring
setCustomFieldsmap of string or number or boolean
extractarray of object or object
Fields
kind requiredregex
field requiredstring
pattern requiredstring
llmExtractarray of object
Fields
field requiredstring
prompt requiredstring
examplesarray of object
Fields
input requiredstring
output requiredstring
fallback requiredobject or object or object
Fields
action requirednone
ownerIdstring

PersonalRuleQuery

ownerIdstring

ReconciliationQuery

from requiredstring
to requiredstring
paymentAccountIdstring
feedstring
currencystring

ReorderAutomationRulesInput

ids requiredarray of string

RulesDocument

format requiredpapertotal.rules
version required1
exportedAtstring
rules requiredarray of object
Fields
name requiredstring
enabledboolean
conditions requiredarray of object
Fields
field requiredmerchantName description amountMinor currency cardLast4 paymentType categoryId merchantType date notes invoiceNumber ocrText subtotalMinor taxMinor tipMinor confidence billable reimbursable documentType source tags flags lineItems.description lineItems.sku lineItems.amountMinor lineItems.quantity ai
op requiredequals contains contains_case starts_with gte lte not_equals not_contains gt lt is_empty is_not_empty matches_regex not_matches_regex between within_days_before_today within_days_after_date within_days_before_date ask
valuestring or number or boolean or object or object
Fields
from requiredstring
to requiredstring
fallbackno_match match
actions requiredobject
Fields
billableboolean
reimbursableboolean
paymentTypePaymentType
descriptionstring
merchantNamestring
taxBasisPointsinteger
postToBookstrue
cleararray of categoryId tagIds taxMinor
autoApprovetrue
rejectobject
Fields
reason requiredstring
flagForReviewobject
Fields
reason requiredstring
setStatusNEEDS_REVIEW READY
groupobject
Fields
report requiredstring
setCustomFieldsmap of string or number or boolean
extractarray of object or object
Fields
kind requiredregex
field requiredstring
pattern requiredstring
llmExtractarray of object
Fields
field requiredstring
prompt requiredstring
examplesarray of object
fallback requiredobject or object or object
categorystring
projectstring
clientstring
vendorstring
tagsarray of object
Fields
name requiredstring
groupstring or null

ReportFieldInput

name requiredstring
type requiredReportFieldType
optionsarray of string
formulastring or null
requiredboolean
enabledboolean
positioninteger

SyncRecordQuery

stateSyncState

TransactionListQuery

stateTransactionState
paymentAccountIdstring
paymentAccountIdsstring
fromstring
tostring
qstring
minMinorinteger
maxMinorinteger
missingReceiptstring
unreportedstring
currencystring

UpdateAutomationRuleInput

namestring
enabledboolean
conditionsarray of object
Fields
field requiredmerchantName description amountMinor currency cardLast4 paymentType categoryId merchantType date notes invoiceNumber ocrText subtotalMinor taxMinor tipMinor confidence billable reimbursable documentType source tags flags lineItems.description lineItems.sku lineItems.amountMinor lineItems.quantity ai
op requiredequals contains contains_case starts_with gte lte not_equals not_contains gt lt is_empty is_not_empty matches_regex not_matches_regex between within_days_before_today within_days_after_date within_days_before_date ask
valuestring or number or boolean or object or object
Fields
from requiredstring
to requiredstring
fallbackno_match match
actionsobject
Fields
categoryIdstring
projectIdstring
clientIdstring
tagIdsarray of string
billableboolean
reimbursableboolean
paymentTypePaymentType
descriptionstring
merchantNamestring
taxBasisPointsinteger
vendorIdstring (uuid)
postToBookstrue
cleararray of categoryId tagIds taxMinor
reportIdstring
autoApprovetrue
rejectobject
Fields
reason requiredstring
flagForReviewobject
Fields
reason requiredstring
setStatusNEEDS_REVIEW READY
groupobject
Fields
report requiredstring
setCustomFieldsmap of string or number or boolean
extractarray of object or object
Fields
kind requiredregex
field requiredstring
pattern requiredstring
llmExtractarray of object
Fields
field requiredstring
prompt requiredstring
examplesarray of object
Fields
input requiredstring
output requiredstring
fallback requiredobject or object or object
Fields
action requirednone

UpdateMemberInput

roleMemberRole
statusMemberStatus
developerboolean
managerIdstring,null
titlestring or null
departmentstring or null
employeeIdstring or null
approvalLimitMinorinteger or null
overLimitApproverIdstring,null
forwardToIdstring,null
workerStatusstring or null
defaultTagsarray of string
customField1string or null
customField2string or null
payrollCodestring or null
legalEntitystring or null
tierstring or null
officeLocationstring or null
costCenterstring or null
accountingCodestring or null
workerTypestring or null

UpdateReportFieldInput

optionsarray of string
formulastring or null
requiredboolean
enabledboolean
positioninteger
disabledOptionsarray of string

UpdateWorkspaceInput

namestring
baseCurrencystring
countrystring
timezonestring
fiscalYearStartMonthinteger
distanceUnitmi km
retentionDaysinteger or null
callLogRetentionDaysinteger or null
readingModelReadingModel
localestring or null
showDefaultCategoriesboolean
shredDocumentsboolean
vatBasisPointsinteger or null
reimbursableTrackingboolean
calculateMissingTaxboolean
dateFormatDateFormat

AgentJoinInput

workspaceIdstring (uuid)

ReportLookupQuery

reference requiredstring

The ID printed on the report, such as RPT-0012.

OutsideDecisionInput

reason requiredstring

MoveExpensesInput

ids requiredarray of string
to requiredobject or object or object or object
Fields
type requiredreport
reportId requiredstring

DuplicateExpensesInput

ids requiredarray of string

BulkHoldInput

object or object

action requiredhold
ids requiredarray of string
reason requiredstring

ProfilePhotoInput

uploadId requiredstring

UnlockPrivateDetailsInput

code requiredstring

SavePrivateDetailsInput

unlockToken requiredstring
details requiredPrivateDetails

ConnectHrInput

system requiredstring
credentialsmap of string
approvalModeHrApprovalMode

UpdateHrSettingsInput

approvalMode requiredHrApprovalMode

ImportPeopleFileInput

uploadId requiredstring (uuid)
completeboolean

PeopleWebhookInput

people requiredarray of object
Fields
externalId requiredstring
emailstring (email) or null
firstNamestring or null
lastNamestring or null
statusACTIVE INACTIVE TERMINATED
managerExternalIdstring or null
managerEmailstring (email) or null
titlestring or null
departmentstring or null
costCenterstring or null
locationstring or null
legalEntitystring or null
workerTypestring or null
employeeNumberstring or null
payrollCodestring or null
startDatestring or null
endDatestring or null
completeboolean

InvoiceSettingsInput

enabledboolean
supplierNamestring or null
supplierAddressstring or null
taxNumbersmap of string
termsstring or null

InvoiceListQuery

statusDRAFT SENT VIEWED PARTIALLY_PAID PAID VOID OVERDUE
qstring

CreateInvoiceInput

recipientNamestring or null
recipientEmailstring (email) or null
recipientPhonestring or null
shareWitharray of string (email)
titlestring or null
currencystring
issueDatestring
dueDatestring or null
termsstring or null
supplierNamestring or null
supplierAddressstring or null
supplierTaxNumberstring or null
linesarray of object
Fields
description requiredstring
quantitynumber
unitMinor requiredinteger
taxKindInvoiceTaxKind or null
taxBasisPointsinteger or null
expenseIdstring or null
expenseIdsarray of string

BulkInvoiceInput

csv requiredstring
currencystring
sendboolean

UpdateInvoiceInput

recipientNamestring or null
recipientEmailstring (email) or null
recipientPhonestring or null
shareWitharray of string (email)
titlestring or null
currencystring
issueDatestring
dueDatestring or null
termsstring or null
supplierNamestring or null
supplierAddressstring or null
supplierTaxNumberstring or null
linesarray of object
Fields
description requiredstring
quantitynumber
unitMinor requiredinteger
taxKindInvoiceTaxKind or null
taxBasisPointsinteger or null
expenseIdstring or null

RecordInvoicePaymentInput

kindPAYMENT REFUND
amountMinor requiredinteger
paidOn requiredstring
referencestring or null
notestring or null

InvoiceMessageInput

body requiredstring

InvoiceToPayQuery

qstring

MoneyFlowQuery

monthsinteger

ExpenseGroupQuery

statusExpenseStatus or array of ExpenseStatus
kindExpenseKind
paymentTypePaymentType
ownerIdstring
scopemine all
categoryIdstring
merchantIdstring
projectIdstring
clientIdstring
tagIdstring
departmentstring
reportIdstring
externalIdstring
unreportedboolean
needsReviewboolean
billableboolean
reimbursableboolean
moneyFlowIN OUT
dateFieldExpenseDateField
fromstring
tostring
minMinorinteger
maxMinorinteger
qstring
groupBy requiredExpenseGroupBy

BulkEditOptionsInput

ids requiredarray of string

BulkEditInput

ids requiredarray of string
fields requiredobject
Fields
merchantNamestring,null
datestring
descriptionstring or null
amountMinorinteger
categoryIdstring,null
projectIdstring,null
billableboolean
reimbursableboolean
tagIdsarray of string
tagLevelsarray of object
Fields
level requiredstring
tagId requiredstring,null
attendeesarray of object
Fields
name requiredstring
emailstring (email)
phonestring

MergeExpensesInput

keepId requiredstring
otherId requiredstring
takeobject
Fields
merchantNamekeep other
datekeep other
amountMinorkeep other
descriptionkeep other
categoryIdkeep other
tagIdskeep other
receiptkeep other

EditSplitInput

rows requiredarray of object
Fields
amountMinor requiredinteger
categoryIdstring,null
projectIdstring,null
descriptionstring or null
datestring
tagIdsarray of string
reimbursableboolean
idstring

ReimbursementDetailsInput

reportIds requiredarray of string
fullNumbersboolean

PolicyRuleListQuery

tabgeneral cards fields flags

TagLevelImportInput

uploadId requiredstring
dependent requiredboolean

TagLevelsQuery

tagIdsstring
levelstring
qstring

AbaExportInput

ids requiredarray of string
processOn requiredstring
regenerateboolean

AbaOriginatorInput

bankCode requiredstring
userName requiredstring
userId requiredstring
bsb requiredstring
accountNumber requiredstring
descriptionstring

AcceptInvitationInput

token requiredstring

AchOriginatorInput

bankRoutingNumber requiredstring
bankName requiredstring
companyName requiredstring
companyId requiredstring
originIdstring or null
originNamestring or null
secCodePPD CCD
entryDescriptionstring

AddDomainAdminInput

emailstring (email)
phonestring

AddSenderInput

email requiredstring (email)

AgentScheduleInput

title requiredstring
instruction requiredstring
cadence requiredstring
enabledboolean

ApiCallListQuery

keystring
statusstring
fromstring
tostring

ApprovalQueueQuery

scopemine all

ApprovalWorkflowInput

name requiredstring
isDefaultboolean
steps requiredarray of object
Fields
level requiredinteger
kind requiredApprovalStepKind
userIdstring
inviteEmailstring (email)
roleMemberRole
overMinorinteger
autoApproveUnderMinorinteger or null
memberIdsarray of string

AskAssistantInput

message requiredstring
contextobject
Fields
reportIdstring
expenseIdstring

AskInsightsInput

question requiredstring
fromstring
tostring

AssignCardInput

userIdstring
emailstring (email)
phonestring
transactionStartDatestring or null

AuditListQuery

actionstring
entityTypestring
entityIdstring
actorIdstring
fromstring
tostring

BudgetInput

scope requiredBudgetScope
targetId requiredstring
periodBudgetPeriod
totalMinorinteger or null
perMemberMinorinteger or null
thresholdsarray of integer

BulkDeleteAgentsInput

ids requiredarray of string

BulkPaymentAccountInput

ids requiredarray of string
action requiredunassign

BulkTransactionInput

ids requiredarray of string
action requiredobject or object or object or object or object or object or object
Fields
type requiredmatch

CalcGstInput

expenseIds requiredarray of string (uuid)

CardLayoutInput

name requiredstring
mapping requiredobject
Fields
date requiredstring
description requiredstring
amountstring
debitstring
creditstring
merchantstring
externalIdstring
currencystring
fixedCurrencystring
cardstring
employeeIdstring
categorystring
tagstring
mccstring
dateOrderYMD MDY DMY
spendIsPOSITIVE NEGATIVE
decimalSeparator. ,

CategoryAccessInput

userIds requiredarray of string

ChatPreferenceInput

priorityMode requiredChatPriorityMode

CheckoutRequest

plan requiredPlanKey
interval requiredBillingInterval
seatsinteger

ChooseOrganisationInput

organisationId requiredstring

ClaimDomainInput

name requiredstring
workspaceId requiredstring

ConfirmMergeInput

email requiredstring (email)
code requiredstring
otherToken requiredstring

CopySettingsInput

sourceId requiredstring
sections requiredarray of CopySection
confirmName requiredstring

CreateAgentInput

name requiredstring
descriptionstring
instructionsstring
templateKeystring
grantsarray of object
Fields
tool requiredstring
limitsobject
Fields
maxTotalMinorinteger

CreateApiKeyInput

name requiredstring
scopesarray of ApiKeyScopeName
expiresAtstring (date-time)
kindPERSONAL WORKSPACE
fullAccessboolean
managerIdsarray of string
signingOFF OPTIONAL REQUIRED

CreateContactInput

UpdateContactInput

CreateDelegationInput

delegateIdstring
delegateEmailstring (email)
delegatorIdstring
accessDelegationAccess
startsAtstring (date-time)
endsAtstring (date-time) or null

CreateDocumentShareInput

userId requiredstring
directionshare request both

CreateExpenseFromTransactionInput

categoryIdstring,null
projectIdstring,null
tagIdsarray of string
reimbursableboolean
descriptionstring or null
notesstring or null

CreateGroupInput

namestring
memberIds requiredarray of string

CreateJoinLinkInput

roleMemberRole
requiresApprovalboolean
expiresInDaysinteger

CreateOAuthClientInput

name requiredstring
uristring (uri)
logoUristring (uri)
redirectUris requiredarray of string
scopes requiredarray of OAuthScopeName
publicboolean

CreateReimbursementInput

reportIds requiredarray of string
methodReimbursementMethod
separateboolean
referencestring
notestring

CreateRoomInput

name requiredstring
descriptionstring
visibilityRoomVisibility
postingRoomPosting
memberIdsarray of string

CreateScimTokenInput

name requiredstring
expiresInDaysinteger

CreateTaskInput

roomId requiredstring
title requiredstring
descriptionstring
assigneeId requiredstring

CustomFieldInput

key requiredstring
label requiredstring
type requiredTEXT NUMBER DATE SELECT BOOLEAN
optionsarray of string
requiredboolean
positioninteger

DecideAccessInput

approve requiredboolean

DeleteAccountInput

confirmEmail requiredstring

DescribeRuleInput

prompt requiredstring

DiscoverSignInInput

email requiredstring (email)

DomainGroupInput

name requiredstring
isDefaultboolean
strictRulesboolean
restrictLoginboolean
restrictWorkspacesboolean
preferredWorkspaceIdstring or null
cardWorkspaceIdstring or null

DomainInviteInput

email requiredstring (email)
namestring
roleMemberRole

DraftAgentInput

message requiredstring
instructionsstring

EditMessageInput

body requiredstring

EmailSignInInput

email requiredstring (email)

ExpenseVendorInput

vendorId requiredstring (uuid) or null

ExportTemplateInput

name requiredstring
columns requiredarray of object
Fields
key requiredstring
labelstring
formulastring
sharedboolean

FailReimbursementInput

reasonstring
codeReimbursementFailureCode
removeBankAccountboolean

FlagMessageInput

reasonstring

ForwardingAliasInput

alias requiredstring

FraudSettingsInput

enabled requiredboolean
yellowAt requirednumber
redAt requirednumber
profiles requiredobject
Fields
RECEIPTS requiredobject
Fields
signals requiredmap of object
monitoredFields requiredarray of FraudMonitoredField
CHECKS requiredobject
Fields
signals requiredmap of object
monitoredFields requiredarray of FraudMonitoredField
BANK_STATEMENTS requiredobject
Fields
signals requiredmap of object
monitoredFields requiredarray of FraudMonitoredField
suspiciousWords requiredarray of string
pdfCreatorKeywords requiredarray of string
velocity requiredobject
Fields
high requiredobject
Fields
lastMinutes requiredinteger
lastDay requiredinteger
lastWeek requiredinteger
last2Weeks requiredinteger
lastMonth requiredinteger
critical requiredobject
Fields
lastMinutes requiredinteger
lastDay requiredinteger
lastWeek requiredinteger
last2Weeks requiredinteger
lastMonth requiredinteger
duplicateSpike requiredobject
Fields
enabled requiredboolean
percent requiredinteger
minVolume requiredinteger

InboxQuery

taball unread todos

JoinEmailInput

email requiredstring (email)

JoinRoomInput

code requiredstring

JoinVerifyInput

email requiredstring (email)
code requiredstring

MarkReadInput

messageIdstring

MarkReimbursementPaidInput

referencestring
paidOnstring
methodMANUAL PAYROLL ACH_FILE
acceptOverpaymentboolean

MarkUnreadInput

messageId requiredstring

MatchTransactionInput

expenseId requiredstring

MerchantCopiesInput

enabled requiredboolean

MessageListQuery

parentIdstring
afterstring

MileageRateInput

name requiredstring
unitmi km
rateMinor requiredinteger
currencystring
effectiveFromstring
effectiveTostring or null
isDefaultboolean
archivedboolean
taxBasisPointsinteger or null
taxReclaimableMinorinteger or null

MileageYearQuery

date requiredstring
tripIdstring

ModerateMessageInput

action requiredhide delete dismiss

NachaExportInput

ids requiredarray of string
effectiveDate requiredstring
regenerateboolean

NetSuiteCredentialsInput

accountId requiredstring
clientId requiredstring
folderId requiredstring
subsidiaryIdstring or null

OAuthConsentInput

request requiredstring
workspaceId requiredstring
scopes requiredarray of OAuthScopeName

OAuthConsentQuery

request requiredstring

OAuthDenyInput

request requiredstring

OnboardingInput

intent requiredOnboardingIntent
workspaceNamestring
timezonestring

OpenDirectInput

userId requiredstring

PaymentAccountInput

name requiredstring
kindPaymentAccountKind
brandstring or null
last4string or null
isCompanyboolean
ownerIdstring or null

PayrollExportQuery

idsstring

PeopleQuery

qstring

PerDiemRateInput

name requiredstring
countrystring or null
regionstring or null
amountMinor requiredinteger
currencystring
archivedboolean

PinRoomInput

pinned requiredboolean

PlaidExchangeInput

publicToken requiredstring
institutionNamestring or null
isCompanyboolean

PolicyRuleInput

type requiredPolicyRuleType
severityPolicySeverity
enabledboolean
categoryIdstring,null
amountMinorinteger or null
daysinteger or null
notestring or null

PostMessageInput

bodystring
mentionsarray of string
parentIdstring
attachmentIdsarray of string

ProcessingReportQuery

from requiredstring
to requiredstring

PutSsoConnectionInput

object or object

protocol requiredSAML
displayName requiredstring
metadataXmlstring
idpEntityIdstring
ssoUrlstring (uri)
certificatestring

RecodeExpenseInput

categoryIdstring (uuid) or null
taxMinorinteger or null

RedeemEmailSignInInput

object or object

email requiredstring (email)
code requiredstring

RedeemJoinLinkInput

token requiredstring

RegisterDeviceInput

token requiredstring
platform requiredIOS ANDROID WEB
appVersionstring
localestring

ReimbursementListQuery

statusReimbursementStatus
payeeIdstring

ReimbursementSettingsInput

payerIdstring or null
autoBatchUnderMinorinteger or null
requireCardMatchboolean,null
detailsExportboolean,null

ReleaseSubscriptionInput

products requiredarray of ReleaseProduct

RemoveDeviceInput

token requiredstring

RenamePlaidItemInput

institutionName requiredstring

ReportSettingsInput

autoReportobject
Fields
schedule requiredAutoReportSchedule
weekdayinteger
dayOfMonthinteger
secondDayOfMonthinteger
titleTemplatestring or null
randomAuditPercentinteger
strictPoliciesboolean
rulesEnabledboolean
prohibitedItemsarray of ProhibitedItem
titleFormulastring or null
titleLockedboolean
policyTextstring or null
cashExpensesREIMBURSABLE NON_REIMBURSABLE ALWAYS_REIMBURSABLE ALWAYS_NON_REIMBURSABLE or null
externalCheckUrlstring (uri) or null
showGlCodesboolean
preventSelfApprovalboolean
preventPayingNonReimbursableboolean
autoApproveCompliantboolean
publicReceiptsboolean
fringeBenefitsboolean
attendeeTrackingboolean
billableExpensesDISABLED DEFAULT_BILLABLE DEFAULT_NON_BILLABLE

ReportSuspiciousInput

notestring

RequestDomainAccessInput

name requiredstring

RestrictSenderInput

userId requiredstring
reasonstring
daysinteger

ReviewQuery

fromstring
tostring
resendtrue false

MoveReportInput

workspaceId requiredstring

RoomListQuery

qstring
sortname members activity
directionasc desc
opentrue false

RoomMemberInput

userId requiredstring

BulkPerDiemInput

ids requiredarray of string
action requiredupdate delete
updateobject
Fields
amountMinorinteger
currencystring
archivedboolean

CommuteInput

home requiredstring
distance requirednumber

MoveExpenseInput

workspaceId requiredstring

PerDiemTemplateInput

template requiredDE SE FI ZA

UpdateDistanceSettingsInput

requireGpsOrMapboolean
excludeCommutesCommuteExclusion
trackTaxboolean
governmentRateobject
Fields
enabled requiredboolean
countrystring or null

UpdatePerDiemSettingsInput

defaultCategoryId requiredstring or null

RouteEstimateInput

addresses requiredarray of string
rateIdstring or null

S3AccessInput

accessKeyId requiredstring
secretAccessKey requiredstring
region requiredstring

SaveAgentRuleInput

title requiredstring
roleAgentRuleRole
prompt requiredstring
plan requiredobject
Fields
events requiredarray of report.submitted report.auto_approved report.step_approved report.approved report.rejected report.retracted report.reopened report.sent_back report.expense_rejected report.findings_accepted expense.held expense.released report.created report.updated report.deleted report.reassigned report.closed report.held_moved report.expenses_added report.expense_removed report.approver_replaced report.audit_sampled report.moved reimbursement.created reimbursement.paid report.reimbursed reimbursement.failed reimbursement.reversed reimbursement.cancelled reimbursement.overpaid reimbursement.receipt_confirmed reimbursement.delayed reimbursement.returned expense.reimbursement_stopped expense.created expense.updated expense.voided expense.restored expense.split expense.duplicate_kept expense.receipt_merged expense.receipt_attached expense.receipt_replaced expense.corrected expense.violation_dismissed document.created document.deleted document.processed document.failed comment.added comment.mentioned report.participant_added report.participant_removed room.member_added room.member_removed task.created task.reassigned task.completed task.reopened document.shared payment_account.assigned payment_account.unassigned payment_account.created payment_account.archived plaid.connected plaid.reconnected plaid.removed card.feed_broken transaction.matched transaction.unmatched report.exported export.requested integration.sync_failed integration.needs_attention travel.trip_changed billing.subscription_changed billing.seats_changed member.role_changed member.suspended member.updated invitation.created invitation.accepted workflow.created workflow.updated workflow.deleted policy.created policy.updated policy.deleted budget.created budget.updated budget.deleted integration.connected integration.disconnected payee_bank_account.saved payee_bank_account.removed reimbursement.settings_saved
branches requiredarray of object
Fields
whenarray of object
Fields
field requiredAgentField
op requiredAgentOperator
value requirednumber or string or boolean or array of string or tuple
askstring
then requiredarray of object
Fields
tool requiredAgentStepTool
inputmap of string or number or boolean or null
templateKeystring
enabledboolean

SavedPlaceInput

name requiredstring
address requiredstring

SavedSearchInput

name requiredstring
filtersobject
Fields
statusExpenseStatus or array of ExpenseStatus
kindExpenseKind
paymentTypePaymentType
ownerIdstring
scopemine all
categoryIdstring
merchantIdstring
projectIdstring
clientIdstring
tagIdstring
departmentstring
reportIdstring
externalIdstring
unreportedboolean
needsReviewboolean
billableboolean
reimbursableboolean
moneyFlowIN OUT
dateFieldExpenseDateField
fromstring
tostring
minMinorinteger
maxMinorinteger
qstring
columnsarray of ExpenseColumn
sortExpenseSort
sharedboolean

ScheduledReportInput

name requiredstring
kind requiredScheduledReportKind
format requiredExportFormat
cadence requiredReportCadence
recipients requiredarray of string (email)
enabledboolean
filtersobject
Fields
statusExpenseStatus or array of ExpenseStatus
kindExpenseKind
paymentTypePaymentType
ownerIdstring
scopemine all
categoryIdstring
merchantIdstring
projectIdstring
clientIdstring
tagIdstring
departmentstring
reportIdstring
externalIdstring
unreportedboolean
needsReviewboolean
billableboolean
reimbursableboolean
moneyFlowIN OUT
dateFieldExpenseDateField
minMinorinteger
maxMinorinteger
qstring

SearchQuery

q requiredstring
kindSearchKind
limitinteger

AccountingShortcutQuery

fromstring
tostring
accountIdstring
withdrawalTypeMANUAL PAYROLL ACH ACH_FILE ACH_PROVIDER
groupByAccrualGrouping
cursorstring

CatalogReportQuery

fromstring
tostring

SeatsRequest

seats requiredinteger

SetClientCertificateEnforcementInput

required requiredboolean

SharePlaidItemInput

workspaceId requiredstring
paymentAccountIds requiredarray of string

SlackSettingsInput

channelId requiredstring or null
receipts requiredSlackReceipts

SplitExpenseInput

modeamount percent days
partsarray of object
Fields
amountMinorinteger
basisPointsinteger
categoryIdstring,null
projectIdstring,null
descriptionstring or null
datestring
tagIdsarray of string
reimbursableboolean
startDatestring
endDatestring

SsoEnforcementInput

enforced requiredboolean
ownerExemptboolean

StartDomainMigrationInput

toDomainId requiredstring
dryRunboolean

StartMergeInput

email requiredstring (email)

SyncInput

expenseIdsarray of string (uuid)
reportIdstring (uuid)
fromstring
tostring
resendboolean
confirmDuplicateboolean

TaskListQuery

statusOPEN DONE
minestring

TransferWorkspaceInput

memberId requiredstring

UnsubscribeInput

token requiredstring

UpdateAgentInput

namestring
descriptionstring
instructionsstring
grantsarray of object
Fields
tool requiredstring
limitsobject
Fields
maxTotalMinorinteger

UpdateAgentRuleInput

titlestring
roleAgentRuleRole
promptstring
planobject
Fields
events requiredarray of report.submitted report.auto_approved report.step_approved report.approved report.rejected report.retracted report.reopened report.sent_back report.expense_rejected report.findings_accepted expense.held expense.released report.created report.updated report.deleted report.reassigned report.closed report.held_moved report.expenses_added report.expense_removed report.approver_replaced report.audit_sampled report.moved reimbursement.created reimbursement.paid report.reimbursed reimbursement.failed reimbursement.reversed reimbursement.cancelled reimbursement.overpaid reimbursement.receipt_confirmed reimbursement.delayed reimbursement.returned expense.reimbursement_stopped expense.created expense.updated expense.voided expense.restored expense.split expense.duplicate_kept expense.receipt_merged expense.receipt_attached expense.receipt_replaced expense.corrected expense.violation_dismissed document.created document.deleted document.processed document.failed comment.added comment.mentioned report.participant_added report.participant_removed room.member_added room.member_removed task.created task.reassigned task.completed task.reopened document.shared payment_account.assigned payment_account.unassigned payment_account.created payment_account.archived plaid.connected plaid.reconnected plaid.removed card.feed_broken transaction.matched transaction.unmatched report.exported export.requested integration.sync_failed integration.needs_attention travel.trip_changed billing.subscription_changed billing.seats_changed member.role_changed member.suspended member.updated invitation.created invitation.accepted workflow.created workflow.updated workflow.deleted policy.created policy.updated policy.deleted budget.created budget.updated budget.deleted integration.connected integration.disconnected payee_bank_account.saved payee_bank_account.removed reimbursement.settings_saved
branches requiredarray of object
Fields
whenarray of object
Fields
field requiredAgentField
op requiredAgentOperator
value requirednumber or string or boolean or array of string or tuple
askstring
then requiredarray of object
Fields
tool requiredAgentStepTool
inputmap of string or number or boolean or null
templateKeystring
enabledboolean

UpdateApiKeyInput

namestring
scopesarray of ApiKeyScopeName
expiresAtstring (date-time) or null
fullAccessboolean
managerIdsarray of string
signingRequiredboolean

UpdateBudgetInput

totalMinorinteger or null
perMemberMinorinteger or null
thresholdsarray of integer

UpdateContactInput

firstNamestring or null
lastNamestring or null
companystring or null
titlestring or null
emailsarray of string
phonesarray of string
mobilestring or null
faxstring or null
websitestring or null
addressstring or null
citystring or null
regionstring or null
postalCodestring or null
countrystring or null
notesstring or null

UpdateCustomFieldInput

keystring
labelstring
typeTEXT NUMBER DATE SELECT BOOLEAN
optionsarray of string
requiredboolean
positioninteger

UpdateDelegationInput

access requiredDelegationAccess

UpdateDocumentSettingsInput

duplicatesobject
Fields
similarityPercent requiredinteger or null
amountToleranceMinor requiredinteger
dayWindow requiredinteger
rule requiredobject or null
Fields
operator requiredAND OR
fields requiredarray of DuplicateField
lineItemsobject
Fields
enabled requiredboolean
limit requiredinteger or null
maxPagesinteger
cropDocumentboolean
emailAttachmentscombine separate
fxRateDatereceipt submission
asyncEnrichmentsarray of AsyncEnrichment
customFieldsarray of object
Fields
name requiredstring
pattern requiredstring
leveldocument line

UpdateDomainInput

joinPolicy requiredDomainJoinPolicy

UpdateExportSettingsInput

preferredExporterIdstring (uuid) or null
autoSyncboolean
exportDateEXPENSE_DATE LAST_EXPENSE SUBMITTED EXPORTED
reimbursableEntityBILL CHECK JOURNAL_ENTRY EXPENSE_REPORT
companyCardEntityCREDIT_CARD DEBIT_CARD BILL JOURNAL_ENTRY EXPENSE_REPORT
defaultVendorIdstring or null
cardMiscboolean
billStatusDRAFT SUBMITTED AUTHORISED
autoCreateVendorsboolean
autoCreateCustomersboolean
payableAccountIdstring or null
reimbursableTimingON_APPROVAL ON_REIMBURSEMENT
exportMethodACCRUAL CASH
syncReimbursedboolean
billPaymentAccountIdstring or null
postingCurrencyHOME ORIGINAL
printLaterboolean
nextOpenPeriodboolean
customFormIdstring or null
expenseReportApprovalSUPERVISOR ACCOUNTING SUPERVISOR_AND_ACCOUNTING
billApprovalPENDING APPROVED or null
journalApprovalPENDING APPROVED or null
enforceExpenseLimitboolean

UpdateExportTemplateInput

namestring
columnsarray of object
Fields
key requiredstring
labelstring
formulastring
sharedboolean

UpdateImportSettingsInput

prefixCategoriesboolean
expenseClaimsOnlyboolean
itemsboolean
taxesboolean
rebillCustomersboolean
dimensionsmap of OFF TAGS REPORT_FIELDS EMPLOYEE_DEFAULT
intercompanyboolean
customListsarray of object
Fields
name requiredstring
table requiredstring
field requiredstring

UpdateMappingsInput

mappings requiredarray of object
Fields
entity requiredMappingEntity
localId requiredstring
externalId requiredstring or null

UpdateMileageRateInput

namestring
unitmi km
rateMinorinteger
currencystring
effectiveFromstring
effectiveTostring or null
isDefaultboolean
archivedboolean
taxBasisPointsinteger or null
taxReclaimableMinorinteger or null

UpdateOAuthClientInput

namestring
uristring (uri) or null
logoUristring (uri) or null
redirectUrisarray of string
scopesarray of OAuthScopeName
enabledboolean

UpdatePaymentAccountInput

namestring
kindPaymentAccountKind
brandstring or null
last4string or null
isCompanyboolean
ownerIdstring or null
archivedboolean
transactionStartDatestring or null
statementCloseDayinteger or null
liabilityCardLiability
reimbursableboolean,null
allowDeletingTransactionsboolean
glAccountstring or null
createExpensesboolean

UpdatePerDiemRateInput

namestring
countrystring or null
regionstring or null
amountMinorinteger
currencystring
archivedboolean

UpdatePolicyRuleInput

typePolicyRuleType
severityPolicySeverity
enabledboolean
categoryIdstring,null
amountMinorinteger or null
daysinteger or null
notestring or null

UpdatePreferencesInput

preferences requiredarray of object
Fields
type requiredinvoice.updated document.processed document.failed expense.needs_review report.submitted report.approved report.rejected report.reimbursed comment.added member.invited billing.payment_failed billing.dispute_opened billing.trial_ending usage.limit_near budget.threshold fraud.duplicate_spike integration.needs_attention integration.post_failed integration.batch_finished mail_in.updated chat.message chat.mention task.assigned assistant.action document.share_requested export.ready webhook.disabled release.published digest.daily
emailboolean
pushboolean
inAppboolean

UpdateProfileInput

displayNamestring
phonestring or null
localestring
timezonestring
distanceUnitmi km
defaultWorkspaceIdstring
onboardedboolean
languageUiLanguage
highContrastboolean
pronounsstring or null
statusTextstring or null
statusClearsAtstring (date-time) or null

UpdateRoomInput

namestring
descriptionstring or null
visibilityRoomVisibility
postingRoomPosting
imageAttachmentIdstring or null

UpdateSavedSearchInput

namestring
filtersobject
Fields
statusExpenseStatus or array of ExpenseStatus
kindExpenseKind
paymentTypePaymentType
ownerIdstring
scopemine all
categoryIdstring
merchantIdstring
projectIdstring
clientIdstring
tagIdstring
departmentstring
reportIdstring
externalIdstring
unreportedboolean
needsReviewboolean
billableboolean
reimbursableboolean
moneyFlowIN OUT
dateFieldExpenseDateField
fromstring
tostring
minMinorinteger
maxMinorinteger
qstring
columnsarray of ExpenseColumn or null
sortExpenseSort or null
sharedboolean

UpdateScheduledReportInput

namestring
kindScheduledReportKind
formatExportFormat
cadenceReportCadence
recipientsarray of string (email)
enabledboolean
filtersobject
Fields
statusExpenseStatus or array of ExpenseStatus
kindExpenseKind
paymentTypePaymentType
ownerIdstring
scopemine all
categoryIdstring
merchantIdstring
projectIdstring
clientIdstring
tagIdstring
departmentstring
reportIdstring
externalIdstring
unreportedboolean
needsReviewboolean
billableboolean
reimbursableboolean
moneyFlowIN OUT
dateFieldExpenseDateField
minMinorinteger
maxMinorinteger
qstring

ImportIifInput

uploadId requiredstring (uuid)

ReuseConnectorInput

connectionId requiredstring (uuid)

SaveTravelDocumentInput

number requiredstring
countrystring or null
expiresOnstring or null

UpdateTravelProfileInput

legalFirstNamestring or null
legalMiddleNamestring or null
legalLastNamestring or null
birthDatestring or null
genderstring or null
phonestring or null
homeAddressobject or null
Fields
line1string
line2string
citystring
regionstring
postalCodestring
countrystring
workAddressobject or null
Fields
line1string
line2string
citystring
regionstring
postalCodestring
countrystring
emergencyNamestring or null
emergencyRelationshipstring or null
emergencyPhonestring or null
emergencyEmailstring (email) or null

UpdateStorageInput

backupboolean
exportsboolean
intakeboolean

UpdateTaskInput

titlestring
descriptionstring or null
assigneeIdstring

UpdateVehicleInput

namestring
platestring or null
userIdstring
archivedboolean

UpdateVendorInput

enabledboolean
namestring
emailstring (email) or null

UseRecoveryCodeInput

email requiredstring (email)
code requiredstring

VacationDelegateInput

userId requiredstring
delegateId requiredstring
accessDelegationAccess
startsAtstring (date-time)
endsAt requiredstring (date-time)

VehicleInput

name requiredstring
platestring or null
userIdstring
archivedboolean

VendorAccountInput

accountId requiredstring or null

VendorQuery

qstring

VerifySenderInput

token requiredstring

WorkspaceSecurityInput

requireMfa requiredboolean

OffboardingQuery

userIdstring

ChatStreamQuery

lastEventIdstring

The same as the Last-Event-ID header.

McpRequest

jsonrpc required2.0
idstring or integer

Left out on a notification, which answers 202.

method requiredstring

initialize, tools/list, tools/call and so on.

paramsmap of any

What the method takes. On the current revision, _meta carries the protocol version and the client capabilities.

JoinLinkQuery

tokenstring

ChatThreadQuery

reportIdstring
expenseIdstring

PayeeAccountInput

object or object

holderName requiredstring
routingNumber requiredstring
accountNumber requiredstring
accountTypeBankAccountType

StatementPreviewFields

mappingstring

The column mapping, as JSON text. Leave it out to use the suggested one. OFX and QFX need none.

StatementUploadFields

forcestring
createExpensesstring
reimbursablestring
mappingstring

The column mapping, as JSON text. Leave it out to use the suggested one. OFX and QFX need none.

RemoveDeviceQuery

tokenstring

The push token, for a client that cannot send a body on DELETE.

UploadSourceQuery

clientios android

The app sending the file. Leave it out in a browser.

OAuthAuthorizeQuery

response_type requiredcode
client_id requiredstring

A registered client id, or the URL of a client metadata document.

redirect_uri requiredstring

Exactly as registered.

scopestring

Scopes separated by spaces. all asks for every API scope.

statestring

Comes back unchanged on the redirect.

code_challenge requiredstring

43 characters of base64url: the SHA-256 of the verifier.

code_challenge_method requiredS256
resourcestring

The API or the MCP server. A token for one is refused at the other.

OAuthTokenForm

grant_type requiredauthorization_code refresh_token
codestring

With authorization_code.

redirect_uristring

With authorization_code: the same value sent to /oauth/authorize.

code_verifierstring

With authorization_code: 43 to 128 characters.

refresh_tokenstring

With refresh_token. It rotates: use the one each answer returns.

scopestring

With refresh_token: narrows what the new token holds. It cannot widen it.

resourcestring

If sent, it must be the resource the code or token was issued for.

client_idstring

Unless sent by HTTP Basic.

client_secretstring

For a confidential client, unless sent by HTTP Basic.

OAuthRevokeForm

token requiredstring

The access or refresh token. Revoking a refresh token ends every token issued from it.

client_idstring

Unless sent by HTTP Basic.

client_secretstring

For a confidential client, unless sent by HTTP Basic.

OAuthClientMetadata

client_name requiredstring
client_uristring (uri)
logo_uristring (uri)
redirect_uris requiredarray of string
token_endpoint_auth_methodnone client_secret_basic client_secret_post
application_typeweb native
scopestring

AnyDocumentInput

file_urlstring
file_datastring
file_namestring
external_idstring
asyncboolean
tagsarray of string
auto_deleteboolean
blueprint_name requiredstring
blueprint_versioninteger
max_pages_to_processinteger

BatchDocumentsInput

file_urls requiredarray of string
typeDocumentType
external_idstring

BlueprintListQuery

documentTypeDocumentType

BlueprintVersionQuery

versioninteger

ClassifyDocumentInput

file_urlstring
file_datastring
file_namestring
external_idstring
asyncboolean
tagsarray of string
auto_deleteboolean
document_typesarray of string

CreateBlueprintInput

name requiredstring
title requiredstring
descriptionstring
documentTypeDocumentType
schema requiredobject
Fields
type requiredobject
descriptionstring
properties requiredSharedSchema0
fieldsarray of object
Fields
path requiredstring
labelstring
examplestring
boxobject
Fields
page requiredinteger
x requirednumber
y requirednumber
width requirednumber
height requirednumber

CropDocumentInput

pageinteger
x requirednumber
y requirednumber
width requirednumber
height requirednumber

ExtractDocumentInput

file_urlstring
file_datastring
file_namestring
external_idstring
asyncboolean
tagsarray of string
auto_deleteboolean
document_typesarray of string

ParseDocumentInput

file_urlstring
file_datastring
file_namestring
external_idstring
asyncboolean
tagsarray of string
auto_deleteboolean
detailsboolean

ParseQuery

detailsboolean
tagstring

ParseUpdateInput

titlestring or null
notesstring or null
tagsarray of string

RotateDocumentInput

pageinteger
degrees90 or 180 or 270 or -90

SettleDuplicatesInput

object or object

keep requiredall
othersarray of string

SplitDocumentInput

mode requiredevery_page custom detect blank_pages
rangesstring

SplitOptions

split_by_blank_pageboolean
every_pageboolean
rangesstring
document_typesarray of string
blueprint_namestring
file_urlstring
file_datastring
file_namestring
external_idstring

SplitUploadInput

uploadId requiredstring
modeevery_page custom detect blank_pages
rangesstring

UpdateBlueprintInput

titlestring
descriptionstring or null
documentTypeDocumentType
schemaobject
Fields
type requiredobject
descriptionstring
properties requiredSharedSchema0
fieldsarray of object
Fields
path requiredstring
labelstring
examplestring
boxobject
Fields
page requiredinteger
x requirednumber
y requirednumber
width requirednumber
height requirednumber

CreateWorkflowInput

name requiredstring
graphobject
Fields
nodes requiredarray of object
Fields
id requiredstring
type requiredapi_import document_aggregator google_drive_import gmail_input dropbox_import email_collector ai_agent convert_csv convert_excel decision document_classifier email_approval extract_data extract_data_set pdf_splitter split_collector business_insights email_file google_drive dropbox google_sheets xero_export
x requirednumber
y requirednumber
configmap of any
edges requiredarray of object
Fields
id requiredstring
from requiredstring
port requiredstring
to requiredstring

UpdateWorkflowInput

namestring
graphobject
Fields
nodes requiredarray of object
Fields
id requiredstring
type requiredapi_import document_aggregator google_drive_import gmail_input dropbox_import email_collector ai_agent convert_csv convert_excel decision document_classifier email_approval extract_data extract_data_set pdf_splitter split_collector business_insights email_file google_drive dropbox google_sheets xero_export
x requirednumber
y requirednumber
configmap of any
edges requiredarray of object
Fields
id requiredstring
from requiredstring
port requiredstring
to requiredstring

ValidateWorkflowInput

graphobject
Fields
nodes requiredarray of object
Fields
id requiredstring
type requiredapi_import document_aggregator google_drive_import gmail_input dropbox_import email_collector ai_agent convert_csv convert_excel decision document_classifier email_approval extract_data extract_data_set pdf_splitter split_collector business_insights email_file google_drive dropbox google_sheets xero_export
x requirednumber
y requirednumber
configmap of any
edges requiredarray of object
Fields
id requiredstring
from requiredstring
port requiredstring
to requiredstring

StartWorkflowRunInput

uploadIdstring
documentIdsarray of string
nodeIdstring

AnswerWorkflowStepInput

decision requiredapprove reject

WorkflowApprovalTokenInput

token requiredstring

AnalyticsQuery

statusExpenseStatus or array of ExpenseStatus
kindExpenseKind
paymentTypePaymentType
ownerIdstring
scopemine all
categoryIdstring
merchantIdstring
projectIdstring
clientIdstring
tagIdstring
departmentstring
reportIdstring
externalIdstring
unreportedboolean
needsReviewboolean
billableboolean
reimbursableboolean
moneyFlowIN OUT
dateFieldExpenseDateField
fromstring
tostring
minMinorinteger
maxMinorinteger
qstring
limitinteger
intervalTrendInterval
groupCurrencystring

ApproveReportInput

commentstring
heldmove approve
bypassboolean
expectedTotalMinorinteger

AttachReceiptInput

modeadd replace
clientIdstring
deviceIdstring

BulkDocumentInput

idsarray of string
filterDocumentListQuery
cursorstring
action requiredobject or object or object or object
Fields
type requiredmove
folderId requiredstring,null

TrashActionInput

idsarray of string
allboolean
action requiredrestore purge

BulkExpenseInput

ids requiredarray of string
action requiredobject or object or object or object or object or object or object or object or object
Fields
type requiredset_category
categoryId requiredstring,null

BulkReassignInput

reportIds requiredarray of string
approverId requiredstring
modereplace insert

BulkApproveInput

reportIds requiredarray of string
allboolean

BulkReportsInput

reportIds requiredarray of string

CatalogImportInput

csv requiredstring

CatalogQuery

qstring
archivedstring

CategoryInput

name requiredstring
parentIdstring,null
glCodestring or null
taxLinestring or null
deductiblePctinteger
enabledboolean
positioninteger
typeCategoryType
payrollCodestring or null
descriptionHintstring or null
approverIdstring,null
commentRequiredboolean
maxExpenseMinorinteger or null
headerOnlyboolean

CategoryQuery

qstring
enabledstring
typeCategoryType
originCategoryOrigin
headersstring

CommentInput

bodystring
mentionsarray of string
attachmentIdsarray of string

ContactExportInput

format requiredContactExportFormat
idsarray of string

ContactListQuery

qstring
documentIdstring
namestring
companystring
emailstring
phonestring
websitestring
citystring
regionstring
postalCodestring
countrystring

CreateDocumentInput

tagsarray of string
categoriesarray of string
taxonomyarray of string
allowed_async_enrichmentsarray of AsyncEnrichment
bounding_boxesboolean
confidence_detailsboolean
computeboolean
parse_addressboolean
countrystring
max_pages_to_processinteger
boost_modeboolean
auto_deleteboolean
stitchboolean
crop_documentboolean
blueprint_namestring
blueprint_versioninteger
asyncboolean
line_item_expansionboolean
tiff_dpinumber
typeDocumentType
clientIdstring
externalIdstring
folderIdstring
notesstring
capturedAtstring (date-time)
latitudenumber
longitudenumber
locationAccuracyMnumber
deviceIdstring
merchantNamestring
datestring
totalMinorinteger
taxMinorinteger
categorystring

CreateExpenseInput

merchantNamestring,null
descriptionstring or null
notesstring or null
date requiredstring
currencystring
amountMinor requiredinteger
subtotalMinorinteger or null
taxMinorinteger or null
tipMinorinteger or null
discountMinorinteger or null
shippingMinorinteger or null
baseAmountMinorinteger or null
fxRatenumber or null
categoryIdstring,null
projectIdstring,null
clientIdstring,null
billableboolean
reimbursableboolean
paymentTypePaymentType or null
paymentAccountIdstring,null
cardLast4string or null
invoiceNumberstring or null
poNumberstring or null
dueDatestring or null
mccstring or null
taxDeductibleboolean
moneyFlowIN OUT
alsoCategoryIdsarray of string
tagIdsarray of string
attendeesarray of object
Fields
name requiredstring
emailstring (email)
phonestring
customFieldsmap of any
linesarray of ExpenseLineInput
kindMANUAL MILEAGE PER_DIEM TIME
quantitynumber
rateMinorinteger
unitstring
tripmap of any
vehicleIdstring
externalIdstring
ownerIdstring
reportIdstring

CreateExportInput

kind requiredExportKind
format requiredExportFormat
filtersobject
Fields
statusExpenseStatus or array of ExpenseStatus
kindExpenseKind
paymentTypePaymentType
ownerIdstring
scopemine all
categoryIdstring
merchantIdstring
projectIdstring
clientIdstring
tagIdstring
departmentstring
reportIdstring
externalIdstring
unreportedboolean
needsReviewboolean
billableboolean
reimbursableboolean
moneyFlowIN OUT
dateFieldExpenseDateField
fromstring
tostring
minMinorinteger
maxMinorinteger
qstring
idsarray of string
yearinteger
reportStateReportStatus or array of ReportStatus
reportIdsarray of string
startDatestring
endDatestring
approvedAfterstring
exportedboolean
categoryIdsarray of string
documentIdsarray of string
documentTypesarray of DocumentType
policyIdsarray of string
templateIdstring
fullPageReceiptsboolean
templatestring
onFinishobject
Fields
emailobject
Fields
recipients requiredarray of string (email)
messagestring
markAsExportedboolean
sftpUploadobject
Fields
host requiredstring
portinteger
username requiredstring
passwordstring
privateKeystring
passphrasestring
hostKeySha256 requiredstring
pathstring
delimiterCsvDelimiter
bomboolean
recipientsarray of string (email)
columnSetDocumentColumnSet
presetExportPreset
viewobject
Fields
levelexpense report
columns requiredarray of object
Fields
key requiredstring
labelstring
sortExpenseSort
groupByExpenseGroupBy
groupsOnlyboolean

CreateMerchantInput

name requiredstring
defaultCategoryIdstring,null
websitestring or null
phonestring or null
addressstring or null
taxIdstring or null
is1099boolean
merchantTypeMerchantType or null

CreatePerDiemInput

perDiemRateIdstring
mieRateIdstring
subRatesarray of object
Fields
rateId requiredstring
quantity requiredinteger
lodgingRateIdstring
startDate requiredstring
endDate requiredstring
startTimestring
endTimestring
partialDaysboolean
destinationstring
descriptionstring or null
mealsCategoryIdstring or null
tagIdsarray of string
categoryIdstring or null
projectIdstring or null
clientIdstring or null
billableboolean
reimbursableboolean
notesstring or null

CreateReportInput

titlestring
purposestring or null
currencystring
expenseIdsarray of string
ownerIdstring

CreateTimeInput

date requiredstring
hours requirednumber
rateMinor requiredinteger
currencystring
description requiredstring
categoryIdstring or null
projectIdstring or null
clientIdstring or null
billableboolean
reimbursableboolean
notesstring or null

CreateTripInput

date requiredstring
distancenumber
odometerStartnumber
odometerEndnumber
routeDistancenumber or null
roundTripboolean
origin requiredstring
destination requiredstring
stopsarray of string
departedstring or null
arrivedstring or null
purpose requiredstring
vehicleIdstring or null
rateIdstring or null
routeTokenstring or null
categoryIdstring or null
projectIdstring or null
clientIdstring or null
billableboolean
reimbursableboolean
notesstring or null

CreateWebhookInput

url requiredstring
descriptionstring
events requiredarray of WebhookEvent
apiKeyIdstring

ConfirmWebhookInput

token requiredstring

WebhookListQuery

apiKeyIdstring
includekeys

DocumentListQuery

typeDocumentType
statusDocumentStatus
sourceDocumentSource
source_idstring
external_idstring
blueprint_namestring
ownerstring
device_idstring
device_user_uuidstring
viewedboolean
trashedboolean
envelopestring
created__gtstring or string (date-time)
created__gtestring or string (date-time)
created__ltstring or string (date-time)
created__ltestring or string (date-time)
updated__gtstring or string (date-time)
updated__gtestring or string (date-time)
updated__ltstring or string (date-time)
updated__ltestring or string (date-time)
issuedstring
issued__gtstring
issued__gtestring
issued__ltstring
issued__ltestring
totalinteger
total__gtinteger
total__gteinteger
total__ltinteger
total__lteinteger
taxinteger
tax__gtinteger
tax__gteinteger
tax__ltinteger
tax__lteinteger
currencystring
categorystring
vendorstring
notesstring
payment_typePaymentType
last_four_digitsstring
first_namestring
last_namestring
work_phonestring
cell_phonestring
companystring
emailstring
websitestring
countrystring
statestring
citystring
zipstring
namestring
is_emptystring
order_byDocumentOrder
folderIdstring
mailInBatchIdstring
setIdstring
externalIdstring
tagstring
archivedboolean
unviewedboolean
qstring
fromstring
tostring
fraudColorFraudColor
fraudSignalFraudSignal
fraudReviewFraudReviewState

ExpenseListPageQuery

statusExpenseStatus or array of ExpenseStatus
kindExpenseKind
paymentTypePaymentType
ownerIdstring
scopemine all
categoryIdstring
merchantIdstring
projectIdstring
clientIdstring
tagIdstring
departmentstring
reportIdstring
externalIdstring
unreportedboolean
needsReviewboolean
billableboolean
reimbursableboolean
moneyFlowIN OUT
dateFieldExpenseDateField
fromstring
tostring
minMinorinteger
maxMinorinteger
qstring
sortExpenseSort

ExpenseTotalsQuery

statusExpenseStatus or array of ExpenseStatus
kindExpenseKind
paymentTypePaymentType
ownerIdstring
scopemine all
categoryIdstring
merchantIdstring
projectIdstring
clientIdstring
tagIdstring
departmentstring
reportIdstring
externalIdstring
unreportedboolean
needsReviewboolean
billableboolean
reimbursableboolean
moneyFlowIN OUT
dateFieldExpenseDateField
fromstring
tostring
minMinorinteger
maxMinorinteger
qstring
idsstring or array of string
currencystring

FolderInput

name requiredstring
parentIdstring,null

FolderQuery

qstring
parentIdstring

DismissFlagInput

reasonstring

HoldExpenseInput

reason requiredstring

ReachMentionedInput

userIds requiredarray of string

MergeMerchantInput

intoId requiredstring

MerchantInput

namestring
defaultCategoryIdstring,null
websitestring or null
phonestring or null
addressstring or null
taxIdstring or null
is1099boolean
merchantTypeMerchantType or null

MileageLogQuery

fromstring
tostring
scopemine all
ownerIdstring
vehicleIdstring
purposeMileagePurpose

OdometerPhotoInput

reading requiredSTART END

ProjectInput

name requiredstring
codestring or null
clientIdstring,null
budgetMinorinteger or null
archivedboolean

ProjectQuery

qstring
archivedstring
clientIdstring

ReassignReportInput

approverId requiredstring
modereplace insert

RejectExpenseInput

reason requiredstring

RejectReportInput

reason requiredstring
tostring

ReportExpensesInput

ids requiredarray of string

ReportListQuery

statusReportStatus or array of ReportStatus
scopemine all assigned
ownerIdstring
qstring
fromstring
tostring

ReportParticipantInput

userId requiredstring

SubmitReportInput

memostring
ccarray of string
tostring
ccEmailsarray of string (email)
attachPdfboolean
approverEmailstring (email)

SubmitDocumentInput

tagsarray of string
categoriesarray of string
taxonomyarray of string
allowed_async_enrichmentsarray of AsyncEnrichment
bounding_boxesboolean
confidence_detailsboolean
computeboolean
parse_addressboolean
countrystring
max_pages_to_processinteger
boost_modeboolean
auto_deleteboolean
stitchboolean
crop_documentboolean
blueprint_namestring
blueprint_versioninteger
asyncboolean
line_item_expansionboolean
tiff_dpinumber
file_urlstring
file_urlsarray of string
file_datastring
file_namestring
external_idstring
device_idstring
typeDocumentType
bucketstring
package_pathstring

TagInput

name requiredstring
groupNamestring or null
glCodestring or null
colorstring or null
archivedboolean
approverIdstring or null
parentIdstring or null

TaxSummaryQuery

yearinteger

TripRouteQuery

qstring

UpdateCategoryInput

namestring
parentIdstring,null
glCodestring or null
taxLinestring or null
deductiblePctinteger
enabledboolean
positioninteger
typeCategoryType
payrollCodestring or null
descriptionHintstring or null
approverIdstring,null
commentRequiredboolean
maxExpenseMinorinteger or null
headerOnlyboolean

UpdateDocumentInput

typeDocumentType
folderIdstring,null
titlestring or null
notesstring or null
tagsarray of string
statusPROCESSED REVIEWED
approvedboolean
fraudReviewFraudReviewInput
billableboolean
merchantNamestring or null
totalMinorinteger
subtotalMinorinteger or null
taxMinorinteger or null
tipMinorinteger or null
customFieldsmap of string or array of string or null
correctionsmap of string or null

UpdateExpenseInput

merchantNamestring,null
descriptionstring or null
notesstring or null
datestring
currencystring
amountMinorinteger
subtotalMinorinteger or null
taxMinorinteger or null
tipMinorinteger or null
discountMinorinteger or null
shippingMinorinteger or null
baseAmountMinorinteger or null
fxRatenumber or null
categoryIdstring,null
projectIdstring,null
clientIdstring,null
billableboolean
reimbursableboolean
paymentTypePaymentType or null
paymentAccountIdstring,null
cardLast4string or null
invoiceNumberstring or null
poNumberstring or null
dueDatestring or null
mccstring or null
taxDeductibleboolean
moneyFlowIN OUT
alsoCategoryIdsarray of string
tagIdsarray of string
attendeesarray of object
Fields
name requiredstring
emailstring (email)
phonestring
customFieldsmap of any
linesarray of ExpenseLineInput

UpdateFolderInput

namestring
parentIdstring,null

UpdateProjectInput

namestring
codestring or null
clientIdstring,null
budgetMinorinteger or null
archivedboolean

UpdateReportInput

titlestring
purposestring or null
currencystring
fieldsmap of string or null

UpdateTagInput

namestring
groupNamestring or null
glCodestring or null
colorstring or null
archivedboolean
approverIdstring or null
parentIdstring or null

UpdateWebhookInput

urlstring
descriptionstring or null
eventsarray of WebhookEvent
enabledboolean

VehicleQuery

qstring
archivedstring
userIdstring

BlockDeviceInput

deviceId requiredstring
reasonstring

FraudReviewInput

decision requiredFraudReviewDecision
typesarray of FraudSignal
notestring

RevealDocumentInput

kindsarray of SensitiveKind
reasonstring

CheckWithDocumentInput

check requiredSubmitDocumentInput
document requiredSubmitDocumentInput

BillingInvoicePage

data requiredarray of BillingInvoice
nextCursor requiredstring,null

Pass as cursor for the next page. Null on the last one.

ExportRecordPage

data requiredarray of ExportRecord
nextCursor requiredstring,null

Pass as cursor for the next page. Null on the last one.

ExportRecordsAppended

data requiredarray of ExportRecord
alreadyRecorded requirednumber

Already recorded, so left as they were.

DocumentDetail

id requiredstring
type requiredDocumentType
source requiredDocumentSource
status requiredDocumentStatus
originalFilename requiredstring,null
mimeType requiredstring
sizeBytes requirednumber
pageCount requirednumber
externalId requiredstring,null
folderId requiredstring,null
expenseId requiredstring,null
mailInBatchId requiredstring,null
title requiredstring,null
notes requiredstring,null
latitude requirednumber,null

Where the device said it was when the photo was taken.

longitude requirednumber,null
locationAccuracyM requirednumber,null
duplicateOfId requiredstring,null
processingError requiredstring,null
processingErrorCode requiredFILE_ENCRYPTED or null

Set when the failure is one the file's owner can fix. processingError says what to do.

verification requiredstring
capturedAt requiredstring,null
processedAt requiredstring,null
viewedAt requiredstring,null
archivedAt requiredstring,null
createdAt requiredstring
uploadedBy requiredobject or null
Fields
id requiredstring
name requiredstring,null
pages requiredarray of object
Fields
index requirednumber
url requiredstring,null
thumbnailUrl requiredstring,null
width requirednumber,null
height requirednumber,null
isBlurry requiredobject
Fields
value requiredboolean,null
score requirednumber,null
glare requiredobject
Fields
value requiredboolean,null
score requirednumber,null
isLcd requiredobject

Blank for a caller without expenses.read_all.

Fields
value requiredboolean,null
score requirednumber,null
screenshot requiredobject or null

Null when the page is not one, and for a caller without expenses.read_all.

Fields
type requiredmobile_screenshot other_screenshot ai_generated
score requirednumber,null
aiGenerated requiredobject

Blank for a caller without expenses.read_all. Value null means nothing could say.

Fields
value requiredboolean,null
score requirednumber,null
language requiredstring,null
languages requiredarray of object
Fields
tag requiredstring
score requirednumber
ocrScore requirednumber,null
isFront requiredboolean,null

A check: the front or the back.

tiffRejectScore requirednumber,null

A check: 0 is a clean clearing image and 1 is one a bank would send back.

tiffUpscaled requiredboolean,null

A check: the photo was under 240 DPI, so the clearing image was enlarged.

classification requiredobject or null

What the classifier decided, when it was asked.

Fields
value requiredstring

A document class, or one of the labels the caller named.

score requirednumber

0..1.

engine requiredrules claude
scores requiredarray of object

The runners-up, best first.

Fields
value requiredstring
score requirednumber
blueprint requiredobject or null

The blueprint this was read with, and what came out of it.

Fields
name requiredstring
version requirednumber,null

Null for a built-in, which has no versions.

result requiredmap of any or null

The fields the blueprint defines. Null when the run failed.

offsetsmap of object

Where each value sits in the text, for a blueprint that asks.

unmatchedarray of string

Fields where a value was read and did not fit, such as words where a number belongs or a choice off the list. Each is left empty. An empty field not named here was not on the document.

error requiredstring,null

Why the run gave nothing back.

tags requiredarray of string
tagRefs requiredarray of object

The same tags with their ids, which a tag route takes.

Fields
id requiredstring
name requiredstring
recordStatus requiredprocessed reviewed archived or null

Where a read document stands: reviewedAt and archivedAt in one word. Null until it has been read.

duplicates requiredarray of object

Near copies past the workspace threshold, best first.

Fields
id requiredstring
url requiredstring
score requirednumber

Percent alike.

setId requiredstring,null

The upload this came out of: a ZIP, a split PDF or a batch of addresses.

customFields requiredmap of string or array of string or null

Values the workspace custom field rules read out of the text.

enrichment requiredobject or null

Work still running after the first answer.

Fields
status requiredPENDING DONE FAILED
steps requiredarray of duplicates similar_documents line_item_expansion line_item_categorization line_item_custom_categorization xero_line_coding address_parsing fraud rules vendor_resolution
failed requiredarray of duplicates similar_documents line_item_expansion line_item_categorization line_item_custom_categorization xero_line_coding address_parsing fraud rules vendor_resolution
extraction requiredobject or null
Fields
fields requiredobject

What was read, as the extraction contract types it. fieldConfidence holds per-field confidence, 0..1.

Fields
documentTypeDocumentType
merchantNamestring,null
merchantAddressstring,null
merchantPhonestring,null
merchantWebsitestring,null
merchantTaxIdstring,null
datestring or null
timestring,null
dueDatestring or null
currencyAED AFN ALL AMD ANG AOA ARS AUD AWG AZN BAM BBD BDT BGN BHD BIF BMD BND BOB BRL BSD BTN BWP BYN BZD CAD CDF CHF CLP CNY COP CRC CUP CVE CZK DJF DKK DOP DZD EGP ERN ETB EUR FJD FKP GBP GEL GHS GIP GMD GNF GTQ GYD HKD HNL HTG HUF IDR ILS INR IQD IRR ISK JMD JOD JPY KES KGS KHR KMF KPW KRW KWD KYD KZT LAK LBP LKR LRD LSL LYD MAD MDL MGA MKD MMK MNT MOP MRU MUR MVR MWK MXN MYR MZN NAD NGN NIO NOK NPR NZD OMR PAB PEN PGK PHP PKR PLN PYG QAR RON RSD RUB RWF SAR SBD SCR SDG SEK SGD SHP SLE SOS SRD SSP STN SVC SYP SZL THB TJS TMT TND TOP TRY TTD TWD TZS UAH UGX USD UYU UZS VES VND VUV WST XAF XCD XCG XOF XPF YER ZAR ZMW ZWG CUC HRK SLL ZWL XDR XSU or null
currencyGuessedboolean
totalMinorinteger or null
subtotalMinorinteger or null
taxMinorinteger or null
taxLinesarray of object
Fields
namestring,null
ratePctnumber,null
amountMinor requiredinteger
orderinteger or null
baseMinorinteger or null
codestring,null
totalInclusiveboolean,null
tipMinorinteger or null
discountMinorinteger or null
shippingMinorinteger or null
paymentTypePaymentType or null
cardBrandstring,null
cardLast4string,null
receiptNumberstring,null
invoiceNumberstring,null
poNumberstring,null
lineItemsarray of object
Fields
description requiredstring
skustring,null
quantitynumber,null
unitPriceMinorinteger or null
amountMinor requiredinteger
taxMinorinteger or null
idstring,null
orderinteger or null
textstring,null
typeLineItemType or null
fullDescriptionstring,null
normalizedDescriptionstring,null
sectionstring,null
referencestring,null
upcstring,null
hsnstring,null
lotstring,null
tagsarray of string or null
unitOfMeasurestring,null
discountMinorinteger or null
discountRatePctnumber,null
discountPriceMinorinteger or null
taxRatePctnumber,null
taxCodestring,null
subtotalMinorinteger or null
grossTotalMinorinteger or null
netTotalMinorinteger or null
datestring or null
startDatestring or null
endDatestring or null
categorystring,null
customCategoriesarray of string or null
customFieldsmap of any or null
countryOfOriginstring,null
manufacturerstring,null
weightstring,null
brandstring,null
hsaFsaEligibleboolean,null
productInfoobject or null
suggestedCategorystring,null
documentTitlestring,null
documentReferenceNumberstring,null
isDocumentboolean,null
isTransactionboolean,null
isMoneyInboolean,null
accountingEntryTypedebit credit or null
vendorobject or null
Fields
namestring,null
rawNamestring,null
typestring,null
logostring,null
logoNamestring,null
externalIdstring,null
categorystring,null
orderNumberstring,null
countryCodestring,null
addressstring,null
rawAddressstring,null
parsedAddressobject or null
phoneNumberstring,null
faxNumberstring,null
emailstring,null
webstring,null
latnumber,null
lngnumber,null
mapUrlstring,null
vatNumberstring,null
isValidatedVatNumberboolean,null
regNumberstring,null
abnNumberstring,null
isRegisteredForGstboolean,null
bankobject or null
vendorsarray of object or null
Fields
namestring,null
rawNamestring,null
typestring,null
logostring,null
logoNamestring,null
externalIdstring,null
categorystring,null
orderNumberstring,null
countryCodestring,null
addressstring,null
rawAddressstring,null
parsedAddressobject or null
phoneNumberstring,null
faxNumberstring,null
emailstring,null
webstring,null
latnumber,null
lngnumber,null
mapUrlstring,null
vatNumberstring,null
isValidatedVatNumberboolean,null
regNumberstring,null
abnNumberstring,null
isRegisteredForGstboolean,null
bankobject or null
bankBreakdownarray of object or null
Fields
accountNamestring,null
accountNumberstring,null
accountCurrencystring,null
bankNamestring,null
bankNamesarray of string or null
bankAddressstring,null
bankAddressesarray of string or null
bankNumberstring,null
bankNumbersarray of string or null
bankSwiftstring,null
ibanstring,null
billerCodestring,null
billToobject or null
Fields
namestring,null
addressstring,null
parsedAddressobject or null
vatNumberstring,null
regNumberstring,null
phoneNumberstring,null
emailstring,null
shipToobject or null
Fields
namestring,null
addressstring,null
parsedAddressobject or null
insuranceMinorinteger or null
cashbackMinorinteger or null
roundingMinorinteger or null
balanceMinorinteger or null
finalBalanceMinorinteger or null
previousBalanceMinorinteger or null
totalQuantitynumber,null
totalWeightstring,null
paymentobject or null
Fields
cardNumberstring,null
displayNamestring,null
termsstring,null
typePaymentMethod or null
orderDatestring or null
shipDatestring or null
deliveryDatestring or null
serviceStartDatestring or null
serviceEndDatestring or null
exchangeRatenumber,null
countryCodestring,null
deliveryNoteNumberstring,null
trackingNumberstring,null
trackingNumbersarray of string or null
incotermsstring,null
weightsarray of string or null
licensePlateNumberstring,null
vinNumberstring,null
guestCountinteger or null
serverNamestring,null
storeNumberstring,null
vendingPersonstring,null
vendingPersonNumberstring,null
customerAccountNumberstring,null
categorystring,null
defaultCategorystring,null
barcodesarray of object or null
Fields
data requiredstring
type requiredBarcodeType
page requiredinteger
boundingRegionarray of number or null
paymentLinksarray of object or null
Fields
url requiredstring
source requiredtext hyperlink qr_code barcode
folioobject or null
Fields
arrivalDatestring or null
departureDatestring or null
roomNumberstring,null
guestNamestring,null
nightsinteger or null
confirmationNumberstring,null
enrichedFieldsarray of string or null
checkobject or null
Fields
amountMinorinteger or null
amountTextstring,null
amountsAgreeboolean,null
bankNamestring,null
bankAddressstring,null
checkNumberstring,null
checkTypeCheckType or null
currencystring or null
datestring or null
memostring,null
payerNamestring,null
payerAddressstring,null
receiverNamestring,null
receiverAddressstring,null
isSignedboolean,null
endorsementobject or null
microbject or null
fractionalRoutingNumberstring,null
routingFromFractionalstring,null
voidTermsstring,null
statementobject or null
Fields
accountHolderNamestring,null
accountHolderAddressstring,null
accountTypestring,null
accountNumberstring,null
bankNamestring,null
bankAddressstring,null
bankWebsitestring,null
bankVatNumberstring,null
accountVatNumberstring,null
periodStartDatestring or null
periodEndDatestring or null
statementDatestring or null
statementNumberstring,null
currencystring or null
beginningBalanceMinorinteger or null
endingBalanceMinorinteger or null
minimumDueMinorinteger or null
dueDatestring or null
routingNumberstring,null
swiftstring,null
ibanstring,null
accountsarray of object
balancesAgreeboolean,null
taxFormobject or null
Fields
kind requiredTaxFormKind
w2object or null
w9object or null
w8BenEmap of string,boolean,null or null
itineraryobject or null
Fields
travelerNamestring,null
bookingReferencestring,null
originstring,null
destinationstring,null
departsOnstring or null
returnsOnstring or null
segmentsarray of object
fieldConfidencemap of number
fieldBoxesmap of object
confidence requirednumber,null
flags requiredarray of string
warnings requiredarray of object

Integrity findings. A caller without expenses.read_all sees the arithmetic and dates only.

Fields
code requiredIntegrityWarning
message requiredstring
pagenumber,null
fraud requiredDocumentFraud or null
sealed requiredarray of SealedValue

Bank and tax numbers read from this document, as masks. POST /v1/documents/{id}/reveal opens them.

updatedAt requiredstring
extractor requiredstring,null

What read it: rules, claude, a blueprint, business-card, or none.

ocrText requiredstring,null

Everything read off the page. Card, bank and tax numbers are masked.

pdfUrl requiredstring,null

The PDF as uploaded, signed for 15 minutes. Null for an image, and for a PDF that prints a number only a reveal hands out.

meta requiredDocumentMeta
reviewedAt requiredstring,null

A person checked what was read.

approvedAt requiredstring,null

A developer's own approved flag. An expense's approval is a different thing.

readingobject or null

Null when nothing has been read yet.

Fields
linesarray of object

With bounding_boxes: every line read, with where it is.

Fields
text requiredstring
confidence requirednumber
boxtuple

[x, y, width, height] in pixels of the page.

quadarray of number

The four corners as x, y pairs, for a line read at an angle.

page requirednumber
fieldDetailmap of any

With confidence_details: where each field was read from and how sure the read was.

detailedany

With detailed: the reading with each field wrapped as value, score, ocrScore, rotation, boundingBox, boundingRegion and enriched.

lineItemsWithScoresarray of map of any

With with_scores: the same lines, with a value and its confidence on every sub-field.

taxLinesWithScoresarray of map of any

With with_scores: the same tax lines, with a value and its confidence on every sub-field.

DocumentTagList

data requiredarray of DocumentTag
nextCursor requiredstring,null

Pass as cursor for the next page. Null on the last one.

ExpenseLine

id requiredstring
position requirednumber
description requiredstring
sku requiredstring,null
quantity requirednumber,null
unitPriceMinor requirednumber,null
amountMinor requirednumber
taxMinor requirednumber,null
categoryId requiredstring,null

ExpenseLinePage

data requiredarray of ExpenseLine
nextCursor requiredstring,null

Pass as cursor for the next page. Null on the last one.

ExpenseTaxLine

id requiredstring
position requirednumber
name requiredstring,null
code requiredstring,null
ratePct requirednumber,null
baseMinor requirednumber,null
amountMinor requirednumber

ExpenseTaxLinePage

data requiredarray of ExpenseTaxLine
nextCursor requiredstring,null

Pass as cursor for the next page. Null on the last one.

WorkspaceClosed

status requiredclosed
purgeAfter requiredstring

Records are erased after this moment.

storeSubscriptions requiredarray of object

Non-empty when a store goes on billing until someone cancels there.

Fields
workspaceId requiredstring
workspaceName requiredstring
store requiredAPP_STORE PLAY_STORE

ReferenceCurrencyPage

data requiredarray of object
Fields
code requiredstring
name requiredstring
minorDigits requirednumber

Decimal places in the minor unit: 2 for USD, 0 for JPY.

nextCursor requiredstring,null

Pass as cursor for the next page. Null on the last one.

ReferenceCountryPage

data requiredarray of object
Fields
code requiredstring
name requiredstring
currency requiredstring

The currency its receipts print.

nextCursor requiredstring,null

Pass as cursor for the next page. Null on the last one.

ReferenceLocalePage

data requiredarray of object
Fields
code requiredstring
name requiredstring
nextCursor requiredstring,null

Pass as cursor for the next page. Null on the last one.

ReferenceSystemCategoryPage

data requiredarray of object
Fields
key requiredstring

Stays when a workspace renames its copy.

name requiredstring
glCode requiredstring,null
taxLine requiredstring,null
deductiblePct requirednumber
nextCursor requiredstring,null

Pass as cursor for the next page. Null on the last one.

BulkReimbursed

reimbursed requiredarray of string
skipped requiredarray of object

Not in a state to mark: not approved yet, already paid, in a batch, or nothing on it is reimbursable. Left as it was.

Fields
id requiredstring
reference requiredstring,null
code requiredstring
message requiredstring
failed requiredarray of object

Not found, or not the caller's to mark.

Fields
id requiredstring
reference requiredstring,null
code requiredstring
message requiredstring

DocumentList

data requiredarray of Document
nextCursor requiredstring,null

Pass as cursor for the next page. Null on the last one.

offsetnumber

Where this page starts, when paging by offset or page.

nextOffsetnumber,null

Send this as offset for the next page. Null on the last one.

pagenumber

When paging by page number.

pageSizenumber
totalCountnumber

With track_total_results: every document the caller can reach.

filteredCountnumber

With track_total_results: what the filters leave of those.

ProvisionResult

dryRun requiredboolean
added requiredarray of object
Fields
email requiredstring
invited requiredboolean
updated requiredarray of object
Fields
email requiredstring
fields requiredarray of string
removed requiredarray of object
Fields
email requiredstring
skipped requiredarray of object
Fields
email requiredstring
reason requiredstring

AutomationApply

matched requirednumber
updated requirednumber

AutomationPreview

matched requirednumber

Expenses the conditions match, voided ones aside.

applicable requirednumber

Of those, the ones still unsubmitted, which is what applying the rule changes.

sample requiredarray of object
Fields
id requiredstring
reference requiredstring
merchantName requiredstring,null
date requiredstring
currency requiredstring
amountMinor requirednumber
status requiredstring
aiSkipped requiredboolean

A question for Claude was left out of this count: it is asked when a document is read, not here.

AutomationRule

id requiredstring
name requiredstring
enabled requiredboolean
position requirednumber
conditions requiredarray of object
Fields
field requiredmerchantName description amountMinor currency cardLast4 paymentType categoryId merchantType date notes invoiceNumber ocrText subtotalMinor taxMinor tipMinor confidence billable reimbursable documentType source tags flags lineItems.description lineItems.sku lineItems.amountMinor lineItems.quantity ai
op requiredequals contains contains_case starts_with gte lte not_equals not_contains gt lt is_empty is_not_empty matches_regex not_matches_regex between within_days_before_today within_days_after_date within_days_before_date ask
valuestring or number or boolean or object or object
Fields
from requiredstring
to requiredstring
fallbackno_match match
actions requiredobject
Fields
categoryIdstring
projectIdstring
clientIdstring
tagIdsarray of string
billableboolean
reimbursableboolean
paymentTypePaymentType
descriptionstring
merchantNamestring
taxBasisPointsinteger
vendorIdstring (uuid)
postToBookstrue
cleararray of categoryId tagIds taxMinor
reportIdstring
autoApprovetrue
rejectobject
Fields
reason requiredstring
flagForReviewobject
Fields
reason requiredstring
setStatusNEEDS_REVIEW READY
groupobject
Fields
report requiredstring
setCustomFieldsmap of string or number or boolean
extractarray of object or object
Fields
kind requiredregex
field requiredstring
pattern requiredstring
llmExtractarray of object
Fields
field requiredstring
prompt requiredstring
examplesarray of object
Fields
input requiredstring
output requiredstring
fallback requiredobject or object or object
Fields
action requirednone
matchCount requirednumber
createdAt requiredstring
updatedAt requiredstring

AutomationRuleOrder

data requiredarray of AutomationRule

AutomationRuleList

data requiredarray of AutomationRule
aiAvailable requiredboolean

Whether a question for Claude can be asked right now. When it cannot, each rule that needs one takes its fallback.

Billing

plan requiredPlanKey or null
status requiredTRIALING ACTIVE PAST_DUE EXPIRED NONE
source requiredSTRIPE APP_STORE PLAY_STORE TRIAL COMP or null
active requiredboolean
interval requiredBillingInterval or null
seats requirednumber

Seats the workspace holds.

seatsUsed requirednumber

Members now plus open invitations, which hold a seat each. Above seats after a downgrade.

seatsIncluded requirednumber,null
maxSeats requirednumber,null

Null is unlimited, or no plan.

trialEndsAt requiredstring,null
currentPeriodEnd requiredstring,null
cancelAtPeriodEnd requiredboolean
storeManaged requiredboolean

A live App Store or Google Play subscription owns this workspace, so the web cannot sell to it.

store requiredAPP_STORE PLAY_STORE or null
hasStripeSubscription requiredboolean
canOpenPortal requiredboolean
usage requiredarray of object

The plan's counters for this month.

Fields
metric requiredscans api_documents
used requirednumber
limit requirednumber
stripeConfigured requiredboolean
cashsdkConfigured requiredboolean

BulkMemberResult

succeeded requiredarray of string
failed requiredarray of object

Members the rules refused. They stay as they were, and the rest still change.

Fields
id requiredstring
message requiredstring

CardStatements

array of CardStatement

Integration

provider requiredIntegrationProvider
slug requiredstring
name requiredstring
group requiredACCOUNTING PAYROLL HR CAPTURE STORAGE CHAT AUTOMATION
availability requiredNOT_CONFIGURED AVAILABLE CONNECTED NEEDS_ATTENTION EXPORT_AVAILABLE NOT_CONNECTED
label requiredstring

The short status, as printed on the card.

description requiredstring
export requiredobject or null

The file that works today, with this provider or without it.

Fields
format requiredExportFormat
label requiredstring
payrollboolean
organisationName requiredstring,null
organisationChoices requiredarray of object
Fields
id requiredstring
name requiredstring
lastSyncedAt requiredstring,null
lastError requiredstring,null
links requiredarray of object
Fields
label requiredstring
href requiredstring
customerAppboolean
blockedBystring

IntegrationHealth

provider requiredIntegrationProvider
slug requiredstring
name requiredstring
status requiredCONNECTED NEEDS_ATTENTION DISCONNECTED
organisationName requiredstring,null
synced requirednumber
pending requirednumber
failed requirednumber
skipped requirednumber
voided requirednumber
waiting requirednumber

Approved expenses with no record yet.

lastSyncedAt requiredstring,null
tokenExpiresAt requiredstring,null
refreshTokenExpiresAt requiredstring,null
endsOnDateboolean
pausedUntil requiredstring,null
pulledAt requiredstring,null
postingPausedobject or null
Fields
since requiredstring
code requiredstring
message requiredstring

IntegrationList

array of Integration

Invitation

id requiredstring
email requiredstring
name requiredstring,null
role requiredMemberRole
status requiredInvitationStatus
invitedBy requiredobject or null
Fields
id requiredstring
name requiredstring,null
expiresAt requiredstring
acceptedAt requiredstring,null
revokedAt requiredstring,null
createdAt requiredstring

InvitationPage

data requiredarray of Invitation
nextCursor requiredstring,null

Pass as cursor for the next page. Null on the last one.

InvitationSent

id requiredstring
email requiredstring
name requiredstring,null
role requiredMemberRole
status requiredInvitationStatus
invitedBy requiredobject or null
Fields
id requiredstring
name requiredstring,null
expiresAt requiredstring
acceptedAt requiredstring,null
revokedAt requiredstring,null
createdAt requiredstring
acceptUrl requiredstring

The link the email carries. It works only for someone signed in with this address.

MailInAllowance

period requiredstring

YYYY-MM.

limit requirednumber

Documents a month on this plan.

used requirednumber

Held by this month's batches. It can pass the limit: paper that has arrived is scanned regardless.

remaining requirednumber
included requiredboolean

False when the plan does not include mail-in at all.

available requiredboolean

False until there is a mailroom to send paper to, whatever the plan says.

mailroomAddress requiredstring,null

Where own-packaging paper goes. Null until a mailroom has one.

envelopes requiredMailInEnvelopeAllowance

MailInSettings

address requiredobject or null
Fields
name requiredstring
companystring or null
line1 requiredstring
line2string or null
city requiredstring
region requiredstring
postalCode requiredstring
countrystring
updatedAt requiredstring,null

MailInBatch

id requiredstring
reference requiredstring

Printed on the packing slip and on the cover sheet.

workspaceReference requiredstring
status requiredMailInStatus
envelopes requirednumber
expectedDocuments requirednumber
documentCount requirednumber
afterScan requiredMailInDisposal
shippingAddress requiredobject
Fields
name requiredstring
companystring or null
line1 requiredstring
line2string or null
city requiredstring
region requiredstring
postalCode requiredstring
countrystring
folderId requiredstring,null
trackingNumber requiredstring,null
notes requiredstring,null
requestedById requiredstring
requestedByName requiredstring,null

Who this paper belongs to, as printed on the slip and the cover sheet.

requestedByEmail requiredstring,null
envelopeSentAt requiredstring,null
receivedAt requiredstring,null
completedAt requiredstring,null
createdAt requiredstring
updatedAt requiredstring

MailInBatchPage

data requiredarray of MailInBatch
nextCursor requiredstring,null

Pass as cursor for the next page. Null on the last one.

MailInRequested

id requiredstring
reference requiredstring

Printed on the packing slip and on the cover sheet.

workspaceReference requiredstring
status requiredMailInStatus
envelopes requirednumber
expectedDocuments requirednumber
documentCount requirednumber
afterScan requiredMailInDisposal
shippingAddress requiredobject
Fields
name requiredstring
companystring or null
line1 requiredstring
line2string or null
city requiredstring
region requiredstring
postalCode requiredstring
countrystring
folderId requiredstring,null
trackingNumber requiredstring,null
notes requiredstring,null
requestedById requiredstring
requestedByName requiredstring,null

Who this paper belongs to, as printed on the slip and the cover sheet.

requestedByEmail requiredstring,null
envelopeSentAt requiredstring,null
receivedAt requiredstring,null
completedAt requiredstring,null
createdAt requiredstring
updatedAt requiredstring
envelopeAllowance requiredMailInEnvelopeAllowance

MailInDocumentPage

data requiredarray of MailInDocument
nextCursor requiredstring,null

Pass as cursor for the next page. Null on the last one.

Member

id requiredstring

The membership: the id PATCH and DELETE /v1/members/:id take.

userId requiredstring
email requiredstring
name requiredstring,null
photoUrl requiredstring,null
pronouns requiredstring,null
personStatus requiredobject or null

The note they set beside their name, until it clears. status is their membership.

Fields
text requiredstring
clearsAt requiredstring,null
role requiredMemberRole
status requiredMemberStatus
developer requiredboolean

Whether this person can reach API keys and webhooks: always for an owner, and for an admin only with the grant. False unless the caller has members.manage.

managerId requiredstring,null

The manager's user id.

managerName requiredstring,null
title requiredstring,null
department requiredstring,null
employeeId requiredstring,null

Null unless the caller has members.manage.

approvalLimitMinor requirednumber,null

Null unless the caller has members.manage.

overLimitApproverId requiredstring,null

Null unless the caller has members.manage.

forwardToId requiredstring,null

Null unless the caller has members.manage.

workerStatus requiredstring,null

Null unless the caller has members.manage.

defaultTags requiredarray of string

Empty unless the caller has members.manage.

customField1 requiredstring,null
customField2 requiredstring,null
payrollCode requiredstring,null

Goes out with payroll files. Null unless the caller manages members.

legalEntity requiredstring,null

The company the person is employed by. Null unless the caller manages members.

tier requiredstring,null

Their travel tier. Null unless the caller manages members.

officeLocation requiredstring,null

The office they work from. Null unless the caller manages members.

costCenter requiredstring,null

Where their costs are charged. Null unless the caller manages members.

accountingCode requiredstring,null

Their code in the books. Null unless the caller manages members.

workerType requiredstring,null

Employee, contractor or the like. Null unless the caller manages members.

createdAt requiredstring

MemberPage

data requiredarray of Member
nextCursor requiredstring,null

Pass as cursor for the next page. Null on the last one.

PaymentAccount

id requiredstring
name requiredstring
kind requiredPaymentAccountKind
brand requiredstring,null
last4 requiredstring,null
isCompany requiredboolean
feedSource requiredFeedSource
owner requiredobject or null
Fields
id requiredstring
name requiredstring,null
email requiredstring
institutionName requiredstring,null
archived requiredboolean
transactionCount requirednumber
unmatchedCount requirednumber
lastPostedDate requiredstring,null
lastImportedAt requiredstring,null

When a line last arrived, from a file or the bank.

transactionStartDate requiredstring,null
statementCloseDay requirednumber,null
liability requiredCardLiability
reimbursable requiredboolean,null
allowDeletingTransactions requiredboolean
glAccount requiredstring,null
createExpenses requiredboolean
assigneeEmail requiredstring,null

Invited and not yet in: the card is theirs when they join.

balance requiredobject or null

What the bank last reported, when it reports these at all.

Fields
currentMinor requirednumber,null
limitMinor requirednumber,null
remainingMinor requirednumber,null
currency requiredstring
asOf requiredstring
createdAt requiredstring

PaymentAccountPage

data requiredarray of PaymentAccount
nextCursor requiredstring,null

Pass as cursor for the next page. Null on the last one.

Reconciliation

from requiredstring
to requiredstring
currency requiredstring

What every figure here is in. Ask for another with currency.

currencies requiredarray of object

Every currency posted in these dates, each with its own count and net.

Fields
currency requiredstring
count requirednumber
netMinor requirednumber
importedMinor requirednumber

What to hold against the card statement.

importedCount requirednumber
approvedMinor requirednumber

What to hold against the liability account.

approvedCount requirednumber
unapprovedMinor requirednumber

What is left to accrue at month end, by where it is stuck.

unapprovedCount requirednumber
pendingMinor requirednumber

Charges the bank has not posted, which are on no statement yet.

buckets requiredobject
Fields
unreported requiredobject
Fields
count requirednumber
amountMinor requirednumber
rows requiredarray of object
Fields
transactionId requiredstring
postedDate requiredstring
description requiredstring
amountMinor requirednumber
currency requiredstring
account requiredobject
expense requiredobject or null
ownerId requiredstring,null
draft requiredobject
Fields
count requirednumber
amountMinor requirednumber
rows requiredarray of object
Fields
transactionId requiredstring
postedDate requiredstring
description requiredstring
amountMinor requirednumber
currency requiredstring
account requiredobject
expense requiredobject or null
ownerId requiredstring,null
outstanding requiredobject
Fields
count requirednumber
amountMinor requirednumber
rows requiredarray of object
Fields
transactionId requiredstring
postedDate requiredstring
description requiredstring
amountMinor requirednumber
currency requiredstring
account requiredobject
expense requiredobject or null
ownerId requiredstring,null
deleted requiredobject
Fields
count requirednumber
amountMinor requirednumber
rows requiredarray of object
Fields
transactionId requiredstring
postedDate requiredstring
description requiredstring
amountMinor requirednumber
currency requiredstring
account requiredobject
expense requiredobject or null
ownerId requiredstring,null
noExpense requiredobject
Fields
count requirednumber
amountMinor requirednumber
rows requiredarray of object
Fields
transactionId requiredstring
postedDate requiredstring
description requiredstring
amountMinor requirednumber
currency requiredstring
account requiredobject
expense requiredobject or null
ownerId requiredstring,null
ignored requiredobject
Fields
count requirednumber
amountMinor requirednumber
rows requiredarray of object
Fields
transactionId requiredstring
postedDate requiredstring
description requiredstring
amountMinor requirednumber
currency requiredstring
account requiredobject
expense requiredobject or null
ownerId requiredstring,null
cards requiredarray of object
Fields
account requiredobject
Fields
id requiredstring
name requiredstring
last4 requiredstring,null
count requirednumber
importedMinor requirednumber
unapprovedMinor requirednumber
duplicates requiredarray of object
Fields
postedDate requiredstring
amountMinor requirednumber
description requiredstring
count requirednumber

ReportField

id requiredstring
name requiredstring
type requiredReportFieldType
options requiredarray of string
formula requiredstring,null
required requiredboolean
enabled requiredboolean
position requirednumber
disabledOptionsarray of string

List values turned off: kept on reports that hold them, and not offered for new ones.

importedboolean

Came from the connected books, so it cannot be deleted and its values only turn on and off.

ReportFieldList

data requiredarray of ReportField

ReportFieldsOff

deleted requirednumber

Fields removed. Lists take work to build, so they are kept.

disabled requirednumber

Lists turned off and kept.

SeatUsage

active requirednumber
invited requirednumber

Open invitations hold a seat until they are accepted, revoked or expire.

included requirednumber,null
paid requirednumber,null

Seats the workspace holds, which is what stops an invitation. Null with no plan.

max requirednumber,null

The most seats this plan can hold. Null is unlimited.

full requiredobject or null

Set once every seat is taken or invited, with what to do about it.

Fields
metric requiredseats
limit requirednumber
used requirednumber
addSeats requiredobject or null
Fields
seats requirednumber
added requirednumber
priceMinor requirednumber
interval requiredBillingInterval
askName requiredstring,null
appMessage requiredstring

The refusal with no price and no way to buy in it, which an app in a store can show as written.

message requiredstring

SyncRecordPage

data requiredarray of SyncRecord
nextCursor requiredstring,null

Pass as cursor for the next page. Null on the last one.

Transaction

id requiredstring
paymentAccount requiredobject
Fields
id requiredstring
name requiredstring
last4 requiredstring,null
postedDate requiredstring
amountMinor requirednumber

Positive is money spent. Negative is a refund or a payment to the card.

currency requiredstring
description requiredstring
merchantName requiredstring,null
state requiredTransactionState
matchScore requirednumber,null
missingReceipt requiredboolean

Older than three days with no expense: a receipt is owed.

expense requiredobject or null
Fields
id requiredstring
reference requiredstring
merchantName requiredstring,null
date requiredstring
amountMinor requirednumber
currency requiredstring
status requiredstring
suggestions requiredarray of object
Fields
expense requiredobject
Fields
id requiredstring
reference requiredstring
merchantName requiredstring,null
date requiredstring
amountMinor requirednumber
currency requiredstring
status requiredstring
score requirednumber
amountGapMinor requirednumber
dayGap requirednumber

TransactionPage

data requiredarray of Transaction
nextCursor requiredstring,null

Pass as cursor for the next page. Null on the last one.

TransactionSummary

currency requiredstring

What every figure here is in: the one asked for with currency, or the workspace currency when it has lines, or the commonest.

currencies requiredarray of object

Every currency these lines are in, each with its own count and net.

Fields
currency requiredstring
count requirednumber
netMinor requirednumber
count requirednumber
spentMinor requirednumber
creditedMinor requirednumber
missingReceipts requirednumber
byState requiredarray of object
Fields
state requiredTransactionState
count requirednumber
amountMinor requirednumber

Workspace

id requiredstring
name requiredstring
kind requiredPERSONAL TEAM
baseCurrency requiredstring
role requiredMemberRole
country requiredstring
timezone requiredstring
fiscalYearStartMonth requirednumber
distanceUnit requiredstring
claimedDomain requiredstring,null
requireMfa requiredboolean
retentionDays requirednumber,null

Documents are deleted this many days after they are read. Null keeps them until someone deletes them.

callLogRetentionDays requirednumber,null

Days the API call log is kept. Null is the default of 365.

preferences requiredobject
Fields
locale requiredstring,null

How this workspace's findings write money. Null is the person's own.

showDefaultCategories requiredboolean

False takes the built-in categories out of everyone's list but a manager's, and out of what reading a document suggests.

shredDocuments requiredboolean

Paper from a mail-in batch is shredded after scanning, unless the batch says otherwise.

reimbursableTracking requiredboolean

False takes reimbursing out of the workspace: nothing new is flagged.

calculateMissingTax requiredboolean

Works out a missing tax on a captured document at vatBasisPoints, and says so on the expense.

dateFormat requiredDateFormat

How dates read across the app. The API always sends YYYY-MM-DD.

vatBasisPoints requirednumber,null

VAT within the total on a typed expense that gives no tax, in hundredths of a percent. 2000 is 20%.

permissions requiredarray of expenses.read_all expenses.write_all reports.read_all reports.approve reimbursements.manage members.manage settings.manage policies.manage billing.manage integrations.manage exports.all developer.manage audit.read documents.reveal cards.manage security.manage workspace.delete

What this caller may do here, from the role of the person the key belongs to.

entitlement requiredobject
Fields
plan requiredPlanKey or null
lastPlanPlanKey or null

With no plan in force, the one the workspace held last. What it could read stays readable.

status requiredTRIALING ACTIVE PAST_DUE EXPIRED NONE
source requiredSTRIPE APP_STORE PLAY_STORE TRIAL COMP or null
active requiredboolean

Capture and edits stop when this is false. Reading and exporting never do.

trialEndsAt requiredstring,null
currentPeriodEnd requiredstring,null
cancelAtPeriodEnd requiredboolean
interval requiredBillingInterval or null
seats requirednumber
features requiredarray of receipt_capture email_capture mileage expense_reports tax_reports standard_exports multi_currency business_cards mail_in automation_rules card_feeds accounting_sync approvals policies reimbursements custom_fields per_diem human_verification developer_api multi_level_approvals sso audit_log scheduled_reports
limits requiredobject or null
Fields
scansPerMonth requirednumber
seatsIncluded requirednumber
maxSeats requirednumber,null
apiDocumentsPerMonth requirednumber
mailInDocumentsPerMonth requirednumber
services requiredobject
Fields
mailIn requiredboolean
humanVerification requiredboolean
usage requiredmap of number
memberCount requirednumber
sandboxOfId requiredstring,null

The workspace this is the sandbox of. Null for a live workspace.

readingModel requiredReadingModel

What reads this workspace's documents.

actingForobject or null
Fields
userId requiredstring
name requiredstring
access requiredDelegationAccess

WorkspaceCounts

needsReview requirednumber
processing requirednumber
pendingApprovals requirednumber
holdsApprovals requiredboolean
unmatchedTransactions requirednumber
unreadNotifications requirednumber

WorkspaceCreated

id requiredstring
name requiredstring
kind requiredPERSONAL TEAM
baseCurrency requiredstring
role requiredMemberRole
entitlement requiredobject
Fields
plan requiredPlanKey or null

What the workspace holds now: what the trial of its owner has left, or nothing. Naming a plan does not buy it.

status requiredTRIALING ACTIVE PAST_DUE EXPIRED NONE
active requiredboolean
trialEndsAt requiredstring,null
checkout requiredobject or null

Set when a plan was named.

Fields
plan requiredPlanKey
interval requiredBillingInterval
url requiredstring

The billing page, for a person to pay for the plan. A plan cannot be bought by an API call.

WorkspacePage

data requiredarray of WorkspaceSummary
nextCursor requiredstring,null

Pass as cursor for the next page. Null on the last one.

ClientWorkspaces

array of ClientWorkspace

Home

timeSensitive requiredarray of object

What can stop this person's work today. Each shows only while it applies.

Fields
kind requiredBLOCKED_REPORT LOCKED_BANK NEEDS_DEPOSIT_ACCOUNT UNUSUAL_CARD_CHARGE INTEGRITY_REVIEW TRIAL_ENDING
title requiredstring
detail requiredstring
action requiredstring

What the button does.

href requiredstring
todos requiredarray of object

What a report cannot move forward without, by what this person can do.

Fields
kind requiredREVIEW_AND_SUBMIT APPROVE PAY EXPORT FIX
label requiredstring
count requirednumber
href requiredstring
upcomingTravel requiredarray of object
Fields
id requiredstring
name requiredstring
origin requiredstring,null
destination requiredstring,null
departsOn requiredstring
returnsOn requiredstring,null
insights requiredarray of object

Plain sentences worked out from this person's own expenses.

Fields
text requiredstring
href requiredstring
announcements requiredarray of object
Fields
id requiredstring
title requiredstring
body requiredstring
linkUrl requiredstring,null
publishedAt requiredstring
spend requiredobject or null

Null for someone with no spending to see.

Fields
currency requiredstring
awaitingApprovalMinor requirednumber
repaidLast30DaysMinor requirednumber
cards requiredarray of object
Fields
id requiredstring
name requiredstring
last4 requiredstring,null
transactions requiredarray of object
Fields
id requiredstring
date requiredstring
merchant requiredstring
amountMinor requirednumber
currency requiredstring

ExpensesMoved

moved requirednumber
skipped requiredarray of SkippedExpense
reportId requiredstring,null

The report they went to. Null when they came off every report.

ExpensesDuplicated

created requiredarray of object
Fields
id requiredstring
from requiredstring

The expense it was copied from.

skipped requiredarray of SkippedExpense

ExpensesHeld

changed requirednumber
skipped requiredarray of SkippedExpense

ProfilePhoto

photoUrl requiredstring

A signed link that lasts 15 minutes.

PrivateDetailsCodeSent

status requiredSENT
email requiredstring

Where the code went: the address this person signs in with.

PrivateDetailsUnlocked

details requiredPrivateDetails
unlockToken requiredstring

Saves without a new code until unlockedUntil.

unlockedUntil requiredstring

PrivateDetailsSaved

details requiredPrivateDetails

PeopleSync

systems requiredarray of HrSystem
connection requiredobject or null
Fields
system requiredstring
name requiredstring
status requiredCONNECTED NEEDS_ATTENTION DISCONNECTED
approvalMode requiredHrApprovalMode
setupCompletedAt requiredstring,null

Nothing imports until setup is complete.

lastError requiredstring,null
lastRunAt requiredstring,null
manualLeft requirednumber,null

Syncs on demand left in the next 24 hours. Null for a file connection, which has nothing to read.

dropUrl requiredstring,null

The address a file or a webhook goes to.

runs requiredarray of PeopleSyncRun

HrConnected

systems requiredarray of HrSystem
connection requiredobject or null
Fields
system requiredstring
name requiredstring
status requiredCONNECTED NEEDS_ATTENTION DISCONNECTED
approvalMode requiredHrApprovalMode
setupCompletedAt requiredstring,null

Nothing imports until setup is complete.

lastError requiredstring,null
lastRunAt requiredstring,null
manualLeft requirednumber,null

Syncs on demand left in the next 24 hours. Null for a file connection, which has nothing to read.

dropUrl requiredstring,null

The address a file or a webhook goes to.

runs requiredarray of PeopleSyncRun
dropToken requiredstring,null

The token in the file drop and webhook addresses. It shows this once.

PeopleSyncRun

id requiredstring
trigger requiredstring

SETUP, SCHEDULED, MANUAL, FILE or WEBHOOK.

added requirednumber
updated requirednumber
removed requirednumber
skipped requirednumber
skips requiredarray of object
Fields
name requiredstring
reason requiredstring
error requiredstring,null
startedAt requiredstring
finishedAt requiredstring,null

InvoiceSettings

enabled requiredboolean
supplierName requiredstring,null
supplierAddress requiredstring,null
taxNumbers requiredmap of string

One number per kind of tax number, by its label: VAT Number, ABN Number and so on.

terms requiredstring,null

Invoice

id requiredstring
number requirednumber
reference requiredstring

INV- and the number.

status requiredInvoiceStatus
displayStatus requiredInvoiceDisplayStatus
title requiredstring,null
recipientName requiredstring,null
recipientEmail requiredstring,null
recipientPhone requiredstring,null
currency requiredstring
issueDate requiredstring
dueDate requiredstring,null
totalMinor requirednumber
paidMinor requirednumber
refundedMinor requirednumber
balanceMinor requirednumber

What is still owed: the total, less payments, plus anything refunded.

sentAt requiredstring,null
viewedAt requiredstring,null
paidAt requiredstring,null
createdAt requiredstring
shareWith requiredarray of string
terms requiredstring,null
supplierName requiredstring,null
supplierAddress requiredstring,null
supplierTaxLabel requiredstring,null
supplierTaxNumber requiredstring,null
subtotalMinor requirednumber
taxMinor requirednumber
lastReminderAt requiredstring,null
reminderCount requirednumber
logoUrl requiredstring,null
lines requiredarray of InvoiceLine
payments requiredarray of InvoicePayment
messages requiredarray of InvoiceMessage
link requiredstring,null

The recipient's link, once the invoice has gone out. Undoing the send stops it working.

InvoicePage

data requiredarray of InvoiceSummary
nextCursor requiredstring,null

Pass as cursor for the next page. Null on the last one.

BulkInvoiceResult

created requirednumber
sent requirednumber
skipped requirednumber

Rows of the file that were already imported.

errors requiredarray of object

One for each row that could not be read, in the file's own terms.

Fields
row requirednumber
message requiredstring

InvoicesToPay

array of InvoiceToPay

PublicInvoice

reference requiredstring
displayStatus requiredInvoiceDisplayStatus
title requiredstring,null
recipientName requiredstring,null
currency requiredstring
issueDate requiredstring
dueDate requiredstring,null
terms requiredstring,null
senderName requiredstring
supplierName requiredstring,null
supplierAddress requiredstring,null
supplierTaxLabel requiredstring,null
supplierTaxNumber requiredstring,null
subtotalMinor requirednumber
taxMinor requirednumber
totalMinor requirednumber
paidMinor requirednumber
refundedMinor requirednumber
balanceMinor requirednumber
logoUrl requiredstring,null
lines requiredarray of object
Fields
description requiredstring
quantity requirednumber
unitMinor requirednumber
amountMinor requirednumber
taxKind requiredInvoiceTaxKind or null
taxBasisPoints requirednumber,null

2000 is 20%.

taxMinor requirednumber
receiptUrl requiredstring,null

The receipt of a pulled-in expense: a signed link that lasts 15 minutes.

payments requiredarray of object
Fields
kind requiredPAYMENT REFUND
amountMinor requirednumber
paidOn requiredstring
reference requiredstring,null
messages requiredarray of object
Fields
fromRecipient requiredboolean
body requiredstring
createdAt requiredstring

MoneyFlow

currency requiredstring
months requiredarray of object

Oldest first, by the same reckoning as the totals.

Fields
month requiredstring

YYYY-MM.

label requiredstring
moneyInMinor requirednumber
moneyOutMinor requirednumber

ExpenseGroups

array of ExpenseGroup

BulkEditOptions

editable requirednumber

How many of the selection this person may edit here. The rest are left out.

skipped requirednumber
fields requiredmap of object

A field restricted on any selected expense is closed, with the reason.

tagLevels requiredarray of object
Fields
level requiredstring
dependent requiredboolean

Picking one clears the levels below it.

tags requiredarray of object
Fields
id requiredstring
name requiredstring
parentId requiredstring,null

BulkEditResult

updated requirednumber
skipped requirednumber

SplitRows

parentId requiredstring
totalMinor requirednumber

The whole they were split from, and what the parts may add up to.

currency requiredstring
mustEqualTotal requiredboolean

Exactly the whole for a card or a per diem. Any figure up to it for cash and distance.

amountOnly requiredboolean

Distance divides by amount only.

reimbursableFixed requiredboolean

The workspace's cash rule or a card settles this, so nobody chooses.

canEdit requiredboolean

Not once the report is approved, reimbursed or closed.

rows requiredarray of object
Fields
id requiredstring
reference requiredstring
amountMinor requirednumber
date requiredstring
description requiredstring,null
categoryId requiredstring,null
tagIds requiredarray of string
reimbursable requiredboolean

ExpenseHistory

data requiredarray of object
Fields
id requiredstring
at requiredstring
action requiredstring
who requiredstring,null

Null for a change the system made.

attendees requiredobject or null
Fields
added requiredarray of object
Fields
name requiredstring
emailstring
phonestring
removed requiredarray of object
Fields
name requiredstring
emailstring
phonestring
fields requiredarray of string

What changed.

RecentAttendees

data requiredarray of object

People this person has listed lately, newest first.

Fields
name requiredstring
emailstring
phonestring

PublicReceipt

filename requiredstring,null
pages requiredarray of string

A signed link to each page. Each one lasts 15 minutes.

SpreadsheetText

csv requiredstring

The first sheet as CSV, ready for an import route.

TagLevels

levels requiredarray of object
Fields
name requiredstring
options requiredarray of object
Fields
id requiredstring
name requiredstring
glCode requiredstring,null

The code on the way this tag was reached: a dependent list keeps one per path.

total requirednumber

How many there are in all. Search for what the first few hundred leave out.

waitingFor requiredstring,null

A level above this one has to be chosen first.

selected requiredobject or null
Fields
id requiredstring
name requiredstring
glCode requiredstring,null

The code on the way this tag was reached: a dependent list keeps one per path.

dependent requiredboolean

TagSuggestionList

data requiredarray of object
Fields
id requiredstring
name requiredstring
groupName requiredstring,null
glCode requiredstring,null
count requirednumber

How many similar expenses carried it.

DocumentShareList

data requiredarray of DocumentShare

DocumentShare

id requiredstring
owner requiredReportPerson

Whose documents these are.

sharedWith requiredReportPerson
status requiredACTIVE REQUESTED REVOKED
mine requiredboolean

True when the documents are the person asking's.

createdAt requiredstring

DocumentSettings

s3 requiredS3Access
duplicates requiredobject
Fields
similarityPercent requirednumber,null

How alike two images must be. Null keeps D-22's 10 bits.

amountToleranceMinor requirednumber
dayWindow requirednumber
rule requiredobject or null

Replaces the same-vendor, same-amount, near-date check. Null keeps it.

Fields
operator requiredAND OR

AND needs every chosen field to match. OR needs any one of them.

fields requiredarray of DuplicateField
lineItems requiredobject
Fields
enabled requiredboolean

Off keeps the totals and leaves the lines out.

limit requirednumber,null

The most lines kept from one document. Null keeps them all.

maxPages requirednumber

Pages read from one file.

cropDocument requiredboolean

Finds the document in a photo or a scanned PDF, cuts it out and squares it, and makes several documents in one picture pages of this one. crop_document on a submission wins over this.

emailAttachments requiredcombine separate

What several attachments on one email become: one document each, or one PDF. Expensify files each attachment as its own receipt and Veryfi combines them, so this is the workspace's choice. #bulkupload in a subject always separates them.

fxRateDate requiredsubmission receipt

Which day's rate converts a foreign receipt.

asyncEnrichments requiredarray of AsyncEnrichment

Steps left to run after the first answer.

customFields requiredarray of object
Fields
name requiredstring
pattern requiredstring

Run on each line of text, at most CUSTOM_FIELD_PATTERN_LENGTH characters. The first group is the value, if there is one.

level requireddocument line

InvitationAccepted

workspaceId requiredstring
workspaceName requiredstring
role requiredMemberRole

DelegationPage

data requiredarray of Delegation
nextCursor requiredstring,null

Pass as cursor for the next page. Null on the last one.

DelegationCreated

Delegation or object or object

status requiredACTIVE
delegation requiredDelegation

Delegation

id requiredstring
permanent requiredboolean

Between an agent and its owner. It lasts as long as the agent, and nobody can change or remove it.

delegator requiredobject
Fields
id requiredstring
name requiredstring,null
email requiredstring
delegate requiredobject
Fields
id requiredstring
name requiredstring,null
email requiredstring
access requiredDelegationAccess
startsAt requiredstring
endsAt requiredstring,null

Null runs until someone removes it.

active requiredboolean

Inside its window right now.

CopySettingsResult

sections requiredarray of CopySection

OffboardingList

data requiredarray of OffboardingItem

AuditEventPage

data requiredarray of AuditEvent
nextCursor requiredstring,null

Pass as cursor for the next page. Null on the last one.

DomainList

data requiredarray of Domain

Domain

id requiredstring
name requiredstring
status requiredPENDING VERIFIED
workspaceId requiredstring
workspaceName requiredstring
joinPolicy requiredDomainJoinPolicy
verification requiredobject

Where the TXT record goes and what it says.

Fields
host requiredstring
value requiredstring
verifiedAt requiredstring,null
lastCheckedAt requiredstring,null
lastCheckError requiredstring,null
adminCount requirednumber
pendingAccessRequests requirednumber
createdAt requiredstring

DomainAccessRequested

status requiredPENDING

DomainAccessRequestList

data requiredarray of DomainAccessRequest

DomainAdminList

data requiredarray of DomainAdmin

DomainMemberList

data requiredarray of DomainMember

DomainReport

domain requiredstring
currency requiredstring
rows requiredarray of DomainReportRow

DomainInviteResult

object or object

status requiredINVITED
email requiredstring
acceptUrl requiredstring

DomainGroupList

data requiredarray of DomainGroup

DomainGroup

id requiredstring
name requiredstring
isDefault requiredboolean
strictRules requiredboolean
restrictLogin requiredboolean
restrictWorkspaces requiredboolean
preferredWorkspaceId requiredstring,null
cardWorkspaceId requiredstring,null
memberCount requirednumber

DomainMigration

id requiredstring,null
fromDomain requiredstring
toDomain requiredstring
status requiredPENDING FAILED DONE RUNNING PLANNED
createdAt requiredstring,null
finishedAt requiredstring,null
moves requiredarray of object

Addresses that swap, old to new.

Fields
userId requiredstring
from requiredstring
to requiredstring
skipped requiredarray of object

Who stays, and why.

Fields
email requiredstring
reason requiredstring
blockers requiredarray of string

What stops the whole move.

JoinOptions

email requiredstring

The address that proved these.

workspaces requiredarray of JoinableWorkspace

JoinEmailSent

status requiredSENT

JoinResult

status requiredREQUESTED JOINED
workspaceId requiredstring
workspaceName requiredstring

JoinLinkPreview

workspaceName requiredstring
role requiredMemberRole
requiresApproval requiredboolean

JoinRequestList

data requiredarray of JoinRequest

ScimTokenList

data requiredarray of ScimToken

ScimTokenCreated

token requiredstring
baseUrl requiredstring

What to paste into the identity provider.

id requiredstring
name requiredstring
prefix requiredstring
lastUsedAt requiredstring,null
expiresAt requiredstring,null
createdAt requiredstring

EmailSignInSent

status requiredstring

EmailSignInRedeemed

email requiredstring
link requiredstring,null

For signInWithEmailLink. A verified second address gets customToken instead.

customToken requiredstring,null

Unsubscribe

email requiredstring
type requiredstring,null

Null stopped every optional email.

label requiredstring,null

RecoveryCodes

remaining requirednumber
generatedAt requiredstring,null

RecoveryCodesIssued

codes requiredarray of string
remaining requirednumber
generatedAt requiredstring,null

SessionList

data requiredarray of Session

MergeStarted

status requiredstring

AccountMerged

mergedEmail requiredstring
workspaces requirednumber

Workspaces the other account was in that this one now holds.

OnboardingResult

workspaceId requiredstring,null

ReportArchiveList

data requiredarray of ReportArchive

ReportArchiveDetail

reports requiredarray of ArchivedReport
id requiredstring
workspaceName requiredstring
reportCount requirednumber
closedAt requiredstring

SsoConnectionOrNone

SsoConnection or null

SsoConnection

id requiredstring
protocol requiredSsoProtocol
providerId requiredstring
displayName requiredstring
idpEntityId requiredstring,null
ssoUrl requiredstring,null
certificateExpiresAt requiredstring,null
clientId requiredstring,null
issuer requiredstring,null
enforced requiredboolean
ownerExempt requiredboolean
lastSignInAt requiredstring,null
updatedAt requiredstring

SsoMetadata

filename requiredstring
xml requiredstring

WorkspaceSecurity

ssoAvailable requiredboolean

This plan includes single sign-on.

verifiedDomains requiredarray of string
connection requiredSsoConnection or null
serviceProvider requiredServiceProvider
requireMfa requiredboolean
signedInThroughProvider requiredboolean

This request came through the workspace's provider, so requiring it cannot lock this person out.

hasSecondFactor requiredboolean

This request carries a second factor.

SignInDiscovery

provider requiredSignInProvider or null

Set when this address's domain has an identity provider.

required requiredboolean

Password, Google and Apple will be refused for this address.

StatusPage

measuredSince requiredstring,null

The first measurement there is. Null means nothing has been measured yet.

generatedAt requiredstring
components requiredarray of StatusComponent
incidents requiredarray of StatusIncident

Me

id requiredstring
email requiredstring
emailVerified requiredboolean
displayName requiredstring,null
photoUrl requiredstring,null
phone requiredstring,null
language requiredUiLanguage

The language the interface is written in. locale only sets how figures print.

highContrast requiredboolean
pronouns requiredstring,null
personStatus requiredobject or null

A note beside their name, until it clears.

Fields
text requiredstring
clearsAt requiredstring,null
hasPrivateDetails requiredboolean

Whether anything is kept under the emailed code. The details never come back from here.

locale requiredstring
timezone requiredstring
distanceUnit requiredstring
onboarded requiredboolean
onboardingIntent requiredstring,null

What they said they came for on first run.

emailBounced requiredboolean

Their address bounced, so mail to it stopped until they fix it.

phoneVerified requiredboolean

Firebase proved the number with a code.

hasEmail requiredboolean

False for someone who came in with a phone number and has not added an address yet. email then holds an address nothing can be sent to.

locked requiredboolean

Locked after a report of suspicious activity. Only support can undo it.

canChangeEmail requiredboolean

A domain group can keep the sign-in address where the company put it.

canManageWorkspaces requiredboolean

A domain group can stop someone creating or closing workspaces.

defaultWorkspaceId requiredstring,null
forwardingAddress requiredstring
workspaces requiredarray of WorkspaceSummary

ForwardingAlias

alias requiredstring
address requiredstring

CategoryAccess

userIds requiredarray of string

MileageYear

distance requirednumber

RouteService

configured requiredboolean
provider requiredstring,null

SavedPlaceList

array of SavedPlace

SavedPlace

id requiredstring
name requiredstring
address requiredstring

RouteEstimate

provider requiredstring
attribution requiredstring

Has to be shown beside the figures.

unit requiredstring
routes requiredarray of object

The usual route first, then any alternatives. Alternatives only exist with no stops along the way.

Fields
distance requirednumber
durationSeconds requirednumber
description requiredstring,null
token requiredstring

Sent back as routeToken with this distance and these addresses, it says a map measured the trip. Good for a day.

Commute

home requiredstring,null

Your home address, as you type it on a trip.

distance requirednumber,null

One way.

unit requiredmi km

DistanceSettings

requireGpsOrMap requiredboolean

Typed distances and odometer readings stop for new trips.

requireLocked requiredboolean

Excluding commutes holds the requirement on.

excludeCommutes requiredNONE ONE_WAY BOTH_WAYS
trackTax requiredboolean
workspaceTaxBasisPoints requirednumber,null

Track tax needs one. Null is no taxes here.

government requiredobject
Fields
currency requiredstring
available requiredboolean
needsCountry requiredboolean
enabled requiredboolean
country requiredstring,null
authority requiredstring,null
unchecked requiredboolean

The figures behind this choice have not been checked against the source.

reviewed requiredstring,null

MovedExpense

expenseId requiredstring
reference requiredstring
workspaceId requiredstring
workspaceName requiredstring
amountMinor requirednumber
currency requiredstring
rateMinor requirednumber,null

A trip's new rate, at a hundredth of a cent per unit.

rateName requiredstring,null
distance requirednumber,null
unit requiredstring,null

PerDiemSettings

defaultCategoryId requiredstring,null
defaultCategoryName requiredstring,null

BulkPerDiemResult

updated requirednumber
deleted requirednumber

ApprovalQueue

counts requiredApprovalCounts
data requiredarray of ApprovalQueueItem
nextCursor requiredstring,null

ReportSettings

autoReport requiredobject
Fields
schedule requiredAutoReportSchedule
weekdaynumber

Weekly: 0 is Sunday.

dayOfMonthnumber

Monthly, and the first date of twice a month: a day past the month's end means its last day, so 31 is always the last.

secondDayOfMonthnumber

The second date of twice a month.

titleTemplatestring,null
lastRun requiredstring,null
randomAuditPercent requirednumber
preventSelfApproval requiredboolean

On, nobody approves their own report while someone else can.

preventPayingNonReimbursable requiredboolean

On, a report with nothing reimbursable on it cannot be marked as paid.

autoApproveCompliant requiredboolean

Off, no amount and no rule approves a report by itself.

strictPolicies requiredboolean
rulesEnabled requiredboolean
prohibitedItems requiredarray of ProhibitedItem
titleFormula requiredstring,null
titleLocked requiredboolean
policyText requiredstring,null
policyDocument requiredPolicyDocument or null
cashExpenses requiredREIMBURSABLE NON_REIMBURSABLE ALWAYS_REIMBURSABLE ALWAYS_NON_REIMBURSABLE or null
externalCheckUrl requiredstring,null
showGlCodes requiredboolean
publicReceipts requiredboolean

Anyone with a receipt's public link can open it, with no sign-in. Off unless someone turns it on.

fringeBenefits requiredboolean

A category with payroll code TAG needs both attendee counts before it can be submitted.

tagLevels requiredarray of string

Tag levels from the top down, as the last multi-level import named them.

dependentTags requiredboolean

Lower levels filter to the combinations a dependent import listed.

attendeeTracking requiredboolean

On, an expense can list who attended.

billableExpenses requiredDISABLED DEFAULT_BILLABLE DEFAULT_NON_BILLABLE

Whether expenses can be billable, and what a new one starts as.

Policy

text requiredstring,null
document requiredobject or null

A short-lived link to the PDF.

Fields
filename requiredstring
url requiredstring
uploadedAt requiredstring

ApprovalWorkflowList

data requiredarray of ApprovalWorkflow

ApprovalWorkflow

id requiredstring
name requiredstring
isDefault requiredboolean
memberIds requiredarray of string

People whose reports take this workflow instead of the default.

steps requiredarray of object
Fields
level requirednumber
kind requiredApprovalStepKind
userIdstring
inviteEmailstring

Someone who is not a member yet. They are invited, and approve once they join.

roleMemberRole
overMinornumber

The step applies only to reports over this amount, in the workspace currency.

autoApproveUnderMinor requirednumber,null
createdAt requiredstring
updatedAt requiredstring

PolicyRuleList

data requiredarray of PolicyRule

PolicyRule

id requiredstring
type requiredPolicyRuleType
severity requiredPolicySeverity
enabled requiredboolean
categoryId requiredstring,null
amountMinor requirednumber,null
days requirednumber,null
note requiredstring,null
createdAt requiredstring
updatedAt requiredstring

SavedSearchList

array of SavedSearch

SearchShortcuts

shortcuts requiredarray of object

What your role in a workspace shared with others gives you, or what is waiting on you anywhere. Everyone has Drafts.

Fields
key requiredSearchShortcutKey
label requiredstring
count requirednumber
reports requiredarray of SearchShortcutReport

Newest first, at most 50.

AccountingShortcutList

shortcuts requiredarray of object

The shortcuts your role gives you, in this workspace.

Fields
key requiredAccountingShortcutKey
label requiredstring
description requiredstring

AccountingShortcut

shortcut requiredAccountingShortcutKey
currency requiredstring
rows requiredarray of AccountingRow
groups requiredarray of object or null

Set on card statements, and on accruals asked to group.

Fields
key requiredstring
label requiredstring
from requiredstring
to requiredstring
count requirednumber
totalMinor requirednumber
ageDays requirednumber

How long the oldest row in it has been waiting, in days.

accountId requiredstring,null
footer requiredobject
Fields
count requirednumber
totalMinor requirednumber

In the base currency, of every row the filters select, not only the page. Credits are negative.

nextCursor requiredstring,null
accounts requiredarray of object

The feeds the Feed filter offers, on the shortcuts that have one.

Fields
id requiredstring
name requiredstring

BankReconciliationExpenses

array of BankReconciliationExpense

CatalogReportList

reports requiredarray of object
Fields
key requiredCatalogReportKey
title requiredstring
description requiredstring
group requiredstring

CatalogReport

key requiredCatalogReportKey
title requiredstring
description requiredstring
from requiredstring
to requiredstring
currency requiredstring

Every money column here is in this currency, the workspace's base.

columns requiredarray of object
Fields
key requiredstring
label requiredstring
kind requiredtext money number date
rows requiredarray of object
Fields
id requiredstring
expenseId requiredstring,null
cells requiredmap of string,number,null
totalMinor requirednumber,null

What the rows come to. Null for a report that is not about money.

truncated requiredboolean

There were more rows than one report reads.

SavedSearch

columnsarray of ExpenseColumn or null

Which columns the expense list shows for this search, in order. Without it, the reader's own.

sortExpenseSort or null

How the expense list sorts for this search. Without it, newest first.

id requiredstring
name requiredstring
filters requiredobject
Fields
scopemine all
statusExpenseStatus or array of ExpenseStatus
kindExpenseKind
ownerIdstring
categoryIdstring
merchantIdstring
projectIdstring
clientIdstring
tagIdstring
departmentstring
reportIdstring
externalIdstring

A developer's own reference, exactly as sent.

minMinornumber
maxMinornumber
qstring
fromstring
tostring
unreportedboolean
needsReviewboolean
billableboolean
reimbursableboolean
idsarray of string

Export selected: only these expenses.

yearnumber

The fiscal year of a tax export.

documentIdsarray of string

Export selected, for a documents export: only these documents.

documentTypesarray of DocumentType

A documents export of these types only.

policyIdsarray of string

Workspace ids: the closest thing here to Expensify's policy list. A request works inside one workspace and a key is bound to one, so this can only ever confirm that workspace. The API answers 404 for any other id.

reportStateReportStatus or array of ReportStatus

Reports in this state, or in any of these.

reportIdsarray of string

Only these reports.

startDatestring

Reports submitted on or after this day, or created then if they were never submitted. Needs endDate.

endDatestring

Reports submitted on or before this day, or created then if they were never submitted. At most a year after startDate.

approvedAfterstring

Reports approved after this day. The day itself is left out, so the last run's date can be sent as it is.

exportedboolean

True takes reports already exported, false takes those not exported yet.

paymentTypePaymentType

Only expenses paid this way.

moneyFlowIN OUT

Money out, or money in.

dateFieldExpenseDateField

What from and to look at. Left out, the date on the receipt.

categoryIdsarray of string

These categories, however many.

shared requiredboolean
ownerId requiredstring
createdAt requiredstring

ExportTemplateList

array of ExportTemplate

ExportTemplate

id requiredstring
name requiredstring
columns requiredarray of object
Fields
key requiredstring
labelstring

The heading in the file, when it should differ from the column's own name.

formulastring

Set when key is "formula". Parsed here, so a template that saves is a template that runs.

shared requiredboolean
ownerId requiredstring
createdAt requiredstring

ScheduledReportPage

data requiredarray of ScheduledReport
nextCursor requiredstring,null

Pass as cursor for the next page. Null on the last one.

ScheduledReport

id requiredstring
name requiredstring
kind requiredScheduledReportKind
format requiredExportFormat
filters requiredobject
Fields
scopemine all
statusExpenseStatus or array of ExpenseStatus
kindExpenseKind
ownerIdstring
categoryIdstring
merchantIdstring
projectIdstring
clientIdstring
tagIdstring
departmentstring
reportIdstring
externalIdstring

A developer's own reference, exactly as sent.

minMinornumber
maxMinornumber
qstring
fromstring
tostring
unreportedboolean
needsReviewboolean
billableboolean
reimbursableboolean
idsarray of string

Export selected: only these expenses.

yearnumber

The fiscal year of a tax export.

documentIdsarray of string

Export selected, for a documents export: only these documents.

documentTypesarray of DocumentType

A documents export of these types only.

policyIdsarray of string

Workspace ids: the closest thing here to Expensify's policy list. A request works inside one workspace and a key is bound to one, so this can only ever confirm that workspace. The API answers 404 for any other id.

reportStateReportStatus or array of ReportStatus

Reports in this state, or in any of these.

reportIdsarray of string

Only these reports.

startDatestring

Reports submitted on or after this day, or created then if they were never submitted. Needs endDate.

endDatestring

Reports submitted on or before this day, or created then if they were never submitted. At most a year after startDate.

approvedAfterstring

Reports approved after this day. The day itself is left out, so the last run's date can be sent as it is.

exportedboolean

True takes reports already exported, false takes those not exported yet.

paymentTypePaymentType

Only expenses paid this way.

moneyFlowIN OUT

Money out, or money in.

dateFieldExpenseDateField

What from and to look at. Left out, the date on the receipt.

categoryIdsarray of string

These categories, however many.

cadence requiredReportCadence
recipients requiredarray of string
enabled requiredboolean
nextRunAt requiredstring
lastRunAt requiredstring,null
createdById requiredstring
createdAt requiredstring

Outstanding

currency requiredstring
unbatchedMinor requirednumber
batchedMinor requirednumber
totalMinor requirednumber
payees requiredarray of OutstandingPayee
lastMethod requiredReimbursementMethod or null

How the last batch here was paid, to start the next one on.

payer requiredMoneyPerson or null

The designated payer, when the workspace named one.

nothingOwed requiredarray of object

Approved reports with nothing owed. Marking one paid is how it closes.

Fields
id requiredstring
reference requiredstring
title requiredstring
owner requiredMoneyPerson

ReimbursementPage

data requiredarray of Reimbursement
nextCursor requiredstring,null

Pass as cursor for the next page. Null on the last one.

NachaFile

entryCount requirednumber
entryHash requiredstring
totalCreditMinor requirednumber
blockCount requirednumber
effectiveDate requiredstring
filename requiredstring
contentType requiredstring
content requiredstring

AbaFile

filename requiredstring
contentType requiredstring
content requiredstring
entryCount requirednumber
totalCreditMinor requirednumber
processOn requiredstring

ReimbursementSettings

payerIdstring,null

The person who is reminded of what is waiting to be paid. Anyone with the permission can still pay.

autoBatchUnderMinornumber,null

Approved reports at or under this go into a batch by themselves, ready for the next file.

requireCardMatchboolean,null

A card expense needs its charge matched before the report can get its final approval.

detailsExportboolean,null

People who pay can download who is owed what on approved reports, with their bank details. Off until someone adds it.

AchOriginatorSetting

originator requiredobject or null
Fields
bankRoutingNumber requiredstring

The bank that sends the file on: Immediate Destination, and the Originating DFI.

bankName requiredstring
companyName requiredstring
companyId requiredstring

Assigned by the bank, usually 1 followed by the EIN.

secCode requiredPPD CCD

PPD pays a person's account, CCD pays a business account.

entryDescription requiredstring

What a payee sees on their statement.

originIdstring,null

Immediate Origin, when the bank wants something other than the company ID.

originNamestring,null

The legal name, up to 23 characters. Defaults to the company name.

AbaOriginatorSetting

originator requiredobject or null
Fields
bankCode requiredstring

Three letters for the bank, such as CBA or NAB.

userName requiredstring

The name the bank holds for you, up to 26 characters.

userId requiredstring

The Direct Entry User ID your bank gave you.

bsb requiredstring

What the account you pay from is, for the balancing entry.

accountNumber requiredstring
description requiredstring

What a payee sees on their statement.

AbaOriginator

bankCode requiredstring

Three letters for the bank, such as CBA or NAB.

userName requiredstring

The name the bank holds for you, up to 26 characters.

userId requiredstring

The Direct Entry User ID your bank gave you.

bsb requiredstring

What the account you pay from is, for the balancing entry.

accountNumber requiredstring
description requiredstring

What a payee sees on their statement.

AchOriginator

bankRoutingNumber requiredstring

The bank that sends the file on: Immediate Destination, and the Originating DFI.

bankName requiredstring
companyName requiredstring
companyId requiredstring

Assigned by the bank, usually 1 followed by the EIN.

secCode requiredPPD CCD

PPD pays a person's account, CCD pays a business account.

entryDescription requiredstring

What a payee sees on their statement.

originIdstring,null

Immediate Origin, when the bank wants something other than the company ID.

originNamestring,null

The legal name, up to 23 characters. Defaults to the company name.

PayeeBankAccountList

array of PayeeBankAccount

PayeeBankAccount

user requiredMoneyPerson
holderName requiredstring
accountType requiredBankAccountType
routingMasked requiredstring
accountMasked requiredstring
updatedAt requiredstring

MyBankAccount

account requiredPayeeBankAccount or null

ReimbursementList

array of Reimbursement

Reimbursement

id requiredstring
number requirednumber
reference requiredstring

REI-0001.

status requiredReimbursementStatus
method requiredReimbursementMethod
currency requiredstring
totalMinor requirednumber

What the batch pays. For a batch in a NACHA file this is the file's figure.

owedMinor requirednumber

What its reports add up to now. Different from totalMinor when a file went out of date.

paymentReference requiredstring,null

What a person typed as proof of payment: a check number or a payroll run.

note requiredstring,null
paidOn requiredstring,null
confirmedOn requiredstring,null

When the payee said the money arrived.

canReverse requiredboolean

A paid batch nothing went out for automatically can still be taken back.

payee requiredMoneyPerson
bankAccount requiredobject or null
Fields
accountType requiredBankAccountType
accountMasked requiredstring
reports requiredarray of ReimbursementReport
createdAt requiredstring
updatedAt requiredstring

BulkPaymentAccountResult

updated requirednumber
skipped requirednumber
expensesRemoved requirednumber

StatementPreview

format requiredCSV XLSX IIF OFX QFX
headers requiredarray of string

Empty for OFX and QFX, which need no mapping.

sample requiredarray of array of string
rowCount requirednumber
suggested requiredobject or null
Fields
date requiredstring
description requiredstring
dateOrder requiredYMD MDY DMY
spendIs requiredPOSITIVE NEGATIVE

Whether a purchase is positive or negative in the amount column. Ignored with debit and credit.

decimalSeparator required, .
amountstring

One signed column, or debit and credit for a file that splits them.

debitstring
creditstring
merchantstring
externalIdstring

The bank's own id for a row. Without one, a stable hash of the row stands in.

currencystring
fixedCurrencystring

The currency of every row, for a file with no currency column.

cardstring

Which card a row belongs to, in a file holding several: a number, a name or last four digits.

employeeIdstring

The cardholder's employee ID, which assigns a card new to this workspace.

categorystring
tagstring
mccstring

The column holding the merchant category code, four digits.

accountLast4 requiredstring,null
currency requiredstring,null
from requiredstring,null
to requiredstring,null
output requiredarray of StatementOutputRow

The first rows as they would be stored under the mapping sent, or the suggested one.

errors requiredarray of object

What that mapping could not read.

Fields
row requirednumber
message requiredstring

StatementFeedImportResult

cards requiredarray of object
Fields
id requiredstring
name requiredstring
last4 requiredstring,null
created requirednumber
format requiredCSV XLSX IIF OFX QFX
parsed requirednumber
created requirednumber
duplicates requirednumber

Rows not added: already imported, or held back. A statement imported twice adds nothing.

heldBack requirednumber

How many of duplicates are only look-alikes, not the same id. These can be forced in.

beforeStartDate requirednumber

Dated before the account's transaction start date, so left out.

expensesCreated requirednumber

Expenses made from new charges, when asked for.

heldBackRows requiredarray of HeldBackRow

The first few held back, to judge by.

errors requiredarray of object

Rows that could not be read, with the line they came from.

Fields
row requirednumber
message requiredstring
from requiredstring,null
to requiredstring,null

StatementImportResult

format requiredCSV XLSX IIF OFX QFX
parsed requirednumber
created requirednumber
duplicates requirednumber

Rows not added: already imported, or held back. A statement imported twice adds nothing.

heldBack requirednumber

How many of duplicates are only look-alikes, not the same id. These can be forced in.

beforeStartDate requirednumber

Dated before the account's transaction start date, so left out.

expensesCreated requirednumber

Expenses made from new charges, when asked for.

heldBackRows requiredarray of HeldBackRow

The first few held back, to judge by.

errors requiredarray of object

Rows that could not be read, with the line they came from.

Fields
row requirednumber
message requiredstring
from requiredstring,null
to requiredstring,null

CardLayoutList

array of CardLayout

CardLayout

id requiredstring
name requiredstring
mapping requiredobject
Fields
date requiredstring
description requiredstring
dateOrder requiredYMD MDY DMY
spendIs requiredPOSITIVE NEGATIVE

Whether a purchase is positive or negative in the amount column. Ignored with debit and credit.

decimalSeparator required, .
amountstring

One signed column, or debit and credit for a file that splits them.

debitstring
creditstring
merchantstring
externalIdstring

The bank's own id for a row. Without one, a stable hash of the row stands in.

currencystring
fixedCurrencystring

The currency of every row, for a file with no currency column.

cardstring

Which card a row belongs to, in a file holding several: a number, a name or last four digits.

employeeIdstring

The cardholder's employee ID, which assigns a card new to this workspace.

categorystring
tagstring
mccstring

The column holding the merchant category code, four digits.

updatedAt requiredstring

BulkTransactionResult

updated requirednumber
skipped requiredarray of object

What was left as it was, each with why.

Fields
id requiredstring
message requiredstring

PlaidStatus

configured requiredboolean
environment requiredReleaseEnvironment

PlaidItemList

array of PlaidItem

PlaidLinkToken

linkToken requiredstring
expiration requiredstring

PlaidItem

id requiredstring
institutionName requiredstring,null
status requiredstring
issue requiredobject or null

What is wrong, when something is. The title and message are shown as written.

Fields
code requiredACCOUNT_NOT_FOUND LOGIN_REQUIRED INVALID_CREDENTIALS TOO_MANY_ATTEMPTS ACCOUNT_SETUP_REQUIRED DIRECT_CONNECT_NOT_ENABLED CARD_UPDATE_FAILED GENERAL_CONNECTION_ISSUE UNKNOWN_ERROR
title requiredstring
message requiredstring
needsPerson requiredboolean
attention requiredboolean

Whether to show the red dot. It stops after 90 days without a sync, and issue stays.

lastSyncedAt requiredstring,null
accounts requiredarray of PaymentAccount

BillingPlans

currency requiredUSD
plans requiredarray of BillingPlan
trial requiredobject
Fields
plan requiredPlanKey
days requirednumber

BillingRedirect

url requiredstring
destination requiredcheckout portal

CashsdkToken

token requiredstring

Send as X-CashSDK-User-Token.

appUserId requiredstring

The CashSDK app user id, which is the workspace id.

expiresAt requiredstring

WorkspaceTransferred

ownerId requiredstring
ownerName requiredstring

AccountDeletion

status requiredscheduled
purgeAfter requiredstring
closedWorkspaces requiredarray of NamedWorkspace

Workspaces that closed with the account.

storeSubscriptions requiredarray of StoreSubscriptionNotice

ApiCallPage

data requiredarray of ApiCall
nextCursor requiredstring,null

Pass as cursor for the next page. Null on the last one.

FraudSettings

enabled requiredboolean

Off stops every check. A capture never depended on it.

yellowAt requirednumber

At or above this a document reads yellow.

redAt requirednumber

Above this a document reads red.

profiles requiredobject
Fields
RECEIPTS requiredobject
Fields
signals requiredobject
Fields
otherobject
digital_tamperingobject
fraudulent_pdfobject
fraudulent_imageobject
generated_documentobject
ai_generatedobject
lcd_photoobject
screenshotobject
digital_backgroundobject
not_a_documentobject
duplicateobject
similar_documentsobject
handwritten_charactersobject
invalid_qr_dataobject
invalid_mrz_dataobject
suspicious_contentobject
data_inconsistencyobject
vendor_layout_mismatchobject
total_in_words_mismatchobject
aspect_ratio_mismatchobject
high_velocityobject
critical_velocityobject
multiple_profiles_or_devicesobject
fraud_historyobject
blocked_deviceobject
monitoredFields requiredarray of FraudMonitoredField
CHECKS requiredobject
Fields
signals requiredobject
Fields
otherobject
digital_tamperingobject
fraudulent_pdfobject
fraudulent_imageobject
generated_documentobject
ai_generatedobject
lcd_photoobject
screenshotobject
digital_backgroundobject
not_a_documentobject
duplicateobject
similar_documentsobject
handwritten_charactersobject
invalid_qr_dataobject
invalid_mrz_dataobject
suspicious_contentobject
data_inconsistencyobject
vendor_layout_mismatchobject
total_in_words_mismatchobject
aspect_ratio_mismatchobject
high_velocityobject
critical_velocityobject
multiple_profiles_or_devicesobject
fraud_historyobject
blocked_deviceobject
monitoredFields requiredarray of FraudMonitoredField
BANK_STATEMENTS requiredobject
Fields
signals requiredobject
Fields
otherobject
digital_tamperingobject
fraudulent_pdfobject
fraudulent_imageobject
generated_documentobject
ai_generatedobject
lcd_photoobject
screenshotobject
digital_backgroundobject
not_a_documentobject
duplicateobject
similar_documentsobject
handwritten_charactersobject
invalid_qr_dataobject
invalid_mrz_dataobject
suspicious_contentobject
data_inconsistencyobject
vendor_layout_mismatchobject
total_in_words_mismatchobject
aspect_ratio_mismatchobject
high_velocityobject
critical_velocityobject
multiple_profiles_or_devicesobject
fraud_historyobject
blocked_deviceobject
monitoredFields requiredarray of FraudMonitoredField
suspiciousWords requiredarray of string

Mock or test receipt wording.

pdfCreatorKeywords requiredarray of string

Extra PDF producers to treat as an editor, on top of the built-in list.

velocity requiredobject
Fields
high requiredobject
Fields
lastMinutes requirednumber
lastDay requirednumber
lastWeek requirednumber
last2Weeks requirednumber
lastMonth requirednumber
critical requiredobject
Fields
lastMinutes requirednumber
lastDay requirednumber
lastWeek requirednumber
last2Weeks requirednumber
lastMonth requirednumber
duplicateSpike requiredobject

Hourly, for admins, at most three in 24 hours. Off until someone turns it on.

Fields
enabled requiredboolean
percent requirednumber
minVolume requirednumber

ClientCertificateEnforcement

required requiredboolean
edgeConfigured requiredboolean

Whether this server is set up behind an edge that checks certificates. Without that, it cannot be required.

activeCertificates requirednumber

ReleaseSubscriptionPage

data requiredarray of ReleaseSubscription
nextCursor requiredstring,null

Pass as cursor for the next page. Null on the last one.

ReleaseSubscription

userId requiredstring
products requiredarray of ReleaseProduct

Empty means every product.

addedById requiredstring,null

Who subscribed them, when it was not themselves.

lastNotifiedAt requiredstring,null
createdAt requiredstring

ConnectResult

url requiredstring

DisconnectResult

revoked requiredboolean

False when the provider could not confirm. PaperTotal has dropped the tokens either way.

grantKeptForstring

Another connection still rests on the same grant at the provider, so it was left in place on purpose.

Mappings

provider requiredIntegrationProvider
slug requiredstring
pulledAt requiredstring,null

When the reference data last arrived; null means the first pull has not finished.

rows requiredarray of MappingRow
options requiredobject
Fields
ACCOUNT requiredarray of MappingOption
PAYMENT_ACCOUNT requiredarray of MappingOption
VENDOR requiredarray of MappingOption
CUSTOMER requiredarray of MappingOption
CLASS requiredarray of MappingOption
TRACKING requiredarray of MappingOption
TAX_CODE requiredarray of MappingOption
ITEM requiredarray of MappingOption
LOCATION requiredarray of MappingOption
DEPARTMENT requiredarray of MappingOption
EMPLOYEE requiredarray of MappingOption
CUSTOM_DIMENSION requiredarray of MappingOption
EXPENSE_CATEGORY requiredarray of MappingOption
PAYABLE_ACCOUNT requiredarray of MappingOption

SaveMappingsResult

saved requirednumber
released requirednumber

Records that were waiting on a mapping and are posting now.

SyncResult

queued requirednumber
alreadyPostednumber

Already in the books and left out. Present only when there are some.

duplicateWarningstring

Sent instead of posting: asking again with confirmDuplicate makes a second entry for each.

SyncRecord

id requiredstring
expenseId requiredstring
reference requiredstring
merchantName requiredstring,null
date requiredstring
amountMinor requirednumber
currency requiredstring
state requiredSyncState
externalType requiredstring,null
externalId requiredstring,null

The record in the other system.

errorCode requiredstring,null
message requiredstring,null
attempts requirednumber
syncedAt requiredstring,null
nextAttemptAt requiredstring,null
paidAtstring,null
paidByPROVIDER PAPERTOTAL or null
paymentErrorstring,null
resendsnumber

Forwarding

address requiredstring

receipts+<token>@..., works from any address.

alias requiredstring,null

The address a person chose, beside the random one. Both work.

aliasAddress requiredstring,null
acceptsMerchantCc requiredboolean

Takes receipts a merchant copies to the shared address, addressed to this person.

sharedAddress requiredstring

receipts@..., works only from a verified address.

signIn requiredobject
Fields
email requiredstring
verified requiredboolean
senders requiredarray of ForwardingSender

ForwardingSender

id requiredstring
email requiredstring
verified requiredboolean
createdAt requiredstring

ApiKeyCreated

key requiredstring
clientSecretstring
id requiredstring
name requiredstring
prefix requiredstring

The first characters of the key. The rest is not stored.

scopes requiredarray of string
kind requiredWORKSPACE PERSONAL
fullAccess requiredboolean

Every scope, present and future.

environment requiredLIVE TEST
managers requiredarray of object

Named people who may also see, change and revoke this key.

Fields
id requiredstring
name requiredstring,null
hasClientSecret requiredboolean

True once a client secret has been issued, so a signature can be checked.

signingRequired requiredboolean

A request with no valid signature is refused.

rotatedFromId requiredstring,null

The key this one replaced.

rotatedToId requiredstring,null

The live key that replaced this one. Revoke this one once that is rolled out.

webhook requiredobject or null

This key's own endpoint, which hears about the documents it submits instead of the workspace's endpoints.

Fields
id requiredstring
url requiredstring
status requiredPENDING CONFIRMED
enabled requiredboolean
lastUsedAt requiredstring,null
expiresAt requiredstring,null
revokedAt requiredstring,null
createdAt requiredstring
createdBy requiredobject
Fields
id requiredstring
name requiredstring,null
allowed requiredobject

What the person asking may do beyond seeing it, renaming it, narrowing it and revoking it.

Fields
widen requiredboolean
issueSecrets requiredboolean

ApiKeyPage

data requiredarray of ApiKey
nextCursor requiredstring,null

Pass as cursor for the next page. Null on the last one.

ApiKeyPermissions

scopes requiredarray of object
Fields
scope requiredstring
label requiredstring
description requiredstring
routes requiredarray of object
Fields
method requiredstring
path requiredstring
presets requiredarray of object
Fields
key requiredstring
label requiredstring
scopes requiredarray of string
canMakeWorkspaceKeys requiredboolean

Whether this person may make a workspace key, or give one full access.

ApiKey

id requiredstring
name requiredstring
prefix requiredstring

The first characters of the key. The rest is not stored.

scopes requiredarray of string
kind requiredWORKSPACE PERSONAL
fullAccess requiredboolean

Every scope, present and future.

environment requiredLIVE TEST
managers requiredarray of object

Named people who may also see, change and revoke this key.

Fields
id requiredstring
name requiredstring,null
hasClientSecret requiredboolean

True once a client secret has been issued, so a signature can be checked.

signingRequired requiredboolean

A request with no valid signature is refused.

rotatedFromId requiredstring,null

The key this one replaced.

rotatedToId requiredstring,null

The live key that replaced this one. Revoke this one once that is rolled out.

webhook requiredobject or null

This key's own endpoint, which hears about the documents it submits instead of the workspace's endpoints.

Fields
id requiredstring
url requiredstring
status requiredPENDING CONFIRMED
enabled requiredboolean
lastUsedAt requiredstring,null
expiresAt requiredstring,null
revokedAt requiredstring,null
createdAt requiredstring
createdBy requiredobject
Fields
id requiredstring
name requiredstring,null
allowed requiredobject

What the person asking may do beyond seeing it, renaming it, narrowing it and revoking it.

Fields
widen requiredboolean
issueSecrets requiredboolean

ApiKeyClientSecret

clientSecret requiredstring

SandboxState

sandbox requiredSandbox or null

Sandbox

id requiredstring
name requiredstring
parentId requiredstring

The workspace it belongs to.

parentName requiredstring
documentsUsed requirednumber

Documents it has held, ever. Deleting one does not give it back.

documentLimit requirednumber
createdAt requiredstring

OAuthConsent

client requiredobject

kind says how far to trust the name: a workspace registered it, it registered itself, or its own site describes it.

Fields
name requiredstring
uri requiredstring,null
logoUri requiredstring,null
kind requiredREGISTERED DYNAMIC METADATA
clientId requiredstring
redirectHost requiredstring

Host of the address the answer goes to. Shown as it is, so a person can see where they are sending it.

localOnly requiredboolean

Every redirect address on this client is this computer, so anything running here could pose as the app.

resource requiredapi mcp
scopes requiredarray of OAuthScope
workspaces requiredarray of object
Fields
id requiredstring
name requiredstring
role requiredstring

OAuthRedirect

redirectTo requiredstring

OAuthConnectionPage

data requiredarray of OAuthConnection
nextCursor requiredstring,null

Pass as cursor for the next page. Null on the last one.

OAuthClientWithSecret

clientSecret requiredstring,null
id requiredstring
clientId requiredstring
name requiredstring
uri requiredstring,null
logoUri requiredstring,null
redirectUris requiredarray of string
scopes requiredarray of string
public requiredboolean
secretPrefix requiredstring,null

The first characters of the secret. The rest is not stored.

enabled requiredboolean
connections requirednumber
createdAt requiredstring

OAuthClientPage

data requiredarray of OAuthClient
nextCursor requiredstring,null

Pass as cursor for the next page. Null on the last one.

OAuthClient

id requiredstring
clientId requiredstring
name requiredstring
uri requiredstring,null
logoUri requiredstring,null
redirectUris requiredarray of string
scopes requiredarray of string
public requiredboolean
secretPrefix requiredstring,null

The first characters of the secret. The rest is not stored.

enabled requiredboolean
connections requirednumber
createdAt requiredstring

Inbox

rooms requiredarray of Room
todos requiredarray of InboxTodo
counts requiredobject
Fields
all requirednumber
unread requirednumber
todos requirednumber
priorityMode requiredChatPriorityMode

ChatPersonList

data requiredarray of ChatPerson

ChatPreference

priorityMode requiredChatPriorityMode

Room

id requiredstring
kind requiredROOM GROUP DIRECT THREAD ASSISTANT
name requiredstring
slug requiredstring,null
description requiredstring,null
systemKey requiredstring,null
imageUrl requiredstring,null
visibility requiredRoomVisibility
posting requiredRoomPosting
expenseId requiredstring,null
reportId requiredstring,null
memberCount requirednumber
joined requiredboolean
canPost requiredboolean
postRefusal requiredstring,null

Why this person cannot post here, as they should read it, or null when they can.

canManage requiredboolean
peer requiredChatPerson or null

Who else is in a direct chat.

pinned requiredboolean
unread requirednumber
firstUnreadId requiredstring,null

The first message past what this person has read, where the New line goes.

lastMessageAt requiredstring,null
lastMessage requiredstring,null

MessageFlagList

data requiredarray of MessageFlag

RoomList

data requiredarray of object
Fields
id requiredstring
kind requiredROOM GROUP DIRECT THREAD ASSISTANT
name requiredstring
slug requiredstring,null
description requiredstring,null
systemKey requiredstring,null
imageUrl requiredstring,null
visibility requiredRoomVisibility
posting requiredRoomPosting
expenseId requiredstring,null
reportId requiredstring,null
memberCount requirednumber
joined requiredboolean
canPost requiredboolean
postRefusal requiredstring,null

Why this person cannot post here, as they should read it, or null when they can.

canManage requiredboolean
peer requiredChatPerson or null

Who else is in a direct chat.

pinned requiredboolean
unread requirednumber
firstUnreadId requiredstring,null

The first message past what this person has read, where the New line goes.

lastMessageAt requiredstring,null
lastMessage requiredstring,null

RoomMemberList

data requiredarray of RoomMember

RoomInvite

url requiredstring

Shown once. It opens the room to members of this workspace and to nobody else.

code requiredstring
expiresAt requiredstring

MessagePage

data requiredarray of Message
nextCursor requiredstring,null

Pass as cursor for the next page. Null on the last one.

PostedMessage

unreachable requiredarray of ChatPerson

Members the message named who cannot read this room, so were not mentioned or told.

id requiredstring
roomId requiredstring
kind requiredSYSTEM TEXT ASSISTANT TASK
body requiredstring
author requiredChatPerson or null
mentions requiredarray of ChatPerson
rooms requiredarray of object

#rooms the text names that this reader can open.

Fields
id requiredstring
slug requiredstring
attachments requiredarray of object
Fields
id requiredstring
filename requiredstring
contentType requiredstring
sizeBytes requirednumber
url requiredstring

Signed for 15 minutes.

parentId requiredstring,null
replyCount requirednumber
lastReplyAt requiredstring,null
whisper requiredboolean

Seen only by the person who asked.

chart requiredChart or null
followUps requiredarray of string
runId requiredstring,null
task requiredTask or null
action requiredPendingAction or null
editedAt requiredstring,null
deleted requiredboolean
hidden requiredboolean
canEdit requiredboolean

Reserved for the people who may act on it, so a client never offers what the API would refuse.

canDelete requiredboolean
canModerate requiredboolean
createdAt requiredstring

Message

id requiredstring
roomId requiredstring
kind requiredSYSTEM TEXT ASSISTANT TASK
body requiredstring
author requiredChatPerson or null
mentions requiredarray of ChatPerson
rooms requiredarray of object

#rooms the text names that this reader can open.

Fields
id requiredstring
slug requiredstring
attachments requiredarray of object
Fields
id requiredstring
filename requiredstring
contentType requiredstring
sizeBytes requirednumber
url requiredstring

Signed for 15 minutes.

parentId requiredstring,null
replyCount requirednumber
lastReplyAt requiredstring,null
whisper requiredboolean

Seen only by the person who asked.

chart requiredChart or null
followUps requiredarray of string
runId requiredstring,null
task requiredTask or null
action requiredPendingAction or null
editedAt requiredstring,null
deleted requiredboolean
hidden requiredboolean
canEdit requiredboolean

Reserved for the people who may act on it, so a client never offers what the API would refuse.

canDelete requiredboolean
canModerate requiredboolean
createdAt requiredstring

MessageFlagged

flagged requiredboolean

TaskList

data requiredarray of Task

Task

id requiredstring
roomId requiredstring
messageId requiredstring
title requiredstring
description requiredstring,null
assignee requiredChatPerson
createdBy requiredChatPerson
status requiredOPEN DONE
completedAt requiredstring,null
canChange requiredboolean

What the person asking may do. Clients draw from these.

createdAt requiredstring

SearchResults

query requiredstring
tookMs requirednumber
groups requiredarray of SearchGroup

Only the kinds with a hit, in searchKinds order.

summary requiredSearchSummary or null

Set when the search asks for group-by:.

NotificationPage

unread requirednumber
data requiredarray of Notification
nextCursor requiredstring,null

UpdatedCount

updated requirednumber

Notification

id requiredstring
type requiredstring
title requiredstring
body requiredstring,null
href requiredstring,null

Where in the app it leads, when it leads anywhere.

read requiredboolean
createdAt requiredstring

NotificationPreferenceList

array of NotificationPreference

ExpenseVendor

vendor requiredobject or null
Fields
id requiredstring
name requiredstring
source requiredMANUAL RULE or null

RULE when a merchant rule set it, MANUAL when an admin picked it.

options requiredarray of object
Fields
id requiredstring
name requiredstring
provider requiredstring,null

The books this reads from, or null with nothing connected.

ExportSettings

provider requiredIntegrationProvider
slug requiredstring
settings requiredobject
Fields
preferredExporterId requiredstring,null

Hears about failed and finished exports. Null falls back to whoever connected.

autoSync requiredboolean
exportDate requiredEXPENSE_DATE LAST_EXPENSE SUBMITTED EXPORTED
reimbursableEntity requiredBILL CHECK JOURNAL_ENTRY EXPENSE_REPORT
companyCardEntity requiredBILL JOURNAL_ENTRY EXPENSE_REPORT CREDIT_CARD DEBIT_CARD
defaultVendorId requiredstring,null

A VENDOR reference's external id, for a company-paid expense with no vendor of its own.

cardMisc requiredboolean

With no vendor and no default, post to Credit Card Misc or Debit Card Misc instead of stopping.

billStatus requiredSUBMITTED DRAFT AUTHORISED
autoCreateVendors requiredboolean
autoCreateCustomers requiredboolean

Customers too, where an invoice needs one.

payableAccountId requiredstring,null

A PAYABLE_ACCOUNT reference's external id. A journal entry without tax credits this account.

reimbursableTiming requiredON_APPROVAL ON_REIMBURSEMENT
exportMethod requiredACCRUAL CASH
syncReimbursed requiredboolean
billPaymentAccountId requiredstring,null

A PAYMENT_ACCOUNT reference's external id: what a bill payment comes out of.

postingCurrency requiredHOME ORIGINAL
printLater requiredboolean

QuickBooks Desktop: checks wait in its print queue.

nextOpenPeriod requiredboolean

NetSuite: a closed period moves the entry to the next open one instead of stopping it.

customFormId requiredstring,null
expenseReportApproval requiredSUPERVISOR ACCOUNTING SUPERVISOR_AND_ACCOUNTING
billApproval requiredPENDING APPROVED or null
journalApproval requiredPENDING APPROVED or null
enforceExpenseLimit requiredboolean

NetSuite: a report above the supervisor's Expense Limit stops rather than posts.

capabilities requiredExportCapabilities
exporters requiredarray of MemberChoice

People who may be the preferred exporter.

vendors requiredarray of object
Fields
id requiredstring
name requiredstring
payableAccounts requiredarray of object
Fields
id requiredstring
name requiredstring
paymentAccounts requiredarray of object
Fields
id requiredstring
name requiredstring
type requiredstring,null
taxEnabled requiredboolean
multiCurrency requiredboolean
paused requiredPostingPause or null

Set while a failure holds automatic posting.

Import

provider requiredIntegrationProvider
slug requiredstring
settings requiredobject
Fields
prefixCategories requiredboolean

Category names start with the provider's name, so they read apart from the workspace's own.

expenseClaimsOnly requiredboolean

Xero: only accounts marked Show in Expense Claims. Off brings every expense account with a code.

items requiredboolean

Items you buy become categories, and lines post by item.

taxes requiredboolean
rebillCustomers requiredboolean

Customers become tags, so a billable expense can name who to bill.

dimensions requiredmap of OFF TAGS REPORT_FIELDS EMPLOYEE_DEFAULT

By dimension key, as importDimensions lists them.

intercompany requiredboolean

NetSuite: customers and projects from other subsidiaries too, which Intercompany Time and Expense allows.

customLists requiredarray of object

NetSuite's custom segments, records and lists. Nothing lists these, so a person names each.

Fields
name requiredstring
table requiredstring

The record's script id: customrecord_cseg_region, customlist_region.

field requiredstring

The field on a transaction line: cseg_region, custcol_region.

dimensions requiredarray of ImportDimension
accounts requirednumber
items requirednumber
taxes requirednumber
taxRates requiredarray of object
Fields
id requiredstring
name requiredstring
code requiredstring,null
valueBps requirednumber
type requiredstring,null
isDefault requiredboolean
active requiredboolean
offersExpenseClaims requiredboolean

Xero alone marks accounts for expense claims.

offersRebill requiredboolean

Customers can stand behind billable expenses as tags.

offersCustomLists requiredboolean

NetSuite: custom lists and intercompany have a place.

employees requirednumber

People in the books with an address, who could be invited.

pulledAt requiredstring,null
last requiredImportSummary or null

InviteEmployeesResult

invited requirednumber
skipped requiredarray of object

Already here, already invited, or no seat left, each with the reason.

Fields
name requiredstring
reason requiredstring

Review

provider requiredIntegrationProvider
slug requiredstring
name requiredstring
checksGst requiredboolean

Xero organisations file GST, so its review page checks it.

categories requiredarray of object
Fields
id requiredstring
name requiredstring
rows requiredarray of ReviewRow

VendorList

provider requiredIntegrationProvider
slug requiredstring
name requiredstring
accounts requiredarray of object

What a vendor rule can point at.

Fields
id requiredstring
name requiredstring
code requiredstring,null
vendors requiredarray of Vendor
truncated requiredboolean

The list is longer than one page holds, so search narrows it.

Vendor

id requiredstring
externalId requiredstring
name requiredstring
email requiredstring,null
active requiredboolean

The provider still lists it.

enabled requiredboolean

A person left it switched on here.

receipts requirednumber

Expenses in this workspace that name it or its merchant.

accountId requiredstring,null

The account its receipts post to, when a person saved a rule for it.

VendorAccount

accountId requiredstring,null

GmailScan

mailbox requiredstring,null
messagesSeen requirednumber

Mail read since connecting.

messagesFiled requirednumber

How many of those became a document.

scanningSince requiredstring,null

Mail received from here on is read. Null until the first scan has marked its place.

lastScanAt requiredstring,null
scansUsedUp requiredboolean

The month's scans ran out. Scanning picks up from the same place when they come back.

pausedUntil requiredstring,null

Gmail asked PaperTotal to wait until then.

SlackSettings

channels requiredarray of SlackChannel
channelsTruncated requiredboolean

The workspace has more channels than one list can hold.

channelId requiredstring,null
channelName requiredstring,null
receipts requiredSlackReceipts
approvalsReady requiredboolean

The server can verify a click. Without this, a button in Slack shows an error.

StorageStatus

provider requiredIntegrationProvider
slug requiredstring
name requiredstring
account requiredstring,null
backup requiredobject
Fields
enabled requiredboolean
folder requiredstring,null

Where it goes, once the first pass has made the folder.

done requirednumber

Written to the folder, or brought in from it.

skipped requirednumber

Files the provider or the capture rules refused for good.

waiting requirednumber
exports requiredStorageFeature
intake requiredStorageIntake
lastSyncedAt requiredstring,null

DesktopSetup

password requiredstring,null
userName requiredstring
qwc requiredstring

The file a person opens in the Web Connector. It holds no password.

companyFile requiredstring,null
lastRunAt requiredstring,null

IifImport

accounts requirednumber
customers requirednumber
vendors requirednumber
items requirednumber
classes requirednumber
errors requiredarray of object

Lines that could not be read. The rest came in.

Fields
line requirednumber
message requiredstring

TravelProfile

legalFirstName requiredstring,null
legalMiddleName requiredstring,null
legalLastName requiredstring,null
birthDate requiredstring,null
gender requiredstring,null
phone requiredstring,null
homeAddress requiredobject or null
Fields
line1string
line2string
citystring
regionstring
postalCodestring
countrystring
workAddress requiredobject or null
Fields
line1string
line2string
citystring
regionstring
postalCodestring
countrystring
emergencyName requiredstring,null
emergencyRelationship requiredstring,null
emergencyPhone requiredstring,null
emergencyEmail requiredstring,null
documents requiredarray of object
Fields
type requiredPASSPORT NATIONAL_ID KNOWN_TRAVELER REDRESS
last4 requiredstring

The number itself never leaves.

country requiredstring,null
expiresOn requiredstring,null
updatedAt requiredstring

ReusableConnectorList

array of object

connectionId requiredstring
workspaceName requiredstring
companyFile requiredstring,null

AgentList

data requiredarray of Agent

AgentTemplateList

array of AgentTemplate

Agent

id requiredstring
userId requiredstring
kind requiredPERSONAL RULEBOT
name requiredstring
description requiredstring,null
instructions requiredstring
templateKey requiredstring,null
grants requiredarray of object
Fields
tool requiredstring
limitsobject
Fields
maxTotalMinornumber
owner requiredobject
Fields
id requiredstring
name requiredstring,null
email requiredstring
workspaces requiredarray of object
Fields
id requiredstring
name requiredstring
waitingReports requirednumber

Reports waiting on this agent right now. Deleting it is refused while this is above zero.

roomId requiredstring,null
createdAt requiredstring

AgentDraft

reply requiredstring
instructions requiredstring
behaviour requiredstring

How it would behave, in plain words, so the person knows before they save.

AgentBulkDeleteResult

closed requiredarray of string
failed requiredarray of object
Fields
id requiredstring
message requiredstring

AgentActivityList

data requiredarray of AgentActivity

AgentRule

id requiredstring
title requiredstring
prompt requiredstring
role requiredAgentRuleRole

Whether it only observes or may also decide a report.

plan requiredobject
Fields
events requiredarray of report.submitted report.auto_approved report.step_approved report.approved report.rejected report.retracted report.reopened report.sent_back report.expense_rejected report.findings_accepted expense.held expense.released report.created report.updated report.deleted report.reassigned report.closed report.held_moved report.expenses_added report.expense_removed report.approver_replaced report.audit_sampled report.moved reimbursement.created reimbursement.paid report.reimbursed reimbursement.failed reimbursement.reversed reimbursement.cancelled reimbursement.overpaid reimbursement.receipt_confirmed reimbursement.delayed reimbursement.returned expense.reimbursement_stopped expense.created expense.updated expense.voided expense.restored expense.split expense.duplicate_kept expense.receipt_merged expense.receipt_attached expense.receipt_replaced expense.corrected expense.violation_dismissed document.created document.deleted document.processed document.failed comment.added comment.mentioned report.participant_added report.participant_removed room.member_added room.member_removed task.created task.reassigned task.completed task.reopened document.shared payment_account.assigned payment_account.unassigned payment_account.created payment_account.archived plaid.connected plaid.reconnected plaid.removed card.feed_broken transaction.matched transaction.unmatched report.exported export.requested integration.sync_failed integration.needs_attention travel.trip_changed billing.subscription_changed billing.seats_changed member.role_changed member.suspended member.updated invitation.created invitation.accepted workflow.created workflow.updated workflow.deleted policy.created policy.updated policy.deleted budget.created budget.updated budget.deleted integration.connected integration.disconnected payee_bank_account.saved payee_bank_account.removed reimbursement.settings_saved
branches requiredarray of object

The first branch whose conditions hold is the one that runs, so "and all other reports" is a last branch with none.

Fields
when requiredarray of object
Fields
field requiredAgentField
op requiredAgentOperator
value requiredstring or number or array of string or tuple or boolean
then requiredarray of object
Fields
tool requiredAgentStepTool
input requiredmap of string,number,boolean,null

Fixed when a person approved the rule. The subject is always what the event was about, so a step names no record.

askstring

A yes-or-no question a condition cannot settle. A reader with no tools answers it, and only a person can then write.

enabled requiredboolean
matchCount requirednumber
templateKey requiredstring,null
approvedBy requiredobject or null
Fields
id requiredstring
name requiredstring,null
email requiredstring
approvedAt requiredstring

ReportMoved

id requiredstring
workspaceId requiredstring
reference requiredstring

Its reference there. Numbers are each workspace's own.

AgentInbox

rooms requiredarray of object
Fields
id requiredstring
name requiredstring
kind requiredstring
lastMessageAt requiredstring,null
lastMessage requiredstring,null
waitingReports requiredarray of object

Reports waiting on it to approve.

Fields
id requiredstring
reference requiredstring
title requiredstring
submitter requiredstring
totalMinor requirednumber
currency requiredstring
waitingCards requiredarray of object

What it proposed and is waiting on its owner to confirm.

Fields
id requiredstring
summary requiredstring
expiresAt requiredstring

ReportExplain

status requiredstring
decisions requiredarray of object
Fields
at requiredstring
title requiredstring
reason requiredstring
source requiredstring
runId requiredstring,null

AgentScheduleList

data requiredarray of AgentSchedule

AgentSchedule

id requiredstring
agentId requiredstring
title requiredstring
instruction requiredstring
cadence requiredstring
nextRunAt requiredstring
lastRunAt requiredstring,null
enabled requiredboolean

AgentRuleList

data requiredarray of object
Fields
id requiredstring
title requiredstring
prompt requiredstring
role requiredAgentRuleRole

Whether it only observes or may also decide a report.

plan requiredobject
Fields
events requiredarray of report.submitted report.auto_approved report.step_approved report.approved report.rejected report.retracted report.reopened report.sent_back report.expense_rejected report.findings_accepted expense.held expense.released report.created report.updated report.deleted report.reassigned report.closed report.held_moved report.expenses_added report.expense_removed report.approver_replaced report.audit_sampled report.moved reimbursement.created reimbursement.paid report.reimbursed reimbursement.failed reimbursement.reversed reimbursement.cancelled reimbursement.overpaid reimbursement.receipt_confirmed reimbursement.delayed reimbursement.returned expense.reimbursement_stopped expense.created expense.updated expense.voided expense.restored expense.split expense.duplicate_kept expense.receipt_merged expense.receipt_attached expense.receipt_replaced expense.corrected expense.violation_dismissed document.created document.deleted document.processed document.failed comment.added comment.mentioned report.participant_added report.participant_removed room.member_added room.member_removed task.created task.reassigned task.completed task.reopened document.shared payment_account.assigned payment_account.unassigned payment_account.created payment_account.archived plaid.connected plaid.reconnected plaid.removed card.feed_broken transaction.matched transaction.unmatched report.exported export.requested integration.sync_failed integration.needs_attention travel.trip_changed billing.subscription_changed billing.seats_changed member.role_changed member.suspended member.updated invitation.created invitation.accepted workflow.created workflow.updated workflow.deleted policy.created policy.updated policy.deleted budget.created budget.updated budget.deleted integration.connected integration.disconnected payee_bank_account.saved payee_bank_account.removed reimbursement.settings_saved
branches requiredarray of object

The first branch whose conditions hold is the one that runs, so "and all other reports" is a last branch with none.

Fields
when requiredarray of object
then requiredarray of object
askstring

A yes-or-no question a condition cannot settle. A reader with no tools answers it, and only a person can then write.

enabled requiredboolean
matchCount requirednumber
templateKey requiredstring,null
approvedBy requiredobject or null
Fields
id requiredstring
name requiredstring,null
email requiredstring
approvedAt requiredstring
words requiredarray of string

The rule in plain words, as a person reads it before turning it on.

SuggestedAgentRuleList

array of SuggestedAgentRule

AgentRuleDescribed

title requiredstring
plan requiredobject or null

Null when the words could not become something code can enforce. problem says why.

Fields
events requiredarray of report.submitted report.auto_approved report.step_approved report.approved report.rejected report.retracted report.reopened report.sent_back report.expense_rejected report.findings_accepted expense.held expense.released report.created report.updated report.deleted report.reassigned report.closed report.held_moved report.expenses_added report.expense_removed report.approver_replaced report.audit_sampled report.moved reimbursement.created reimbursement.paid report.reimbursed reimbursement.failed reimbursement.reversed reimbursement.cancelled reimbursement.overpaid reimbursement.receipt_confirmed reimbursement.delayed reimbursement.returned expense.reimbursement_stopped expense.created expense.updated expense.voided expense.restored expense.split expense.duplicate_kept expense.receipt_merged expense.receipt_attached expense.receipt_replaced expense.corrected expense.violation_dismissed document.created document.deleted document.processed document.failed comment.added comment.mentioned report.participant_added report.participant_removed room.member_added room.member_removed task.created task.reassigned task.completed task.reopened document.shared payment_account.assigned payment_account.unassigned payment_account.created payment_account.archived plaid.connected plaid.reconnected plaid.removed card.feed_broken transaction.matched transaction.unmatched report.exported export.requested integration.sync_failed integration.needs_attention travel.trip_changed billing.subscription_changed billing.seats_changed member.role_changed member.suspended member.updated invitation.created invitation.accepted workflow.created workflow.updated workflow.deleted policy.created policy.updated policy.deleted budget.created budget.updated budget.deleted integration.connected integration.disconnected payee_bank_account.saved payee_bank_account.removed reimbursement.settings_saved
branches requiredarray of object

The first branch whose conditions hold is the one that runs, so "and all other reports" is a last branch with none.

Fields
when requiredarray of object
Fields
field requiredAgentField
op requiredAgentOperator
value requiredstring or number or array of string or tuple or boolean
then requiredarray of object
Fields
tool requiredAgentStepTool
input requiredmap of string,number,boolean,null

Fixed when a person approved the rule. The subject is always what the event was about, so a step names no record.

askstring

A yes-or-no question a condition cannot settle. A reader with no tools answers it, and only a person can then write.

problem requiredstring,null
words requiredarray of string

AssistantStatus

configured requiredboolean

False until ANTHROPIC_API_KEY is set. The app says so plainly and everything else keeps working.

message requiredstring,null

AssistantRoom

roomId requiredstring

AssistantAsk

roomId requiredstring
runId requiredstring

PendingAction

id requiredstring
status requiredEXPIRED FAILED PROPOSED EXECUTED DECLINED
summary requiredstring

What it will do, written by code from the record, never the model's words.

tainted requiredboolean

Something a person other than the asker wrote reached the assistant first. Read it before confirming.

error requiredstring,null
mine requiredboolean
expiresAt requiredstring

ExplainRun

id requiredstring
trigger requiredASK EVENT SCHEDULE
status requiredstring
question requiredstring,null
answer requiredstring,null
reasoning requiredstring,null
tainted requiredboolean
rule requiredobject or null

The rule it followed, and what that rule said.

Fields
id requiredstring
title requiredstring
prompt requiredstring
calls requiredarray of ExplainCall

What it read and what it did, in order.

basis requiredany

The facts the decision rested on.

createdAt requiredstring

ExpenseExplanation

category requiredobject or null
Fields
name requiredstring
source requiredstring,null
reason requiredstring
decisions requiredarray of object
Fields
at requiredstring
title requiredstring
reason requiredstring
source requiredstring
runId requiredstring,null

InsightAnswer

question requiredstring
title requiredstring
summary requiredstring

Plain English, worked out from the figures below.

from requiredstring
to requiredstring
currency requiredstring
totalMinor requirednumber
documents requirednumber

Documents the figures cover.

capped requiredboolean

True when more than 10,000 matched and the period was shortened to the latest 10,000.

chart requiredChart
filters requiredmap of string

The filters behind the figures, to save through /v1/saved-searches.

DocumentUsage

period requiredstring
types requiredarray of object
Fields
added requirednumber
read requirednumber
reading requirednumber
failed requirednumber
type requiredDocumentType
totals requiredDocumentCounts
scope requiredworkspace mine

Everyone's documents, or only the caller's own: a member sees what they can open.

ProcessingReport

from requiredstring
to requiredstring
scope requiredworkspace mine
documents requirednumber
reading requiredobject

How long the reader took, for documents it timed.

Fields
count requirednumber

How many documents the figures below are from.

averageMs requirednumber,null
medianMs requirednumber,null
p90Ms requirednumber,null
distribution requiredarray of DurationBucket
trend requiredarray of DurationDay
turnaround requiredDurationSummary

From upload to a result a person can see, for every document that has one.

fileTypes requiredarray of object
Fields
mimeType requiredstring
count requirednumber
sources requiredarray of object
Fields
source requiredDocumentSource
count requirednumber
averageSizeBytes requirednumber,null
averagePages requirednumber,null

ChatEvent

object or object or object or object or object or object

type requiredmessage.created message.updated message.deleted
workspaceId requiredstring
roomId requiredstring
messageId requiredstring
parentIdstring,null
subjectobject
Fields
reportIdstring
expenseIdstring

McpResponse

McpResult or McpError

OAuthProtocolError

error requiredstring

The code from the RFC, such as invalid_grant.

error_description requiredstring

Written for a person.

OAuthToken

access_token requiredstring

Starts pta_. Send it as Authorization: Bearer.

token_type requiredBearer
expires_in requirednumber

Seconds.

refresh_token requiredstring

Starts ptr_.

scope requiredstring

What the token holds, separated by spaces.

OAuthRegisteredClient

client_id requiredstring
client_id_issued_at requirednumber

Unix seconds.

client_secretstring

Only for a client that said it can keep one, and only in this response.

client_secret_expires_atnumber

0: it does not expire.

client_name requiredstring
redirect_uris requiredarray of string
grant_types requiredarray of string
response_types requiredarray of string
token_endpoint_auth_method requiredstring
application_typeweb native
client_uristring
logo_uristring
scopestring

OAuthServerMetadata

issuer requiredstring
authorization_endpoint requiredstring
token_endpoint requiredstring
revocation_endpoint requiredstring
registration_endpoint requiredstring
service_documentation requiredstring
scopes_supported requiredarray of string
response_types_supported requiredarray of string
response_modes_supported requiredarray of string
grant_types_supported requiredarray of string
token_endpoint_auth_methods_supported requiredarray of string
revocation_endpoint_auth_methods_supported requiredarray of string
code_challenge_methods_supported requiredarray of string
client_id_metadata_document_supported requiredboolean
authorization_response_iss_parameter_supported requiredboolean

OAuthProtectedResource

resource requiredstring
authorization_servers requiredarray of string
scopes_supported requiredarray of string
bearer_methods_supported requiredarray of string
resource_name requiredstring
resource_documentation requiredstring
resource_metadatastring

Blueprint

id requiredstring
name requiredstring

What blueprint_name takes.

title requiredstring
description requiredstring,null
documentType requiredDocumentType
builtIn requiredboolean

Ships with PaperTotal, and can be used and not changed.

version requirednumber

Changing a blueprint adds a version, and results keep the one that made them.

schema requiredobject
Fields
type requiredobject
descriptionstring
properties requiredSharedSchema0
fields requiredarray of object
Fields
path requiredstring
labelstring
examplestring
boxobject
Fields
page requiredinteger
x requirednumber
y requirednumber
width requirednumber
height requirednumber
createdAt requiredstring,null
updatedAt requiredstring,null

BlueprintList

data requiredarray of BlueprintSummary
nextCursor requirednull

BlueprintDraft

documentId requiredstring
status requiredREADING READY FAILED
draft requiredobject or null

A starting point. Nothing is saved until it is sent to POST /v1/blueprints.

Fields
name requiredstring
title requiredstring
documentType requiredDocumentType
schema requiredobject
Fields
type requiredobject
descriptionstring
properties requiredSharedSchema0
fields requiredarray of object
Fields
path requiredstring
labelstring
examplestring
boxobject
Fields
page requiredinteger
x requirednumber
y requirednumber
width requirednumber
height requirednumber
engine requiredrules claude
error requiredstring,null

Classification

id requiredstring
status requiredDocumentStatus
document_type requiredobject or null

Null until it has been read.

Fields
value requiredstring
score requirednumber
engine requiredrules claude or null
scores requiredarray of object

The runners-up, best first.

Fields
value requiredstring
score requirednumber

Extraction

id requiredstring
status requiredDocumentStatus
document_type requiredobject or null

Null until it has been read.

Fields
value requiredstring
score requirednumber
engine requiredrules claude or null
scores requiredarray of object

The runners-up, best first.

Fields
value requiredstring
score requirednumber
extraction requiredmap of any or null
extraction_error requiredstring,null
document requiredDocument

DocumentSet

id requiredstring
kind requiredZIP BATCH SPLIT DOCUMENTS W2 BANK_STATEMENT PARSE
status requiredQUEUED PROCESSING COMPLETED FAILED
originalFilename requiredstring,null
pageCount requirednumber
ranges requiredarray of object

Pages found, 1-based and inclusive, with a type and score when classified.

Fields
start requirednumber
end requirednumber
typestring
scorenumber
refused requiredarray of object
Fields
name requiredstring
reason requiredstring
error requiredstring,null
documents requiredarray of object
Fields
id requiredstring
type requiredDocumentType
status requiredDocumentStatus
pageStart requirednumber,null
pageEnd requirednumber,null
createdAt requiredstring
completedAt requiredstring,null

DocumentSetPage

data requiredarray of DocumentSet
nextCursor requiredstring,null

Pass as cursor for the next page. Null on the last one.

ParsedDocument

id requiredstring
status requiredDocumentStatus
markdown requiredstring,null
meta requiredobject or null
Fields
pages requiredarray of object
Fields
index requirednumber
width requirednumber
height requirednumber
blurScore requirednumber,null

Sharpness of a photographed page. Higher is sharper.

ocrScore requirednumber,null
ocrScore requirednumber,null
engine requiredrules claude
tags requiredarray of string
title requiredstring,null
notes requiredstring,null
externalId requiredstring,null
setId requiredstring,null
createdAt requiredstring
boxesarray of object

With details: every recognized line and where it sits.

Fields
text requiredstring
confidence requirednumber
page requirednumber
box requiredtuple or null

ParsedDocumentPage

data requiredarray of ParsedDocument
nextCursor requiredstring,null

Pass as cursor for the next page. Null on the last one.

DocumentUpload

id requiredstring
typeDocumentType
sourceDocumentSource
status requiredstring
originalFilenamestring,null
mimeTypestring
sizeBytesnumber
pageCountnumber
externalIdstring,null
folderIdstring,null
expenseIdstring,null
mailInBatchIdstring,null
titlestring,null
notesstring,null
latitudenumber,null

Where the device said it was when the photo was taken.

longitudenumber,null
locationAccuracyMnumber,null
duplicateOfIdstring,null
processingErrorstring,null
processingErrorCodeFILE_ENCRYPTED or null

Set when the failure is one the file's owner can fix. processingError says what to do.

verificationstring
capturedAtstring,null
processedAtstring,null
viewedAtstring,null
archivedAtstring,null
createdAtstring
uploadedByobject or null
Fields
id requiredstring
name requiredstring,null
pagesarray of object
Fields
index requirednumber
url requiredstring,null
thumbnailUrl requiredstring,null
width requirednumber,null
height requirednumber,null
isBlurry requiredobject
Fields
value requiredboolean,null
score requirednumber,null
glare requiredobject
Fields
value requiredboolean,null
score requirednumber,null
isLcd requiredobject

Blank for a caller without expenses.read_all.

Fields
value requiredboolean,null
score requirednumber,null
screenshot requiredobject or null

Null when the page is not one, and for a caller without expenses.read_all.

Fields
type requiredmobile_screenshot other_screenshot ai_generated
score requirednumber,null
aiGenerated requiredobject

Blank for a caller without expenses.read_all. Value null means nothing could say.

Fields
value requiredboolean,null
score requirednumber,null
language requiredstring,null
languages requiredarray of object
Fields
tag requiredstring
score requirednumber
ocrScore requirednumber,null
isFront requiredboolean,null

A check: the front or the back.

tiffRejectScore requirednumber,null

A check: 0 is a clean clearing image and 1 is one a bank would send back.

tiffUpscaled requiredboolean,null

A check: the photo was under 240 DPI, so the clearing image was enlarged.

classificationobject or null

What the classifier decided, when it was asked.

Fields
value requiredstring

A document class, or one of the labels the caller named.

score requirednumber

0..1.

engine requiredrules claude
scores requiredarray of object

The runners-up, best first.

Fields
value requiredstring
score requirednumber
blueprintobject or null

The blueprint this was read with, and what came out of it.

Fields
name requiredstring
version requirednumber,null

Null for a built-in, which has no versions.

result requiredmap of any or null

The fields the blueprint defines. Null when the run failed.

offsetsmap of object

Where each value sits in the text, for a blueprint that asks.

unmatchedarray of string

Fields where a value was read and did not fit, such as words where a number belongs or a choice off the list. Each is left empty. An empty field not named here was not on the document.

error requiredstring,null

Why the run gave nothing back.

tagsarray of string
tagRefsarray of object

The same tags with their ids, which a tag route takes.

Fields
id requiredstring
name requiredstring
recordStatusprocessed reviewed archived or null

Where a read document stands: reviewedAt and archivedAt in one word. Null until it has been read.

duplicatesarray of object

Near copies past the workspace threshold, best first.

Fields
id requiredstring
url requiredstring
score requirednumber

Percent alike.

setIdstring,null

The upload this came out of: a ZIP, a split PDF or a batch of addresses.

customFieldsmap of string or array of string or null

Values the workspace custom field rules read out of the text.

enrichmentobject or null

Work still running after the first answer.

Fields
status requiredPENDING DONE FAILED
steps requiredarray of duplicates similar_documents line_item_expansion line_item_categorization line_item_custom_categorization xero_line_coding address_parsing fraud rules vendor_resolution
failed requiredarray of duplicates similar_documents line_item_expansion line_item_categorization line_item_custom_categorization xero_line_coding address_parsing fraud rules vendor_resolution
extractionobject or null
Fields
fields requiredobject

What was read, as the extraction contract types it. fieldConfidence holds per-field confidence, 0..1.

Fields
documentTypeDocumentType
merchantNamestring,null
merchantAddressstring,null
merchantPhonestring,null
merchantWebsitestring,null
merchantTaxIdstring,null
datestring or null
timestring,null
dueDatestring or null
currencyAED AFN ALL AMD ANG AOA ARS AUD AWG AZN BAM BBD BDT BGN BHD BIF BMD BND BOB BRL BSD BTN BWP BYN BZD CAD CDF CHF CLP CNY COP CRC CUP CVE CZK DJF DKK DOP DZD EGP ERN ETB EUR FJD FKP GBP GEL GHS GIP GMD GNF GTQ GYD HKD HNL HTG HUF IDR ILS INR IQD IRR ISK JMD JOD JPY KES KGS KHR KMF KPW KRW KWD KYD KZT LAK LBP LKR LRD LSL LYD MAD MDL MGA MKD MMK MNT MOP MRU MUR MVR MWK MXN MYR MZN NAD NGN NIO NOK NPR NZD OMR PAB PEN PGK PHP PKR PLN PYG QAR RON RSD RUB RWF SAR SBD SCR SDG SEK SGD SHP SLE SOS SRD SSP STN SVC SYP SZL THB TJS TMT TND TOP TRY TTD TWD TZS UAH UGX USD UYU UZS VES VND VUV WST XAF XCD XCG XOF XPF YER ZAR ZMW ZWG CUC HRK SLL ZWL XDR XSU or null
currencyGuessedboolean
totalMinorinteger or null
subtotalMinorinteger or null
taxMinorinteger or null
taxLinesarray of object
Fields
namestring,null
ratePctnumber,null
amountMinor requiredinteger
orderinteger or null
baseMinorinteger or null
codestring,null
totalInclusiveboolean,null
tipMinorinteger or null
discountMinorinteger or null
shippingMinorinteger or null
paymentTypePaymentType or null
cardBrandstring,null
cardLast4string,null
receiptNumberstring,null
invoiceNumberstring,null
poNumberstring,null
lineItemsarray of object
Fields
description requiredstring
skustring,null
quantitynumber,null
unitPriceMinorinteger or null
amountMinor requiredinteger
taxMinorinteger or null
idstring,null
orderinteger or null
textstring,null
typeLineItemType or null
fullDescriptionstring,null
normalizedDescriptionstring,null
sectionstring,null
referencestring,null
upcstring,null
hsnstring,null
lotstring,null
tagsarray of string or null
unitOfMeasurestring,null
discountMinorinteger or null
discountRatePctnumber,null
discountPriceMinorinteger or null
taxRatePctnumber,null
taxCodestring,null
subtotalMinorinteger or null
grossTotalMinorinteger or null
netTotalMinorinteger or null
datestring or null
startDatestring or null
endDatestring or null
categorystring,null
customCategoriesarray of string or null
customFieldsmap of any or null
countryOfOriginstring,null
manufacturerstring,null
weightstring,null
brandstring,null
hsaFsaEligibleboolean,null
productInfoobject or null
suggestedCategorystring,null
documentTitlestring,null
documentReferenceNumberstring,null
isDocumentboolean,null
isTransactionboolean,null
isMoneyInboolean,null
accountingEntryTypedebit credit or null
vendorobject or null
Fields
namestring,null
rawNamestring,null
typestring,null
logostring,null
logoNamestring,null
externalIdstring,null
categorystring,null
orderNumberstring,null
countryCodestring,null
addressstring,null
rawAddressstring,null
parsedAddressobject or null
phoneNumberstring,null
faxNumberstring,null
emailstring,null
webstring,null
latnumber,null
lngnumber,null
mapUrlstring,null
vatNumberstring,null
isValidatedVatNumberboolean,null
regNumberstring,null
abnNumberstring,null
isRegisteredForGstboolean,null
bankobject or null
vendorsarray of object or null
Fields
namestring,null
rawNamestring,null
typestring,null
logostring,null
logoNamestring,null
externalIdstring,null
categorystring,null
orderNumberstring,null
countryCodestring,null
addressstring,null
rawAddressstring,null
parsedAddressobject or null
phoneNumberstring,null
faxNumberstring,null
emailstring,null
webstring,null
latnumber,null
lngnumber,null
mapUrlstring,null
vatNumberstring,null
isValidatedVatNumberboolean,null
regNumberstring,null
abnNumberstring,null
isRegisteredForGstboolean,null
bankobject or null
bankBreakdownarray of object or null
Fields
accountNamestring,null
accountNumberstring,null
accountCurrencystring,null
bankNamestring,null
bankNamesarray of string or null
bankAddressstring,null
bankAddressesarray of string or null
bankNumberstring,null
bankNumbersarray of string or null
bankSwiftstring,null
ibanstring,null
billerCodestring,null
billToobject or null
Fields
namestring,null
addressstring,null
parsedAddressobject or null
vatNumberstring,null
regNumberstring,null
phoneNumberstring,null
emailstring,null
shipToobject or null
Fields
namestring,null
addressstring,null
parsedAddressobject or null
insuranceMinorinteger or null
cashbackMinorinteger or null
roundingMinorinteger or null
balanceMinorinteger or null
finalBalanceMinorinteger or null
previousBalanceMinorinteger or null
totalQuantitynumber,null
totalWeightstring,null
paymentobject or null
Fields
cardNumberstring,null
displayNamestring,null
termsstring,null
typePaymentMethod or null
orderDatestring or null
shipDatestring or null
deliveryDatestring or null
serviceStartDatestring or null
serviceEndDatestring or null
exchangeRatenumber,null
countryCodestring,null
deliveryNoteNumberstring,null
trackingNumberstring,null
trackingNumbersarray of string or null
incotermsstring,null
weightsarray of string or null
licensePlateNumberstring,null
vinNumberstring,null
guestCountinteger or null
serverNamestring,null
storeNumberstring,null
vendingPersonstring,null
vendingPersonNumberstring,null
customerAccountNumberstring,null
categorystring,null
defaultCategorystring,null
barcodesarray of object or null
Fields
data requiredstring
type requiredBarcodeType
page requiredinteger
boundingRegionarray of number or null
paymentLinksarray of object or null
Fields
url requiredstring
source requiredtext hyperlink qr_code barcode
folioobject or null
Fields
arrivalDatestring or null
departureDatestring or null
roomNumberstring,null
guestNamestring,null
nightsinteger or null
confirmationNumberstring,null
enrichedFieldsarray of string or null
checkobject or null
Fields
amountMinorinteger or null
amountTextstring,null
amountsAgreeboolean,null
bankNamestring,null
bankAddressstring,null
checkNumberstring,null
checkTypeCheckType or null
currencystring or null
datestring or null
memostring,null
payerNamestring,null
payerAddressstring,null
receiverNamestring,null
receiverAddressstring,null
isSignedboolean,null
endorsementobject or null
microbject or null
fractionalRoutingNumberstring,null
routingFromFractionalstring,null
voidTermsstring,null
statementobject or null
Fields
accountHolderNamestring,null
accountHolderAddressstring,null
accountTypestring,null
accountNumberstring,null
bankNamestring,null
bankAddressstring,null
bankWebsitestring,null
bankVatNumberstring,null
accountVatNumberstring,null
periodStartDatestring or null
periodEndDatestring or null
statementDatestring or null
statementNumberstring,null
currencystring or null
beginningBalanceMinorinteger or null
endingBalanceMinorinteger or null
minimumDueMinorinteger or null
dueDatestring or null
routingNumberstring,null
swiftstring,null
ibanstring,null
accountsarray of object
balancesAgreeboolean,null
taxFormobject or null
Fields
kind requiredTaxFormKind
w2object or null
w9object or null
w8BenEmap of string,boolean,null or null
itineraryobject or null
Fields
travelerNamestring,null
bookingReferencestring,null
originstring,null
destinationstring,null
departsOnstring or null
returnsOnstring or null
segmentsarray of object
fieldConfidencemap of number
fieldBoxesmap of object
confidence requirednumber,null
flags requiredarray of string
warnings requiredarray of object

Integrity findings. A caller without expenses.read_all sees the arithmetic and dates only.

Fields
code requiredIntegrityWarning
message requiredstring
pagenumber,null
fraudDocumentFraud or null
sealedarray of SealedValue

Bank and tax numbers read from this document, as masks. POST /v1/documents/{id}/reveal opens them.

updatedAtstring
extractorstring,null

What read it: rules, claude, a blueprint, business-card, or none.

ocrTextstring,null

Everything read off the page. Card, bank and tax numbers are masked.

pdfUrlstring,null

The PDF as uploaded, signed for 15 minutes. Null for an image, and for a PDF that prints a number only a reveal hands out.

metaDocumentMeta
reviewedAtstring,null

A person checked what was read.

approvedAtstring,null

A developer's own approved flag. An expense's approval is a different thing.

objectdocument_set

Set on the answer to a ZIP, which holds kind, documentIds and refused instead of a document.

kindstring
documentIdsarray of string
refusedarray of object
Fields
name requiredstring
reason requiredstring

InboundEmailPage

data requiredarray of InboundEmail
nextCursor requiredstring,null

Pass as cursor for the next page. Null on the last one.

ExpenseDuplicateGroup

data requiredarray of ExpenseDetail
hidden requirednumber

Copies in the group the caller cannot read.

Workflow

id requiredstring
name requiredstring
enabled requiredboolean
version requirednumber,null

The version that runs. Null until it has been turned on once.

steps requirednumber
lastRunAt requiredstring,null
lastRunStatus requiredRUNNING PAUSED COMPLETED FAILED CANCELLED or null
createdAt requiredstring
updatedAt requiredstring
graph requiredobject
Fields
nodes requiredarray of object
Fields
id requiredstring
type requiredapi_import document_aggregator google_drive_import gmail_input dropbox_import email_collector ai_agent convert_csv convert_excel decision document_classifier email_approval extract_data extract_data_set pdf_splitter split_collector business_insights email_file google_drive dropbox google_sheets xero_export
x requirednumber
y requirednumber
configmap of any
edges requiredarray of object
Fields
id requiredstring
from requiredstring
port requiredstring
to requiredstring
edited requiredboolean

What is on the canvas differs from the version that runs.

triggers requiredarray of WorkflowTrigger
enabledAt requiredstring,null

WorkflowPage

data requiredarray of WorkflowSummary
nextCursor requiredstring,null

Pass as cursor for the next page. Null on the last one.

WorkflowValidation

ok requiredboolean
issues requiredarray of WorkflowIssue

Any of these stops it being turned on.

warnings requiredarray of WorkflowIssue

None of these stops it. A person should know before it runs.

WorkflowRun

id requiredstring
workflowId requiredstring
version requirednumber
status requiredRUNNING PAUSED COMPLETED FAILED CANCELLED
trigger requiredAPI MANUAL SCHEDULE GMAIL GOOGLE_DRIVE DROPBOX EMAIL
startNodeId requiredstring
documents requirednumber
error requiredstring,null
createdAt requiredstring
finishedAt requiredstring,null
steps requiredarray of WorkflowStep

WorkflowRunSummary

id requiredstring
workflowId requiredstring
version requirednumber
status requiredRUNNING PAUSED COMPLETED FAILED CANCELLED
trigger requiredAPI MANUAL SCHEDULE GMAIL GOOGLE_DRIVE DROPBOX EMAIL
startNodeId requiredstring
documents requirednumber
error requiredstring,null
createdAt requiredstring
finishedAt requiredstring,null

WorkflowRunPage

data requiredarray of WorkflowRunSummary
nextCursor requiredstring,null

Pass as cursor for the next page. Null on the last one.

WorkflowApprovalAnswer

applied requiredboolean

False when someone had already answered, or the run has moved on. Nothing changed then.

decision requiredapprove reject or null
state requiredANSWERED CLOSED

Error

error requiredobject
Fields
code requiredstring

Stable. Safe to branch on.

message requiredstring

Written for a person.

detailsany
requestIdstring

Quote this when you contact support.

Attachment

id requiredstring
filename requiredstring
contentType requiredstring
sizeBytes requiredinteger
url requiredstring

A signed link that lasts 15 minutes.

UploadTicket

uploadId requiredstring
method requiredPUT
url requiredstring

Send exactly sizeBytes bytes here, with these headers. It goes straight to storage.

headers requiredmap of string

The signature covers these, so send them exactly.

expiresAt requiredstring

When the URL stops working. If a PUT fails, ask for a new ticket and try once more.

AnalyticsSummary

totalMinor requirednumber
count requirednumber
averageMinor requirednumber
unconverted requirednumber

Expenses with no exchange rate yet. They are not in these totals.

reimbursableMinor requirednumber
billableMinor requirednumber
previous requiredobject
Fields
totalMinor requirednumber
count requirednumber
averageMinor requirednumber
changePct requirednumber,null
from requiredstring
to requiredstring
previousFrom requiredstring
previousTo requiredstring
currency requiredstring

Every amount here is in this currency: the workspace's base, or the one groupCurrency asked for.

convertedFrom requiredstring,null

Set when groupCurrency converted the amounts: the currency they were in, at the latest rate.

Breakdown

dimension requiredmerchant category project member tag department
totalMinor requirednumber
previousTotalMinor requirednumber
averageMinor requirednumber

What one row spends on average in this period, over every row and not only those within limit.

rows requiredarray of BreakdownRow
other requiredobject or null

Everything past limit. Null when every row fits.

Fields
totalMinor requirednumber
count requirednumber
previousMinor requirednumber
overlapping requiredboolean

True for tags: one expense can carry several, so rows can add up to more than the total.

from requiredstring
to requiredstring
previousFrom requiredstring
previousTo requiredstring
currency requiredstring

Every amount here is in this currency: the workspace's base, or the one groupCurrency asked for.

convertedFrom requiredstring,null

Set when groupCurrency converted the amounts: the currency they were in, at the latest rate.

Trend

interval requiredTrendInterval
points requiredarray of TrendPoint
totalMinor requirednumber
count requirednumber
averageMinor requirednumber

What one point spends on average. For a running total, what each step adds on average.

from requiredstring
to requiredstring
previousFrom requiredstring
previousTo requiredstring
currency requiredstring

Every amount here is in this currency: the workspace's base, or the one groupCurrency asked for.

convertedFrom requiredstring,null

Set when groupCurrency converted the amounts: the currency they were in, at the latest rate.

Budget

id requiredstring
scope requiredBudgetScope
targetId requiredstring
targetName requiredstring
period requiredBillingInterval
periodKey requiredstring

2026-03 for a month, 2026 for a fiscal year.

periodStart requiredstring
periodEnd requiredstring
currency requiredstring
totalMinor requirednumber,null
perMemberMinor requirednumber,null
thresholds requiredarray of number
total requiredBudgetStanding or null

Everyone together. Null when the budget has no shared limit.

mine requiredBudgetStanding or null

The caller's own share. Null when they have no limit of their own here.

BudgetPage

data requiredarray of Budget
nextCursor requiredstring,null

Pass as cursor for the next page. Null on the last one.

BulkDocumentResult

updated requirednumber
skipped requirednumber

Not found, not the caller's to change, or backing an expense on a submitted report.

nextCursorstring,null

With a filter: send this back as cursor until it is null.

DocumentCount

count requirednumber

TrashActionResult

updated requirednumber
skipped requirednumber
more requiredboolean

With all: there is more to do. Call again.

TrashedDocumentPage

data requiredarray of TrashedDocument
nextCursor requiredstring,null

Pass as cursor for the next page. Null on the last one.

BulkExpenseResult

updated requirednumber
skipped requirednumber

BulkReportResult

succeeded requiredarray of string
failed requiredarray of object
Fields
id requiredstring
reference requiredstring,null
code requiredstring
message requiredstring

CatalogImportResult

created requirednumber
updated requirednumber
skipped requirednumber

Rows that matched an existing record and changed nothing, or repeated an earlier row.

errors requiredarray of object

Rows that could not be used. line counts from 1 and includes the header.

Fields
line requirednumber
message requiredstring
removednumber

A replace: categories the file left out and nothing used, now deleted.

disablednumber

A replace: categories the file left out that something still uses, now turned off.

Category

id requiredstring
parentId requiredstring,null
name requiredstring
glCode requiredstring,null
taxLine requiredstring,null
origin requiredSYSTEM CUSTOM ACCOUNTING

Where it came from: the workspace template, a person, or an import from the connected books.

deductiblePct requirednumber
headerOnly requiredboolean

A heading over its subcategories. It groups the list and cannot be chosen on an expense.

enabled requiredboolean
system requiredboolean
position requirednumber
expenseCount requirednumber

A category on any expense cannot be deleted, only disabled.

type requiredCategoryType
payrollCode requiredstring,null

Null unless the caller manages settings or exports: payroll codes are not for everyone.

descriptionHint requiredstring,null

Shown under the description while someone fills in an expense.

approverId requiredstring,null

Sees any report carrying this category before the usual approvers.

approverName requiredstring,null
commentRequired requiredboolean

An expense here needs a description, or it carries a finding on its report.

maxExpenseMinor requirednumber,null

An expense here over this, in the workspace's currency, carries a finding on its report.

CategoryPage

data requiredarray of Category
nextCursor requiredstring,null

Pass as cursor for the next page. Null on the last one.

Comment

id requiredstring
body requiredstring
attachments requiredarray of Attachment
editedAt requiredstring,null
author requiredReportPerson
systemboolean

PaperTotal wrote this, about something that happened to the report.

actedBy requiredReportPerson or null

The delegate who really wrote it, when that was not the author.

mentions requiredarray of ReportPerson
createdAt requiredstring

CommentPage

data requiredarray of Comment
nextCursor requiredstring,null

Pass as cursor for the next page. Null on the last one.

CreatedId

id requiredstring

PostedComment

id requiredstring
body requiredstring
attachments requiredarray of Attachment
editedAt requiredstring,null
author requiredReportPerson
systemboolean

PaperTotal wrote this, about something that happened to the report.

actedBy requiredReportPerson or null

The delegate who really wrote it, when that was not the author.

mentions requiredarray of ReportPerson
createdAt requiredstring
unreachable requiredarray of ReportPerson

Members the comment named who cannot read this, so were not mentioned or told.

MentionablePeople

data requiredarray of ReportPerson

Contact

id requiredstring
name requiredstring

Always something to show: the name, else the company, else the first address or number.

firstName requiredstring,null
lastName requiredstring,null
company requiredstring,null
title requiredstring,null
emails requiredarray of string
phones requiredarray of string
mobile requiredstring,null
fax requiredstring,null
website requiredstring,null
address requiredstring,null
city requiredstring,null
region requiredstring,null
postalCode requiredstring,null
country requiredstring,null
notes requiredstring,null
editedFields requiredarray of string

Fields a person changed, which reading the card again leaves alone.

documentId requiredstring,null
logoUrl requiredstring,null

The logo cut from the card, signed for 15 minutes. It stays when the card is deleted.

faxes requiredarray of string

Every fax number on the card, the first being fax.

cardImageUrl requiredstring,null
thumbnailUrl requiredstring,null
createdAt requiredstring
updatedAt requiredstring

ContactPage

data requiredarray of Contact
nextCursor requiredstring,null

Pass as cursor for the next page. Null on the last one.

CustomField

id requiredstring
key requiredstring
label requiredstring
type requiredTEXT NUMBER DATE SELECT BOOLEAN
options requiredarray of string
required requiredboolean
position requirednumber

CustomFieldPage

data requiredarray of CustomField
nextCursor requiredstring,null

Pass as cursor for the next page. Null on the last one.

DeviceBlock

id requiredstring
deviceId requiredstring
reason requiredstring,null
createdAt requiredstring

DeviceBlockPage

data requiredarray of DeviceBlock
nextCursor requiredstring,null

Pass as cursor for the next page. Null on the last one.

DeviceBlockStatus

deviceId requiredstring
blocked requiredboolean
block requiredDeviceBlock or null

MyDeviceStatus

deviceId requiredstring
blocked requiredboolean

Document

id requiredstring
type requiredDocumentType
source requiredDocumentSource
status requiredDocumentStatus
originalFilename requiredstring,null
mimeType requiredstring
sizeBytes requirednumber
pageCount requirednumber
externalId requiredstring,null
folderId requiredstring,null
expenseId requiredstring,null
mailInBatchId requiredstring,null
title requiredstring,null
notes requiredstring,null
latitude requirednumber,null

Where the device said it was when the photo was taken.

longitude requirednumber,null
locationAccuracyM requirednumber,null
duplicateOfId requiredstring,null
processingError requiredstring,null
processingErrorCode requiredFILE_ENCRYPTED or null

Set when the failure is one the file's owner can fix. processingError says what to do.

verification requiredstring
capturedAt requiredstring,null
processedAt requiredstring,null
viewedAt requiredstring,null
archivedAt requiredstring,null
createdAt requiredstring
uploadedBy requiredobject or null
Fields
id requiredstring
name requiredstring,null
pages requiredarray of object
Fields
index requirednumber
url requiredstring,null
thumbnailUrl requiredstring,null
width requirednumber,null
height requirednumber,null
isBlurry requiredobject
Fields
value requiredboolean,null
score requirednumber,null
glare requiredobject
Fields
value requiredboolean,null
score requirednumber,null
isLcd requiredobject

Blank for a caller without expenses.read_all.

Fields
value requiredboolean,null
score requirednumber,null
screenshot requiredobject or null

Null when the page is not one, and for a caller without expenses.read_all.

Fields
type requiredmobile_screenshot other_screenshot ai_generated
score requirednumber,null
aiGenerated requiredobject

Blank for a caller without expenses.read_all. Value null means nothing could say.

Fields
value requiredboolean,null
score requirednumber,null
language requiredstring,null
languages requiredarray of object
Fields
tag requiredstring
score requirednumber
ocrScore requirednumber,null
isFront requiredboolean,null

A check: the front or the back.

tiffRejectScore requirednumber,null

A check: 0 is a clean clearing image and 1 is one a bank would send back.

tiffUpscaled requiredboolean,null

A check: the photo was under 240 DPI, so the clearing image was enlarged.

classification requiredobject or null

What the classifier decided, when it was asked.

Fields
value requiredstring

A document class, or one of the labels the caller named.

score requirednumber

0..1.

engine requiredrules claude
scores requiredarray of object

The runners-up, best first.

Fields
value requiredstring
score requirednumber
blueprint requiredobject or null

The blueprint this was read with, and what came out of it.

Fields
name requiredstring
version requirednumber,null

Null for a built-in, which has no versions.

result requiredmap of any or null

The fields the blueprint defines. Null when the run failed.

offsetsmap of object

Where each value sits in the text, for a blueprint that asks.

unmatchedarray of string

Fields where a value was read and did not fit, such as words where a number belongs or a choice off the list. Each is left empty. An empty field not named here was not on the document.

error requiredstring,null

Why the run gave nothing back.

tags requiredarray of string
tagRefs requiredarray of object

The same tags with their ids, which a tag route takes.

Fields
id requiredstring
name requiredstring
recordStatus requiredprocessed reviewed archived or null

Where a read document stands: reviewedAt and archivedAt in one word. Null until it has been read.

duplicates requiredarray of object

Near copies past the workspace threshold, best first.

Fields
id requiredstring
url requiredstring
score requirednumber

Percent alike.

setId requiredstring,null

The upload this came out of: a ZIP, a split PDF or a batch of addresses.

customFields requiredmap of string or array of string or null

Values the workspace custom field rules read out of the text.

enrichment requiredobject or null

Work still running after the first answer.

Fields
status requiredPENDING DONE FAILED
steps requiredarray of duplicates similar_documents line_item_expansion line_item_categorization line_item_custom_categorization xero_line_coding address_parsing fraud rules vendor_resolution
failed requiredarray of duplicates similar_documents line_item_expansion line_item_categorization line_item_custom_categorization xero_line_coding address_parsing fraud rules vendor_resolution
extraction requiredobject or null
Fields
fields requiredobject

What was read, as the extraction contract types it. fieldConfidence holds per-field confidence, 0..1.

Fields
documentTypeDocumentType
merchantNamestring,null
merchantAddressstring,null
merchantPhonestring,null
merchantWebsitestring,null
merchantTaxIdstring,null
datestring or null
timestring,null
dueDatestring or null
currencyAED AFN ALL AMD ANG AOA ARS AUD AWG AZN BAM BBD BDT BGN BHD BIF BMD BND BOB BRL BSD BTN BWP BYN BZD CAD CDF CHF CLP CNY COP CRC CUP CVE CZK DJF DKK DOP DZD EGP ERN ETB EUR FJD FKP GBP GEL GHS GIP GMD GNF GTQ GYD HKD HNL HTG HUF IDR ILS INR IQD IRR ISK JMD JOD JPY KES KGS KHR KMF KPW KRW KWD KYD KZT LAK LBP LKR LRD LSL LYD MAD MDL MGA MKD MMK MNT MOP MRU MUR MVR MWK MXN MYR MZN NAD NGN NIO NOK NPR NZD OMR PAB PEN PGK PHP PKR PLN PYG QAR RON RSD RUB RWF SAR SBD SCR SDG SEK SGD SHP SLE SOS SRD SSP STN SVC SYP SZL THB TJS TMT TND TOP TRY TTD TWD TZS UAH UGX USD UYU UZS VES VND VUV WST XAF XCD XCG XOF XPF YER ZAR ZMW ZWG CUC HRK SLL ZWL XDR XSU or null
currencyGuessedboolean
totalMinorinteger or null
subtotalMinorinteger or null
taxMinorinteger or null
taxLinesarray of object
Fields
namestring,null
ratePctnumber,null
amountMinor requiredinteger
orderinteger or null
baseMinorinteger or null
codestring,null
totalInclusiveboolean,null
tipMinorinteger or null
discountMinorinteger or null
shippingMinorinteger or null
paymentTypePaymentType or null
cardBrandstring,null
cardLast4string,null
receiptNumberstring,null
invoiceNumberstring,null
poNumberstring,null
lineItemsarray of object
Fields
description requiredstring
skustring,null
quantitynumber,null
unitPriceMinorinteger or null
amountMinor requiredinteger
taxMinorinteger or null
idstring,null
orderinteger or null
textstring,null
typeLineItemType or null
fullDescriptionstring,null
normalizedDescriptionstring,null
sectionstring,null
referencestring,null
upcstring,null
hsnstring,null
lotstring,null
tagsarray of string or null
unitOfMeasurestring,null
discountMinorinteger or null
discountRatePctnumber,null
discountPriceMinorinteger or null
taxRatePctnumber,null
taxCodestring,null
subtotalMinorinteger or null
grossTotalMinorinteger or null
netTotalMinorinteger or null
datestring or null
startDatestring or null
endDatestring or null
categorystring,null
customCategoriesarray of string or null
customFieldsmap of any or null
countryOfOriginstring,null
manufacturerstring,null
weightstring,null
brandstring,null
hsaFsaEligibleboolean,null
productInfoobject or null
suggestedCategorystring,null
documentTitlestring,null
documentReferenceNumberstring,null
isDocumentboolean,null
isTransactionboolean,null
isMoneyInboolean,null
accountingEntryTypedebit credit or null
vendorobject or null
Fields
namestring,null
rawNamestring,null
typestring,null
logostring,null
logoNamestring,null
externalIdstring,null
categorystring,null
orderNumberstring,null
countryCodestring,null
addressstring,null
rawAddressstring,null
parsedAddressobject or null
phoneNumberstring,null
faxNumberstring,null
emailstring,null
webstring,null
latnumber,null
lngnumber,null
mapUrlstring,null
vatNumberstring,null
isValidatedVatNumberboolean,null
regNumberstring,null
abnNumberstring,null
isRegisteredForGstboolean,null
bankobject or null
vendorsarray of object or null
Fields
namestring,null
rawNamestring,null
typestring,null
logostring,null
logoNamestring,null
externalIdstring,null
categorystring,null
orderNumberstring,null
countryCodestring,null
addressstring,null
rawAddressstring,null
parsedAddressobject or null
phoneNumberstring,null
faxNumberstring,null
emailstring,null
webstring,null
latnumber,null
lngnumber,null
mapUrlstring,null
vatNumberstring,null
isValidatedVatNumberboolean,null
regNumberstring,null
abnNumberstring,null
isRegisteredForGstboolean,null
bankobject or null
bankBreakdownarray of object or null
Fields
accountNamestring,null
accountNumberstring,null
accountCurrencystring,null
bankNamestring,null
bankNamesarray of string or null
bankAddressstring,null
bankAddressesarray of string or null
bankNumberstring,null
bankNumbersarray of string or null
bankSwiftstring,null
ibanstring,null
billerCodestring,null
billToobject or null
Fields
namestring,null
addressstring,null
parsedAddressobject or null
vatNumberstring,null
regNumberstring,null
phoneNumberstring,null
emailstring,null
shipToobject or null
Fields
namestring,null
addressstring,null
parsedAddressobject or null
insuranceMinorinteger or null
cashbackMinorinteger or null
roundingMinorinteger or null
balanceMinorinteger or null
finalBalanceMinorinteger or null
previousBalanceMinorinteger or null
totalQuantitynumber,null
totalWeightstring,null
paymentobject or null
Fields
cardNumberstring,null
displayNamestring,null
termsstring,null
typePaymentMethod or null
orderDatestring or null
shipDatestring or null
deliveryDatestring or null
serviceStartDatestring or null
serviceEndDatestring or null
exchangeRatenumber,null
countryCodestring,null
deliveryNoteNumberstring,null
trackingNumberstring,null
trackingNumbersarray of string or null
incotermsstring,null
weightsarray of string or null
licensePlateNumberstring,null
vinNumberstring,null
guestCountinteger or null
serverNamestring,null
storeNumberstring,null
vendingPersonstring,null
vendingPersonNumberstring,null
customerAccountNumberstring,null
categorystring,null
defaultCategorystring,null
barcodesarray of object or null
Fields
data requiredstring
type requiredBarcodeType
page requiredinteger
boundingRegionarray of number or null
paymentLinksarray of object or null
Fields
url requiredstring
source requiredtext hyperlink qr_code barcode
folioobject or null
Fields
arrivalDatestring or null
departureDatestring or null
roomNumberstring,null
guestNamestring,null
nightsinteger or null
confirmationNumberstring,null
enrichedFieldsarray of string or null
checkobject or null
Fields
amountMinorinteger or null
amountTextstring,null
amountsAgreeboolean,null
bankNamestring,null
bankAddressstring,null
checkNumberstring,null
checkTypeCheckType or null
currencystring or null
datestring or null
memostring,null
payerNamestring,null
payerAddressstring,null
receiverNamestring,null
receiverAddressstring,null
isSignedboolean,null
endorsementobject or null
microbject or null
fractionalRoutingNumberstring,null
routingFromFractionalstring,null
voidTermsstring,null
statementobject or null
Fields
accountHolderNamestring,null
accountHolderAddressstring,null
accountTypestring,null
accountNumberstring,null
bankNamestring,null
bankAddressstring,null
bankWebsitestring,null
bankVatNumberstring,null
accountVatNumberstring,null
periodStartDatestring or null
periodEndDatestring or null
statementDatestring or null
statementNumberstring,null
currencystring or null
beginningBalanceMinorinteger or null
endingBalanceMinorinteger or null
minimumDueMinorinteger or null
dueDatestring or null
routingNumberstring,null
swiftstring,null
ibanstring,null
accountsarray of object
balancesAgreeboolean,null
taxFormobject or null
Fields
kind requiredTaxFormKind
w2object or null
w9object or null
w8BenEmap of string,boolean,null or null
itineraryobject or null
Fields
travelerNamestring,null
bookingReferencestring,null
originstring,null
destinationstring,null
departsOnstring or null
returnsOnstring or null
segmentsarray of object
fieldConfidencemap of number
fieldBoxesmap of object
confidence requirednumber,null
flags requiredarray of string
warnings requiredarray of object

Integrity findings. A caller without expenses.read_all sees the arithmetic and dates only.

Fields
code requiredIntegrityWarning
message requiredstring
pagenumber,null
fraud requiredDocumentFraud or null
sealed requiredarray of SealedValue

Bank and tax numbers read from this document, as masks. POST /v1/documents/{id}/reveal opens them.

updatedAt requiredstring
extractor requiredstring,null

What read it: rules, claude, a blueprint, business-card, or none.

ocrText requiredstring,null

Everything read off the page. Card, bank and tax numbers are masked.

pdfUrl requiredstring,null

The PDF as uploaded, signed for 15 minutes. Null for an image, and for a PDF that prints a number only a reveal hands out.

meta requiredDocumentMeta
reviewedAt requiredstring,null

A person checked what was read.

approvedAt requiredstring,null

A developer's own approved flag. An expense's approval is a different thing.

DocumentOriginal

url requiredstring

Signed for 15 minutes. Opening it downloads the file as uploaded.

filename requiredstring
mimeType requiredstring

RevealedDocument

documentId requiredstring
values requiredarray of object
Fields
kind requiredSensitiveKind
masked requiredstring

All but the last few characters are stars. Punctuation stays where it was.

field requiredstring,null
page requirednumber
id requiredstring
value requiredstring

The whole number. Never log or store this.

original requiredobject or null
Fields
url requiredstring

Signed for 15 minutes.

filename requiredstring
mimeType requiredstring
pages requiredarray of object
Fields
index requirednumber
tiffUrl requiredstring,null

A check only: 240 DPI bitonal G4. It prints the MICR line, so it is handed out here and nowhere else.

CheckWithDocument

check requiredDocument
document requiredDocument

DocumentText

text requiredstring,null

Everything recognized on the document. Card numbers are already masked.

language requiredstring,null

DownloadableFile

filename requiredstring
contentType requiredstring
content requiredstring

ExpenseDetail

id requiredstring
number requirednumber
reference requiredstring
status requiredExpenseStatus
kind requiredExpenseKind
merchantName requiredstring,null
tripTitle requiredstring,null

For a trip, what to call it in a list.

description requiredstring,null
date requiredstring
currency requiredstring
amountMinor requirednumber
baseAmountMinor requirednumber
taxMinor requirednumber,null
category requiredobject or null
Fields
id requiredstring
name requiredstring
alsoCategories requiredarray of object

Further categories it can be found under. Its money stays in category.

Fields
id requiredstring
name requiredstring
project requiredobject or null
Fields
id requiredstring
name requiredstring
code requiredstring,null
client requiredobject or null
Fields
id requiredstring
name requiredstring
owner requiredobject
Fields
id requiredstring
name requiredstring,null
email requiredstring
moneyFlow requiredIN OUT

Which way the money went.

invoiceNumber requiredstring,null
matched requiredboolean

A card charge has been matched to it.

connectedApps requiredarray of string

Connected services it has been posted to.

reportId requiredstring,null
externalId requiredstring,null

A developer's own reference, exactly as sent.

billable requiredboolean
reimbursable requiredboolean
paymentType requiredPaymentType or null
confidence requirednumber,null
flags requiredarray of ExpenseFlag
reviewFields requiredarray of string
thumbnailUrl requiredstring,null
documentId requiredstring,null
tags requiredarray of object
Fields
id requiredstring
name requiredstring
color requiredstring,null
attendeeCount requirednumber
fxRate requirednumber

What one unit of the expense currency is worth in the base currency. Zero means no rate is available yet, so baseAmountMinor is zero too and the expense is held in review.

held requiredboolean

Held back from its report until someone releases it.

createdAt requiredstring
updatedAt requiredstring
notes requiredstring,null
subtotalMinor requirednumber,null
tipMinor requirednumber,null
discountMinor requirednumber,null
shippingMinor requirednumber,null
paymentAccountId requiredstring,null
cardLast4 requiredstring,null
poNumber requiredstring,null

The buyer's purchase order number, as an invoice prints it.

dueDate requiredstring,null

When an invoice falls due.

mcc requiredstring,null

The merchant category code a card network gave the merchant, four digits.

taxDeductible requiredboolean
quantity requirednumber,null
rateMinor requirednumber,null
unit requiredstring,null
trip requiredmap of any or null
vehicleId requiredstring,null
attendees requiredarray of object
Fields
name requiredstring
emailstring
phonestring
customFields requiredmap of any
editedFields requiredarray of string
duplicateOfId requiredstring,null
duplicateReview requiredobject or null

What the second look at a flagged copy decided, and why.

Fields
outcome requiredDISMISSED KEPT
reason requiredstring
engine requiredrules claude
at requiredstring
canSettleDuplicate requiredboolean

Whether the caller can answer the duplicate question on this expense.

splitParentId requiredstring,null
access requiredExpenseAccess

What the caller may do with it.

splitInto requiredarray of object

This expense was divided: its parts now count in its place.

Fields
id requiredstring
reference requiredstring
amountMinor requirednumber
mergedIntoId requiredstring,null

A merge absorbed this expense. Where it went.

report requiredobject or null

The report this expense is on, named even where the caller could not list it.

Fields
id requiredstring
title requiredstring
status requiredstring
lines requiredarray of ExpenseLine
documentIds requiredarray of string

ExpensePage

data requiredarray of ExpenseSummary
nextCursor requiredstring,null

Pass as cursor for the next page. Null on the last one.

ExpenseTotals

count requirednumber
moneyOutMinor requirednumber

Money out, in the base currency.

moneyInMinor requirednumber

Money in, in the base currency: income, refunds and credits, as a positive figure.

baseAmountMinor requirednumber

In the workspace's base currency. A credit or a refund is negative, so it brings this down.

currency requiredstring
unconverted requirednumber

Counted, but with no exchange rate yet, so they add nothing to the amount.

totalMinor requirednumber

baseAmountMinor in the currency asked for.

totalCurrency requiredstring
convertedFrom requiredstring,null

Set when totalCurrency is not the base: the currency it was converted from, at the latest rate.

ExportJob

id requiredstring
kind requiredExportKind
format requiredExportFormat
status requiredEXPIRED FAILED COMPLETED QUEUED RUNNING
filters requiredExportFilters
filename requiredstring,null
rowCount requirednumber,null
error requiredstring,null

Why it failed, written for a person.

notes requiredarray of string

What a finished file left out, such as credits a bill import cannot take.

requestedBy requiredobject
Fields
id requiredstring
name requiredstring,null
email requiredstring
onFinish requiredExportFinish or null

How the actions the export asked for went. Null when it asked for none.

createdAt requiredstring
completedAt requiredstring,null
expiresAt requiredstring,null
downloadUrl requiredstring,null

Signed, valid for 15 minutes. Null until the file is ready and after it expires.

ExportJobPage

data requiredarray of ExportJob
nextCursor requiredstring,null

Pass as cursor for the next page. Null on the last one.

Folder

id requiredstring
parentId requiredstring,null
name requiredstring
documentCount requirednumber

FolderPage

data requiredarray of Folder
nextCursor requiredstring,null

Pass as cursor for the next page. Null on the last one.

Hold

id requiredstring
held requiredboolean
flags requiredarray of ExpenseFlag

Reached

reached requiredarray of string

Who can read it now and has been told.

Merchant

id requiredstring
name requiredstring
defaultCategoryId requiredstring,null
website requiredstring,null
phone requiredstring,null
address requiredstring,null
taxId requiredstring,null
is1099 requiredboolean
merchantType requiredairline lodging car_rental ground_transport fuel dining grocery office software utilities supplies other or null

What kind of business this is. Null lets a rule work it out from the card code or the name.

expenseCount requirednumber
totalMinor requirednumber

Non-void expenses, in the workspace's base currency.

aliases requiredarray of object

Other spellings that file here: left by a merge or a rename.

Fields
id requiredstring
name requiredstring

MerchantPage

data requiredarray of Merchant
nextCursor requiredstring,null

Pass as cursor for the next page. Null on the last one.

MileageLog

from requiredstring
to requiredstring
rows requiredarray of Trip
currency requiredstring
totals requiredobject
Fields
trips requirednumber
amountMinor requirednumber
distances requiredarray of object
Fields
unit requiredstring
distance requirednumber
months requiredarray of MileageLogMonth
tally requiredobject or null

Where the person stands against a yearly limit, for a rate that drops after it.

Fields
year requirednumber
distance requirednumber
limit requirednumber
unit requiredstring
remaining requirednumber

MileageRate

id requiredstring
name requiredstring
unit requiredmi km
rateMinor requirednumber

A hundredth of a cent per unit, so 72.5 cents is 7250.

currency requiredstring
effectiveFrom requiredstring
effectiveTo requiredstring,null

The last day this rate covers. Null runs until a newer rate of the same name.

isDefault requiredboolean
archived requiredboolean
taxBasisPoints requirednumber,null

Tax on the reclaimable part, in hundredths of a percent. 2000 is 20%. Used while the workspace tracks tax on distance.

taxReclaimableMinor requirednumber,null

The fixed part of this rate tax can be reclaimed on, at the same scale as rateMinor.

autoGenerated requiredboolean

The government-rate job added this row, and no admin has changed its amount, start or end.

MileageRatePage

data requiredarray of MileageRate
nextCursor requiredstring,null

Pass as cursor for the next page. Null on the last one.

PerDiemRate

id requiredstring
name requiredstring
country requiredstring,null
region requiredstring,null
amountMinor requirednumber
currency requiredstring
archived requiredboolean

PerDiemRatePage

data requiredarray of PerDiemRate
nextCursor requiredstring,null

Pass as cursor for the next page. Null on the last one.

Project

id requiredstring
name requiredstring
code requiredstring,null
clientId requiredstring,null
clientName requiredstring,null
budgetMinor requirednumber,null
spentMinor requirednumber

Non-void expenses, in the workspace's base currency.

expenseCount requirednumber
archived requiredboolean

ProjectPage

data requiredarray of Project
nextCursor requiredstring,null

Pass as cursor for the next page. Null on the last one.

ReportDetail

purpose requiredstring,null
rejectionReason requiredstring,null
rejectedAt requiredstring,null
reimbursedAt requiredstring,null
exportedAt requiredstring,null
expenses requiredarray of ExpenseSummary
findings requiredarray of PolicyFinding
approvals requiredarray of ApprovalStep
participants requiredarray of ReportPerson

People added to the report. They can read it and comment, nothing more.

fields requiredarray of ReportFieldValue
titleLocked requiredboolean

True when a title typed here would be refused: the workspace's formula sets it.

noApprovalStep requiredboolean

Submitting needs nobody's approval, so it finishes the report.

exportable requiredboolean

This person can export this report or share it. Someone added only to read and comment cannot.

ccEmails requiredarray of string

Addresses outside the workspace copied on each submission.

canPickApprover requiredboolean

A draft whose workflow leaves the next approver open, so the person submitting can name one.

canSendOutside requiredboolean

A draft in a workspace with nobody else to approve it, which can go to someone outside instead.

outsideApprover requiredobject or null

Someone with no account has this report, through a link. A null email is a link that went out on a PDF.

Fields
email requiredstring,null
expiresAt requiredstring
expenseColumns requiredmap of object

What the expense table's optional columns read, by expense id.

customFieldLabels requiredobject

The workspace's first two custom fields, which the Custom field 1 and 2 columns show.

Fields
first requiredstring,null
second requiredstring,null
withdrawalId requiredstring,null

The batch that pays this report.

internationalReimbursementId requiredstring,null

The same, where the batch pays in another currency than the workspace's.

final requiredboolean

Nothing more is due: paid, or approved with nothing to pay, or done.

findingsAccepted requiredobject or null

Someone has reviewed and accepted what the receipt checks found.

Fields
by requiredReportPerson or null
at requiredstring
auditNote requiredstring,null

What the receipt audit did on this report, on a plan that has it. There even when it found nothing.

needsAcceptance requiredboolean

Receipt checks found something, and approving this report has to wait for someone to accept it.

timeline requiredarray of ReportTimelineEntry
heldExpenseIds requiredarray of string
actions requiredarray of delete approve submit retract reject reopen close mark_exported mark_reimbursed edit reassign duplicate invite accept_findings received_payment
selfApproval requiredboolean

True when the caller's approval would be a self-approval the workspace allows.

deciding requiredboolean

The caller holds a step that is live now, for themselves or as a delegate. Without one, a workspace admin has to bypass.

id requiredstring
number requirednumber
reference requiredstring
title requiredstring
status requiredReportStatus
stage requiredDRAFT SUBMITTED OUTSTANDING APPROVED REJECTED PAID EXPORTED DONE
paymentStage requiredMARKED_AS_PAID WITHDRAWING CONFIRMED or null
owner requiredReportPerson
currency requiredstring
totalMinor requirednumber
reimbursableMinor requirednumber
expenseCount requirednumber
findingCount requirednumber
periodStart requiredstring,null
periodEnd requiredstring,null
autoCreated requiredboolean
waitingOn requiredarray of ReportPerson

Who the report is with right now.

submittedAt requiredstring,null
approvedAt requiredstring,null
createdAt requiredstring
updatedAt requiredstring

ReportPage

data requiredarray of ReportSummary
nextCursor requiredstring,null

Pass as cursor for the next page. Null on the last one.

Tag

id requiredstring
name requiredstring
groupName requiredstring,null
glCode requiredstring,null
color requiredstring,null
archived requiredboolean
expenseCount requirednumber
approverId requiredstring,null

Reviews any report carrying this tag, after any category approvers and ahead of the workflow.

approverName requiredstring,null
parentId requiredstring,null

The tag this one sits under. An expense carrying this one has to carry that one too.

parentName requiredstring,null

TagPage

data requiredarray of Tag
nextCursor requiredstring,null

Pass as cursor for the next page. Null on the last one.

TaxSummary

year requirednumber
from requiredstring
to requiredstring
fiscalYearStartMonth requirednumber
currency requiredstring
notice requiredstring
mileageNotice requiredstring
lines requiredarray of TaxLine
mileage requiredarray of TaxMileage
unassigned requiredobject

Spending on a category with no tax line, or on no category.

Fields
count requirednumber
spentMinor requirednumber
excluded requiredobject

Expenses a person marked as not deductible.

Fields
count requirednumber
spentMinor requirednumber
payees requiredobject

1099s follow the calendar year whatever the fiscal year, so this has its own dates.

Fields
from requiredstring
to requiredstring
rows requiredarray of TaxPayee
needsReview requirednumber

Counted above, but a person has not confirmed them yet.

unconverted requirednumber

Expenses with no exchange rate yet. They are not in these figures.

spentMinor requirednumber
deductibleMinor requirednumber

TravelTrip

id requiredstring
ownerId requiredstring
name requiredstring
origin requiredstring,null
destination requiredstring,null
departsOn requiredstring

YYYY-MM-DD.

returnsOn requiredstring,null

YYYY-MM-DD.

merchantName requiredstring,null
bookingReference requiredstring,null
currency requiredstring,null
totalMinor requirednumber,null

In minor units of the currency: 1250 is 12.50.

segments requiredarray of object

Flights, stays, cars and trains, in order.

Fields
kind requiredflight hotel car rail other
carrierstring,null
numberstring,null
fromstring,null
tostring,null
departsAtstring,null
arrivesAtstring,null
confirmationNumberstring,null
seatstring,null
documentIds requiredarray of string

The itinerary and the receipts filed against this trip.

createdAt requiredstring
updatedAt requiredstring

TravelTripPage

data requiredarray of TravelTrip
nextCursor requiredstring,null

Pass as cursor for the next page. Null on the last one.

Trip

expenseId requiredstring
reference requiredstring
status requiredstring
owner requiredMoneyPerson
date requiredstring
purpose requiredstring
origin requiredstring
stops requiredarray of string

Places along the way.

destination requiredstring
originLabel requiredstring,null

The name of a saved place at this address, such as Home.

destinationLabel requiredstring,null
departed requiredstring,null

HH:MM.

arrived requiredstring,null

HH:MM.

distance requirednumber
unit requiredstring
calculation requiredstring

How the amount was reached: 8.1 mi x $0.76/mi = $6.16.

purposeKind requiredbusiness medical charity

What the trip was for, by the rate it took.

roundTrip requiredboolean
odometerStart requirednumber,null
odometerEnd requirednumber,null
odometerPhotos requiredobject

Documents holding a photo of each reading, and the one image they are merged into.

Fields
start requiredstring,null
end requiredstring,null
merged requiredstring,null
receiptDocumentId requiredstring,null

The generated mileage receipt.

vehicle requiredobject or null
Fields
id requiredstring
name requiredstring
plate requiredstring,null
rateMinor requirednumber

A hundredth of a cent per unit.

rateName requiredstring,null
amountMinor requirednumber
currency requiredstring
entry requiredMANUAL ODOMETER MAP GPS

How the distance came to be known. Only MAP and GPS were measured.

driven requirednumber

The whole drive. distance is what is claimed, which is less when a commute came off it.

commuteExcluded requirednumber,null

The commute taken off this trip, or null if none was.

taxMinor requirednumber,null

The tax on this trip, when its workspace tracks tax on distance.

TripRoutes

array of TripRoute

ExpenseDetails

array of ExpenseDetail

ReportSubmittedViaPdf

report requiredReportDetail
exportJobId requiredstring

The export making the PDF. Its download is ready when the job is.

Vehicle

id requiredstring
userId requiredstring
ownerName requiredstring,null
name requiredstring
plate requiredstring,null
archived requiredboolean
expenseCount requirednumber

VehiclePage

data requiredarray of Vehicle
nextCursor requiredstring,null

Pass as cursor for the next page. Null on the last one.

ApiKeyVerification

id requiredstring
name requiredstring
prefix requiredstring

The first characters of the key.

kind requiredPERSONAL WORKSPACE

PERSONAL acts as the person who made it and ends when they leave. WORKSPACE belongs to the workspace and outlives them.

environment requiredLIVE TEST
workspaceId requiredstring
scopes requiredarray of string

Every scope this key holds right now.

fullAccess requiredboolean

Every scope, present and future.

role requiredstring

The role its reach is measured against: a scope opens a route, and the role decides what the route may do.

signingRequired requiredboolean

A request with no valid signature is refused.

expiresAt requiredstring,null

ClientCertificate

id requiredstring
name requiredstring
fingerprint requiredstring

SHA-256 of the certificate, lowercase hex.

subject requiredstring,null
notAfter requiredstring,null
revokedAt requiredstring,null
createdAt requiredstring

ClientCertificatePage

data requiredarray of ClientCertificate
nextCursor requiredstring,null

Pass as cursor for the next page. Null on the last one.

ReleaseNotePage

data requiredarray of ReleaseNote
nextCursor requiredstring,null

Pass as cursor for the next page. Null on the last one.

WebhookDelivery

id requiredstring
endpointId requiredstring
eventId requiredstring
eventType requiredstring
state requiredFAILED PENDING DELIVERED ABANDONED
attempts requirednumber
responseStatus requirednumber,null
responseBody requiredstring,null
nextAttemptAt requiredstring,null
deliveredAt requiredstring,null
createdAt requiredstring
payload requiredany

WebhookDeliveryPage

data requiredarray of WebhookDelivery
nextCursor requiredstring,null

Pass as cursor for the next page. Null on the last one.

WebhookEndpoint

status requiredPENDING CONFIRMED

PENDING receives the subscription event and nothing else, until POST /v1/webhooks/confirm.

pendingUntil requiredstring,null

A pending endpoint not confirmed by then is deleted.

confirmedAt requiredstring,null
apiKeyId requiredstring,null

Set when this endpoint belongs to one API key rather than the workspace.

id requiredstring
url requiredstring
description requiredstring,null
events requiredarray of string
enabled requiredboolean
failureCount requirednumber
disabledAt requiredstring,null

Set while the endpoint is off.

createdAt requiredstring

WebhookEndpointPage

data requiredarray of WebhookEndpoint
nextCursor requiredstring,null

Pass as cursor for the next page. Null on the last one.

WebhookEndpointWithSecret

status requiredPENDING CONFIRMED

PENDING receives the subscription event and nothing else, until POST /v1/webhooks/confirm.

pendingUntil requiredstring,null

A pending endpoint not confirmed by then is deleted.

confirmedAt requiredstring,null
apiKeyId requiredstring,null

Set when this endpoint belongs to one API key rather than the workspace.

secret requiredstring
id requiredstring
url requiredstring
description requiredstring,null
events requiredarray of string
enabled requiredboolean
failureCount requirednumber
disabledAt requiredstring,null

Set while the endpoint is off.

createdAt requiredstring

WebhookEventPayload

id requiredstring

Stable across retries, so a repeat can be ignored.

type requiredstring
createdAt requiredstring
data requiredmap of any

AccountingRow

kind requiredreport expense transaction
id requiredstring
expenseId requiredstring,null

The expense behind a card line, when there is one.

reference requiredstring,null
title requiredstring
person requiredstring,null
account requiredstring,null
date requiredstring

The date the shortcut goes by.

status requiredstring
amountMinor requirednumber
currency requiredstring
baseAmountMinor requirednumber

In the workspace's base currency, so a footer can add it up.

expenses requirednumber,null

How many expenses a report holds. Null on anything else.

statement requiredobject or null

Card statements: the statement this line is on.

Fields
from requiredstring
to requiredstring
withdrawal requiredobject or null
Fields
id requiredstring
reference requiredstring
status requiredstring
method requiredstring
externalReference requiredstring,null
bankAccount requiredstring,null

AgentActivity

id requiredstring
trigger requiredASK EVENT SCHEDULE
status requiredstring
summary requiredstring,null
createdAt requiredstring

AgentTemplate

key requiredstring
name requiredstring
description requiredstring
instructions requiredstring
plan requiredobject or null

Null when it only talks.

Fields
events requiredarray of report.submitted report.auto_approved report.step_approved report.approved report.rejected report.retracted report.reopened report.sent_back report.expense_rejected report.findings_accepted expense.held expense.released report.created report.updated report.deleted report.reassigned report.closed report.held_moved report.expenses_added report.expense_removed report.approver_replaced report.audit_sampled report.moved reimbursement.created reimbursement.paid report.reimbursed reimbursement.failed reimbursement.reversed reimbursement.cancelled reimbursement.overpaid reimbursement.receipt_confirmed reimbursement.delayed reimbursement.returned expense.reimbursement_stopped expense.created expense.updated expense.voided expense.restored expense.split expense.duplicate_kept expense.receipt_merged expense.receipt_attached expense.receipt_replaced expense.corrected expense.violation_dismissed document.created document.deleted document.processed document.failed comment.added comment.mentioned report.participant_added report.participant_removed room.member_added room.member_removed task.created task.reassigned task.completed task.reopened document.shared payment_account.assigned payment_account.unassigned payment_account.created payment_account.archived plaid.connected plaid.reconnected plaid.removed card.feed_broken transaction.matched transaction.unmatched report.exported export.requested integration.sync_failed integration.needs_attention travel.trip_changed billing.subscription_changed billing.seats_changed member.role_changed member.suspended member.updated invitation.created invitation.accepted workflow.created workflow.updated workflow.deleted policy.created policy.updated policy.deleted budget.created budget.updated budget.deleted integration.connected integration.disconnected payee_bank_account.saved payee_bank_account.removed reimbursement.settings_saved
branches requiredarray of object

The first branch whose conditions hold is the one that runs, so "and all other reports" is a last branch with none.

Fields
when requiredarray of object
Fields
field requiredAgentField
op requiredAgentOperator
value requiredstring or number or array of string or tuple or boolean
then requiredarray of object
Fields
tool requiredAgentStepTool
input requiredmap of string,number,boolean,null

Fixed when a person approved the rule. The subject is always what the event was about, so a step names no record.

askstring

A yes-or-no question a condition cannot settle. A reader with no tools answers it, and only a person can then write.

needsClaude requiredboolean

Needs Claude to run. Everything else here is code.

ApiCall

id requiredstring
actorType requiredAPI_KEY OAUTH
actorId requiredstring,null

The API key's id, or the app's client_id.

actorName requiredstring,null

The key's or the app's name, while it still exists.

method requiredstring
path requiredstring
status requirednumber
durationMs requirednumber
requestId requiredstring,null
ip requiredstring,null
createdAt requiredstring

ApprovalCounts

pending requirednumber
clean requirednumber
flagged requirednumber
delegated requirednumber

ApprovalQueueItem

stepId requiredstring
level requirednumber
report requiredReportSummary
approver requiredReportPerson
onBehalfOf requiredReportPerson or null

The approver this step belongs to, when the caller is acting as their delegate.

clean requiredboolean
heldCount requirednumber
waitingSince requiredstring

ApprovalStep

id requiredstring
level requirednumber
approver requiredReportPerson
actedBy requiredReportPerson or null

Set when someone else acted for the approver.

state requiredAPPROVED REJECTED PENDING SKIPPED WAITING
comment requiredstring,null
decidedAt requiredstring,null

ArchivedReport

number requirednumber
title requiredstring
status requiredstring
currency requiredstring
totalMinor requirednumber
submittedAt requiredstring,null
owner requiredstring
lines requiredarray of object
Fields
date requiredstring,null
merchant requiredstring,null
category requiredstring,null
amountMinor requirednumber
currency requiredstring

AuditEvent

id requiredstring
action requiredstring
actorType requiredUSER API_KEY STAFF SYSTEM OAUTH
actorId requiredstring,null
actorName requiredstring,null

The person, or the name of the API key. Null for the system.

onBehalfOfName requiredstring,null

The person this was done for, when the actor was a delegate. metadata.onBehalfOf holds their id.

affectedName requiredstring,null

The person the change was about, when it was about a person: a member whose role changed, say.

entityType requiredstring,null
entityId requiredstring,null
metadata requiredmap of any
createdAt requiredstring

BankReconciliationExpense

id requiredstring
reference requiredstring
merchantName requiredstring,null
date requiredstring
categoryName requiredstring,null
amountMinor requirednumber
currency requiredstring
baseAmountMinor requirednumber

BillingInvoice

id requiredstring
number requiredstring,null
status requiredstring,null
currency requiredstring
totalMinor requirednumber
amountPaidMinor requirednumber
amountDueMinor requirednumber
createdAt requiredstring
periodStart requiredstring,null
periodEnd requiredstring,null
hostedUrl requiredstring,null

Stripe's page for the invoice.

pdfUrl requiredstring,null

Stripe's PDF of it.

BillingPlan

extraSeatYearlyMinor requirednumber,null

Per extra member per year, for yearly billing. Null when extra members are not sold.

key requiredPlanKey
name requiredstring
tagline requiredstring
mailInTaglinestring

Replaces tagline while paper mail-in is on. offeredPlan picks one, so nothing reads this directly.

priceMonthlyMinor requirednumber

Prices in USD cents. The yearly price is the whole year, charged once. One price everywhere: every figure here is also an App Store and Google Play price point, so a store never costs more or less. Apple steps by $5 above $200 and by $10 above $500, which is why $290 and $790 and not $289 and $789.

priceYearlyMinor requirednumber
extraSeatMonthlyMinor requirednumber,null

Per extra member per month beyond seatsIncluded. Null when extra seats are not sold. On a yearly plan an extra member is twelve of these, $72 on Pro and $96 on Business, on purpose: the yearly discount is for the plan, and a seat carries none. seatPriceMinor is where that is worked out.

limits requiredPlanLimits
features requiredarray of mileage policies receipt_capture email_capture expense_reports tax_reports standard_exports multi_currency business_cards mail_in automation_rules card_feeds accounting_sync approvals reimbursements custom_fields per_diem human_verification developer_api multi_level_approvals sso audit_log scheduled_reports

BlueprintSummary

id requiredstring
name requiredstring

What blueprint_name takes.

title requiredstring
documentType requiredDocumentType
builtIn requiredboolean

Ships with PaperTotal, and can be used and not changed.

version requirednumber

Changing a blueprint adds a version, and results keep the one that made them.

BreakdownRow

id requiredstring,null

The category, merchant, member, project, tag or department. Null is the row for expenses with none.

label requiredstring
totalMinor requirednumber
count requirednumber
previousMinor requirednumber
changePct requirednumber,null
sharePct requirednumber

Of the period's total, one decimal.

BudgetStanding

limitMinor requirednumber
spentMinor requirednumber

Approved or paid.

pendingMinor requirednumber

Not void or rejected, and not approved yet: what is on its way.

remainingMinor requirednumber

Below zero once the limit is passed.

percentUsed requirednumber

Of the limit, rounded down.

CardStatement

from requiredstring
to requiredstring
open requiredboolean

True for the period still open today.

count requirednumber
spentMinor requirednumber
creditedMinor requirednumber
netMinor requirednumber
currency requiredstring

ChartBar

label requiredstring
valueMinor requirednumber
href requiredstring,null

Where choosing this bar leads. Null when it cannot be narrowed to a filter.

Chart

title requiredstring
currency requiredstring
bars requiredarray of ChartBar

ChatPerson

phonestring,null
agentboolean

True for an agent's account, so a client never reads it as a person.

id requiredstring
name requiredstring,null
email requiredstring

ClientWorkspace

id requiredstring
name requiredstring
role requiredMemberRole
baseCurrency requiredstring
timezone requiredstring
dateFormat requiredDateFormat

How dates read in that workspace. The API always sends YYYY-MM-DD.

todo requiredobject
Fields
total requirednumber

Everything below added up.

needsReview requirednumber
awaitingApproval requirednumber
awaitingPayment requirednumber
unmatchedCharges requirednumber
billing requiredobject
Fields
plan requiredstring,null
active requiredboolean
canManage requiredboolean

Whether this person can change the plan there.

DocumentCounts

added requirednumber
read requirednumber
reading requirednumber
failed requirednumber

DocumentFraud

Evidence for a reviewer. Null until inspected, and for a caller without expenses.read_all.

version requiredstring
score requirednumber

0 to 1, from the signals that fired. Evidence, never a verdict.

color requiredgreen yellow red

Under the workspace yellow threshold is green. Over its red threshold is red.

types requiredarray of FraudSignal

Signals that fired, most important first.

details requiredmap of object

By signal: a description, a confidence and typed reasons.

attribution requiredstring,null

One sentence naming the strongest evidence.

decision requiredclear review fraud not_fraud unknown

clear or review until a person decides. Only a person can say fraud.

review requiredobject or null
Fields
decision requiredFraudReviewDecision
types requiredarray of FraudSignal
note requiredstring,null
reviewedBy requiredobject or null
Fields
id requiredstring
name requiredstring,null
reviewedAt requiredstring
deviceId requiredstring,null

The id the client sent for its device, when it sent one.

submissions requiredobject or null

Documents from this uploader in this workspace, by window.

Fields
lastMinutes requirednumber
lastDay requirednumber
lastWeek requirednumber
last2Weeks requirednumber
lastMonth requirednumber
deviceProfiles requiredarray of object

Over 30 days, inside this workspace only.

Fields
deviceId requiredstring
profileId requiredstring
documentCount requirednumber
digitalTamperingFields requiredarray of string
handwriting requiredobject

What Claude saw written by hand, in dot notation, when a key is set and the handwriting signal is on. With no key, the lists are empty and the flags null: skipped says why.

Fields
handwrittenFields requiredarray of string
fullyHandwrittenFields requiredarray of string
handwrittenTamperedFields requiredarray of string
handwritingDetected requiredboolean,null
handwritingTamperingPresent requiredboolean,null
notADocument requiredobject
Fields
value requiredboolean,null
score requirednumber,null
digitalBackground requiredobject
Fields
value requiredboolean,null
score requirednumber,null
fraudulentPdf requiredobject or null
Fields
fraudulentPdfCreator requirednumber,null
textOverlay requirednumber,null
fontMismatch requirednumber,null
hasDigitalSignature requiredboolean,null
pdfModified requirednumber,null
incrementalUpdates requirednumber,null
incrementalChanges requiredarray of string
incrementalEdits requiredarray of object
Fields
page requirednumber
before requiredstring,null
after requiredstring,null
signatureCreationTools requiredarray of string
dateInversion requirednumber,null
producerContentMismatch requirednumber,null
writerMismatch requirednumber,null
nullMetadata requirednumber,null
xmpInfoMismatch requirednumber,null
futureMetadataDate requirednumber,null
rasterProfileMismatch requirednumber,null
uncompressedRaster requirednumber,null
splicedPage requirednumber,null
splicedPageNumber requirednumber,null
valueFontSplice requirednumber,null
valueFontSplicePage requirednumber,null
headlessDesktopRender requirednumber,null
headlessRenderPlatform requiredstring,null
doubleJpeg requirednumber,null
firstQuantizationQuality requirednumber,null
scrubbedProvenance requirednumber,null
score requirednumber,null
fraudulentImage requiredobject or null
Fields
doubleJpeg requirednumber,null
firstQuantizationQuality requirednumber,null
scrubbedProvenance requirednumber,null
editorSignature requirednumber,null
editorSignatureField requiredicc_profile exif:Software exif:ProcessingSoftware xmp:CreatorTool png:Software jpeg:comment or null
editorSignatureValue requiredstring,null
generatorSignature requirednumber,null
generatorSignatureField requiredicc_profile exif:Software exif:ProcessingSoftware xmp:CreatorTool png:Software jpeg:comment or null
generatorSignatureValue requiredstring,null
generatorWriterProfile requirednumber,null
generatorWriterProfileValue requiredstring,null
syntheticRaster requirednumber,null
syntheticRasterFingerprints requiredarray of string
unprofiledPng requirednumber,null
unprofiledWebp requirednumber,null
source requiredoriginal render or null
sourceFormats requiredarray of string
unreadableSource requirednumber,null
score requirednumber,null
pages requiredarray of object
Fields
index requirednumber
isBlurry requiredobject
Fields
value requiredboolean,null
score requirednumber,null
isLcd requiredobject
Fields
value requiredboolean,null
score requirednumber,null
screenshot requiredobject or null
Fields
type requiredmobile_screenshot other_screenshot ai_generated
score requirednumber,null
aiGenerated requiredobject

Value null means nothing could say: no pixel model runs, only metadata can answer.

Fields
value requiredboolean,null
score requirednumber,null
glare requiredobject
Fields
value requiredboolean,null
score requirednumber,null
skipped requiredarray of object

Checks that could not run on this file, so a clean result is not read as more than it is.

Fields
check requiredstring
reason requiredstring

DocumentMeta

totalPages requirednumber
processedPages requirednumber
ocrScore requirednumber,null

The average character confidence of the reading, which doubles as a measure of the image.

originalFileName requiredstring,null
source requiredDocumentSource
language requiredstring,null

BCP-47.

languages requiredarray of object

Every language found, best first.

Fields
tag requiredstring
score requirednumber
deviceId requiredstring,null
deviceUserUuid requiredstring,null

The signed-in person the device was capturing for. Null when no device was named.

latitude requirednumber,null
longitude requirednumber,null
sourceDocuments requiredarray of map of any

Each file as submitted: name, type, size in KB, width, height and EXIF.

owner requiredobject or null

Who uploaded it.

Fields
id requiredstring
name requiredstring,null
duplicates requiredarray of object

Near copies past the workspace threshold, best first.

Fields
id requiredstring
url requiredstring
score requirednumber

Percent alike.

DocumentTag

id requiredstring
name requiredstring

DomainAccessRequest

id requiredstring
userId requiredstring
email requiredstring
name requiredstring,null
status requiredPENDING APPROVED DENIED
createdAt requiredstring

DomainAdmin

userId requiredstring
email requiredstring
name requiredstring,null
addedAt requiredstring

DomainMember

userId requiredstring
email requiredstring
name requiredstring,null
membership requiredobject or null

In the domain's workspace. Someone only on the address has no membership here.

Fields
id requiredstring
role requiredMemberRole
status requiredMemberStatus
groupId requiredstring,null
lastActiveAt requiredstring,null

DomainReportRow

userId requiredstring
email requiredstring
name requiredstring,null
expenseCount requirednumber
totalMinor requirednumber

Base amounts in the workspace's currency, with voided expenses left out.

DurationBucket

label requiredstring
belowMs requirednumber,null

Exclusive. Null for the last bucket, which has no top.

count requirednumber

DurationDay

date requiredstring
count requirednumber
averageMs requirednumber,null
medianMs requirednumber,null

DurationSummary

count requirednumber

How many documents the figures below are from.

averageMs requirednumber,null
medianMs requirednumber,null
p90Ms requirednumber,null

ExpenseAccess

canEdit requiredboolean
limited requiredboolean

Out for approval: only the amount, description, merchant, date, category, tags and attendees can change.

reason requiredstring,null

Why it cannot be edited, or how far it can, in words for the person looking at it.

amountLocked requiredboolean

The amount is a card's own figure.

canDelete requiredboolean
canRestore requiredboolean
restoreBlocked requiredstring,null

Why it cannot be restored: split, or merged, for good.

canSplit requiredboolean
canMove requiredboolean

ExpenseFlag

code requiredstring
message requiredstring
severity requiredinfo warn block
bystring

Who put it there, where that decides who may take it off.

ExpenseGroup

key requiredstring
label requiredstring
count requirednumber
baseAmountMinor requirednumber

ExpenseSummary

id requiredstring
number requirednumber
reference requiredstring
status requiredExpenseStatus
kind requiredExpenseKind
merchantName requiredstring,null
tripTitle requiredstring,null

For a trip, what to call it in a list.

description requiredstring,null
date requiredstring
currency requiredstring
amountMinor requirednumber
baseAmountMinor requirednumber
taxMinor requirednumber,null
category requiredobject or null
Fields
id requiredstring
name requiredstring
alsoCategories requiredarray of object

Further categories it can be found under. Its money stays in category.

Fields
id requiredstring
name requiredstring
project requiredobject or null
Fields
id requiredstring
name requiredstring
code requiredstring,null
client requiredobject or null
Fields
id requiredstring
name requiredstring
owner requiredobject
Fields
id requiredstring
name requiredstring,null
email requiredstring
moneyFlow requiredIN OUT

Which way the money went.

invoiceNumber requiredstring,null
matched requiredboolean

A card charge has been matched to it.

connectedApps requiredarray of string

Connected services it has been posted to.

reportId requiredstring,null
externalId requiredstring,null

A developer's own reference, exactly as sent.

billable requiredboolean
reimbursable requiredboolean
paymentType requiredPaymentType or null
confidence requirednumber,null
flags requiredarray of ExpenseFlag
reviewFields requiredarray of string
thumbnailUrl requiredstring,null
documentId requiredstring,null
tags requiredarray of object
Fields
id requiredstring
name requiredstring
color requiredstring,null
attendeeCount requirednumber
fxRate requirednumber

What one unit of the expense currency is worth in the base currency.

held requiredboolean

Held back from its report until someone releases it.

createdAt requiredstring
updatedAt requiredstring

ExplainCall

tool requiredstring
effect requiredREAD WRITE
outcome requiredFAILED PROPOSED EXECUTED REFUSED
input requiredany
reason requiredstring,null
at requiredstring

ExportCapabilities

reimbursable requiredarray of BILL CHECK JOURNAL_ENTRY EXPENSE_REPORT
companyCard requiredarray of BILL JOURNAL_ENTRY EXPENSE_REPORT CREDIT_CARD DEBIT_CARD
billStatus requiredboolean

Xero alone lets an entry arrive as a draft.

paidSync requiredboolean

Reads Paid back, and posts a bill payment.

originalCurrency requiredboolean

Posts the original currency with its rate.

ExportFilters

statusExpenseStatus or array of ExpenseStatus
kindExpenseKind
paymentTypePaymentType
ownerIdstring
scopemine all
categoryIdstring
merchantIdstring
projectIdstring
clientIdstring
tagIdstring
departmentstring
reportIdstring
externalIdstring
unreportedboolean
needsReviewboolean
billableboolean
reimbursableboolean
moneyFlowIN OUT
dateFieldExpenseDateField
fromstring
tostring
minMinorinteger
maxMinorinteger
qstring
idsarray of string
yearinteger
reportStateReportStatus or array of ReportStatus
reportIdsarray of string
startDatestring
endDatestring
approvedAfterstring
exportedboolean
categoryIdsarray of string
documentIdsarray of string
documentTypesarray of DocumentType
policyIdsarray of string
approvalLinkIdstring
columnsarray of object
Fields
key requiredstring
labelstring
formulastring
columnSetDocumentColumnSet
presetExportPreset
viewobject
Fields
levelexpense report
columns requiredarray of object
Fields
key requiredstring
labelstring
sortExpenseSort
groupByExpenseGroupBy
groupsOnlyboolean
notifyRequesterboolean
fullPageReceiptsboolean
templatestring
emailMessagestring
delimiterCsvDelimiter
bomboolean
recipientsarray of string (email)
scheduledReportIdstring
scheduledReportNamestring
notesarray of string

ExportFinish

markAsExported requiredobject or null
Fields
state requiredPENDING DONE FAILED SKIPPED
marked requiredarray of string

The reports this export marked, by reference.

skipped requiredarray of object

The reports it left as they were, and why.

Fields
reference requiredstring
reason requiredstring
error requiredstring,null
sftpUpload requiredobject or null

Where the file went. The credentials are never returned.

Fields
state requiredPENDING DONE FAILED SKIPPED
host requiredstring
port requirednumber
path requiredstring
attempts requirednumber
file requiredstring,null

Where the file landed on the server.

error requiredstring,null
uploadedAt requiredstring,null

ExportRecord

id requiredstring
documentId requiredstring,null
expenseId requiredstring,null
target requiredstring

A service, such as QUICKBOOKS_ONLINE, a file format, such as CSV, or what a program named.

externalId requiredstring,null

The id it has there.

exportJobId requiredstring,null
via requiredEXPORT SYNC API
createdAt requiredstring

HeldBackRow

postedDate requiredstring
amountMinor requirednumber
currency requiredstring
description requiredstring
matchedDescription requiredstring
matchedFormat requiredCSV IIF OFX

HrCredentialField

key requiredstring
label requiredstring
secret requiredboolean

A secret never comes back once saved.

hintstring
patternstring

A regular expression the value has to match.

HrSystem

key requiredstring
name requiredstring
access requiredDIRECT PARTNER FILE

DIRECT reads the system with credentials you supply. PARTNER needs an agreement with the vendor first, so it works by file until then. FILE is a CSV, a webhook or a file drop.

fields requiredarray of HrCredentialField

What connecting asks for.

partnerNotestring

ImportCounts

categories requirednumber
tags requirednumber
reportFields requirednumber
taxRates requirednumber

ImportDimension

key requiredstring
label requiredstring
count requirednumber

Live values in this list at the provider.

destinations requiredarray of OFF TAGS REPORT_FIELDS EMPLOYEE_DEFAULT
destination requiredOFF TAGS REPORT_FIELDS EMPLOYEE_DEFAULT

ImportSummary

at requiredstring
created requiredImportCounts

New rows this run made.

paired requirednumber

Rows already here that were paired, untouched.

updated requirednumber

Rows brought up to date because the provider changed and nobody had touched them.

keptEdits requirednumber

Rows a person changed or deleted, left as they are.

skipped requiredarray of object

Accounts left out, with the reason.

Fields
name requiredstring
reason requiredstring

InboundEmail

id requiredstring
from requiredstring
subject requiredstring,null
status requiredRECEIVED PROCESSED NO_ATTACHMENT UNKNOWN_SENDER OVER_LIMIT REJECTED FAILED
detail requiredstring,null
documentCount requirednumber
hasAttachment requiredboolean
refusedFiles requiredarray of object
Fields
name requiredstring
reason requiredstring
receivedAt requiredstring

InboxTodo

key requiredstring
title requiredstring
detail requiredstring,null
href requiredstring
count requirednumber

How many of these there are, for a line that stands for several.

InvoiceDisplayStatus

The status, or OVERDUE once the due date has passed with money still owed.

DRAFT SENT VIEWED PARTIALLY_PAID PAID VOID OVERDUE

InvoiceLine

id requiredstring
description requiredstring
quantity requirednumber
unitMinor requirednumber
amountMinor requirednumber
taxKind requiredInvoiceTaxKind or null
taxBasisPoints requirednumber,null

2000 is 20%.

taxMinor requirednumber
receiptUrl requiredstring,null

The receipt of a pulled-in expense: a signed link that lasts 15 minutes.

expenseId requiredstring,null

InvoiceMessage

id requiredstring
fromRecipient requiredboolean
authorName requiredstring,null
body requiredstring
createdAt requiredstring

InvoicePayment

id requiredstring
kind requiredPAYMENT REFUND
amountMinor requirednumber
paidOn requiredstring
reference requiredstring,null
note requiredstring,null
createdAt requiredstring

InvoiceSummary

id requiredstring
number requirednumber
reference requiredstring

INV- and the number.

status requiredInvoiceStatus
displayStatus requiredInvoiceDisplayStatus
title requiredstring,null
recipientName requiredstring,null
recipientEmail requiredstring,null
recipientPhone requiredstring,null
currency requiredstring
issueDate requiredstring
dueDate requiredstring,null
totalMinor requirednumber
paidMinor requirednumber
refundedMinor requirednumber
balanceMinor requirednumber

What is still owed: the total, less payments, plus anything refunded.

sentAt requiredstring,null
viewedAt requiredstring,null
paidAt requiredstring,null
createdAt requiredstring

InvoiceToPay

id requiredstring
reference requiredstring
displayStatus requiredInvoiceDisplayStatus
senderName requiredstring
senderEmail requiredstring,null
title requiredstring,null
currency requiredstring
dueDate requiredstring,null
totalMinor requirednumber
balanceMinor requirednumber
awaitingPayment requiredboolean

JoinRequest

id requiredstring
userId requiredstring
email requiredstring
name requiredstring,null
source requiredDOMAIN LINK
role requiredMemberRole
status requiredPENDING APPROVED DENIED
createdAt requiredstring

JoinableWorkspace

id requiredstring
name requiredstring
mode requiredASK JOIN_NOW

MailInDocument

id requiredstring
type requiredDocumentType
status requiredDocumentStatus
originalFilename requiredstring,null
thumbnailUrl requiredstring,null
createdAt requiredstring

MailInEnvelopeAllowance

week requiredstring

2026-W44. A week starts on Monday, UTC.

weekLimit requirednumber

Envelopes a workspace can have sent in a week.

used requirednumber
remaining requirednumber

Envelopes that can still be requested this week.

MappingOption

id requiredstring
name requiredstring
code requiredstring,null
type requiredstring,null

The account type, or the tracking category an option belongs to.

active requiredboolean

MappingRow

entity requiredMappingEntity
localId requiredstring
name requiredstring
code requiredstring,null
kind requiredACCOUNT PAYMENT_ACCOUNT VENDOR CUSTOMER CLASS TRACKING TAX_CODE ITEM LOCATION DEPARTMENT EMPLOYEE CUSTOM_DIMENSION EXPENSE_CATEGORY PAYABLE_ACCOUNT
required requiredboolean

Posting stops at this row while it is empty.

mapped requiredMappingOption or null
suggestion requiredobject or null

Never used for posting until someone saves it.

Fields
id requiredstring
name requiredstring
code requiredstring,null
type requiredstring,null

The account type, or the tracking category an option belongs to.

active requiredboolean
reason requiredname code similar

McpError

jsonrpc required2.0
idstring,number
error requiredobject
Fields
code requirednumber
message requiredstring
dataany

McpResult

jsonrpc required2.0
id requiredstring,number
result requiredmap of any

MemberChoice

id requiredstring
name requiredstring

MessageFlag

id requiredstring
message requiredMessage
room requiredobject
Fields
id requiredstring
name requiredstring
reason requiredstring,null
source requiredPERSON SCAN
reporter requiredChatPerson or null
state requiredOPEN UPHELD DISMISSED
createdAt requiredstring

MileageLogMonth

month requiredstring

YYYY-MM.

trips requirednumber
amountMinor requirednumber

MoneyPerson

id requiredstring
name requiredstring,null
email requiredstring

NamedWorkspace

id requiredstring
name requiredstring

NotificationPreference

type requiredinvoice.updated document.processed document.failed expense.needs_review report.submitted report.approved report.rejected report.reimbursed comment.added member.invited billing.payment_failed billing.dispute_opened billing.trial_ending usage.limit_near budget.threshold fraud.duplicate_spike integration.needs_attention integration.post_failed integration.batch_finished mail_in.updated chat.message chat.mention task.assigned assistant.action document.share_requested export.ready webhook.disabled release.published digest.daily
email requiredboolean
push requiredboolean
inApp requiredboolean

OAuthConnection

id requiredstring
clientName requiredstring
clientUri requiredstring,null
workspaceId requiredstring
workspaceName requiredstring
scopes requiredarray of string
resource requiredapi mcp
connectedAt requiredstring
lastUsedAt requiredstring,null

OAuthScope

scope requiredstring
label requiredstring
description requiredstring
optIn requiredboolean

Off until the person ticks it. Ticking it is the rule they approve.

OffboardingItem

step requiredtransfer_ownership share_bank_account reset_payer reconnect_integrations
done requiredboolean
detail requiredstring
href requiredstring

OutstandingPayee

payee requiredMoneyPerson
employeeId requiredstring,null
unbatchedMinor requirednumber

Approved and not yet in a batch: these can go into one now.

batchedMinor requirednumber

In a live batch, waiting to be marked paid.

totalMinor requirednumber
hasBankAccount requiredboolean
reports requiredarray of OutstandingReport

OutstandingReport

id requiredstring
reference requiredstring
title requiredstring
approvedAt requiredstring,null
amountMinor requirednumber
reimbursementId requiredstring,null

The live batch holding this report, if there is one.

currency requiredstring

What the report is written in.

reimbursementReference requiredstring,null

PlanLimits

scansPerMonth requirednumber

Documents extracted per calendar month.

seatsIncluded requirednumber

Members included in the price.

maxSeats requirednumber,null

Most members a workspace may have. Null is unlimited.

apiDocumentsPerMonth requirednumber

Documents accepted through the developer API per month.

mailInDocumentsPerMonth requirednumber

Paper documents per month through the mail-in service.

PolicyDocument

key requiredstring
filename requiredstring
uploadedAt requiredstring

PolicyFinding

code requiredPOLICY_VIOLATION
ruleId requiredstring
type requiredPolicyRuleType
severity requiredPolicySeverity
expenseId requiredstring
expenseReference requiredstring
message requiredstring
reviewerOnlyboolean

Evidence for a reviewer. It never reaches the person who uploaded the receipt.

PostingPause

since requiredstring
code requiredstring

Stable code of the failure that paused it.

message requiredstring

Written for a person.

failed requirednumber

Records waiting on a person now.

PrivateDetails

legalFirstName requiredstring or null
legalLastName requiredstring or null
dateOfBirth requiredstring (date) or null
phone requiredstring or null
addressLine1 requiredstring or null
addressLine2 requiredstring or null
city requiredstring or null
region requiredstring or null
postalCode requiredstring or null
country requiredstring or null

ReimbursementReport

id requiredstring
reference requiredstring
title requiredstring
status requiredstring
amountMinor requirednumber

ReleaseNote

id requiredstring
version requiredstring
product requiredReleaseProduct
environments requiredarray of ReleaseEnvironment
title requiredstring
body requiredstring
publishedAt requiredstring

ReportArchive

id requiredstring
workspaceName requiredstring
reportCount requirednumber
closedAt requiredstring

ReportFieldValue

id requiredstring
name requiredstring
type requiredReportFieldType
options requiredarray of string
formula requiredstring,null
required requiredboolean
enabled requiredboolean
position requirednumber
disabledOptionsarray of string

List values turned off: kept on reports that hold them, and not offered for new ones.

importedboolean

Came from the connected books, so it cannot be deleted and its values only turn on and off.

value requiredstring,null

ReportPerson

id requiredstring
name requiredstring,null
email requiredstring

ReportSummary

id requiredstring
number requirednumber
reference requiredstring
title requiredstring
status requiredReportStatus
stage requiredDRAFT SUBMITTED OUTSTANDING APPROVED REJECTED PAID EXPORTED DONE

Submitted until someone has acted on it. Outstanding once it is part way: under review, with a hold, or partly approved.

paymentStage requiredMARKED_AS_PAID WITHDRAWING CONFIRMED or null
owner requiredReportPerson
currency requiredstring
totalMinor requirednumber
reimbursableMinor requirednumber
expenseCount requirednumber
findingCount requirednumber
periodStart requiredstring,null
periodEnd requiredstring,null
autoCreated requiredboolean
waitingOn requiredarray of ReportPerson

Who the report is with right now.

submittedAt requiredstring,null
approvedAt requiredstring,null
createdAt requiredstring
updatedAt requiredstring

ReportTimelineEntry

id requiredstring
action requiredstring
actor requiredReportPerson or null

Null when PaperTotal did it on a schedule.

onBehalfOf requiredReportPerson or null

The person whose name this was done in, when the actor was covering for them.

detail requiredstring,null

The reason, comment or note that came with the action.

metadata requiredmap of any
at requiredstring

ReviewRow

expenseId requiredstring
reference requiredstring
merchantName requiredstring,null
date requiredstring
amountMinor requirednumber
currency requiredstring
taxMinor requirednumber,null
categoryId requiredstring,null
account requiredstring,null

Where the category posts, when it has been mapped.

posted requiredboolean

Already in the books. Selected only when the person asks to send it again.

problem requiredstring,null

What would stop it posting, in a sentence.

gst requiredMISSING OVER or null

RoomMember

phonestring,null
agentboolean

True for an agent's account, so a client never reads it as a person.

id requiredstring
name requiredstring,null
email requiredstring
moderator requiredboolean

S3Access

configured requiredboolean
accessKeyId requiredstring,null
region requiredstring,null

ScimToken

id requiredstring
name requiredstring
prefix requiredstring
lastUsedAt requiredstring,null
expiresAt requiredstring,null
createdAt requiredstring

SealedValue

kind requiredSensitiveKind
masked requiredstring

All but the last few characters are stars. Punctuation stays where it was.

field requiredstring,null
page requirednumber

SearchGroup

kind requiredSearchKind
hits requiredarray of SearchHit
hasMore requiredboolean

SearchHit

kind requiredSearchKind
id requiredstring
title requiredstring
subtitle requiredstring,null
snippet requiredarray of SearchSnippetPart
date requiredstring,null
amountMinor requirednumber,null
currency requiredstring,null
status requiredstring,null
documentType requiredDocumentType or null
thumbnailUrl requiredstring,null
roomId requiredstring,null

The chat a message or a task is in, which is where it opens. Null for every other kind.

SearchShortcutReport

id requiredstring
reference requiredstring
title requiredstring
status requiredstring
totalMinor requirednumber
currency requiredstring
ownerName requiredstring
workspaceId requiredstring
workspaceName requiredstring
date requiredstring

When it was submitted, or created if it never was.

SearchSnippetPart

text requiredstring
match requiredboolean

This part is what matched.

SearchSummaryRow

key requiredstring

Stable within this summary.

label requiredstring
count requirednumber
totalMinor requirednumber

SearchSummary

groupBy requiredcard from week month quarter year merchant withdrawal-id category tag
view requiredtable bar pie line
currency requiredstring
convertedFrom requiredstring,null

Set when group-currency: converted the totals: the currency they were in, at the latest rate.

rows requiredarray of SearchSummaryRow
count requirednumber

Every match once, even when group-by:tag counts an expense under each of its tags.

totalMinor requirednumber
truncated requiredboolean

There are more groups than rows holds.

ServiceProvider

entityId requiredstring
acsUrl requiredstring
binding requiredurn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST
nameIdFormat requiredurn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress
metadataPath requiredstring
redirectUri requiredstring

Where an OIDC provider sends people back.

Session

id requiredstring
deviceName requiredstring,null
os requiredstring,null
browser requiredstring,null
provider requiredstring,null
secondFactor requiredstring,null
signedInAt requiredstring
lastSeenAt requiredstring
current requiredboolean

The sign-in behind this request.

SignInProvider

providerId requiredstring
protocol requiredSsoProtocol
displayName requiredstring

SkippedExpense

id requiredstring
reason requiredstring

SlackChannel

id requiredstring
name requiredstring
isPrivate requiredboolean

StatementOutputRow

postedDate requiredstring
description requiredstring
merchantName requiredstring,null
amountMinor requirednumber
currency requiredstring
card requiredstring,null

Which card, for a file holding several.

StatusComponent

component requiredapi web worker
name requiredstring
state requiredup down not_measured
lastCheckedAt requiredstring,null
latencyMs requirednumber,null
uptime requiredarray of object

Over the last N days, or as much of them as has been measured. Null when nothing has.

Fields
days requirednumber
percent requirednumber,null
days requiredarray of StatusDay

StatusDay

date requiredstring
percent requirednumber,null

Null for a day with nothing measured.

StatusIncident

component requiredapi web worker
name requiredstring
startedAt requiredstring
endedAt requiredstring,null

Null while it is still going on.

StorageFeature

enabled requiredboolean
folder requiredstring,null

Where it goes, once the first pass has made the folder.

done requirednumber

Written to the folder, or brought in from it.

skipped requirednumber

Files the provider or the capture rules refused for good.

StorageIntake

watch requiredREADY NEEDS_GRANT NOT_OFFERED

READY watches. NEEDS_GRANT is one reconnect away. NOT_OFFERED cannot be turned on.

unavailable requiredstring,null

Why it cannot be turned on, written for a person.

recentSkips requiredarray of string

The latest files that did not come in, each with its reason.

enabled requiredboolean
folder requiredstring,null

Where it goes, once the first pass has made the folder.

done requirednumber

Written to the folder, or brought in from it.

skipped requirednumber

Files the provider or the capture rules refused for good.

StoreSubscriptionNotice

workspaceId requiredstring
workspaceName requiredstring
store requiredAPP_STORE PLAY_STORE

SuggestedAgentRule

key requiredstring
liststring

The list in its first condition is the workspace's to choose, and this names it on the screen.

group requiredAmount, category and merchant Currency, tax, tag and description Dates and report shape Receipt intelligence
title requiredstring
prompt requiredstring
plan requiredobject
Fields
events requiredarray of report.submitted report.auto_approved report.step_approved report.approved report.rejected report.retracted report.reopened report.sent_back report.expense_rejected report.findings_accepted expense.held expense.released report.created report.updated report.deleted report.reassigned report.closed report.held_moved report.expenses_added report.expense_removed report.approver_replaced report.audit_sampled report.moved reimbursement.created reimbursement.paid report.reimbursed reimbursement.failed reimbursement.reversed reimbursement.cancelled reimbursement.overpaid reimbursement.receipt_confirmed reimbursement.delayed reimbursement.returned expense.reimbursement_stopped expense.created expense.updated expense.voided expense.restored expense.split expense.duplicate_kept expense.receipt_merged expense.receipt_attached expense.receipt_replaced expense.corrected expense.violation_dismissed document.created document.deleted document.processed document.failed comment.added comment.mentioned report.participant_added report.participant_removed room.member_added room.member_removed task.created task.reassigned task.completed task.reopened document.shared payment_account.assigned payment_account.unassigned payment_account.created payment_account.archived plaid.connected plaid.reconnected plaid.removed card.feed_broken transaction.matched transaction.unmatched report.exported export.requested integration.sync_failed integration.needs_attention travel.trip_changed billing.subscription_changed billing.seats_changed member.role_changed member.suspended member.updated invitation.created invitation.accepted workflow.created workflow.updated workflow.deleted policy.created policy.updated policy.deleted budget.created budget.updated budget.deleted integration.connected integration.disconnected payee_bank_account.saved payee_bank_account.removed reimbursement.settings_saved
branches requiredarray of object

The first branch whose conditions hold is the one that runs, so "and all other reports" is a last branch with none.

Fields
when requiredarray of object
Fields
field requiredAgentField
op requiredAgentOperator
value requiredstring or number or array of string or tuple or boolean
then requiredarray of object
Fields
tool requiredAgentStepTool
input requiredmap of string,number,boolean,null

Fixed when a person approved the rule. The subject is always what the event was about, so a step names no record.

askstring

A yes-or-no question a condition cannot settle. A reader with no tools answers it, and only a person can then write.

needsClaude requiredboolean

Needs Claude to run, and whatever it decides waits for a person.

TaxCategory

id requiredstring
name requiredstring
deductiblePct requirednumber
count requirednumber
spentMinor requirednumber
deductibleMinor requirednumber

TaxLine

line requiredstring

The Schedule C line: "9", "24b".

label requiredstring
count requirednumber
spentMinor requirednumber
deductibleMinor requirednumber
categories requiredarray of TaxCategory

TaxMileage

unit requiredstring
trips requirednumber
distance requirednumber
deductionMinor requirednumber

TaxPayee

merchantId requiredstring
name requiredstring
count requirednumber
totalMinor requirednumber
cardMinor requirednumber

Paid by card. Card payments are reported by the processor, so a preparer usually sets these aside.

taxIdOnFile requiredboolean

Whether a tax id is on file. The number itself is never shown or exported.

TrashedDocument

id requiredstring
type requiredDocumentType
title requiredstring,null
originalFilename requiredstring,null
sizeBytes requirednumber
thumbnailUrl requiredstring,null
deletedAt requiredstring
purgeOn requiredstring

YYYY-MM-DD. The day this document and its files are deleted for good.

TrendPoint

totalMinor requirednumber

Added up from the start of the period when the interval is running, like count and sharePct.

count requirednumber
sharePct requirednumber

Of the period's total, one decimal.

previousLabel requiredstring,null

The point at the same position in the previous period.

previousMinor requirednumber
start requiredstring

The days this point covers, cut to the period at either end.

end requiredstring
label requiredstring
shortLabel requiredstring

TripRoute

origin requiredstring
stops requiredarray of string
destination requiredstring
distance requirednumber

One way, as it would be typed.

unit requiredstring
roundTrip requiredboolean
lastDriven requiredstring
uses requirednumber

WorkflowApprovalDocument

name requiredstring
merchant requiredstring,null
total requiredstring,null
url requiredstring,null

WorkflowApprovalState

recipients requiredarray of string
expiresAt requiredstring
decision requiredapprove reject or null
decidedBy requiredstring,null
decidedAt requiredstring,null

WorkflowFile

exportJobId requiredstring
filename requiredstring
rows requirednumber
url requiredstring,null

A signed link, or null once the file has expired.

WorkflowIssue

code requiredEMPTY NO_START NO_END MISSING_CONFIG CYCLE INCOMPATIBLE UNKNOWN_NODE UNKNOWN_PORT DUPLICATE_NODE DUPLICATE_CONNECTION BAD_DIRECTION UNREACHABLE DEAD_END NO_SPLITTER NOT_CONNECTED NOT_SET_UP NO_CLAUDE NOT_ALLOWED
message requiredstring
nodeIdstring
edgeIdstring

WorkflowStep

id requiredstring
nodeId requiredstring
type requiredapi_import document_aggregator google_drive_import gmail_input dropbox_import email_collector ai_agent convert_csv convert_excel decision document_classifier email_approval extract_data extract_data_set pdf_splitter split_collector business_insights email_file google_drive dropbox google_sheets xero_export
label requiredstring
status requiredPENDING RUNNING WAITING DONE SKIPPED FAILED
message requiredstring,null
documents requirednumber
files requiredarray of WorkflowFile
table requiredWorkflowTablePreview or null
approval requiredWorkflowApprovalState or null
startedAt requiredstring,null
finishedAt requiredstring,null

WorkflowSummary

id requiredstring
name requiredstring
enabled requiredboolean
version requirednumber,null

The version that runs. Null until it has been turned on once.

steps requirednumber
lastRunAt requiredstring,null
lastRunStatus requiredRUNNING PAUSED COMPLETED FAILED CANCELLED or null
createdAt requiredstring
updatedAt requiredstring

WorkflowTablePreview

title requiredstring
columns requiredarray of string
rows requiredarray of array of string,number,null
totalRows requirednumber

WorkflowTrigger

nodeId requiredstring
type requiredapi_import document_aggregator google_drive_import gmail_input dropbox_import email_collector ai_agent convert_csv convert_excel decision document_classifier email_approval extract_data extract_data_set pdf_splitter split_collector business_insights email_file google_drive dropbox google_sheets xero_export
address requiredstring,null

Where to send documents, for an Email collector.

cadence requiredstring,null
nextRunAt requiredstring,null
lastRunAt requiredstring,null

WorkspaceSummary

id requiredstring
name requiredstring
kind requiredPERSONAL TEAM
baseCurrency requiredstring
role requiredMemberRole

AccountingShortcutKey

awaiting-export cash-accruals card-accruals card-statements bank-reconciliation

AccrualGrouping

month week quarter year

AgentField

report.totalMinor report.expenseCount report.categoryCount report.daysSinceLastExpense report.hasFindings report.allReceipts report.status report.submitterId expense.amountMinor expense.ageDays expense.isWeekend expense.tipPct expense.currency expense.merchant expense.description expense.category expense.hasTax expense.hasTag expense.tag expense.hasReceipt expense.itemized expense.hasDescription expense.paymentType expense.flag history.submitterSpend30dMinor history.submitterSpendPrior30dMinor history.submitterChangePct history.submitterExpenseCount30d history.submitterRank history.workspaceSpend30dMinor history.workspaceSpendPrior30dMinor history.workspaceChangePct

AgentOperator

eq ne gt gte lt lte between in notIn contains

AgentRuleRole

OBSERVER APPROVER

AgentStepTool

post_to_thread ask_submitter approve_report reject_report reject_expenses forward_report take_over_report submit_report retract_report unapprove_report hold_expenses release_expenses update_expenses mark_report_exported export_to_accounting post_in_room post_to_admins send_direct_message split_expense_lines fill_description translate_receipt tip_note

ApiKeyScopeName

documents:read documents:write documents:reveal expenses:read expenses:write reports:read reports:write contacts:read webhooks:manage members:read members:write workspace:read workspace:write workspace:delete rules:read rules:write cards:read mailin:read mailin:write billing:read billing:write integrations:read

ApprovalStepKind

manager user role

AsyncEnrichment

duplicates similar_documents line_item_expansion line_item_categorization line_item_custom_categorization xero_line_coding address_parsing fraud rules vendor_resolution

AutoReportSchedule

off instant daily weekly twice_monthly monthly by_trip

BankAccountType

CHECKING SAVINGS

BarcodeType

QR_CODE PDF417 EAN_13 EAN_8 UPC_A UPC_E CODE_128 CODE_39 ITF DATA_MATRIX AZTEC OTHER

BillingInterval

MONTH YEAR

BudgetPeriod

MONTH YEAR

BudgetScope

CATEGORY TAG MEMBER

CardLiability

PERSONAL CORPORATE

CatalogReportKey

fringe-benefit-tax travel-spend mileage duty-of-care hr duplication invoice-reconciliation

CategoryOrigin

SYSTEM CUSTOM ACCOUNTING

CategoryType

EXPENSE COGS INCOME REFUND

ChatPriorityMode

MOST_RECENT FOCUS

CheckType

bank_draft bill_pay_draft business_check cashiers_check government_check money_order personal_check starter_check teller_check

CommuteExclusion

NONE ONE_WAY BOTH_WAYS

ContactExportFormat

vcard google outlook csv

CopySection

categories tags customFields reportFields distanceRates perDiem workflows rules merchantRules policies members accountingConnection overview

CsvDelimiter

, ; |

DateFormat

YYYY-MM-DD MM/DD/YYYY DD/MM/YYYY DD.MM.YYYY MMM D, YYYY

DelegationAccess

FULL LIMITED

DocumentColumnSet

simple detailed

DocumentOrder

created updated issued total tax -created -updated -issued -total -tax

DocumentSource

WEB IOS ANDROID EMAIL API MAIL_IN INTEGRATION

DocumentStatus

UPLOADED PROCESSING PROCESSED FAILED

DocumentType

RECEIPT INVOICE BILL BANK_STATEMENT CHECK TAX_FORM BUSINESS_CARD OTHER UNKNOWN PURCHASE_ORDER CONTRACT PACKING_SLIP REMITTANCE_ADVICE CREDIT_NOTE STATEMENT

DomainJoinPolicy

INVITE_ONLY ASK AUTO

DuplicateField

merchant total date currency invoiceNumber cardLast4 postalCode

ExpenseColumn

receipt merchant date category status amount description project tags owner tax reimbursable billable payment type

ExpenseDateField

date createdAt updatedAt submittedAt approvedAt

ExpenseGroupBy

category merchant member project status month

ExpenseKind

RECEIPT MANUAL MILEAGE PER_DIEM TIME CARD

ExpenseSort

date:asc date:desc merchant:asc merchant:desc category:asc category:desc status:asc status:desc amount:asc amount:desc

ExpenseStatus

PROCESSING NEEDS_REVIEW READY SUBMITTED APPROVED REJECTED REIMBURSED VOID

ExportFormat

CSV XLSX PDF ZIP QBO_CSV XERO_CSV SAGE_CSV DYNAMICS_CSV MYOB_TXT ORACLE_CSV SAP_CSV IIF OFX JSON XML TXT XLS

ExportKind

expenses report tax mileage receipts documents

ExportPreset

basic all_data_expense all_data_report canadian_multiple_tax category per_diem tag tax_report

FeedSource

MANUAL FILE_IMPORT PLAID

FraudColor

GREEN YELLOW RED

FraudMonitoredField

totalMinor subtotalMinor taxMinor tipMinor date merchantName invoiceNumber lineItems.amountMinor lineItems.unitPriceMinor check.amount check.payee check.date check.micr statement.balance statement.transactions

FraudReviewDecision

FRAUD NOT_FRAUD UNKNOWN

FraudReviewState

PENDING FRAUD NOT_FRAUD UNKNOWN

FraudSignal

digital_tampering fraudulent_pdf fraudulent_image generated_document ai_generated lcd_photo screenshot digital_background not_a_document duplicate similar_documents handwritten_characters invalid_qr_data invalid_mrz_data suspicious_content data_inconsistency vendor_layout_mismatch total_in_words_mismatch aspect_ratio_mismatch high_velocity critical_velocity multiple_profiles_or_devices fraud_history blocked_device other

HrApprovalMode

BASIC MANAGER CUSTOM

IntegrationProvider

QUICKBOOKS_ONLINE XERO FRESHBOOKS WAVE ZOHO_BOOKS SAGE NETSUITE GUSTO GOOGLE_DRIVE DROPBOX BOX ONEDRIVE GMAIL SLACK ZAPIER QUICKBOOKS_DESKTOP INTUIT_ENTERPRISE CAMPFIRE DUALENTRY RILLET ACCELO CERTINIA SAGE_BUSINESS_CLOUD SAASU BAMBOOHR HIBOB WORKDAY GOOGLE_WORKSPACE GREENHOUSE EVERNOTE QUICKBOOKS_TIME RIGHTSIGNATURE HR_SYNC BILL_COM SAP_CONCUR MICROSOFT_DYNAMICS MYOB ORACLE SAP_ERP

IntegrityWarning

tax_rate_mismatch item_counts_mismatch totals_mismatch line_item_amount_mismatch line_item_repeats barcode_decoding_issue barcode_code_missing_in_ocr logo_vendor_mismatch malware weekend_transaction time_and_currency_mismatch exif_creation_modified_date_mismatch missing_date suspicious_document_aspect_ratio generic_placeholder_content

InvitationStatus

PENDING EXPIRED ACCEPTED REVOKED

InvoiceStatus

DRAFT SENT VIEWED PARTIALLY_PAID PAID VOID

InvoiceTaxKind

VAT SALES_TAX

LineItemType

room tax parking service fee delivery product food alcohol tobacco transportation fuel refund discount payment giftcard donation toll lottery

MailInDisposal

RETURN SHRED

MailInStatus

REQUESTED ENVELOPE_SENT IN_TRANSIT RECEIVED SCANNING COMPLETED RETURNED LOST CANCELLED

MappingEntity

category tag project client payment_account default

MemberRole

OWNER ADMIN APPROVER ACCOUNTANT AUDITOR MEMBER EDITOR CARD_ADMIN PEOPLE_ADMIN PAYMENTS_ADMIN

MemberStatus

ACTIVE SUSPENDED

MerchantType

airline lodging car_rental ground_transport fuel dining grocery office software utilities supplies other

MileagePurpose

business medical charity

OAuthScopeName

documents:read documents:write documents:reveal expenses:read expenses:write reports:read reports:write contacts:read webhooks:manage members:read members:write workspace:read workspace:write workspace:delete rules:read rules:write cards:read mailin:read mailin:write billing:read billing:write integrations:read mcp:tools mcp:write

OnboardingIntent

BUSINESS PERSONAL JOIN

PaymentAccountKind

CREDIT_CARD DEBIT_CARD BANK_ACCOUNT CASH

PaymentMethod

none visa master_card cash american_express interac other maestro discover bancontact girocard applepay paypal bancomat giftcard card check bankaxept bank-to-bank_transfer_bacs octopus pix jcb waon mada wechat alipay unionpay googlepay rupay bpay shopeepay mir giropay food_stamp diners_club paypay

PaymentType

CASH PERSONAL_CARD COMPANY_CARD BANK_TRANSFER CHECK PAYPAL OTHER

PlanKey

STARTER PRO BUSINESS

PolicyRuleType

MAX_AMOUNT DAILY_LIMIT RECEIPT_REQUIRED MAX_AGE_DAYS CATEGORY_REQUIRED PROJECT_REQUIRED DESCRIPTION_REQUIRED ATTENDEES_REQUIRED PROHIBITED WEEKEND_SPEND ITEMIZED_RECEIPT_REQUIRED TAG_REQUIRED FUTURE_DATE COMPANY_CARD_REQUIRED PROHIBITED_ITEM ATTENDEE_LIMIT RECEIPT_MISMATCH BILLABLE_NOT_ALLOWED CONVERSION_SURCHARGE RATE_OUT_OF_POLICY DISTANCE_INCREASED NO_ROUTE INACTIVE_VENDOR OVER_AUTO_APPROVAL TAG_OUT_OF_POLICY TAX_OUT_OF_POLICY TAX_REQUIRED AI_GENERATED_RECEIPT TRIP_LIMIT FRINGE_BENEFITS

PolicySeverity

WARN BLOCK_SUBMIT WAIVE

ProhibitedItem

ADULT ALCOHOL GAMBLING GIFT_CARD HANDWRITTEN HOTEL_INCIDENTALS TOBACCO

ReadingModel

standard rules_only always_second_reading

ReimbursementFailureCode

NAME_MISMATCH BUSINESS_ACCOUNT ACCOUNT_NOT_FOUND ACCOUNT_SWITCHED UNABLE_TO_CONFIRM OTHER

ReimbursementMethod

MANUAL PAYROLL ACH_FILE ACH_PROVIDER

ReimbursementStatus

PENDING PROCESSING PAID FAILED CANCELLED

ReleaseEnvironment

production sandbox

ReleaseProduct

app_web api mcp model_document_extraction model_bank_statements model_checks model_fraud_detection

ReportCadence

daily weekly monthly

ReportFieldType

TEXT DATE LIST FORMULA

ReportStatus

DRAFT SUBMITTED APPROVED REJECTED REIMBURSED EXPORTED CLOSED

RoomPosting

ALL_MEMBERS ADMINS_ONLY

RoomVisibility

PUBLIC PRIVATE WORKSPACE

ScheduledReportKind

expenses mileage tax

SearchKind

expense document report merchant contact message task

SearchShortcutKey

drafts needs-approval ready-to-pay

SensitiveKind

ROUTING_NUMBER ACCOUNT_NUMBER MICR_LINE SSN EIN IBAN

SlackReceipts

OFF ALL TAGGED

SsoProtocol

SAML OIDC

SyncState

PENDING SYNCED FAILED SKIPPED VOIDED

TaxFormKind

W2 W9 W8BEN_E

TransactionState

UNMATCHED MATCHED IGNORED EXPENSED PENDING

TrendInterval

day week month quarter year running

UiLanguage

en es fr de el it ja nl pl pt-BR zh-Hans

WebhookEvent

document.created document.processed document.failed document.enriched document.enrichment_failed document_set.completed document_set.failed split.completed split.created split.failed split_and_classify.created split_and_classify.failed w2_set.created w2_set.failed bank_statement_set.created bank_statement_set.failed expense.created expense.updated expense.deleted report.submitted report.approved report.rejected report.reimbursed integration.posted integration.failed

BlueprintField

object or object or object or object or object

type requiredstring
descriptionstring
formatdate time
enumarray of string
sensitiveSensitiveKind

SpreadsheetUpload

CreateAttachmentInput

SharedSchema0

map of BlueprintField