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-Id | header | string The workspace this request is for, from the person's |
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-Id | header | string The workspace this request is for, from the person's |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
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-Id | header | string The workspace this request is for, from the person's |
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-Id | header | string The workspace this request is for, from the person's |
Response
200 Success.
application/json SuggestedAgentRuleList
agents
GET /v1/agents List agents
POST /v1/agents Create an agent
Only a signed-in session reaches this. Needs a live plan. Try it
Parameters
X-Workspace-Id | header | string The workspace this request is for, from the person's |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
Response
204 Done, with no content.
GET /v1/agents/{id} Get an agent
Only a signed-in session reaches this. Try it
Parameters
id required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
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 required | path | string |
scheduleId required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
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 required | path | string |
scheduleId required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
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-Id | header | string The workspace this request is for, from the person's |
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-Id | header | string The workspace this request is for, from the person's |
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-Id | header | string The workspace this request is for, from the person's |
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-Id | header | string The workspace this request is for, from the person's |
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
status | query | PROCESSING NEEDS_REVIEW READY SUBMITTED APPROVED REJECTED REIMBURSED VOID or array of PROCESSING NEEDS_REVIEW READY SUBMITTED APPROVED REJECTED REIMBURSED VOID |
kind | query | RECEIPT MANUAL MILEAGE PER_DIEM TIME CARD |
paymentType | query | CASH PERSONAL_CARD COMPANY_CARD BANK_TRANSFER CHECK PAYPAL OTHER |
ownerId | query | string |
scope | query | mine all |
categoryId | query | string |
merchantId | query | string |
projectId | query | string |
clientId | query | string |
tagId | query | string |
department | query | string |
reportId | query | string |
externalId | query | string |
unreported | query | boolean |
needsReview | query | boolean |
billable | query | boolean |
reimbursable | query | boolean |
moneyFlow | query | IN OUT |
dateField | query | date createdAt updatedAt submittedAt approvedAt |
from | query | string |
to | query | string |
minMinor | query | integer |
maxMinor | query | integer |
q | query | string |
limit | query | integer |
interval | query | day week month quarter year running |
groupCurrency | query | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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
status | query | PROCESSING NEEDS_REVIEW READY SUBMITTED APPROVED REJECTED REIMBURSED VOID or array of PROCESSING NEEDS_REVIEW READY SUBMITTED APPROVED REJECTED REIMBURSED VOID |
kind | query | RECEIPT MANUAL MILEAGE PER_DIEM TIME CARD |
paymentType | query | CASH PERSONAL_CARD COMPANY_CARD BANK_TRANSFER CHECK PAYPAL OTHER |
ownerId | query | string |
scope | query | mine all |
categoryId | query | string |
merchantId | query | string |
projectId | query | string |
clientId | query | string |
tagId | query | string |
department | query | string |
reportId | query | string |
externalId | query | string |
unreported | query | boolean |
needsReview | query | boolean |
billable | query | boolean |
reimbursable | query | boolean |
moneyFlow | query | IN OUT |
dateField | query | date createdAt updatedAt submittedAt approvedAt |
from | query | string |
to | query | string |
minMinor | query | integer |
maxMinor | query | integer |
q | query | string |
limit | query | integer |
interval | query | day week month quarter year running |
groupCurrency | query | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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
status | query | PROCESSING NEEDS_REVIEW READY SUBMITTED APPROVED REJECTED REIMBURSED VOID or array of PROCESSING NEEDS_REVIEW READY SUBMITTED APPROVED REJECTED REIMBURSED VOID |
kind | query | RECEIPT MANUAL MILEAGE PER_DIEM TIME CARD |
paymentType | query | CASH PERSONAL_CARD COMPANY_CARD BANK_TRANSFER CHECK PAYPAL OTHER |
ownerId | query | string |
scope | query | mine all |
categoryId | query | string |
merchantId | query | string |
projectId | query | string |
clientId | query | string |
tagId | query | string |
department | query | string |
reportId | query | string |
externalId | query | string |
unreported | query | boolean |
needsReview | query | boolean |
billable | query | boolean |
reimbursable | query | boolean |
moneyFlow | query | IN OUT |
dateField | query | date createdAt updatedAt submittedAt approvedAt |
from | query | string |
to | query | string |
minMinor | query | integer |
maxMinor | query | integer |
q | query | string |
limit | query | integer |
interval | query | day week month quarter year running |
groupCurrency | query | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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
status | query | PROCESSING NEEDS_REVIEW READY SUBMITTED APPROVED REJECTED REIMBURSED VOID or array of PROCESSING NEEDS_REVIEW READY SUBMITTED APPROVED REJECTED REIMBURSED VOID |
kind | query | RECEIPT MANUAL MILEAGE PER_DIEM TIME CARD |
paymentType | query | CASH PERSONAL_CARD COMPANY_CARD BANK_TRANSFER CHECK PAYPAL OTHER |
ownerId | query | string |
scope | query | mine all |
categoryId | query | string |
merchantId | query | string |
projectId | query | string |
clientId | query | string |
tagId | query | string |
department | query | string |
reportId | query | string |
externalId | query | string |
unreported | query | boolean |
needsReview | query | boolean |
billable | query | boolean |
reimbursable | query | boolean |
moneyFlow | query | IN OUT |
dateField | query | date createdAt updatedAt submittedAt approvedAt |
from | query | string |
to | query | string |
minMinor | query | integer |
maxMinor | query | integer |
q | query | string |
limit | query | integer |
interval | query | day week month quarter year running |
groupCurrency | query | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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
status | query | PROCESSING NEEDS_REVIEW READY SUBMITTED APPROVED REJECTED REIMBURSED VOID or array of PROCESSING NEEDS_REVIEW READY SUBMITTED APPROVED REJECTED REIMBURSED VOID |
kind | query | RECEIPT MANUAL MILEAGE PER_DIEM TIME CARD |
paymentType | query | CASH PERSONAL_CARD COMPANY_CARD BANK_TRANSFER CHECK PAYPAL OTHER |
ownerId | query | string |
scope | query | mine all |
categoryId | query | string |
merchantId | query | string |
projectId | query | string |
clientId | query | string |
tagId | query | string |
department | query | string |
reportId | query | string |
externalId | query | string |
unreported | query | boolean |
needsReview | query | boolean |
billable | query | boolean |
reimbursable | query | boolean |
moneyFlow | query | IN OUT |
dateField | query | date createdAt updatedAt submittedAt approvedAt |
from | query | string |
to | query | string |
minMinor | query | integer |
maxMinor | query | integer |
q | query | string |
limit | query | integer |
interval | query | day week month quarter year running |
groupCurrency | query | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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
status | query | PROCESSING NEEDS_REVIEW READY SUBMITTED APPROVED REJECTED REIMBURSED VOID or array of PROCESSING NEEDS_REVIEW READY SUBMITTED APPROVED REJECTED REIMBURSED VOID |
kind | query | RECEIPT MANUAL MILEAGE PER_DIEM TIME CARD |
paymentType | query | CASH PERSONAL_CARD COMPANY_CARD BANK_TRANSFER CHECK PAYPAL OTHER |
ownerId | query | string |
scope | query | mine all |
categoryId | query | string |
merchantId | query | string |
projectId | query | string |
clientId | query | string |
tagId | query | string |
department | query | string |
reportId | query | string |
externalId | query | string |
unreported | query | boolean |
needsReview | query | boolean |
billable | query | boolean |
reimbursable | query | boolean |
moneyFlow | query | IN OUT |
dateField | query | date createdAt updatedAt submittedAt approvedAt |
from | query | string |
to | query | string |
minMinor | query | integer |
maxMinor | query | integer |
q | query | string |
limit | query | integer |
interval | query | day week month quarter year running |
groupCurrency | query | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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
status | query | PROCESSING NEEDS_REVIEW READY SUBMITTED APPROVED REJECTED REIMBURSED VOID or array of PROCESSING NEEDS_REVIEW READY SUBMITTED APPROVED REJECTED REIMBURSED VOID |
kind | query | RECEIPT MANUAL MILEAGE PER_DIEM TIME CARD |
paymentType | query | CASH PERSONAL_CARD COMPANY_CARD BANK_TRANSFER CHECK PAYPAL OTHER |
ownerId | query | string |
scope | query | mine all |
categoryId | query | string |
merchantId | query | string |
projectId | query | string |
clientId | query | string |
tagId | query | string |
department | query | string |
reportId | query | string |
externalId | query | string |
unreported | query | boolean |
needsReview | query | boolean |
billable | query | boolean |
reimbursable | query | boolean |
moneyFlow | query | IN OUT |
dateField | query | date createdAt updatedAt submittedAt approvedAt |
from | query | string |
to | query | string |
minMinor | query | integer |
maxMinor | query | integer |
q | query | string |
limit | query | integer |
interval | query | day week month quarter year running |
groupCurrency | query | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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
status | query | PROCESSING NEEDS_REVIEW READY SUBMITTED APPROVED REJECTED REIMBURSED VOID or array of PROCESSING NEEDS_REVIEW READY SUBMITTED APPROVED REJECTED REIMBURSED VOID |
kind | query | RECEIPT MANUAL MILEAGE PER_DIEM TIME CARD |
paymentType | query | CASH PERSONAL_CARD COMPANY_CARD BANK_TRANSFER CHECK PAYPAL OTHER |
ownerId | query | string |
scope | query | mine all |
categoryId | query | string |
merchantId | query | string |
projectId | query | string |
clientId | query | string |
tagId | query | string |
department | query | string |
reportId | query | string |
externalId | query | string |
unreported | query | boolean |
needsReview | query | boolean |
billable | query | boolean |
reimbursable | query | boolean |
moneyFlow | query | IN OUT |
dateField | query | date createdAt updatedAt submittedAt approvedAt |
from | query | string |
to | query | string |
minMinor | query | integer |
maxMinor | query | integer |
q | query | string |
limit | query | integer |
interval | query | day week month quarter year running |
groupCurrency | query | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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
key | query | string |
status | query | string |
from | query | string |
to | query | string |
limit | query | integer |
cursor | query | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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
limit | query | integer |
cursor | query | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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-Id | header | string The workspace this request is for, from the person's |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
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-Id | header | string The workspace this request is for, from the person's |
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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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
scope | query | mine all |
limit | query | integer |
cursor | query | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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-Id | header | string The workspace this request is for, from the person's |
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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
Request body
multipart/form-data
file required | string (binary) |
application/json
uploadId required | string 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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
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-Id | header | string The workspace this request is for, from the person's |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
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-Id | header | string The workspace this request is for, from the person's |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
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-Id | header | string The workspace this request is for, from the person's |
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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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
action | query | string |
entityType | query | string |
entityId | query | string |
actorId | query | string |
from | query | string |
to | query | string |
limit | query | integer |
cursor | query | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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-Key | header | string 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-Id | header | string The workspace this request is for, from the person's |
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-Key | header | string 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-Id | header | string The workspace this request is for, from the person's |
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
limit | query | integer |
cursor | query | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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-Key | header | string 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-Id | header | string The workspace this request is for, from the person's |
Request body
multipart/form-data
file required | string (binary) |
split_by_blank_page | boolean |
every_page | boolean |
ranges | string |
document_types | array of string |
blueprint_name | string |
external_id | string |
application/json
Name the file with one of uploadId, file_url or file_data.
uploadId | string From POST /v1/uploads, once the file has been sent to the URL it answered with. |
split_by_blank_page | boolean |
every_page | boolean |
ranges | string |
document_types | array of string |
blueprint_name | string |
file_url | string A public https address to fetch the file from. Redirects are not followed. |
file_data | string The file itself in base64, raw or as a data URI. |
file_name | string What to call a file sent as file_url or file_data. |
external_id | string |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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-Id | header | string The workspace this request is for, from the person's |
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-Id | header | string The workspace this request is for, from the person's |
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-Id | header | string The workspace this request is for, from the person's |
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-Id | header | string The workspace this request is for, from the person's |
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-Id | header | string The workspace this request is for, from the person's |
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-Id | header | string The workspace this request is for, from the person's |
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-Id | header | string The workspace this request is for, from the person's |
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
documentType | query | RECEIPT INVOICE BILL BANK_STATEMENT CHECK TAX_FORM BUSINESS_CARD OTHER UNKNOWN PURCHASE_ORDER CONTRACT PACKING_SLIP REMITTANCE_ADVICE CREDIT_NOTE STATEMENT |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
version | query | integer |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
Request body
multipart/form-data
file required | string (binary) |
application/json
uploadId required | string 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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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
limit | query | integer |
cursor | query | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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-Key | header | string 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-Id | header | string The workspace this request is for, from the person's |
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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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-Id | header | string The workspace this request is for, from the person's |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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
q | query | string |
enabled | query | string |
type | query | EXPENSE COGS INCOME REFUND |
origin | query | SYSTEM CUSTOM ACCOUNTING |
headers | query | string |
limit | query | integer |
cursor | query | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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
mode | query | merge replace |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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-Id | header | string The workspace this request is for, from the person's |
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
q | query | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
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-Id | header | string The workspace this request is for, from the person's |
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-Id | header | string The workspace this request is for, from the person's |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
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
lastEventId | query | string The same as the Last-Event-ID header. |
Last-Event-ID | header | string The id of the last event this client received, sent again on reconnecting so the events missed since come first. |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
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
reportId | query | string |
expenseId | query | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
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-Key | header | string 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-Id | header | string The workspace this request is for, from the person's |
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-Key | header | string 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-Id | header | string The workspace this request is for, from the person's |
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-Key | header | string 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-Id | header | string The workspace this request is for, from the person's |
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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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
q | query | string |
documentId | query | string |
name | query | string |
company | query | string |
email | query | string |
phone | query | string |
website | query | string |
city | query | string |
region | query | string |
postalCode | query | string |
country | query | string |
limit | query | integer |
cursor | query | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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-Id | header | string The workspace this request is for, from the person's |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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-Id | header | string The workspace this request is for, from the person's |
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
limit | query | integer |
cursor | query | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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
limit | query | integer |
cursor | query | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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-Id | header | string The workspace this request is for, from the person's |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
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
token | query | string 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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
Request body
application/json S3AccessInput
Response
200 Success.
application/json DocumentSettings
document shares
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
type | query | RECEIPT INVOICE BILL BANK_STATEMENT CHECK TAX_FORM BUSINESS_CARD OTHER UNKNOWN PURCHASE_ORDER CONTRACT PACKING_SLIP REMITTANCE_ADVICE CREDIT_NOTE STATEMENT |
status | query | UPLOADED PROCESSING PROCESSED FAILED |
source | query | WEB IOS ANDROID EMAIL API MAIL_IN INTEGRATION |
source_id | query | string |
external_id | query | string |
blueprint_name | query | string |
owner | query | string |
device_id | query | string |
device_user_uuid | query | string |
viewed | query | boolean |
trashed | query | boolean |
envelope | query | string |
created__gt | query | string or string (date-time) |
created__gte | query | string or string (date-time) |
created__lt | query | string or string (date-time) |
created__lte | query | string or string (date-time) |
updated__gt | query | string or string (date-time) |
updated__gte | query | string or string (date-time) |
updated__lt | query | string or string (date-time) |
updated__lte | query | string or string (date-time) |
issued | query | string |
issued__gt | query | string |
issued__gte | query | string |
issued__lt | query | string |
issued__lte | query | string |
total | query | integer |
total__gt | query | integer |
total__gte | query | integer |
total__lt | query | integer |
total__lte | query | integer |
tax | query | integer |
tax__gt | query | integer |
tax__gte | query | integer |
tax__lt | query | integer |
tax__lte | query | integer |
currency | query | string |
category | query | string |
vendor | query | string |
notes | query | string |
payment_type | query | CASH PERSONAL_CARD COMPANY_CARD BANK_TRANSFER CHECK PAYPAL OTHER |
last_four_digits | query | string |
first_name | query | string |
last_name | query | string |
work_phone | query | string |
cell_phone | query | string |
company | query | string |
email | query | string |
website | query | string |
country | query | string |
state | query | string |
city | query | string |
zip | query | string |
name | query | string |
is_empty | query | string |
order_by | query | created updated issued total tax -created -updated -issued -total -tax |
folderId | query | string |
mailInBatchId | query | string |
setId | query | string |
externalId | query | string |
tag | query | string |
archived | query | boolean |
unviewed | query | boolean |
q | query | string |
from | query | string |
to | query | string |
fraudColor | query | GREEN YELLOW RED |
fraudSignal | query | 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 |
fraudReview | query | PENDING FRAUD NOT_FRAUD UNKNOWN |
limit | query | integer |
cursor | query | string |
offset | query | integer |
page | query | integer |
page_size | query | integer |
track_total_results | query | boolean |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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
client | query | ios androidThe app sending the file. Leave it out in a browser. |
Idempotency-Key | header | string 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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
Request body
multipart/form-data
file required | string (binary) |
tags | array of string |
categories | array of string |
taxonomy | array of string |
allowed_async_enrichments | array of duplicates similar_documents line_item_expansion line_item_categorization line_item_custom_categorization xero_line_coding address_parsing fraud rules vendor_resolution |
bounding_boxes | boolean |
confidence_details | boolean |
compute | boolean |
parse_address | boolean |
country | string |
max_pages_to_process | integer |
boost_mode | boolean |
auto_delete | boolean |
stitch | boolean |
crop_document | boolean |
blueprint_name | string |
blueprint_version | integer |
async | boolean |
line_item_expansion | boolean |
tiff_dpi | number |
type | RECEIPT INVOICE BILL BANK_STATEMENT CHECK TAX_FORM BUSINESS_CARD OTHER UNKNOWN PURCHASE_ORDER CONTRACT PACKING_SLIP REMITTANCE_ADVICE CREDIT_NOTE STATEMENT |
clientId | string |
externalId | string |
folderId | string |
notes | string |
capturedAt | string (date-time) |
latitude | number |
longitude | number |
locationAccuracyM | number |
deviceId | string |
merchantName | string |
date | string |
totalMinor | integer |
taxMinor | integer |
category | string |
application/json
uploadId required | string From POST /v1/uploads, once the file has been sent to the URL it answered with. |
tags | array of string |
categories | array of string |
taxonomy | array of string |
allowed_async_enrichments | array of duplicates similar_documents line_item_expansion line_item_categorization line_item_custom_categorization xero_line_coding address_parsing fraud rules vendor_resolution |
bounding_boxes | boolean |
confidence_details | boolean |
compute | boolean |
parse_address | boolean |
country | string |
max_pages_to_process | integer |
boost_mode | boolean |
auto_delete | boolean |
stitch | boolean |
crop_document | boolean |
blueprint_name | string |
blueprint_version | integer |
async | boolean |
line_item_expansion | boolean |
tiff_dpi | number |
type | RECEIPT INVOICE BILL BANK_STATEMENT CHECK TAX_FORM BUSINESS_CARD OTHER UNKNOWN PURCHASE_ORDER CONTRACT PACKING_SLIP REMITTANCE_ADVICE CREDIT_NOTE STATEMENT |
clientId | string |
externalId | string |
folderId | string |
notes | string |
capturedAt | string (date-time) |
latitude | number |
longitude | number |
locationAccuracyM | number |
deviceId | string |
merchantName | string |
date | string |
totalMinor | integer |
taxMinor | integer |
category | string |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
bounding_boxes | query | boolean |
confidence_details | query | boolean |
detailed | query | boolean |
with_scores | query | boolean |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
limit | query | integer |
cursor | query | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
lineId required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
lineId required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
lineId required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
client | query | ios androidThe app sending the file. Leave it out in a browser. |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
tagId required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
limit | query | integer |
cursor | query | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
taxLineId required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
taxLineId required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
taxLineId required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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-Key | header | string 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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
Request body
multipart/form-data
file required | string (binary) |
external_id | string |
async | boolean |
tags | array of string |
auto_delete | boolean |
blueprint_name required | string |
blueprint_version | integer |
max_pages_to_process | integer |
application/json
Name the file with one of uploadId, file_url or file_data.
uploadId | string From POST /v1/uploads, once the file has been sent to the URL it answered with. |
file_url | string A public https address to fetch the file from. Redirects are not followed. |
file_data | string The file itself in base64, raw or as a data URI. |
file_name | string What to call a file sent as file_url or file_data. |
external_id | string |
async | boolean |
tags | array of string |
auto_delete | boolean |
blueprint_name required | string |
blueprint_version | integer |
max_pages_to_process | integer |
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-Key | header | string 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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
Request body
multipart/form-data
file required | string (binary) |
external_id | string |
async | boolean |
tags | array of string |
auto_delete | boolean |
blueprint_name required | string |
blueprint_version | integer |
max_pages_to_process | integer |
application/json
Name the file with one of uploadId, file_url or file_data.
uploadId | string From POST /v1/uploads, once the file has been sent to the URL it answered with. |
file_url | string A public https address to fetch the file from. Redirects are not followed. |
file_data | string The file itself in base64, raw or as a data URI. |
file_name | string What to call a file sent as file_url or file_data. |
external_id | string |
async | boolean |
tags | array of string |
auto_delete | boolean |
blueprint_name required | string |
blueprint_version | integer |
max_pages_to_process | integer |
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-Key | header | string 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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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-Key | header | string 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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
Request body
multipart/form-data
file required | string (binary) |
external_id | string |
async | boolean |
tags | array of string |
auto_delete | boolean |
document_types | array of string |
application/json
Name the file with one of uploadId, file_url or file_data.
uploadId | string From POST /v1/uploads, once the file has been sent to the URL it answered with. |
file_url | string A public https address to fetch the file from. Redirects are not followed. |
file_data | string The file itself in base64, raw or as a data URI. |
file_name | string What to call a file sent as file_url or file_data. |
external_id | string |
async | boolean |
tags | array of string |
auto_delete | boolean |
document_types | array 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
type | query | RECEIPT INVOICE BILL BANK_STATEMENT CHECK TAX_FORM BUSINESS_CARD OTHER UNKNOWN PURCHASE_ORDER CONTRACT PACKING_SLIP REMITTANCE_ADVICE CREDIT_NOTE STATEMENT |
status | query | UPLOADED PROCESSING PROCESSED FAILED |
source | query | WEB IOS ANDROID EMAIL API MAIL_IN INTEGRATION |
source_id | query | string |
external_id | query | string |
blueprint_name | query | string |
owner | query | string |
device_id | query | string |
device_user_uuid | query | string |
viewed | query | boolean |
trashed | query | boolean |
envelope | query | string |
created__gt | query | string or string (date-time) |
created__gte | query | string or string (date-time) |
created__lt | query | string or string (date-time) |
created__lte | query | string or string (date-time) |
updated__gt | query | string or string (date-time) |
updated__gte | query | string or string (date-time) |
updated__lt | query | string or string (date-time) |
updated__lte | query | string or string (date-time) |
issued | query | string |
issued__gt | query | string |
issued__gte | query | string |
issued__lt | query | string |
issued__lte | query | string |
total | query | integer |
total__gt | query | integer |
total__gte | query | integer |
total__lt | query | integer |
total__lte | query | integer |
tax | query | integer |
tax__gt | query | integer |
tax__gte | query | integer |
tax__lt | query | integer |
tax__lte | query | integer |
currency | query | string |
category | query | string |
vendor | query | string |
notes | query | string |
payment_type | query | CASH PERSONAL_CARD COMPANY_CARD BANK_TRANSFER CHECK PAYPAL OTHER |
last_four_digits | query | string |
first_name | query | string |
last_name | query | string |
work_phone | query | string |
cell_phone | query | string |
company | query | string |
email | query | string |
website | query | string |
country | query | string |
state | query | string |
city | query | string |
zip | query | string |
name | query | string |
is_empty | query | string |
order_by | query | created updated issued total tax -created -updated -issued -total -tax |
folderId | query | string |
mailInBatchId | query | string |
setId | query | string |
externalId | query | string |
tag | query | string |
archived | query | boolean |
unviewed | query | boolean |
q | query | string |
from | query | string |
to | query | string |
fraudColor | query | GREEN YELLOW RED |
fraudSignal | query | 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 |
fraudReview | query | PENDING FRAUD NOT_FRAUD UNKNOWN |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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-Key | header | string 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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
Request body
multipart/form-data
file required | string (binary) |
external_id | string |
async | boolean |
tags | array of string |
auto_delete | boolean |
document_types | array of string |
application/json
Name the file with one of uploadId, file_url or file_data.
uploadId | string From POST /v1/uploads, once the file has been sent to the URL it answered with. |
file_url | string A public https address to fetch the file from. Redirects are not followed. |
file_data | string The file itself in base64, raw or as a data URI. |
file_name | string What to call a file sent as file_url or file_data. |
external_id | string |
async | boolean |
tags | array of string |
auto_delete | boolean |
document_types | array 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
client | query | ios androidThe app sending the file. Leave it out in a browser. |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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
limit | query | integer |
cursor | query | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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-Key | header | string 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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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
limit | query | integer |
cursor | query | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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-Key | header | string 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-Id | header | string The workspace this request is for, from the person's |
Request body
multipart/form-data
file required | string (binary) |
split_by_blank_page | boolean |
every_page | boolean |
ranges | string |
document_types | array of string |
blueprint_name | string |
external_id | string |
application/json
Name the file with one of uploadId, file_url or file_data.
uploadId | string From POST /v1/uploads, once the file has been sent to the URL it answered with. |
split_by_blank_page | boolean |
every_page | boolean |
ranges | string |
document_types | array of string |
blueprint_name | string |
file_url | string A public https address to fetch the file from. Redirects are not followed. |
file_data | string The file itself in base64, raw or as a data URI. |
file_name | string What to call a file sent as file_url or file_data. |
external_id | string |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
Response
200 Success.
application/json DocumentSet
domains
GET /v1/domains List the domains the caller runs
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 required | path | string |
Response
204 Done, with no content.
GET /v1/domains/{id} Get a domain
PATCH /v1/domains/{id} Change a domain
Only a signed-in session reaches this. Try it
Parameters
id required | path | string |
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 required | path | string |
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 required | path | string |
requestId required | path | string |
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 required | path | string |
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 required | path | string |
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 required | path | string |
userId required | path | string |
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 required | path | string |
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 required | path | string |
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 required | path | string |
groupId required | path | string |
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 required | path | string |
groupId required | path | string |
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 required | path | string |
groupId required | path | string |
userId required | path | string |
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 required | path | string |
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 required | path | string |
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 required | path | string |
userId required | path | string |
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 required | path | string |
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 required | path | string |
migrationId required | path | string |
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 required | path | string |
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 required | path | string |
Request body
application/json VacationDelegateInput
Response
204 Done, with no content.
POST /v1/domains/{id}/verify Check a domain's DNS record
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
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 required | query | string |
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 required | query | string |
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
status | query | PROCESSING NEEDS_REVIEW READY SUBMITTED APPROVED REJECTED REIMBURSED VOID or array of PROCESSING NEEDS_REVIEW READY SUBMITTED APPROVED REJECTED REIMBURSED VOID |
kind | query | RECEIPT MANUAL MILEAGE PER_DIEM TIME CARD |
paymentType | query | CASH PERSONAL_CARD COMPANY_CARD BANK_TRANSFER CHECK PAYPAL OTHER |
ownerId | query | string |
scope | query | mine all |
categoryId | query | string |
merchantId | query | string |
projectId | query | string |
clientId | query | string |
tagId | query | string |
department | query | string |
reportId | query | string |
externalId | query | string |
unreported | query | boolean |
needsReview | query | boolean |
billable | query | boolean |
reimbursable | query | boolean |
moneyFlow | query | IN OUT |
dateField | query | date createdAt updatedAt submittedAt approvedAt |
from | query | string |
to | query | string |
minMinor | query | integer |
maxMinor | query | integer |
q | query | string |
sort | query | date:asc date:desc merchant:asc merchant:desc category:asc category:desc status:asc status:desc amount:asc amount:desc |
limit | query | integer |
cursor | query | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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-Key | header | string 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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
If-Match | header | string The expense's updatedAt, as read. |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
limit | query | integer |
cursor | query | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
Idempotency-Key | header | string 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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
commentId required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
code required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
Request body
application/json MoveExpenseInput
Response
200 Success.
application/json MovedExpense
GET /v1/expenses/{id}/public-link Get an expense's public receipt link
Whoever can read the expense can ask, while the workspace has public receipts on.
Only a signed-in session reaches this. Try it
Parameters
id required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
Response
200 Success.
application/json PublicReceiptLink
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 required | path | string |
client | query | ios androidThe app sending the file. Leave it out in a browser. |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
Request body
multipart/form-data
file required | string (binary) |
mode | add replace |
clientId | string |
deviceId | string |
application/json
uploadId required | string From POST /v1/uploads, once the file has been sent to the URL it answered with. |
mode | add replace |
clientId | string |
deviceId | string |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
taxLineId required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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
status | query | PROCESSING NEEDS_REVIEW READY SUBMITTED APPROVED REJECTED REIMBURSED VOID or array of PROCESSING NEEDS_REVIEW READY SUBMITTED APPROVED REJECTED REIMBURSED VOID |
kind | query | RECEIPT MANUAL MILEAGE PER_DIEM TIME CARD |
paymentType | query | CASH PERSONAL_CARD COMPANY_CARD BANK_TRANSFER CHECK PAYPAL OTHER |
ownerId | query | string |
scope | query | mine all |
categoryId | query | string |
merchantId | query | string |
projectId | query | string |
clientId | query | string |
tagId | query | string |
department | query | string |
reportId | query | string |
externalId | query | string |
unreported | query | boolean |
needsReview | query | boolean |
billable | query | boolean |
reimbursable | query | boolean |
moneyFlow | query | IN OUT |
dateField | query | date createdAt updatedAt submittedAt approvedAt |
from | query | string |
to | query | string |
minMinor | query | integer |
maxMinor | query | integer |
q | query | string |
groupBy required | query | category merchant member project status month |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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
months | query | integer |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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
status | query | PROCESSING NEEDS_REVIEW READY SUBMITTED APPROVED REJECTED REIMBURSED VOID or array of PROCESSING NEEDS_REVIEW READY SUBMITTED APPROVED REJECTED REIMBURSED VOID |
kind | query | RECEIPT MANUAL MILEAGE PER_DIEM TIME CARD |
paymentType | query | CASH PERSONAL_CARD COMPANY_CARD BANK_TRANSFER CHECK PAYPAL OTHER |
ownerId | query | string |
scope | query | mine all |
categoryId | query | string |
merchantId | query | string |
projectId | query | string |
clientId | query | string |
tagId | query | string |
department | query | string |
reportId | query | string |
externalId | query | string |
unreported | query | boolean |
needsReview | query | boolean |
billable | query | boolean |
reimbursable | query | boolean |
moneyFlow | query | IN OUT |
dateField | query | date createdAt updatedAt submittedAt approvedAt |
from | query | string |
to | query | string |
minMinor | query | integer |
maxMinor | query | integer |
q | query | string |
ids | query | string or array of string |
currency | query | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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
documentId | query | string |
target | query | string |
externalId | query | string |
via | query | EXPORT SYNC API |
limit | query | integer |
cursor | query | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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-Id | header | string The workspace this request is for, from the person's |
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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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-Id | header | string The workspace this request is for, from the person's |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
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
limit | query | integer |
cursor | query | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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
q | query | string |
parentId | query | string |
limit | query | integer |
cursor | query | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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-Id | header | string The workspace this request is for, from the person's |
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
limit | query | integer |
cursor | query | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
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-Id | header | string The workspace this request is for, from the person's |
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-Id | header | string The workspace this request is for, from the person's |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
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-Id | header | string The workspace this request is for, from the person's |
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
limit | query | integer |
cursor | query | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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
type | query | RECEIPT INVOICE BILL BANK_STATEMENT CHECK TAX_FORM BUSINESS_CARD OTHER UNKNOWN PURCHASE_ORDER CONTRACT PACKING_SLIP REMITTANCE_ADVICE CREDIT_NOTE STATEMENT |
status | query | UPLOADED PROCESSING PROCESSED FAILED |
source | query | WEB IOS ANDROID EMAIL API MAIL_IN INTEGRATION |
source_id | query | string |
external_id | query | string |
blueprint_name | query | string |
owner | query | string |
device_id | query | string |
device_user_uuid | query | string |
viewed | query | boolean |
trashed | query | boolean |
envelope | query | string |
created__gt | query | string or string (date-time) |
created__gte | query | string or string (date-time) |
created__lt | query | string or string (date-time) |
created__lte | query | string or string (date-time) |
updated__gt | query | string or string (date-time) |
updated__gte | query | string or string (date-time) |
updated__lt | query | string or string (date-time) |
updated__lte | query | string or string (date-time) |
issued | query | string |
issued__gt | query | string |
issued__gte | query | string |
issued__lt | query | string |
issued__lte | query | string |
total | query | integer |
total__gt | query | integer |
total__gte | query | integer |
total__lt | query | integer |
total__lte | query | integer |
tax | query | integer |
tax__gt | query | integer |
tax__gte | query | integer |
tax__lt | query | integer |
tax__lte | query | integer |
currency | query | string |
category | query | string |
vendor | query | string |
notes | query | string |
payment_type | query | CASH PERSONAL_CARD COMPANY_CARD BANK_TRANSFER CHECK PAYPAL OTHER |
last_four_digits | query | string |
first_name | query | string |
last_name | query | string |
work_phone | query | string |
cell_phone | query | string |
company | query | string |
email | query | string |
website | query | string |
country | query | string |
state | query | string |
city | query | string |
zip | query | string |
name | query | string |
is_empty | query | string |
order_by | query | created updated issued total tax -created -updated -issued -total -tax |
folderId | query | string |
mailInBatchId | query | string |
setId | query | string |
externalId | query | string |
tag | query | string |
archived | query | boolean |
unviewed | query | boolean |
q | query | string |
from | query | string |
to | query | string |
fraudColor | query | GREEN YELLOW RED |
fraudSignal | query | 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 |
fraudReview | query | PENDING FRAUD NOT_FRAUD UNKNOWN |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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
tab | query | all unread todos |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string 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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string 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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string 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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string 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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string 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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string 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-Id | header | string The workspace this request is for, from the person's |
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 required | path | string 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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string 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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string 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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string 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. |
state | query | PENDING SYNCED FAILED SKIPPED VOIDED |
limit | query | integer |
cursor | query | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string 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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string 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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string 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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string 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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string 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. |
from | query | string |
to | query | string |
resend | query | true false |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string 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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string 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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string 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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string 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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string 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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string 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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string 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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string 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. |
q | query | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string 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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string 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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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
status | query | PENDING EXPIRED ACCEPTED REVOKED |
limit | query | integer |
cursor | query | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
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-Id | header | string The workspace this request is for, from the person's |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
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-Id | header | string The workspace this request is for, from the person's |
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
status | query | DRAFT SENT VIEWED PARTIALLY_PAID PAID VOID OVERDUE |
q | query | string |
limit | query | integer |
cursor | query | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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
token | query | string |
Response
200 Success.
application/json JoinLinkPreview
POST /v1/join/link Join through a join link
Only a signed-in session reaches this. Try it
Request body
application/json RedeemJoinLinkInput
Response
200 Success.
application/json JoinResult
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 required | path | string |
Response
200 Success.
application/json JoinResult
join links
GET /v1/join-links List join links
Only a signed-in session reaches this. Needs the members.manage permission. Try it
Parameters
X-Workspace-Id | header | string The workspace this request is for, from the person's |
Response
200 Success.
application/json JoinLinkList
POST /v1/join-links Create a join link
Only a signed-in session reaches this. Needs the members.manage permission. Needs a live plan. Try it
Parameters
X-Workspace-Id | header | string The workspace this request is for, from the person's |
Request body
application/json CreateJoinLinkInput
Response
201 Success.
application/json JoinLink
DELETE /v1/join-links/{id} Withdraw a join link
Open on a lapsed plan: withdrawing access is never stopped.
Only a signed-in session reaches this. Needs the members.manage permission. Try it
Parameters
id required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
Response
204 Done, with no content.
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-Id | header | string The workspace this request is for, from the person's |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
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
limit | query | integer |
cursor | query | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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-Id | header | string The workspace this request is for, from the person's |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
limit | query | integer |
cursor | query | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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-Id | header | string The workspace this request is for, from the person's |
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-Version | header | string The revision in use, once initialize has settled one. It must match the version in the message. |
Mcp-Method | header | string The method, on the current revision: the same value as in the message. |
Mcp-Name | header | string 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
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
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
q | query | string |
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
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 required | path | string |
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
DELETE /v1/me/sessions/{id} Sign one session out
Only a signed-in session reaches this. Try it
Parameters
id required | path | string |
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 required | path | string |
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 required | path | string |
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
q | query | string |
status | query | ACTIVE SUSPENDED |
role | query | OWNER ADMIN APPROVER ACCOUNTANT AUDITOR MEMBER EDITOR CARD_ADMIN PEOPLE_ADMIN PAYMENTS_ADMIN |
limit | query | integer |
cursor | query | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
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 required | path | string |
sessionId required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
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-Id | header | string The workspace this request is for, from the person's |
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-Id | header | string The workspace this request is for, from the person's |
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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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
q | query | string |
archived | query | string |
limit | query | integer |
cursor | query | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
aliasId required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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-Key | header | string 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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
client | query | ios androidThe app sending the file. Leave it out in a browser. |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
Request body
multipart/form-data
file required | string (binary) |
reading required | START END |
application/json
uploadId required | string From POST /v1/uploads, once the file has been sent to the URL it answered with. |
reading required | START 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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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
from | query | string |
to | query | string |
scope | query | mine all |
ownerId | query | string |
vehicleId | query | string |
purpose | query | business medical charity |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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
from | query | string |
to | query | string |
scope | query | mine all |
ownerId | query | string |
vehicleId | query | string |
purpose | query | business medical charity |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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
q | query | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | query | string |
tripId | query | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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
q | query | string |
archived | query | string |
limit | query | integer |
cursor | query | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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
limit | query | integer |
cursor | query | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
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-Id | header | string The workspace this request is for, from the person's |
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 required | query | code |
client_id required | query | string A registered client id, or the URL of a client metadata document. |
redirect_uri required | query | string Exactly as registered. |
scope | query | string Scopes separated by spaces. |
state | query | string Comes back unchanged on the redirect. |
code_challenge required | query | string 43 characters of base64url: the SHA-256 of the verifier. |
code_challenge_method required | query | S256 |
resource | query | string 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
limit | query | integer |
cursor | query | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
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-Id | header | string The workspace this request is for, from the person's |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
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
limit | query | integer |
cursor | query | string |
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 required | path | string |
Response
204 Done, with no content.
GET /v1/oauth/consent Read what an app is asking for
For the consent screen. request is the value /oauth/authorize put on the address.
Only a signed-in session reaches this. Try it
Parameters
request required | query | string |
Response
200 Success.
application/json OAuthConsent
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
details | query | boolean |
tag | query | string |
limit | query | integer |
cursor | query | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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-Key | header | string 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-Id | header | string The workspace this request is for, from the person's |
Request body
multipart/form-data
file required | string (binary) |
external_id | string |
async | boolean |
tags | array of string |
auto_delete | boolean |
details | boolean |
application/json
Name the file with one of uploadId, file_url or file_data.
uploadId | string From POST /v1/uploads, once the file has been sent to the URL it answered with. |
file_url | string A public https address to fetch the file from. Redirects are not followed. |
file_data | string The file itself in base64, raw or as a data URI. |
file_name | string What to call a file sent as file_url or file_data. |
external_id | string |
async | boolean |
tags | array of string |
auto_delete | boolean |
details | boolean |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
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 required | path | string |
details | query | boolean |
tag | query | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
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-Key | header | string 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-Id | header | string The workspace this request is for, from the person's |
Request body
multipart/form-data
file required | string (binary) |
external_id | string |
async | boolean |
tags | array of string |
auto_delete | boolean |
details | boolean |
application/json
Name the file with one of uploadId, file_url or file_data.
uploadId | string From POST /v1/uploads, once the file has been sent to the URL it answered with. |
file_url | string A public https address to fetch the file from. Redirects are not followed. |
file_data | string The file itself in base64, raw or as a data URI. |
file_name | string What to call a file sent as file_url or file_data. |
external_id | string |
async | boolean |
tags | array of string |
auto_delete | boolean |
details | boolean |
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
limit | query | integer |
cursor | query | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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-Key | header | string 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-Id | header | string The workspace this request is for, from the person's |
Request body
multipart/form-data
file required | string (binary) |
split_by_blank_page | boolean |
every_page | boolean |
ranges | string |
document_types | array of string |
blueprint_name | string |
external_id | string |
application/json
Name the file with one of uploadId, file_url or file_data.
uploadId | string From POST /v1/uploads, once the file has been sent to the URL it answered with. |
split_by_blank_page | boolean |
every_page | boolean |
ranges | string |
document_types | array of string |
blueprint_name | string |
file_url | string A public https address to fetch the file from. Redirects are not followed. |
file_data | string The file itself in base64, raw or as a data URI. |
file_name | string What to call a file sent as file_url or file_data. |
external_id | string |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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
archived | query | string |
limit | query | integer |
cursor | query | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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-Id | header | string The workspace this request is for, from the person's |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
Request body
multipart/form-data
file required | string (binary) |
force | string |
createExpenses | string |
reimbursable | string |
mapping | string The column mapping, as JSON text. Leave it out to use the suggested one. OFX and QFX need none. |
application/json
uploadId required | string From POST /v1/uploads, once the file has been sent to the URL it answered with. |
force | string |
createExpenses | string |
reimbursable | string |
mapping | string 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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
Request body
multipart/form-data
file required | string (binary) |
mapping | string The column mapping, as JSON text. Leave it out to use the suggested one. OFX and QFX need none. |
application/json
uploadId required | string From POST /v1/uploads, once the file has been sent to the URL it answered with. |
mapping | string 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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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-Id | header | string The workspace this request is for, from the person's |
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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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-Id | header | string The workspace this request is for, from the person's |
Request body
multipart/form-data
file required | string (binary) |
force | string |
createExpenses | string |
reimbursable | string |
mapping | string The column mapping, as JSON text. Leave it out to use the suggested one. OFX and QFX need none. |
application/json
uploadId required | string From POST /v1/uploads, once the file has been sent to the URL it answered with. |
force | string |
createExpenses | string |
reimbursable | string |
mapping | string 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-Id | header | string The workspace this request is for, from the person's |
Request body
multipart/form-data
file required | string (binary) |
mapping | string The column mapping, as JSON text. Leave it out to use the suggested one. OFX and QFX need none. |
application/json
uploadId required | string From POST /v1/uploads, once the file has been sent to the URL it answered with. |
mapping | string 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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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-Id | header | string The workspace this request is for, from the person's |
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-Id | header | string The workspace this request is for, from the person's |
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-Id | header | string The workspace this request is for, from the person's |
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-Id | header | string The workspace this request is for, from the person's |
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 required | path | string |
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-Id | header | string The workspace this request is for, from the person's |
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-Id | header | string The workspace this request is for, from the person's |
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-Id | header | string The workspace this request is for, from the person's |
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 required | path | string |
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-Key | header | string 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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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
q | query | string |
archived | query | string |
limit | query | integer |
cursor | query | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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
ownerId | query | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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-Id | header | string The workspace this request is for, from the person's |
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 required | path | string |
ownerId | query | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
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-Id | header | string The workspace this request is for, from the person's |
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-Id | header | string The workspace this request is for, from the person's |
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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
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-Id | header | string The workspace this request is for, from the person's |
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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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
tab | query | general cards fields flags |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
Request body
application/json UpdatePolicyRuleInput
Response
200 Success.
application/json PolicyRule
profile
DELETE /v1/profile/photo Remove your profile photo
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-Id | header | string The workspace this request is for, from the person's |
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
q | query | string |
archived | query | string |
clientId | query | string |
limit | query | integer |
cursor | query | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
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 required | path | string |
Request body
application/json InvoiceMessageInput
Response
201 Success.
application/json PublicInvoice
GET /v1/public/report-approvals/{token} Read a report sent for approval by link
Needs no sign-in: the token in the link is the whole of the access, and it opens this one report. A wrong or expired token is a 404.
No credential needed. Try it
Parameters
token required | path | string |
Response
200 Success.
application/json ReportApprovalLink
POST /v1/public/report-approvals/{token}/approve Approve a report by its link
Only while the link is OPEN. Needs no sign-in: the token in the link is the whole of the access, and it opens this one report. A wrong or expired token is a 404.
No credential needed. Try it
Parameters
token required | path | string |
Response
200 Success.
application/json ReportApprovalLink
POST /v1/public/report-approvals/{token}/paid Say a report approved by its link was paid
Only once it is APPROVED. The link is then SETTLED and shows no figures. Needs no sign-in: the token in the link is the whole of the access, and it opens this one report. A wrong or expired token is a 404.
No credential needed. Try it
Parameters
token required | path | string |
Response
200 Success.
application/json ReportApprovalLink
POST /v1/public/report-approvals/{token}/reject Reject a report by its link
Only while the link is OPEN. The reason goes to the person who sent it. Needs no sign-in: the token in the link is the whole of the access, and it opens this one report. A wrong or expired token is a 404.
No credential needed. Try it
Parameters
token required | path | string |
Request body
application/json OutsideDecisionInput
Response
200 Success.
application/json ReportApprovalLink
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 required | path | string |
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
status | query | PENDING PROCESSING PAID FAILED CANCELLED |
payeeId | query | string |
limit | query | integer |
cursor | query | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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
ids | query | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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
limit | query | integer |
cursor | query | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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-Id | header | string The workspace this request is for, from the person's |
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-Id | header | string The workspace this request is for, from the person's |
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-Id | header | string The workspace this request is for, from the person's |
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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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
product | query | app_web api mcp model_document_extraction model_bank_statements model_checks model_fraud_detection |
environment | query | production sandbox |
limit | query | integer |
cursor | query | string |
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
limit | query | integer |
cursor | query | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
from | query | string |
to | query | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
from | query | string |
to | query | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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
status | query | DRAFT SUBMITTED APPROVED REJECTED REIMBURSED EXPORTED CLOSED or array of DRAFT SUBMITTED APPROVED REJECTED REIMBURSED EXPORTED CLOSED |
scope | query | mine all assigned |
ownerId | query | string |
q | query | string |
from | query | string |
to | query | string |
limit | query | integer |
cursor | query | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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-Key | header | string 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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
limit | query | integer |
cursor | query | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
Idempotency-Key | header | string 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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
commentId required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
expenseId required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
expenseId required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
userId required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | query | string The ID printed on the report, such as RPT-0012. |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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
q | query | string |
sort | query | name members activity |
direction | query | asc desc |
open | query | true false |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
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-Id | header | string The workspace this request is for, from the person's |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
Response
204 Done, with no content.
GET /v1/rooms/{id} Get a room
Only a signed-in session reaches this. Try it
Parameters
id required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
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 required | path | string |
userId required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
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 required | path | string |
parentId | query | string |
after | query | string |
limit | query | integer |
cursor | query | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
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 required | path | string |
Idempotency-Key | header | string 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-Id | header | string The workspace this request is for, from the person's |
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 required | path | string |
messageId required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
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 required | path | string |
messageId required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
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 required | path | string |
messageId required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
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 required | path | string |
messageId required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
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-Id | header | string The workspace this request is for, from the person's |
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-Id | header | string The workspace this request is for, from the person's |
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-Id | header | string The workspace this request is for, from the person's |
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-Id | header | string The workspace this request is for, from the person's |
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-Id | header | string The workspace this request is for, from the person's |
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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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-Id | header | string The workspace this request is for, from the person's |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
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
limit | query | integer |
cursor | query | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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-Id | header | string The workspace this request is for, from the person's |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
Response
204 Done, with no content.
search
GET /v1/search Search everything in the workspace
Only a signed-in session reaches this. Try it
Parameters
q required | query | string |
kind | query | expense document report merchant contact message task |
limit | query | integer |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
Response
200 Success.
application/json SearchResults
GET /v1/search/accounting The accounting shortcuts your role gives you
Only a signed-in session reaches this. Try it
Parameters
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
from | query | string |
to | query | string |
accountId | query | string |
withdrawalType | query | MANUAL PAYROLL ACH ACH_FILE ACH_PROVIDER |
groupBy | query | month week quarter year |
cursor | query | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
from | query | string |
to | query | string |
accountId | query | string |
withdrawalType | query | MANUAL PAYROLL ACH ACH_FILE ACH_PROVIDER |
groupBy | query | month week quarter year |
cursor | query | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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
limit | query | integer |
cursor | query | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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-Key | header | string 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-Id | header | string The workspace this request is for, from the person's |
Request body
multipart/form-data
file required | string (binary) |
split_by_blank_page | boolean |
every_page | boolean |
ranges | string |
document_types | array of string |
blueprint_name | string |
external_id | string |
application/json
Name the file with one of uploadId, file_url or file_data.
uploadId | string From POST /v1/uploads, once the file has been sent to the URL it answered with. |
split_by_blank_page | boolean |
every_page | boolean |
ranges | string |
document_types | array of string |
blueprint_name | string |
file_url | string A public https address to fetch the file from. Redirects are not followed. |
file_data | string The file itself in base64, raw or as a data URI. |
file_name | string What to call a file sent as file_url or file_data. |
external_id | string |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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-Key | header | string 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-Id | header | string The workspace this request is for, from the person's |
Request body
multipart/form-data
file required | string (binary) |
split_by_blank_page | boolean |
every_page | boolean |
ranges | string |
document_types | array of string |
blueprint_name | string |
external_id | string |
application/json
Name the file with one of uploadId, file_url or file_data.
uploadId | string From POST /v1/uploads, once the file has been sent to the URL it answered with. |
split_by_blank_page | boolean |
every_page | boolean |
ranges | string |
document_types | array of string |
blueprint_name | string |
file_url | string A public https address to fetch the file from. Redirects are not followed. |
file_data | string The file itself in base64, raw or as a data URI. |
file_name | string What to call a file sent as file_url or file_data. |
external_id | string |
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-Key | header | string 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-Id | header | string The workspace this request is for, from the person's |
Request body
multipart/form-data
file required | string (binary) |
split_by_blank_page | boolean |
every_page | boolean |
ranges | string |
document_types | array of string |
blueprint_name | string |
external_id | string |
application/json
Name the file with one of uploadId, file_url or file_data.
uploadId | string From POST /v1/uploads, once the file has been sent to the URL it answered with. |
split_by_blank_page | boolean |
every_page | boolean |
ranges | string |
document_types | array of string |
blueprint_name | string |
file_url | string A public https address to fetch the file from. Redirects are not followed. |
file_data | string The file itself in base64, raw or as a data URI. |
file_name | string What to call a file sent as file_url or file_data. |
external_id | string |
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-Key | header | string 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-Id | header | string The workspace this request is for, from the person's |
Request body
multipart/form-data
file required | string (binary) |
split_by_blank_page | boolean |
every_page | boolean |
ranges | string |
document_types | array of string |
blueprint_name | string |
external_id | string |
application/json
Name the file with one of uploadId, file_url or file_data.
uploadId | string From POST /v1/uploads, once the file has been sent to the URL it answered with. |
split_by_blank_page | boolean |
every_page | boolean |
ranges | string |
document_types | array of string |
blueprint_name | string |
file_url | string A public https address to fetch the file from. Redirects are not followed. |
file_data | string The file itself in base64, raw or as a data URI. |
file_name | string What to call a file sent as file_url or file_data. |
external_id | string |
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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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
q | query | string |
archived | query | string |
limit | query | integer |
cursor | query | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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
tagIds | query | string |
level | query | string |
q | query | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
Response
200 Success.
application/json TagLevels
tasks
GET /v1/tasks List tasks
Only a signed-in session reaches this. Try it
Parameters
status | query | OPEN DONE |
mine | query | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
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-Id | header | string The workspace this request is for, from the person's |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
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
year | query | integer |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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-Key | header | string 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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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
limit | query | integer |
cursor | query | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
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-Id | header | string The workspace this request is for, from the person's |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
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-Id | header | string The workspace this request is for, from the person's |
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-Id | header | string The workspace this request is for, from the person's |
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
state | query | UNMATCHED MATCHED IGNORED EXPENSED PENDING |
paymentAccountId | query | string |
paymentAccountIds | query | string |
from | query | string |
to | query | string |
q | query | string |
minMinor | query | integer |
maxMinor | query | integer |
missingReceipt | query | string |
unreported | query | string |
currency | query | string |
limit | query | integer |
cursor | query | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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
state | query | UNMATCHED MATCHED IGNORED EXPENSED PENDING |
paymentAccountId | query | string |
paymentAccountIds | query | string |
from | query | string |
to | query | string |
q | query | string |
minMinor | query | integer |
maxMinor | query | integer |
missingReceipt | query | string |
unreported | query | string |
currency | query | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | query | string |
to required | query | string |
paymentAccountId | query | string |
feed | query | string |
currency | query | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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
state | query | UNMATCHED MATCHED IGNORED EXPENSED PENDING |
paymentAccountId | query | string |
paymentAccountIds | query | string |
from | query | string |
to | query | string |
q | query | string |
minMinor | query | integer |
maxMinor | query | integer |
missingReceipt | query | string |
unreported | query | string |
currency | query | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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
scope | query | mine all |
from | query | string |
to | query | string |
limit | query | integer |
cursor | query | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | query | string |
to required | query | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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
q | query | string |
archived | query | string |
userId | query | string |
limit | query | integer |
cursor | query | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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-Key | header | string 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-Id | header | string The workspace this request is for, from the person's |
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-Key | header | string 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-Id | header | string The workspace this request is for, from the person's |
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
limit | query | integer |
cursor | query | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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-Key | header | string 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-Id | header | string The workspace this request is for, from the person's |
Request body
multipart/form-data
file required | string (binary) |
split_by_blank_page | boolean |
every_page | boolean |
ranges | string |
document_types | array of string |
blueprint_name | string |
external_id | string |
application/json
Name the file with one of uploadId, file_url or file_data.
uploadId | string From POST /v1/uploads, once the file has been sent to the URL it answered with. |
split_by_blank_page | boolean |
every_page | boolean |
ranges | string |
document_types | array of string |
blueprint_name | string |
file_url | string A public https address to fetch the file from. Redirects are not followed. |
file_data | string The file itself in base64, raw or as a data URI. |
file_name | string What to call a file sent as file_url or file_data. |
external_id | string |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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-Key | header | string 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-Id | header | string The workspace this request is for, from the person's |
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
apiKeyId | query | string |
include | query | keys |
limit | query | integer |
cursor | query | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
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-Id | header | string The workspace this request is for, from the person's |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
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 required | path | string |
limit | query | integer |
cursor | query | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
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-Id | header | string The workspace this request is for, from the person's |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
Response
201 Success.
application/json WebhookDelivery
well known
GET /.well-known/oauth-authorization-server Read the authorization server metadata
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
workflow approvals
GET /v1/workflow-approvals See what an approval link is asking
Needs no sign-in: the signed token in the link proves it. It decides nothing, because a mail scanner follows links.
No credential needed. Try it
Parameters
token required | query | string |
Response
200 Success.
application/json WorkflowApprovalLink
POST /v1/workflow-approvals Answer with an approval link
The first answer settles the step and the run goes on down that path. Any other answer changes nothing and says what happened.
No credential needed. Try it
Request body
application/json WorkflowApprovalTokenInput
Response
200 Success.
application/json WorkflowApprovalAnswer
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
limit | query | integer |
cursor | query | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
limit | query | integer |
cursor | query | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
Idempotency-Key | header | string 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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
runId required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
runId required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
runId required | path | string |
stepId required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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 required | path | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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-Id | header | string The workspace this request is for, from the person's |
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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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
userId | query | string |
X-Workspace-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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-Id | header | string The workspace this request is for, from the person's |
X-Act-As | header | string The user id of someone who named the caller their delegate, to act for them. Checked on every request, so a delegation that ended stops at once, with 403 and |
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-Id | header | string The workspace this request is for, from the person's |
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
limit | query | integer |
cursor | query | string |
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-Key | header | string 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.
document.createddocument.processeddocument.faileddocument.enricheddocument.enrichment_faileddocument_set.completeddocument_set.failedsplit.completedsplit.createdsplit.failedsplit_and_classify.createdsplit_and_classify.failedw2_set.createdw2_set.failedbank_statement_set.createdbank_statement_set.failedexpense.createdexpense.updatedexpense.deletedreport.submittedreport.approvedreport.rejectedreport.reimbursedintegration.postedintegration.failedsubscription
Each one posts WebhookEventPayload.
Schemas
TravelTripListQuery
scope | mine all |
from | string |
to | string |
CreateClientCertificateInput
name required | string |
certificate required | string |
ReleaseNotificationQuery
product | ReleaseProduct |
environment | ReleaseEnvironment |
CreateAttachmentInput
uploadId required | string |
CreateUploadInput
filename required | string |
contentType required | string |
sizeBytes required | integer |
purpose required | document document_set expense_receipt odometer_photo policy_document statement attachment catalog_import iif_lists people_list profile_photo |
clientId | string |
ExportRecordInput
documentIds required | array of string |
target required | string |
externalId | string |
ExportRecordQuery
documentId | string |
target | string |
externalId | string |
via | EXPORT SYNC API |
DocumentReadQuery
bounding_boxes | boolean |
confidence_details | boolean |
detailed | boolean |
with_scores | boolean |
DocumentTagInput
name required | string |
DocumentTagsInput
tags required | array of string |
ExpenseLineInput
description required | string |
sku | string or null |
quantity | number,null |
unitPriceMinor | integer or null |
amountMinor required | integer |
taxMinor | integer or null |
categoryId | string,null |
ExpenseTaxLineInput
name | string or null |
code | string or null |
ratePct | number or null |
baseMinor | integer or null |
amountMinor required | integer |
UpdateExpenseLineInput
description | string |
sku | string or null |
quantity | number,null |
unitPriceMinor | integer or null |
amountMinor | integer |
taxMinor | integer or null |
categoryId | string,null |
UpdateExpenseTaxLineInput
name | string or null |
code | string or null |
ratePct | number or null |
baseMinor | integer or null |
amountMinor | integer |
CategoryImportQuery
mode | merge replace |
CloseWorkspaceInput
confirmName required | string |
ProvisionInput
employees | array of objectFields
| ||||||||||||||||||||||||||||||||||||||||||||||||
url | string (uri) | ||||||||||||||||||||||||||||||||||||||||||||||||
dryRun | boolean | ||||||||||||||||||||||||||||||||||||||||||||||||
shouldFixApprovalChains | boolean | ||||||||||||||||||||||||||||||||||||||||||||||||
removeMissing | boolean |
AutomationPreviewInput
conditions required | array of objectFields
|
AutomationRuleInput
name required | string | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
enabled | boolean | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
conditions required | array of objectFields
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
actions required | objectFields
|
BulkMemberInput
ids required | array of string |
role | MemberRole |
status | MemberStatus |
managerId | string,null |
CreateInvitationInput
email required | string (email) |
name | string |
role | MemberRole |
message | string |
ChangeMailInAddressInput
shippingAddress required | objectFields
|
MailInSettingsInput
address required | object or nullFields
|
CreateMailInInput
envelopes | integer | ||||||||||||||||
expectedDocuments required | integer | ||||||||||||||||
afterScan | MailInDisposal | ||||||||||||||||
shippingAddress | objectFields
| ||||||||||||||||
folderId | string,null | ||||||||||||||||
notes | string or null |
CreateWorkspaceInput
name required | string |
baseCurrency | string |
country | string |
timezone | string |
copyFromId | string |
copySections | array of categories tags customFields reportFields distanceRates perDiem workflows rules merchantRules policies members accountingConnection overview |
plan | PlanKey |
interval | BillingInterval |
InvitationListQuery
status | InvitationStatus |
MemberListQuery
q | string |
status | MemberStatus |
role | MemberRole |
PaymentAccountListQuery
archived | string |
PersonalRuleInput
name required | string | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
enabled | boolean | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
merchantContains required | string | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
actions required | objectFields
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
ownerId | string |
PersonalRuleQuery
ownerId | string |
ReconciliationQuery
from required | string |
to required | string |
paymentAccountId | string |
feed | string |
currency | string |
ReorderAutomationRulesInput
ids required | array of string |
RulesDocument
format required | papertotal.rules | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
version required | 1 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
exportedAt | string | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
rules required | array of objectFields
|
ReportFieldInput
name required | string |
type required | ReportFieldType |
options | array of string |
formula | string or null |
required | boolean |
enabled | boolean |
position | integer |
SyncRecordQuery
state | SyncState |
TransactionListQuery
state | TransactionState |
paymentAccountId | string |
paymentAccountIds | string |
from | string |
to | string |
q | string |
minMinor | integer |
maxMinor | integer |
missingReceipt | string |
unreported | string |
currency | string |
UpdateAutomationRuleInput
name | string | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
enabled | boolean | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
conditions | array of objectFields
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
actions | objectFields
|
UpdateMemberInput
role | MemberRole |
status | MemberStatus |
developer | boolean |
managerId | string,null |
title | string or null |
department | string or null |
employeeId | string or null |
approvalLimitMinor | integer or null |
overLimitApproverId | string,null |
forwardToId | string,null |
workerStatus | string or null |
defaultTags | array of string |
customField1 | string or null |
customField2 | string or null |
payrollCode | string or null |
legalEntity | string or null |
tier | string or null |
officeLocation | string or null |
costCenter | string or null |
accountingCode | string or null |
workerType | string or null |
UpdateReportFieldInput
options | array of string |
formula | string or null |
required | boolean |
enabled | boolean |
position | integer |
disabledOptions | array of string |
UpdateWorkspaceInput
name | string |
baseCurrency | string |
country | string |
timezone | string |
fiscalYearStartMonth | integer |
distanceUnit | mi km |
retentionDays | integer or null |
callLogRetentionDays | integer or null |
readingModel | ReadingModel |
locale | string or null |
showDefaultCategories | boolean |
shredDocuments | boolean |
vatBasisPoints | integer or null |
reimbursableTracking | boolean |
calculateMissingTax | boolean |
dateFormat | DateFormat |
AgentJoinInput
workspaceId | string (uuid) |
ReportLookupQuery
reference required | string The ID printed on the report, such as RPT-0012. |
OutsideDecisionInput
reason required | string |
MoveExpensesInput
ids required | array of string | ||||
to required | object or object or object or objectFields
|
DuplicateExpensesInput
ids required | array of string |
BulkHoldInput
object or object
action required | hold |
ids required | array of string |
reason required | string |
ProfilePhotoInput
uploadId required | string |
UnlockPrivateDetailsInput
code required | string |
SavePrivateDetailsInput
unlockToken required | string |
details required | PrivateDetails |
ConnectHrInput
system required | string |
credentials | map of string |
approvalMode | HrApprovalMode |
UpdateHrSettingsInput
approvalMode required | HrApprovalMode |
ImportPeopleFileInput
uploadId required | string (uuid) |
complete | boolean |
PeopleWebhookInput
people required | array of objectFields
| ||||||||||||||||||||||||||||||||||
complete | boolean |
InvoiceSettingsInput
enabled | boolean |
supplierName | string or null |
supplierAddress | string or null |
taxNumbers | map of string |
terms | string or null |
InvoiceListQuery
status | DRAFT SENT VIEWED PARTIALLY_PAID PAID VOID OVERDUE |
q | string |
CreateInvoiceInput
recipientName | string or null | ||||||||||||
recipientEmail | string (email) or null | ||||||||||||
recipientPhone | string or null | ||||||||||||
shareWith | array of string (email) | ||||||||||||
title | string or null | ||||||||||||
currency | string | ||||||||||||
issueDate | string | ||||||||||||
dueDate | string or null | ||||||||||||
terms | string or null | ||||||||||||
supplierName | string or null | ||||||||||||
supplierAddress | string or null | ||||||||||||
supplierTaxNumber | string or null | ||||||||||||
lines | array of objectFields
| ||||||||||||
expenseIds | array of string |
BulkInvoiceInput
csv required | string |
currency | string |
send | boolean |
UpdateInvoiceInput
recipientName | string or null | ||||||||||||
recipientEmail | string (email) or null | ||||||||||||
recipientPhone | string or null | ||||||||||||
shareWith | array of string (email) | ||||||||||||
title | string or null | ||||||||||||
currency | string | ||||||||||||
issueDate | string | ||||||||||||
dueDate | string or null | ||||||||||||
terms | string or null | ||||||||||||
supplierName | string or null | ||||||||||||
supplierAddress | string or null | ||||||||||||
supplierTaxNumber | string or null | ||||||||||||
lines | array of objectFields
|
RecordInvoicePaymentInput
kind | PAYMENT REFUND |
amountMinor required | integer |
paidOn required | string |
reference | string or null |
note | string or null |
InvoiceMessageInput
body required | string |
InvoiceToPayQuery
q | string |
MoneyFlowQuery
months | integer |
ExpenseGroupQuery
status | ExpenseStatus or array of ExpenseStatus |
kind | ExpenseKind |
paymentType | PaymentType |
ownerId | string |
scope | mine all |
categoryId | string |
merchantId | string |
projectId | string |
clientId | string |
tagId | string |
department | string |
reportId | string |
externalId | string |
unreported | boolean |
needsReview | boolean |
billable | boolean |
reimbursable | boolean |
moneyFlow | IN OUT |
dateField | ExpenseDateField |
from | string |
to | string |
minMinor | integer |
maxMinor | integer |
q | string |
groupBy required | ExpenseGroupBy |
BulkEditOptionsInput
ids required | array of string |
BulkEditInput
ids required | array of string | ||||||||||||||||||||||||||||||||
fields required | objectFields
|
MergeExpensesInput
keepId required | string | ||||||||||||||
otherId required | string | ||||||||||||||
take | objectFields
|
EditSplitInput
rows required | array of objectFields
|
ReimbursementDetailsInput
reportIds required | array of string |
fullNumbers | boolean |
PolicyRuleListQuery
tab | general cards fields flags |
TagLevelImportInput
uploadId required | string |
dependent required | boolean |
TagLevelsQuery
tagIds | string |
level | string |
q | string |
AbaExportInput
ids required | array of string |
processOn required | string |
regenerate | boolean |
AbaOriginatorInput
bankCode required | string |
userName required | string |
userId required | string |
bsb required | string |
accountNumber required | string |
description | string |
AcceptInvitationInput
token required | string |
AchOriginatorInput
bankRoutingNumber required | string |
bankName required | string |
companyName required | string |
companyId required | string |
originId | string or null |
originName | string or null |
secCode | PPD CCD |
entryDescription | string |
AddDomainAdminInput
email | string (email) |
phone | string |
AddSenderInput
email required | string (email) |
AgentScheduleInput
title required | string |
instruction required | string |
cadence required | string |
enabled | boolean |
ApiCallListQuery
key | string |
status | string |
from | string |
to | string |
ApprovalQueueQuery
scope | mine all |
ApprovalWorkflowInput
name required | string | ||||||||||||
isDefault | boolean | ||||||||||||
steps required | array of objectFields
| ||||||||||||
autoApproveUnderMinor | integer or null | ||||||||||||
memberIds | array of string |
AskAssistantInput
message required | string | ||||
context | objectFields
|
AskInsightsInput
question required | string |
from | string |
to | string |
AssignCardInput
userId | string |
email | string (email) |
phone | string |
transactionStartDate | string or null |
AuditListQuery
action | string |
entityType | string |
entityId | string |
actorId | string |
from | string |
to | string |
BudgetInput
scope required | BudgetScope |
targetId required | string |
period | BudgetPeriod |
totalMinor | integer or null |
perMemberMinor | integer or null |
thresholds | array of integer |
BulkDeleteAgentsInput
ids required | array of string |
BulkPaymentAccountInput
ids required | array of string |
action required | unassign |
BulkTransactionInput
ids required | array of string | ||
action required | object or object or object or object or object or object or objectFields
|
CalcGstInput
expenseIds required | array of string (uuid) |
CardLayoutInput
name required | string | ||||||||||||||||||||||||||||||||||
mapping required | objectFields
|
CategoryAccessInput
userIds required | array of string |
ChatPreferenceInput
priorityMode required | ChatPriorityMode |
CheckoutRequest
plan required | PlanKey |
interval required | BillingInterval |
seats | integer |
ChooseOrganisationInput
organisationId required | string |
ClaimDomainInput
name required | string |
workspaceId required | string |
ConfirmMergeInput
email required | string (email) |
code required | string |
otherToken required | string |
CopySettingsInput
sourceId required | string |
sections required | array of CopySection |
confirmName required | string |
CreateAgentInput
name required | string | ||||||
description | string | ||||||
instructions | string | ||||||
templateKey | string | ||||||
grants | array of objectFields
|
CreateApiKeyInput
name required | string |
scopes | array of ApiKeyScopeName |
expiresAt | string (date-time) |
kind | PERSONAL WORKSPACE |
fullAccess | boolean |
managerIds | array of string |
signing | OFF OPTIONAL REQUIRED |
CreateContactInput
CreateDelegationInput
delegateId | string |
delegateEmail | string (email) |
delegatorId | string |
access | DelegationAccess |
startsAt | string (date-time) |
endsAt | string (date-time) or null |
CreateExpenseFromTransactionInput
categoryId | string,null |
projectId | string,null |
tagIds | array of string |
reimbursable | boolean |
description | string or null |
notes | string or null |
CreateGroupInput
name | string |
memberIds required | array of string |
CreateJoinLinkInput
role | MemberRole |
requiresApproval | boolean |
expiresInDays | integer |
CreateOAuthClientInput
name required | string |
uri | string (uri) |
logoUri | string (uri) |
redirectUris required | array of string |
scopes required | array of OAuthScopeName |
public | boolean |
CreateReimbursementInput
reportIds required | array of string |
method | ReimbursementMethod |
separate | boolean |
reference | string |
note | string |
CreateRoomInput
name required | string |
description | string |
visibility | RoomVisibility |
posting | RoomPosting |
memberIds | array of string |
CreateScimTokenInput
name required | string |
expiresInDays | integer |
CreateTaskInput
roomId required | string |
title required | string |
description | string |
assigneeId required | string |
CustomFieldInput
key required | string |
label required | string |
type required | TEXT NUMBER DATE SELECT BOOLEAN |
options | array of string |
required | boolean |
position | integer |
DecideAccessInput
approve required | boolean |
DeleteAccountInput
confirmEmail required | string |
DescribeRuleInput
prompt required | string |
DiscoverSignInInput
email required | string (email) |
DomainGroupInput
name required | string |
isDefault | boolean |
strictRules | boolean |
restrictLogin | boolean |
restrictWorkspaces | boolean |
preferredWorkspaceId | string or null |
cardWorkspaceId | string or null |
DomainInviteInput
email required | string (email) |
name | string |
role | MemberRole |
DraftAgentInput
message required | string |
instructions | string |
EditMessageInput
body required | string |
EmailSignInInput
email required | string (email) |
ExpenseVendorInput
vendorId required | string (uuid) or null |
ExportTemplateInput
name required | string | ||||||
columns required | array of objectFields
| ||||||
shared | boolean |
FailReimbursementInput
reason | string |
code | ReimbursementFailureCode |
removeBankAccount | boolean |
FlagMessageInput
reason | string |
ForwardingAliasInput
alias required | string |
FraudSettingsInput
enabled required | boolean | ||||||||||||||||||||||||
yellowAt required | number | ||||||||||||||||||||||||
redAt required | number | ||||||||||||||||||||||||
profiles required | objectFields
| ||||||||||||||||||||||||
suspiciousWords required | array of string | ||||||||||||||||||||||||
pdfCreatorKeywords required | array of string | ||||||||||||||||||||||||
velocity required | objectFields
| ||||||||||||||||||||||||
duplicateSpike required | objectFields
|
InboxQuery
tab | all unread todos |
JoinEmailInput
email required | string (email) |
JoinRoomInput
code required | string |
JoinVerifyInput
email required | string (email) |
code required | string |
MarkReadInput
messageId | string |
MarkReimbursementPaidInput
reference | string |
paidOn | string |
method | MANUAL PAYROLL ACH_FILE |
acceptOverpayment | boolean |
MarkUnreadInput
messageId required | string |
MatchTransactionInput
expenseId required | string |
MerchantCopiesInput
enabled required | boolean |
MessageListQuery
parentId | string |
after | string |
MileageRateInput
name required | string |
unit | mi km |
rateMinor required | integer |
currency | string |
effectiveFrom | string |
effectiveTo | string or null |
isDefault | boolean |
archived | boolean |
taxBasisPoints | integer or null |
taxReclaimableMinor | integer or null |
MileageYearQuery
date required | string |
tripId | string |
ModerateMessageInput
action required | hide delete dismiss |
NachaExportInput
ids required | array of string |
effectiveDate required | string |
regenerate | boolean |
NetSuiteCredentialsInput
accountId required | string |
clientId required | string |
folderId required | string |
subsidiaryId | string or null |
OAuthConsentInput
request required | string |
workspaceId required | string |
scopes required | array of OAuthScopeName |
OAuthConsentQuery
request required | string |
OAuthDenyInput
request required | string |
OnboardingInput
intent required | OnboardingIntent |
workspaceName | string |
timezone | string |
OpenDirectInput
userId required | string |
PaymentAccountInput
name required | string |
kind | PaymentAccountKind |
brand | string or null |
last4 | string or null |
isCompany | boolean |
ownerId | string or null |
PayrollExportQuery
ids | string |
PeopleQuery
q | string |
PerDiemRateInput
name required | string |
country | string or null |
region | string or null |
amountMinor required | integer |
currency | string |
archived | boolean |
PinRoomInput
pinned required | boolean |
PlaidExchangeInput
publicToken required | string |
institutionName | string or null |
isCompany | boolean |
PolicyRuleInput
type required | PolicyRuleType |
severity | PolicySeverity |
enabled | boolean |
categoryId | string,null |
amountMinor | integer or null |
days | integer or null |
note | string or null |
PostMessageInput
body | string |
mentions | array of string |
parentId | string |
attachmentIds | array of string |
ProcessingReportQuery
from required | string |
to required | string |
PutSsoConnectionInput
object or object
protocol required | SAML |
displayName required | string |
metadataXml | string |
idpEntityId | string |
ssoUrl | string (uri) |
certificate | string |
RecodeExpenseInput
categoryId | string (uuid) or null |
taxMinor | integer or null |
RedeemEmailSignInInput
object or object
email required | string (email) |
code required | string |
RedeemJoinLinkInput
token required | string |
RegisterDeviceInput
token required | string |
platform required | IOS ANDROID WEB |
appVersion | string |
locale | string |
ReimbursementListQuery
status | ReimbursementStatus |
payeeId | string |
ReimbursementSettingsInput
payerId | string or null |
autoBatchUnderMinor | integer or null |
requireCardMatch | boolean,null |
detailsExport | boolean,null |
ReleaseSubscriptionInput
products required | array of ReleaseProduct |
RemoveDeviceInput
token required | string |
RenamePlaidItemInput
institutionName required | string |
ReportSettingsInput
autoReport | objectFields
| ||||||||||
randomAuditPercent | integer | ||||||||||
strictPolicies | boolean | ||||||||||
rulesEnabled | boolean | ||||||||||
prohibitedItems | array of ProhibitedItem | ||||||||||
titleFormula | string or null | ||||||||||
titleLocked | boolean | ||||||||||
policyText | string or null | ||||||||||
cashExpenses | REIMBURSABLE NON_REIMBURSABLE ALWAYS_REIMBURSABLE ALWAYS_NON_REIMBURSABLE or null | ||||||||||
externalCheckUrl | string (uri) or null | ||||||||||
showGlCodes | boolean | ||||||||||
preventSelfApproval | boolean | ||||||||||
preventPayingNonReimbursable | boolean | ||||||||||
autoApproveCompliant | boolean | ||||||||||
publicReceipts | boolean | ||||||||||
fringeBenefits | boolean | ||||||||||
attendeeTracking | boolean | ||||||||||
billableExpenses | DISABLED DEFAULT_BILLABLE DEFAULT_NON_BILLABLE |
ReportSuspiciousInput
note | string |
RequestDomainAccessInput
name required | string |
RestrictSenderInput
userId required | string |
reason | string |
days | integer |
ReviewQuery
from | string |
to | string |
resend | true false |
MoveReportInput
workspaceId required | string |
RoomListQuery
q | string |
sort | name members activity |
direction | asc desc |
open | true false |
RoomMemberInput
userId required | string |
BulkPerDiemInput
ids required | array of string | ||||||
action required | update delete | ||||||
update | objectFields
|
CommuteInput
home required | string |
distance required | number |
MoveExpenseInput
workspaceId required | string |
PerDiemTemplateInput
template required | DE SE FI ZA |
UpdateDistanceSettingsInput
requireGpsOrMap | boolean | ||||
excludeCommutes | CommuteExclusion | ||||
trackTax | boolean | ||||
governmentRate | objectFields
|
UpdatePerDiemSettingsInput
defaultCategoryId required | string or null |
RouteEstimateInput
addresses required | array of string |
rateId | string or null |
S3AccessInput
accessKeyId required | string |
secretAccessKey required | string |
region required | string |
SaveAgentRuleInput
title required | string | ||||||||||||||||||||
role | AgentRuleRole | ||||||||||||||||||||
prompt required | string | ||||||||||||||||||||
plan required | objectFields
| ||||||||||||||||||||
templateKey | string | ||||||||||||||||||||
enabled | boolean |
SavedPlaceInput
name required | string |
address required | string |
SavedSearchInput
name required | string | ||||||||||||||||||||||||||||||||||||||||||||||||
filters | objectFields
| ||||||||||||||||||||||||||||||||||||||||||||||||
columns | array of ExpenseColumn | ||||||||||||||||||||||||||||||||||||||||||||||||
sort | ExpenseSort | ||||||||||||||||||||||||||||||||||||||||||||||||
shared | boolean |
ScheduledReportInput
name required | string | ||||||||||||||||||||||||||||||||||||||||||||
kind required | ScheduledReportKind | ||||||||||||||||||||||||||||||||||||||||||||
format required | ExportFormat | ||||||||||||||||||||||||||||||||||||||||||||
cadence required | ReportCadence | ||||||||||||||||||||||||||||||||||||||||||||
recipients required | array of string (email) | ||||||||||||||||||||||||||||||||||||||||||||
enabled | boolean | ||||||||||||||||||||||||||||||||||||||||||||
filters | objectFields
|
SearchQuery
q required | string |
kind | SearchKind |
limit | integer |
AccountingShortcutQuery
from | string |
to | string |
accountId | string |
withdrawalType | MANUAL PAYROLL ACH ACH_FILE ACH_PROVIDER |
groupBy | AccrualGrouping |
cursor | string |
CatalogReportQuery
from | string |
to | string |
SeatsRequest
seats required | integer |
SetClientCertificateEnforcementInput
required required | boolean |
SlackSettingsInput
channelId required | string or null |
receipts required | SlackReceipts |
SplitExpenseInput
mode | amount percent days | ||||||||||||||||
parts | array of objectFields
| ||||||||||||||||
startDate | string | ||||||||||||||||
endDate | string |
SsoEnforcementInput
enforced required | boolean |
ownerExempt | boolean |
StartDomainMigrationInput
toDomainId required | string |
dryRun | boolean |
StartMergeInput
email required | string (email) |
SyncInput
expenseIds | array of string (uuid) |
reportId | string (uuid) |
from | string |
to | string |
resend | boolean |
confirmDuplicate | boolean |
TaskListQuery
status | OPEN DONE |
mine | string |
TransferWorkspaceInput
memberId required | string |
UnsubscribeInput
token required | string |
UpdateAgentInput
name | string | ||||||
description | string | ||||||
instructions | string | ||||||
grants | array of objectFields
|
UpdateAgentRuleInput
title | string | ||||||||||||||||||||
role | AgentRuleRole | ||||||||||||||||||||
prompt | string | ||||||||||||||||||||
plan | objectFields
| ||||||||||||||||||||
templateKey | string | ||||||||||||||||||||
enabled | boolean |
UpdateApiKeyInput
name | string |
scopes | array of ApiKeyScopeName |
expiresAt | string (date-time) or null |
fullAccess | boolean |
managerIds | array of string |
signingRequired | boolean |
UpdateBudgetInput
totalMinor | integer or null |
perMemberMinor | integer or null |
thresholds | array of integer |
UpdateContactInput
firstName | string or null |
lastName | string or null |
company | string or null |
title | string or null |
emails | array of string |
phones | array of string |
mobile | string or null |
fax | string or null |
website | string or null |
address | string or null |
city | string or null |
region | string or null |
postalCode | string or null |
country | string or null |
notes | string or null |
UpdateCustomFieldInput
key | string |
label | string |
type | TEXT NUMBER DATE SELECT BOOLEAN |
options | array of string |
required | boolean |
position | integer |
UpdateDelegationInput
access required | DelegationAccess |
UpdateDocumentSettingsInput
duplicates | objectFields
| ||||||||||||
lineItems | objectFields
| ||||||||||||
maxPages | integer | ||||||||||||
cropDocument | boolean | ||||||||||||
emailAttachments | combine separate | ||||||||||||
fxRateDate | receipt submission | ||||||||||||
asyncEnrichments | array of AsyncEnrichment | ||||||||||||
customFields | array of objectFields
|
UpdateDomainInput
joinPolicy required | DomainJoinPolicy |
UpdateExportSettingsInput
preferredExporterId | string (uuid) or null |
autoSync | boolean |
exportDate | EXPENSE_DATE LAST_EXPENSE SUBMITTED EXPORTED |
reimbursableEntity | BILL CHECK JOURNAL_ENTRY EXPENSE_REPORT |
companyCardEntity | CREDIT_CARD DEBIT_CARD BILL JOURNAL_ENTRY EXPENSE_REPORT |
defaultVendorId | string or null |
cardMisc | boolean |
billStatus | DRAFT SUBMITTED AUTHORISED |
autoCreateVendors | boolean |
autoCreateCustomers | boolean |
payableAccountId | string or null |
reimbursableTiming | ON_APPROVAL ON_REIMBURSEMENT |
exportMethod | ACCRUAL CASH |
syncReimbursed | boolean |
billPaymentAccountId | string or null |
postingCurrency | HOME ORIGINAL |
printLater | boolean |
nextOpenPeriod | boolean |
customFormId | string or null |
expenseReportApproval | SUPERVISOR ACCOUNTING SUPERVISOR_AND_ACCOUNTING |
billApproval | PENDING APPROVED or null |
journalApproval | PENDING APPROVED or null |
enforceExpenseLimit | boolean |
UpdateExportTemplateInput
name | string | ||||||
columns | array of objectFields
| ||||||
shared | boolean |
UpdateImportSettingsInput
prefixCategories | boolean | ||||||
expenseClaimsOnly | boolean | ||||||
items | boolean | ||||||
taxes | boolean | ||||||
rebillCustomers | boolean | ||||||
dimensions | map of OFF TAGS REPORT_FIELDS EMPLOYEE_DEFAULT | ||||||
intercompany | boolean | ||||||
customLists | array of objectFields
|
UpdateMappingsInput
mappings required | array of objectFields
|
UpdateMileageRateInput
name | string |
unit | mi km |
rateMinor | integer |
currency | string |
effectiveFrom | string |
effectiveTo | string or null |
isDefault | boolean |
archived | boolean |
taxBasisPoints | integer or null |
taxReclaimableMinor | integer or null |
UpdateOAuthClientInput
name | string |
uri | string (uri) or null |
logoUri | string (uri) or null |
redirectUris | array of string |
scopes | array of OAuthScopeName |
enabled | boolean |
UpdatePaymentAccountInput
name | string |
kind | PaymentAccountKind |
brand | string or null |
last4 | string or null |
isCompany | boolean |
ownerId | string or null |
archived | boolean |
transactionStartDate | string or null |
statementCloseDay | integer or null |
liability | CardLiability |
reimbursable | boolean,null |
allowDeletingTransactions | boolean |
glAccount | string or null |
createExpenses | boolean |
UpdatePerDiemRateInput
name | string |
country | string or null |
region | string or null |
amountMinor | integer |
currency | string |
archived | boolean |
UpdatePolicyRuleInput
type | PolicyRuleType |
severity | PolicySeverity |
enabled | boolean |
categoryId | string,null |
amountMinor | integer or null |
days | integer or null |
note | string or null |
UpdatePreferencesInput
preferences required | array of objectFields
|
UpdateProfileInput
displayName | string |
phone | string or null |
locale | string |
timezone | string |
distanceUnit | mi km |
defaultWorkspaceId | string |
onboarded | boolean |
language | UiLanguage |
highContrast | boolean |
pronouns | string or null |
statusText | string or null |
statusClearsAt | string (date-time) or null |
UpdateRoomInput
name | string |
description | string or null |
visibility | RoomVisibility |
posting | RoomPosting |
imageAttachmentId | string or null |
UpdateSavedSearchInput
name | string | ||||||||||||||||||||||||||||||||||||||||||||||||
filters | objectFields
| ||||||||||||||||||||||||||||||||||||||||||||||||
columns | array of ExpenseColumn or null | ||||||||||||||||||||||||||||||||||||||||||||||||
sort | ExpenseSort or null | ||||||||||||||||||||||||||||||||||||||||||||||||
shared | boolean |
UpdateScheduledReportInput
name | string | ||||||||||||||||||||||||||||||||||||||||||||
kind | ScheduledReportKind | ||||||||||||||||||||||||||||||||||||||||||||
format | ExportFormat | ||||||||||||||||||||||||||||||||||||||||||||
cadence | ReportCadence | ||||||||||||||||||||||||||||||||||||||||||||
recipients | array of string (email) | ||||||||||||||||||||||||||||||||||||||||||||
enabled | boolean | ||||||||||||||||||||||||||||||||||||||||||||
filters | objectFields
|
ImportIifInput
uploadId required | string (uuid) |
ReuseConnectorInput
connectionId required | string (uuid) |
SaveTravelDocumentInput
number required | string |
country | string or null |
expiresOn | string or null |
UpdateTravelProfileInput
legalFirstName | string or null | ||||||||||||
legalMiddleName | string or null | ||||||||||||
legalLastName | string or null | ||||||||||||
birthDate | string or null | ||||||||||||
gender | string or null | ||||||||||||
phone | string or null | ||||||||||||
homeAddress | object or nullFields
| ||||||||||||
workAddress | object or nullFields
| ||||||||||||
emergencyName | string or null | ||||||||||||
emergencyRelationship | string or null | ||||||||||||
emergencyPhone | string or null | ||||||||||||
emergencyEmail | string (email) or null |
UpdateStorageInput
backup | boolean |
exports | boolean |
intake | boolean |
UpdateTaskInput
title | string |
description | string or null |
assigneeId | string |
UpdateVehicleInput
name | string |
plate | string or null |
userId | string |
archived | boolean |
UpdateVendorInput
enabled | boolean |
name | string |
email | string (email) or null |
UseRecoveryCodeInput
email required | string (email) |
code required | string |
VacationDelegateInput
userId required | string |
delegateId required | string |
access | DelegationAccess |
startsAt | string (date-time) |
endsAt required | string (date-time) |
VehicleInput
name required | string |
plate | string or null |
userId | string |
archived | boolean |
VendorAccountInput
accountId required | string or null |
VendorQuery
q | string |
VerifySenderInput
token required | string |
WorkspaceSecurityInput
requireMfa required | boolean |
OffboardingQuery
userId | string |
ChatStreamQuery
lastEventId | string The same as the Last-Event-ID header. |
McpRequest
jsonrpc required | 2.0 |
id | string or integer Left out on a notification, which answers 202. |
method required | string initialize, tools/list, tools/call and so on. |
params | map of any What the method takes. On the current revision, |
JoinLinkQuery
token | string |
ChatThreadQuery
reportId | string |
expenseId | string |
PayeeAccountInput
object or object
holderName required | string |
routingNumber required | string |
accountNumber required | string |
accountType | BankAccountType |
StatementPreviewFields
mapping | string The column mapping, as JSON text. Leave it out to use the suggested one. OFX and QFX need none. |
StatementUploadFields
force | string |
createExpenses | string |
reimbursable | string |
mapping | string The column mapping, as JSON text. Leave it out to use the suggested one. OFX and QFX need none. |
RemoveDeviceQuery
token | string The push token, for a client that cannot send a body on DELETE. |
UploadSourceQuery
client | ios androidThe app sending the file. Leave it out in a browser. |
OAuthAuthorizeQuery
response_type required | code |
client_id required | string A registered client id, or the URL of a client metadata document. |
redirect_uri required | string Exactly as registered. |
scope | string Scopes separated by spaces. |
state | string Comes back unchanged on the redirect. |
code_challenge required | string 43 characters of base64url: the SHA-256 of the verifier. |
code_challenge_method required | S256 |
resource | string The API or the MCP server. A token for one is refused at the other. |
OAuthTokenForm
grant_type required | authorization_code refresh_token |
code | string With authorization_code. |
redirect_uri | string With authorization_code: the same value sent to /oauth/authorize. |
code_verifier | string With authorization_code: 43 to 128 characters. |
refresh_token | string With refresh_token. It rotates: use the one each answer returns. |
scope | string With refresh_token: narrows what the new token holds. It cannot widen it. |
resource | string If sent, it must be the resource the code or token was issued for. |
client_id | string Unless sent by HTTP Basic. |
client_secret | string For a confidential client, unless sent by HTTP Basic. |
OAuthRevokeForm
token required | string The access or refresh token. Revoking a refresh token ends every token issued from it. |
client_id | string Unless sent by HTTP Basic. |
client_secret | string For a confidential client, unless sent by HTTP Basic. |
OAuthClientMetadata
client_name required | string |
client_uri | string (uri) |
logo_uri | string (uri) |
redirect_uris required | array of string |
token_endpoint_auth_method | none client_secret_basic client_secret_post |
application_type | web native |
scope | string |
AnyDocumentInput
file_url | string |
file_data | string |
file_name | string |
external_id | string |
async | boolean |
tags | array of string |
auto_delete | boolean |
blueprint_name required | string |
blueprint_version | integer |
max_pages_to_process | integer |
BatchDocumentsInput
file_urls required | array of string |
type | DocumentType |
external_id | string |
BlueprintListQuery
documentType | DocumentType |
BlueprintVersionQuery
version | integer |
ClassifyDocumentInput
file_url | string |
file_data | string |
file_name | string |
external_id | string |
async | boolean |
tags | array of string |
auto_delete | boolean |
document_types | array of string |
CreateBlueprintInput
name required | string | ||||||||||||||||||
title required | string | ||||||||||||||||||
description | string | ||||||||||||||||||
documentType | DocumentType | ||||||||||||||||||
schema required | objectFields
| ||||||||||||||||||
fields | array of objectFields
|
CropDocumentInput
page | integer |
x required | number |
y required | number |
width required | number |
height required | number |
ExtractDocumentInput
file_url | string |
file_data | string |
file_name | string |
external_id | string |
async | boolean |
tags | array of string |
auto_delete | boolean |
document_types | array of string |
ParseDocumentInput
file_url | string |
file_data | string |
file_name | string |
external_id | string |
async | boolean |
tags | array of string |
auto_delete | boolean |
details | boolean |
ParseQuery
details | boolean |
tag | string |
ParseUpdateInput
title | string or null |
notes | string or null |
tags | array of string |
RotateDocumentInput
page | integer |
degrees | 90 or 180 or 270 or -90 |
SettleDuplicatesInput
object or object
keep required | all |
others | array of string |
SplitDocumentInput
mode required | every_page custom detect blank_pages |
ranges | string |
SplitOptions
split_by_blank_page | boolean |
every_page | boolean |
ranges | string |
document_types | array of string |
blueprint_name | string |
file_url | string |
file_data | string |
file_name | string |
external_id | string |
SplitUploadInput
uploadId required | string |
mode | every_page custom detect blank_pages |
ranges | string |
UpdateBlueprintInput
title | string | ||||||||||||||||||
description | string or null | ||||||||||||||||||
documentType | DocumentType | ||||||||||||||||||
schema | objectFields
| ||||||||||||||||||
fields | array of objectFields
|
CreateWorkflowInput
name required | string | ||||||||||||||||||||||
graph | objectFields
|
UpdateWorkflowInput
name | string | ||||||||||||||||||||||
graph | objectFields
|
ValidateWorkflowInput
graph | objectFields
|
StartWorkflowRunInput
uploadId | string |
documentIds | array of string |
nodeId | string |
AnswerWorkflowStepInput
decision required | approve reject |
WorkflowApprovalTokenInput
token required | string |
AnalyticsQuery
status | ExpenseStatus or array of ExpenseStatus |
kind | ExpenseKind |
paymentType | PaymentType |
ownerId | string |
scope | mine all |
categoryId | string |
merchantId | string |
projectId | string |
clientId | string |
tagId | string |
department | string |
reportId | string |
externalId | string |
unreported | boolean |
needsReview | boolean |
billable | boolean |
reimbursable | boolean |
moneyFlow | IN OUT |
dateField | ExpenseDateField |
from | string |
to | string |
minMinor | integer |
maxMinor | integer |
q | string |
limit | integer |
interval | TrendInterval |
groupCurrency | string |
ApproveReportInput
comment | string |
held | move approve |
bypass | boolean |
expectedTotalMinor | integer |
AttachReceiptInput
mode | add replace |
clientId | string |
deviceId | string |
BulkDocumentInput
ids | array of string | ||||
filter | DocumentListQuery | ||||
cursor | string | ||||
action required | object or object or object or objectFields
|
TrashActionInput
ids | array of string |
all | boolean |
action required | restore purge |
BulkExpenseInput
ids required | array of string | ||||
action required | object or object or object or object or object or object or object or object or objectFields
|
BulkReassignInput
reportIds required | array of string |
approverId required | string |
mode | replace insert |
BulkApproveInput
reportIds required | array of string |
all | boolean |
BulkReportsInput
reportIds required | array of string |
CatalogImportInput
csv required | string |
CatalogQuery
q | string |
archived | string |
CategoryInput
name required | string |
parentId | string,null |
glCode | string or null |
taxLine | string or null |
deductiblePct | integer |
enabled | boolean |
position | integer |
type | CategoryType |
payrollCode | string or null |
descriptionHint | string or null |
approverId | string,null |
commentRequired | boolean |
maxExpenseMinor | integer or null |
headerOnly | boolean |
CategoryQuery
q | string |
enabled | string |
type | CategoryType |
origin | CategoryOrigin |
headers | string |
CommentInput
body | string |
mentions | array of string |
attachmentIds | array of string |
ContactExportInput
format required | ContactExportFormat |
ids | array of string |
ContactListQuery
q | string |
documentId | string |
name | string |
company | string |
email | string |
phone | string |
website | string |
city | string |
region | string |
postalCode | string |
country | string |
CreateDocumentInput
tags | array of string |
categories | array of string |
taxonomy | array of string |
allowed_async_enrichments | array of AsyncEnrichment |
bounding_boxes | boolean |
confidence_details | boolean |
compute | boolean |
parse_address | boolean |
country | string |
max_pages_to_process | integer |
boost_mode | boolean |
auto_delete | boolean |
stitch | boolean |
crop_document | boolean |
blueprint_name | string |
blueprint_version | integer |
async | boolean |
line_item_expansion | boolean |
tiff_dpi | number |
type | DocumentType |
clientId | string |
externalId | string |
folderId | string |
notes | string |
capturedAt | string (date-time) |
latitude | number |
longitude | number |
locationAccuracyM | number |
deviceId | string |
merchantName | string |
date | string |
totalMinor | integer |
taxMinor | integer |
category | string |
CreateExpenseInput
merchantName | string,null | ||||||
description | string or null | ||||||
notes | string or null | ||||||
date required | string | ||||||
currency | string | ||||||
amountMinor required | integer | ||||||
subtotalMinor | integer or null | ||||||
taxMinor | integer or null | ||||||
tipMinor | integer or null | ||||||
discountMinor | integer or null | ||||||
shippingMinor | integer or null | ||||||
baseAmountMinor | integer or null | ||||||
fxRate | number or null | ||||||
categoryId | string,null | ||||||
projectId | string,null | ||||||
clientId | string,null | ||||||
billable | boolean | ||||||
reimbursable | boolean | ||||||
paymentType | PaymentType or null | ||||||
paymentAccountId | string,null | ||||||
cardLast4 | string or null | ||||||
invoiceNumber | string or null | ||||||
poNumber | string or null | ||||||
dueDate | string or null | ||||||
mcc | string or null | ||||||
taxDeductible | boolean | ||||||
moneyFlow | IN OUT | ||||||
alsoCategoryIds | array of string | ||||||
tagIds | array of string | ||||||
attendees | array of objectFields
| ||||||
customFields | map of any | ||||||
lines | array of ExpenseLineInput | ||||||
kind | MANUAL MILEAGE PER_DIEM TIME | ||||||
quantity | number | ||||||
rateMinor | integer | ||||||
unit | string | ||||||
trip | map of any | ||||||
vehicleId | string | ||||||
externalId | string | ||||||
ownerId | string | ||||||
reportId | string |
CreateExportInput
kind required | ExportKind | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
format required | ExportFormat | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
filters | objectFields
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
templateId | string | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
fullPageReceipts | boolean | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
template | string | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
onFinish | objectFields
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
delimiter | CsvDelimiter | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
bom | boolean | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
recipients | array of string (email) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
columnSet | DocumentColumnSet | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
preset | ExportPreset | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
view | objectFields
|
CreateMerchantInput
name required | string |
defaultCategoryId | string,null |
website | string or null |
phone | string or null |
address | string or null |
taxId | string or null |
is1099 | boolean |
merchantType | MerchantType or null |
CreatePerDiemInput
perDiemRateId | string | ||||
mieRateId | string | ||||
subRates | array of objectFields
| ||||
lodgingRateId | string | ||||
startDate required | string | ||||
endDate required | string | ||||
startTime | string | ||||
endTime | string | ||||
partialDays | boolean | ||||
destination | string | ||||
description | string or null | ||||
mealsCategoryId | string or null | ||||
tagIds | array of string | ||||
categoryId | string or null | ||||
projectId | string or null | ||||
clientId | string or null | ||||
billable | boolean | ||||
reimbursable | boolean | ||||
notes | string or null |
CreateReportInput
title | string |
purpose | string or null |
currency | string |
expenseIds | array of string |
ownerId | string |
CreateTimeInput
date required | string |
hours required | number |
rateMinor required | integer |
currency | string |
description required | string |
categoryId | string or null |
projectId | string or null |
clientId | string or null |
billable | boolean |
reimbursable | boolean |
notes | string or null |
CreateTripInput
date required | string |
distance | number |
odometerStart | number |
odometerEnd | number |
routeDistance | number or null |
roundTrip | boolean |
origin required | string |
destination required | string |
stops | array of string |
departed | string or null |
arrived | string or null |
purpose required | string |
vehicleId | string or null |
rateId | string or null |
routeToken | string or null |
categoryId | string or null |
projectId | string or null |
clientId | string or null |
billable | boolean |
reimbursable | boolean |
notes | string or null |
CreateWebhookInput
url required | string |
description | string |
events required | array of WebhookEvent |
apiKeyId | string |
ConfirmWebhookInput
token required | string |
WebhookListQuery
apiKeyId | string |
include | keys |
DocumentListQuery
type | DocumentType |
status | DocumentStatus |
source | DocumentSource |
source_id | string |
external_id | string |
blueprint_name | string |
owner | string |
device_id | string |
device_user_uuid | string |
viewed | boolean |
trashed | boolean |
envelope | string |
created__gt | string or string (date-time) |
created__gte | string or string (date-time) |
created__lt | string or string (date-time) |
created__lte | string or string (date-time) |
updated__gt | string or string (date-time) |
updated__gte | string or string (date-time) |
updated__lt | string or string (date-time) |
updated__lte | string or string (date-time) |
issued | string |
issued__gt | string |
issued__gte | string |
issued__lt | string |
issued__lte | string |
total | integer |
total__gt | integer |
total__gte | integer |
total__lt | integer |
total__lte | integer |
tax | integer |
tax__gt | integer |
tax__gte | integer |
tax__lt | integer |
tax__lte | integer |
currency | string |
category | string |
vendor | string |
notes | string |
payment_type | PaymentType |
last_four_digits | string |
first_name | string |
last_name | string |
work_phone | string |
cell_phone | string |
company | string |
email | string |
website | string |
country | string |
state | string |
city | string |
zip | string |
name | string |
is_empty | string |
order_by | DocumentOrder |
folderId | string |
mailInBatchId | string |
setId | string |
externalId | string |
tag | string |
archived | boolean |
unviewed | boolean |
q | string |
from | string |
to | string |
fraudColor | FraudColor |
fraudSignal | FraudSignal |
fraudReview | FraudReviewState |
ExpenseListPageQuery
status | ExpenseStatus or array of ExpenseStatus |
kind | ExpenseKind |
paymentType | PaymentType |
ownerId | string |
scope | mine all |
categoryId | string |
merchantId | string |
projectId | string |
clientId | string |
tagId | string |
department | string |
reportId | string |
externalId | string |
unreported | boolean |
needsReview | boolean |
billable | boolean |
reimbursable | boolean |
moneyFlow | IN OUT |
dateField | ExpenseDateField |
from | string |
to | string |
minMinor | integer |
maxMinor | integer |
q | string |
sort | ExpenseSort |
ExpenseTotalsQuery
status | ExpenseStatus or array of ExpenseStatus |
kind | ExpenseKind |
paymentType | PaymentType |
ownerId | string |
scope | mine all |
categoryId | string |
merchantId | string |
projectId | string |
clientId | string |
tagId | string |
department | string |
reportId | string |
externalId | string |
unreported | boolean |
needsReview | boolean |
billable | boolean |
reimbursable | boolean |
moneyFlow | IN OUT |
dateField | ExpenseDateField |
from | string |
to | string |
minMinor | integer |
maxMinor | integer |
q | string |
ids | string or array of string |
currency | string |
FolderInput
name required | string |
parentId | string,null |
FolderQuery
q | string |
parentId | string |
DismissFlagInput
reason | string |
HoldExpenseInput
reason required | string |
ReachMentionedInput
userIds required | array of string |
MergeMerchantInput
intoId required | string |
MerchantInput
name | string |
defaultCategoryId | string,null |
website | string or null |
phone | string or null |
address | string or null |
taxId | string or null |
is1099 | boolean |
merchantType | MerchantType or null |
MileageLogQuery
from | string |
to | string |
scope | mine all |
ownerId | string |
vehicleId | string |
purpose | MileagePurpose |
OdometerPhotoInput
reading required | START END |
ProjectInput
name required | string |
code | string or null |
clientId | string,null |
budgetMinor | integer or null |
archived | boolean |
ProjectQuery
q | string |
archived | string |
clientId | string |
ReassignReportInput
approverId required | string |
mode | replace insert |
RejectExpenseInput
reason required | string |
RejectReportInput
reason required | string |
to | string |
ReportExpensesInput
ids required | array of string |
ReportListQuery
status | ReportStatus or array of ReportStatus |
scope | mine all assigned |
ownerId | string |
q | string |
from | string |
to | string |
ReportParticipantInput
userId required | string |
SubmitReportInput
memo | string |
cc | array of string |
to | string |
ccEmails | array of string (email) |
attachPdf | boolean |
approverEmail | string (email) |
SubmitDocumentInput
tags | array of string |
categories | array of string |
taxonomy | array of string |
allowed_async_enrichments | array of AsyncEnrichment |
bounding_boxes | boolean |
confidence_details | boolean |
compute | boolean |
parse_address | boolean |
country | string |
max_pages_to_process | integer |
boost_mode | boolean |
auto_delete | boolean |
stitch | boolean |
crop_document | boolean |
blueprint_name | string |
blueprint_version | integer |
async | boolean |
line_item_expansion | boolean |
tiff_dpi | number |
file_url | string |
file_urls | array of string |
file_data | string |
file_name | string |
external_id | string |
device_id | string |
type | DocumentType |
bucket | string |
package_path | string |
TagInput
name required | string |
groupName | string or null |
glCode | string or null |
color | string or null |
archived | boolean |
approverId | string or null |
parentId | string or null |
TaxSummaryQuery
year | integer |
TripRouteQuery
q | string |
UpdateCategoryInput
name | string |
parentId | string,null |
glCode | string or null |
taxLine | string or null |
deductiblePct | integer |
enabled | boolean |
position | integer |
type | CategoryType |
payrollCode | string or null |
descriptionHint | string or null |
approverId | string,null |
commentRequired | boolean |
maxExpenseMinor | integer or null |
headerOnly | boolean |
UpdateDocumentInput
type | DocumentType |
folderId | string,null |
title | string or null |
notes | string or null |
tags | array of string |
status | PROCESSED REVIEWED |
approved | boolean |
fraudReview | FraudReviewInput |
billable | boolean |
merchantName | string or null |
totalMinor | integer |
subtotalMinor | integer or null |
taxMinor | integer or null |
tipMinor | integer or null |
customFields | map of string or array of string or null |
corrections | map of string or null |
UpdateExpenseInput
merchantName | string,null | ||||||
description | string or null | ||||||
notes | string or null | ||||||
date | string | ||||||
currency | string | ||||||
amountMinor | integer | ||||||
subtotalMinor | integer or null | ||||||
taxMinor | integer or null | ||||||
tipMinor | integer or null | ||||||
discountMinor | integer or null | ||||||
shippingMinor | integer or null | ||||||
baseAmountMinor | integer or null | ||||||
fxRate | number or null | ||||||
categoryId | string,null | ||||||
projectId | string,null | ||||||
clientId | string,null | ||||||
billable | boolean | ||||||
reimbursable | boolean | ||||||
paymentType | PaymentType or null | ||||||
paymentAccountId | string,null | ||||||
cardLast4 | string or null | ||||||
invoiceNumber | string or null | ||||||
poNumber | string or null | ||||||
dueDate | string or null | ||||||
mcc | string or null | ||||||
taxDeductible | boolean | ||||||
moneyFlow | IN OUT | ||||||
alsoCategoryIds | array of string | ||||||
tagIds | array of string | ||||||
attendees | array of objectFields
| ||||||
customFields | map of any | ||||||
lines | array of ExpenseLineInput |
UpdateFolderInput
name | string |
parentId | string,null |
UpdateProjectInput
name | string |
code | string or null |
clientId | string,null |
budgetMinor | integer or null |
archived | boolean |
UpdateReportInput
title | string |
purpose | string or null |
currency | string |
fields | map of string or null |
UpdateTagInput
name | string |
groupName | string or null |
glCode | string or null |
color | string or null |
archived | boolean |
approverId | string or null |
parentId | string or null |
UpdateWebhookInput
url | string |
description | string or null |
events | array of WebhookEvent |
enabled | boolean |
VehicleQuery
q | string |
archived | string |
userId | string |
BlockDeviceInput
deviceId required | string |
reason | string |
FraudReviewInput
decision required | FraudReviewDecision |
types | array of FraudSignal |
note | string |
RevealDocumentInput
kinds | array of SensitiveKind |
reason | string |
CheckWithDocumentInput
check required | SubmitDocumentInput |
document required | SubmitDocumentInput |
BillingInvoicePage
data required | array of BillingInvoice |
nextCursor required | string,null Pass as |
ExportRecordPage
data required | array of ExportRecord |
nextCursor required | string,null Pass as |
ExportRecordsAppended
data required | array of ExportRecord |
alreadyRecorded required | number Already recorded, so left as they were. |
DocumentDetail
id required | string | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
type required | DocumentType | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
source required | DocumentSource | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
status required | DocumentStatus | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
originalFilename required | string,null | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
mimeType required | string | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
sizeBytes required | number | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
pageCount required | number | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
externalId required | string,null | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
folderId required | string,null | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
expenseId required | string,null | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
mailInBatchId required | string,null | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
title required | string,null | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
notes required | string,null | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
latitude required | number,null Where the device said it was when the photo was taken. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
longitude required | number,null | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
locationAccuracyM required | number,null | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
duplicateOfId required | string,null | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
processingError required | string,null | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
processingErrorCode required | FILE_ENCRYPTED or nullSet when the failure is one the file's owner can fix. processingError says what to do. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
verification required | string | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
capturedAt required | string,null | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
processedAt required | string,null | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
viewedAt required | string,null | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
archivedAt required | string,null | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
createdAt required | string | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
uploadedBy required | object or nullFields
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
pages required | array of objectFields
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
classification required | object or null What the classifier decided, when it was asked. Fields
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
blueprint required | object or null The blueprint this was read with, and what came out of it. Fields
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
tags required | array of string | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
tagRefs required | array of object The same tags with their ids, which a tag route takes. Fields
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
recordStatus required | processed reviewed archived or nullWhere a read document stands: reviewedAt and archivedAt in one word. Null until it has been read. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
duplicates required | array of object Near copies past the workspace threshold, best first. Fields
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
setId required | string,null The upload this came out of: a ZIP, a split PDF or a batch of addresses. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
customFields required | map of string or array of string or null Values the workspace custom field rules read out of the text. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
enrichment required | object or null Work still running after the first answer. Fields
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
extraction required | object or nullFields
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
fraud required | DocumentFraud or null | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
sealed required | array of SealedValue Bank and tax numbers read from this document, as masks. POST /v1/documents/{id}/reveal opens them. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
updatedAt required | string | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
extractor required | string,null What read it: rules, claude, a blueprint, business-card, or none. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
ocrText required | string,null Everything read off the page. Card, bank and tax numbers are masked. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
pdfUrl required | string,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 required | DocumentMeta | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
reviewedAt required | string,null A person checked what was read. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
approvedAt required | string,null A developer's own approved flag. An expense's approval is a different thing. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
reading | object or null Null when nothing has been read yet. Fields
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
detailed | any With detailed: the reading with each field wrapped as value, score, ocrScore, rotation, boundingBox, boundingRegion and enriched. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
lineItemsWithScores | array of map of any With with_scores: the same lines, with a value and its confidence on every sub-field. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
taxLinesWithScores | array of map of any With with_scores: the same tax lines, with a value and its confidence on every sub-field. |
DocumentTagList
data required | array of DocumentTag |
nextCursor required | string,null Pass as |
ExpenseLine
id required | string |
position required | number |
description required | string |
sku required | string,null |
quantity required | number,null |
unitPriceMinor required | number,null |
amountMinor required | number |
taxMinor required | number,null |
categoryId required | string,null |
ExpenseLinePage
data required | array of ExpenseLine |
nextCursor required | string,null Pass as |
ExpenseTaxLine
id required | string |
position required | number |
name required | string,null |
code required | string,null |
ratePct required | number,null |
baseMinor required | number,null |
amountMinor required | number |
ExpenseTaxLinePage
data required | array of ExpenseTaxLine |
nextCursor required | string,null Pass as |
WorkspaceClosed
status required | closed | ||||||
purgeAfter required | string Records are erased after this moment. | ||||||
storeSubscriptions required | array of object Non-empty when a store goes on billing until someone cancels there. Fields
|
ReferenceCurrencyPage
data required | array of objectFields
| ||||||
nextCursor required | string,null Pass as |
ReferenceCountryPage
data required | array of objectFields
| ||||||
nextCursor required | string,null Pass as |
ReferenceLocalePage
data required | array of objectFields
| ||||
nextCursor required | string,null Pass as |
ReferenceSystemCategoryPage
data required | array of objectFields
| ||||||||||
nextCursor required | string,null Pass as |
BulkReimbursed
reimbursed required | array of string | ||||||||
skipped required | array 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
| ||||||||
failed required | array of object Not found, or not the caller's to mark. Fields
|
DocumentList
data required | array of Document |
nextCursor required | string,null Pass as |
offset | number Where this page starts, when paging by offset or page. |
nextOffset | number,null Send this as |
page | number When paging by page number. |
pageSize | number |
totalCount | number With track_total_results: every document the caller can reach. |
filteredCount | number With track_total_results: what the filters leave of those. |
ProvisionResult
dryRun required | boolean | ||||
added required | array of objectFields
| ||||
updated required | array of objectFields
| ||||
removed required | array of objectFields
| ||||
skipped required | array of objectFields
|
AutomationApply
matched required | number |
updated required | number |
AutomationPreview
matched required | number Expenses the conditions match, voided ones aside. | ||||||||||||||
applicable required | number Of those, the ones still unsubmitted, which is what applying the rule changes. | ||||||||||||||
sample required | array of objectFields
| ||||||||||||||
aiSkipped required | boolean A question for Claude was left out of this count: it is asked when a document is read, not here. |
AutomationRule
id required | string | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
name required | string | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
enabled required | boolean | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
position required | number | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
conditions required | array of objectFields
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
actions required | objectFields
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
matchCount required | number | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
createdAt required | string | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
updatedAt required | string |
AutomationRuleOrder
data required | array of AutomationRule |
AutomationRuleList
data required | array of AutomationRule |
aiAvailable required | boolean Whether a question for Claude can be asked right now. When it cannot, each rule that needs one takes its fallback. |
Billing
plan required | PlanKey or null | ||||||
status required | TRIALING ACTIVE PAST_DUE EXPIRED NONE | ||||||
source required | STRIPE APP_STORE PLAY_STORE TRIAL COMP or null | ||||||
active required | boolean | ||||||
interval required | BillingInterval or null | ||||||
seats required | number Seats the workspace holds. | ||||||
seatsUsed required | number Members now plus open invitations, which hold a seat each. Above | ||||||
seatsIncluded required | number,null | ||||||
maxSeats required | number,null Null is unlimited, or no plan. | ||||||
trialEndsAt required | string,null | ||||||
currentPeriodEnd required | string,null | ||||||
cancelAtPeriodEnd required | boolean | ||||||
storeManaged required | boolean A live App Store or Google Play subscription owns this workspace, so the web cannot sell to it. | ||||||
store required | APP_STORE PLAY_STORE or null | ||||||
hasStripeSubscription required | boolean | ||||||
canOpenPortal required | boolean | ||||||
usage required | array of object The plan's counters for this month. Fields
| ||||||
stripeConfigured required | boolean | ||||||
cashsdkConfigured required | boolean |
BulkMemberResult
succeeded required | array of string | ||||
failed required | array of object Members the rules refused. They stay as they were, and the rest still change. Fields
|
CardStatements
array of CardStatement
Integration
provider required | IntegrationProvider | ||||||
slug required | string | ||||||
name required | string | ||||||
group required | ACCOUNTING PAYROLL HR CAPTURE STORAGE CHAT AUTOMATION | ||||||
availability required | NOT_CONFIGURED AVAILABLE CONNECTED NEEDS_ATTENTION EXPORT_AVAILABLE NOT_CONNECTED | ||||||
label required | string The short status, as printed on the card. | ||||||
description required | string | ||||||
export required | object or null The file that works today, with this provider or without it. Fields
| ||||||
organisationName required | string,null | ||||||
organisationChoices required | array of objectFields
| ||||||
lastSyncedAt required | string,null | ||||||
lastError required | string,null | ||||||
links required | array of objectFields
| ||||||
customerApp | boolean | ||||||
blockedBy | string |
IntegrationHealth
provider required | IntegrationProvider | ||||||
slug required | string | ||||||
name required | string | ||||||
status required | CONNECTED NEEDS_ATTENTION DISCONNECTED | ||||||
organisationName required | string,null | ||||||
synced required | number | ||||||
pending required | number | ||||||
failed required | number | ||||||
skipped required | number | ||||||
voided required | number | ||||||
waiting required | number Approved expenses with no record yet. | ||||||
lastSyncedAt required | string,null | ||||||
tokenExpiresAt required | string,null | ||||||
refreshTokenExpiresAt required | string,null | ||||||
endsOnDate | boolean | ||||||
pausedUntil required | string,null | ||||||
pulledAt required | string,null | ||||||
postingPaused | object or nullFields
|
IntegrationList
array of Integration
Invitation
id required | string | ||||
email required | string | ||||
name required | string,null | ||||
role required | MemberRole | ||||
status required | InvitationStatus | ||||
invitedBy required | object or nullFields
| ||||
expiresAt required | string | ||||
acceptedAt required | string,null | ||||
revokedAt required | string,null | ||||
createdAt required | string |
InvitationPage
data required | array of Invitation |
nextCursor required | string,null Pass as |
InvitationSent
id required | string | ||||
email required | string | ||||
name required | string,null | ||||
role required | MemberRole | ||||
status required | InvitationStatus | ||||
invitedBy required | object or nullFields
| ||||
expiresAt required | string | ||||
acceptedAt required | string,null | ||||
revokedAt required | string,null | ||||
createdAt required | string | ||||
acceptUrl required | string The link the email carries. It works only for someone signed in with this address. |
MailInAllowance
period required | string YYYY-MM. |
limit required | number Documents a month on this plan. |
used required | number Held by this month's batches. It can pass the limit: paper that has arrived is scanned regardless. |
remaining required | number |
included required | boolean False when the plan does not include mail-in at all. |
available required | boolean False until there is a mailroom to send paper to, whatever the plan says. |
mailroomAddress required | string,null Where own-packaging paper goes. Null until a mailroom has one. |
envelopes required | MailInEnvelopeAllowance |
MailInSettings
address required | object or nullFields
| ||||||||||||||||
updatedAt required | string,null |
MailInBatch
id required | string | ||||||||||||||||
reference required | string Printed on the packing slip and on the cover sheet. | ||||||||||||||||
workspaceReference required | string | ||||||||||||||||
status required | MailInStatus | ||||||||||||||||
envelopes required | number | ||||||||||||||||
expectedDocuments required | number | ||||||||||||||||
documentCount required | number | ||||||||||||||||
afterScan required | MailInDisposal | ||||||||||||||||
shippingAddress required | objectFields
| ||||||||||||||||
folderId required | string,null | ||||||||||||||||
trackingNumber required | string,null | ||||||||||||||||
notes required | string,null | ||||||||||||||||
requestedById required | string | ||||||||||||||||
requestedByName required | string,null Who this paper belongs to, as printed on the slip and the cover sheet. | ||||||||||||||||
requestedByEmail required | string,null | ||||||||||||||||
envelopeSentAt required | string,null | ||||||||||||||||
receivedAt required | string,null | ||||||||||||||||
completedAt required | string,null | ||||||||||||||||
createdAt required | string | ||||||||||||||||
updatedAt required | string |
MailInBatchPage
data required | array of MailInBatch |
nextCursor required | string,null Pass as |
MailInRequested
id required | string | ||||||||||||||||
reference required | string Printed on the packing slip and on the cover sheet. | ||||||||||||||||
workspaceReference required | string | ||||||||||||||||
status required | MailInStatus | ||||||||||||||||
envelopes required | number | ||||||||||||||||
expectedDocuments required | number | ||||||||||||||||
documentCount required | number | ||||||||||||||||
afterScan required | MailInDisposal | ||||||||||||||||
shippingAddress required | objectFields
| ||||||||||||||||
folderId required | string,null | ||||||||||||||||
trackingNumber required | string,null | ||||||||||||||||
notes required | string,null | ||||||||||||||||
requestedById required | string | ||||||||||||||||
requestedByName required | string,null Who this paper belongs to, as printed on the slip and the cover sheet. | ||||||||||||||||
requestedByEmail required | string,null | ||||||||||||||||
envelopeSentAt required | string,null | ||||||||||||||||
receivedAt required | string,null | ||||||||||||||||
completedAt required | string,null | ||||||||||||||||
createdAt required | string | ||||||||||||||||
updatedAt required | string | ||||||||||||||||
envelopeAllowance required | MailInEnvelopeAllowance |
MailInDocumentPage
data required | array of MailInDocument |
nextCursor required | string,null Pass as |
Member
id required | string The membership: the id PATCH and DELETE /v1/members/:id take. | ||||
userId required | string | ||||
email required | string | ||||
name required | string,null | ||||
photoUrl required | string,null | ||||
pronouns required | string,null | ||||
personStatus required | object or null The note they set beside their name, until it clears. Fields
| ||||
role required | MemberRole | ||||
status required | MemberStatus | ||||
developer required | boolean 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 required | string,null The manager's user id. | ||||
managerName required | string,null | ||||
title required | string,null | ||||
department required | string,null | ||||
employeeId required | string,null Null unless the caller has members.manage. | ||||
approvalLimitMinor required | number,null Null unless the caller has members.manage. | ||||
overLimitApproverId required | string,null Null unless the caller has members.manage. | ||||
forwardToId required | string,null Null unless the caller has members.manage. | ||||
workerStatus required | string,null Null unless the caller has members.manage. | ||||
defaultTags required | array of string Empty unless the caller has members.manage. | ||||
customField1 required | string,null | ||||
customField2 required | string,null | ||||
payrollCode required | string,null Goes out with payroll files. Null unless the caller manages members. | ||||
legalEntity required | string,null The company the person is employed by. Null unless the caller manages members. | ||||
tier required | string,null Their travel tier. Null unless the caller manages members. | ||||
officeLocation required | string,null The office they work from. Null unless the caller manages members. | ||||
costCenter required | string,null Where their costs are charged. Null unless the caller manages members. | ||||
accountingCode required | string,null Their code in the books. Null unless the caller manages members. | ||||
workerType required | string,null Employee, contractor or the like. Null unless the caller manages members. | ||||
createdAt required | string |
MemberPage
data required | array of Member |
nextCursor required | string,null Pass as |
PaymentAccount
id required | string | ||||||||||
name required | string | ||||||||||
kind required | PaymentAccountKind | ||||||||||
brand required | string,null | ||||||||||
last4 required | string,null | ||||||||||
isCompany required | boolean | ||||||||||
feedSource required | FeedSource | ||||||||||
owner required | object or nullFields
| ||||||||||
institutionName required | string,null | ||||||||||
archived required | boolean | ||||||||||
transactionCount required | number | ||||||||||
unmatchedCount required | number | ||||||||||
lastPostedDate required | string,null | ||||||||||
lastImportedAt required | string,null When a line last arrived, from a file or the bank. | ||||||||||
transactionStartDate required | string,null | ||||||||||
statementCloseDay required | number,null | ||||||||||
liability required | CardLiability | ||||||||||
reimbursable required | boolean,null | ||||||||||
allowDeletingTransactions required | boolean | ||||||||||
glAccount required | string,null | ||||||||||
createExpenses required | boolean | ||||||||||
assigneeEmail required | string,null Invited and not yet in: the card is theirs when they join. | ||||||||||
balance required | object or null What the bank last reported, when it reports these at all. Fields
| ||||||||||
createdAt required | string |
PaymentAccountPage
data required | array of PaymentAccount |
nextCursor required | string,null Pass as |
Reconciliation
from required | string | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
to required | string | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
currency required | string What every figure here is in. Ask for another with currency. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
currencies required | array of object Every currency posted in these dates, each with its own count and net. Fields
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
importedMinor required | number What to hold against the card statement. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
importedCount required | number | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
approvedMinor required | number What to hold against the liability account. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
approvedCount required | number | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
unapprovedMinor required | number What is left to accrue at month end, by where it is stuck. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
unapprovedCount required | number | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
pendingMinor required | number Charges the bank has not posted, which are on no statement yet. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
buckets required | objectFields
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
cards required | array of objectFields
|
ReportField
id required | string |
name required | string |
type required | ReportFieldType |
options required | array of string |
formula required | string,null |
required required | boolean |
enabled required | boolean |
position required | number |
disabledOptions | array of string List values turned off: kept on reports that hold them, and not offered for new ones. |
imported | boolean Came from the connected books, so it cannot be deleted and its values only turn on and off. |
ReportFieldList
data required | array of ReportField |
ReportFieldsOff
deleted required | number Fields removed. Lists take work to build, so they are kept. |
disabled required | number Lists turned off and kept. |
SeatUsage
active required | number | ||||||||||||||||||||||
invited required | number Open invitations hold a seat until they are accepted, revoked or expire. | ||||||||||||||||||||||
included required | number,null | ||||||||||||||||||||||
paid required | number,null Seats the workspace holds, which is what stops an invitation. Null with no plan. | ||||||||||||||||||||||
max required | number,null The most seats this plan can hold. Null is unlimited. | ||||||||||||||||||||||
full required | object or null Set once every seat is taken or invited, with what to do about it. Fields
|
SyncRecordPage
data required | array of SyncRecord |
nextCursor required | string,null Pass as |
Transaction
id required | string | ||||||||||||||||||||||
paymentAccount required | objectFields
| ||||||||||||||||||||||
postedDate required | string | ||||||||||||||||||||||
amountMinor required | number Positive is money spent. Negative is a refund or a payment to the card. | ||||||||||||||||||||||
currency required | string | ||||||||||||||||||||||
description required | string | ||||||||||||||||||||||
merchantName required | string,null | ||||||||||||||||||||||
state required | TransactionState | ||||||||||||||||||||||
matchScore required | number,null | ||||||||||||||||||||||
missingReceipt required | boolean Older than three days with no expense: a receipt is owed. | ||||||||||||||||||||||
expense required | object or nullFields
| ||||||||||||||||||||||
suggestions required | array of objectFields
|
TransactionPage
data required | array of Transaction |
nextCursor required | string,null Pass as |
TransactionSummary
currency required | string What every figure here is in: the one asked for with currency, or the workspace currency when it has lines, or the commonest. | ||||||
currencies required | array of object Every currency these lines are in, each with its own count and net. Fields
| ||||||
count required | number | ||||||
spentMinor required | number | ||||||
creditedMinor required | number | ||||||
missingReceipts required | number | ||||||
byState required | array of objectFields
|
Workspace
id required | string | ||||||||||||||||||||||||||||||||||
name required | string | ||||||||||||||||||||||||||||||||||
kind required | PERSONAL TEAM | ||||||||||||||||||||||||||||||||||
baseCurrency required | string | ||||||||||||||||||||||||||||||||||
role required | MemberRole | ||||||||||||||||||||||||||||||||||
country required | string | ||||||||||||||||||||||||||||||||||
timezone required | string | ||||||||||||||||||||||||||||||||||
fiscalYearStartMonth required | number | ||||||||||||||||||||||||||||||||||
distanceUnit required | string | ||||||||||||||||||||||||||||||||||
claimedDomain required | string,null | ||||||||||||||||||||||||||||||||||
requireMfa required | boolean | ||||||||||||||||||||||||||||||||||
retentionDays required | number,null Documents are deleted this many days after they are read. Null keeps them until someone deletes them. | ||||||||||||||||||||||||||||||||||
callLogRetentionDays required | number,null Days the API call log is kept. Null is the default of 365. | ||||||||||||||||||||||||||||||||||
preferences required | objectFields
| ||||||||||||||||||||||||||||||||||
permissions required | array 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.deleteWhat this caller may do here, from the role of the person the key belongs to. | ||||||||||||||||||||||||||||||||||
entitlement required | objectFields
| ||||||||||||||||||||||||||||||||||
services required | objectFields
| ||||||||||||||||||||||||||||||||||
usage required | map of number | ||||||||||||||||||||||||||||||||||
memberCount required | number | ||||||||||||||||||||||||||||||||||
sandboxOfId required | string,null The workspace this is the sandbox of. Null for a live workspace. | ||||||||||||||||||||||||||||||||||
readingModel required | ReadingModel What reads this workspace's documents. | ||||||||||||||||||||||||||||||||||
actingFor | object or nullFields
|
WorkspaceCounts
needsReview required | number |
processing required | number |
pendingApprovals required | number |
holdsApprovals required | boolean |
unmatchedTransactions required | number |
unreadNotifications required | number |
WorkspaceCreated
id required | string | ||||||||
name required | string | ||||||||
kind required | PERSONAL TEAM | ||||||||
baseCurrency required | string | ||||||||
role required | MemberRole | ||||||||
entitlement required | objectFields
| ||||||||
checkout required | object or null Set when a plan was named. Fields
|
WorkspacePage
data required | array of WorkspaceSummary |
nextCursor required | string,null Pass as |
ClientWorkspaces
array of ClientWorkspace
Home
timeSensitive required | array of object What can stop this person's work today. Each shows only while it applies. Fields
| ||||||||||||||||||||||||||
todos required | array of object What a report cannot move forward without, by what this person can do. Fields
| ||||||||||||||||||||||||||
upcomingTravel required | array of objectFields
| ||||||||||||||||||||||||||
insights required | array of object Plain sentences worked out from this person's own expenses. Fields
| ||||||||||||||||||||||||||
announcements required | array of objectFields
| ||||||||||||||||||||||||||
spend required | object or null Null for someone with no spending to see. Fields
|
ReportApprovalLink
state required | OPEN APPROVED SETTLEDOPEN can be approved or rejected. APPROVED can be marked paid. SETTLED is over, and holds no figures. | ||||||||||||||||
note required | string,null | ||||||||||||||||
reference required | string | ||||||||||||||||
title required | string | ||||||||||||||||
workspaceName required | string | ||||||||||||||||
ownerName required | string | ||||||||||||||||
purpose required | string,null | ||||||||||||||||
currency required | string | ||||||||||||||||
totalMinor required | number | ||||||||||||||||
reimbursableMinor required | number | ||||||||||||||||
periodStart required | string,null | ||||||||||||||||
periodEnd required | string,null | ||||||||||||||||
expiresAt required | string | ||||||||||||||||
expenses required | array of objectFields
|
ExpensesMoved
moved required | number |
skipped required | array of SkippedExpense |
reportId required | string,null The report they went to. Null when they came off every report. |
ExpensesDuplicated
created required | array of objectFields
| ||||
skipped required | array of SkippedExpense |
ExpensesHeld
changed required | number |
skipped required | array of SkippedExpense |
ProfilePhoto
photoUrl required | string A signed link that lasts 15 minutes. |
PrivateDetailsCodeSent
status required | SENT |
email required | string Where the code went: the address this person signs in with. |
PrivateDetailsUnlocked
details required | PrivateDetails |
unlockToken required | string Saves without a new code until unlockedUntil. |
unlockedUntil required | string |
PrivateDetailsSaved
details required | PrivateDetails |
PeopleSync
systems required | array of HrSystem | ||||||||||||||||||
connection required | object or nullFields
| ||||||||||||||||||
runs required | array of PeopleSyncRun |
HrConnected
systems required | array of HrSystem | ||||||||||||||||||
connection required | object or nullFields
| ||||||||||||||||||
runs required | array of PeopleSyncRun | ||||||||||||||||||
dropToken required | string,null The token in the file drop and webhook addresses. It shows this once. |
PeopleSyncRun
id required | string | ||||
trigger required | string SETUP, SCHEDULED, MANUAL, FILE or WEBHOOK. | ||||
added required | number | ||||
updated required | number | ||||
removed required | number | ||||
skipped required | number | ||||
skips required | array of objectFields
| ||||
error required | string,null | ||||
startedAt required | string | ||||
finishedAt required | string,null |
InvoiceSettings
enabled required | boolean |
supplierName required | string,null |
supplierAddress required | string,null |
taxNumbers required | map of string One number per kind of tax number, by its label: VAT Number, ABN Number and so on. |
terms required | string,null |
Invoice
id required | string |
number required | number |
reference required | string INV- and the number. |
status required | InvoiceStatus |
displayStatus required | InvoiceDisplayStatus |
title required | string,null |
recipientName required | string,null |
recipientEmail required | string,null |
recipientPhone required | string,null |
currency required | string |
issueDate required | string |
dueDate required | string,null |
totalMinor required | number |
paidMinor required | number |
refundedMinor required | number |
balanceMinor required | number What is still owed: the total, less payments, plus anything refunded. |
sentAt required | string,null |
viewedAt required | string,null |
paidAt required | string,null |
createdAt required | string |
shareWith required | array of string |
terms required | string,null |
supplierName required | string,null |
supplierAddress required | string,null |
supplierTaxLabel required | string,null |
supplierTaxNumber required | string,null |
subtotalMinor required | number |
taxMinor required | number |
lastReminderAt required | string,null |
reminderCount required | number |
logoUrl required | string,null |
lines required | array of InvoiceLine |
payments required | array of InvoicePayment |
messages required | array of InvoiceMessage |
link required | string,null The recipient's link, once the invoice has gone out. Undoing the send stops it working. |
InvoicePage
data required | array of InvoiceSummary |
nextCursor required | string,null Pass as |
BulkInvoiceResult
created required | number | ||||
sent required | number | ||||
skipped required | number Rows of the file that were already imported. | ||||
errors required | array of object One for each row that could not be read, in the file's own terms. Fields
|
InvoicesToPay
array of InvoiceToPay
PublicInvoice
reference required | string | ||||||||||||||||
displayStatus required | InvoiceDisplayStatus | ||||||||||||||||
title required | string,null | ||||||||||||||||
recipientName required | string,null | ||||||||||||||||
currency required | string | ||||||||||||||||
issueDate required | string | ||||||||||||||||
dueDate required | string,null | ||||||||||||||||
terms required | string,null | ||||||||||||||||
senderName required | string | ||||||||||||||||
supplierName required | string,null | ||||||||||||||||
supplierAddress required | string,null | ||||||||||||||||
supplierTaxLabel required | string,null | ||||||||||||||||
supplierTaxNumber required | string,null | ||||||||||||||||
subtotalMinor required | number | ||||||||||||||||
taxMinor required | number | ||||||||||||||||
totalMinor required | number | ||||||||||||||||
paidMinor required | number | ||||||||||||||||
refundedMinor required | number | ||||||||||||||||
balanceMinor required | number | ||||||||||||||||
logoUrl required | string,null | ||||||||||||||||
lines required | array of objectFields
| ||||||||||||||||
payments required | array of objectFields
| ||||||||||||||||
messages required | array of objectFields
|
MoneyFlow
currency required | string | ||||||||
months required | array of object Oldest first, by the same reckoning as the totals. Fields
|
ExpenseGroups
array of ExpenseGroup
BulkEditOptions
editable required | number How many of the selection this person may edit here. The rest are left out. | ||||||||||||
skipped required | number | ||||||||||||
fields required | map of object A field restricted on any selected expense is closed, with the reason. | ||||||||||||
tagLevels required | array of objectFields
|
BulkEditResult
updated required | number |
skipped required | number |
SplitRows
parentId required | string | ||||||||||||||||
totalMinor required | number The whole they were split from, and what the parts may add up to. | ||||||||||||||||
currency required | string | ||||||||||||||||
mustEqualTotal required | boolean Exactly the whole for a card or a per diem. Any figure up to it for cash and distance. | ||||||||||||||||
amountOnly required | boolean Distance divides by amount only. | ||||||||||||||||
reimbursableFixed required | boolean The workspace's cash rule or a card settles this, so nobody chooses. | ||||||||||||||||
canEdit required | boolean Not once the report is approved, reimbursed or closed. | ||||||||||||||||
rows required | array of objectFields
|
ExpenseHistory
data required | array of objectFields
|
RecentAttendees
data required | array of object People this person has listed lately, newest first. Fields
|
PublicReceipt
filename required | string,null |
pages required | array of string A signed link to each page. Each one lasts 15 minutes. |
PublicReceiptLink
url required | string Opens the receipt for anyone who has it, while the workspace has public receipts on. |
SpreadsheetText
csv required | string The first sheet as CSV, ready for an import route. |
TagLevels
levels required | array of objectFields
| ||||||||||||||||||||||
dependent required | boolean |
TagSuggestionList
data required | array of objectFields
|
DocumentSettings
s3 required | S3Access | ||||||||||||
duplicates required | objectFields
| ||||||||||||
lineItems required | objectFields
| ||||||||||||
maxPages required | number Pages read from one file. | ||||||||||||
cropDocument required | boolean 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 required | combine separateWhat 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 required | submission receiptWhich day's rate converts a foreign receipt. | ||||||||||||
asyncEnrichments required | array of AsyncEnrichment Steps left to run after the first answer. | ||||||||||||
customFields required | array of objectFields
|
InvitationAccepted
workspaceId required | string |
workspaceName required | string |
role required | MemberRole |
DelegationPage
data required | array of Delegation |
nextCursor required | string,null Pass as |
DelegationCreated
Delegation or object or object
status required | ACTIVE |
delegation required | Delegation |
Delegation
id required | string | ||||||
permanent required | boolean Between an agent and its owner. It lasts as long as the agent, and nobody can change or remove it. | ||||||
delegator required | objectFields
| ||||||
delegate required | objectFields
| ||||||
access required | DelegationAccess | ||||||
startsAt required | string | ||||||
endsAt required | string,null Null runs until someone removes it. | ||||||
active required | boolean Inside its window right now. |
CopySettingsResult
sections required | array of CopySection |
OffboardingList
data required | array of OffboardingItem |
AuditEventPage
data required | array of AuditEvent |
nextCursor required | string,null Pass as |
DomainList
data required | array of Domain |
Domain
id required | string | ||||
name required | string | ||||
status required | PENDING VERIFIED | ||||
workspaceId required | string | ||||
workspaceName required | string | ||||
joinPolicy required | DomainJoinPolicy | ||||
verification required | object Where the TXT record goes and what it says. Fields
| ||||
verifiedAt required | string,null | ||||
lastCheckedAt required | string,null | ||||
lastCheckError required | string,null | ||||
adminCount required | number | ||||
pendingAccessRequests required | number | ||||
createdAt required | string |
DomainAccessRequested
status required | PENDING |
DomainAccessRequestList
data required | array of DomainAccessRequest |
DomainAdminList
data required | array of DomainAdmin |
DomainMemberList
data required | array of DomainMember |
DomainReport
domain required | string |
currency required | string |
rows required | array of DomainReportRow |
DomainInviteResult
object or object
status required | INVITED |
email required | string |
acceptUrl required | string |
DomainGroupList
data required | array of DomainGroup |
DomainGroup
id required | string |
name required | string |
isDefault required | boolean |
strictRules required | boolean |
restrictLogin required | boolean |
restrictWorkspaces required | boolean |
preferredWorkspaceId required | string,null |
cardWorkspaceId required | string,null |
memberCount required | number |
DomainMigration
id required | string,null | ||||||
fromDomain required | string | ||||||
toDomain required | string | ||||||
status required | PENDING FAILED DONE RUNNING PLANNED | ||||||
createdAt required | string,null | ||||||
finishedAt required | string,null | ||||||
moves required | array of object Addresses that swap, old to new. Fields
| ||||||
skipped required | array of object Who stays, and why. Fields
| ||||||
blockers required | array of string What stops the whole move. |
JoinOptions
email required | string The address that proved these. |
workspaces required | array of JoinableWorkspace |
JoinEmailSent
status required | SENT |
JoinResult
status required | REQUESTED JOINED |
workspaceId required | string |
workspaceName required | string |
JoinLinkPreview
workspaceName required | string |
role required | MemberRole |
requiresApproval required | boolean |
JoinLinkList
data required | array of JoinLink |
JoinLink
id required | string |
url required | string |
role required | MemberRole |
requiresApproval required | boolean |
expiresAt required | string,null |
createdAt required | string |
JoinRequestList
data required | array of JoinRequest |
ScimTokenList
data required | array of ScimToken |
ScimTokenCreated
token required | string |
baseUrl required | string What to paste into the identity provider. |
id required | string |
name required | string |
prefix required | string |
lastUsedAt required | string,null |
expiresAt required | string,null |
createdAt required | string |
EmailSignInSent
status required | string |
EmailSignInRedeemed
email required | string |
link required | string,null For signInWithEmailLink. A verified second address gets |
customToken required | string,null |
Unsubscribe
email required | string |
type required | string,null Null stopped every optional email. |
label required | string,null |
RecoveryCodes
remaining required | number |
generatedAt required | string,null |
RecoveryCodesIssued
codes required | array of string |
remaining required | number |
generatedAt required | string,null |
SessionList
data required | array of Session |
MergeStarted
status required | string |
AccountMerged
mergedEmail required | string |
workspaces required | number Workspaces the other account was in that this one now holds. |
OnboardingResult
workspaceId required | string,null |
ReportArchiveList
data required | array of ReportArchive |
ReportArchiveDetail
reports required | array of ArchivedReport |
id required | string |
workspaceName required | string |
reportCount required | number |
closedAt required | string |
SsoConnectionOrNone
SsoConnection or null
SsoConnection
id required | string |
protocol required | SsoProtocol |
providerId required | string |
displayName required | string |
idpEntityId required | string,null |
ssoUrl required | string,null |
certificateExpiresAt required | string,null |
clientId required | string,null |
issuer required | string,null |
enforced required | boolean |
ownerExempt required | boolean |
lastSignInAt required | string,null |
updatedAt required | string |
SsoMetadata
filename required | string |
xml required | string |
WorkspaceSecurity
ssoAvailable required | boolean This plan includes single sign-on. |
verifiedDomains required | array of string |
connection required | SsoConnection or null |
serviceProvider required | ServiceProvider |
requireMfa required | boolean |
signedInThroughProvider required | boolean This request came through the workspace's provider, so requiring it cannot lock this person out. |
hasSecondFactor required | boolean This request carries a second factor. |
SignInDiscovery
provider required | SignInProvider or null Set when this address's domain has an identity provider. |
required required | boolean Password, Google and Apple will be refused for this address. |
StatusPage
measuredSince required | string,null The first measurement there is. Null means nothing has been measured yet. |
generatedAt required | string |
components required | array of StatusComponent |
incidents required | array of StatusIncident |
Me
id required | string | ||||
email required | string | ||||
emailVerified required | boolean | ||||
displayName required | string,null | ||||
photoUrl required | string,null | ||||
phone required | string,null | ||||
language required | UiLanguage The language the interface is written in. | ||||
highContrast required | boolean | ||||
pronouns required | string,null | ||||
personStatus required | object or null A note beside their name, until it clears. Fields
| ||||
hasPrivateDetails required | boolean Whether anything is kept under the emailed code. The details never come back from here. | ||||
locale required | string | ||||
timezone required | string | ||||
distanceUnit required | string | ||||
onboarded required | boolean | ||||
onboardingIntent required | string,null What they said they came for on first run. | ||||
emailBounced required | boolean Their address bounced, so mail to it stopped until they fix it. | ||||
phoneVerified required | boolean Firebase proved the number with a code. | ||||
hasEmail required | boolean False for someone who came in with a phone number and has not added an address yet. | ||||
locked required | boolean Locked after a report of suspicious activity. Only support can undo it. | ||||
canChangeEmail required | boolean A domain group can keep the sign-in address where the company put it. | ||||
canManageWorkspaces required | boolean A domain group can stop someone creating or closing workspaces. | ||||
defaultWorkspaceId required | string,null | ||||
forwardingAddress required | string | ||||
workspaces required | array of WorkspaceSummary |
ForwardingAlias
alias required | string |
address required | string |
CategoryAccess
userIds required | array of string |
MileageYear
distance required | number |
RouteService
configured required | boolean |
provider required | string,null |
SavedPlaceList
array of SavedPlace
SavedPlace
id required | string |
name required | string |
address required | string |
RouteEstimate
provider required | string | ||||||||
attribution required | string Has to be shown beside the figures. | ||||||||
unit required | string | ||||||||
routes required | array of object The usual route first, then any alternatives. Alternatives only exist with no stops along the way. Fields
|
Commute
home required | string,null Your home address, as you type it on a trip. |
distance required | number,null One way. |
unit required | mi km |
DistanceSettings
requireGpsOrMap required | boolean Typed distances and odometer readings stop for new trips. | ||||||||||||||||
requireLocked required | boolean Excluding commutes holds the requirement on. | ||||||||||||||||
excludeCommutes required | NONE ONE_WAY BOTH_WAYS | ||||||||||||||||
trackTax required | boolean | ||||||||||||||||
workspaceTaxBasisPoints required | number,null Track tax needs one. Null is no taxes here. | ||||||||||||||||
government required | objectFields
|
MovedExpense
expenseId required | string |
reference required | string |
workspaceId required | string |
workspaceName required | string |
amountMinor required | number |
currency required | string |
rateMinor required | number,null A trip's new rate, at a hundredth of a cent per unit. |
rateName required | string,null |
distance required | number,null |
unit required | string,null |
PerDiemSettings
defaultCategoryId required | string,null |
defaultCategoryName required | string,null |
BulkPerDiemResult
updated required | number |
deleted required | number |
ApprovalQueue
counts required | ApprovalCounts |
data required | array of ApprovalQueueItem |
nextCursor required | string,null |
ReportSettings
autoReport required | objectFields
| ||||||||||||
randomAuditPercent required | number | ||||||||||||
preventSelfApproval required | boolean On, nobody approves their own report while someone else can. | ||||||||||||
preventPayingNonReimbursable required | boolean On, a report with nothing reimbursable on it cannot be marked as paid. | ||||||||||||
autoApproveCompliant required | boolean Off, no amount and no rule approves a report by itself. | ||||||||||||
strictPolicies required | boolean | ||||||||||||
rulesEnabled required | boolean | ||||||||||||
prohibitedItems required | array of ProhibitedItem | ||||||||||||
titleFormula required | string,null | ||||||||||||
titleLocked required | boolean | ||||||||||||
policyText required | string,null | ||||||||||||
policyDocument required | PolicyDocument or null | ||||||||||||
cashExpenses required | REIMBURSABLE NON_REIMBURSABLE ALWAYS_REIMBURSABLE ALWAYS_NON_REIMBURSABLE or null | ||||||||||||
externalCheckUrl required | string,null | ||||||||||||
showGlCodes required | boolean | ||||||||||||
publicReceipts required | boolean Anyone with a receipt's public link can open it, with no sign-in. Off unless someone turns it on. | ||||||||||||
fringeBenefits required | boolean A category with payroll code TAG needs both attendee counts before it can be submitted. | ||||||||||||
tagLevels required | array of string Tag levels from the top down, as the last multi-level import named them. | ||||||||||||
dependentTags required | boolean Lower levels filter to the combinations a dependent import listed. | ||||||||||||
attendeeTracking required | boolean On, an expense can list who attended. | ||||||||||||
billableExpenses required | DISABLED DEFAULT_BILLABLE DEFAULT_NON_BILLABLEWhether expenses can be billable, and what a new one starts as. |
Policy
text required | string,null | ||||||
document required | object or null A short-lived link to the PDF. Fields
|
ApprovalWorkflowList
data required | array of ApprovalWorkflow |
ApprovalWorkflow
id required | string | ||||||||||||
name required | string | ||||||||||||
isDefault required | boolean | ||||||||||||
memberIds required | array of string People whose reports take this workflow instead of the default. | ||||||||||||
steps required | array of objectFields
| ||||||||||||
autoApproveUnderMinor required | number,null | ||||||||||||
createdAt required | string | ||||||||||||
updatedAt required | string |
PolicyRuleList
data required | array of PolicyRule |
PolicyRule
id required | string |
type required | PolicyRuleType |
severity required | PolicySeverity |
enabled required | boolean |
categoryId required | string,null |
amountMinor required | number,null |
days required | number,null |
note required | string,null |
createdAt required | string |
updatedAt required | string |
SavedSearchList
array of SavedSearch
SearchShortcuts
shortcuts required | array of object What your role in a workspace shared with others gives you, or what is waiting on you anywhere. Everyone has Drafts. Fields
|
AccountingShortcutList
shortcuts required | array of object The shortcuts your role gives you, in this workspace. Fields
|
AccountingShortcut
shortcut required | AccountingShortcutKey | ||||||||||||||||
currency required | string | ||||||||||||||||
rows required | array of AccountingRow | ||||||||||||||||
groups required | array of object or null Set on card statements, and on accruals asked to group. Fields
| ||||||||||||||||
footer required | objectFields
| ||||||||||||||||
nextCursor required | string,null | ||||||||||||||||
accounts required | array of object The feeds the Feed filter offers, on the shortcuts that have one. Fields
|
BankReconciliationExpenses
array of BankReconciliationExpense
CatalogReportList
reports required | array of objectFields
|
CatalogReport
key required | CatalogReportKey | ||||||
title required | string | ||||||
description required | string | ||||||
from required | string | ||||||
to required | string | ||||||
currency required | string Every money column here is in this currency, the workspace's base. | ||||||
columns required | array of objectFields
| ||||||
rows required | array of objectFields
| ||||||
totalMinor required | number,null What the rows come to. Null for a report that is not about money. | ||||||
truncated required | boolean There were more rows than one report reads. |
SavedSearch
columns | array of ExpenseColumn or null Which columns the expense list shows for this search, in order. Without it, the reader's own. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
sort | ExpenseSort or null How the expense list sorts for this search. Without it, newest first. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
id required | string | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
name required | string | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
filters required | objectFields
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
shared required | boolean | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
ownerId required | string | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
createdAt required | string |
ExportTemplateList
array of ExportTemplate
ExportTemplate
id required | string | ||||||
name required | string | ||||||
columns required | array of objectFields
| ||||||
shared required | boolean | ||||||
ownerId required | string | ||||||
createdAt required | string |
ScheduledReportPage
data required | array of ScheduledReport |
nextCursor required | string,null Pass as |
ScheduledReport
id required | string | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
name required | string | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
kind required | ScheduledReportKind | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
format required | ExportFormat | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
filters required | objectFields
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
cadence required | ReportCadence | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
recipients required | array of string | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
enabled required | boolean | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
nextRunAt required | string | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
lastRunAt required | string,null | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
createdById required | string | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
createdAt required | string |
Outstanding
currency required | string | ||||||||
unbatchedMinor required | number | ||||||||
batchedMinor required | number | ||||||||
totalMinor required | number | ||||||||
payees required | array of OutstandingPayee | ||||||||
lastMethod required | ReimbursementMethod or null How the last batch here was paid, to start the next one on. | ||||||||
payer required | MoneyPerson or null The designated payer, when the workspace named one. | ||||||||
nothingOwed required | array of object Approved reports with nothing owed. Marking one paid is how it closes. Fields
|
ReimbursementPage
data required | array of Reimbursement |
nextCursor required | string,null Pass as |
NachaFile
entryCount required | number |
entryHash required | string |
totalCreditMinor required | number |
blockCount required | number |
effectiveDate required | string |
filename required | string |
contentType required | string |
content required | string |
AbaFile
filename required | string |
contentType required | string |
content required | string |
entryCount required | number |
totalCreditMinor required | number |
processOn required | string |
ReimbursementSettings
payerId | string,null The person who is reminded of what is waiting to be paid. Anyone with the permission can still pay. |
autoBatchUnderMinor | number,null Approved reports at or under this go into a batch by themselves, ready for the next file. |
requireCardMatch | boolean,null A card expense needs its charge matched before the report can get its final approval. |
detailsExport | boolean,null People who pay can download who is owed what on approved reports, with their bank details. Off until someone adds it. |
AchOriginatorSetting
originator required | object or nullFields
|
AbaOriginatorSetting
originator required | object or nullFields
|
AbaOriginator
bankCode required | string Three letters for the bank, such as CBA or NAB. |
userName required | string The name the bank holds for you, up to 26 characters. |
userId required | string The Direct Entry User ID your bank gave you. |
bsb required | string What the account you pay from is, for the balancing entry. |
accountNumber required | string |
description required | string What a payee sees on their statement. |
AchOriginator
bankRoutingNumber required | string The bank that sends the file on: Immediate Destination, and the Originating DFI. |
bankName required | string |
companyName required | string |
companyId required | string Assigned by the bank, usually 1 followed by the EIN. |
secCode required | PPD CCDPPD pays a person's account, CCD pays a business account. |
entryDescription required | string What a payee sees on their statement. |
originId | string,null Immediate Origin, when the bank wants something other than the company ID. |
originName | string,null The legal name, up to 23 characters. Defaults to the company name. |
PayeeBankAccountList
array of PayeeBankAccount
PayeeBankAccount
user required | MoneyPerson |
holderName required | string |
accountType required | BankAccountType |
routingMasked required | string |
accountMasked required | string |
updatedAt required | string |
MyBankAccount
account required | PayeeBankAccount or null |
ReimbursementList
array of Reimbursement
Reimbursement
id required | string | ||||
number required | number | ||||
reference required | string REI-0001. | ||||
status required | ReimbursementStatus | ||||
method required | ReimbursementMethod | ||||
currency required | string | ||||
totalMinor required | number What the batch pays. For a batch in a NACHA file this is the file's figure. | ||||
owedMinor required | number What its reports add up to now. Different from | ||||
paymentReference required | string,null What a person typed as proof of payment: a check number or a payroll run. | ||||
note required | string,null | ||||
paidOn required | string,null | ||||
confirmedOn required | string,null When the payee said the money arrived. | ||||
canReverse required | boolean A paid batch nothing went out for automatically can still be taken back. | ||||
payee required | MoneyPerson | ||||
bankAccount required | object or nullFields
| ||||
reports required | array of ReimbursementReport | ||||
createdAt required | string | ||||
updatedAt required | string |
BulkPaymentAccountResult
updated required | number |
skipped required | number |
expensesRemoved required | number |
StatementPreview
format required | CSV XLSX IIF OFX QFX | ||||||||||||||||||||||||||||||||||
headers required | array of string Empty for OFX and QFX, which need no mapping. | ||||||||||||||||||||||||||||||||||
sample required | array of array of string | ||||||||||||||||||||||||||||||||||
rowCount required | number | ||||||||||||||||||||||||||||||||||
suggested required | object or nullFields
| ||||||||||||||||||||||||||||||||||
accountLast4 required | string,null | ||||||||||||||||||||||||||||||||||
currency required | string,null | ||||||||||||||||||||||||||||||||||
from required | string,null | ||||||||||||||||||||||||||||||||||
to required | string,null | ||||||||||||||||||||||||||||||||||
output required | array of StatementOutputRow The first rows as they would be stored under the mapping sent, or the suggested one. | ||||||||||||||||||||||||||||||||||
errors required | array of object What that mapping could not read. Fields
|
StatementFeedImportResult
cards required | array of objectFields
| ||||||||
format required | CSV XLSX IIF OFX QFX | ||||||||
parsed required | number | ||||||||
created required | number | ||||||||
duplicates required | number Rows not added: already imported, or held back. A statement imported twice adds nothing. | ||||||||
heldBack required | number How many of | ||||||||
beforeStartDate required | number Dated before the account's transaction start date, so left out. | ||||||||
expensesCreated required | number Expenses made from new charges, when asked for. | ||||||||
heldBackRows required | array of HeldBackRow The first few held back, to judge by. | ||||||||
errors required | array of object Rows that could not be read, with the line they came from. Fields
| ||||||||
from required | string,null | ||||||||
to required | string,null |
StatementImportResult
format required | CSV XLSX IIF OFX QFX | ||||
parsed required | number | ||||
created required | number | ||||
duplicates required | number Rows not added: already imported, or held back. A statement imported twice adds nothing. | ||||
heldBack required | number How many of | ||||
beforeStartDate required | number Dated before the account's transaction start date, so left out. | ||||
expensesCreated required | number Expenses made from new charges, when asked for. | ||||
heldBackRows required | array of HeldBackRow The first few held back, to judge by. | ||||
errors required | array of object Rows that could not be read, with the line they came from. Fields
| ||||
from required | string,null | ||||
to required | string,null |
CardLayoutList
array of CardLayout
CardLayout
id required | string | ||||||||||||||||||||||||||||||||||
name required | string | ||||||||||||||||||||||||||||||||||
mapping required | objectFields
| ||||||||||||||||||||||||||||||||||
updatedAt required | string |
BulkTransactionResult
updated required | number | ||||
skipped required | array of object What was left as it was, each with why. Fields
|
PlaidStatus
configured required | boolean |
environment required | ReleaseEnvironment |
PlaidItemList
array of PlaidItem
PlaidLinkToken
linkToken required | string |
expiration required | string |
PlaidItem
id required | string | ||||||||
institutionName required | string,null | ||||||||
status required | string | ||||||||
issue required | object or null What is wrong, when something is. The title and message are shown as written. Fields
| ||||||||
attention required | boolean Whether to show the red dot. It stops after 90 days without a sync, and | ||||||||
lastSyncedAt required | string,null | ||||||||
accounts required | array of PaymentAccount |
BillingPlans
currency required | USD | ||||
plans required | array of BillingPlan | ||||
trial required | objectFields
|
BillingRedirect
url required | string |
destination required | checkout portal |
CashsdkToken
token required | string Send as X-CashSDK-User-Token. |
appUserId required | string The CashSDK app user id, which is the workspace id. |
expiresAt required | string |
WorkspaceTransferred
ownerId required | string |
ownerName required | string |
AccountDeletion
status required | scheduled |
purgeAfter required | string |
closedWorkspaces required | array of NamedWorkspace Workspaces that closed with the account. |
storeSubscriptions required | array of StoreSubscriptionNotice |
ApiCallPage
data required | array of ApiCall |
nextCursor required | string,null Pass as |
FraudSettings
enabled required | boolean Off stops every check. A capture never depended on it. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
yellowAt required | number At or above this a document reads yellow. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
redAt required | number Above this a document reads red. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
profiles required | objectFields
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
suspiciousWords required | array of string Mock or test receipt wording. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
pdfCreatorKeywords required | array of string Extra PDF producers to treat as an editor, on top of the built-in list. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
velocity required | objectFields
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
duplicateSpike required | object Hourly, for admins, at most three in 24 hours. Off until someone turns it on. Fields
|
ClientCertificateEnforcement
required required | boolean |
edgeConfigured required | boolean Whether this server is set up behind an edge that checks certificates. Without that, it cannot be required. |
activeCertificates required | number |
ReleaseSubscriptionPage
data required | array of ReleaseSubscription |
nextCursor required | string,null Pass as |
ReleaseSubscription
userId required | string |
products required | array of ReleaseProduct Empty means every product. |
addedById required | string,null Who subscribed them, when it was not themselves. |
lastNotifiedAt required | string,null |
createdAt required | string |
ConnectResult
url required | string |
DisconnectResult
revoked required | boolean False when the provider could not confirm. PaperTotal has dropped the tokens either way. |
grantKeptFor | string Another connection still rests on the same grant at the provider, so it was left in place on purpose. |
Mappings
provider required | IntegrationProvider | ||||||||||||||||||||||||||||
slug required | string | ||||||||||||||||||||||||||||
pulledAt required | string,null When the reference data last arrived; null means the first pull has not finished. | ||||||||||||||||||||||||||||
rows required | array of MappingRow | ||||||||||||||||||||||||||||
options required | objectFields
|
SaveMappingsResult
saved required | number |
released required | number Records that were waiting on a mapping and are posting now. |
SyncResult
queued required | number |
alreadyPosted | number Already in the books and left out. Present only when there are some. |
duplicateWarning | string Sent instead of posting: asking again with |
SyncRecord
id required | string |
expenseId required | string |
reference required | string |
merchantName required | string,null |
date required | string |
amountMinor required | number |
currency required | string |
state required | SyncState |
externalType required | string,null |
externalId required | string,null The record in the other system. |
errorCode required | string,null |
message required | string,null |
attempts required | number |
syncedAt required | string,null |
nextAttemptAt required | string,null |
paidAt | string,null |
paidBy | PROVIDER PAPERTOTAL or null |
paymentError | string,null |
resends | number |
Forwarding
address required | string receipts+<token>@..., works from any address. | ||||
alias required | string,null The address a person chose, beside the random one. Both work. | ||||
aliasAddress required | string,null | ||||
acceptsMerchantCc required | boolean Takes receipts a merchant copies to the shared address, addressed to this person. | ||||
sharedAddress required | string receipts@..., works only from a verified address. | ||||
signIn required | objectFields
| ||||
senders required | array of ForwardingSender |
ForwardingSender
id required | string |
email required | string |
verified required | boolean |
createdAt required | string |
ApiKeyCreated
key required | string | ||||||||
clientSecret | string | ||||||||
id required | string | ||||||||
name required | string | ||||||||
prefix required | string The first characters of the key. The rest is not stored. | ||||||||
scopes required | array of string | ||||||||
kind required | WORKSPACE PERSONAL | ||||||||
fullAccess required | boolean Every scope, present and future. | ||||||||
environment required | LIVE TEST | ||||||||
managers required | array of object Named people who may also see, change and revoke this key. Fields
| ||||||||
hasClientSecret required | boolean True once a client secret has been issued, so a signature can be checked. | ||||||||
signingRequired required | boolean A request with no valid signature is refused. | ||||||||
rotatedFromId required | string,null The key this one replaced. | ||||||||
rotatedToId required | string,null The live key that replaced this one. Revoke this one once that is rolled out. | ||||||||
webhook required | object or null This key's own endpoint, which hears about the documents it submits instead of the workspace's endpoints. Fields
| ||||||||
lastUsedAt required | string,null | ||||||||
expiresAt required | string,null | ||||||||
revokedAt required | string,null | ||||||||
createdAt required | string | ||||||||
createdBy required | objectFields
| ||||||||
allowed required | object What the person asking may do beyond seeing it, renaming it, narrowing it and revoking it. Fields
|
ApiKeyPage
data required | array of ApiKey |
nextCursor required | string,null Pass as |
ApiKeyPermissions
scopes required | array of objectFields
| ||||||||||||
presets required | array of objectFields
| ||||||||||||
canMakeWorkspaceKeys required | boolean Whether this person may make a workspace key, or give one full access. |
ApiKey
id required | string | ||||||||
name required | string | ||||||||
prefix required | string The first characters of the key. The rest is not stored. | ||||||||
scopes required | array of string | ||||||||
kind required | WORKSPACE PERSONAL | ||||||||
fullAccess required | boolean Every scope, present and future. | ||||||||
environment required | LIVE TEST | ||||||||
managers required | array of object Named people who may also see, change and revoke this key. Fields
| ||||||||
hasClientSecret required | boolean True once a client secret has been issued, so a signature can be checked. | ||||||||
signingRequired required | boolean A request with no valid signature is refused. | ||||||||
rotatedFromId required | string,null The key this one replaced. | ||||||||
rotatedToId required | string,null The live key that replaced this one. Revoke this one once that is rolled out. | ||||||||
webhook required | object or null This key's own endpoint, which hears about the documents it submits instead of the workspace's endpoints. Fields
| ||||||||
lastUsedAt required | string,null | ||||||||
expiresAt required | string,null | ||||||||
revokedAt required | string,null | ||||||||
createdAt required | string | ||||||||
createdBy required | objectFields
| ||||||||
allowed required | object What the person asking may do beyond seeing it, renaming it, narrowing it and revoking it. Fields
|
ApiKeyClientSecret
clientSecret required | string |
SandboxState
sandbox required | Sandbox or null |
Sandbox
id required | string |
name required | string |
parentId required | string The workspace it belongs to. |
parentName required | string |
documentsUsed required | number Documents it has held, ever. Deleting one does not give it back. |
documentLimit required | number |
createdAt required | string |
OAuthConsent
client required | object
Fields
| ||||||||||
redirectHost required | string Host of the address the answer goes to. Shown as it is, so a person can see where they are sending it. | ||||||||||
localOnly required | boolean Every redirect address on this client is this computer, so anything running here could pose as the app. | ||||||||||
resource required | api mcp | ||||||||||
scopes required | array of OAuthScope | ||||||||||
workspaces required | array of objectFields
|
OAuthRedirect
redirectTo required | string |
OAuthConnectionPage
data required | array of OAuthConnection |
nextCursor required | string,null Pass as |
OAuthClientWithSecret
clientSecret required | string,null |
id required | string |
clientId required | string |
name required | string |
uri required | string,null |
logoUri required | string,null |
redirectUris required | array of string |
scopes required | array of string |
public required | boolean |
secretPrefix required | string,null The first characters of the secret. The rest is not stored. |
enabled required | boolean |
connections required | number |
createdAt required | string |
OAuthClientPage
data required | array of OAuthClient |
nextCursor required | string,null Pass as |
OAuthClient
id required | string |
clientId required | string |
name required | string |
uri required | string,null |
logoUri required | string,null |
redirectUris required | array of string |
scopes required | array of string |
public required | boolean |
secretPrefix required | string,null The first characters of the secret. The rest is not stored. |
enabled required | boolean |
connections required | number |
createdAt required | string |
Inbox
rooms required | array of Room | ||||||
todos required | array of InboxTodo | ||||||
counts required | objectFields
| ||||||
priorityMode required | ChatPriorityMode |
ChatPersonList
data required | array of ChatPerson |
ChatPreference
priorityMode required | ChatPriorityMode |
Room
id required | string |
kind required | ROOM GROUP DIRECT THREAD ASSISTANT |
name required | string |
slug required | string,null |
description required | string,null |
systemKey required | string,null |
imageUrl required | string,null |
visibility required | RoomVisibility |
posting required | RoomPosting |
expenseId required | string,null |
reportId required | string,null |
memberCount required | number |
joined required | boolean |
canPost required | boolean |
postRefusal required | string,null Why this person cannot post here, as they should read it, or null when they can. |
canManage required | boolean |
peer required | ChatPerson or null Who else is in a direct chat. |
pinned required | boolean |
unread required | number |
firstUnreadId required | string,null The first message past what this person has read, where the New line goes. |
lastMessageAt required | string,null |
lastMessage required | string,null |
MessageFlagList
data required | array of MessageFlag |
RoomList
data required | array of objectFields
|
RoomMemberList
data required | array of RoomMember |
RoomInvite
url required | string Shown once. It opens the room to members of this workspace and to nobody else. |
code required | string |
expiresAt required | string |
MessagePage
data required | array of Message |
nextCursor required | string,null Pass as |
PostedMessage
unreachable required | array of ChatPerson Members the message named who cannot read this room, so were not mentioned or told. | ||||||||||
id required | string | ||||||||||
roomId required | string | ||||||||||
kind required | SYSTEM TEXT ASSISTANT TASK | ||||||||||
body required | string | ||||||||||
author required | ChatPerson or null | ||||||||||
mentions required | array of ChatPerson | ||||||||||
rooms required | array of object #rooms the text names that this reader can open. Fields
| ||||||||||
attachments required | array of objectFields
| ||||||||||
parentId required | string,null | ||||||||||
replyCount required | number | ||||||||||
lastReplyAt required | string,null | ||||||||||
whisper required | boolean Seen only by the person who asked. | ||||||||||
chart required | Chart or null | ||||||||||
followUps required | array of string | ||||||||||
runId required | string,null | ||||||||||
task required | Task or null | ||||||||||
action required | PendingAction or null | ||||||||||
editedAt required | string,null | ||||||||||
deleted required | boolean | ||||||||||
hidden required | boolean | ||||||||||
canEdit required | boolean Reserved for the people who may act on it, so a client never offers what the API would refuse. | ||||||||||
canDelete required | boolean | ||||||||||
canModerate required | boolean | ||||||||||
createdAt required | string |
Message
id required | string | ||||||||||
roomId required | string | ||||||||||
kind required | SYSTEM TEXT ASSISTANT TASK | ||||||||||
body required | string | ||||||||||
author required | ChatPerson or null | ||||||||||
mentions required | array of ChatPerson | ||||||||||
rooms required | array of object #rooms the text names that this reader can open. Fields
| ||||||||||
attachments required | array of objectFields
| ||||||||||
parentId required | string,null | ||||||||||
replyCount required | number | ||||||||||
lastReplyAt required | string,null | ||||||||||
whisper required | boolean Seen only by the person who asked. | ||||||||||
chart required | Chart or null | ||||||||||
followUps required | array of string | ||||||||||
runId required | string,null | ||||||||||
task required | Task or null | ||||||||||
action required | PendingAction or null | ||||||||||
editedAt required | string,null | ||||||||||
deleted required | boolean | ||||||||||
hidden required | boolean | ||||||||||
canEdit required | boolean Reserved for the people who may act on it, so a client never offers what the API would refuse. | ||||||||||
canDelete required | boolean | ||||||||||
canModerate required | boolean | ||||||||||
createdAt required | string |
MessageFlagged
flagged required | boolean |
TaskList
data required | array of Task |
Task
id required | string |
roomId required | string |
messageId required | string |
title required | string |
description required | string,null |
assignee required | ChatPerson |
createdBy required | ChatPerson |
status required | OPEN DONE |
completedAt required | string,null |
canChange required | boolean What the person asking may do. Clients draw from these. |
createdAt required | string |
SearchResults
query required | string |
tookMs required | number |
groups required | array of SearchGroup Only the kinds with a hit, in |
summary required | SearchSummary or null Set when the search asks for |
NotificationPage
unread required | number |
data required | array of Notification |
nextCursor required | string,null |
UpdatedCount
updated required | number |
Notification
id required | string |
type required | string |
title required | string |
body required | string,null |
href required | string,null Where in the app it leads, when it leads anywhere. |
read required | boolean |
createdAt required | string |
NotificationPreferenceList
array of NotificationPreference
ExpenseVendor
vendor required | object or nullFields
| ||||
source required | MANUAL RULE or nullRULE when a merchant rule set it, MANUAL when an admin picked it. | ||||
options required | array of objectFields
| ||||
provider required | string,null The books this reads from, or null with nothing connected. |
ExportSettings
provider required | IntegrationProvider | ||||||||||||||||||||||||||||||||||||||||||||||
slug required | string | ||||||||||||||||||||||||||||||||||||||||||||||
settings required | objectFields
| ||||||||||||||||||||||||||||||||||||||||||||||
capabilities required | ExportCapabilities | ||||||||||||||||||||||||||||||||||||||||||||||
exporters required | array of MemberChoice People who may be the preferred exporter. | ||||||||||||||||||||||||||||||||||||||||||||||
vendors required | array of objectFields
| ||||||||||||||||||||||||||||||||||||||||||||||
payableAccounts required | array of objectFields
| ||||||||||||||||||||||||||||||||||||||||||||||
paymentAccounts required | array of objectFields
| ||||||||||||||||||||||||||||||||||||||||||||||
taxEnabled required | boolean | ||||||||||||||||||||||||||||||||||||||||||||||
multiCurrency required | boolean | ||||||||||||||||||||||||||||||||||||||||||||||
paused required | PostingPause or null Set while a failure holds automatic posting. |
Import
provider required | IntegrationProvider | ||||||||||||||||||||||
slug required | string | ||||||||||||||||||||||
settings required | objectFields
| ||||||||||||||||||||||
dimensions required | array of ImportDimension | ||||||||||||||||||||||
accounts required | number | ||||||||||||||||||||||
items required | number | ||||||||||||||||||||||
taxes required | number | ||||||||||||||||||||||
taxRates required | array of objectFields
| ||||||||||||||||||||||
offersExpenseClaims required | boolean Xero alone marks accounts for expense claims. | ||||||||||||||||||||||
offersRebill required | boolean Customers can stand behind billable expenses as tags. | ||||||||||||||||||||||
offersCustomLists required | boolean NetSuite: custom lists and intercompany have a place. | ||||||||||||||||||||||
employees required | number People in the books with an address, who could be invited. | ||||||||||||||||||||||
pulledAt required | string,null | ||||||||||||||||||||||
last required | ImportSummary or null |
InviteEmployeesResult
invited required | number | ||||
skipped required | array of object Already here, already invited, or no seat left, each with the reason. Fields
|
Review
provider required | IntegrationProvider | ||||
slug required | string | ||||
name required | string | ||||
checksGst required | boolean Xero organisations file GST, so its review page checks it. | ||||
categories required | array of objectFields
| ||||
rows required | array of ReviewRow |
VendorList
provider required | IntegrationProvider | ||||||
slug required | string | ||||||
name required | string | ||||||
accounts required | array of object What a vendor rule can point at. Fields
| ||||||
vendors required | array of Vendor | ||||||
truncated required | boolean The list is longer than one page holds, so search narrows it. |
Vendor
id required | string |
externalId required | string |
name required | string |
email required | string,null |
active required | boolean The provider still lists it. |
enabled required | boolean A person left it switched on here. |
receipts required | number Expenses in this workspace that name it or its merchant. |
accountId required | string,null The account its receipts post to, when a person saved a rule for it. |
VendorAccount
accountId required | string,null |
GmailScan
mailbox required | string,null |
messagesSeen required | number Mail read since connecting. |
messagesFiled required | number How many of those became a document. |
scanningSince required | string,null Mail received from here on is read. Null until the first scan has marked its place. |
lastScanAt required | string,null |
scansUsedUp required | boolean The month's scans ran out. Scanning picks up from the same place when they come back. |
pausedUntil required | string,null Gmail asked PaperTotal to wait until then. |
SlackSettings
channels required | array of SlackChannel |
channelsTruncated required | boolean The workspace has more channels than one list can hold. |
channelId required | string,null |
channelName required | string,null |
receipts required | SlackReceipts |
approvalsReady required | boolean The server can verify a click. Without this, a button in Slack shows an error. |
StorageStatus
provider required | IntegrationProvider | ||||||||||
slug required | string | ||||||||||
name required | string | ||||||||||
account required | string,null | ||||||||||
backup required | objectFields
| ||||||||||
exports required | StorageFeature | ||||||||||
intake required | StorageIntake | ||||||||||
lastSyncedAt required | string,null |
DesktopSetup
password required | string,null |
userName required | string |
qwc required | string The file a person opens in the Web Connector. It holds no password. |
companyFile required | string,null |
lastRunAt required | string,null |
IifImport
accounts required | number | ||||
customers required | number | ||||
vendors required | number | ||||
items required | number | ||||
classes required | number | ||||
errors required | array of object Lines that could not be read. The rest came in. Fields
|
TravelProfile
legalFirstName required | string,null | ||||||||||||
legalMiddleName required | string,null | ||||||||||||
legalLastName required | string,null | ||||||||||||
birthDate required | string,null | ||||||||||||
gender required | string,null | ||||||||||||
phone required | string,null | ||||||||||||
homeAddress required | object or nullFields
| ||||||||||||
workAddress required | object or nullFields
| ||||||||||||
emergencyName required | string,null | ||||||||||||
emergencyRelationship required | string,null | ||||||||||||
emergencyPhone required | string,null | ||||||||||||
emergencyEmail required | string,null | ||||||||||||
documents required | array of objectFields
|
ReusableConnectorList
array of object
connectionId required | string |
workspaceName required | string |
companyFile required | string,null |
AgentList
data required | array of Agent |
AgentTemplateList
array of AgentTemplate
Agent
id required | string | ||||||
userId required | string | ||||||
kind required | PERSONAL RULEBOT | ||||||
name required | string | ||||||
description required | string,null | ||||||
instructions required | string | ||||||
templateKey required | string,null | ||||||
grants required | array of objectFields
| ||||||
owner required | objectFields
| ||||||
workspaces required | array of objectFields
| ||||||
waitingReports required | number Reports waiting on this agent right now. Deleting it is refused while this is above zero. | ||||||
roomId required | string,null | ||||||
createdAt required | string |
AgentDraft
reply required | string |
instructions required | string |
behaviour required | string How it would behave, in plain words, so the person knows before they save. |
AgentBulkDeleteResult
closed required | array of string | ||||
failed required | array of objectFields
|
AgentActivityList
data required | array of AgentActivity |
AgentRule
id required | string | ||||||||||||||||||||
title required | string | ||||||||||||||||||||
prompt required | string | ||||||||||||||||||||
role required | AgentRuleRole Whether it only observes or may also decide a report. | ||||||||||||||||||||
plan required | objectFields
| ||||||||||||||||||||
enabled required | boolean | ||||||||||||||||||||
matchCount required | number | ||||||||||||||||||||
templateKey required | string,null | ||||||||||||||||||||
approvedBy required | object or nullFields
| ||||||||||||||||||||
approvedAt required | string |
ReportMoved
id required | string |
workspaceId required | string |
reference required | string Its reference there. Numbers are each workspace's own. |
AgentInbox
rooms required | array of objectFields
| ||||||||||||
waitingReports required | array of object Reports waiting on it to approve. Fields
| ||||||||||||
waitingCards required | array of object What it proposed and is waiting on its owner to confirm. Fields
|
ReportExplain
status required | string | ||||||||||
decisions required | array of objectFields
|
AgentScheduleList
data required | array of AgentSchedule |
AgentSchedule
id required | string |
agentId required | string |
title required | string |
instruction required | string |
cadence required | string |
nextRunAt required | string |
lastRunAt required | string,null |
enabled required | boolean |
AgentRuleList
data required | array of objectFields
|
SuggestedAgentRuleList
array of SuggestedAgentRule
AgentRuleDescribed
title required | string | ||||||||||||||||||||
plan required | object or null Null when the words could not become something code can enforce. Fields
| ||||||||||||||||||||
problem required | string,null | ||||||||||||||||||||
words required | array of string |
AssistantStatus
configured required | boolean False until ANTHROPIC_API_KEY is set. The app says so plainly and everything else keeps working. |
message required | string,null |
AssistantRoom
roomId required | string |
AssistantAsk
roomId required | string |
runId required | string |
PendingAction
id required | string |
status required | EXPIRED FAILED PROPOSED EXECUTED DECLINED |
summary required | string What it will do, written by code from the record, never the model's words. |
tainted required | boolean Something a person other than the asker wrote reached the assistant first. Read it before confirming. |
error required | string,null |
mine required | boolean |
expiresAt required | string |
ExplainRun
id required | string | ||||||
trigger required | ASK EVENT SCHEDULE | ||||||
status required | string | ||||||
question required | string,null | ||||||
answer required | string,null | ||||||
reasoning required | string,null | ||||||
tainted required | boolean | ||||||
rule required | object or null The rule it followed, and what that rule said. Fields
| ||||||
calls required | array of ExplainCall What it read and what it did, in order. | ||||||
basis required | any The facts the decision rested on. | ||||||
createdAt required | string |
ExpenseExplanation
category required | object or nullFields
| ||||||||||
decisions required | array of objectFields
|
InsightAnswer
question required | string |
title required | string |
summary required | string Plain English, worked out from the figures below. |
from required | string |
to required | string |
currency required | string |
totalMinor required | number |
documents required | number Documents the figures cover. |
capped required | boolean True when more than 10,000 matched and the period was shortened to the latest 10,000. |
chart required | Chart |
filters required | map of string The filters behind the figures, to save through /v1/saved-searches. |
DocumentUsage
period required | string | ||||||||||
types required | array of objectFields
| ||||||||||
totals required | DocumentCounts | ||||||||||
scope required | workspace mineEveryone's documents, or only the caller's own: a member sees what they can open. |
ProcessingReport
from required | string | ||||||||||||
to required | string | ||||||||||||
scope required | workspace mine | ||||||||||||
documents required | number | ||||||||||||
reading required | object How long the reader took, for documents it timed. Fields
| ||||||||||||
turnaround required | DurationSummary From upload to a result a person can see, for every document that has one. | ||||||||||||
fileTypes required | array of objectFields
| ||||||||||||
sources required | array of objectFields
| ||||||||||||
averageSizeBytes required | number,null | ||||||||||||
averagePages required | number,null |
ChatEvent
object or object or object or object or object or object
type required | message.created message.updated message.deleted | ||||
workspaceId required | string | ||||
roomId required | string | ||||
messageId required | string | ||||
parentId | string,null | ||||
subject | objectFields
|
McpResponse
OAuthProtocolError
error required | string The code from the RFC, such as invalid_grant. |
error_description required | string Written for a person. |
OAuthToken
access_token required | string Starts pta_. Send it as |
token_type required | Bearer |
expires_in required | number Seconds. |
refresh_token required | string Starts ptr_. |
scope required | string What the token holds, separated by spaces. |
OAuthRegisteredClient
client_id required | string |
client_id_issued_at required | number Unix seconds. |
client_secret | string Only for a client that said it can keep one, and only in this response. |
client_secret_expires_at | number 0: it does not expire. |
client_name required | string |
redirect_uris required | array of string |
grant_types required | array of string |
response_types required | array of string |
token_endpoint_auth_method required | string |
application_type | web native |
client_uri | string |
logo_uri | string |
scope | string |
OAuthServerMetadata
issuer required | string |
authorization_endpoint required | string |
token_endpoint required | string |
revocation_endpoint required | string |
registration_endpoint required | string |
service_documentation required | string |
scopes_supported required | array of string |
response_types_supported required | array of string |
response_modes_supported required | array of string |
grant_types_supported required | array of string |
token_endpoint_auth_methods_supported required | array of string |
revocation_endpoint_auth_methods_supported required | array of string |
code_challenge_methods_supported required | array of string |
client_id_metadata_document_supported required | boolean |
authorization_response_iss_parameter_supported required | boolean |
OAuthProtectedResource
resource required | string |
authorization_servers required | array of string |
scopes_supported required | array of string |
bearer_methods_supported required | array of string |
resource_name required | string |
resource_documentation required | string |
resource_metadata | string |
Blueprint
id required | string | ||||||||||||||||||
name required | string What blueprint_name takes. | ||||||||||||||||||
title required | string | ||||||||||||||||||
description required | string,null | ||||||||||||||||||
documentType required | DocumentType | ||||||||||||||||||
builtIn required | boolean Ships with PaperTotal, and can be used and not changed. | ||||||||||||||||||
version required | number Changing a blueprint adds a version, and results keep the one that made them. | ||||||||||||||||||
schema required | objectFields
| ||||||||||||||||||
fields required | array of objectFields
| ||||||||||||||||||
createdAt required | string,null | ||||||||||||||||||
updatedAt required | string,null |
BlueprintList
data required | array of BlueprintSummary |
nextCursor required | null |
BlueprintDraft
documentId required | string | ||||||||||||||||||||||||||||||||||||
status required | READING READY FAILED | ||||||||||||||||||||||||||||||||||||
draft required | object or null A starting point. Nothing is saved until it is sent to POST /v1/blueprints. Fields
| ||||||||||||||||||||||||||||||||||||
error required | string,null |
Classification
id required | string | ||||
status required | DocumentStatus | ||||
document_type required | object or null Null until it has been read. Fields
| ||||
engine required | rules claude or null | ||||
scores required | array of object The runners-up, best first. Fields
|
Extraction
id required | string | ||||
status required | DocumentStatus | ||||
document_type required | object or null Null until it has been read. Fields
| ||||
engine required | rules claude or null | ||||
scores required | array of object The runners-up, best first. Fields
| ||||
extraction required | map of any or null | ||||
extraction_error required | string,null | ||||
document required | Document |
DocumentSet
id required | string | ||||||||||
kind required | ZIP BATCH SPLIT DOCUMENTS W2 BANK_STATEMENT PARSE | ||||||||||
status required | QUEUED PROCESSING COMPLETED FAILED | ||||||||||
originalFilename required | string,null | ||||||||||
pageCount required | number | ||||||||||
ranges required | array of object Pages found, 1-based and inclusive, with a type and score when classified. Fields
| ||||||||||
refused required | array of objectFields
| ||||||||||
error required | string,null | ||||||||||
documents required | array of objectFields
| ||||||||||
createdAt required | string | ||||||||||
completedAt required | string,null |
DocumentSetPage
data required | array of DocumentSet |
nextCursor required | string,null Pass as |
ParsedDocument
id required | string | ||||||||||||||||
status required | DocumentStatus | ||||||||||||||||
markdown required | string,null | ||||||||||||||||
meta required | object or nullFields
| ||||||||||||||||
tags required | array of string | ||||||||||||||||
title required | string,null | ||||||||||||||||
notes required | string,null | ||||||||||||||||
externalId required | string,null | ||||||||||||||||
setId required | string,null | ||||||||||||||||
createdAt required | string | ||||||||||||||||
boxes | array of object With details: every recognized line and where it sits. Fields
|
ParsedDocumentPage
data required | array of ParsedDocument |
nextCursor required | string,null Pass as |
DocumentUpload
id required | string | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
type | DocumentType | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
source | DocumentSource | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
status required | string | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
originalFilename | string,null | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
mimeType | string | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
sizeBytes | number | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
pageCount | number | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
externalId | string,null | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
folderId | string,null | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
expenseId | string,null | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
mailInBatchId | string,null | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
title | string,null | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
notes | string,null | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
latitude | number,null Where the device said it was when the photo was taken. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
longitude | number,null | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
locationAccuracyM | number,null | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
duplicateOfId | string,null | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
processingError | string,null | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
processingErrorCode | FILE_ENCRYPTED or nullSet when the failure is one the file's owner can fix. processingError says what to do. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
verification | string | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
capturedAt | string,null | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
processedAt | string,null | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
viewedAt | string,null | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
archivedAt | string,null | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
createdAt | string | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
uploadedBy | object or nullFields
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
pages | array of objectFields
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
classification | object or null What the classifier decided, when it was asked. Fields
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
blueprint | object or null The blueprint this was read with, and what came out of it. Fields
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
tags | array of string | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
tagRefs | array of object The same tags with their ids, which a tag route takes. Fields
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
recordStatus | processed reviewed archived or nullWhere a read document stands: reviewedAt and archivedAt in one word. Null until it has been read. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
duplicates | array of object Near copies past the workspace threshold, best first. Fields
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
setId | string,null The upload this came out of: a ZIP, a split PDF or a batch of addresses. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
customFields | map of string or array of string or null Values the workspace custom field rules read out of the text. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
enrichment | object or null Work still running after the first answer. Fields
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
extraction | object or nullFields
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
fraud | DocumentFraud or null | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
sealed | array of SealedValue Bank and tax numbers read from this document, as masks. POST /v1/documents/{id}/reveal opens them. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
updatedAt | string | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
extractor | string,null What read it: rules, claude, a blueprint, business-card, or none. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
ocrText | string,null Everything read off the page. Card, bank and tax numbers are masked. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
pdfUrl | string,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 | DocumentMeta | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
reviewedAt | string,null A person checked what was read. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
approvedAt | string,null A developer's own approved flag. An expense's approval is a different thing. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
object | document_setSet on the answer to a ZIP, which holds kind, documentIds and refused instead of a document. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
kind | string | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
documentIds | array of string | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
refused | array of objectFields
|
InboundEmailPage
data required | array of InboundEmail |
nextCursor required | string,null Pass as |
ExpenseDuplicateGroup
data required | array of ExpenseDetail |
hidden required | number Copies in the group the caller cannot read. |
Workflow
id required | string | ||||||||||||||||||||||
name required | string | ||||||||||||||||||||||
enabled required | boolean | ||||||||||||||||||||||
version required | number,null The version that runs. Null until it has been turned on once. | ||||||||||||||||||||||
steps required | number | ||||||||||||||||||||||
lastRunAt required | string,null | ||||||||||||||||||||||
lastRunStatus required | RUNNING PAUSED COMPLETED FAILED CANCELLED or null | ||||||||||||||||||||||
createdAt required | string | ||||||||||||||||||||||
updatedAt required | string | ||||||||||||||||||||||
graph required | objectFields
| ||||||||||||||||||||||
edited required | boolean What is on the canvas differs from the version that runs. | ||||||||||||||||||||||
triggers required | array of WorkflowTrigger | ||||||||||||||||||||||
enabledAt required | string,null |
WorkflowPage
data required | array of WorkflowSummary |
nextCursor required | string,null Pass as |
WorkflowValidation
ok required | boolean |
issues required | array of WorkflowIssue Any of these stops it being turned on. |
warnings required | array of WorkflowIssue None of these stops it. A person should know before it runs. |
WorkflowRun
id required | string |
workflowId required | string |
version required | number |
status required | RUNNING PAUSED COMPLETED FAILED CANCELLED |
trigger required | API MANUAL SCHEDULE GMAIL GOOGLE_DRIVE DROPBOX EMAIL |
startNodeId required | string |
documents required | number |
error required | string,null |
createdAt required | string |
finishedAt required | string,null |
steps required | array of WorkflowStep |
WorkflowRunSummary
id required | string |
workflowId required | string |
version required | number |
status required | RUNNING PAUSED COMPLETED FAILED CANCELLED |
trigger required | API MANUAL SCHEDULE GMAIL GOOGLE_DRIVE DROPBOX EMAIL |
startNodeId required | string |
documents required | number |
error required | string,null |
createdAt required | string |
finishedAt required | string,null |
WorkflowRunPage
data required | array of WorkflowRunSummary |
nextCursor required | string,null Pass as |
WorkflowApprovalLink
workflow required | string | ||||||
workspace required | string | ||||||
decision required | approve rejectWhat this link was sent to do. Nothing happens until it is posted back. | ||||||
otherToken required | string | ||||||
email required | string | ||||||
message required | string,null | ||||||
state required | OPEN ANSWERED CLOSED | ||||||
answered required | object or nullFields
| ||||||
expiresAt required | string | ||||||
documents required | array of WorkflowApprovalDocument | ||||||
files required | array of string |
WorkflowApprovalAnswer
applied required | boolean False when someone had already answered, or the run has moved on. Nothing changed then. |
decision required | approve reject or null |
state required | ANSWERED CLOSED |
Error
error required | objectFields
|
Attachment
id required | string |
filename required | string |
contentType required | string |
sizeBytes required | integer |
url required | string A signed link that lasts 15 minutes. |
UploadTicket
uploadId required | string |
method required | PUT |
url required | string Send exactly sizeBytes bytes here, with these headers. It goes straight to storage. |
headers required | map of string The signature covers these, so send them exactly. |
expiresAt required | string When the URL stops working. If a PUT fails, ask for a new ticket and try once more. |
AnalyticsSummary
totalMinor required | number | ||||||
count required | number | ||||||
averageMinor required | number | ||||||
unconverted required | number Expenses with no exchange rate yet. They are not in these totals. | ||||||
reimbursableMinor required | number | ||||||
billableMinor required | number | ||||||
previous required | objectFields
| ||||||
changePct required | number,null | ||||||
from required | string | ||||||
to required | string | ||||||
previousFrom required | string | ||||||
previousTo required | string | ||||||
currency required | string Every amount here is in this currency: the workspace's base, or the one | ||||||
convertedFrom required | string,null Set when |
Breakdown
dimension required | merchant category project member tag department | ||||||
totalMinor required | number | ||||||
previousTotalMinor required | number | ||||||
averageMinor required | number What one row spends on average in this period, over every row and not only those within | ||||||
rows required | array of BreakdownRow | ||||||
other required | object or null Everything past Fields
| ||||||
overlapping required | boolean True for tags: one expense can carry several, so rows can add up to more than the total. | ||||||
from required | string | ||||||
to required | string | ||||||
previousFrom required | string | ||||||
previousTo required | string | ||||||
currency required | string Every amount here is in this currency: the workspace's base, or the one | ||||||
convertedFrom required | string,null Set when |
Trend
interval required | TrendInterval |
points required | array of TrendPoint |
totalMinor required | number |
count required | number |
averageMinor required | number What one point spends on average. For a running total, what each step adds on average. |
from required | string |
to required | string |
previousFrom required | string |
previousTo required | string |
currency required | string Every amount here is in this currency: the workspace's base, or the one |
convertedFrom required | string,null Set when |
Budget
id required | string |
scope required | BudgetScope |
targetId required | string |
targetName required | string |
period required | BillingInterval |
periodKey required | string 2026-03 for a month, 2026 for a fiscal year. |
periodStart required | string |
periodEnd required | string |
currency required | string |
totalMinor required | number,null |
perMemberMinor required | number,null |
thresholds required | array of number |
total required | BudgetStanding or null Everyone together. Null when the budget has no shared limit. |
mine required | BudgetStanding or null The caller's own share. Null when they have no limit of their own here. |
BudgetPage
data required | array of Budget |
nextCursor required | string,null Pass as |
BulkDocumentResult
updated required | number |
skipped required | number Not found, not the caller's to change, or backing an expense on a submitted report. |
nextCursor | string,null With a filter: send this back as cursor until it is null. |
DocumentCount
count required | number |
TrashActionResult
updated required | number |
skipped required | number |
more required | boolean With all: there is more to do. Call again. |
TrashedDocumentPage
data required | array of TrashedDocument |
nextCursor required | string,null Pass as |
BulkExpenseResult
updated required | number |
skipped required | number |
BulkReportResult
succeeded required | array of string | ||||||||
failed required | array of objectFields
|
CatalogImportResult
created required | number | ||||
updated required | number | ||||
skipped required | number Rows that matched an existing record and changed nothing, or repeated an earlier row. | ||||
errors required | array of object Rows that could not be used. Fields
| ||||
removed | number A replace: categories the file left out and nothing used, now deleted. | ||||
disabled | number A replace: categories the file left out that something still uses, now turned off. |
Category
id required | string |
parentId required | string,null |
name required | string |
glCode required | string,null |
taxLine required | string,null |
origin required | SYSTEM CUSTOM ACCOUNTINGWhere it came from: the workspace template, a person, or an import from the connected books. |
deductiblePct required | number |
headerOnly required | boolean A heading over its subcategories. It groups the list and cannot be chosen on an expense. |
enabled required | boolean |
system required | boolean |
position required | number |
expenseCount required | number A category on any expense cannot be deleted, only disabled. |
type required | CategoryType |
payrollCode required | string,null Null unless the caller manages settings or exports: payroll codes are not for everyone. |
descriptionHint required | string,null Shown under the description while someone fills in an expense. |
approverId required | string,null Sees any report carrying this category before the usual approvers. |
approverName required | string,null |
commentRequired required | boolean An expense here needs a description, or it carries a finding on its report. |
maxExpenseMinor required | number,null An expense here over this, in the workspace's currency, carries a finding on its report. |
CategoryPage
data required | array of Category |
nextCursor required | string,null Pass as |
Comment
id required | string |
body required | string |
attachments required | array of Attachment |
editedAt required | string,null |
author required | ReportPerson |
system | boolean PaperTotal wrote this, about something that happened to the report. |
actedBy required | ReportPerson or null The delegate who really wrote it, when that was not the author. |
mentions required | array of ReportPerson |
createdAt required | string |
CommentPage
data required | array of Comment |
nextCursor required | string,null Pass as |
CreatedId
id required | string |
PostedComment
id required | string |
body required | string |
attachments required | array of Attachment |
editedAt required | string,null |
author required | ReportPerson |
system | boolean PaperTotal wrote this, about something that happened to the report. |
actedBy required | ReportPerson or null The delegate who really wrote it, when that was not the author. |
mentions required | array of ReportPerson |
createdAt required | string |
unreachable required | array of ReportPerson Members the comment named who cannot read this, so were not mentioned or told. |
MentionablePeople
data required | array of ReportPerson |
Contact
id required | string |
name required | string Always something to show: the name, else the company, else the first address or number. |
firstName required | string,null |
lastName required | string,null |
company required | string,null |
title required | string,null |
emails required | array of string |
phones required | array of string |
mobile required | string,null |
fax required | string,null |
website required | string,null |
address required | string,null |
city required | string,null |
region required | string,null |
postalCode required | string,null |
country required | string,null |
notes required | string,null |
editedFields required | array of string Fields a person changed, which reading the card again leaves alone. |
documentId required | string,null |
logoUrl required | string,null The logo cut from the card, signed for 15 minutes. It stays when the card is deleted. |
faxes required | array of string Every fax number on the card, the first being fax. |
cardImageUrl required | string,null |
thumbnailUrl required | string,null |
createdAt required | string |
updatedAt required | string |
ContactPage
data required | array of Contact |
nextCursor required | string,null Pass as |
CustomField
id required | string |
key required | string |
label required | string |
type required | TEXT NUMBER DATE SELECT BOOLEAN |
options required | array of string |
required required | boolean |
position required | number |
CustomFieldPage
data required | array of CustomField |
nextCursor required | string,null Pass as |
DeviceBlock
id required | string |
deviceId required | string |
reason required | string,null |
createdAt required | string |
DeviceBlockPage
data required | array of DeviceBlock |
nextCursor required | string,null Pass as |
DeviceBlockStatus
deviceId required | string |
blocked required | boolean |
block required | DeviceBlock or null |
MyDeviceStatus
deviceId required | string |
blocked required | boolean |
Document
id required | string | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
type required | DocumentType | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
source required | DocumentSource | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
status required | DocumentStatus | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
originalFilename required | string,null | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
mimeType required | string | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
sizeBytes required | number | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
pageCount required | number | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
externalId required | string,null | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
folderId required | string,null | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
expenseId required | string,null | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
mailInBatchId required | string,null | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
title required | string,null | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
notes required | string,null | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
latitude required | number,null Where the device said it was when the photo was taken. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
longitude required | number,null | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
locationAccuracyM required | number,null | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
duplicateOfId required | string,null | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
processingError required | string,null | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
processingErrorCode required | FILE_ENCRYPTED or nullSet when the failure is one the file's owner can fix. processingError says what to do. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
verification required | string | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
capturedAt required | string,null | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
processedAt required | string,null | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
viewedAt required | string,null | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
archivedAt required | string,null | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
createdAt required | string | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
uploadedBy required | object or nullFields
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
pages required | array of objectFields
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
classification required | object or null What the classifier decided, when it was asked. Fields
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
blueprint required | object or null The blueprint this was read with, and what came out of it. Fields
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
tags required | array of string | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
tagRefs required | array of object The same tags with their ids, which a tag route takes. Fields
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
recordStatus required | processed reviewed archived or nullWhere a read document stands: reviewedAt and archivedAt in one word. Null until it has been read. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
duplicates required | array of object Near copies past the workspace threshold, best first. Fields
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
setId required | string,null The upload this came out of: a ZIP, a split PDF or a batch of addresses. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
customFields required | map of string or array of string or null Values the workspace custom field rules read out of the text. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
enrichment required | object or null Work still running after the first answer. Fields
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
extraction required | object or nullFields
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
fraud required | DocumentFraud or null | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
sealed required | array of SealedValue Bank and tax numbers read from this document, as masks. POST /v1/documents/{id}/reveal opens them. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
updatedAt required | string | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
extractor required | string,null What read it: rules, claude, a blueprint, business-card, or none. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
ocrText required | string,null Everything read off the page. Card, bank and tax numbers are masked. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
pdfUrl required | string,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 required | DocumentMeta | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
reviewedAt required | string,null A person checked what was read. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
approvedAt required | string,null A developer's own approved flag. An expense's approval is a different thing. |
DocumentOriginal
url required | string Signed for 15 minutes. Opening it downloads the file as uploaded. |
filename required | string |
mimeType required | string |
RevealedDocument
documentId required | string | ||||||||||||
values required | array of objectFields
| ||||||||||||
original required | object or nullFields
| ||||||||||||
pages required | array of objectFields
|
CheckWithDocument
check required | Document |
document required | Document |
DocumentText
text required | string,null Everything recognized on the document. Card numbers are already masked. |
language required | string,null |
DownloadableFile
filename required | string |
contentType required | string |
content required | string |
ExpenseDetail
id required | string | ||||||||
number required | number | ||||||||
reference required | string | ||||||||
status required | ExpenseStatus | ||||||||
kind required | ExpenseKind | ||||||||
merchantName required | string,null | ||||||||
tripTitle required | string,null For a trip, what to call it in a list. | ||||||||
description required | string,null | ||||||||
date required | string | ||||||||
currency required | string | ||||||||
amountMinor required | number | ||||||||
baseAmountMinor required | number | ||||||||
taxMinor required | number,null | ||||||||
category required | object or nullFields
| ||||||||
alsoCategories required | array of object Further categories it can be found under. Its money stays in category. Fields
| ||||||||
project required | object or nullFields
| ||||||||
client required | object or nullFields
| ||||||||
owner required | objectFields
| ||||||||
moneyFlow required | IN OUTWhich way the money went. | ||||||||
invoiceNumber required | string,null | ||||||||
matched required | boolean A card charge has been matched to it. | ||||||||
connectedApps required | array of string Connected services it has been posted to. | ||||||||
reportId required | string,null | ||||||||
externalId required | string,null A developer's own reference, exactly as sent. | ||||||||
billable required | boolean | ||||||||
reimbursable required | boolean | ||||||||
paymentType required | PaymentType or null | ||||||||
confidence required | number,null | ||||||||
flags required | array of ExpenseFlag | ||||||||
reviewFields required | array of string | ||||||||
thumbnailUrl required | string,null | ||||||||
documentId required | string,null | ||||||||
tags required | array of objectFields
| ||||||||
attendeeCount required | number | ||||||||
fxRate required | number 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 required | boolean Held back from its report until someone releases it. | ||||||||
createdAt required | string | ||||||||
updatedAt required | string | ||||||||
notes required | string,null | ||||||||
subtotalMinor required | number,null | ||||||||
tipMinor required | number,null | ||||||||
discountMinor required | number,null | ||||||||
shippingMinor required | number,null | ||||||||
paymentAccountId required | string,null | ||||||||
cardLast4 required | string,null | ||||||||
poNumber required | string,null The buyer's purchase order number, as an invoice prints it. | ||||||||
dueDate required | string,null When an invoice falls due. | ||||||||
mcc required | string,null The merchant category code a card network gave the merchant, four digits. | ||||||||
taxDeductible required | boolean | ||||||||
quantity required | number,null | ||||||||
rateMinor required | number,null | ||||||||
unit required | string,null | ||||||||
trip required | map of any or null | ||||||||
vehicleId required | string,null | ||||||||
attendees required | array of objectFields
| ||||||||
customFields required | map of any | ||||||||
editedFields required | array of string | ||||||||
duplicateOfId required | string,null | ||||||||
duplicateReview required | object or null What the second look at a flagged copy decided, and why. Fields
| ||||||||
canSettleDuplicate required | boolean Whether the caller can answer the duplicate question on this expense. | ||||||||
splitParentId required | string,null | ||||||||
access required | ExpenseAccess What the caller may do with it. | ||||||||
splitInto required | array of object This expense was divided: its parts now count in its place. Fields
| ||||||||
mergedIntoId required | string,null A merge absorbed this expense. Where it went. | ||||||||
report required | object or null The report this expense is on, named even where the caller could not list it. Fields
| ||||||||
lines required | array of ExpenseLine | ||||||||
documentIds required | array of string |
ExpensePage
data required | array of ExpenseSummary |
nextCursor required | string,null Pass as |
ExpenseTotals
count required | number |
moneyOutMinor required | number Money out, in the base currency. |
moneyInMinor required | number Money in, in the base currency: income, refunds and credits, as a positive figure. |
baseAmountMinor required | number In the workspace's base currency. A credit or a refund is negative, so it brings this down. |
currency required | string |
unconverted required | number Counted, but with no exchange rate yet, so they add nothing to the amount. |
totalMinor required | number
|
totalCurrency required | string |
convertedFrom required | string,null Set when |
ExportJob
id required | string | ||||||
kind required | ExportKind | ||||||
format required | ExportFormat | ||||||
status required | EXPIRED FAILED COMPLETED QUEUED RUNNING | ||||||
filters required | ExportFilters | ||||||
filename required | string,null | ||||||
rowCount required | number,null | ||||||
error required | string,null Why it failed, written for a person. | ||||||
notes required | array of string What a finished file left out, such as credits a bill import cannot take. | ||||||
requestedBy required | objectFields
| ||||||
onFinish required | ExportFinish or null How the actions the export asked for went. Null when it asked for none. | ||||||
createdAt required | string | ||||||
completedAt required | string,null | ||||||
expiresAt required | string,null | ||||||
downloadUrl required | string,null Signed, valid for 15 minutes. Null until the file is ready and after it expires. |
ExportJobPage
data required | array of ExportJob |
nextCursor required | string,null Pass as |
Folder
id required | string |
parentId required | string,null |
name required | string |
documentCount required | number |
FolderPage
data required | array of Folder |
nextCursor required | string,null Pass as |
Hold
id required | string |
held required | boolean |
flags required | array of ExpenseFlag |
Reached
reached required | array of string Who can read it now and has been told. |
Merchant
id required | string | ||||
name required | string | ||||
defaultCategoryId required | string,null | ||||
website required | string,null | ||||
phone required | string,null | ||||
address required | string,null | ||||
taxId required | string,null | ||||
is1099 required | boolean | ||||
merchantType required | airline lodging car_rental ground_transport fuel dining grocery office software utilities supplies other or nullWhat kind of business this is. Null lets a rule work it out from the card code or the name. | ||||
expenseCount required | number | ||||
totalMinor required | number Non-void expenses, in the workspace's base currency. | ||||
aliases required | array of object Other spellings that file here: left by a merge or a rename. Fields
|
MerchantPage
data required | array of Merchant |
nextCursor required | string,null Pass as |
MileageLog
from required | string | ||||||||||
to required | string | ||||||||||
rows required | array of Trip | ||||||||||
currency required | string | ||||||||||
totals required | objectFields
| ||||||||||
months required | array of MileageLogMonth | ||||||||||
tally required | object or null Where the person stands against a yearly limit, for a rate that drops after it. Fields
|
MileageRate
id required | string |
name required | string |
unit required | mi km |
rateMinor required | number A hundredth of a cent per unit, so 72.5 cents is 7250. |
currency required | string |
effectiveFrom required | string |
effectiveTo required | string,null The last day this rate covers. Null runs until a newer rate of the same name. |
isDefault required | boolean |
archived required | boolean |
taxBasisPoints required | number,null Tax on the reclaimable part, in hundredths of a percent. 2000 is 20%. Used while the workspace tracks tax on distance. |
taxReclaimableMinor required | number,null The fixed part of this rate tax can be reclaimed on, at the same scale as rateMinor. |
autoGenerated required | boolean The government-rate job added this row, and no admin has changed its amount, start or end. |
MileageRatePage
data required | array of MileageRate |
nextCursor required | string,null Pass as |
PerDiemRate
id required | string |
name required | string |
country required | string,null |
region required | string,null |
amountMinor required | number |
currency required | string |
archived required | boolean |
PerDiemRatePage
data required | array of PerDiemRate |
nextCursor required | string,null Pass as |
Project
id required | string |
name required | string |
code required | string,null |
clientId required | string,null |
clientName required | string,null |
budgetMinor required | number,null |
spentMinor required | number Non-void expenses, in the workspace's base currency. |
expenseCount required | number |
archived required | boolean |
ProjectPage
data required | array of Project |
nextCursor required | string,null Pass as |
ReportDetail
purpose required | string,null | ||||
rejectionReason required | string,null | ||||
rejectedAt required | string,null | ||||
reimbursedAt required | string,null | ||||
exportedAt required | string,null | ||||
expenses required | array of ExpenseSummary | ||||
findings required | array of PolicyFinding | ||||
approvals required | array of ApprovalStep | ||||
participants required | array of ReportPerson People added to the report. They can read it and comment, nothing more. | ||||
fields required | array of ReportFieldValue | ||||
titleLocked required | boolean True when a title typed here would be refused: the workspace's formula sets it. | ||||
noApprovalStep required | boolean Submitting needs nobody's approval, so it finishes the report. | ||||
exportable required | boolean This person can export this report or share it. Someone added only to read and comment cannot. | ||||
ccEmails required | array of string Addresses outside the workspace copied on each submission. | ||||
canPickApprover required | boolean A draft whose workflow leaves the next approver open, so the person submitting can name one. | ||||
canSendOutside required | boolean A draft in a workspace with nobody else to approve it, which can go to someone outside instead. | ||||
outsideApprover required | object 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
| ||||
expenseColumns required | map of object What the expense table's optional columns read, by expense id. | ||||
customFieldLabels required | object The workspace's first two custom fields, which the Custom field 1 and 2 columns show. Fields
| ||||
withdrawalId required | string,null The batch that pays this report. | ||||
internationalReimbursementId required | string,null The same, where the batch pays in another currency than the workspace's. | ||||
final required | boolean Nothing more is due: paid, or approved with nothing to pay, or done. | ||||
findingsAccepted required | object or null Someone has reviewed and accepted what the receipt checks found. Fields
| ||||
auditNote required | string,null What the receipt audit did on this report, on a plan that has it. There even when it found nothing. | ||||
needsAcceptance required | boolean Receipt checks found something, and approving this report has to wait for someone to accept it. | ||||
timeline required | array of ReportTimelineEntry | ||||
heldExpenseIds required | array of string | ||||
actions required | array of delete approve submit retract reject reopen close mark_exported mark_reimbursed edit reassign duplicate invite accept_findings received_payment | ||||
selfApproval required | boolean True when the caller's approval would be a self-approval the workspace allows. | ||||
deciding required | boolean The caller holds a step that is live now, for themselves or as a delegate. Without one, a workspace admin has to bypass. | ||||
id required | string | ||||
number required | number | ||||
reference required | string | ||||
title required | string | ||||
status required | ReportStatus | ||||
stage required | DRAFT SUBMITTED OUTSTANDING APPROVED REJECTED PAID EXPORTED DONE | ||||
paymentStage required | MARKED_AS_PAID WITHDRAWING CONFIRMED or null | ||||
owner required | ReportPerson | ||||
currency required | string | ||||
totalMinor required | number | ||||
reimbursableMinor required | number | ||||
expenseCount required | number | ||||
findingCount required | number | ||||
periodStart required | string,null | ||||
periodEnd required | string,null | ||||
autoCreated required | boolean | ||||
waitingOn required | array of ReportPerson Who the report is with right now. | ||||
submittedAt required | string,null | ||||
approvedAt required | string,null | ||||
createdAt required | string | ||||
updatedAt required | string |
ReportPage
data required | array of ReportSummary |
nextCursor required | string,null Pass as |
Tag
id required | string |
name required | string |
groupName required | string,null |
glCode required | string,null |
color required | string,null |
archived required | boolean |
expenseCount required | number |
approverId required | string,null Reviews any report carrying this tag, after any category approvers and ahead of the workflow. |
approverName required | string,null |
parentId required | string,null The tag this one sits under. An expense carrying this one has to carry that one too. |
parentName required | string,null |
TagPage
data required | array of Tag |
nextCursor required | string,null Pass as |
TaxSummary
year required | number | ||||||
from required | string | ||||||
to required | string | ||||||
fiscalYearStartMonth required | number | ||||||
currency required | string | ||||||
notice required | string | ||||||
mileageNotice required | string | ||||||
lines required | array of TaxLine | ||||||
mileage required | array of TaxMileage | ||||||
unassigned required | object Spending on a category with no tax line, or on no category. Fields
| ||||||
excluded required | object Expenses a person marked as not deductible. Fields
| ||||||
payees required | object 1099s follow the calendar year whatever the fiscal year, so this has its own dates. Fields
| ||||||
needsReview required | number Counted above, but a person has not confirmed them yet. | ||||||
unconverted required | number Expenses with no exchange rate yet. They are not in these figures. | ||||||
spentMinor required | number | ||||||
deductibleMinor required | number |
TravelTrip
id required | string | ||||||||||||||||||
ownerId required | string | ||||||||||||||||||
name required | string | ||||||||||||||||||
origin required | string,null | ||||||||||||||||||
destination required | string,null | ||||||||||||||||||
departsOn required | string YYYY-MM-DD. | ||||||||||||||||||
returnsOn required | string,null YYYY-MM-DD. | ||||||||||||||||||
merchantName required | string,null | ||||||||||||||||||
bookingReference required | string,null | ||||||||||||||||||
currency required | string,null | ||||||||||||||||||
totalMinor required | number,null In minor units of the currency: 1250 is 12.50. | ||||||||||||||||||
segments required | array of object Flights, stays, cars and trains, in order. Fields
| ||||||||||||||||||
documentIds required | array of string The itinerary and the receipts filed against this trip. | ||||||||||||||||||
createdAt required | string | ||||||||||||||||||
updatedAt required | string |
TravelTripPage
data required | array of TravelTrip |
nextCursor required | string,null Pass as |
Trip
expenseId required | string | ||||||
reference required | string | ||||||
status required | string | ||||||
owner required | MoneyPerson | ||||||
date required | string | ||||||
purpose required | string | ||||||
origin required | string | ||||||
stops required | array of string Places along the way. | ||||||
destination required | string | ||||||
originLabel required | string,null The name of a saved place at this address, such as Home. | ||||||
destinationLabel required | string,null | ||||||
departed required | string,null HH:MM. | ||||||
arrived required | string,null HH:MM. | ||||||
distance required | number | ||||||
unit required | string | ||||||
calculation required | string How the amount was reached: 8.1 mi x $0.76/mi = $6.16. | ||||||
purposeKind required | business medical charityWhat the trip was for, by the rate it took. | ||||||
roundTrip required | boolean | ||||||
odometerStart required | number,null | ||||||
odometerEnd required | number,null | ||||||
odometerPhotos required | object Documents holding a photo of each reading, and the one image they are merged into. Fields
| ||||||
receiptDocumentId required | string,null The generated mileage receipt. | ||||||
vehicle required | object or nullFields
| ||||||
rateMinor required | number A hundredth of a cent per unit. | ||||||
rateName required | string,null | ||||||
amountMinor required | number | ||||||
currency required | string | ||||||
entry required | MANUAL ODOMETER MAP GPSHow the distance came to be known. Only MAP and GPS were measured. | ||||||
driven required | number The whole drive. | ||||||
commuteExcluded required | number,null The commute taken off this trip, or null if none was. | ||||||
taxMinor required | number,null The tax on this trip, when its workspace tracks tax on distance. |
TripRoutes
array of TripRoute
ExpenseDetails
array of ExpenseDetail
ReportSubmittedViaPdf
report required | ReportDetail |
exportJobId required | string The export making the PDF. Its download is ready when the job is. |
Vehicle
id required | string |
userId required | string |
ownerName required | string,null |
name required | string |
plate required | string,null |
archived required | boolean |
expenseCount required | number |
VehiclePage
data required | array of Vehicle |
nextCursor required | string,null Pass as |
ApiKeyVerification
id required | string |
name required | string |
prefix required | string The first characters of the key. |
kind required | PERSONAL WORKSPACEPERSONAL acts as the person who made it and ends when they leave. WORKSPACE belongs to the workspace and outlives them. |
environment required | LIVE TEST |
workspaceId required | string |
scopes required | array of string Every scope this key holds right now. |
fullAccess required | boolean Every scope, present and future. |
role required | string The role its reach is measured against: a scope opens a route, and the role decides what the route may do. |
signingRequired required | boolean A request with no valid signature is refused. |
expiresAt required | string,null |
ClientCertificate
id required | string |
name required | string |
fingerprint required | string SHA-256 of the certificate, lowercase hex. |
subject required | string,null |
notAfter required | string,null |
revokedAt required | string,null |
createdAt required | string |
ClientCertificatePage
data required | array of ClientCertificate |
nextCursor required | string,null Pass as |
ReleaseNotePage
data required | array of ReleaseNote |
nextCursor required | string,null Pass as |
WebhookDelivery
id required | string |
endpointId required | string |
eventId required | string |
eventType required | string |
state required | FAILED PENDING DELIVERED ABANDONED |
attempts required | number |
responseStatus required | number,null |
responseBody required | string,null |
nextAttemptAt required | string,null |
deliveredAt required | string,null |
createdAt required | string |
payload required | any |
WebhookDeliveryPage
data required | array of WebhookDelivery |
nextCursor required | string,null Pass as |
WebhookEndpoint
status required | PENDING CONFIRMEDPENDING receives the subscription event and nothing else, until POST /v1/webhooks/confirm. |
pendingUntil required | string,null A pending endpoint not confirmed by then is deleted. |
confirmedAt required | string,null |
apiKeyId required | string,null Set when this endpoint belongs to one API key rather than the workspace. |
id required | string |
url required | string |
description required | string,null |
events required | array of string |
enabled required | boolean |
failureCount required | number |
disabledAt required | string,null Set while the endpoint is off. |
createdAt required | string |
WebhookEndpointPage
data required | array of WebhookEndpoint |
nextCursor required | string,null Pass as |
WebhookEndpointWithSecret
status required | PENDING CONFIRMEDPENDING receives the subscription event and nothing else, until POST /v1/webhooks/confirm. |
pendingUntil required | string,null A pending endpoint not confirmed by then is deleted. |
confirmedAt required | string,null |
apiKeyId required | string,null Set when this endpoint belongs to one API key rather than the workspace. |
secret required | string |
id required | string |
url required | string |
description required | string,null |
events required | array of string |
enabled required | boolean |
failureCount required | number |
disabledAt required | string,null Set while the endpoint is off. |
createdAt required | string |
WebhookEventPayload
id required | string Stable across retries, so a repeat can be ignored. |
type required | string |
createdAt required | string |
data required | map of any |
AccountingRow
kind required | report expense transaction | ||||||||||||
id required | string | ||||||||||||
expenseId required | string,null The expense behind a card line, when there is one. | ||||||||||||
reference required | string,null | ||||||||||||
title required | string | ||||||||||||
person required | string,null | ||||||||||||
account required | string,null | ||||||||||||
date required | string The date the shortcut goes by. | ||||||||||||
status required | string | ||||||||||||
amountMinor required | number | ||||||||||||
currency required | string | ||||||||||||
baseAmountMinor required | number In the workspace's base currency, so a footer can add it up. | ||||||||||||
expenses required | number,null How many expenses a report holds. Null on anything else. | ||||||||||||
statement required | object or null Card statements: the statement this line is on. Fields
| ||||||||||||
withdrawal required | object or nullFields
|
AgentActivity
id required | string |
trigger required | ASK EVENT SCHEDULE |
status required | string |
summary required | string,null |
createdAt required | string |
AgentTemplate
key required | string | ||||||||||||||||||||
name required | string | ||||||||||||||||||||
description required | string | ||||||||||||||||||||
instructions required | string | ||||||||||||||||||||
plan required | object or null Null when it only talks. Fields
| ||||||||||||||||||||
needsClaude required | boolean Needs Claude to run. Everything else here is code. |
ApiCall
id required | string |
actorType required | API_KEY OAUTH |
actorId required | string,null The API key's id, or the app's client_id. |
actorName required | string,null The key's or the app's name, while it still exists. |
method required | string |
path required | string |
status required | number |
durationMs required | number |
requestId required | string,null |
ip required | string,null |
createdAt required | string |
ApprovalCounts
pending required | number |
clean required | number |
flagged required | number |
delegated required | number |
ApprovalQueueItem
stepId required | string |
level required | number |
report required | ReportSummary |
approver required | ReportPerson |
onBehalfOf required | ReportPerson or null The approver this step belongs to, when the caller is acting as their delegate. |
clean required | boolean |
heldCount required | number |
waitingSince required | string |
ApprovalStep
id required | string |
level required | number |
approver required | ReportPerson |
actedBy required | ReportPerson or null Set when someone else acted for the approver. |
state required | APPROVED REJECTED PENDING SKIPPED WAITING |
comment required | string,null |
decidedAt required | string,null |
ArchivedReport
number required | number | ||||||||||
title required | string | ||||||||||
status required | string | ||||||||||
currency required | string | ||||||||||
totalMinor required | number | ||||||||||
submittedAt required | string,null | ||||||||||
owner required | string | ||||||||||
lines required | array of objectFields
|
AuditEvent
id required | string |
action required | string |
actorType required | USER API_KEY STAFF SYSTEM OAUTH |
actorId required | string,null |
actorName required | string,null The person, or the name of the API key. Null for the system. |
onBehalfOfName required | string,null The person this was done for, when the actor was a delegate. |
affectedName required | string,null The person the change was about, when it was about a person: a member whose role changed, say. |
entityType required | string,null |
entityId required | string,null |
metadata required | map of any |
createdAt required | string |
BankReconciliationExpense
id required | string |
reference required | string |
merchantName required | string,null |
date required | string |
categoryName required | string,null |
amountMinor required | number |
currency required | string |
baseAmountMinor required | number |
BillingInvoice
id required | string |
number required | string,null |
status required | string,null |
currency required | string |
totalMinor required | number |
amountPaidMinor required | number |
amountDueMinor required | number |
createdAt required | string |
periodStart required | string,null |
periodEnd required | string,null |
hostedUrl required | string,null Stripe's page for the invoice. |
pdfUrl required | string,null Stripe's PDF of it. |
BillingPlan
extraSeatYearlyMinor required | number,null Per extra member per year, for yearly billing. Null when extra members are not sold. |
key required | PlanKey |
name required | string |
tagline required | string |
mailInTagline | string Replaces |
priceMonthlyMinor required | number 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 required | number |
extraSeatMonthlyMinor required | number,null Per extra member per month beyond |
limits required | PlanLimits |
features required | array 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 required | string |
name required | string What blueprint_name takes. |
title required | string |
documentType required | DocumentType |
builtIn required | boolean Ships with PaperTotal, and can be used and not changed. |
version required | number Changing a blueprint adds a version, and results keep the one that made them. |
BreakdownRow
id required | string,null The category, merchant, member, project, tag or department. Null is the row for expenses with none. |
label required | string |
totalMinor required | number |
count required | number |
previousMinor required | number |
changePct required | number,null |
sharePct required | number Of the period's total, one decimal. |
BudgetStanding
limitMinor required | number |
spentMinor required | number Approved or paid. |
pendingMinor required | number Not void or rejected, and not approved yet: what is on its way. |
remainingMinor required | number Below zero once the limit is passed. |
percentUsed required | number Of the limit, rounded down. |
CardStatement
from required | string |
to required | string |
open required | boolean True for the period still open today. |
count required | number |
spentMinor required | number |
creditedMinor required | number |
netMinor required | number |
currency required | string |
ChartBar
label required | string |
valueMinor required | number |
href required | string,null Where choosing this bar leads. Null when it cannot be narrowed to a filter. |
Chart
title required | string |
currency required | string |
bars required | array of ChartBar |
ChatPerson
phone | string,null |
agent | boolean True for an agent's account, so a client never reads it as a person. |
id required | string |
name required | string,null |
email required | string |
ClientWorkspace
id required | string | ||||||||||
name required | string | ||||||||||
role required | MemberRole | ||||||||||
baseCurrency required | string | ||||||||||
timezone required | string | ||||||||||
dateFormat required | DateFormat How dates read in that workspace. The API always sends YYYY-MM-DD. | ||||||||||
todo required | objectFields
| ||||||||||
billing required | objectFields
|
DocumentCounts
added required | number |
read required | number |
reading required | number |
failed required | number |
DocumentFraud
Evidence for a reviewer. Null until inspected, and for a caller without expenses.read_all.
version required | string | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
score required | number 0 to 1, from the signals that fired. Evidence, never a verdict. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
color required | green yellow redUnder the workspace yellow threshold is green. Over its red threshold is red. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
types required | array of FraudSignal Signals that fired, most important first. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
details required | map of object By signal: a description, a confidence and typed reasons. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
attribution required | string,null One sentence naming the strongest evidence. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
decision required | clear review fraud not_fraud unknownclear or review until a person decides. Only a person can say fraud. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
review required | object or nullFields
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
deviceId required | string,null The id the client sent for its device, when it sent one. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
submissions required | object or null Documents from this uploader in this workspace, by window. Fields
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
deviceProfiles required | array of object Over 30 days, inside this workspace only. Fields
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
digitalTamperingFields required | array of string | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
handwriting required | object 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
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
notADocument required | objectFields
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
digitalBackground required | objectFields
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
fraudulentPdf required | object or nullFields
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
fraudulentImage required | object or nullFields
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
pages required | array of objectFields
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
skipped required | array of object Checks that could not run on this file, so a clean result is not read as more than it is. Fields
|
DocumentMeta
totalPages required | number | ||||||
processedPages required | number | ||||||
ocrScore required | number,null The average character confidence of the reading, which doubles as a measure of the image. | ||||||
originalFileName required | string,null | ||||||
source required | DocumentSource | ||||||
language required | string,null BCP-47. | ||||||
languages required | array of object Every language found, best first. Fields
| ||||||
deviceId required | string,null | ||||||
deviceUserUuid required | string,null The signed-in person the device was capturing for. Null when no device was named. | ||||||
latitude required | number,null | ||||||
longitude required | number,null | ||||||
sourceDocuments required | array of map of any Each file as submitted: name, type, size in KB, width, height and EXIF. | ||||||
owner required | object or null Who uploaded it. Fields
| ||||||
duplicates required | array of object Near copies past the workspace threshold, best first. Fields
|
DocumentTag
id required | string |
name required | string |
DomainAccessRequest
id required | string |
userId required | string |
email required | string |
name required | string,null |
status required | PENDING APPROVED DENIED |
createdAt required | string |
DomainAdmin
userId required | string |
email required | string |
name required | string,null |
addedAt required | string |
DomainMember
userId required | string | ||||||
email required | string | ||||||
name required | string,null | ||||||
membership required | object or null In the domain's workspace. Someone only on the address has no membership here. Fields
| ||||||
groupId required | string,null | ||||||
lastActiveAt required | string,null |
DomainReportRow
userId required | string |
email required | string |
name required | string,null |
expenseCount required | number |
totalMinor required | number Base amounts in the workspace's currency, with voided expenses left out. |
DurationBucket
label required | string |
belowMs required | number,null Exclusive. Null for the last bucket, which has no top. |
count required | number |
DurationDay
date required | string |
count required | number |
averageMs required | number,null |
medianMs required | number,null |
DurationSummary
count required | number How many documents the figures below are from. |
averageMs required | number,null |
medianMs required | number,null |
p90Ms required | number,null |
ExpenseAccess
canEdit required | boolean |
limited required | boolean Out for approval: only the amount, description, merchant, date, category, tags and attendees can change. |
reason required | string,null Why it cannot be edited, or how far it can, in words for the person looking at it. |
amountLocked required | boolean The amount is a card's own figure. |
canDelete required | boolean |
canRestore required | boolean |
restoreBlocked required | string,null Why it cannot be restored: split, or merged, for good. |
canSplit required | boolean |
canMove required | boolean |
ExpenseFlag
code required | string |
message required | string |
severity required | info warn block |
by | string Who put it there, where that decides who may take it off. |
ExpenseGroup
key required | string |
label required | string |
count required | number |
baseAmountMinor required | number |
ExpenseSummary
id required | string | ||||||
number required | number | ||||||
reference required | string | ||||||
status required | ExpenseStatus | ||||||
kind required | ExpenseKind | ||||||
merchantName required | string,null | ||||||
tripTitle required | string,null For a trip, what to call it in a list. | ||||||
description required | string,null | ||||||
date required | string | ||||||
currency required | string | ||||||
amountMinor required | number | ||||||
baseAmountMinor required | number | ||||||
taxMinor required | number,null | ||||||
category required | object or nullFields
| ||||||
alsoCategories required | array of object Further categories it can be found under. Its money stays in category. Fields
| ||||||
project required | object or nullFields
| ||||||
client required | object or nullFields
| ||||||
owner required | objectFields
| ||||||
moneyFlow required | IN OUTWhich way the money went. | ||||||
invoiceNumber required | string,null | ||||||
matched required | boolean A card charge has been matched to it. | ||||||
connectedApps required | array of string Connected services it has been posted to. | ||||||
reportId required | string,null | ||||||
externalId required | string,null A developer's own reference, exactly as sent. | ||||||
billable required | boolean | ||||||
reimbursable required | boolean | ||||||
paymentType required | PaymentType or null | ||||||
confidence required | number,null | ||||||
flags required | array of ExpenseFlag | ||||||
reviewFields required | array of string | ||||||
thumbnailUrl required | string,null | ||||||
documentId required | string,null | ||||||
tags required | array of objectFields
| ||||||
attendeeCount required | number | ||||||
fxRate required | number What one unit of the expense currency is worth in the base currency. | ||||||
held required | boolean Held back from its report until someone releases it. | ||||||
createdAt required | string | ||||||
updatedAt required | string |
ExplainCall
tool required | string |
effect required | READ WRITE |
outcome required | FAILED PROPOSED EXECUTED REFUSED |
input required | any |
reason required | string,null |
at required | string |
ExportCapabilities
reimbursable required | array of BILL CHECK JOURNAL_ENTRY EXPENSE_REPORT |
companyCard required | array of BILL JOURNAL_ENTRY EXPENSE_REPORT CREDIT_CARD DEBIT_CARD |
billStatus required | boolean Xero alone lets an entry arrive as a draft. |
paidSync required | boolean Reads Paid back, and posts a bill payment. |
originalCurrency required | boolean Posts the original currency with its rate. |
ExportFilters
status | ExpenseStatus or array of ExpenseStatus | ||||||||||||||
kind | ExpenseKind | ||||||||||||||
paymentType | PaymentType | ||||||||||||||
ownerId | string | ||||||||||||||
scope | mine all | ||||||||||||||
categoryId | string | ||||||||||||||
merchantId | string | ||||||||||||||
projectId | string | ||||||||||||||
clientId | string | ||||||||||||||
tagId | string | ||||||||||||||
department | string | ||||||||||||||
reportId | string | ||||||||||||||
externalId | string | ||||||||||||||
unreported | boolean | ||||||||||||||
needsReview | boolean | ||||||||||||||
billable | boolean | ||||||||||||||
reimbursable | boolean | ||||||||||||||
moneyFlow | IN OUT | ||||||||||||||
dateField | ExpenseDateField | ||||||||||||||
from | string | ||||||||||||||
to | string | ||||||||||||||
minMinor | integer | ||||||||||||||
maxMinor | integer | ||||||||||||||
q | string | ||||||||||||||
ids | array of string | ||||||||||||||
year | integer | ||||||||||||||
reportState | ReportStatus or array of ReportStatus | ||||||||||||||
reportIds | array of string | ||||||||||||||
startDate | string | ||||||||||||||
endDate | string | ||||||||||||||
approvedAfter | string | ||||||||||||||
exported | boolean | ||||||||||||||
categoryIds | array of string | ||||||||||||||
documentIds | array of string | ||||||||||||||
documentTypes | array of DocumentType | ||||||||||||||
policyIds | array of string | ||||||||||||||
approvalLinkId | string | ||||||||||||||
columns | array of objectFields
| ||||||||||||||
columnSet | DocumentColumnSet | ||||||||||||||
preset | ExportPreset | ||||||||||||||
view | objectFields
| ||||||||||||||
notifyRequester | boolean | ||||||||||||||
fullPageReceipts | boolean | ||||||||||||||
template | string | ||||||||||||||
emailMessage | string | ||||||||||||||
delimiter | CsvDelimiter | ||||||||||||||
bom | boolean | ||||||||||||||
recipients | array of string (email) | ||||||||||||||
scheduledReportId | string | ||||||||||||||
scheduledReportName | string | ||||||||||||||
notes | array of string |
ExportFinish
markAsExported required | object or nullFields
| ||||||||||||||||
sftpUpload required | object or null Where the file went. The credentials are never returned. Fields
|
ExportRecord
id required | string |
documentId required | string,null |
expenseId required | string,null |
target required | string A service, such as QUICKBOOKS_ONLINE, a file format, such as CSV, or what a program named. |
externalId required | string,null The id it has there. |
exportJobId required | string,null |
via required | EXPORT SYNC API |
createdAt required | string |
HeldBackRow
postedDate required | string |
amountMinor required | number |
currency required | string |
description required | string |
matchedDescription required | string |
matchedFormat required | CSV IIF OFX |
HrCredentialField
key required | string |
label required | string |
secret required | boolean A secret never comes back once saved. |
hint | string |
pattern | string A regular expression the value has to match. |
HrSystem
key required | string |
name required | string |
access required | DIRECT PARTNER FILEDIRECT 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 required | array of HrCredentialField What connecting asks for. |
partnerNote | string |
ImportCounts
categories required | number |
tags required | number |
reportFields required | number |
taxRates required | number |
ImportDimension
key required | string |
label required | string |
count required | number Live values in this list at the provider. |
destinations required | array of OFF TAGS REPORT_FIELDS EMPLOYEE_DEFAULT |
destination required | OFF TAGS REPORT_FIELDS EMPLOYEE_DEFAULT |
ImportSummary
at required | string | ||||
created required | ImportCounts New rows this run made. | ||||
paired required | number Rows already here that were paired, untouched. | ||||
updated required | number Rows brought up to date because the provider changed and nobody had touched them. | ||||
keptEdits required | number Rows a person changed or deleted, left as they are. | ||||
skipped required | array of object Accounts left out, with the reason. Fields
|
InboundEmail
id required | string | ||||
from required | string | ||||
subject required | string,null | ||||
status required | RECEIVED PROCESSED NO_ATTACHMENT UNKNOWN_SENDER OVER_LIMIT REJECTED FAILED | ||||
detail required | string,null | ||||
documentCount required | number | ||||
hasAttachment required | boolean | ||||
refusedFiles required | array of objectFields
| ||||
receivedAt required | string |
InboxTodo
key required | string |
title required | string |
detail required | string,null |
href required | string |
count required | number 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 required | string |
description required | string |
quantity required | number |
unitMinor required | number |
amountMinor required | number |
taxKind required | InvoiceTaxKind or null |
taxBasisPoints required | number,null 2000 is 20%. |
taxMinor required | number |
receiptUrl required | string,null The receipt of a pulled-in expense: a signed link that lasts 15 minutes. |
expenseId required | string,null |
InvoiceMessage
id required | string |
fromRecipient required | boolean |
authorName required | string,null |
body required | string |
createdAt required | string |
InvoicePayment
id required | string |
kind required | PAYMENT REFUND |
amountMinor required | number |
paidOn required | string |
reference required | string,null |
note required | string,null |
createdAt required | string |
InvoiceSummary
id required | string |
number required | number |
reference required | string INV- and the number. |
status required | InvoiceStatus |
displayStatus required | InvoiceDisplayStatus |
title required | string,null |
recipientName required | string,null |
recipientEmail required | string,null |
recipientPhone required | string,null |
currency required | string |
issueDate required | string |
dueDate required | string,null |
totalMinor required | number |
paidMinor required | number |
refundedMinor required | number |
balanceMinor required | number What is still owed: the total, less payments, plus anything refunded. |
sentAt required | string,null |
viewedAt required | string,null |
paidAt required | string,null |
createdAt required | string |
InvoiceToPay
id required | string |
reference required | string |
displayStatus required | InvoiceDisplayStatus |
senderName required | string |
senderEmail required | string,null |
title required | string,null |
currency required | string |
dueDate required | string,null |
totalMinor required | number |
balanceMinor required | number |
awaitingPayment required | boolean |
JoinRequest
id required | string |
userId required | string |
email required | string |
name required | string,null |
source required | DOMAIN LINK |
role required | MemberRole |
status required | PENDING APPROVED DENIED |
createdAt required | string |
JoinableWorkspace
id required | string |
name required | string |
mode required | ASK JOIN_NOW |
MailInDocument
id required | string |
type required | DocumentType |
status required | DocumentStatus |
originalFilename required | string,null |
thumbnailUrl required | string,null |
createdAt required | string |
MailInEnvelopeAllowance
week required | string 2026-W44. A week starts on Monday, UTC. |
weekLimit required | number Envelopes a workspace can have sent in a week. |
used required | number |
remaining required | number Envelopes that can still be requested this week. |
MappingOption
id required | string |
name required | string |
code required | string,null |
type required | string,null The account type, or the tracking category an option belongs to. |
active required | boolean |
MappingRow
entity required | MappingEntity | ||||||||||||
localId required | string | ||||||||||||
name required | string | ||||||||||||
code required | string,null | ||||||||||||
kind required | ACCOUNT PAYMENT_ACCOUNT VENDOR CUSTOMER CLASS TRACKING TAX_CODE ITEM LOCATION DEPARTMENT EMPLOYEE CUSTOM_DIMENSION EXPENSE_CATEGORY PAYABLE_ACCOUNT | ||||||||||||
required required | boolean Posting stops at this row while it is empty. | ||||||||||||
mapped required | MappingOption or null | ||||||||||||
suggestion required | object or null Never used for posting until someone saves it. Fields
|
McpError
jsonrpc required | 2.0 | ||||||
id | string,number | ||||||
error required | objectFields
|
McpResult
jsonrpc required | 2.0 |
id required | string,number |
result required | map of any |
MemberChoice
id required | string |
name required | string |
MessageFlag
id required | string | ||||
message required | Message | ||||
room required | objectFields
| ||||
reason required | string,null | ||||
source required | PERSON SCAN | ||||
reporter required | ChatPerson or null | ||||
state required | OPEN UPHELD DISMISSED | ||||
createdAt required | string |
MileageLogMonth
month required | string YYYY-MM. |
trips required | number |
amountMinor required | number |
MoneyPerson
id required | string |
name required | string,null |
email required | string |
NamedWorkspace
id required | string |
name required | string |
NotificationPreference
type required | invoice.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 required | boolean |
push required | boolean |
inApp required | boolean |
OAuthConnection
id required | string |
clientName required | string |
clientUri required | string,null |
workspaceId required | string |
workspaceName required | string |
scopes required | array of string |
resource required | api mcp |
connectedAt required | string |
lastUsedAt required | string,null |
OAuthScope
scope required | string |
label required | string |
description required | string |
optIn required | boolean Off until the person ticks it. Ticking it is the rule they approve. |
OffboardingItem
step required | transfer_ownership share_bank_account reset_payer reconnect_integrations |
done required | boolean |
detail required | string |
href required | string |
OutstandingPayee
payee required | MoneyPerson |
employeeId required | string,null |
unbatchedMinor required | number Approved and not yet in a batch: these can go into one now. |
batchedMinor required | number In a live batch, waiting to be marked paid. |
totalMinor required | number |
hasBankAccount required | boolean |
reports required | array of OutstandingReport |
OutstandingReport
id required | string |
reference required | string |
title required | string |
approvedAt required | string,null |
amountMinor required | number |
reimbursementId required | string,null The live batch holding this report, if there is one. |
currency required | string What the report is written in. |
reimbursementReference required | string,null |
PlanLimits
scansPerMonth required | number Documents extracted per calendar month. |
seatsIncluded required | number Members included in the price. |
maxSeats required | number,null Most members a workspace may have. Null is unlimited. |
apiDocumentsPerMonth required | number Documents accepted through the developer API per month. |
mailInDocumentsPerMonth required | number Paper documents per month through the mail-in service. |
PolicyDocument
key required | string |
filename required | string |
uploadedAt required | string |
PolicyFinding
code required | POLICY_VIOLATION |
ruleId required | string |
type required | PolicyRuleType |
severity required | PolicySeverity |
expenseId required | string |
expenseReference required | string |
message required | string |
reviewerOnly | boolean Evidence for a reviewer. It never reaches the person who uploaded the receipt. |
PostingPause
since required | string |
code required | string Stable code of the failure that paused it. |
message required | string Written for a person. |
failed required | number Records waiting on a person now. |
PrivateDetails
legalFirstName required | string or null |
legalLastName required | string or null |
dateOfBirth required | string (date) or null |
phone required | string or null |
addressLine1 required | string or null |
addressLine2 required | string or null |
city required | string or null |
region required | string or null |
postalCode required | string or null |
country required | string or null |
ReimbursementReport
id required | string |
reference required | string |
title required | string |
status required | string |
amountMinor required | number |
ReleaseNote
id required | string |
version required | string |
product required | ReleaseProduct |
environments required | array of ReleaseEnvironment |
title required | string |
body required | string |
publishedAt required | string |
ReportArchive
id required | string |
workspaceName required | string |
reportCount required | number |
closedAt required | string |
ReportFieldValue
id required | string |
name required | string |
type required | ReportFieldType |
options required | array of string |
formula required | string,null |
required required | boolean |
enabled required | boolean |
position required | number |
disabledOptions | array of string List values turned off: kept on reports that hold them, and not offered for new ones. |
imported | boolean Came from the connected books, so it cannot be deleted and its values only turn on and off. |
value required | string,null |
ReportPerson
id required | string |
name required | string,null |
email required | string |
ReportSummary
id required | string |
number required | number |
reference required | string |
title required | string |
status required | ReportStatus |
stage required | DRAFT SUBMITTED OUTSTANDING APPROVED REJECTED PAID EXPORTED DONESubmitted until someone has acted on it. Outstanding once it is part way: under review, with a hold, or partly approved. |
paymentStage required | MARKED_AS_PAID WITHDRAWING CONFIRMED or null |
owner required | ReportPerson |
currency required | string |
totalMinor required | number |
reimbursableMinor required | number |
expenseCount required | number |
findingCount required | number |
periodStart required | string,null |
periodEnd required | string,null |
autoCreated required | boolean |
waitingOn required | array of ReportPerson Who the report is with right now. |
submittedAt required | string,null |
approvedAt required | string,null |
createdAt required | string |
updatedAt required | string |
ReportTimelineEntry
id required | string |
action required | string |
actor required | ReportPerson or null Null when PaperTotal did it on a schedule. |
onBehalfOf required | ReportPerson or null The person whose name this was done in, when the actor was covering for them. |
detail required | string,null The reason, comment or note that came with the action. |
metadata required | map of any |
at required | string |
ReviewRow
expenseId required | string |
reference required | string |
merchantName required | string,null |
date required | string |
amountMinor required | number |
currency required | string |
taxMinor required | number,null |
categoryId required | string,null |
account required | string,null Where the category posts, when it has been mapped. |
posted required | boolean Already in the books. Selected only when the person asks to send it again. |
problem required | string,null What would stop it posting, in a sentence. |
gst required | MISSING OVER or null |
RoomMember
phone | string,null |
agent | boolean True for an agent's account, so a client never reads it as a person. |
id required | string |
name required | string,null |
email required | string |
moderator required | boolean |
S3Access
configured required | boolean |
accessKeyId required | string,null |
region required | string,null |
ScimToken
id required | string |
name required | string |
prefix required | string |
lastUsedAt required | string,null |
expiresAt required | string,null |
createdAt required | string |
SealedValue
kind required | SensitiveKind |
masked required | string All but the last few characters are stars. Punctuation stays where it was. |
field required | string,null |
page required | number |
SearchGroup
kind required | SearchKind |
hits required | array of SearchHit |
hasMore required | boolean |
SearchHit
kind required | SearchKind |
id required | string |
title required | string |
subtitle required | string,null |
snippet required | array of SearchSnippetPart |
date required | string,null |
amountMinor required | number,null |
currency required | string,null |
status required | string,null |
documentType required | DocumentType or null |
thumbnailUrl required | string,null |
roomId required | string,null The chat a message or a task is in, which is where it opens. Null for every other kind. |
SearchShortcutReport
id required | string |
reference required | string |
title required | string |
status required | string |
totalMinor required | number |
currency required | string |
ownerName required | string |
workspaceId required | string |
workspaceName required | string |
date required | string When it was submitted, or created if it never was. |
SearchSnippetPart
text required | string |
match required | boolean This part is what matched. |
SearchSummaryRow
key required | string Stable within this summary. |
label required | string |
count required | number |
totalMinor required | number |
SearchSummary
groupBy required | card from week month quarter year merchant withdrawal-id category tag |
view required | table bar pie line |
currency required | string |
convertedFrom required | string,null Set when |
rows required | array of SearchSummaryRow |
count required | number Every match once, even when |
totalMinor required | number |
truncated required | boolean There are more groups than |
ServiceProvider
entityId required | string |
acsUrl required | string |
binding required | urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST |
nameIdFormat required | urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress |
metadataPath required | string |
redirectUri required | string Where an OIDC provider sends people back. |
Session
id required | string |
deviceName required | string,null |
os required | string,null |
browser required | string,null |
provider required | string,null |
secondFactor required | string,null |
signedInAt required | string |
lastSeenAt required | string |
current required | boolean The sign-in behind this request. |
SignInProvider
providerId required | string |
protocol required | SsoProtocol |
displayName required | string |
SkippedExpense
id required | string |
reason required | string |
SlackChannel
id required | string |
name required | string |
isPrivate required | boolean |
StatementOutputRow
postedDate required | string |
description required | string |
merchantName required | string,null |
amountMinor required | number |
currency required | string |
card required | string,null Which card, for a file holding several. |
StatusComponent
component required | api web worker | ||||
name required | string | ||||
state required | up down not_measured | ||||
lastCheckedAt required | string,null | ||||
latencyMs required | number,null | ||||
uptime required | array of object Over the last N days, or as much of them as has been measured. Null when nothing has. Fields
| ||||
days required | array of StatusDay |
StatusDay
date required | string |
percent required | number,null Null for a day with nothing measured. |
StatusIncident
component required | api web worker |
name required | string |
startedAt required | string |
endedAt required | string,null Null while it is still going on. |
StorageFeature
enabled required | boolean |
folder required | string,null Where it goes, once the first pass has made the folder. |
done required | number Written to the folder, or brought in from it. |
skipped required | number Files the provider or the capture rules refused for good. |
StorageIntake
watch required | READY NEEDS_GRANT NOT_OFFEREDREADY watches. NEEDS_GRANT is one reconnect away. NOT_OFFERED cannot be turned on. |
unavailable required | string,null Why it cannot be turned on, written for a person. |
recentSkips required | array of string The latest files that did not come in, each with its reason. |
enabled required | boolean |
folder required | string,null Where it goes, once the first pass has made the folder. |
done required | number Written to the folder, or brought in from it. |
skipped required | number Files the provider or the capture rules refused for good. |
StoreSubscriptionNotice
workspaceId required | string |
workspaceName required | string |
store required | APP_STORE PLAY_STORE |
SuggestedAgentRule
key required | string | ||||||||||||||||||||
list | string The list in its first condition is the workspace's to choose, and this names it on the screen. | ||||||||||||||||||||
group required | Amount, category and merchant Currency, tax, tag and description Dates and report shape Receipt intelligence | ||||||||||||||||||||
title required | string | ||||||||||||||||||||
prompt required | string | ||||||||||||||||||||
plan required | objectFields
| ||||||||||||||||||||
needsClaude required | boolean Needs Claude to run, and whatever it decides waits for a person. |
TaxCategory
id required | string |
name required | string |
deductiblePct required | number |
count required | number |
spentMinor required | number |
deductibleMinor required | number |
TaxLine
line required | string The Schedule C line: "9", "24b". |
label required | string |
count required | number |
spentMinor required | number |
deductibleMinor required | number |
categories required | array of TaxCategory |
TaxMileage
unit required | string |
trips required | number |
distance required | number |
deductionMinor required | number |
TaxPayee
merchantId required | string |
name required | string |
count required | number |
totalMinor required | number |
cardMinor required | number Paid by card. Card payments are reported by the processor, so a preparer usually sets these aside. |
taxIdOnFile required | boolean Whether a tax id is on file. The number itself is never shown or exported. |
TrashedDocument
id required | string |
type required | DocumentType |
title required | string,null |
originalFilename required | string,null |
sizeBytes required | number |
thumbnailUrl required | string,null |
deletedAt required | string |
purgeOn required | string YYYY-MM-DD. The day this document and its files are deleted for good. |
TrendPoint
totalMinor required | number Added up from the start of the period when the interval is |
count required | number |
sharePct required | number Of the period's total, one decimal. |
previousLabel required | string,null The point at the same position in the previous period. |
previousMinor required | number |
start required | string The days this point covers, cut to the period at either end. |
end required | string |
label required | string |
shortLabel required | string |
TripRoute
origin required | string |
stops required | array of string |
destination required | string |
distance required | number One way, as it would be typed. |
unit required | string |
roundTrip required | boolean |
lastDriven required | string |
uses required | number |
WorkflowApprovalDocument
name required | string |
merchant required | string,null |
total required | string,null |
url required | string,null |
WorkflowApprovalState
recipients required | array of string |
expiresAt required | string |
decision required | approve reject or null |
decidedBy required | string,null |
decidedAt required | string,null |
WorkflowFile
exportJobId required | string |
filename required | string |
rows required | number |
url required | string,null A signed link, or null once the file has expired. |
WorkflowIssue
code required | EMPTY 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 required | string |
nodeId | string |
edgeId | string |
WorkflowStep
id required | string |
nodeId required | string |
type required | api_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 required | string |
status required | PENDING RUNNING WAITING DONE SKIPPED FAILED |
message required | string,null |
documents required | number |
files required | array of WorkflowFile |
table required | WorkflowTablePreview or null |
approval required | WorkflowApprovalState or null |
startedAt required | string,null |
finishedAt required | string,null |
WorkflowSummary
id required | string |
name required | string |
enabled required | boolean |
version required | number,null The version that runs. Null until it has been turned on once. |
steps required | number |
lastRunAt required | string,null |
lastRunStatus required | RUNNING PAUSED COMPLETED FAILED CANCELLED or null |
createdAt required | string |
updatedAt required | string |
WorkflowTablePreview
title required | string |
columns required | array of string |
rows required | array of array of string,number,null |
totalRows required | number |
WorkflowTrigger
nodeId required | string |
type required | api_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 required | string,null Where to send documents, for an Email collector. |
cadence required | string,null |
nextRunAt required | string,null |
lastRunAt required | string,null |
WorkspaceSummary
id required | string |
name required | string |
kind required | PERSONAL TEAM |
baseCurrency required | string |
role required | MemberRole |
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 required | string |
description | string |
format | date time |
enum | array of string |
sensitive | SensitiveKind |