ezacto developers

API reference

The native ezacto v1 contract. Contract and generated clients are deterministic build artifacts. Version 1.0.0. The machine-readable document is at /openapi/v1.json; the same JSON is served by every running instance at /openapi/v1.json. Read the API contract first for errors, cursors and money-field redaction.

Authenticate with a bearer API token (Authorization: Bearer ezacto_…, issued under Settings → API tokens, scoped) or a browser session cookie. Operations marked cookieSession only cannot be called with a token.

activity

GET/api/v1/activity-log

List activity recorded from delivered domain events

Parameters

nameinrequiredtype
per_pagequeryinteger
fromquerystring
toquerystring
event_typequerystring
actor_idqueryinteger

Responses

200 ActivityLogPage

Authentication

bearerAuth or cookieSession

admin-modules

GET/api/v1/admin/modules

List module enabled states

Responses

200 ModuleListEnvelope

Authentication

cookieSession

PATCH/api/v1/admin/modules/{module}

Enable or disable a module

Parameters

nameinrequiredtype
modulepathyesstring

Request body

ModulePatch (required)

Responses

200 ModuleListEnvelope

Authentication

cookieSession

GET/api/v1/admin/sign-in-methods

List sign-in methods with their configured and enabled states

Responses

200 SignInMethodListEnvelope

Authentication

cookieSession

PATCH/api/v1/admin/sign-in-methods/{method}

Switch a sign-in method on or off

Parameters

nameinrequiredtype
methodpathyesstring

Request body

ModulePatch (required)

Responses

200 SignInMethodListEnvelope

Authentication

cookieSession

api-tokens

GET/api/v1/api-tokens

List API tokens for the acting user

Responses

200 ApiTokenListEnvelope

Authentication

cookieSession

POST/api/v1/api-tokens

Issue an API token

Request body

CreateApiTokenInput (required)

Responses

201 IssuedApiTokenEnvelope

Authentication

cookieSession

DELETE/api/v1/api-tokens/{tokenId}

Revoke an API token

Parameters

nameinrequiredtype
tokenIdpathyesinteger

Responses

200 ApiTokenEnvelope

Authentication

cookieSession

attachments

GET/api/v1/invoices/{invoiceId}/attachments

List attachments owned by a invoice

Parameters

nameinrequiredtype
invoiceIdpathyesinteger

Responses

200 AttachmentListEnvelope

Authentication

bearerAuth or cookieSession

POST/api/v1/invoices/{invoiceId}/attachments

Upload an attachment owned by a invoice

Parameters

nameinrequiredtype
invoiceIdpathyesinteger
Idempotency-Keyheaderyesstring

Request body

AttachmentUploadInput (required)

Responses

201 AttachmentEnvelope

Authentication

bearerAuth or cookieSession

GET/api/v1/invoices/{invoiceId}/attachments/{attachmentId}

Get metadata for a invoice attachment

Parameters

nameinrequiredtype
invoiceIdpathyesinteger
attachmentIdpathyesinteger

Responses

200 AttachmentEnvelope

Authentication

bearerAuth or cookieSession

GET/api/v1/invoices/{invoiceId}/attachments/{attachmentId}/content

Download an attachment owned by a invoice

Parameters

nameinrequiredtype
invoiceIdpathyesinteger
attachmentIdpathyesinteger

Responses

200

Authentication

bearerAuth or cookieSession

GET/api/v1/recurring-invoices/{recurringInvoiceId}/attachments

List attachments owned by a recurringinvoice

Parameters

nameinrequiredtype
recurringInvoiceIdpathyesinteger

Responses

200 AttachmentListEnvelope

Authentication

bearerAuth or cookieSession

POST/api/v1/recurring-invoices/{recurringInvoiceId}/attachments

Upload an attachment owned by a recurringinvoice

Parameters

nameinrequiredtype
recurringInvoiceIdpathyesinteger
Idempotency-Keyheaderyesstring

Request body

AttachmentUploadInput (required)

Responses

201 AttachmentEnvelope

Authentication

bearerAuth or cookieSession

GET/api/v1/recurring-invoices/{recurringInvoiceId}/attachments/{attachmentId}

Get metadata for a recurringinvoice attachment

Parameters

nameinrequiredtype
recurringInvoiceIdpathyesinteger
attachmentIdpathyesinteger

Responses

200 AttachmentEnvelope

Authentication

bearerAuth or cookieSession

GET/api/v1/recurring-invoices/{recurringInvoiceId}/attachments/{attachmentId}/content

Download an attachment owned by a recurringinvoice

Parameters

nameinrequiredtype
recurringInvoiceIdpathyesinteger
attachmentIdpathyesinteger

Responses

200

Authentication

bearerAuth or cookieSession

GET/api/v1/estimates/{estimateId}/attachments

List attachments owned by a estimate

Parameters

nameinrequiredtype
estimateIdpathyesinteger

Responses

200 AttachmentListEnvelope

Authentication

bearerAuth or cookieSession

POST/api/v1/estimates/{estimateId}/attachments

Upload an attachment owned by a estimate

Parameters

nameinrequiredtype
estimateIdpathyesinteger
Idempotency-Keyheaderyesstring

Request body

AttachmentUploadInput (required)

Responses

201 AttachmentEnvelope

Authentication

bearerAuth or cookieSession

GET/api/v1/estimates/{estimateId}/attachments/{attachmentId}

Get metadata for a estimate attachment

Parameters

nameinrequiredtype
estimateIdpathyesinteger
attachmentIdpathyesinteger

Responses

200 AttachmentEnvelope

Authentication

bearerAuth or cookieSession

GET/api/v1/estimates/{estimateId}/attachments/{attachmentId}/content

Download an attachment owned by a estimate

Parameters

nameinrequiredtype
estimateIdpathyesinteger
attachmentIdpathyesinteger

Responses

200

Authentication

bearerAuth or cookieSession

GET/api/v1/expenses/{expenseId}/attachments

List attachments owned by a expense

Parameters

nameinrequiredtype
expenseIdpathyesinteger

Responses

200 AttachmentListEnvelope

Authentication

bearerAuth or cookieSession

POST/api/v1/expenses/{expenseId}/attachments

Upload an attachment owned by a expense

Parameters

nameinrequiredtype
expenseIdpathyesinteger
Idempotency-Keyheaderyesstring

Request body

AttachmentUploadInput (required)

Responses

201 AttachmentEnvelope

Authentication

bearerAuth or cookieSession

GET/api/v1/expenses/{expenseId}/attachments/{attachmentId}

Get metadata for a expense attachment

Parameters

nameinrequiredtype
expenseIdpathyesinteger
attachmentIdpathyesinteger

Responses

200 AttachmentEnvelope

Authentication

bearerAuth or cookieSession

GET/api/v1/expenses/{expenseId}/attachments/{attachmentId}/content

Download an attachment owned by a expense

Parameters

nameinrequiredtype
expenseIdpathyesinteger
attachmentIdpathyesinteger

Responses

200

Authentication

bearerAuth or cookieSession

GET/api/v1/projects/{projectId}/attachments

List attachments owned by a project

Parameters

nameinrequiredtype
projectIdpathyesinteger

Responses

200 AttachmentListEnvelope

Authentication

bearerAuth or cookieSession

POST/api/v1/projects/{projectId}/attachments

Upload an attachment owned by a project

Parameters

nameinrequiredtype
projectIdpathyesinteger
Idempotency-Keyheaderyesstring

Request body

AttachmentUploadInput (required)

Responses

201 AttachmentEnvelope

Authentication

bearerAuth or cookieSession

GET/api/v1/projects/{projectId}/attachments/{attachmentId}

Get metadata for a project attachment

Parameters

nameinrequiredtype
projectIdpathyesinteger
attachmentIdpathyesinteger

Responses

200 AttachmentEnvelope

Authentication

bearerAuth or cookieSession

GET/api/v1/projects/{projectId}/attachments/{attachmentId}/content

Download an attachment owned by a project

Parameters

nameinrequiredtype
projectIdpathyesinteger
attachmentIdpathyesinteger

Responses

200

Authentication

bearerAuth or cookieSession

authentication

GET/auth/oidc/{provider}

Start an OpenID Connect sign-in

Parameters

nameinrequiredtype
providerpathyesstring

Responses

204 no content

Authentication

none

GET/auth/oidc/{provider}/callback

Complete an OpenID Connect sign-in

Parameters

nameinrequiredtype
providerpathyesstring
codequerystring
statequerystring

Responses

204 no content

Authentication

none

POST/auth/oidc/exchange

Exchange a native-app OIDC sign-in code for a session

Responses

200 ErrorEnvelope

Authentication

none

POST/auth/signup

Create the first owner and send email verification

Request body

SignupInput (required)

Responses

202 AuthAcceptedEnvelope

Authentication

none

POST/auth/verify-email

Verify an email address

Request body

AuthTokenInput (required)

Responses

200 AuthPrincipalEnvelope

Authentication

none

POST/auth/sign-in

Authenticate a verified email and password

Request body

PasswordSignInInput (required)

Responses

200 SignInResultEnvelope

Authentication

none

POST/auth/two-factor/challenge

Answer a two-factor challenge and receive the session

Request body

TwoFactorChallengeInput (required)

Responses

200 TwoFactorChallengeAcceptedEnvelope

Authentication

none

POST/auth/password/forgot

Request a password-reset email

Request body

EmailInput (required)

Responses

202 AuthAcceptedEnvelope

Authentication

none

POST/auth/password/reset

Consume a password-reset token

Request body

PasswordResetInput (required)

Responses

200 AuthPrincipalEnvelope

Authentication

none

GET/api/v1/sessions

List sessions for the acting user

Responses

200 SessionPage

Authentication

cookieSession

DELETE/api/v1/sessions/{sessionId}

Revoke a session for the acting user

Parameters

nameinrequiredtype
sessionIdpathyesinteger

Responses

200 SessionEnvelope

Authentication

cookieSession

backup

GET/api/v1/backup/status

The last completed and last failed backup run, and recent history

Responses

200 BackupStatusEnvelope

Authentication

cookieSession

brand-assets

GET/api/v1/brand

Get the organisation name and brand marks for any principal

Responses

200 BrandEnvelope

Authentication

bearerAuth or cookieSession

GET/api/v1/settings/brand-assets

List the brand marks stored on this instance

Responses

200 BrandAssetListEnvelope

Authentication

cookieSession

POST/api/v1/settings/brand-assets/{slot}

Store a brand mark, replacing whatever the slot held

Parameters

nameinrequiredtype
slotpathyesstring

Request body

BrandAssetUploadInput (required)

Responses

201 BrandAssetEnvelope

Authentication

cookieSession

DELETE/api/v1/settings/brand-assets/{slot}

Discard a stored brand mark and fall back to configuration

Parameters

nameinrequiredtype
slotpathyesstring

Responses

204

Authentication

cookieSession

client-tree

GET/api/v1/clients/{id}/ancestors

List ancestors of a client in the hierarchy

Parameters

nameinrequiredtype
idpathyesinteger

Responses

200 ClientHierarchyListEnvelope

Authentication

bearerAuth or cookieSession

GET/api/v1/clients/{id}/descendants

List descendants of a client in the hierarchy

Parameters

nameinrequiredtype
idpathyesinteger

Responses

200 ClientHierarchyListEnvelope

Authentication

bearerAuth or cookieSession

clients

GET/api/v1/clients

List clients

Parameters

nameinrequiredtype
cursorquerystring
per_pagequeryinteger
is_activequeryboolean
updated_sincequerystring
parent_client_idqueryinteger
bill_to_client_idqueryinteger
qquerystring

Responses

200 GeneralResourcePage

Authentication

bearerAuth or cookieSession

POST/api/v1/clients

Create a client

Request body

GeneralMutationInput (required)

Responses

201 GeneralResourceEnvelope

Authentication

bearerAuth or cookieSession

GET/api/v1/clients/{id}

Get a client

Parameters

nameinrequiredtype
idpathyesinteger

Responses

200 GeneralResourceEnvelope

Authentication

bearerAuth or cookieSession

PATCH/api/v1/clients/{id}

Update a client

Parameters

nameinrequiredtype
idpathyesinteger

Request body

GeneralMutationInput (required)

Responses

200 GeneralResourceEnvelope

Authentication

bearerAuth or cookieSession

DELETE/api/v1/clients/{id}

Delete or archive a client

Parameters

nameinrequiredtype
idpathyesinteger

Responses

204

Authentication

bearerAuth or cookieSession

contacts

GET/api/v1/contacts

List contacts

Parameters

nameinrequiredtype
cursorquerystring
per_pagequeryinteger
client_idqueryinteger
updated_sincequerystring

Responses

200 GeneralResourcePage

Authentication

bearerAuth or cookieSession

POST/api/v1/contacts

Create a contact

Request body

GeneralMutationInput (required)

Responses

201 GeneralResourceEnvelope

Authentication

bearerAuth or cookieSession

GET/api/v1/contacts/{id}

Get a contact

Parameters

nameinrequiredtype
idpathyesinteger

Responses

200 GeneralResourceEnvelope

Authentication

bearerAuth or cookieSession

PATCH/api/v1/contacts/{id}

Update a contact

Parameters

nameinrequiredtype
idpathyesinteger

Request body

GeneralMutationInput (required)

Responses

200 GeneralResourceEnvelope

Authentication

bearerAuth or cookieSession

DELETE/api/v1/contacts/{id}

Delete or archive a contact

Parameters

nameinrequiredtype
idpathyesinteger

Responses

204

Authentication

bearerAuth or cookieSession

email

GET/api/v1/email-log

List outbound email delivery outcomes

Parameters

nameinrequiredtype
statusquerystring: queued | sent | bounced | complained | failed
per_pagequeryinteger

Responses

200 EmailLogPage

Authentication

cookieSession

GET/api/v1/email-health

Get email reputation health with bounce and complaint rates

Responses

200 EmailHealthEnvelope

Authentication

cookieSession

GET/api/v1/email-template-variables

List the closed email-template variable vocabulary

Responses

200 EmailTemplateVariableCatalog

Authentication

cookieSession

GET/api/v1/email-templates

List active versioned email templates

Responses

200 EmailTemplatePage

Authentication

cookieSession

GET/api/v1/email-templates/{kind}/versions

List immutable versions of an email template

Parameters

nameinrequiredtype
kindpathyesstring

Responses

200 EmailTemplatePage

Authentication

cookieSession

POST/api/v1/email-templates/{kind}/versions

Append an immutable email-template version

Parameters

nameinrequiredtype
kindpathyesstring
Idempotency-Keyheaderyesstring

Request body

EmailTemplateVersionInput (required)

Responses

201 EmailTemplateEnvelope

Authentication

cookieSession

GET/api/v1/sender-identities

List organization sender identities and provider evidence

Responses

200 SenderIdentityPage

Authentication

cookieSession

POST/api/v1/sender-identities

Configure an unverified organization sender identity

Parameters

nameinrequiredtype
Idempotency-Keyheaderyesstring

Request body

SenderIdentityInput (required)

Responses

201 SenderIdentityEnvelope

Authentication

cookieSession

PATCH/api/v1/sender-identities/{id}

Update sender display and Reply-To configuration

Parameters

nameinrequiredtype
idpathyesinteger
Idempotency-Keyheaderyesstring

Request body

SenderIdentityPatch (required)

Responses

200 SenderIdentityEnvelope

Authentication

cookieSession

POST/api/v1/sender-identities/{id}/default

Select a fully verified default sender identity

Parameters

nameinrequiredtype
idpathyesinteger
Idempotency-Keyheaderyesstring

Request body

SenderIdentityVersionInput (required)

Responses

200 SenderIdentityEnvelope

Authentication

cookieSession

POST/api/v1/sender-identities/{id}/archive

Archive a non-default sender identity

Parameters

nameinrequiredtype
idpathyesinteger
Idempotency-Keyheaderyesstring

Request body

SenderIdentityVersionInput (required)

Responses

200 SenderIdentityEnvelope

Authentication

cookieSession

POST/api/v1/sender-identities/{id}/refresh

Refresh authoritative sender verification evidence from its provider

Parameters

nameinrequiredtype
idpathyesinteger
Idempotency-Keyheaderyesstring

Request body

SenderEvidenceRefreshInput (required)

Responses

200 SenderIdentityEnvelope

Authentication

cookieSession

POST/api/v1/sender-identities/{id}/test-send

Queue a persisted organization-template test to the acting administrator

Parameters

nameinrequiredtype
idpathyesinteger
Idempotency-Keyheaderyesstring

Request body

EmailTestSendInput (required)

Responses

202 EmailTestSendEnvelope

Authentication

cookieSession

estimate-messages

GET/api/v1/estimates/{id}/messages

List estimate lifecycle messages

Parameters

nameinrequiredtype
idpathyesinteger

Responses

200 EstimateMessageListEnvelope

Authentication

bearerAuth or cookieSession

POST/api/v1/estimates/{id}/messages

Create a retry-safe estimate lifecycle message

Parameters

nameinrequiredtype
idpathyesinteger
Idempotency-Keyheaderyesstring

Request body

EstimateMessageInput (required)

Responses

201 EstimateMessageCommandEnvelope

Authentication

bearerAuth or cookieSession

estimates

GET/api/v1/estimates

List estimates

Parameters

nameinrequiredtype
cursorquerystring
per_pagequeryinteger

Responses

200 EstimatePage

Authentication

bearerAuth or cookieSession

GET/api/v1/estimates/{id}

Get an estimate

Parameters

nameinrequiredtype
idpathyesinteger

Responses

200 EstimateEnvelope

Authentication

bearerAuth or cookieSession

POST/api/v1/estimates/{id}/convert

Convert an accepted estimate into one draft invoice

Parameters

nameinrequiredtype
idpathyesinteger
Idempotency-Keyheaderyesstring

Request body

EstimateConversionInput (required)

Responses

201 EstimateConversionEnvelope

Authentication

bearerAuth or cookieSession

expense-categories

GET/api/v1/expense-categories

List expense-categories

Parameters

nameinrequiredtype
cursorquerystring
per_pagequeryinteger
is_activequeryboolean
updated_sincequerystring

Responses

200 ExpenseCategoryPage

Authentication

bearerAuth or cookieSession

POST/api/v1/expense-categories

Create a expensecategory

Request body

ExpenseCategoryInput (required)

Responses

201 ExpenseCategoryEnvelope

Authentication

cookieSession

GET/api/v1/expense-categories/{id}

Get a expensecategory

Parameters

nameinrequiredtype
idpathyesinteger

Responses

200 ExpenseCategoryEnvelope

Authentication

bearerAuth or cookieSession

PATCH/api/v1/expense-categories/{id}

Update a expensecategory

Parameters

nameinrequiredtype
idpathyesinteger

Request body

ExpenseCategoryPatch (required)

Responses

200 ExpenseCategoryEnvelope

Authentication

cookieSession

DELETE/api/v1/expense-categories/{id}

Delete or archive a expensecategory

Parameters

nameinrequiredtype
idpathyesinteger

Responses

204

Authentication

cookieSession

expenses

GET/api/v1/expenses

List the acting user's expenses

Parameters

nameinrequiredtype
cursorquerystring
per_pagequeryinteger
user_idqueryinteger
client_idqueryinteger
project_idqueryinteger
spent_datequerystring
fromquerystring
toquerystring
approval_statusquerystring: unsubmitted | submitted | approved
invoice_idqueryinteger
is_billedqueryboolean
billablequeryboolean
updated_sincequerystring
expense_category_idqueryinteger
reimbursablequeryboolean
reimbursement_statusquerystring: none | pending | approved | paid

Responses

200 ExpensePage

Authentication

bearerAuth or cookieSession

POST/api/v1/expenses

Create an expense

Request body

ExpenseInput (required)

Responses

201 ExpenseEnvelope

Authentication

bearerAuth or cookieSession

GET/api/v1/expenses/{id}

Get an expense

Parameters

nameinrequiredtype
idpathyesinteger

Responses

200 ExpenseEnvelope

Authentication

bearerAuth or cookieSession

PATCH/api/v1/expenses/{id}

Update an expense

Parameters

nameinrequiredtype
idpathyesinteger

Request body

ExpensePatch (required)

Responses

200 ExpenseEnvelope

Authentication

bearerAuth or cookieSession

DELETE/api/v1/expenses/{id}

Delete an expense

Parameters

nameinrequiredtype
idpathyesinteger

Responses

200 ExpenseEnvelope

Authentication

bearerAuth or cookieSession

identity

GET/api/v1/whoami

Get the authenticated user and credential authority

Responses

200 WhoamiEnvelope

Authentication

bearerAuth or cookieSession

instance-theme

GET/api/v1/settings/theme

The palette this instance wears, or null for the built-in theme

Responses

200 InstanceThemeEnvelope

Authentication

cookieSession

POST/api/v1/settings/theme

Replace the instance palette, subject to the contrast rule

Request body

InstanceThemeInput (required)

Responses

200 InstanceThemeEnvelope

Authentication

cookieSession

DELETE/api/v1/settings/theme

Return this instance to the built-in theme

Responses

204

Authentication

cookieSession

integrations

GET/api/v1/integrations/quickbooks

Whether QuickBooks is configured, and the connected company

Responses

200 QuickBooksStatusEnvelope

Authentication

cookieSession

DELETE/api/v1/integrations/quickbooks

Disconnect the QuickBooks company and revoke the grant

Responses

204

Authentication

cookieSession

POST/api/v1/integrations/quickbooks/authorize

Begin connecting a QuickBooks company

Responses

200 QuickBooksAuthorizeEnvelope

Authentication

cookieSession

POST/api/v1/integrations/quickbooks/settings

Whether mirrored invoices offer QuickBooks payment links

Request body

QuickBooksSettingsInput (required)

Responses

200 QuickBooksConnectionEnvelope

Authentication

cookieSession

GET/api/v1/integrations/quickbooks/callback

Where Intuit returns an administrator after they approve

Parameters

nameinrequiredtype
codequerystring
statequerystring
realmIdquerystring

Responses

204 no content

Authentication

none

GET/api/v1/integrations/wise

Whether Wise is configured, and which profile pays

Responses

200 WiseStatusEnvelope

Authentication

cookieSession

GET/api/v1/integrations/wise/recipients

The Wise destinations the organisation can pay

Responses

200 WiseRecipientListEnvelope

Authentication

cookieSession

POST/api/v1/integrations/wise/recipients

Create a Wise destination from a contractor's email and link it

Request body

WiseOnboardInput (required)

Responses

201 WiseLinkEnvelope

Authentication

cookieSession

GET/api/v1/integrations/wise/proposals

People with no payout destination, and who at Wise they might be

Responses

200 WiseProposalListEnvelope

Authentication

cookieSession

GET/api/v1/integrations/wise/destinations/{userId}

Where one person is currently paid, if anywhere

Parameters

nameinrequiredtype
userIdpathyesinteger

Responses

200 WiseDestinationEnvelope

Authentication

cookieSession

DELETE/api/v1/integrations/wise/destinations/{userId}

Remove a person's Wise payout destination

Parameters

nameinrequiredtype
userIdpathyesinteger

Responses

204

Authentication

cookieSession

POST/api/v1/integrations/wise/contacts

Point a person at their own Wise profile, found by a Wisetag

Request body

WiseContactInput (required)

Responses

201 WiseContactEnvelope

Authentication

cookieSession

POST/api/v1/integrations/wise/recipients/link

Point a person at the Wise destination they are paid through

Request body

WiseLinkInput (required)

Responses

201 WiseLinkEnvelope

Authentication

cookieSession

DELETE/api/v1/integrations/wise/recipients/{accountId}

Detach a person's Wise payout destination

Parameters

nameinrequiredtype
accountIdpathyesinteger

Responses

204

Authentication

cookieSession

GET/api/v1/integrations/bill

Whether this deployment can reach BILL, and how it can deliver

Responses

200 BillStatusEnvelope

Authentication

cookieSession

GET/api/v1/integrations/bill/clients/{id}

Whether this client is billed through BILL

Parameters

nameinrequiredtype
idpathyesinteger

Responses

200 BillClientDeliveryEnvelope

Authentication

cookieSession

POST/api/v1/integrations/bill/clients/{id}

Bill this client through BILL, or stop

Parameters

nameinrequiredtype
idpathyesinteger

Request body

BillClientDeliveryInput (required)

Responses

200 BillClientDeliveryEnvelope

Authentication

cookieSession

invoice-messages

GET/api/v1/invoices/{id}/messages

List invoice lifecycle messages

Parameters

nameinrequiredtype
idpathyesinteger

Responses

200 InvoiceMessageListEnvelope

Authentication

bearerAuth or cookieSession

POST/api/v1/invoices/{id}/messages

Create an invoice lifecycle message

Parameters

nameinrequiredtype
idpathyesinteger
Idempotency-Keyheaderyesstring

Request body

InvoiceMessageInput (required)

Responses

201 InvoiceCommandEnvelope

Authentication

bearerAuth or cookieSession

POST/api/v1/invoices/{id}/transitions

Create the message equivalent of an invoice transition

Parameters

nameinrequiredtype
idpathyesinteger
Idempotency-Keyheaderyesstring

Request body

InvoiceTransitionInput (required)

Responses

201 InvoiceCommandEnvelope

Authentication

bearerAuth or cookieSession

POST/api/v1/invoices/{id}/deliveries

Confirm and durably enqueue invoice email delivery

Parameters

nameinrequiredtype
idpathyesinteger
Idempotency-Keyheaderyesstring

Request body

InvoiceEmailDeliveryInput (required)

Responses

202 InvoiceCommandEnvelope

Authentication

bearerAuth or cookieSession

invoice-payments

GET/api/v1/invoices/{id}/payments

List effective invoice payments

Parameters

nameinrequiredtype
idpathyesinteger

Responses

200 InvoicePaymentListEnvelope

Authentication

bearerAuth or cookieSession

POST/api/v1/invoices/{id}/payments

Record a retry-safe manual invoice payment

Parameters

nameinrequiredtype
idpathyesinteger
Idempotency-Keyheaderyesstring

Request body

InvoicePaymentInput (required)

Responses

201 InvoiceCommandEnvelope

Authentication

bearerAuth or cookieSession

PATCH/api/v1/invoices/{id}/payments/{paymentId}

Correct a retry-safe manual payment

Parameters

nameinrequiredtype
idpathyesinteger
paymentIdpathyesinteger
Idempotency-Keyheaderyesstring

Request body

InvoicePaymentUpdateInput (required)

Responses

200 InvoiceCommandEnvelope

Authentication

bearerAuth or cookieSession

DELETE/api/v1/invoices/{id}/payments/{paymentId}

Delete a retry-safe manual payment

Parameters

nameinrequiredtype
idpathyesinteger
paymentIdpathyesinteger
Idempotency-Keyheaderyesstring

Request body

VersionedRowDeleteInput (required)

Responses

200 InvoiceCommandEnvelope

Authentication

bearerAuth or cookieSession

invoices

GET/api/v1/invoices

List invoices

Parameters

nameinrequiredtype
cursorquerystring
per_pagequeryinteger
statequerystring
client_idquerystring

Responses

200 InvoicePage

Authentication

bearerAuth or cookieSession

GET/api/v1/invoices/{id}

Get an invoice

Parameters

nameinrequiredtype
idpathyesinteger

Responses

200 InvoiceEnvelope

Authentication

bearerAuth or cookieSession

PATCH/api/v1/invoices/{id}

Apply one retry-safe invoice edit

Parameters

nameinrequiredtype
idpathyesinteger
Idempotency-Keyheaderyesstring

Request body

InvoiceEditInput (required)

Responses

200 InvoiceCommandEnvelope

Authentication

bearerAuth or cookieSession

POST/api/v1/invoice-generations

Delegate transactional tracked-resource invoice generation

Parameters

nameinrequiredtype
Idempotency-Keyheaderyesstring

Request body

InvoiceGenerationInput (required)

Responses

201 InvoiceEnvelope

Authentication

bearerAuth or cookieSession

POST/api/v1/invoices/{id}/line-items

Add a parent-owned invoice line

Parameters

nameinrequiredtype
idpathyesinteger
Idempotency-Keyheaderyesstring

Request body

InvoiceLineInput (required)

Responses

201 InvoiceCommandEnvelope

Authentication

bearerAuth or cookieSession

PATCH/api/v1/invoices/{id}/line-items/{lineId}

Update a parent-owned invoice line

Parameters

nameinrequiredtype
idpathyesinteger
lineIdpathyesinteger
Idempotency-Keyheaderyesstring

Request body

InvoiceLineUpdateInput (required)

Responses

200 InvoiceCommandEnvelope

Authentication

bearerAuth or cookieSession

DELETE/api/v1/invoices/{id}/line-items/{lineId}

Delete a parent-owned invoice line

Parameters

nameinrequiredtype
idpathyesinteger
lineIdpathyesinteger
Idempotency-Keyheaderyesstring

Request body

VersionedRowDeleteInput (required)

Responses

200 InvoiceCommandEnvelope

Authentication

bearerAuth or cookieSession

money

POST/api/v1/invoices/{id}/released-time

Hand this invoice's time entries back, once it no longer stands

Parameters

nameinrequiredtype
idpathyesinteger

Responses

200 ReleasedTimeEnvelope

Authentication

cookieSession

GET/api/v1/invoices/{id}/document-preference

Whether this invoice will carry its document, and why

Parameters

nameinrequiredtype
idpathyesinteger

Responses

200 InvoiceDocumentPreferenceEnvelope

Authentication

cookieSession

POST/api/v1/invoices/{id}/document-preference

Attach this invoice's document, refuse it, or follow the organization

Parameters

nameinrequiredtype
idpathyesinteger

Responses

200 InvoiceDocumentPreferenceEnvelope

Authentication

cookieSession

GET/api/v1/settings/invoice-documents

Whether invoices carry their document by default

Responses

200 OrganizationInvoiceDocumentsEnvelope

Authentication

cookieSession

POST/api/v1/settings/invoice-documents

Set whether invoices carry their document by default

Responses

200 OrganizationInvoiceDocumentsEnvelope

Authentication

cookieSession

GET/api/v1/invoices/{id}/thank-you-preference

Whether this invoice will thank its client when it settles, and why

Parameters

nameinrequiredtype
idpathyesinteger

Responses

200 InvoiceThankYouPreferenceEnvelope

Authentication

cookieSession

POST/api/v1/invoices/{id}/thank-you-preference

Thank this invoice's client, refuse to, or follow the organization

Parameters

nameinrequiredtype
idpathyesinteger

Responses

200 InvoiceThankYouPreferenceEnvelope

Authentication

cookieSession

GET/api/v1/settings/invoice-thank-you

Whether settled invoices thank their client by default

Responses

200 OrganizationInvoiceThankYouEnvelope

Authentication

cookieSession

POST/api/v1/settings/invoice-thank-you

Set whether settled invoices thank their client by default

Responses

200 OrganizationInvoiceThankYouEnvelope

Authentication

cookieSession

GET/api/v1/settings/invoice-reminders

The default payment reminder policy for overdue invoices

Responses

200 OrganizationInvoiceRemindersEnvelope

Authentication

cookieSession

POST/api/v1/settings/invoice-reminders

Set, or switch off, the default payment reminder policy

Request body

OrganizationInvoiceRemindersInput (required)

Responses

200 OrganizationInvoiceRemindersEnvelope

Authentication

cookieSession

GET/api/v1/recurring-invoices/incomplete

Recurring definitions an import could not finish, and what bills against them

Responses

200 IncompleteRecurringInvoiceListEnvelope

Authentication

cookieSession

POST/api/v1/recurring-invoices/{id}/completion

Give an unfinished recurring definition its terms

Parameters

nameinrequiredtype
idpathyesinteger

Responses

200 RecurringInvoiceCompletionEnvelope

Authentication

cookieSession

operations

GET/api/v1/outbox-deliveries

List domain-event subscriber delivery outcomes

Parameters

nameinrequiredtype
statusquerystring: pending | processing | delivered | failed
per_pagequeryinteger

Responses

200 OutboxDeliveryPage

Authentication

cookieSession

POST/api/v1/outbox-deliveries/{subscriberId}/{eventId}/retry

Retry a failed domain-event subscriber delivery

Parameters

nameinrequiredtype
subscriberIdpathyesstring
eventIdpathyesstring

Responses

200 OutboxDeliveryEnvelope

Authentication

cookieSession

payout-accounts

GET/api/v1/users/{id}/payout-accounts

The payout accounts a person is currently payable through

Parameters

nameinrequiredtype
idpathyesinteger

Responses

200 PayoutAccountListEnvelope

Authentication

cookieSession

POST/api/v1/users/{id}/payout-accounts

Link a person to their account at a payout provider

Parameters

nameinrequiredtype
idpathyesinteger

Request body

PayoutAccountInput (required)

Responses

201 PayoutAccountEnvelope

Authentication

cookieSession

DELETE/api/v1/payout-accounts/{id}

Detach a payout account; re-attaching is a new link

Parameters

nameinrequiredtype
idpathyesinteger

Responses

204

Authentication

cookieSession

profile

GET/api/v1/profile

The signed-in user's own profile

Responses

200 ProfileEnvelope

Authentication

bearerAuth or cookieSession

PATCH/api/v1/profile

Update the signed-in user's own profile

Request body

ProfilePatch (required)

Responses

200 ProfileEnvelope

Authentication

bearerAuth or cookieSession

projects

GET/api/v1/projects

List projects

Parameters

nameinrequiredtype
cursorquerystring
per_pagequeryinteger
client_idqueryinteger
is_activequeryboolean
updated_sincequerystring
qquerystring

Responses

200 GeneralResourcePage

Authentication

bearerAuth or cookieSession

POST/api/v1/projects

Create a project

Request body

GeneralMutationInput (required)

Responses

201 GeneralResourceEnvelope

Authentication

bearerAuth or cookieSession

GET/api/v1/projects/{id}

Get a project

Parameters

nameinrequiredtype
idpathyesinteger

Responses

200 GeneralResourceEnvelope

Authentication

bearerAuth or cookieSession

PATCH/api/v1/projects/{id}

Update a project

Parameters

nameinrequiredtype
idpathyesinteger

Request body

GeneralMutationInput (required)

Responses

200 GeneralResourceEnvelope

Authentication

bearerAuth or cookieSession

DELETE/api/v1/projects/{id}

Delete or archive a project

Parameters

nameinrequiredtype
idpathyesinteger

Responses

204

Authentication

bearerAuth or cookieSession

recurring-invoices

GET/api/v1/recurring-invoices

List recurring invoice definitions

Parameters

nameinrequiredtype
cursorquerystring
per_pagequeryinteger

Responses

200 RecurringInvoicePage

Authentication

bearerAuth or cookieSession

POST/api/v1/recurring-invoices

Create a recurring invoice definition

Parameters

nameinrequiredtype
Idempotency-Keyheaderyesstring

Request body

RecurringInvoiceInput (required)

Responses

201 RecurringInvoiceEnvelope

Authentication

bearerAuth or cookieSession

GET/api/v1/recurring-invoices/{id}

Get a recurring invoice definition

Parameters

nameinrequiredtype
idpathyesinteger

Responses

200 RecurringInvoiceEnvelope

Authentication

bearerAuth or cookieSession

PATCH/api/v1/recurring-invoices/{id}

Replace a recurring invoice definition

Parameters

nameinrequiredtype
idpathyesinteger

Request body

RecurringInvoiceInput (required)

Responses

200 RecurringInvoiceEnvelope

Authentication

bearerAuth or cookieSession

DELETE/api/v1/recurring-invoices/{id}

Delete a recurring invoice definition

Parameters

nameinrequiredtype
idpathyesinteger

Responses

204

Authentication

bearerAuth or cookieSession

POST/api/v1/recurring-invoices/{id}/claim-backfill

Rehearse or apply the claims a band was issued too early to make

Parameters

nameinrequiredtype
idpathyesinteger
Idempotency-Keyheaderyesstring

Request body

BandClaimBackfillInput (required)

Responses

200 BandClaimBackfillEnvelope

Authentication

bearerAuth or cookieSession

POST/api/v1/recurring-invoices/{id}/generations

Issue the invoice this definition is due for

Parameters

nameinrequiredtype
idpathyesinteger
Idempotency-Keyheaderyesstring

Responses

201 RecurringGenerationEnvelope

Authentication

bearerAuth or cookieSession

reports

GET/api/v1/report-definitions/registry

List report builder fields and metrics

Responses

200 ReportDefinitionRegistryEnvelope

Authentication

bearerAuth or cookieSession

GET/api/v1/report-definitions

List report definitions visible to the acting user

Parameters

nameinrequiredtype
viewquerystring: all | yours | shared
qquerystring
custom_onlyqueryboolean

Responses

200 SavedReportListEnvelope

Authentication

bearerAuth or cookieSession

POST/api/v1/report-definitions

Save a report definition

Request body

SavedReportInput (required)

Responses

201 SavedReportEnvelope

Authentication

bearerAuth or cookieSession

POST/api/v1/report-definitions/preview

Run an unsaved report definition

Request body

SavedReportInput (required)

Responses

200 ReportRunnerEnvelope

Authentication

bearerAuth or cookieSession

GET/api/v1/report-definitions/{reportId}

Read a saved report definition

Parameters

nameinrequiredtype
reportIdpathyesstring

Responses

200 SavedReportEnvelope

Authentication

bearerAuth or cookieSession

PATCH/api/v1/report-definitions/{reportId}

Update a saved report at an expected version

Parameters

nameinrequiredtype
reportIdpathyesstring

Request body

SavedReportUpdate (required)

Responses

200 SavedReportEnvelope

Authentication

bearerAuth or cookieSession

DELETE/api/v1/report-definitions/{reportId}

Delete an owned saved report

Parameters

nameinrequiredtype
reportIdpathyesstring

Responses

204

Authentication

bearerAuth or cookieSession

POST/api/v1/report-definitions/{reportId}/duplicate

Duplicate a visible report into the acting user's library

Parameters

nameinrequiredtype
reportIdpathyesstring

Responses

201 SavedReportEnvelope

Authentication

bearerAuth or cookieSession

POST/api/v1/report-definitions/{reportId}/pin

Pin a visible saved report

Parameters

nameinrequiredtype
reportIdpathyesstring

Responses

204

Authentication

bearerAuth or cookieSession

DELETE/api/v1/report-definitions/{reportId}/pin

Unpin a visible saved report

Parameters

nameinrequiredtype
reportIdpathyesstring

Responses

204

Authentication

bearerAuth or cookieSession

POST/api/v1/report-definitions/{reportId}/shares/{userId}

Share an owned report with a teammate

Parameters

nameinrequiredtype
reportIdpathyesstring
userIdpathyesinteger

Responses

204

Authentication

bearerAuth or cookieSession

DELETE/api/v1/report-definitions/{reportId}/shares/{userId}

Revoke a teammate's report share

Parameters

nameinrequiredtype
reportIdpathyesstring
userIdpathyesinteger

Responses

204

Authentication

bearerAuth or cookieSession

POST/api/v1/report-definitions/{reportId}/run

Run the exact current version of a saved report

Parameters

nameinrequiredtype
reportIdpathyesstring

Responses

200 ReportRunnerEnvelope

Authentication

bearerAuth or cookieSession

GET/api/v1/reports/my-hours

Report the acting user's own tracked hours by project

Parameters

nameinrequiredtype
fromqueryyesstring
toqueryyesstring
project_idqueryinteger

Responses

200 MyHoursReportEnvelope

Authentication

bearerAuth or cookieSession

GET/api/v1/reports/time

Report tracked time by client, project, task and teammate

Parameters

nameinrequiredtype
fromqueryyesstring
toqueryyesstring
include_fixed_feequeryboolean

Responses

200 TimeReportEnvelope

Authentication

bearerAuth or cookieSession

GET/api/v1/reports/invoiced

List invoices issued in a period with paid and balance amounts

Parameters

nameinrequiredtype
fromqueryyesstring
toqueryyesstring
client_idqueryinteger
statusquerystring: draft | open | paid | closed

Responses

200 InvoicedReportEnvelope

Authentication

bearerAuth or cookieSession

GET/api/v1/reports/payments-received

List invoice payments received in a period

Parameters

nameinrequiredtype
fromqueryyesstring
toqueryyesstring
client_idqueryinteger

Responses

200 PaymentsReceivedReportEnvelope

Authentication

bearerAuth or cookieSession

GET/api/v1/reports/receivables

Age outstanding invoice balances by client as of a date

Parameters

nameinrequiredtype
as_ofqueryyesstring
client_idqueryinteger

Responses

200 ReceivablesReportEnvelope

Authentication

bearerAuth or cookieSession

GET/api/v1/reports/contractor

Total what each person cost over a period

Parameters

nameinrequiredtype
fromqueryyesstring
toqueryyesstring

Responses

200 ContractorCostReportEnvelope

Authentication

bearerAuth or cookieSession

GET/api/v1/reports/month-end

What a month-end pack would send, before anybody sends it

Parameters

nameinrequiredtype
fromqueryyesstring
toqueryyesstring

Responses

200 MonthEndManifestEnvelope

Authentication

bearerAuth or cookieSession

GET/api/v1/reports/banded-months

What a banded month was worth at full rates, against what it charged

Parameters

nameinrequiredtype
fromqueryyesstring
toqueryyesstring

Responses

200 BandedMonthReportEnvelope

Authentication

bearerAuth or cookieSession

GET/api/v1/reports/band-cost-alert

Read the organisation cost-share threshold for banded work

Responses

200 BandCostAlertEnvelope

Authentication

bearerAuth or cookieSession

POST/api/v1/reports/band-cost-alert

Set the organisation cost-share threshold for banded work

Request body

BandCostAlertInput (required)

Responses

200 BandCostAlertEnvelope

Authentication

bearerAuth or cookieSession

GET/api/v1/reports/profitability

Revenue, cost and profit per project against the window before it

Parameters

nameinrequiredtype
fromqueryyesstring
toqueryyesstring
project_statusquerystring: all | active | archived
billing_methodquerystring: non_billable | time_materials | fixed_fee
manager_idqueryinteger
tag_idqueryinteger

Responses

200 ProfitabilityReportEnvelope

Authentication

bearerAuth or cookieSession

GET/api/v1/reports/detailed-expense

List every expense in a period, one row each

Parameters

nameinrequiredtype
fromqueryyesstring
toqueryyesstring
client_idqueryinteger
project_idqueryinteger
category_idqueryinteger
user_idqueryinteger
billablequeryboolean
reimbursablequeryboolean
invoice_statequerystring: all | invoiced | uninvoiced
active_projects_onlyqueryboolean

Responses

200 DetailedExpenseReportEnvelope

Authentication

bearerAuth or cookieSession

GET/api/v1/reports/uninvoiced

Report uninvoiced tracked time and expenses

Parameters

nameinrequiredtype
fromqueryyesstring
toqueryyesstring
client_idqueryinteger
project_idqueryinteger

Responses

200 UninvoicedReportEnvelope

Authentication

bearerAuth or cookieSession

GET/api/v1/reports/detailed-time

List tracked time by date, task and person

Parameters

nameinrequiredtype
fromqueryyesstring
toqueryyesstring
client_idqueryinteger
project_idqueryinteger
task_idqueryinteger
user_idqueryinteger
role_idqueryinteger
tag_idqueryinteger
hoursquerystring: all | billable | non_billable | uninvoiced | claimed | unclaimed
grainquerystring: day | entry
invoice_statequerystring: all | invoiced | uninvoiced
active_projects_onlyqueryboolean

Responses

200 DetailedTimeReportEnvelope

Authentication

bearerAuth or cookieSession

POST/api/v1/reports/detailed-time/actions

Apply a confirmed idempotent action to selected time rows

Request body

ReportTimeActionInput (required)

Responses

200 ReportTimeActionEnvelope

Authentication

bearerAuth or cookieSession

GET/api/v1/reports/client-rollups/{clientId}

Roll up reporting metrics through a client subtree

Parameters

nameinrequiredtype
clientIdpathyesinteger
fromqueryyesstring
toqueryyesstring

Responses

200 ClientRollupReportEnvelope

Authentication

bearerAuth or cookieSession

GET/api/v1/reports/project-budgets

Report budget consumption for every visible project

Parameters

nameinrequiredtype
fromqueryyesstring
toqueryyesstring

Responses

200 ProjectBudgetSummaryListEnvelope

Authentication

bearerAuth or cookieSession

GET/api/v1/reports/project-budget/{projectId}

Report project budget consumption

Parameters

nameinrequiredtype
projectIdpathyesinteger
fromqueryyesstring
toqueryyesstring

Responses

200 ProjectBudgetReportEnvelope

Authentication

bearerAuth or cookieSession

retainers

GET/api/v1/retainers

List retainers with live balances

Parameters

nameinrequiredtype
cursorquerystring
per_pagequeryinteger
client_idquerystring

Responses

200 RetainerPage

Authentication

bearerAuth or cookieSession

POST/api/v1/retainers

Create a single-denomination retainer

Parameters

nameinrequiredtype
Idempotency-Keyheaderyesstring

Request body

RetainerInput (required)

Responses

201 RetainerEnvelope

Authentication

bearerAuth or cookieSession

GET/api/v1/retainers/{id}

Get a retainer

Parameters

nameinrequiredtype
idpathyesinteger

Responses

200 RetainerEnvelope

Authentication

bearerAuth or cookieSession

PATCH/api/v1/retainers/{id}

Update a retainer

Parameters

nameinrequiredtype
idpathyesinteger

Request body

RetainerPatch (required)

Responses

200 RetainerEnvelope

Authentication

bearerAuth or cookieSession

GET/api/v1/retainers/{id}/ledger

List append-only retainer movements

Parameters

nameinrequiredtype
idpathyesinteger

Responses

200 RetainerLedgerListEnvelope

Authentication

bearerAuth or cookieSession

POST/api/v1/retainers/{id}/ledger

Append a stable retainer movement

Parameters

nameinrequiredtype
idpathyesinteger
Idempotency-Keyheaderyesstring

Request body

RetainerLedgerInput (required)

Responses

201 RetainerLedgerMutationEnvelope

Authentication

bearerAuth or cookieSession

POST/api/v1/retainers/{id}/drawdowns

Draw down a retainer and return its new balance

Parameters

nameinrequiredtype
idpathyesinteger
Idempotency-Keyheaderyesstring

Request body

RetainerDrawdownInput (required)

Responses

201 RetainerLedgerMutationEnvelope

Authentication

bearerAuth or cookieSession

roles

GET/api/v1/roles

List roles

Parameters

nameinrequiredtype
cursorquerystring
per_pagequeryinteger

Responses

200 GeneralResourcePage

Authentication

bearerAuth or cookieSession

POST/api/v1/roles

Create a role

Request body

GeneralMutationInput (required)

Responses

201 GeneralResourceEnvelope

Authentication

cookieSession

GET/api/v1/roles/{id}

Get a role

Parameters

nameinrequiredtype
idpathyesinteger

Responses

200 GeneralResourceEnvelope

Authentication

bearerAuth or cookieSession

PATCH/api/v1/roles/{id}

Update a role

Parameters

nameinrequiredtype
idpathyesinteger

Request body

GeneralMutationInput (required)

Responses

200 GeneralResourceEnvelope

Authentication

cookieSession

DELETE/api/v1/roles/{id}

Delete or archive a role

Parameters

nameinrequiredtype
idpathyesinteger

Responses

204

Authentication

cookieSession

service

GET/api/v1

Get API service metadata

Responses

200 ServiceEnvelope

Authentication

bearerAuth or cookieSession

sso-domains

GET/api/v1/settings/sso-domains

List SSO provisioning domains and their DNS challenges

Responses

200 SsoDomainListEnvelope

Authentication

cookieSession

POST/api/v1/settings/sso-domains

Claim a domain and issue its DNS challenge

Request body

SsoDomainInput (required)

Responses

201 SsoDomainEnvelope

Authentication

cookieSession

DELETE/api/v1/settings/sso-domains/{id}

Remove a provisioning domain

Parameters

nameinrequiredtype
idpathyesinteger

Responses

204

Authentication

cookieSession

POST/api/v1/settings/sso-domains/{id}/verify

Check the DNS challenge and record the result

Parameters

nameinrequiredtype
idpathyesinteger

Responses

200 SsoDomainCheckEnvelope

Authentication

cookieSession

task-assignments

GET/api/v1/task-assignments

List task-assignments

Parameters

nameinrequiredtype
cursorquerystring
per_pagequeryinteger
project_idqueryinteger
task_idqueryinteger
is_activequeryboolean
updated_sincequerystring

Responses

200 GeneralResourcePage

Authentication

bearerAuth or cookieSession

POST/api/v1/task-assignments

Create a taskassignment

Request body

GeneralMutationInput (required)

Responses

201 GeneralResourceEnvelope

Authentication

bearerAuth or cookieSession

GET/api/v1/task-assignments/{id}

Get a taskassignment

Parameters

nameinrequiredtype
idpathyesinteger

Responses

200 GeneralResourceEnvelope

Authentication

bearerAuth or cookieSession

PATCH/api/v1/task-assignments/{id}

Update a taskassignment

Parameters

nameinrequiredtype
idpathyesinteger

Request body

GeneralMutationInput (required)

Responses

200 GeneralResourceEnvelope

Authentication

bearerAuth or cookieSession

DELETE/api/v1/task-assignments/{id}

Delete or archive a taskassignment

Parameters

nameinrequiredtype
idpathyesinteger

Responses

204

Authentication

bearerAuth or cookieSession

tasks

GET/api/v1/tasks

List tasks

Parameters

nameinrequiredtype
cursorquerystring
per_pagequeryinteger
is_activequeryboolean
updated_sincequerystring
qquerystring

Responses

200 GeneralResourcePage

Authentication

bearerAuth or cookieSession

POST/api/v1/tasks

Create a task

Request body

GeneralMutationInput (required)

Responses

201 GeneralResourceEnvelope

Authentication

bearerAuth or cookieSession

GET/api/v1/tasks/{id}

Get a task

Parameters

nameinrequiredtype
idpathyesinteger

Responses

200 GeneralResourceEnvelope

Authentication

bearerAuth or cookieSession

PATCH/api/v1/tasks/{id}

Update a task

Parameters

nameinrequiredtype
idpathyesinteger

Request body

GeneralMutationInput (required)

Responses

200 GeneralResourceEnvelope

Authentication

bearerAuth or cookieSession

DELETE/api/v1/tasks/{id}

Delete or archive a task

Parameters

nameinrequiredtype
idpathyesinteger

Responses

204

Authentication

bearerAuth or cookieSession

team

GET/api/v1/team/status

Get Team module availability for navigation

Responses

200 TeamStatusEnvelope

Authentication

bearerAuth or cookieSession

GET/api/v1/team/people

List Team people with authoritative utilization

Parameters

nameinrequiredtype
cursorquerystring
per_pagequeryinteger
fromqueryyesstring
toqueryyesstring
is_activequeryboolean

Responses

200 TeamPersonSummaryPage

Authentication

bearerAuth or cookieSession

GET/api/v1/team/people/{id}

Get a Team person editor record

Parameters

nameinrequiredtype
idpathyesinteger

Responses

200 TeamPersonEnvelope

Authentication

bearerAuth or cookieSession

PATCH/api/v1/team/people/{id}

Update a Team person with optimistic concurrency

Parameters

nameinrequiredtype
idpathyesinteger
Idempotency-Keyheaderyesstring

Request body

TeamPersonPatch (required)

Responses

200 TeamCommandReceiptEnvelope

Authentication

cookieSession

GET/api/v1/team/catalog

Get roles, departments, and assignable projects

Responses

200 TeamCatalogEnvelope

Authentication

bearerAuth or cookieSession

POST/api/v1/team/people/{id}/project-assignments/replace

Replace a person's active project assignments

Parameters

nameinrequiredtype
idpathyesinteger
Idempotency-Keyheaderyesstring

Request body

TeamAssignmentReplaceInput (required)

Responses

200 TeamCommandReceiptEnvelope

Authentication

cookieSession

POST/api/v1/team/people/{id}/notifications

Persist inactive notification preferences; delivery is unavailable

Parameters

nameinrequiredtype
idpathyesinteger
Idempotency-Keyheaderyesstring

Request body

TeamNotificationInput (required)

Responses

200 TeamCommandReceiptEnvelope

Authentication

cookieSession

POST/api/v1/team/people/{id}/rates

Append an effective-dated person rate

Parameters

nameinrequiredtype
idpathyesinteger
Idempotency-Keyheaderyesstring

Request body

TeamRateInput (required)

Responses

201 TeamCommandReceiptEnvelope

Authentication

cookieSession

DELETE/api/v1/team/people/{id}/rates/{rateId}

Remove a person rate that has priced nothing

Parameters

nameinrequiredtype
idpathyesinteger
rateIdpathyesinteger
Idempotency-Keyheaderyesstring

Request body

TeamRateRemovalInput (required)

Responses

200 TeamCommandReceiptEnvelope

Authentication

cookieSession

time-entries

GET/api/v1/time-entry-settings

Get organization time-entry display and entry-mode settings

Responses

200 TimeEntrySettingsEnvelope

Authentication

bearerAuth or cookieSession

GET/api/v1/time-entry-note-settings

Get organization time-entry note settings

Responses

200 TimeEntryNoteSettingsEnvelope

Authentication

bearerAuth or cookieSession

PATCH/api/v1/time-entry-note-settings

Update organization time-entry note settings

Request body

TimeEntryNoteSettingsPatch (required)

Responses

200 TimeEntryNoteSettingsEnvelope

Authentication

cookieSession

GET/api/v1/time-entry-options

List the acting user's active project and task combinations

Responses

200 TimeEntryOptionListEnvelope

Authentication

bearerAuth or cookieSession

GET/api/v1/time-entries

List the acting user's time entries

Parameters

nameinrequiredtype
cursorquerystring
per_pagequeryinteger
user_idqueryinteger
client_idqueryinteger
project_idqueryinteger
spent_datequerystring
fromquerystring
toquerystring
approval_statusquerystring: unsubmitted | submitted | approved
invoice_idqueryinteger
is_billedqueryboolean
billablequeryboolean
updated_sincequerystring
task_idqueryinteger
is_runningqueryboolean
budgetedqueryboolean
external_reference_idquerystring

Responses

200 TimeEntryPage

Authentication

bearerAuth or cookieSession

POST/api/v1/time-entries

Create or start a time entry

Request body

TimeEntryInput (required)

Responses

201 TimeEntryEnvelope

Authentication

bearerAuth or cookieSession

GET/api/v1/time-entries/{id}

Get a time entry

Parameters

nameinrequiredtype
idpathyesinteger

Responses

200 TimeEntryEnvelope

Authentication

bearerAuth or cookieSession

PATCH/api/v1/time-entries/{id}

Update a time entry

Parameters

nameinrequiredtype
idpathyesinteger

Request body

TimeEntryPatch (required)

Responses

200 TimeEntryEnvelope

Authentication

bearerAuth or cookieSession

DELETE/api/v1/time-entries/{id}

Delete a time entry

Parameters

nameinrequiredtype
idpathyesinteger

Responses

200 TimeEntryEnvelope

Authentication

bearerAuth or cookieSession

POST/api/v1/time-entries/{id}/stop

Stop a time entry

Parameters

nameinrequiredtype
idpathyesinteger

Responses

200 TimeEntryEnvelope

Authentication

bearerAuth or cookieSession

POST/api/v1/time-entries/{id}/restart

Restart a time entry

Parameters

nameinrequiredtype
idpathyesinteger

Responses

200 TimeEntryEnvelope

Authentication

bearerAuth or cookieSession

timesheet-approvals

GET/api/v1/timesheet-submissions

List the acting user's timesheet submissions

Parameters

nameinrequiredtype
cursorquerystring
per_pagequeryinteger
period_startquerystring
period_endquerystring

Responses

200 TimesheetSubmissionPage

Authentication

bearerAuth or cookieSession

POST/api/v1/timesheet-submissions

Submit a timesheet period for approval

Request body

TimesheetSubmissionInput (required)

Responses

200 TimesheetSubmissionEnvelope, 201 TimesheetSubmissionEnvelope

Authentication

bearerAuth or cookieSession

GET/api/v1/timesheet-submissions/pending

List timesheet submissions awaiting review

Parameters

nameinrequiredtype
cursorquerystring
per_pagequeryinteger
period_startquerystring
period_endquerystring
user_idqueryinteger
client_idqueryinteger
project_idqueryinteger

Responses

200 TimesheetSubmissionPage

Authentication

bearerAuth or cookieSession

GET/api/v1/timesheet-submissions/approved

List recently approved timesheet periods available to reopen

Parameters

nameinrequiredtype
cursorquerystring
per_pagequeryinteger
period_startquerystring
period_endquerystring
user_idqueryinteger
client_idqueryinteger
project_idqueryinteger

Responses

200 TimesheetSubmissionPage

Authentication

bearerAuth or cookieSession

GET/api/v1/timesheet-submissions/{id}

Get an owner- or approver-visible timesheet submission

Parameters

nameinrequiredtype
idpathyesinteger

Responses

200 TimesheetSubmissionDetailEnvelope

Authentication

bearerAuth or cookieSession

POST/api/v1/timesheet-submissions/bulk-approve

Approve an explicit selection of submitted timesheet periods

Parameters

nameinrequiredtype
Idempotency-Keyheaderyesstring

Request body

TimesheetBulkApprovalInput (required)

Responses

200 TimesheetBulkApprovalResult

Authentication

bearerAuth or cookieSession

POST/api/v1/timesheet-submissions/{id}/approve

Approve a submitted timesheet period

Parameters

nameinrequiredtype
idpathyesinteger

Responses

200 TimesheetSubmissionEnvelope

Authentication

bearerAuth or cookieSession

POST/api/v1/timesheet-submissions/{id}/reject

Reject a submitted timesheet period with a reason

Parameters

nameinrequiredtype
idpathyesinteger

Request body

TimesheetRejectionInput (required)

Responses

200 TimesheetSubmissionEnvelope

Authentication

bearerAuth or cookieSession

POST/api/v1/timesheet-submissions/{id}/unsubmit

Take back your own timesheet before anyone has reviewed it

Parameters

nameinrequiredtype
idpathyesinteger

Responses

200 TimesheetSubmissionEnvelope

Authentication

cookieSession

POST/api/v1/timesheet-submissions/{id}/withdraw

Explicitly withdraw or reopen a timesheet period

Parameters

nameinrequiredtype
idpathyesinteger

Request body

TimesheetWithdrawalInput (required)

Responses

200 TimesheetSubmissionEnvelope

Authentication

cookieSession

timesheet-locks

GET/api/v1/timesheet-lock-policy

Get the organization timesheet lock policy

Responses

200 TimesheetLockPolicyEnvelope

Authentication

cookieSession

PATCH/api/v1/timesheet-lock-policy

Update the organization timesheet lock policy

Request body

TimesheetLockPolicyPatch (required)

Responses

200 TimesheetLockPolicyEnvelope

Authentication

cookieSession

GET/api/v1/timesheet-locks

List durable timesheet lock windows

Parameters

nameinrequiredtype
cursorquerystring
per_pagequeryinteger
activequeryboolean
kindquerystring: manual | auto

Responses

200 TimesheetLockWindowPage

Authentication

cookieSession

POST/api/v1/timesheet-locks

Create an organization-wide manual lock cutoff

Parameters

nameinrequiredtype
Idempotency-Keyheaderyesstring

Request body

TimesheetManualLockInput (required)

Responses

201 TimesheetLockWindowEnvelope

Authentication

cookieSession

GET/api/v1/timesheet-locks/{id}

Get a durable timesheet lock window

Parameters

nameinrequiredtype
idpathyesinteger

Responses

200 TimesheetLockWindowEnvelope

Authentication

cookieSession

POST/api/v1/timesheet-locks/{id}/unlock

Explicitly unlock a timesheet lock window

Parameters

nameinrequiredtype
idpathyesinteger

Request body

TimesheetUnlockInput (required)

Responses

200 TimesheetLockWindowEnvelope

Authentication

cookieSession

two-factor

GET/api/v1/two-factor

Report whether a second factor is enrolled, pending, or absent

Responses

200 TwoFactorStatusEnvelope

Authentication

cookieSession

POST/api/v1/two-factor

Issue a TOTP seed and recovery codes, pending confirmation

Responses

201 TwoFactorEnrolmentEnvelope

Authentication

cookieSession

DELETE/api/v1/two-factor

Remove the second factor, on presentation of a current code

Request body

TwoFactorCodeInput (required)

Responses

200 TwoFactorStatusEnvelope

Authentication

cookieSession

POST/api/v1/two-factor/confirm

Prove the authenticator holds the seed and turn the factor on

Request body

TwoFactorCodeInput (required)

Responses

200 TwoFactorStatusEnvelope

Authentication

cookieSession

user-assignments

GET/api/v1/user-assignments

List user-assignments

Parameters

nameinrequiredtype
cursorquerystring
per_pagequeryinteger
project_idqueryinteger
user_idqueryinteger
is_activequeryboolean
updated_sincequerystring

Responses

200 GeneralResourcePage

Authentication

bearerAuth or cookieSession

POST/api/v1/user-assignments

Create a userassignment

Request body

GeneralMutationInput (required)

Responses

201 GeneralResourceEnvelope

Authentication

cookieSession

GET/api/v1/user-assignments/{id}

Get a userassignment

Parameters

nameinrequiredtype
idpathyesinteger

Responses

200 GeneralResourceEnvelope

Authentication

bearerAuth or cookieSession

PATCH/api/v1/user-assignments/{id}

Update a userassignment

Parameters

nameinrequiredtype
idpathyesinteger

Request body

GeneralMutationInput (required)

Responses

200 GeneralResourceEnvelope

Authentication

cookieSession

DELETE/api/v1/user-assignments/{id}

Delete or archive a userassignment

Parameters

nameinrequiredtype
idpathyesinteger

Responses

204

Authentication

cookieSession

user-rates

GET/api/v1/users/{userId}/billable-rates

List billable rates for a user

Parameters

nameinrequiredtype
userIdpathyesinteger
cursorquerystring
per_pagequeryinteger

Responses

200 UserRatePage

Authentication

bearerAuth or cookieSession

POST/api/v1/users/{userId}/billable-rates

Append a billable rate for a user

Parameters

nameinrequiredtype
userIdpathyesinteger
Idempotency-Keyheaderyesstring

Request body

UserRateInput (required)

Responses

201 UserRateEnvelope

Authentication

cookieSession

PATCH/api/v1/users/{userId}/billable-rates

BillableRate records are append-only

Parameters

nameinrequiredtype
userIdpathyesinteger

Responses

204 no content

Authentication

bearerAuth or cookieSession

DELETE/api/v1/users/{userId}/billable-rates

BillableRate records are append-only

Parameters

nameinrequiredtype
userIdpathyesinteger

Responses

204 no content

Authentication

bearerAuth or cookieSession

GET/api/v1/users/{userId}/billable-rates/{id}

Get a billable rate

Parameters

nameinrequiredtype
userIdpathyesinteger
idpathyesinteger

Responses

200 UserRateEnvelope

Authentication

bearerAuth or cookieSession

PATCH/api/v1/users/{userId}/billable-rates/{id}

BillableRate records are append-only

Parameters

nameinrequiredtype
userIdpathyesinteger
idpathyesinteger

Responses

204 no content

Authentication

bearerAuth or cookieSession

DELETE/api/v1/users/{userId}/billable-rates/{id}

BillableRate records are append-only

Parameters

nameinrequiredtype
userIdpathyesinteger
idpathyesinteger

Responses

204 no content

Authentication

bearerAuth or cookieSession

GET/api/v1/users/{userId}/cost-rates

List cost rates for a user

Parameters

nameinrequiredtype
userIdpathyesinteger
cursorquerystring
per_pagequeryinteger

Responses

200 UserRatePage

Authentication

bearerAuth or cookieSession

POST/api/v1/users/{userId}/cost-rates

Append a cost rate for a user

Parameters

nameinrequiredtype
userIdpathyesinteger
Idempotency-Keyheaderyesstring

Request body

UserRateInput (required)

Responses

201 UserRateEnvelope

Authentication

cookieSession

PATCH/api/v1/users/{userId}/cost-rates

CostRate records are append-only

Parameters

nameinrequiredtype
userIdpathyesinteger

Responses

204 no content

Authentication

bearerAuth or cookieSession

DELETE/api/v1/users/{userId}/cost-rates

CostRate records are append-only

Parameters

nameinrequiredtype
userIdpathyesinteger

Responses

204 no content

Authentication

bearerAuth or cookieSession

GET/api/v1/users/{userId}/cost-rates/{id}

Get a cost rate

Parameters

nameinrequiredtype
userIdpathyesinteger
idpathyesinteger

Responses

200 UserRateEnvelope

Authentication

bearerAuth or cookieSession

PATCH/api/v1/users/{userId}/cost-rates/{id}

CostRate records are append-only

Parameters

nameinrequiredtype
userIdpathyesinteger
idpathyesinteger

Responses

204 no content

Authentication

bearerAuth or cookieSession

DELETE/api/v1/users/{userId}/cost-rates/{id}

CostRate records are append-only

Parameters

nameinrequiredtype
userIdpathyesinteger
idpathyesinteger

Responses

204 no content

Authentication

bearerAuth or cookieSession

users

GET/api/v1/users

List users

Parameters

nameinrequiredtype
cursorquerystring
per_pagequeryinteger
is_activequeryboolean
updated_sincequerystring
profilequerystring: member | project_manager | people_admin | accounting | executive_manager | administrator
is_contractorqueryboolean

Responses

200 GeneralResourcePage

Authentication

bearerAuth or cookieSession

POST/api/v1/users

Create a user

Request body

GeneralMutationInput (required)

Responses

201 GeneralResourceEnvelope

Authentication

cookieSession

GET/api/v1/users/{id}

Get a user

Parameters

nameinrequiredtype
idpathyesinteger

Responses

200 GeneralResourceEnvelope

Authentication

bearerAuth or cookieSession

PATCH/api/v1/users/{id}

Update a user

Parameters

nameinrequiredtype
idpathyesinteger

Request body

GeneralMutationInput (required)

Responses

200 GeneralResourceEnvelope

Authentication

cookieSession

DELETE/api/v1/users/{id}

Delete or archive a user

Parameters

nameinrequiredtype
idpathyesinteger

Responses

204

Authentication

cookieSession

POST/api/v1/users/{id}/emails

Add a second email address and send its verification

Parameters

nameinrequiredtype
idpathyesinteger

Request body

UserEmailInput (required)

Responses

202 UserEmailAcceptedEnvelope

Authentication

cookieSession

Schemas

ActivityLog

fieldtyperequired
event_idstringyes
event_typestringyes
aggregateOutboxAggregateyes
payloadobjectyes
occurred_atstring (date-time)yes
available_atstring (date-time)yes
recorded_atstring (date-time)yes

ActivityLogPage

fieldtyperequired
dataarray of ActivityLogyes
linksLinksyes

ApiToken

fieldtyperequired
idintegeryes
namestringyes
scopesarray of stringyes
token_hintstringyes
created_atstring (date-time)yes
last_used_atstring | nullyes
expires_atstring | nullyes
revoked_atstring | nullyes

ApiTokenEnvelope

fieldtyperequired
dataApiTokenyes
linksLinksyes

ApiTokenListEnvelope

fieldtyperequired
dataarray of ApiTokenyes
linksLinksyes

Attachment

fieldtyperequired
idintegeryes
namestringyes
content_hashstringyes
byte_sizeintegeryes
content_typestringyes
uploaded_by_user_idinteger | nullyes
created_atstring (date-time)yes
updated_atstring (date-time)yes

AttachmentEnvelope

fieldtyperequired
dataAttachmentyes
linksLinksyes

AttachmentListEnvelope

fieldtyperequired
dataarray of Attachmentyes
linksLinksyes

AttachmentUploadInput

fieldtyperequired
filestring (binary)yes

AuthAccepted

fieldtyperequired
statusverification_sent | reset_requestedyes

AuthAcceptedEnvelope

fieldtyperequired
dataAuthAcceptedyes

AuthPrincipal

fieldtyperequired
statusverified | authenticated | password_resetyes
user_idintegeryes
profilemember | project_manager | people_admin | accounting | executive_manager | administratoryes
manager_grantsarray of stringyes

AuthPrincipalEnvelope

fieldtyperequired
dataAuthPrincipalyes

AuthTokenInput

fieldtyperequired
tokenstringyes

BackupRun

fieldtyperequired
idintegeryes
statusrunning | completed | failedyes
triggernightly | manualyes
started_atstring (date-time)yes
completed_atstring | nullyes
r2_prefixstring | nullyes
table_countinteger | nullyes
total_rowsinteger | nullyes
error_messagestring | nullyes

BackupStatusEnvelope

fieldtyperequired
dataobjectyes
linksLinksyes

BandClaimBackfill

fieldtyperequired
run_idstringyes
appliedbooleanyes
invoicesarray of BandClaimBackfillLineyes
remaining_entry_countintegeryes
remaining_secondsintegeryes

BandClaimBackfillEnvelope

fieldtyperequired
dataBandClaimBackfillyes

BandClaimBackfillInput

fieldtyperequired
invoice_idsarray of integeryes
project_idsarray of integer
applyboolean

BandClaimBackfillLine

fieldtyperequired
invoice_idintegeryes
numberstringyes
issue_datestring (date)yes
statestringyes
amount_centsintegeryes
entry_countintegeryes
secondsintegeryes
billable_value_centsintegeryes
entries_without_billable_rateintegeryes
foregone_billable_centsintegeryes

BandCostAlert

fieldtyperequired
basis_pointsintegeryes

BandCostAlertEnvelope

fieldtyperequired
dataBandCostAlertyes

BandCostAlertInput

fieldtyperequired
basis_pointsintegeryes

BandedMonthReport

fieldtyperequired
fromstring (date)yes
tostring (date)yes
rowsarray of BandedMonthRowyes

BandedMonthReportEnvelope

fieldtyperequired
dataBandedMonthReportyes
linksLinksyes

BandedMonthRow

fieldtyperequired
period_startstring (date)yes
period_endstring (date)yes
project_idintegeryes
project_namestringyes
client_idintegeryes
client_namestringyes
currencystringyes
rounded_secondsintegeryes
billable_value_centsinteger | nullyes
cost_value_centsinteger | nullyes
entries_without_billable_rateintegeryes
entries_without_cost_rateintegeryes
claimed_in_other_currencyintegeryes
billed_centsinteger | nullyes
foregone_centsinteger | nullyes
cost_ratio_basis_pointsinteger | nullyes
cost_alert_basis_pointsintegeryes
cost_ratio_statewithin | over | unpriced | unbilledyes

BillClientDelivery

fieldtyperequired
client_idintegeryes
deliver_via_billbooleanyes

BillClientDeliveryEnvelope

fieldtyperequired
dataBillClientDeliveryyes

BillClientDeliveryInput

fieldtyperequired
deliver_via_billbooleanyes

BillStatus

fieldtyperequired
configuredbooleanyes
company_idstring | nullyes
environmentsandbox | productionyes
can_send_from_billbooleanyes

BillStatusEnvelope

fieldtyperequired
dataBillStatusyes

Brand

fieldtyperequired
organization_namestringyes
assetsarray of BrandMarkyes
paletteInstancePalette

BrandAsset

fieldtyperequired
slotwordmark_light | wordmark_dark | faviconyes
content_hashstringyes
content_typeimage/png | image/jpeg | image/webpyes
byte_sizeintegeryes
urlstringyes
updated_atstring (date-time)yes

BrandAssetEnvelope

fieldtyperequired
dataBrandAssetyes

BrandAssetListEnvelope

fieldtyperequired
dataarray of BrandAssetyes
linksLinksyes

BrandAssetUploadInput

fieldtyperequired
filestring (binary)yes

BrandEnvelope

fieldtyperequired
dataBrandyes
linksLinksyes

BrandMark

fieldtyperequired
slotwordmark_light | wordmark_dark | faviconyes
urlstringyes
content_typeimage/png | image/jpeg | image/webpyes
updated_atstring (date-time)yes

ClientHierarchyListEnvelope

fieldtyperequired
dataarray of ClientHierarchyNodeyes
linksLinksyes

ClientHierarchyNode

fieldtyperequired
ancestor_idintegeryes
descendant_idintegeryes
depthintegeryes

ClientRollupCurrency

fieldtyperequired
currencystringyes
expense_centsintegeryes
uninvoiced_time_centsinteger
uninvoiced_expense_centsinteger
uninvoiced_total_centsinteger
money_budget_centsinteger
cost_centsinteger

ClientRollupMetrics

fieldtyperequired
time_entry_countintegeryes
expense_countintegeryes
rounded_secondsintegeryes
billable_secondsintegeryes
budgeted_secondsintegeryes
time_budget_secondsintegeryes
unpriced_billable_entry_countintegeryes
unpriced_cost_entry_countintegeryes
currenciesarray of ClientRollupCurrencyyes

ClientRollupNode

fieldtyperequired
client_idintegeryes
namestringyes
parent_client_idinteger | nullyes
depthintegeryes
directClientRollupMetricsyes
rollupClientRollupMetricsyes

ClientRollupReport

fieldtyperequired
root_client_idintegeryes
fromstring (date)yes
tostring (date)yes
nodesarray of ClientRollupNodeyes

ClientRollupReportEnvelope

fieldtyperequired
dataClientRollupReportyes
linksLinksyes

ContractorCostReport

fieldtyperequired
fromstringyes
tostringyes
rowsarray of ContractorCostRowyes

ContractorCostReportEnvelope

fieldtyperequired
dataContractorCostReportyes
linksLinksyes

ContractorCostRow

fieldtyperequired
user_idintegeryes
namestringyes
payroll_emailstring | nullyes
is_contractorbooleanyes
currencystringyes
rounded_secondsintegeryes
utilization_ppminteger | nullyes
cost_centsinteger | nullyes
cost_rate_centsinteger | nullyes
cost_rate_is_mixedbooleanyes
entry_countintegeryes
entries_without_rateintegeryes

CreateApiTokenInput

fieldtyperequired
namestringyes
scopesarray of stringyes
expires_atstring | null

DetailedExpenseReport

fieldtyperequired
fromstring (date)yes
tostring (date)yes
client_idinteger | nullyes
project_idinteger | nullyes
category_idinteger | nullyes
user_idinteger | nullyes
billableboolean | nullyes
reimbursableboolean | nullyes
invoice_stateall | invoiced | uninvoicedyes
active_projects_onlybooleanyes
totalsarray of DetailedExpenseTotalyes
rowsarray of DetailedExpenseRowyes

DetailedExpenseReportEnvelope

fieldtyperequired
dataDetailedExpenseReportyes
linksLinksyes

DetailedExpenseRow

fieldtyperequired
expense_idintegeryes
spent_datestring (date)yes
client_idintegeryes
client_namestringyes
project_idintegeryes
project_namestringyes
project_codestringyes
category_idintegeryes
category_namestringyes
user_idintegeryes
user_namestringyes
notesstring | nullyes
unitsinteger | nullyes
billablebooleanyes
reimbursablebooleanyes
invoice_idinteger | nullyes
currencystringyes
total_cost_centsinteger

DetailedExpenseTotal

fieldtyperequired
currencystringyes
expense_countintegeryes
total_cost_centsinteger

DetailedTimeCurrencyTotal

fieldtyperequired
currencystringyes
billable_amount_centsinteger | null
entries_without_billable_rateintegeryes

DetailedTimeReport

fieldtyperequired
fromstring (date)yes
tostring (date)yes
client_idinteger | nullyes
project_idinteger | nullyes
task_idinteger | nullyes
user_idinteger | nullyes
role_idinteger | nullyes
tag_idinteger | nullyes
invoice_stateall | invoiced | uninvoicedyes
hoursall | billable | non_billable | uninvoiced | claimed | unclaimedyes
grainday | entryyes
active_projects_onlybooleanyes
secondsintegeryes
rounded_secondsintegeryes
billable_secondsintegeryes
uninvoiced_billable_secondsintegeryes
claimed_secondsintegeryes
unclaimed_secondsintegeryes
time_entry_countintegeryes
currenciesarray of DetailedTimeCurrencyTotalyes
rowsarray of DetailedTimeRowyes

DetailedTimeReportEnvelope

fieldtyperequired
dataDetailedTimeReportyes
linksLinksyes

DetailedTimeRow

fieldtyperequired
spent_datestring (date)yes
client_idintegeryes
client_namestringyes
project_idintegeryes
project_namestringyes
project_codestringyes
task_idintegeryes
task_namestringyes
user_idintegeryes
user_namestringyes
rolesarray of stringyes
currencystringyes
secondsintegeryes
rounded_secondsintegeryes
billable_secondsintegeryes
uninvoiced_billable_secondsintegeryes
time_entry_countintegeryes
billable_amount_centsinteger | null
entries_without_billable_rateintegeryes
claimedbooleanyes
time_entry_idinteger
invoice_idinteger | null
notesstring | null
project_activeboolean

EmailHealth

fieldtyperequired
reputationEmailReputationSnapshotyes

EmailHealthEnvelope

fieldtyperequired
dataEmailHealthyes
linksLinksyes

EmailInput

fieldtyperequired
emailstring (email)yes

EmailLog

fieldtyperequired
idintegeryes
fromEmailRecipient | nullyes
reply_toarray of EmailRecipientyes
toarray of EmailRecipientyes
templatestringyes
subjectstringyes
providerstring | nullyes
provider_message_idstring | nullyes
provider_request_idstring | nullyes
provider_latency_msinteger | nullyes
statusqueued | sent | bounced | complained | failedyes
related_typestring | nullyes
related_idinteger | nullyes
attempt_countintegeryes
failure_codestring | nullyes
failure_reasonstring | nullyes
created_atstring (date-time)yes
updated_atstring (date-time)yes

EmailLogPage

fieldtyperequired
dataarray of EmailLogyes
linksLinksyes

EmailRecipient

fieldtyperequired
emailstringyes
namestring

EmailReputationSnapshot

fieldtyperequired
sentintegeryes
bouncedintegeryes
complainedintegeryes
failedintegeryes
bounce_rate_ppmintegeryes
complaint_rate_ppmintegeryes

EmailTemplate

fieldtyperequired
kindinvoice | reminder | thank_you | auth_email_verification | auth_password_resetyes
versionintegeryes
subject_templatestringyes
text_templatestringyes
html_templatestring | nullyes
unknown_variable_policyerror | literalyes
created_by_user_idinteger | nullyes
created_atstring (date-time)yes

EmailTemplateEnvelope

fieldtyperequired
dataEmailTemplateyes

EmailTemplatePage

fieldtyperequired
dataarray of EmailTemplateyes
linksLinksyes

EmailTemplateVariable

fieldtyperequired
namestringyes
tokenstringyes
descriptionstringyes
compatibilityharvest | nativeyes

EmailTemplateVariableCatalog

fieldtyperequired
dataarray of EmailTemplateVariableGroupyes
linksLinksyes

EmailTemplateVariableGroup

fieldtyperequired
kindinvoice | reminder | thank_you | auth_email_verification | auth_password_resetyes
variablesarray of EmailTemplateVariableyes

EmailTemplateVersionInput

fieldtyperequired
expected_versionintegeryes
subject_templatestringyes
text_templatestringyes
html_templatestring | null
unknown_variable_policyerror | literal

EmailTestSend

fieldtyperequired
statusanyyes
delivery_idintegeryes
sender_identity_idintegeryes
template_kindinvoice | reminder | thank_youyes
template_versionintegeryes
recipient_emailstring (email)yes

EmailTestSendEnvelope

fieldtyperequired
dataEmailTestSendyes

EmailTestSendInput

fieldtyperequired
template_kindinvoice | reminder | thank_youyes
template_versionintegeryes
variablesobjectyes
confirmedanyyes

ErrorDetail

fieldtyperequired
codestringyes
messagestringyes
fieldsarray of FieldErroryes

ErrorEnvelope

fieldtyperequired
errorErrorDetailyes
request_idstringyes

Estimate

fieldtyperequired
idintegeryes
client_idintegeryes
created_by_user_idinteger | nullyes
numberstringyes
purchase_orderstring | nullyes
subjectstring | nullyes
notesstring | nullyes
currencystringyes
statedraft | sent | accepted | declinedyes
versionintegeryes
issue_datestring (date)yes
sent_atstring | nullyes
accepted_atstring | nullyes
declined_atstring | nullyes
tax_rate_ppminteger | nullyes
tax2_rate_ppminteger | nullyes
discount_rate_ppminteger | nullyes
amount_centsintegeryes
tax_amount_centsintegeryes
tax2_amount_centsintegeryes
discount_amount_centsintegeryes
created_atstring (date-time)yes
updated_atstring (date-time)yes
line_itemsarray of EstimateLineyes

EstimateConversion

fieldtyperequired
invoiceInvoiceyes
eventEstimateMessageyes

EstimateConversionEnvelope

fieldtyperequired
dataEstimateConversionyes
linksLinksyes

EstimateConversionInput

fieldtyperequired
expected_versionintegeryes
numberstringyes
issue_datestring (date)yes
due_datestring (date)yes
payment_termsupon_receipt | net_15 | net_30 | net_45 | net_60 | customyes

EstimateEnvelope

fieldtyperequired
dataEstimateyes
linksLinksyes

EstimateLine

fieldtyperequired
idintegeryes
estimate_idintegeryes
positionintegeryes
kindstringyes
descriptionstring | nullyes
quantitynumberyes
unit_price_centsintegeryes
amount_centsintegeryes
taxedbooleanyes
taxed2booleanyes
created_atstring (date-time)yes
updated_atstring (date-time)yes

EstimateMessage

fieldtyperequired
idintegeryes
estimate_idintegeryes
sent_bystring | nullyes
sent_by_emailstring | nullyes
sent_fromstring | nullyes
sent_from_emailstring | nullyes
recipientsarray of InvoiceRecipientyes
subjectstring | nullyes
bodystring | nullyes
send_me_a_copybooleanyes
event_typestring | nullyes
delivery_statusstring | nullyes
provider_message_idstring | nullyes
created_atstring (date-time)yes
updated_atstring (date-time)yes

EstimateMessageCommandEnvelope

fieldtyperequired
dataEstimateMessageCommandResponseyes
linksLinksyes

EstimateMessageCommandResponse

fieldtyperequired
estimateEstimateyes
messageEstimateMessageyes

EstimateMessageInput

{"oneOf":[{"type":"object","required":["expected_version","event_type","recipients"],"properties":{"expected_version":{"type":"integer","minimum":0},"event_type":{"const":"send"},"recipients":{"type":

EstimateMessageListEnvelope

fieldtyperequired
dataarray of EstimateMessageyes
linksLinksyes

EstimatePage

fieldtyperequired
dataarray of Estimateyes
linksPageLinksyes
pagePageMetadatayes

Expense

fieldtyperequired
idintegeryes
user_idintegeryes
project_idintegeryes
expense_category_idintegeryes
spent_datestring (date)yes
notesstring | null
unitsnumber | null
total_cost_centsintegeryes
billablebooleanyes
approval_statusunsubmitted | submitted | approvedyes
source_approval_statusstring | null
invoice_idinteger | null
is_billedboolean
is_lockedbooleanyes
locked_reason_codestring | null
locked_reasonstring | null
reimbursablebooleanyes
reimbursement_statusnone | pending | approved | paidyes
payout_refstring | null
created_atstring (date-time)yes
updated_atstring (date-time)yes

ExpenseCategory

fieldtyperequired
idintegeryes
namestringyes
unit_namestring | nullyes
unit_price_centsinteger | nullyes
is_activebooleanyes
created_atstring (date-time)yes
updated_atstring (date-time)yes

ExpenseCategoryEnvelope

fieldtyperequired
dataExpenseCategoryyes
linksLinksyes

ExpenseCategoryInput

fieldtyperequired
namestringyes
unit_namestring | null
unit_price_centsinteger | null
is_activeboolean

ExpenseCategoryPage

fieldtyperequired
dataarray of ExpenseCategoryyes
linksPageLinksyes
pagePageMetadatayes

ExpenseCategoryPatch

fieldtyperequired
namestring
unit_namestring | null
unit_price_centsinteger | null
is_activeboolean

ExpenseEnvelope

fieldtyperequired
dataExpenseyes
linksLinksyes

ExpenseInput

fieldtyperequired
project_idintegeryes
expense_category_idintegeryes
spent_datestring (date)yes
notesstring | null
unitsnumber
total_cost_centsinteger
billableboolean
reimbursableboolean

ExpensePage

fieldtyperequired
dataarray of Expenseyes
linksPageLinksyes
pagePageMetadatayes

ExpensePatch

fieldtyperequired
project_idinteger
expense_category_idinteger
spent_datestring (date)
notesstring | null
unitsnumber
total_cost_centsinteger
billableboolean
reimbursableboolean

FieldError

fieldtyperequired
fieldstringyes
codestringyes
messagestringyes
minimum_lengthinteger

GeneralMutationInput

Commercial fields listed on GeneralResource require the same commercial authority for create and update, in addition to resource write scope.

{"type":"object","description":"Commercial fields listed on GeneralResource require the same commercial authority for create and update, in addition to resource write scope.","minProperties":1,"additi

GeneralResource

Commercial fields are omitted without finance/admin authority or an explicit billable_rates_manager grant. The same authority is required to set them; resource read/write scopes still apply.

fieldtyperequired
idintegeryes
created_atstring (date-time)yes
updated_atstring (date-time)yes

GeneralResourceEnvelope

fieldtyperequired
dataGeneralResourceyes
linksLinksyes

GeneralResourcePage

fieldtyperequired
dataarray of GeneralResourceyes
linksPageLinksyes
pagePageMetadatayes

IncompleteRecurringInvoiceListEnvelope

fieldtyperequired
dataarray of objectyes

InstancePalette

{"type":"object","additionalProperties":{"type":"string","pattern":"^#[0-9A-F]{6}$"}}

InstanceTheme

fieldtyperequired
paletteInstancePaletteyes
updated_atstring (date-time)yes

InstanceThemeEnvelope

fieldtyperequired
dataInstanceTheme | nullyes

InstanceThemeInput

fieldtyperequired
paletteInstancePaletteyes

Invoice

fieldtyperequired
idintegeryes
client_idintegeryes
created_by_user_idinteger | nullyes
numberstringyes
subjectstring | nullyes
purchase_orderstring | nullyes
notesstring | nullyes
currencystringyes
issue_datestring (date)yes
due_datestring (date)yes
payment_termsupon_receipt | net_15 | net_30 | net_45 | net_60 | customyes
statedraft | open | paid | closedyes
versionintegeryes
close_reasonstring | nullyes
close_write_off_centsintegeryes
sent_atstring | nullyes
paid_atstring | nullyes
paid_datestring | nullyes
closed_atstring | nullyes
period_startstring | nullyes
period_endstring | nullyes
project_idinteger | nullyes
retainer_idinteger | nullyes
recurring_invoice_idinteger | nullyes
estimate_idinteger | nullyes
reminder_policyInvoiceReminderPolicy | nullyes
tax_rate_ppminteger | nullyes
tax2_rate_ppminteger | nullyes
discount_rate_ppminteger | nullyes
amount_centsintegeryes
due_amount_centsintegeryes
tax_amount_centsintegeryes
tax2_amount_centsintegeryes
discount_amount_centsintegeryes
written_off_centsintegeryes
payment_optionsarray of stringyes
reference_tokenstring | nullyes
created_atstring (date-time)yes
updated_atstring (date-time)yes
line_itemsarray of InvoiceLineyes

InvoiceCommandEnvelope

fieldtyperequired
dataInvoiceCommandResponseyes
linksLinksyes

InvoiceCommandResponse

fieldtyperequired
invoiceInvoiceyes
commandInvoiceCommandResultyes

InvoiceCommandResult

fieldtyperequired
schema_versionanyyes
event_idsarray of stringyes
first_aggregate_sequenceintegeryes
event_countintegeryes
invoiceInvoiceCommandSnapshotyes

InvoiceCommandSnapshot

fieldtyperequired
idintegeryes
versionintegeryes
updated_atstring (date-time)yes
statedraft | open | paid | closedyes
close_reasonstring | nullyes
close_write_off_centsintegeryes
sent_atstring | nullyes
paid_atstring | nullyes
paid_datestring | nullyes
closed_atstring | nullyes
amount_centsintegeryes
due_amount_centsintegeryes
written_off_centsintegeryes
payment_countintegeryes
payment_statusunpaid | partial | paidyes

InvoiceDocumentPreferenceEnvelope

fieldtyperequired
dataobjectyes

InvoicedReport

fieldtyperequired
fromstring (date)yes
tostring (date)yes
client_idinteger | nullyes
statusstring | nullyes
totalsarray of InvoicedReportTotalyes
rowsarray of InvoicedReportRowyes

InvoicedReportEnvelope

fieldtyperequired
dataInvoicedReportyes
linksLinksyes

InvoicedReportRow

fieldtyperequired
invoice_idintegeryes
numberstringyes
statedraft | open | paid | closedyes
close_reasonstring | nullyes
issue_datestring (date)yes
due_datestring (date)yes
client_idintegeryes
client_namestringyes
subjectstring | nullyes
currencystringyes
invoiced_centsinteger
paid_centsinteger
balance_centsinteger

InvoicedReportTotal

fieldtyperequired
currencystringyes
invoice_countintegeryes
invoiced_centsinteger
paid_centsinteger
balance_centsinteger

InvoiceEditInput

fieldtyperequired
expected_versionintegeryes
client_idinteger
numberstring
subjectstring | null
purchase_orderstring | null
notesstring | null
currencystring
issue_datestring (date)
due_datestring (date)
payment_termsupon_receipt | net_15 | net_30 | net_45 | net_60 | custom
project_idinteger | null
retainer_idinteger | null
reminder_policyInvoiceReminderPolicy | null
payment_optionsarray of string
tax_rate_ppminteger | null
tax2_rate_ppminteger | null
discount_rate_ppminteger | null

InvoiceEmailDeliveryInput

fieldtyperequired
expected_versionintegeryes
recipientsarray of InvoiceRecipientyes
sender_identity_idinteger
template_versioninteger
confirmedtrueyes

InvoiceEnvelope

fieldtyperequired
dataInvoiceyes
linksLinksyes

InvoiceGenerationInput

fieldtyperequired
client_idintegeryes
fromstring (date)yes
tostring (date)yes
project_idsarray of integeryes
time_summary_typestring | nullyes
expense_summary_typestring | nullyes

InvoiceLine

fieldtyperequired
idintegeryes
invoice_idintegeryes
positionintegeryes
kindstringyes
descriptionstring | nullyes
quantitynumberyes
unit_price_centsintegeryes
amount_centsintegeryes
taxedbooleanyes
taxed2booleanyes
project_idinteger | nullyes
created_atstring (date-time)yes
updated_atstring (date-time)yes

InvoiceLineInput

fieldtyperequired
expected_versionintegeryes
positionintegeryes
kindstringyes
descriptionstring | null
quantitynumberyes
unit_price_centsintegeryes
taxedboolean
taxed2boolean
project_idinteger | null

InvoiceLineUpdateInput

fieldtyperequired
expected_versionintegeryes
expected_updated_atstring (date-time)yes
positionintegeryes
kindstringyes
descriptionstring | null
quantitynumberyes
unit_price_centsintegeryes
taxedboolean
taxed2boolean
project_idinteger | null

InvoiceMessage

fieldtyperequired
idintegeryes
invoice_idintegeryes
sent_bystring | nullyes
sent_by_emailstring | nullyes
sent_fromstring | nullyes
sent_from_emailstring | nullyes
recipientsarray of InvoiceRecipientyes
subjectstring | nullyes
bodystring | nullyes
attach_pdfbooleanyes
send_me_a_copybooleanyes
thank_youbooleanyes
reminderbooleanyes
send_reminder_onstring | nullyes
event_typestring | nullyes
delivery_statusstring | nullyes
provider_message_idstring | nullyes
created_atstring (date-time)yes
updated_atstring (date-time)yes

InvoiceMessageInput

fieldtyperequired
event_typesend | draft | cancel | write_off | reopen | re-openyes
expected_versionintegeryes
recipientsarray of InvoiceRecipient
subjectstring | null
bodystring | null
attach_pdfboolean
send_me_a_copyboolean
thank_youboolean
reminderboolean
send_reminder_onstring | null

InvoiceMessageListEnvelope

fieldtyperequired
dataarray of InvoiceMessageyes
linksLinksyes

InvoicePage

fieldtyperequired
dataarray of Invoiceyes
linksPageLinksyes
pagePageMetadatayes

InvoicePayment

fieldtyperequired
idintegeryes
invoice_idintegeryes
currencystringyes
amount_centsintegeryes
paid_atstring | nullyes
paid_datestring | nullyes
notesstring | nullyes
recorded_by_user_idinteger | nullyes
providerstringyes
provider_shapestringyes
provider_account_idinteger | nullyes
provider_transaction_idstring | nullyes
bank_deposit_idinteger | nullyes
created_atstring (date-time)yes
updated_atstring (date-time)yes

InvoicePaymentInput

{"oneOf":[{"type":"object","required":["expected_version","amount_cents","currency","paid_at"],"properties":{"expected_version":{"type":"integer","minimum":0},"amount_cents":{"type":"integer","minimum

InvoicePaymentLinkEnvelope

fieldtyperequired
dataobjectyes

InvoicePaymentListEnvelope

fieldtyperequired
dataarray of InvoicePaymentyes
linksLinksyes

InvoicePaymentUpdateInput

{"oneOf":[{"type":"object","required":["expected_version","expected_updated_at","amount_cents","paid_at"],"properties":{"expected_version":{"type":"integer","minimum":0},"expected_updated_at":{"type":

InvoiceRecipient

fieldtyperequired
namestringyes
emailstringyes

InvoiceReminderPolicy

fieldtyperequired
first_after_daysintegeryes
every_daysintegeryes

InvoiceThankYouPreferenceEnvelope

fieldtyperequired
dataobjectyes

InvoiceTransitionInput

fieldtyperequired
commandsend | draft | cancel | write_off | reopen | re-openyes
expected_versionintegeryes
recipientsarray of InvoiceRecipient
subjectstring | null
bodystring | null
attach_pdfboolean
send_me_a_copyboolean
thank_youboolean
reminderboolean
send_reminder_onstring | null

IssuedApiToken

{"allOf":[{"$ref":"#/components/schemas/ApiToken"},{"type":"object","required":["token"],"properties":{"token":{"type":"string"}}}]}

IssuedApiTokenEnvelope

fieldtyperequired
dataIssuedApiTokenyes
linksLinksyes

ModuleListEnvelope

fieldtyperequired
dataarray of ModuleStateyes
linksLinksyes

ModulePatch

fieldtyperequired
enabledbooleanyes

ModuleState

fieldtyperequired
moduleapproval | expenses | own_moneyyes
enabledbooleanyes

MonthEndExclusion

fieldtyperequired
invoice_idintegeryes
numberstringyes
reasonstringyes

MonthEndItem

fieldtyperequired
subject_typestringyes
subject_idintegeryes
descriptionstringyes
amount_centsinteger | nullyes
currencystring | nullyes
targetstring | nullyes
brand_namestring | nullyes
cost_centsinteger | nullyes
margin_centsinteger | nullyes

MonthEndManifest

fieldtyperequired
period_startstring (date)yes
period_endstring (date)yes
itemsarray of MonthEndItemyes
excludedarray of MonthEndExclusionyes

MonthEndManifestEnvelope

fieldtyperequired
dataMonthEndManifestyes
linksLinksyes

MyHoursProject

fieldtyperequired
project_idintegeryes
project_namestringyes
project_codestringyes
client_idintegeryes
client_namestringyes
secondsintegeryes
rounded_secondsintegeryes
billable_secondsintegeryes
time_entry_countintegeryes

MyHoursReport

fieldtyperequired
fromstring (date)yes
tostring (date)yes
user_idintegeryes
project_idinteger | nullyes
secondsintegeryes
rounded_secondsintegeryes
billable_secondsintegeryes
time_entry_countintegeryes
projectsarray of MyHoursProjectyes

MyHoursReportEnvelope

fieldtyperequired
dataMyHoursReportyes
linksLinksyes

OrganizationInvoiceDocumentsEnvelope

fieldtyperequired
dataobjectyes

OrganizationInvoiceRemindersEnvelope

fieldtyperequired
dataobjectyes

OrganizationInvoiceRemindersInput

fieldtyperequired
reminder_policyReminderPolicy | nullyes

OrganizationInvoiceThankYouEnvelope

fieldtyperequired
dataobjectyes

OutboxAggregate

fieldtyperequired
typestringyes
idintegeryes
sequenceintegeryes

OutboxDelivery

fieldtyperequired
subscriber_idstringyes
event_idstringyes
event_typestringyes
aggregateOutboxAggregateyes
statuspending | processing | delivered | failedyes
attempt_countintegeryes
next_attempt_atstring | nullyes
last_error_codestring | nullyes
delivered_atstring | nullyes
failed_atstring | nullyes
occurred_atstring (date-time)yes
created_atstring (date-time)yes
updated_atstring (date-time)yes

OutboxDeliveryEnvelope

fieldtyperequired
dataOutboxDeliveryyes
linksLinksyes

OutboxDeliveryPage

fieldtyperequired
dataarray of OutboxDeliveryyes
linksLinksyes

PageMetadata

fieldtyperequired
per_pageintegeryes
next_cursorstring | nullyes

PasswordResetInput

fieldtyperequired
tokenstringyes
passwordstringyes

PasswordSignInInput

fieldtyperequired
emailstring (email)yes
passwordstringyes

PaymentReceivedReportRow

fieldtyperequired
payment_idintegeryes
payment_datestring (date)yes
invoice_idintegeryes
invoice_numberstringyes
client_idintegeryes
client_namestringyes
currencystringyes
providerstringyes
invoice_total_centsinteger
payment_centsinteger

PaymentsReceivedReport

fieldtyperequired
fromstring (date)yes
tostring (date)yes
client_idinteger | nullyes
totalsarray of PaymentsReceivedReportTotalyes
rowsarray of PaymentReceivedReportRowyes

PaymentsReceivedReportEnvelope

fieldtyperequired
dataPaymentsReceivedReportyes
linksLinksyes

PaymentsReceivedReportTotal

fieldtyperequired
currencystringyes
payment_countintegeryes
payment_centsinteger

PayoutAccount

fieldtyperequired
idintegeryes
user_idintegeryes
providerdeel | wiseyes
external_idstringyes
linked_by_user_idintegeryes
linked_atstring (date-time)yes
verified_atstring | nullyes

PayoutAccountEnvelope

fieldtyperequired
dataPayoutAccountyes

PayoutAccountInput

fieldtyperequired
providerdeel | wiseyes
external_idstringyes

PayoutAccountListEnvelope

fieldtyperequired
dataarray of PayoutAccountyes

Profile

fieldtyperequired
user_idintegeryes
timezonestringyes

ProfileEnvelope

fieldtyperequired
dataProfileyes
linksLinksyes

ProfilePatch

fieldtyperequired
timezonestring

ProfitabilityDimensionRow

fieldtyperequired
dimension_idintegeryes
dimension_namestringyes
currencystringyes
rounded_secondsintegeryes
revenue_centsinteger | nullyes
cost_centsinteger | nullyes
profit_centsinteger | nullyes
return_on_cost_ppminteger | nullyes
revenue_fee_centsintegeryes
fees_included_in_delivery_cost_centsintegeryes
entries_without_billable_rateintegeryes
entries_without_cost_rateintegeryes
included_in_headlinebooleanyes

ProfitabilityFilters

fieldtyperequired
project_statusall | active | archivedyes
billing_methodstring | nullyes
manager_idinteger | nullyes
tag_idinteger | nullyes

ProfitabilityReport

fieldtyperequired
fromstring (date)yes
tostring (date)yes
organization_currencystringyes
rowsarray of ProfitabilityRowyes
clientsarray of ProfitabilityDimensionRowyes
teammatesarray of ProfitabilityDimensionRowyes
tasksarray of ProfitabilityDimensionRowyes
trendarray of ProfitabilityTrendRowyes
totalsProfitabilityTotalsyes
filtersProfitabilityFiltersyes
previous_fromstring (date)yes
previous_tostring (date)yes
previous_totalsProfitabilityTotalsyes

ProfitabilityReportEnvelope

fieldtyperequired
dataProfitabilityReportyes
linksLinksyes

ProfitabilityRow

fieldtyperequired
project_idintegeryes
project_namestringyes
project_codestringyes
client_idintegeryes
client_namestringyes
currencystringyes
rounded_secondsintegeryes
revenue_centsinteger | nullyes
cost_centsinteger | nullyes
profit_centsinteger | nullyes
return_on_cost_ppminteger | nullyes
revenue_fee_centsintegeryes
fees_included_in_delivery_cost_centsintegeryes
entries_without_billable_rateintegeryes
entries_without_cost_rateintegeryes

ProfitabilityTotals

fieldtyperequired
rounded_secondsintegeryes
revenue_centsinteger | nullyes
cost_centsinteger | nullyes
profit_centsinteger | nullyes
return_on_cost_ppminteger | nullyes
revenue_fee_centsintegeryes
fees_included_in_delivery_cost_centsintegeryes
entries_without_billable_rateintegeryes
entries_without_cost_rateintegeryes
projects_not_convertedintegeryes

ProfitabilityTrendRow

{"allOf":[{"$ref":"#/components/schemas/ProfitabilityDimensionRow"},{"type":"object","required":["period_start","period_end","current"],"properties":{"period_start":{"type":"string","format":"date"},"

ProjectBudgetGrain

fieldtyperequired
sourceproject | task_assignment | user_assignmentyes
source_idintegeryes
unitseconds | centsyes
calculationtime | billable | costyes
unpriced_entry_countintegeryes
budget_secondsinteger | null
spent_secondsinteger
remaining_secondsinteger | null
budget_centsinteger | null
spent_centsinteger
remaining_centsinteger | null

ProjectBudgetReport

fieldtyperequired
project_idintegeryes
budget_byproject | project_cost | task | task_fees | person | noneyes
expenses_includedbooleanyes
fromstring (date)yes
tostring (date)yes
grainsarray of ProjectBudgetGrainyes

ProjectBudgetReportEnvelope

fieldtyperequired
dataProjectBudgetReportyes
linksLinksyes

ProjectBudgetSummary

fieldtyperequired
project_idintegeryes
currencystringyes
budget_byproject | project_cost | task | task_fees | person | noneyes
unitseconds | cents | nullyes
unpriced_entry_countintegeryes
budget_secondsinteger | null
spent_secondsinteger
remaining_secondsinteger | null
budget_centsinteger | null
spent_centsinteger
remaining_centsinteger | null
cost_centsinteger

ProjectBudgetSummaryListEnvelope

fieldtyperequired
dataarray of ProjectBudgetSummaryyes
linksLinksyes

QuickBooksAuthorizeEnvelope

fieldtyperequired
dataobjectyes

QuickBooksConnection

fieldtyperequired
realm_idstringyes
company_namestring | nullyes
scopestringyes
allow_online_paymentbooleanyes
connected_atstringyes

QuickBooksConnectionEnvelope

fieldtyperequired
dataQuickBooksConnection | nullyes

QuickBooksSettingsInput

fieldtyperequired
allow_online_paymentbooleanyes

QuickBooksStatusEnvelope

fieldtyperequired
dataobjectyes

ReceivablesReport

fieldtyperequired
as_ofstring (date)yes
client_idinteger | nullyes
totalsarray of ReceivablesReportTotalyes
rowsarray of ReceivablesReportRowyes

ReceivablesReportEnvelope

fieldtyperequired
dataReceivablesReportyes
linksLinksyes

ReceivablesReportRow

fieldtyperequired
client_idintegeryes
client_namestringyes
currencystringyes
invoice_countintegeryes
invoiced_centsinteger
outstanding_centsinteger
not_due_centsinteger
days_1_to_30_centsinteger
days_31_to_60_centsinteger
days_61_to_90_centsinteger
days_90_plus_centsinteger

ReceivablesReportTotal

fieldtyperequired
currencystringyes
invoice_countintegeryes
invoiced_centsinteger
outstanding_centsinteger
not_due_centsinteger
days_1_to_30_centsinteger
days_31_to_60_centsinteger
days_61_to_90_centsinteger
days_90_plus_centsinteger

RecurringAmountConfig

{"oneOf":[{"type":"object","required":["schema_version","type","line_items"],"properties":{"schema_version":{"const":1},"type":{"const":"fixed_lines"},"line_items":{"type":"array","minItems":1,"items"

RecurringFixedLine

fieldtyperequired
kindstringyes
descriptionstring | nullyes
quantitynumberyes
unit_price_centsintegeryes
taxedbooleanyes
taxed2booleanyes
project_idinteger | nullyes
throughstring | null
installmentsinteger | null

RecurringGeneration

fieldtyperequired
definition_idintegeryes
periodstringyes
next_issue_onstringyes
retainer_drawdown_centsinteger | nullyes

RecurringGenerationEnvelope

fieldtyperequired
dataobjectyes
linksLinksyes

RecurringInvoice

fieldtyperequired
idintegeryes
client_idintegeryes
subject_templatestringyes
notes_templatestringyes
every_n_monthsintegeryes
day_of_monthintegeryes
next_issue_onstring (date)yes
amount_configRecurringAmountConfigyes
can_draw_from_retainer_idinteger | nullyes
claims_project_idsarray | nullyes
claim_modeall | ceilingyes
claim_ceiling_secondsinteger | nullyes
claim_ceiling_centsinteger | nullyes
claim_scopebillable | trackedyes
cost_alert_basis_pointsinteger | nullyes
created_atstring (date-time)yes
updated_atstring (date-time)yes

RecurringInvoiceCompletionEnvelope

fieldtyperequired
dataobjectyes

RecurringInvoiceEnvelope

fieldtyperequired
dataRecurringInvoiceyes
linksLinksyes

RecurringInvoiceInput

fieldtyperequired
client_idintegeryes
subject_templatestringyes
notes_templatestringyes
every_n_monthsintegeryes
day_of_monthintegeryes
next_issue_onstring (date)yes
amount_configRecurringAmountConfigyes
can_draw_from_retainer_idinteger | null
claims_project_idsarray | null
claim_modeall | ceiling
claim_ceiling_secondsinteger | null
claim_ceiling_centsinteger | null
claim_scopebillable | tracked
cost_alert_basis_pointsinteger | null

RecurringInvoicePage

fieldtyperequired
dataarray of RecurringInvoiceyes
linksPageLinksyes
pagePageMetadatayes

ReleasedTimeEnvelope

fieldtyperequired
dataobjectyes

ReminderPolicy

fieldtyperequired
first_after_daysintegeryes
every_daysintegeryes

ReportDefinitionPresentation

fieldtyperequired
resultsummary | detailedyes
groupedbooleanyes
include_zero_valuesbooleanyes

ReportDefinitionRegistry

fieldtyperequired
fieldsarray of objectyes
metricsarray of objectyes

ReportDefinitionRegistryEnvelope

fieldtyperequired
dataReportDefinitionRegistryyes
linksLinksyes

ReportRunnerEnvelope

fieldtyperequired
dataReportRunnerResultyes
linksLinksyes

ReportRunnerResult

fieldtyperequired
definitionIdstringyes
definitionVersionintegeryes
stateready | empty | too_many_rowsyes
rowsarray of objectyes

ReportTimeAction

fieldtyperequired
command_idstringyes
actionmark_invoiced | mark_uninvoiced | moveyes
requestedintegeryes
changed_entry_idsarray of integeryes
ineligible_entry_idsarray of integeryes
replayedbooleanyes

ReportTimeActionEnvelope

fieldtyperequired
dataReportTimeActionyes
linksLinksyes

ReportTimeActionInput

fieldtyperequired
command_idstringyes
actionmark_invoiced | mark_uninvoiced | moveyes
entry_idsarray of integeryes
confirmedanyyes
invoice_idinteger
project_idinteger
task_idinteger

Retainer

fieldtyperequired
idintegeryes
client_idinteger | nullyes
project_idinteger | nullyes
stateongoing | closedyes
denominationmoney | hoursyes
amount_centsinteger | nullyes
secondsinteger | nullyes
locked_rate_centsinteger | nullyes
rate_locked_atstring | nullyes
periodstring | nullyes
rolloverstring | nullyes
expires_atstring | nullyes
on_exhaustionblock | warn | overflowyes
balanceintegeryes
created_atstring (date-time)yes
updated_atstring (date-time)yes

RetainerDrawdownInput

{"oneOf":[{"type":"object","required":["amount_cents","occurred_on","invoice_id"],"properties":{"invoice_id":{"type":"integer","minimum":1},"amount_cents":{"type":"integer","minimum":1,"maximum":90000

RetainerEnvelope

fieldtyperequired
dataRetaineryes
linksLinksyes

RetainerInput

{"oneOf":[{"type":"object","required":["denomination","amount_cents"],"properties":{"client_id":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}]},"project_id":{"anyOf":[{"type":"integer","min

RetainerLedgerEntry

fieldtyperequired
idstringyes
retainer_idintegeryes
kinddeposit | drawdown | expiry | reset | adjustmentyes
unitcents | secondsyes
amountintegeryes
invoice_idinteger | nullyes
occurred_onstring (date)yes
notesstring | nullyes
created_atstring (date-time)yes

RetainerLedgerInput

{"oneOf":[{"type":"object","required":["kind","amount_cents","occurred_on","invoice_id"],"properties":{"kind":{"const":"deposit"},"invoice_id":{"type":"integer","minimum":1},"amount_cents":{"type":"in

RetainerLedgerListEnvelope

fieldtyperequired
dataarray of RetainerLedgerEntryyes
linksLinksyes

RetainerLedgerMutation

fieldtyperequired
entryRetainerLedgerEntryyes
balanceintegeryes
denominationmoney | hoursyes

RetainerLedgerMutationEnvelope

fieldtyperequired
dataRetainerLedgerMutationyes
linksLinksyes

RetainerPage

fieldtyperequired
dataarray of Retaineryes
linksPageLinksyes
pagePageMetadatayes

RetainerPatch

fieldtyperequired
stateongoing | closed
periodstring | null
rolloverstring | null
expires_atstring | null
on_exhaustionblock | warn | overflow

SavedReport

fieldtyperequired
idstringyes
namestringyes
versionintegeryes
fieldsarray of objectyes
metricsarray of stringyes
filtersarray of objectyes
group_byobject | nullyes
presentationReportDefinitionPresentationyes
ownerobjectyes
is_custombooleanyes
pinnedbooleanyes
sharedbooleanyes
created_atstring (date-time)yes
updated_atstring (date-time)yes

SavedReportEnvelope

fieldtyperequired
dataSavedReportyes
linksLinksyes

SavedReportInput

fieldtyperequired
namestringyes
fieldsarray of objectyes
metricsarray of stringyes
filtersarray of objectyes
group_byobject | nullyes
presentationReportDefinitionPresentationyes

SavedReportListEnvelope

fieldtyperequired
dataarray of SavedReportyes

SavedReportUpdate

fieldtyperequired
versionintegeryes
namestring
fieldsarray of object
metricsarray of string
filtersarray of object
group_byobject | null
presentationReportDefinitionPresentation

SenderEvidenceRefreshInput

fieldtyperequired
expected_evidence_versionintegeryes

SenderIdentity

fieldtyperequired
idintegeryes
emailstring (email)yes
display_namestringyes
reply_to_emailstring | nullyes
providerstringyes
provider_identitystringyes
is_defaultbooleanyes
versionintegeryes
archived_atstring | nullyes
evidenceSenderIdentityEvidence | nullyes
created_by_user_idintegeryes
created_atstring (date-time)yes
updated_atstring (date-time)yes

SenderIdentityEnvelope

fieldtyperequired
dataSenderIdentityyes

SenderIdentityEvidence

fieldtyperequired
versionintegeryes
sourceprovider_api | deployment_configyes
identity_kindemail_address | domainyes
verification_statuspending | verified | failed | temporary_failure | operator_configuredyes
dkim_statuspending | verified | failed | not_applicableyes
mail_from_domainstring | nullyes
mail_from_statuspending | verified | failed | not_configuredyes
observed_atstring (date-time)yes

SenderIdentityInput

fieldtyperequired
emailstring (email)yes
display_namestringyes
reply_to_emailstring | null
providerstringyes
provider_identitystringyes

SenderIdentityPage

fieldtyperequired
dataarray of SenderIdentityyes
linksLinksyes

SenderIdentityPatch

fieldtyperequired
expected_versionintegeryes
display_namestring
reply_to_emailstring | null

SenderIdentityVersionInput

fieldtyperequired
expected_versionintegeryes

Service

fieldtyperequired
serviceanyyes
versionanyyes

ServiceEnvelope

fieldtyperequired
dataServiceyes
linksLinksyes

Session

fieldtyperequired
idintegeryes
created_atstring (date-time)yes
last_seen_atstring (date-time)yes
idle_expires_atstring (date-time)yes
absolute_expires_atstring (date-time)yes
revoked_atstring | nullyes
revocation_reasonstring | nullyes
currentbooleanyes

SessionAuthentication

fieldtyperequired
kindanyyes

SessionEnvelope

fieldtyperequired
dataSessionyes

SessionPage

fieldtyperequired
dataarray of Sessionyes
linksLinksyes

SignInMethodListEnvelope

fieldtyperequired
dataarray of SignInMethodStateyes
linksLinksyes

SignInMethodState

fieldtyperequired
methodpassword | magic_link | google | github | appleyes
configuredbooleanyes
enabledbooleanyes

SignInResult

{"oneOf":[{"$ref":"#/components/schemas/AuthPrincipal"},{"$ref":"#/components/schemas/TwoFactorChallengeIssued"}]}

SignInResultEnvelope

fieldtyperequired
dataSignInResultyes

SignupInput

fieldtyperequired
organization_namestringyes
first_namestringyes
last_namestringyes
emailstring (email)yes
passwordstringyes

SsoDomain

fieldtyperequired
idintegeryes
domainstringyes
verifiedbooleanyes
verified_atstring | nullyes
last_checked_atstring | nullyes
record_namestringyes
record_typeanyyes
record_valuestringyes
created_atstringyes
updated_atstringyes

SsoDomainCheck

{"allOf":[{"$ref":"#/components/schemas/SsoDomain"},{"type":"object","required":["dnssec_validated"],"properties":{"dnssec_validated":{"type":"boolean"}}}]}

SsoDomainCheckEnvelope

fieldtyperequired
dataSsoDomainCheckyes

SsoDomainEnvelope

fieldtyperequired
dataSsoDomainyes

SsoDomainInput

fieldtyperequired
domainstringyes

SsoDomainListEnvelope

fieldtyperequired
dataarray of SsoDomainyes
linksLinksyes

TeamAssignmentInput

fieldtyperequired
project_idintegeryes
is_project_managerbooleanyes

TeamAssignmentReplaceInput

fieldtyperequired
expected_versionintegeryes
assignmentsarray of TeamAssignmentInputyes

TeamCatalog

fieldtyperequired
rolesarray of TeamNamedRelationyes
departmentsarray of TeamNamedRelationyes
projectsarray of TeamCatalogProjectyes

TeamCatalogEnvelope

fieldtyperequired
dataTeamCatalogyes
linksLinksyes

TeamCatalogProject

fieldtyperequired
idintegeryes
namestringyes
codestringyes
client_idintegeryes
client_namestringyes
is_activebooleanyes

TeamCommandReceipt

fieldtyperequired
target_user_idintegeryes
versionintegeryes
resource_idinteger | nullyes
occurred_atstring (date-time)yes

TeamCommandReceiptEnvelope

fieldtyperequired
dataTeamCommandReceiptyes
linksLinksyes

TeamInactiveNotificationChannels

fieldtyperequired
emailfalseyes
desktopfalseyes
slackfalseyes

TeamNamedRelation

fieldtyperequired
idintegeryes
namestringyes

TeamNotificationChannels

fieldtyperequired
emailbooleanyes
desktopbooleanyes
slackbooleanyes

TeamNotificationInput

fieldtyperequired
expected_versionintegeryes
daily_reminder_enabledfalseyes
reminder_timestring | nullyes
reminder_daysarray of stringyes
channelsTeamInactiveNotificationChannelsyes
include_in_team_remindersfalseyes
weekly_digestfalseyes
notify_project_deletedfalseyes

TeamNotificationPreference

fieldtyperequired
delivery_activefalseyes
daily_reminder_enabledbooleanyes
reminder_timestring | nullyes
reminder_daysarray of stringyes
channelsTeamNotificationChannelsyes
include_in_team_remindersbooleanyes
weekly_digestbooleanyes
notify_project_deletedbooleanyes
updated_atstring (date-time)yes

TeamPerson

fieldtyperequired
idintegeryes
first_namestringyes
last_namestringyes
emailstring | nullyes
telephonestring | nullyes
employee_idstring | nullyes
timezonestringyes
is_contractorbooleanyes
is_activebooleanyes
has_access_to_all_future_projectsbooleanyes
weekly_capacityintegeryes
profilemember | project_manager | people_admin | accounting | executive_manager | administratoryes
is_ownerbooleanyes
avatar_urlstring | nullyes
versionintegeryes
created_atstring (date-time)yes
updated_atstring (date-time)yes
rolesarray of TeamNamedRelationyes
departmentsarray of TeamNamedRelationyes
project_assignmentsarray of TeamProjectAssignmentyes
billable_ratesarray of UserRate
cost_ratesarray of UserRate
notificationsTeamNotificationPreferenceyes

TeamPersonEnvelope

fieldtyperequired
dataTeamPersonyes
linksLinksyes

TeamPersonPatch

fieldtyperequired
expected_versionintegeryes
first_namestring
last_namestring
telephonestring | null
employee_idstring | null
timezonestring
is_contractorboolean
is_activeboolean
has_access_to_all_future_projectsboolean
weekly_capacityinteger
profilemember | project_manager | people_admin | accounting | executive_manager | administrator
role_idsarray of integer
department_idsarray of integer

TeamPersonSummary

fieldtyperequired
idintegeryes
first_namestringyes
last_namestringyes
emailstring | nullyes
avatar_urlstring | nullyes
profilemember | project_manager | people_admin | accounting | executive_manager | administratoryes
is_ownerbooleanyes
is_contractorbooleanyes
is_activebooleanyes
weekly_capacityintegeryes
total_secondsintegeryes
billable_secondsintegeryes
nonbillable_secondsintegeryes
utilization_ppminteger | nullyes
runningbooleanyes

TeamPersonSummaryPage

fieldtyperequired
dataarray of TeamPersonSummaryyes
linksPageLinksyes
pagePageMetadatayes

TeamProjectAssignment

fieldtyperequired
idintegeryes
project_idintegeryes
project_namestringyes
project_codestringyes
client_idintegeryes
client_namestringyes
is_activebooleanyes
is_project_managerbooleanyes
use_default_ratesbooleanyes
hourly_rate_centsinteger | null
budget_secondsinteger | nullyes
updated_atstring (date-time)yes

TeamRateInput

fieldtyperequired
expected_versionintegeryes
kindbillable | costyes
amount_centsintegeryes
start_datestring | nullyes

TeamRateRemovalInput

fieldtyperequired
expected_versionintegeryes
kindbillable | costyes

TeamStatus

fieldtyperequired
enabledbooleanyes

TeamStatusEnvelope

fieldtyperequired
dataTeamStatusyes
linksLinksyes

TimeEntry

fieldtyperequired
idintegeryes
user_idintegeryes
project_idintegeryes
task_idintegeryes
user_assignment_idinteger
task_assignment_idinteger
spent_datestring (date)yes
secondsintegeryes
seconds_without_timerinteger
rounded_secondsinteger
is_runningbooleanyes
timer_started_atstring | null
started_timestring | null
ended_timestring | null
notesstring | null
billablebooleanyes
budgetedbooleanyes
approval_statusunsubmitted | submitted | approvedyes
source_approval_statusstring | null
invoice_idinteger | null
is_billedboolean
is_lockedbooleanyes
locked_reason_codestring | null
locked_reasonstring | null
external_refobject | null
calendar_event_refobject | null
minimum_note_lengthintegeryes
billable_rate_centsinteger | null
cost_rate_centsinteger | null
created_atstring (date-time)yes
updated_atstring (date-time)yes

TimeEntryEnvelope

fieldtyperequired
dataTimeEntryyes
linksLinksyes

TimeEntryInput

fieldtyperequired
project_idintegeryes
task_idintegeryes
spent_datestring (date)
secondsinteger
started_timestring
ended_timestring
notesstring | null
budgetedboolean
external_refobject | null
calendar_event_refobject | null

TimeEntryNoteSettings

fieldtyperequired
requiredbooleanyes
minimum_lengthintegeryes

TimeEntryNoteSettingsEnvelope

fieldtyperequired
dataTimeEntryNoteSettingsyes
linksLinksyes

TimeEntryNoteSettingsPatch

fieldtyperequired
requiredboolean
minimum_lengthinteger

TimeEntryOption

fieldtyperequired
project_idintegeryes
task_idintegeryes
minimum_note_lengthintegeryes

TimeEntryOptionListEnvelope

fieldtyperequired
dataarray of TimeEntryOptionyes
linksLinksyes

TimeEntryPage

fieldtyperequired
dataarray of TimeEntryyes
linksPageLinksyes
pagePageMetadatayes

TimeEntryPatch

fieldtyperequired
project_idinteger
task_idinteger
spent_datestring (date)
secondsinteger
started_timestring
ended_timestring
notesstring | null
budgetedboolean
external_refobject | null
calendar_event_refobject | null

TimeEntrySettings

fieldtyperequired
time_entry_modeduration | start_endyes
time_formatdecimal | hours_minutesyes
clock12h | 24hyes
week_start_daysaturday | sunday | mondayyes

TimeEntrySettingsEnvelope

fieldtyperequired
dataTimeEntrySettingsyes
linksLinksyes

TimeReport

fieldtyperequired
fromstring (date)yes
tostring (date)yes
fixed_fee_includedbooleanyes
totalsTimeReportTotalsyes
clientsarray of TimeReportClientRowyes
projectsarray of TimeReportProjectRowyes
tasksarray of TimeReportTaskRowyes
teammatesarray of TimeReportTeammateRowyes

TimeReportAmount

fieldtyperequired
currencystringyes
billable_centsintegeryes
uninvoiced_centsintegeryes

TimeReportClientRow

fieldtyperequired
secondsintegeryes
rounded_secondsintegeryes
billable_secondsintegeryes
time_entry_countintegeryes
unpriced_billable_entry_countintegeryes
amountsarray of TimeReportAmount
client_idintegeryes
client_namestringyes

TimeReportEnvelope

fieldtyperequired
dataTimeReportyes
linksLinksyes

TimeReportProjectRow

fieldtyperequired
secondsintegeryes
rounded_secondsintegeryes
billable_secondsintegeryes
time_entry_countintegeryes
unpriced_billable_entry_countintegeryes
amountsarray of TimeReportAmount
project_idintegeryes
project_namestringyes
project_codestringyes
client_idintegeryes
client_namestringyes

TimeReportTaskRow

fieldtyperequired
secondsintegeryes
rounded_secondsintegeryes
billable_secondsintegeryes
time_entry_countintegeryes
unpriced_billable_entry_countintegeryes
amountsarray of TimeReportAmount
task_idintegeryes
task_namestringyes

TimeReportTeammateRow

fieldtyperequired
secondsintegeryes
rounded_secondsintegeryes
billable_secondsintegeryes
time_entry_countintegeryes
unpriced_billable_entry_countintegeryes
amountsarray of TimeReportAmount
user_idintegeryes
user_namestringyes
is_contractorbooleanyes
capacity_secondsintegeryes
utilization_ppminteger | nullyes

TimeReportTotals

fieldtyperequired
secondsintegeryes
rounded_secondsintegeryes
billable_secondsintegeryes
time_entry_countintegeryes
unpriced_billable_entry_countintegeryes
amountsarray of TimeReportAmount

TimesheetBulkApprovalInput

fieldtyperequired
submissionsarray of objectyes

TimesheetBulkApprovalResult

fieldtyperequired
dataarray of TimesheetSubmissionyes
linksLinksyes

TimesheetDeadline

fieldtyperequired
daysunday | monday | tuesday | wednesday | thursday | friday | saturdayyes
timestringyes

TimesheetLockPolicy

fieldtyperequired
auto_lockbooleanyes
timesheet_deadlineTimesheetDeadline | nullyes
timezonestringyes
week_start_daysaturday | sunday | mondayyes
updated_atstring (date-time)yes

TimesheetLockPolicyEnvelope

fieldtyperequired
dataTimesheetLockPolicyyes
linksLinksyes

TimesheetLockPolicyPatch

fieldtyperequired
auto_lockboolean
timesheet_deadlineTimesheetDeadline | null
timezonestring

TimesheetLockWindow

fieldtyperequired
idintegeryes
kindmanual | autoyes
period_startstring | nullyes
period_endstring (date)yes
reasonstringyes
locked_by_user_idinteger | nullyes
locked_atstring (date-time)yes
unlocked_by_user_idinteger | nullyes
unlocked_atstring | nullyes
unlock_reasonstring | nullyes
activebooleanyes

TimesheetLockWindowEnvelope

fieldtyperequired
dataTimesheetLockWindowyes
linksLinksyes

TimesheetLockWindowPage

fieldtyperequired
dataarray of TimesheetLockWindowyes
linksPageLinksyes
pagePageMetadatayes

TimesheetManualLockInput

fieldtyperequired
locked_throughstring (date)yes
reasonstringyes

TimesheetRejectionInput

fieldtyperequired
reasonstringyes

TimesheetSubmission

fieldtyperequired
idintegeryes
user_idintegeryes
user_namestringyes
period_startstring (date)yes
period_endstring (date)yes
statusunsubmitted | submitted | approvedyes
originnative | harvest_import | legacy_backfillyes
source_statusstring | nullyes
source_observed_atstring | nullyes
submitted_by_user_idinteger | nullyes
submitted_atstring | nullyes
reviewed_by_user_idinteger | nullyes
reviewed_atstring | nullyes
rejection_reasonstring | nullyes
versionintegeryes
entry_countintegeryes
expense_countintegeryes
total_secondsintegeryes
billable_secondsintegeryes
nonbillable_secondsintegeryes
created_atstring (date-time)yes
updated_atstring (date-time)yes

TimesheetSubmissionDetail

fieldtyperequired
idintegeryes
user_idintegeryes
user_namestringyes
period_startstring (date)yes
period_endstring (date)yes
statusunsubmitted | submitted | approvedyes
originnative | harvest_import | legacy_backfillyes
source_statusstring | nullyes
source_observed_atstring | nullyes
submitted_by_user_idinteger | nullyes
submitted_atstring | nullyes
reviewed_by_user_idinteger | nullyes
reviewed_atstring | nullyes
rejection_reasonstring | nullyes
versionintegeryes
entry_countintegeryes
expense_countintegeryes
total_secondsintegeryes
billable_secondsintegeryes
nonbillable_secondsintegeryes
created_atstring (date-time)yes
updated_atstring (date-time)yes
entriesarray of TimesheetSubmissionEntryyes
expensesarray of TimesheetSubmissionExpenseyes

TimesheetSubmissionDetailEnvelope

fieldtyperequired
dataTimesheetSubmissionDetailyes
linksLinksyes

TimesheetSubmissionEntry

fieldtyperequired
idintegeryes
spent_datestring (date)yes
project_idintegeryes
project_namestringyes
task_idintegeryes
task_namestringyes
secondsintegeryes
notesstring | nullyes

TimesheetSubmissionEnvelope

fieldtyperequired
dataTimesheetSubmissionyes
linksLinksyes

TimesheetSubmissionExpense

fieldtyperequired
idintegeryes
spent_datestring (date)yes
project_idintegeryes
project_namestringyes
expense_category_idintegeryes
expense_category_namestringyes
total_cost_centsintegeryes
currencystringyes
notesstring | nullyes

TimesheetSubmissionInput

fieldtyperequired
period_startstring (date)yes
period_endstring (date)yes

TimesheetSubmissionPage

fieldtyperequired
dataarray of TimesheetSubmissionyes
linksPageLinksyes
pagePageMetadatayes

TimesheetUnlockInput

fieldtyperequired
reasonstringyes

TimesheetWithdrawalInput

fieldtyperequired
reasonstringyes

TokenAuthentication

fieldtyperequired
kindanyyes
token_idintegeryes
scopesarray of stringyes

TwoFactorChallengeAccepted

fieldtyperequired
statusauthenticatedyes

TwoFactorChallengeAcceptedEnvelope

fieldtyperequired
dataTwoFactorChallengeAcceptedyes

TwoFactorChallengeInput

fieldtyperequired
codestringyes
challengestring

TwoFactorChallengeIssued

fieldtyperequired
statustwo_factor_requiredyes
challengestringyes
expires_atstringyes

TwoFactorCodeInput

fieldtyperequired
codestringyes

TwoFactorEnrolment

fieldtyperequired
secretstringyes
otpauth_uristringyes
recovery_codesarray of stringyes

TwoFactorEnrolmentEnvelope

fieldtyperequired
dataTwoFactorEnrolmentyes
linksLinksyes

TwoFactorStatus

fieldtyperequired
enrolledbooleanyes
pending_confirmationbooleanyes
recovery_codes_remainingintegeryes

TwoFactorStatusEnvelope

fieldtyperequired
dataTwoFactorStatusyes
linksLinksyes

UninvoicedCurrencyTotal

fieldtyperequired
currencystringyes
rounded_secondsintegeryes
time_entry_countintegeryes
unpriced_time_entry_countintegeryes
expense_countintegeryes
time_centsinteger
expense_centsinteger
total_centsinteger

UninvoicedProjectRow

fieldtyperequired
client_idintegeryes
client_namestringyes
project_idintegeryes
project_namestringyes
project_codestringyes
totalsarray of UninvoicedCurrencyTotalyes

UninvoicedReport

fieldtyperequired
fromstring (date)yes
tostring (date)yes
client_idinteger | nullyes
project_idinteger | nullyes
totalsarray of UninvoicedCurrencyTotalyes
projectsarray of UninvoicedProjectRowyes

UninvoicedReportEnvelope

fieldtyperequired
dataUninvoicedReportyes
linksLinksyes

UserEmailAcceptedEnvelope

fieldtyperequired
dataobjectyes

UserEmailInput

fieldtyperequired
emailstringyes

UserRate

fieldtyperequired
idintegeryes
user_idintegeryes
amount_centsintegeryes
start_datestring | nullyes
end_datestring | nullyes
created_atstring (date-time)yes
updated_atstring (date-time)yes

UserRateEnvelope

fieldtyperequired
dataUserRateyes
linksLinksyes

UserRateInput

fieldtyperequired
expected_versionintegeryes
amount_centsintegeryes
start_datestring | null

UserRatePage

fieldtyperequired
dataarray of UserRateyes
linksPageLinksyes
pagePageMetadatayes

VersionedRowDeleteInput

fieldtyperequired
expected_versionintegeryes
expected_updated_atstring (date-time)yes

Whoami

fieldtyperequired
user_idintegeryes
profilemember | project_manager | people_admin | accounting | executive_manager | administratoryes
manager_grantsarray of stringyes
authenticationanyyes

WhoamiEnvelope

fieldtyperequired
dataWhoamiyes
linksLinksyes

WiseConnection

fieldtyperequired
profile_idstringyes
profile_namestring | nullyes
payable_recipientsintegeryes
webhooks_verifiablebooleanyes

WiseContactEnvelope

fieldtyperequired
dataobjectyes

WiseContactInput

fieldtyperequired
user_idintegeryes
identifierstringyes
currencystringyes

WiseDestinationEnvelope

fieldtyperequired
dataobjectyes

WiseLinkEnvelope

fieldtyperequired
dataobjectyes

WiseLinkInput

fieldtyperequired
user_idintegeryes
recipient_idstringyes

WiseOnboardInput

fieldtyperequired
user_idintegeryes
emailstringyes
legal_namestringyes
currencystringyes

WiseProposal

fieldtyperequired
user_idintegeryes
namestringyes
payroll_emailstring | nullyes
matchesarray of WiseRecipientyes

WiseProposalListEnvelope

fieldtyperequired
dataarray of WiseProposalyes

WiseRecipient

fieldtyperequired
idstringyes
holder_namestring | nullyes
currencystringyes
typestringyes
masked_summarystring | nullyes
emailstring | nullyes

WiseRecipientListEnvelope

fieldtyperequired
dataarray of WiseRecipientyes

WiseStatusEnvelope

fieldtyperequired
dataobjectyes