eZacto powered by CONFLICT

API reference

The native ezacto v1 contract. Contract and generated clients are deterministic build artifacts. An operator can switch whole modules off (SSO_ENABLED, BACKUPS_ENABLED, INVOICES_ENABLED, ACCOUNTING_ENABLED, each `true` or `false`): every operation of a switched-off module answers 403 `module_disabled`, makes no provider call and leaves its data untouched. 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/status

Get Activity log module availability for navigation

Responses

200 ActivityLogStatusEnvelope

Authentication

bearerAuth or cookieSession

GET/api/v1/activity-log

List activity recorded from delivered domain events (403 `module_disabled` when the module is off)

Newest first, a page at a time, ordered by when each entry was recorded and then its event id. Every filter narrows together; a value that is not valid is a 422, never an empty page. aggregate_id needs aggregate_type. Sign-in, token and account-deletion events are left out unless the reader is an administrator.

Parameters

nameinrequiredtype
cursorquerystring
per_pagequeryinteger
fromquerystring
toquerystring
event_typequerystring
actor_idqueryinteger
aggregate_typequerystring
aggregate_idqueryinteger

Responses

200 ActivityLogPage

Authentication

bearerAuth or cookieSession

GET/api/v1/activity-log/export

Download the filtered Activity log as CSV (403 `module_disabled` when the module is off)

The same filters as the list, applied together, and the same entries a reader may see. At most 5000 entries, newest first; a longer log is cut and the file ends with a Truncated line, with the x-export-truncated response header set to true. Event payloads are not included.

Parameters

nameinrequiredtype
fromquerystring
toquerystring
event_typequerystring
actor_idqueryinteger
aggregate_typequerystring
aggregate_idqueryinteger

Responses

200 —

Authentication

bearerAuth or cookieSession

GET/api/v1/activity-log/rolls

List the finished years the Activity log can still roll (administrator session; 403 `module_disabled` when the module is off)

Responses

200 RollableActivityYearsEnvelope

Authentication

cookieSession

POST/api/v1/activity-log/rolls

Roll a finished year of the Activity log into its own table (administrator session; 403 `module_disabled` when the module is off)

Nothing is deleted: the year's entries move to activity_log_, still append-only, and stay readable. The current year and a year that has already been rolled are refused with 409. The roll is recorded in the log as activity_log.rolled. An API token cannot call this.

Request body

RollActivityYearInput (required)

Responses

201 ActivityYearRolledEnvelope

Authentication

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

POST/api/v1/admin/retention-policy

Publish an operator erasure and retention policy version

Request body

AccountRetentionPublication (required)

Responses

200 AccountRetentionEnvelope

Authentication

cookieSession

GET/api/v1/admin/retention-reviews

List due retained-record and downstream review obligations

Parameters

nameinrequiredtype
afterquerystring

Responses

200 RetentionReviewListEnvelope

Authentication

cookieSession

GET/api/v1/admin/deletion-requests/{id}/retention-reviews

Read recorded retention and cleanup evidence

Parameters

nameinrequiredtype
idpathyesstring

Responses

200 RetentionReviewListEnvelope

Authentication

cookieSession

PATCH/api/v1/admin/deletion-requests/{id}/retention-reviews/{area}

Record an operator review with evidence and compare-and-swap

Parameters

nameinrequiredtype
idpathyesstring
areapathyesstring

Request body

RetentionReviewInput (required)

Responses

200 RetentionReviewEnvelope

Authentication

cookieSession

POST/api/v1/admin/deletion-requests/{id}/completion

Confirm a reviewed request outcome with remaining retention disclosed

Parameters

nameinrequiredtype
idpathyesstring

Request body

DeletionCompletionInput (required)

Responses

200 DeletionCompletionEnvelope

Authentication

cookieSession

GET/api/v1/admin/deletion-requests/{id}/closure

Review actual account data before irreversible access closure

Parameters

nameinrequiredtype
idpathyesstring

Responses

200 AccountClosurePreviewEnvelope

Authentication

cookieSession

POST/api/v1/admin/deletion-requests/{id}/closure

Erase local credentials and optional profile under reviewed retention decisions

Parameters

nameinrequiredtype
idpathyesstring

Request body

AccountClosureInput (required)

Responses

200 AccountClosureRecordEnvelope

Authentication

cookieSession

POST/api/v1/admin/deletion-requests/{id}/apple-cleanup

Retry server-managed Apple cleanup after local account closure

Parameters

nameinrequiredtype
idpathyesstring

Request body

EmptyObject (required)

Responses

200 AppleCleanupStatusEnvelope

Authentication

cookieSession

GET/api/v1/admin/deletion-requests

List account deletion requests

Parameters

nameinrequiredtype
afterquerystring

Responses

200 AccountDeletionListEnvelope

Authentication

cookieSession

GET/api/v1/admin/deletion-requests/{id}

Read an account deletion request

Parameters

nameinrequiredtype
idpathyesstring

Responses

200 AccountDeletionDetailEnvelope

Authentication

cookieSession

PATCH/api/v1/admin/deletion-requests/{id}

Update request progress without completing erasure

Parameters

nameinrequiredtype
idpathyesstring

Request body

AccountDeletionUpdate (required)

Responses

200 AccountDeletionDetailEnvelope

Authentication

cookieSession

POST/api/v1/admin/deletion-requests/{id}/notification

Retry an unavailable or failed administrator notification

Parameters

nameinrequiredtype
idpathyesstring

Responses

200 AccountDeletionDetailEnvelope

Authentication

cookieSession

GET/api/v1/settings/notifications

Company settings for the mail the instance sends its own people

Responses

200 NotificationSettingsEnvelope

Authentication

cookieSession

POST/api/v1/settings/notifications

Change the company settings for budget alerts and reminders

Request body

NotificationSettingsInput (required)

Responses

200 NotificationSettingsEnvelope

Authentication

cookieSession

GET/api/v1/settings/timesheet-auto-approval

The automatic timesheet approval policy

Responses

200 TimesheetAutoApprovalEnvelope

Authentication

cookieSession

POST/api/v1/settings/timesheet-auto-approval

Turn automatic timesheet approval on or off, or change its window

Request body

TimesheetAutoApprovalInput (required)

Responses

200 TimesheetAutoApprovalEnvelope

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

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

Set the last issue date a recurring definition's file goes with

Parameters

nameinrequiredtype
recurringInvoiceIdpathyesinteger
attachmentIdpathyesinteger

Request body

RecurringAttachmentThroughInput (required)

Responses

200 AttachmentEnvelope

Authentication

bearerAuth or cookieSession

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

Stop a file going with the invoices a recurring definition issues

Parameters

nameinrequiredtype
recurringInvoiceIdpathyesinteger
attachmentIdpathyesinteger

Responses

204 —

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/apple/native-capabilities

Check explicit native Apple lifecycle protocol support

Responses

200 NativeAppleCapabilities

Authentication

none

POST/auth/apple

Verify origin-bound Apple lifecycle custody and native identity before sign-in

Request body

NativeAppleSignInInput (required)

Responses

200 NativeAppleSignInEnvelope

Authentication

none

POST/auth/apple/deletion-requests/{id}/binding

Bind fresh cleanup-purpose Apple custody to a pending deletion request

Parameters

nameinrequiredtype
idpathyesstring

Request body

AppleLifecycleProofInput (required)

Responses

204 —

Authentication

none

POST/auth/apple/deletion-requests/{id}/revocation

Durably accept exact request-bound Apple invalidation evidence

Parameters

nameinrequiredtype
idpathyesstring

Request body

AppleLifecycleProofInput (required)

Responses

204 —

Authentication

none

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/two-factor/email-code

Email a verification code for a pending sign-in

Supersedes the earlier challenge: the response carries the new one. Limited to one a minute and five an hour per user. Only a password sign-in can ask.

Request body

TwoFactorEmailCodeInput (required)

Responses

200 TwoFactorChallengeIssuedEnvelope

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

POST/api/v1/backup/offsite/check

Verify the deployment-configured encrypted off-site backup destination

Responses

200 OffsiteBackupCheckEnvelope

Authentication

cookieSession

GET/api/v1/backup/status

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

Responses

200 BackupStatusEnvelope

Authentication

cookieSession

GET/api/v1/backup/runs

List backup runs, newest first, a page at a time

The history behind the backup status, which holds only the latest runs. page.total counts everything the filters match, not only this page.

Parameters

nameinrequiredtype
cursorquerystring
per_pagequeryinteger
statusquerystring: running | completed | failed
triggerquerystring: nightly | manual

Responses

200 BackupRunPage

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

capacity

GET/api/v1/organization-holidays

List organization holidays

Organization-wide local calendar dates. Reads require schedule:read. Only administrators with schedule:write may change dates. Each weekday removes one fifth of the person’s current weekly capacity; weekends remove none. Overlapping personal leave and holidays use the larger daily amount, never their sum. No tracked time or invoices are changed.

Parameters

nameinrequiredtype
fromquerystring
toquerystring
cursorquerystring
per_pagequeryinteger

Responses

200 OrganizationHolidayPage

Authentication

bearerAuth or cookieSession

POST/api/v1/organization-holidays

Add an organization holiday

Organization-wide local calendar dates. Reads require schedule:read. Only administrators with schedule:write may change dates. Each weekday removes one fifth of the person’s current weekly capacity; weekends remove none. Overlapping personal leave and holidays use the larger daily amount, never their sum. No tracked time or invoices are changed.

Request body

OrganizationHolidayInput (required)

Responses

201 OrganizationHolidayEnvelope

Authentication

bearerAuth or cookieSession

GET/api/v1/organization-holidays/{id}

Read an organization holiday

Organization-wide local calendar dates. Reads require schedule:read. Only administrators with schedule:write may change dates. Each weekday removes one fifth of the person’s current weekly capacity; weekends remove none. Overlapping personal leave and holidays use the larger daily amount, never their sum. No tracked time or invoices are changed.

Parameters

nameinrequiredtype
idpathyesinteger

Responses

200 OrganizationHolidayEnvelope

Authentication

bearerAuth or cookieSession

PATCH/api/v1/organization-holidays/{id}

Replace holiday fields at their current version

Organization-wide local calendar dates. Reads require schedule:read. Only administrators with schedule:write may change dates. Each weekday removes one fifth of the person’s current weekly capacity; weekends remove none. Overlapping personal leave and holidays use the larger daily amount, never their sum. No tracked time or invoices are changed.

Parameters

nameinrequiredtype
idpathyesinteger

Request body

OrganizationHolidayUpdateInput (required)

Responses

200 OrganizationHolidayEnvelope

Authentication

bearerAuth or cookieSession

DELETE/api/v1/organization-holidays/{id}

Remove an organization holiday at its current version

Organization-wide local calendar dates. Reads require schedule:read. Only administrators with schedule:write may change dates. Each weekday removes one fifth of the person’s current weekly capacity; weekends remove none. Overlapping personal leave and holidays use the larger daily amount, never their sum. No tracked time or invoices are changed.

Parameters

nameinrequiredtype
idpathyesinteger

Request body

OrganizationHolidayDeleteInput (required)

Responses

200 OrganizationHolidayEnvelope

Authentication

bearerAuth or cookieSession

GET/api/v1/planning-placeholders

List permitted planning placeholders

Named unassigned project demand, separate from people, capacity, actual time and money. Reads require schedule:read; mutations require schedule:write. Current management authority and project access are rechecked, including within native writes. Ordinary members cannot list organization-wide unassigned demand. Project managers are confined to managed work. Every edit or archive requires its saved version; a conflict preserves the saved state. Archiving a placeholder archives its remaining open demand without removing assigned person allocations.

Parameters

nameinrequiredtype
cursorquerystring
per_pagequeryinteger
is_activequeryboolean

Responses

200 PlanningPlaceholderPage

Authentication

bearerAuth or cookieSession

POST/api/v1/planning-placeholders

Create a named planning placeholder

Named unassigned project demand, separate from people, capacity, actual time and money. Reads require schedule:read; mutations require schedule:write. Current management authority and project access are rechecked, including within native writes. Ordinary members cannot list organization-wide unassigned demand. Project managers are confined to managed work. Every edit or archive requires its saved version; a conflict preserves the saved state. Archiving a placeholder archives its remaining open demand without removing assigned person allocations.

Request body

PlanningPlaceholderInput (required)

Responses

201 PlanningPlaceholderEnvelope

Authentication

bearerAuth or cookieSession

PATCH/api/v1/planning-placeholders/{id}

Rename a planning placeholder at its current version

Named unassigned project demand, separate from people, capacity, actual time and money. Reads require schedule:read; mutations require schedule:write. Current management authority and project access are rechecked, including within native writes. Ordinary members cannot list organization-wide unassigned demand. Project managers are confined to managed work. Every edit or archive requires its saved version; a conflict preserves the saved state. Archiving a placeholder archives its remaining open demand without removing assigned person allocations.

Parameters

nameinrequiredtype
idpathyesinteger

Request body

PlanningPlaceholderUpdateInput (required)

Responses

200 PlanningPlaceholderEnvelope

Authentication

bearerAuth or cookieSession

DELETE/api/v1/planning-placeholders/{id}

Archive a placeholder and its open unassigned demand

Named unassigned project demand, separate from people, capacity, actual time and money. Reads require schedule:read; mutations require schedule:write. Current management authority and project access are rechecked, including within native writes. Ordinary members cannot list organization-wide unassigned demand. Project managers are confined to managed work. Every edit or archive requires its saved version; a conflict preserves the saved state. Archiving a placeholder archives its remaining open demand without removing assigned person allocations.

Parameters

nameinrequiredtype
idpathyesinteger

Request body

PlanningVersionInput (required)

Responses

200 PlanningPlaceholderEnvelope

Authentication

bearerAuth or cookieSession

GET/api/v1/placeholder-allocations

List scoped unassigned allocation records

Named unassigned project demand, separate from people, capacity, actual time and money. Reads require schedule:read; mutations require schedule:write. Current management authority and project access are rechecked, including within native writes. Ordinary members cannot list organization-wide unassigned demand. Project managers are confined to managed work. Every edit or archive requires its saved version; a conflict preserves the saved state. Archiving a placeholder archives its remaining open demand without removing assigned person allocations.

Parameters

nameinrequiredtype
cursorquerystring
per_pagequeryinteger
project_idqueryinteger
statequerystring: open | assigned | archived
fromquerystring
toquerystring

Responses

200 PlaceholderAllocationPage

Authentication

bearerAuth or cookieSession

POST/api/v1/placeholder-allocations

Plan unassigned project work

Named unassigned project demand, separate from people, capacity, actual time and money. Reads require schedule:read; mutations require schedule:write. Current management authority and project access are rechecked, including within native writes. Ordinary members cannot list organization-wide unassigned demand. Project managers are confined to managed work. Every edit or archive requires its saved version; a conflict preserves the saved state. Archiving a placeholder archives its remaining open demand without removing assigned person allocations.

Request body

PlaceholderAllocationInput (required)

Responses

201 PlaceholderAllocationEnvelope

Authentication

bearerAuth or cookieSession

PATCH/api/v1/placeholder-allocations/{id}

Edit open unassigned work at its current version

Named unassigned project demand, separate from people, capacity, actual time and money. Reads require schedule:read; mutations require schedule:write. Current management authority and project access are rechecked, including within native writes. Ordinary members cannot list organization-wide unassigned demand. Project managers are confined to managed work. Every edit or archive requires its saved version; a conflict preserves the saved state. Archiving a placeholder archives its remaining open demand without removing assigned person allocations.

Parameters

nameinrequiredtype
idpathyesinteger

Request body

PlaceholderAllocationUpdateInput (required)

Responses

200 PlaceholderAllocationEnvelope

Authentication

bearerAuth or cookieSession

DELETE/api/v1/placeholder-allocations/{id}

Archive open unassigned work at its current version

Named unassigned project demand, separate from people, capacity, actual time and money. Reads require schedule:read; mutations require schedule:write. Current management authority and project access are rechecked, including within native writes. Ordinary members cannot list organization-wide unassigned demand. Project managers are confined to managed work. Every edit or archive requires its saved version; a conflict preserves the saved state. Archiving a placeholder archives its remaining open demand without removing assigned person allocations.

Parameters

nameinrequiredtype
idpathyesinteger

Request body

PlanningVersionInput (required)

Responses

200 PlaceholderAllocationEnvelope

Authentication

bearerAuth or cookieSession

POST/api/v1/placeholder-allocations/{id}/assign

Atomically assign unassigned demand to a person

Named unassigned project demand, separate from people, capacity, actual time and money. Reads require schedule:read; mutations require schedule:write. Current management authority and project access are rechecked, including within native writes. Ordinary members cannot list organization-wide unassigned demand. Project managers are confined to managed work. Every edit or archive requires its saved version; a conflict preserves the saved state. Archiving a placeholder archives its remaining open demand without removing assigned person allocations. One explicit command creates one person allocation and marks the open placeholder allocation assigned, with an audit event and actor-scoped idempotency receipt in the same transaction. Repeat the same key and exact payload to recover its prior result; reusing the key for different input is refused. The expected version, active target and project, current authority and same-person/project overlap are checked. An overlap consumes no demand. Over-allocation produces warnings. Project access and staffing are never granted implicitly; a missing-access prerequisite is returned separately.

Parameters

nameinrequiredtype
idpathyesinteger

Request body

PlaceholderAssignmentInput (required)

Responses

200 PlaceholderAssignmentEnvelope

Authentication

bearerAuth or cookieSession

GET/api/v1/resource-calendar/context

Read current organization-local calendar context

Requires schedule:read and current native actor authority. Supplies organization-local today, current week, timezone and week start for initial calendar navigation without using the device date. Always no-store; invalid imported organization zones fall back to UTC.

Responses

200 ResourceCalendarContextEnvelope

Authentication

bearerAuth or cookieSession

GET/api/v1/resource-calendar

Read the scoped project or team resource calendar

Requires schedule:read. A bounded live projection of planned, available and rounded tracked seconds, with separate unassigned demand. Uses current self/managed-person/project authority on every page. Hidden project work is labelled only by aggregate scope; private leave details are never returned. Availability uses full touched organization weeks and current person capacity. Context always contains organization-local today/week and refreshes even if revision is unchanged. No actual time, staffing or accounting mutations. More than the native fact budget is refused with a range_too_large field error; narrow the date range or person filter. Other web profiles remain read-only.

Parameters

nameinrequiredtype
viewqueryyesstring: project | team
fromqueryyesstring
toqueryyesstring
project_idqueryinteger
person_idqueryinteger
per_pagequeryinteger
cursorquerystring

Responses

200 ResourceCalendarEnvelope

Authentication

bearerAuth or cookieSession

GET/api/v1/resource-calendar/allocations

Read scoped dated allocation ranges

Requires schedule:read and current self/managed-person/project access. Returns actual saved allocation dates, exact weekly seconds and mutation versions; no ranges are inferred from weekly aggregates. Snaps the query to full organization weeks, at most 53. Archived people and plans on archived projects are omitted. Project view requires project_id. The live signed cursor is independently scoped to this query. No hidden project identities, time-off detail, rates or actual-time writes.

Parameters

nameinrequiredtype
viewqueryyesstring: project | team
fromqueryyesstring
toqueryyesstring
project_idqueryinteger
person_idqueryinteger
per_pagequeryinteger
cursorquerystring

Responses

200 ResourceCalendarAllocationPage

Authentication

bearerAuth or cookieSession

GET/api/v1/resource-calendar/projects

List project identities visible to the resource calendar

Requires schedule:read. Current administrators/executive managers see all projects; project managers see managed projects; members see assigned historical/current project identities. Optional is_active narrows the catalog; archived identities remain available to label retained actuals. Pagination is bounded at 100; current authority is rechecked for every page.

Parameters

nameinrequiredtype
is_activequeryboolean
per_pagequeryinteger
cursorquerystring

Responses

200 ResourceCalendarProjectPage

Authentication

bearerAuth or cookieSession

GET/api/v1/calendar-feeds

List owned advisory calendar subscriptions

Responses

200 CalendarFeedList

Authentication

cookieSession

POST/api/v1/calendar-feeds

Issue a scoped expiring calendar subscription password

Request body

CalendarFeedInput (required)

Responses

201 CalendarFeedIssued

Authentication

cookieSession

POST/api/v1/calendar-feeds/{id}/rotate

Replace a subscription password while retaining stable event IDs

Parameters

nameinrequiredtype
idpathyesstring

Responses

200 CalendarFeedIssued

Authentication

cookieSession

DELETE/api/v1/calendar-feeds/{id}

Revoke a calendar subscription immediately

Parameters

nameinrequiredtype
idpathyesstring

Responses

204 —

Authentication

cookieSession

GET/api/v1/calendar-feeds/{id}/download

Download the current authorized advisory calendar

Parameters

nameinrequiredtype
idpathyesstring

Responses

200 —

Authentication

cookieSession

client-rate-cards

GET/api/v1/clients/{id}/rate-card

Get the rate card attached to a client

The card attached directly to this client, with every version, oldest first; inheritance is not applied (use the effective lookup for that). 404 rate_card_not_found when the client has no card. Billable rates are money: only the profiles that may see billable rates (administrator, accounting, executive manager, and a project manager granted billable_rates_manager) read a card, and everyone else is 403 money_forbidden.

Parameters

nameinrequiredtype
idpathyesinteger

Responses

200 ClientRateCardEnvelope

Authentication

bearerAuth or cookieSession

POST/api/v1/clients/{id}/rate-card

Attach a named rate card to a client

A client has at most one card (409 rate_card_exists); change its rates by adding a version. The card starts with no versions and prices nothing until one is added. Same visibility rule as reading, and the caller must also be allowed to write clients.

Parameters

nameinrequiredtype
idpathyesinteger

Request body

ClientRateCardInput (required)

Responses

201 ClientRateCardEnvelope

Authentication

bearerAuth or cookieSession

POST/api/v1/clients/{id}/rate-card/versions

Append a version to a client's rate card

Versions are append-only and effective-dated: the version in force on a date is the one with the latest start_date on or before it, and a null start_date means all prior dates. A new version must start after every existing one (409 rate_card_version_order); a correction is simply a later version. A line with a null task_id is the card default; a task line wins for that task. An empty lines array retires the card, so it is skipped and the next ancestor's card applies. Adding a version prices work resolved afterwards; it never changes an existing entry, snapshot or invoice, and existing entries change only through the audited reprice.

Parameters

nameinrequiredtype
idpathyesinteger

Request body

ClientRateCardVersionInput (required)

Responses

201 ClientRateCardEnvelope

Authentication

bearerAuth or cookieSession

GET/api/v1/clients/{id}/effective-rate-card

Look up the card rate that prices a task for a client

Walks the client and its ancestors through parent_client_id only (never the bill-to client), nearest first, with the same rules the rate resolver uses: a card with no version in force, an empty version, or no line for the task and no default line is skipped. supplied_by_client_id is the node whose card priced it and depth how far up that node sits (0 is the client itself). The card prices only projects billed by people that use default rates. spent_date defaults to today in the instance time zone. 404 rate_card_not_found when no card prices it.

Parameters

nameinrequiredtype
idpathyesinteger
task_idqueryyesinteger
spent_datequerystring

Responses

200 EffectiveClientRateCardEnvelope

Authentication

bearerAuth or 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

csv-import

GET/api/v1/csv-import-capabilities

Discover private CSV staging support

Responses

200 CsvImportCapabilitiesEnvelope

Authentication

none

POST/api/v1/csv-imports

Stream CSV bytes into private administrator staging

Parameters

nameinrequiredtype
X-CSV-SHA256headeryesstring
X-CSV-Bytesheaderyesinteger

Request body

CsvImportUploadBytes (required)

Responses

201 CsvImportRunEnvelope

Authentication

cookieSession

GET/api/v1/csv-imports/{runId}/mapping

Read current administrator-owned source and mapping choices

Parameters

nameinrequiredtype
runIdpathyesstring

Responses

200 CsvImportMappingStateEnvelope

Authentication

cookieSession

PATCH/api/v1/csv-imports/{runId}/mapping

Explicitly register the workspace and set source, zone, mapping and exclusions

Parameters

nameinrequiredtype
runIdpathyesstring

Request body

CsvImportMapping (required)

Responses

200 CsvImportRunEnvelope

Authentication

cookieSession

POST/api/v1/csv-imports/{runId}/preview

Compute an immutable preview without writing organization rows

Parameters

nameinrequiredtype
runIdpathyesstring

Request body

CsvImportPreviewRequest

Responses

200 CsvImportPreviewEnvelope

Authentication

cookieSession

GET/api/v1/csv-imports/{runId}

Read private run status, tallies and retention deadline

Parameters

nameinrequiredtype
runIdpathyesstring

Responses

200 CsvImportRunEnvelope

Authentication

cookieSession

GET/api/v1/csv-imports/{runId}/errors

Read paginated static physical-line diagnostics

Parameters

nameinrequiredtype
runIdpathyesstring
preview_idquerystring
cursorquerystring
per_pagequeryinteger
kindquerystring: invalid | unsupported | warning

Responses

200 CsvImportErrorPageEnvelope

Authentication

cookieSession

GET/api/v1/csv-imports/{runId}/catalog

Read immutable private source labels and explicit destination candidates

Parameters

nameinrequiredtype
runIdpathyesstring
preview_idquerystring
cursorquerystring
per_pagequeryinteger
kindqueryyesstring: people | clients | projects | tasks
source_keyquerystring

Responses

200 CsvImportCatalogPageEnvelope

Authentication

cookieSession

GET/api/v1/csv-imports/{runId}/diagnostics

Download static diagnostics JSON without CSV cells or notes

Parameters

nameinrequiredtype
runIdpathyesstring
preview_idquerystring

Responses

200 —

Authentication

cookieSession

DELETE/api/v1/csv-imports/{runId}/input

Purge private input and diagnostics, preserving minimal dedup facts and imported time

Parameters

nameinrequiredtype
runIdpathyesstring

Responses

204 —

Authentication

cookieSession

csv-imports

POST/api/v1/csv-imports/{runId}/apply

Confirm and queue the immutable reviewed CSV selection

Container-only administrator session operation. Current native session, owned stage and target incarnation are checked before content. No source values or credentials are returned. Cancel stops future writes and retains committed time and setup.

Parameters

nameinrequiredtype
runIdpathyesstring
Idempotency-Keyheaderyesstring

Request body

CsvImportApplyCommand (required)

Responses

200 CsvImportApplyEnvelope

Authentication

bearerAuth or cookieSession

GET/api/v1/csv-imports/{runId}/apply

Recover authoritative CSV progress and a pending command receipt

Container-only administrator session operation. Current native session, owned stage and target incarnation are checked before content. No source values or credentials are returned. Cancel stops future writes and retains committed time and setup.

Parameters

nameinrequiredtype
runIdpathyesstring
command_idquerystring

Responses

200 CsvImportApplyEnvelope

Authentication

bearerAuth or cookieSession

POST/api/v1/csv-imports/{runId}/resume

Explicitly resume the same sealed selection under a current session

Container-only administrator session operation. Current native session, owned stage and target incarnation are checked before content. No source values or credentials are returned. Cancel stops future writes and retains committed time and setup.

Parameters

nameinrequiredtype
runIdpathyesstring
Idempotency-Keyheaderyesstring

Request body

CsvImportApplyCommand (required)

Responses

200 CsvImportApplyEnvelope

Authentication

bearerAuth or cookieSession

POST/api/v1/csv-imports/{runId}/cancel

Stop future CSV writes without rolling back committed rows

Container-only administrator session operation. Current native session, owned stage and target incarnation are checked before content. No source values or credentials are returned. Cancel stops future writes and retains committed time and setup.

Parameters

nameinrequiredtype
runIdpathyesstring
Idempotency-Keyheaderyesstring

Request body

CsvImportCancelCommand (required)

Responses

200 CsvImportApplyEnvelope

Authentication

bearerAuth or cookieSession

deel-sync

GET/api/v1/deel-sync

Deel time sync mode, schedule and recent runs

The sync is manual unless an administrator sets it to automatic. Automatic runs once a day at run_time in the organization timezone, through the hourly cron. Nothing is sent to Deel unless configured is true.

Responses

200 DeelSyncStatus

Authentication

cookieSession

PATCH/api/v1/deel-sync/settings

Set the Deel sync mode and automatic run time

Request body

DeelSyncSettingsCommand (required)

Responses

204 —

Authentication

cookieSession

POST/api/v1/deel-sync/preview

Preview the timesheets a Deel sync would create, without sending any

Request body

DeelSyncWindow (required)

Responses

200 DeelSyncPreview

Authentication

cookieSession

POST/api/v1/deel-sync/runs

Send the timesheets from a preview to Deel

Sends only when the plan still holds exactly the entry_ids from the preview. If the plan has changed, nothing is sent and the response is 409 deel_sync_stale; preview again.

Request body

DeelSyncRunCommand (required)

Responses

200 DeelSyncRunResult

Authentication

cookieSession

POST/api/v1/deel-staging/payment-status

Refresh provider payment status for previously staged timesheets

Request body

DeelPaymentStatusMonth (required)

Responses

200 DeelPaymentStatusRefreshEnvelope

Authentication

cookieSession

GET/api/v1/deel-staging

Inspect configured administrator-reviewed hour staging availability

Responses

200 DeelStagingStatusEnvelope

Authentication

cookieSession

POST/api/v1/deel-staging/preview

Review stopped hours for selected Deel people

Request body

DeelStageSelection (required)

Responses

200 DeelStagePreviewEnvelope

Authentication

cookieSession

POST/api/v1/deel-staging/commands

Stage administrator-reviewed hours once; payment completes in Deel

Parameters

nameinrequiredtype
Idempotency-Keyheaderyesstring

Request body

DeelStageCommand (required)

Responses

200 DeelStageResultEnvelope

Authentication

cookieSession

POST/api/v1/deel-staging/status

Recover the status of an exact staging command without sending hours

Request body

DeelStageCommand (required)

Responses

200 DeelStageStatusEnvelope

Authentication

cookieSession

email

GET/api/v1/email-log

List outbound email delivery outcomes

Newest first, or oldest first with order=oldest, a page at a time. The first page fixes the traversal to the mail that existed when it was read: mail sent after it does not appear on later pages of the same traversal. The filters combine. from and to are calendar days in the organization's timezone, both included. q matches part of a recipient's address or name in To or Cc, ignoring case. page.total counts everything the filters match, not only this page.

Parameters

nameinrequiredtype
cursorquerystring
per_pagequeryinteger
statusquerystring: queued | sent | bounced | complained | failed
kindquerystring: invoice | invoice_preview | reminder | thank_you | sign_in | account
fromquerystring
toquerystring
qquerystring
orderquerystring: newest | oldest

Responses

200 EmailLogPage

Authentication

cookieSession

GET/api/v1/email-suppressions

List suppressed recipients with immutable provider evidence

Parameters

nameinrequiredtype
cursorquerystring
per_pagequeryinteger

Responses

200 EmailSuppressionsPage

Authentication

cookieSession

POST/api/v1/email-suppressions/{id}/lift

Allow future delivery after reviewing the current suppression evidence

Parameters

nameinrequiredtype
idpathyesinteger

Request body

EmailSuppressionLiftInput

Responses

200 EmailSuppressionLiftEnvelope

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

POST/api/v1/estimates

Create a new estimate draft

Requires invoices:write and an idempotency key. Copies content into independent quote rows, with explicit client, number and issue date. Never sends, accepts, charges or converts. Optional template provenance must still be current and active.

Parameters

nameinrequiredtype
Idempotency-Keyheaderyesstring

Request body

EstimateDraftInput (required)

Responses

201 EstimateDraftEnvelope

Authentication

bearerAuth or cookieSession

GET/api/v1/estimates/{id}

Get an estimate

Parameters

nameinrequiredtype
idpathyesinteger

Responses

200 EstimateEnvelope

Authentication

bearerAuth or cookieSession

PATCH/api/v1/estimates/{id}/expiry

Set or clear the last day a customer can answer an estimate

The expiry is the last day the estimate can still be answered, to the end of that day in the instance timezone; null clears it and the organization's estimate validity applies. Moving it does not change the content version a customer was shown. Asking for the expiry the estimate already has changes nothing.

Parameters

nameinrequiredtype
idpathyesinteger

Request body

EstimateExpiryInput (required)

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

GET/api/v1/estimate-templates

List reusable quote content

Requires invoices:write. Archived templates remain visible for audit; only active templates can create drafts. At most 1000 rows with an explicit truncated indicator.

Responses

200 EstimateTemplateListEnvelope

Authentication

bearerAuth or cookieSession

POST/api/v1/estimate-templates

Save reusable quote content

Creates audited reusable content without customer, document or delivery identity.

Request body

EstimateTemplateInput (required)

Responses

201 EstimateTemplateEnvelope

Authentication

bearerAuth or cookieSession

PATCH/api/v1/estimate-templates/{id}

Edit or archive reusable quote content

Requires the current version; changes never rewrite estimates already created. Archiving is final.

Parameters

nameinrequiredtype
idpathyesstring

Request body

EstimateTemplateUpdateInput (required)

Responses

200 EstimateTemplateEnvelope

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/reconciliation

Differences between our invoices and the QuickBooks company, listed and never corrected

Responses

200 QuickBooksReconciliationEnvelope

Authentication

cookieSession

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

Whether this invoice and its payments are mirrored in QuickBooks, and how the last attempt went

Parameters

nameinrequiredtype
idpathyesinteger

Responses

200 InvoiceQuickBooksEnvelope

Authentication

cookieSession

POST/api/v1/invoices/{id}/quickbooks/sync

Mirror this invoice and its unmirrored payments to QuickBooks now

Parameters

nameinrequiredtype
idpathyesinteger

Responses

200 InvoiceQuickBooksEnvelope

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-elevations

POST/api/v1/invoice-elevations/email-code

Send a second-factor code and rotate its bound elevation challenge

Requires the original administrator API token and pending challenge. The replacement remains bound to its original password verification, base token and invoice. Use the returned challenge token; the earlier one is no longer valid.

Request body

InvoiceElevationEmailInput (required)

Responses

200 InvoiceElevationChallengeEnvelope

Authentication

bearerAuth

POST/api/v1/invoice-elevations

Reauthenticate an administrator for temporary draft invoice edits

Requires an administrator API token with invoices:write, live password authentication, and the same verified user credentials. Confirmed authenticator or email MFA requires a bound second step. The returned capability belongs to this base token and invoice, lasts at most 15 minutes, and is returned once. Credential responses cannot be replayed from the HTTP cache.

Request body

InvoiceElevationInput (required)

Responses

201 InvoiceElevationStartEnvelope, 202 InvoiceElevationStartEnvelope

Authentication

bearerAuth

POST/api/v1/invoice-elevations/verify

Complete the bound second factor for a draft invoice elevation

A valid MFA challenge can only be completed by its original administrator and base API token. The verified capability never creates a browser session.

Request body

InvoiceElevationVerifyInput (required)

Responses

201 InvoiceElevationIssuedEnvelope

Authentication

bearerAuth

DELETE/api/v1/invoice-elevations/{id}

Revoke this administrator token’s temporary invoice capability

Parameters

nameinrequiredtype
idpathyesstring

Responses

204 —

Authentication

bearerAuth

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

Atomically unlink selected time from one draft invoice

Administrator API token only; requires invoices:write, time_entries:write and X-Ezacto-Invoice-Elevation bound to this invoice. All selected stopped entries must still belong to the same current draft. The whole command and its before/after audit commit together. Invoice line amounts remain unchanged.

Parameters

nameinrequiredtype
idpathyesinteger
Idempotency-Keyheaderyesstring
X-Ezacto-Invoice-Elevationheaderyesstring

Request body

ElevatedInvoiceTimeUnlinkInput (required)

Responses

200 ElevatedInvoiceTimeUnlinkEnvelope

Authentication

bearerAuth

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

One email: To the recipients, Cc the copies, the organization's always-Cc addresses and, when send_me_a_copy is true, the person sending. The subject and message are templates; the body is the message followed by the invoice summary.

Parameters

nameinrequiredtype
idpathyesinteger
Idempotency-Keyheaderyesstring

Request body

InvoiceEmailDeliveryInput (required)

Responses

202 InvoiceCommandEnvelope

Authentication

bearerAuth or cookieSession

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

Compose the invoice email a delivery would send, without sending or recording anything

Parameters

nameinrequiredtype
idpathyesinteger

Request body

InvoiceEmailPreviewInput (required)

Responses

200 InvoiceEmailPreviewEnvelope

Authentication

bearerAuth or cookieSession

GET/api/v1/invoices/{id}/deliveries/preview/document

Download the invoice PDF a delivery would carry, stamped PREVIEW on every page

Parameters

nameinrequiredtype
idpathyesinteger
append_pdfsquerystring: true | false

Responses

200 —

Authentication

bearerAuth or cookieSession

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

Send the invoice email, stamped PREVIEW, to the signed-in user only

Not a delivery: no invoice message, no delivery record, no event. Limited to a few per invoice per hour.

Parameters

nameinrequiredtype
idpathyesinteger

Request body

InvoiceEmailPreviewInput (required)

Responses

202 InvoiceEmailPreviewSentEnvelope

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

Newest first: by issue_date, latest first; then by number, highest first -- compared as a number when it is made of digits alone (leading zeros ignored) and as text, by Unicode code point, otherwise, with all-digit numbers ahead of the rest on a day that has both; then by id, highest first, so no two invoices tie. The first page fixes the traversal to the invoices that existed when it was read: an invoice created after it does not appear on later pages of the same traversal, and is listed by a new one. Editing an invoice's issue_date or number moves it in the order, so a traversal already under way may miss it or list it twice. The number parameter narrows the list to the invoice with exactly that number, compared as text, so 089 is not 89; numbers are unique, so the page holds that invoice or nothing. The sort parameter orders by issue_date, due_date, number, amount or balance, with - in front for descending (the default is -issue_date, the order above). The chosen column ranks first, then the number, then the id, all in the one direction. A cursor belongs to the sort it was issued under and is refused under another.

Parameters

nameinrequiredtype
cursorquerystring
per_pagequeryinteger
statequerystring
client_idquerystring
numberquerystring
sortquerystring

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

API-token edits require an administrator and X-Ezacto-Invoice-Elevation bound to this base token and draft invoice. Browser sessions retain their existing policy.

Parameters

nameinrequiredtype
idpathyesinteger
Idempotency-Keyheaderyesstring
X-Ezacto-Invoice-Elevationheaderstring

Request body

InvoiceEditInput (required)

Responses

200 InvoiceCommandEnvelope

Authentication

bearerAuth or cookieSession

POST/api/v1/invoice-generations

Create one draft invoice from tracked work, a flat fee covering tracked work, or a blank free-form draft

Parameters

nameinrequiredtype
Idempotency-Keyheaderyesstring

Request body

InvoiceGenerationInput (required)

Responses

201 InvoiceGenerationEnvelope

Authentication

bearerAuth or cookieSession

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

Add a parent-owned invoice line

API-token edits require an administrator and X-Ezacto-Invoice-Elevation bound to this base token and draft invoice. Browser sessions retain their existing policy.

Parameters

nameinrequiredtype
idpathyesinteger
Idempotency-Keyheaderyesstring
X-Ezacto-Invoice-Elevationheaderstring

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

API-token edits require an administrator and X-Ezacto-Invoice-Elevation bound to this base token and draft invoice. Browser sessions retain their existing policy.

Parameters

nameinrequiredtype
idpathyesinteger
lineIdpathyesinteger
Idempotency-Keyheaderyesstring
X-Ezacto-Invoice-Elevationheaderstring

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

API-token edits require an administrator and X-Ezacto-Invoice-Elevation bound to this base token and draft invoice. Browser sessions retain their existing policy.

Parameters

nameinrequiredtype
idpathyesinteger
lineIdpathyesinteger
Idempotency-Keyheaderyesstring
X-Ezacto-Invoice-Elevationheaderstring

Request body

VersionedRowDeleteInput (required)

Responses

200 InvoiceCommandEnvelope

Authentication

bearerAuth or cookieSession

GET/api/v1/invoices/{id}/provider-alerts

List verified Stripe refund and dispute reports without changing receipts

Parameters

nameinrequiredtype
idpathyesinteger

Responses

200 InvoiceProviderAlertListEnvelope

Authentication

cookieSession

POST/api/v1/invoices/{id}/provider-alerts/{alertId}/review

Mark a provider report reviewed without an accounting mutation

Parameters

nameinrequiredtype
idpathyesinteger
alertIdpathyesstring

Request body

ReviewInvoiceProviderAlertInput (required)

Responses

200 InvoiceProviderAlertEnvelope

Authentication

cookieSession

GET/api/v1/bank-feed-status

Read configured bank feed health without exposing credentials

Responses

200 BankFeedStatusEnvelope

Authentication

cookieSession

POST/api/v1/bank-feeds/sync

Read due bank feed pages without creating invoice payments

Request body

BankFeedSyncInput (required)

Responses

200 BankFeedSyncEnvelope

Authentication

cookieSession

GET/api/v1/bank-deposit-accounts

List bank feed accounts visible to the review queue

Responses

200 BankDepositAccountsEnvelope

Authentication

cookieSession

GET/api/v1/bank-deposits

Review staged credits without creating receipts

Parameters

nameinrequiredtype
statequerystring: unmatched | suggested | confirmed | rejected
pagequeryinteger
per_pagequeryinteger

Responses

200 BankDepositListEnvelope

Authentication

cookieSession

GET/api/v1/bank-deposits/{id}/invoices

Find same-currency invoices for an explicit assignment

Parameters

nameinrequiredtype
idpathyesinteger
queryquerystring

Responses

200 BankDepositInvoicesEnvelope

Authentication

cookieSession

POST/api/v1/bank-deposits/{id}/assign

Choose the invoice to review for this credit

Parameters

nameinrequiredtype
idpathyesinteger
Idempotency-Keyheaderyesstring

Request body

BankDepositAssignInput (required)

Responses

200 BankDepositEnvelope

Authentication

cookieSession

POST/api/v1/bank-deposits/{id}/reject

Reject this credit without altering an invoice

Parameters

nameinrequiredtype
idpathyesinteger
Idempotency-Keyheaderyesstring

Request body

BankDepositDecisionInput (required)

Responses

200 BankDepositEnvelope

Authentication

cookieSession

POST/api/v1/bank-deposits/{id}/reopen

Reopen a rejected credit for review

Parameters

nameinrequiredtype
idpathyesinteger
Idempotency-Keyheaderyesstring

Request body

BankDepositDecisionInput (required)

Responses

200 BankDepositEnvelope

Authentication

cookieSession

POST/api/v1/bank-deposits/{id}/confirm

Explicitly confirm one credit against one invoice

Parameters

nameinrequiredtype
idpathyesinteger
Idempotency-Keyheaderyesstring

Request body

BankDepositConfirmInput (required)

Responses

200 BankDepositEnvelope

Authentication

cookieSession

POST/api/v1/bank-deposits/{id}/verify-source

Record an administrator verification of an uncertain external credit

Parameters

nameinrequiredtype
idpathyesinteger
Idempotency-Keyheaderyesstring

Request body

BankDepositVerifyInput (required)

Responses

200 BankDepositEnvelope

Authentication

cookieSession

migration

GET/api/v1/migration-loads/{id}

Read migration progress (administrator session)

Reports safe aggregate progress and an error code. During import quarantine the operator uses Cloudflare CLI status; ordinary application traffic remains unavailable.

Parameters

nameinrequiredtype
idpathyesstring

Responses

200 MigrationLoadStatusEnvelope

Authentication

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

Request body

InvoiceDocumentPreferenceInput (required)

Responses

200 InvoiceDocumentPreferenceEnvelope

Authentication

cookieSession

GET/api/v1/invoices/{id}/email-defaults

What the Send dialog opens on for this invoice: subject, message, To, Cc, copies, and whether email can be delivered

Parameters

nameinrequiredtype
idpathyesinteger

Responses

200 InvoiceEmailDefaultsEnvelope

Authentication

cookieSession

GET/api/v1/clients/{id}/invoice-sending

Who this client's invoices go to and what they carry

Parameters

nameinrequiredtype
idpathyesinteger

Responses

200 ClientInvoiceSendingEnvelope

Authentication

cookieSession

POST/api/v1/clients/{id}/invoice-sending

Save who this client's invoices go to and what they carry

Parameters

nameinrequiredtype
idpathyesinteger

Request body

ClientInvoiceSendingInput (required)

Responses

200 ClientInvoiceSendingEnvelope

Authentication

cookieSession

GET/api/v1/settings/invoice-sending

The addresses copied on every invoice email

Responses

200 OrganizationInvoiceSendingEnvelope

Authentication

cookieSession

POST/api/v1/settings/invoice-sending

Set the addresses copied on every invoice email

Request body

OrganizationInvoiceSendingInput (required)

Responses

200 OrganizationInvoiceSendingEnvelope

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

Request body

OrganizationInvoiceDocumentsInput (required)

Responses

200 OrganizationInvoiceDocumentsEnvelope

Authentication

cookieSession

GET/api/v1/invoices/{id}/hours-report

Download the hours an invoice billed as a PDF, CSV or Excel workbook

Parameters

nameinrequiredtype
idpathyesinteger
formatqueryyesstring: pdf | csv | xlsx
detailquerystring: detailed | summary

Responses

200 —

Authentication

bearerAuth or cookieSession

GET/api/v1/invoices/{id}/hours-reconciliation

Compare the hours an invoice bills with the time entries it claims

Parameters

nameinrequiredtype
idpathyesinteger

Responses

200 InvoiceHoursReconciliationEnvelope

Authentication

bearerAuth or cookieSession

POST/api/v1/invoices/{id}/hours-reconciliation/release

Explicitly release selected whole entries from a saved draft line to match its billed hours

Parameters

nameinrequiredtype
idpathyesinteger

Request body

InvoiceLineTimeReleaseInput

Responses

200 InvoiceLineTimeReleaseEnvelope

Authentication

cookieSession

GET/api/v1/settings/invoice-defaults

The company information invoices print and the values new drafts start with

Responses

200 InvoiceDefaultsEnvelope

Authentication

cookieSession

POST/api/v1/settings/invoice-defaults

Change the company information or the default notes and subject

Request body

InvoiceDefaultsInput (required)

Responses

200 InvoiceDefaultsEnvelope

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/invoices/{id}/reminder-preference

Whether this invoice will be reminded, and when the next one is booked

Parameters

nameinrequiredtype
idpathyesinteger

Responses

200 InvoiceReminderPreferenceEnvelope

Authentication

cookieSession

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

Switch reminders off for this invoice, back on, or follow the organization

Parameters

nameinrequiredtype
idpathyesinteger

Request body

InvoiceReminderPreferenceInput (required)

Responses

200 InvoiceReminderPreferenceEnvelope

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

Newest first, or oldest first with order=oldest, a page at a time, by when the delivery was created. from and to are calendar days in the organization's timezone, both included. page.total counts everything the filters match, not only this page.

Parameters

nameinrequiredtype
cursorquerystring
per_pagequeryinteger
statusquerystring: pending | processing | delivered | failed
event_typequerystring
fromquerystring
toquerystring
orderquerystring: newest | oldest

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

outbound-webhooks

GET/api/v1/webhook-subscriptions

List subscriptions and webhook configuration

Administrator session only. Events contain identifiers, resource sequence and relative API links. Secret issuance is returned once and cannot be replayed from the idempotency cache. Public demo delivery is disabled.

Responses

200 WebhookSubscriptionsEnvelope

Authentication

cookieSession

POST/api/v1/webhook-subscriptions

Create an endpoint and issue its signing secret once

Administrator session only. Events contain identifiers, resource sequence and relative API links. Secret issuance is returned once and cannot be replayed from the idempotency cache. Public demo delivery is disabled.

Parameters

nameinrequiredtype
Idempotency-Keyheaderstring

Request body

WebhookCreateInput (required)

Responses

201 WebhookSecretEnvelope

Authentication

cookieSession

PATCH/api/v1/webhook-subscriptions/{id}

Pause or resume an endpoint at its current version

Administrator session only. Events contain identifiers, resource sequence and relative API links. Secret issuance is returned once and cannot be replayed from the idempotency cache. Public demo delivery is disabled.

Parameters

nameinrequiredtype
idpathyesstring
Idempotency-Keyheaderstring

Request body

WebhookActiveInput (required)

Responses

200 WebhookSubscriptionEnvelope

Authentication

cookieSession

DELETE/api/v1/webhook-subscriptions/{id}

Delete an endpoint and erase its sealed signing secrets

Administrator session only. Events contain identifiers, resource sequence and relative API links. Secret issuance is returned once and cannot be replayed from the idempotency cache. Public demo delivery is disabled.

Parameters

nameinrequiredtype
idpathyesstring
Idempotency-Keyheaderstring

Request body

WebhookVersionInput (required)

Responses

200 WebhookSubscriptionEnvelope

Authentication

cookieSession

POST/api/v1/webhook-subscriptions/{id}/rotate-secret

Rotate a signing secret with a bounded overlap

Administrator session only. Events contain identifiers, resource sequence and relative API links. Secret issuance is returned once and cannot be replayed from the idempotency cache. Public demo delivery is disabled.

Parameters

nameinrequiredtype
idpathyesstring
Idempotency-Keyheaderstring

Request body

WebhookRotateInput (required)

Responses

200 WebhookSecretEnvelope

Authentication

cookieSession

GET/api/v1/webhook-deliveries

Page through webhook delivery results

Administrator session only. Events contain identifiers, resource sequence and relative API links. Secret issuance is returned once and cannot be replayed from the idempotency cache. Public demo delivery is disabled.

Parameters

nameinrequiredtype
subscription_idquerystring
statusquerystring: pending | processing | delivered | failed
per_pagequeryinteger
cursorquerystring

Responses

200 WebhookDeliveryPage

Authentication

cookieSession

POST/api/v1/webhook-deliveries/{id}/replay

Replay a settled delivery from the last seven days

Administrator session only. Events contain identifiers, resource sequence and relative API links. Secret issuance is returned once and cannot be replayed from the idempotency cache. Public demo delivery is disabled.

Parameters

nameinrequiredtype
idpathyesstring
Idempotency-Keyheaderstring

Request body

WebhookReplayInput (required)

Responses

202 WebhookDeliveryEnvelope

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

GET/api/v1/payout-providers

The payout providers an administrator has made available

Responses

200 PayoutProviderListEnvelope

Authentication

cookieSession

PATCH/api/v1/payout-providers/{provider}

Enable or disable a payout provider for new links

Disabling a provider stops new links to it. Accounts already linked are kept.

Parameters

nameinrequiredtype
providerpathyesstring: deel | wise

Request body

PayoutProviderSettingInput (required)

Responses

204 —

Authentication

cookieSession

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

A person's default payout provider, and the organization's

Their own choice, or an administrator's. effective_provider is the default used for their payouts: their choice, else the organization default.

Parameters

nameinrequiredtype
idpathyesinteger

Responses

200 PayoutPreferenceEnvelope

Authentication

cookieSession

PATCH/api/v1/users/{id}/payout-preference

Choose a person's default payout provider

A person chooses their own; an administrator may choose it for them. Only a provider the person holds and the instance has enabled. Null returns to the organization default. expected_version must match the current version, or the answer is 409.

Parameters

nameinrequiredtype
idpathyesinteger

Request body

PayoutPreferenceInput (required)

Responses

204 —

Authentication

cookieSession

GET/api/v1/payout-preferences

Every person's default payout provider, for administrators

Responses

200 PayoutPreferenceRosterEnvelope

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

GET/api/v1/profile/notifications

The signed-in user's own reminder and digest preferences

Responses

200 ProfileNotificationEnvelope

Authentication

cookieSession

POST/api/v1/profile/notifications

Change the signed-in user's own reminder and digest preferences

Request body

ProfileNotificationInput (required)

Responses

200 ProfileNotificationEnvelope

Authentication

cookieSession

POST/api/v1/profile/deletion-request

Ask the administrators to delete the signed-in user's own account

Request body

AccountDeletionSubmission

Responses

202 AccountDeletionRequestEnvelope

Authentication

bearerAuth or cookieSession

GET/api/v1/profile/deletion-request

Read your deletion request and original policy disclosure

Responses

200 AccountDeletionStatusEnvelope

Authentication

bearerAuth or cookieSession

GET/api/v1/profile/retention-policy

Read the operator's published erasure and retention disclosure

Requires a staff session or a token with time_entries:read.

Responses

200 AccountRetentionEnvelope

Authentication

bearerAuth or cookieSession

POST/account-deletion/requests/{id}/status

Read minimal deletion status with its private tracking capability

Parameters

nameinrequiredtype
idpathyesstring

Request body

AccountDeletionTrackingInput (required)

Responses

200 AccountDeletionTrackingEnvelope

Authentication

none

projects

POST/api/v1/projects/{id}/missing-rates

Preview or explicitly repair missing project-rate snapshots on open time

Parameters

nameinrequiredtype
idpathyesinteger

Request body

ProjectMissingRatesInput (required)

Responses

200 ProjectMissingRatesEnvelope

Authentication

cookieSession

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-views

Save the report on screen: a report kind and its address, private to the author

Request body

SavedReportViewInput (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 a saved report you own, or any saved report as an administrator

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}/role-shares/{profile}

Share an owned report with everyone in a role

Parameters

nameinrequiredtype
reportIdpathyesstring
profilepathyesstring

Responses

204 —

Authentication

bearerAuth or cookieSession

DELETE/api/v1/report-definitions/{reportId}/role-shares/{profile}

Revoke a role's access to an owned report

Parameters

nameinrequiredtype
reportIdpathyesstring
profilepathyesstring

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
due_statequerystring: not_due | past_due

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
selfqueryboolean
include_fixed_feequeryboolean
direct_client_onlyqueryboolean
contractors_onlyqueryboolean
currencyquerystring
project_statusquerystring: all | active | archived
billing_methodquerystring: non_billable | time_materials | fixed_fee
manager_idqueryinteger
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
audiencequerystring: internal | client
invoice_statequerystring: all | invoiced | uninvoiced
active_projects_onlyqueryboolean
notesquerystring

Responses

200 DetailedTimeReportEnvelope

Authentication

bearerAuth or cookieSession

GET/api/v1/reports/detailed-time/export

Download the detailed time report as a PDF, CSV or Excel workbook

Takes every filter of getDetailedTimeReport, with the same defaults but one: an absent audience is client, so only the notes a client may read are in the file unless audience=internal is asked for. Hours only. The file is named detailed-time--to-[-].. A PDF is refused above 5000 rows (422, field format); CSV and Excel take the report's whole range.

Parameters

nameinrequiredtype
selfqueryboolean
include_fixed_feequeryboolean
direct_client_onlyqueryboolean
contractors_onlyqueryboolean
currencyquerystring
project_statusquerystring: all | active | archived
billing_methodquerystring: non_billable | time_materials | fixed_fee
manager_idqueryinteger
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
audiencequerystring: internal | client
invoice_statequerystring: all | invoiced | uninvoiced
active_projects_onlyqueryboolean
notesquerystring
formatqueryyesstring: pdf | csv | xlsx

Responses

200 —

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

schedule

GET/api/v1/allocations

List planned allocations

Planned hours per week for a person on a project over a range of dates. Administrators and executive managers read all of them; a project manager reads their own and those for the people and projects they manage; everyone else reads only their own. from and to keep the allocations that reach into that span of days. A plan is not work: it is separate from time entries and never billed.

Parameters

nameinrequiredtype
cursorquerystring
per_pagequeryinteger
user_idqueryinteger
project_idqueryinteger
fromquerystring
toquerystring

Responses

200 AllocationPage

Authentication

bearerAuth or cookieSession

POST/api/v1/allocations

Plan hours for a person on a project

Administrators, executive managers and project managers only, a project manager only for people and projects they manage. Dates are plain local days, both included; the figure counts in full for every week the range touches. An end before the start is 422 invalid_range, an archived or unknown person or project is 422 inactive_user, inactive_project, unknown_user or unknown_project, and a range that overlaps another for the same person and project is 409 allocation_overlap. Planning more than a person's capacity is allowed: the capacity view flags it.

Request body

AllocationInput (required)

Responses

201 AllocationEnvelope

Authentication

bearerAuth or cookieSession

GET/api/v1/allocations/{id}

Get an allocation

Parameters

nameinrequiredtype
idpathyesinteger

Responses

200 AllocationEnvelope

Authentication

bearerAuth or cookieSession

PATCH/api/v1/allocations/{id}

Update an allocation

Dates and hours only: the person and project of a plan do not change, so to move one, delete it and make another. The same rules as creating apply, and a plan changed by someone else in the meantime is 409 allocation_changed.

Parameters

nameinrequiredtype
idpathyesinteger

Request body

AllocationPatch (required)

Responses

200 AllocationEnvelope

Authentication

bearerAuth or cookieSession

DELETE/api/v1/allocations/{id}

Delete an allocation

Send the version last read in the JSON body. A stale version is 409; omitted versions are deprecated until the 2027-01-22 sunset, then refused.

Parameters

nameinrequiredtype
idpathyesinteger

Request body

PlanningRevisionInput

Responses

200 AllocationEnvelope

Authentication

bearerAuth or cookieSession

GET/api/v1/capacity

Read planned hours against capacity and tracked time, person by week

Read-only. Weeks begin on the organization's week start day and run from the week holding from through the week holding to, at most 53. Per person and week: planned_seconds (the sum of the allocations touching that week, on active projects), weekly_capacity_seconds (the person's current weekly capacity, so part-time is honoured), tracked_seconds (rounded time actually logged, a separate figure and never changed by the plan) and over_allocated when planned exceeds capacity, which is a flag and never a refusal. Archived people are left out. Administrators and executive managers see everyone, a project manager the people they manage, everyone else only themselves.

Parameters

nameinrequiredtype
fromqueryyesstring
toqueryyesstring

Responses

200 CapacityEnvelope

Authentication

bearerAuth or cookieSession

GET/api/v1/time-off

List time off

Days a person is away, entered by an administrator. Administrators and executive managers read all of it; a project manager reads their own and that of the people they manage; everyone else reads only their own. from and to keep the entries that reach into that span of days. Time off reduces the capacity the capacity view counts as available; it is not work, is never billed, and has no approval step.

Parameters

nameinrequiredtype
cursorquerystring
per_pagequeryinteger
user_idqueryinteger
fromquerystring
toquerystring

Responses

200 TimeOffPage

Authentication

bearerAuth or cookieSession

POST/api/v1/time-off

Enter time off for a person

Administrators, executive managers and project managers only, a project manager only for the people they manage. Dates are plain local days, both included; only Monday to Friday remove capacity. seconds_per_day null is a whole day (a fifth of the person's weekly capacity); a figure is that many seconds away on each working day. An end before the start or an unknown kind is 422, an archived or unknown person is 422 inactive_user or unknown_user, and a range that overlaps other time off for the same person is 409 time_off_overlap, so a day is never taken off twice.

Request body

TimeOffInput (required)

Responses

201 TimeOffEnvelope

Authentication

bearerAuth or cookieSession

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

Get time off

Parameters

nameinrequiredtype
idpathyesinteger

Responses

200 TimeOffEnvelope

Authentication

bearerAuth or cookieSession

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

Update time off

Dates, kind and hours only: the person does not change, so to move time off to someone else, delete it and make another. The same rules as creating apply, and an entry changed by someone else in the meantime is 409 time_off_changed.

Parameters

nameinrequiredtype
idpathyesinteger

Request body

TimeOffPatch (required)

Responses

200 TimeOffEnvelope

Authentication

bearerAuth or cookieSession

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

Delete time off

Send the version last read in the JSON body. A stale version is 409; omitted versions are deprecated until the 2027-01-22 sunset, then refused.

Parameters

nameinrequiredtype
idpathyesinteger

Request body

PlanningRevisionInput

Responses

200 TimeOffEnvelope

Authentication

bearerAuth or cookieSession

scheduled-jobs

GET/api/v1/scheduled-jobs

List monthly job definitions and their latest proposal status

Parameters

nameinrequiredtype
cursorquerystring
per_pagequeryinteger

Responses

200 ScheduledJobsPage

Authentication

cookieSession

POST/api/v1/scheduled-jobs

Create a monthly job requiring authenticated confirmation

Request body

ScheduledJobCreate (required)

Responses

201 ScheduledJobEnvelope

Authentication

cookieSession

GET/api/v1/scheduled-jobs/{id}

Read a month-end job definition

Parameters

nameinrequiredtype
idpathyesinteger

Responses

200 ScheduledJobEnvelope

Authentication

cookieSession

PATCH/api/v1/scheduled-jobs/{id}

Update or pause a job against its reviewed version

Parameters

nameinrequiredtype
idpathyesinteger

Request body

ScheduledJobPatch (required)

Responses

200 ScheduledJobEnvelope

Authentication

cookieSession

scheduled-runs

GET/api/v1/scheduled-runs/{id}/items/{itemId}/report

Download the exact saved report an administrator is reviewing

Parameters

nameinrequiredtype
idpathyesinteger
itemIdpathyesinteger

Responses

200 —

Authentication

cookieSession

POST/api/v1/scheduled-runs/{id}/retry

Authorize another bounded attempt window for exhausted failed items only

Parameters

nameinrequiredtype
idpathyesinteger

Responses

200 ScheduledRunEnvelope

Authentication

cookieSession

GET/api/v1/scheduled-runs/{id}

Read a proposed run and the concrete items it would act on

Parameters

nameinrequiredtype
idpathyesinteger

Responses

200 ScheduledRunEnvelope

Authentication

cookieSession

POST/api/v1/scheduled-runs/{id}/confirm

Confirm a proposed run; a second confirmation changes nothing

Refused with 409 once the run has lapsed, which also settles it as expired, or if it was cancelled.

Parameters

nameinrequiredtype
idpathyesinteger

Request body

ScheduledRunConfirmInput

Responses

200 ScheduledRunEnvelope

Authentication

cookieSession

POST/api/v1/scheduled-runs/{id}/cancel

Cancel a proposed run that has not been confirmed

Parameters

nameinrequiredtype
idpathyesinteger

Responses

200 ScheduledRunEnvelope

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

staff-payments

GET/api/v1/staff-payments/actuals

Review captured contractor time and cost rates for a work month

Parameters

nameinrequiredtype
monthquerystring

Responses

200 PaymentActualsEnvelope

Authentication

cookieSession

POST/api/v1/staff-payments/actuals

Confirm reviewed contractor actuals as the monthly amount owed

Request body

ConfirmPaymentActuals (required)

Responses

204 —

Authentication

cookieSession

GET/api/v1/staff-payments/reconciliation

Propose contractor earnings for a work month with missing-rate and changed-source exceptions

Parameters

nameinrequiredtype
monthquerystring

Responses

200 PaymentReconciliationEnvelope

Authentication

cookieSession

POST/api/v1/staff-payments/provider-settings

Set the organization payout provider or a person override

Request body

StaffPaymentProviderCommand (required)

Responses

204 —

Authentication

cookieSession

GET/api/v1/staff-payments

Monthly staff payment register and audit history

Parameters

nameinrequiredtype
monthquerystring

Responses

200 StaffPaymentReportEnvelope

Authentication

cookieSession

POST/api/v1/staff-payments/events

Record a staff payment, obligation, correction, or historical settlement

Request body

StaffPaymentCommand (required)

Responses

204 —

Authentication

cookieSession

GET/api/v1/staff-payments/allocations

Reconcile earned, paid, reserved and remaining by month, project and entry

Parameters

nameinrequiredtype
monthquerystring

Responses

200 PaymentAllocationReportEnvelope

Authentication

cookieSession

POST/api/v1/staff-payments/allocations

Allocate part of a payment to a month, project, or reviewed time entry and hours

Request body

AllocatePayment (required)

Responses

204 —

Authentication

cookieSession

POST/api/v1/staff-payments/allocations/preview

Preview what a payment allocation would record and what remains, without saving

Request body

AllocatePayment (required)

Responses

200 PaymentAllocationPreviewEnvelope

Authentication

cookieSession

POST/api/v1/staff-payments/allocations/reversals

Reverse a payment allocation with a reason, keeping its history

Request body

ReversePaymentAllocation (required)

Responses

204 —

Authentication

cookieSession

GET/api/v1/me/payments

Own payment summary and upcoming payments for the signed-in person

Parameters

nameinrequiredtype
monthquerystring

Responses

200 MyPaymentsEnvelope

Authentication

cookieSession

GET/api/v1/payment-runs/report

Payment ledger and individual transfer outcomes over a period range

Parameters

nameinrequiredtype
fromquerystring
toquerystring

Responses

200 PaymentRunReportEnvelope

Authentication

cookieSession

POST/api/v1/payment-runs/preview

Prepare a payment run for review without sending money

Request body

PaymentRunCommand (required)

Responses

201 PaymentRunEnvelope

Authentication

cookieSession

POST/api/v1/payment-runs/{id}/approve

Authorize and reserve a payment run for immediate or scheduled execution

Parameters

nameinrequiredtype
idpathyesstring

Request body

PaymentRunApproval (required)

Responses

200 PaymentRunEnvelope

Authentication

cookieSession

POST/api/v1/payment-runs/{id}/cancel

Cancel payments that have not entered transfer creation

Parameters

nameinrequiredtype
idpathyesstring

Responses

200 PaymentRunEnvelope

Authentication

cookieSession

POST/api/v1/payment-runs/{id}/items/{itemId}/reconcile

Request a status check without initiating a replacement transfer

Parameters

nameinrequiredtype
idpathyesstring
itemIdpathyesstring

Responses

200 PaymentRunEnvelope

Authentication

cookieSession

GET/api/v1/payment-runs/advances

Reconcile contractor advance credit by settlement and application date

Parameters

nameinrequiredtype
fromquerystring
toquerystring

Responses

200 AdvanceCreditReportEnvelope

Authentication

cookieSession

POST/api/v1/payment-runs/advances/applications

Apply settled advance credit to reviewed earnings without moving funds

Request body

ApplyAdvanceCredit (required)

Responses

204 —

Authentication

cookieSession

POST/api/v1/payment-runs/advances/reversals

Reverse an advance application and restore credit

Request body

ReverseAdvanceCredit (required)

Responses

204 —

Authentication

cookieSession

POST/api/v1/payment-runs/advances/returns

Record a confirmed return of unapplied advance credit

Request body

ReturnAdvanceCredit (required)

Responses

204 —

Authentication

cookieSession

GET/api/v1/staff-invoices

Reconcile contractor payable invoices against existing reviewed earnings

Parameters

nameinrequiredtype
monthquerystring

Responses

200 StaffInvoiceReportEnvelope

Authentication

cookieSession

POST/api/v1/staff-invoices

Record an immutable contractor invoice version without changing amounts owed

Request body

SaveStaffInvoice (required)

Responses

201 StaffInvoiceEnvelope

Authentication

cookieSession

GET/api/v1/me/staff-invoices

Read only your received payable invoices when own-money viewing is enabled

Parameters

nameinrequiredtype
monthquerystring

Responses

200 StaffInvoiceReportEnvelope

Authentication

cookieSession

POST/api/v1/staff-invoices/{invoiceId}/documents

Stage a contractor invoice document for explicit inclusion in a version

Parameters

nameinrequiredtype
invoiceIdpathyesinteger
monthqueryyesstring
Idempotency-Keyheaderyesstring

Request body

AttachmentUploadInput (required)

Responses

201 StaffInvoiceDocumentEnvelope

Authentication

cookieSession

GET/api/v1/staff-invoices/{invoiceId}/documents/{documentId}/content

Download an authorized contractor invoice document

Parameters

nameinrequiredtype
invoiceIdpathyesinteger
documentIdpathyesstring

Responses

200 —

Authentication

cookieSession

GET/api/v1/staff-payments/contractor-review

Review contractor earnings, invoices, existing payments, advance credit and allocation proposals without executing them

Parameters

nameinrequiredtype
monthquerystring

Responses

200 ContractorReviewEnvelope

Authentication

cookieSession

GET/api/v1/staff-payments/contractor-review/acceptances

Read immutable contractor reconciliation confirmations

Parameters

nameinrequiredtype
monthquerystring

Responses

200 ContractorAcceptancesEnvelope

Authentication

cookieSession

POST/api/v1/staff-payments/contractor-review/acceptances

Explicitly confirm monthly receipt allocations and settled advance credit without authorizing a transfer

Request body

AcceptContractorReview

Responses

200 ContractorAcceptanceEnvelope

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

Save a person's reminder and digest preferences

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

POST/api/v1/team/people/{id}/cost-rate-backfill

Rehearse or apply a cost rate over hours tracked before the person had one

Parameters

nameinrequiredtype
idpathyesinteger
Idempotency-Keyheaderyesstring

Request body

CostRateBackfillInput (required)

Responses

200 CostRateBackfillEnvelope

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

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

Update the organization's time rounding rule

A direction and an increment, either or both. Nothing already saved changes: the rule rounds time saved from now on, and open time is re-rounded only by /time-rounding-recalculation, after a preview. Executive managers and administrators only.

Request body

TimeRoundingPatch (required)

Responses

200 TimeRoundingEnvelope

Authentication

cookieSession

GET/api/v1/time-rounding-recalculation

Preview re-rounding open time under the current rules

What the apply would change, writing nothing: how many open entries change, their rounded hours before and after, a breakdown by project, the date span, and what is left alone and why. Open means the same as for a single edit: stopped, not invoiced, not approved, on an unlocked date, under an active client, project and task. The fingerprint names exactly this set. Executive managers and administrators only.

Parameters

nameinrequiredtype
project_idqueryinteger
fromquerystring
toquerystring

Responses

200 TimeRoundingRecalculationPreviewEnvelope

Authentication

cookieSession

POST/api/v1/time-rounding-recalculation

Re-round open time under the current rules

Applies the preview whose fingerprint is sent, for the same scope. If anything has changed since that preview, nothing is written and the answer is 409 preview_stale. Executive managers and administrators only.

Request body

TimeRoundingRecalculationRequest (required)

Responses

200 TimeRoundingRecalculationAppliedEnvelope

Authentication

cookieSession

GET/api/v1/time-entry-options

List the active project and task combinations a user may log time against

The acting user's unless user_id names somebody else, which only an administrator may do (403 row_forbidden otherwise).

Parameters

nameinrequiredtype
user_idqueryinteger

Responses

200 TimeEntryOptionListEnvelope

Authentication

bearerAuth or cookieSession

GET/api/v1/time-entries

List time entries

The acting user's unless user_id names somebody else, which only an administrator may do (403 row_forbidden otherwise). An administrator may also read, update, stop and delete any entry by id; everyone else reaches only their own.

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

started_time with ended_time logs a stopped start/end entry in either organization mode, its seconds derived from the two times (an end before the start is past midnight); seconds beside them is 422 mode_mismatch. Without times the organization's time_entry_mode decides: in duration, seconds logs a stopped entry and leaving it out starts a timer; in start_end, leaving out ended_time starts a timer at the current local time and seconds is 422 mode_mismatch. A timer in a duration organization never carries times, so started_time without ended_time there is 422 mode_mismatch. Stopped entries must have a positive rounded duration; zero-hour entries are refused. Entries may overlap; each counts its own full duration.

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

An entry keeps the shape it was created with, whatever the organization's mode: a start/end entry takes started_time and ended_time and re-derives seconds, a duration entry takes seconds, and the other is 422 mode_mismatch.

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

GET/api/v1/calendar-proposals

List the acting user's calendar events offered as time

Only the acting user's own, administrators included. A proposal is a calendar event held beside the timesheet, not a time entry: it reaches no report, lock or invoice until it is accepted. status defaults to proposed, what is waiting for a decision. from and to are calendar days on the user's own calendar, both included, and filter on the day the event starts.

Parameters

nameinrequiredtype
cursorquerystring
per_pagequeryinteger
fromquerystring
toquerystring
statusquerystring: proposed | accepted | discarded | cancelled

Responses

200 CalendarProposalPage

Authentication

bearerAuth or cookieSession

POST/api/v1/calendar-proposals/{id}/accept

Accept a calendar proposal as a time entry

Creates the entry through the same path as POST /time-entries, so rounding, timesheet locks, approval membership, assignment and note rules all apply, and marks the proposal accepted in the same write. In a duration organization the entry carries the event's length and no times; in start_end it carries the event's times on the user's own clock, and an event that runs past local midnight is 422 spans_days. notes defaults to the event's title. The proposal's time_entry_id and the Location header name the entry. A proposal already decided is 409 proposal_not_open, and nothing is created.

Parameters

nameinrequiredtype
idpathyesinteger

Request body

CalendarProposalAcceptInput (required)

Responses

201 CalendarProposalEnvelope

Authentication

bearerAuth or cookieSession

POST/api/v1/calendar-proposals/{id}/discard

Discard a calendar proposal

A discarded event is not offered again when the calendar is read again. A proposal already decided is 409 proposal_not_open.

Parameters

nameinrequiredtype
idpathyesinteger

Responses

200 CalendarProposalEnvelope

Authentication

bearerAuth or cookieSession

GET/api/v1/calendar-connections/{provider}/cleanup

List the acting user’s manual Microsoft cleanup records

Parameters

nameinrequiredtype
providerpathyesstring: google | microsoft

Responses

200 CalendarManualCleanupList

Authentication

cookieSession

POST/api/v1/calendar-connections/{provider}/cleanup/confirm

Record the owner’s confirmation of Microsoft permission removal

This is a user attestation, not provider verification. Only the acting user’s current-incarnation disconnect or reauthorization record can be resolved.

Parameters

nameinrequiredtype
providerpathyesstring: google | microsoft

Request body

CalendarManualCleanupInput (required)

Responses

204 —

Authentication

cookieSession

POST/api/v1/calendar-connections/{provider}/authorize

Begin personal read-only calendar consent

Parameters

nameinrequiredtype
providerpathyesstring: google | microsoft

Request body

CalendarAuthorizationInput (required)

Responses

200 CalendarAuthorizationEnvelope

Authentication

cookieSession

GET/api/v1/calendar-connections/{provider}/callback

Complete native-session-bound calendar consent

Parameters

nameinrequiredtype
providerpathyesstring: google | microsoft

Responses

204 no content

Authentication

cookieSession

GET/api/v1/calendar-cleanup-status

Show unresolved calendar cleanup counts across retained incarnations

Responses

200 CalendarCleanupEnvelope

Authentication

cookieSession

GET/api/v1/calendar-connections

List the acting user’s private calendar connection status

Responses

200 CalendarConnectionList

Authentication

cookieSession

DELETE/api/v1/calendar-connections/{provider}

Disconnect the acting user’s calendar and cancel open proposals

Parameters

nameinrequiredtype
providerpathyesstring: google | microsoft

Request body

CalendarDisconnectInput (required)

Responses

204 —

Authentication

cookieSession

POST/api/v1/calendar-connections/{provider}/refresh

Refresh proposals from an available calendar provider

No time entry is created or changed. Returns unavailable until an approved provider adapter is configured. No token may be supplied.

Parameters

nameinrequiredtype
providerpathyesstring: google | microsoft

Request body

CalendarRefreshInput (required)

Responses

200 CalendarRefreshResult

Authentication

cookieSession

GET/api/v1/admin/calendar-cleanup

Review retained old-incarnation and closed-account calendar cleanup

Parameters

nameinrequiredtype
afterquerystring

Responses

200 CalendarOperatorCleanupList

Authentication

cookieSession

POST/api/v1/admin/calendar-cleanup/confirm

Record administrator evidence of exact calendar permission removal

Operator attestation only; never provider verification. Requires the complete reviewed custody identity.

Request body

CalendarOperatorCleanupInput (required)

Responses

200 CalendarOperatorCleanupReceiptEnvelope

Authentication

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

POST/api/v1/two-factor/email

Turn on the emailed second factor

Needs a verified email address. A code is mailed at password sign-in; magic-link and federated sign-in never use this factor.

Responses

200 TwoFactorStatusEnvelope

Authentication

cookieSession

DELETE/api/v1/two-factor/email

Turn off the emailed second factor

Responses

200 TwoFactorStatusEnvelope

Authentication

cookieSession

GET/api/v1/users/{id}/two-factor/email

Whether a user has the emailed second factor on (administrator)

Lets an administrator see the state before turning it off. Administrators only; session only.

Parameters

nameinrequiredtype
idpathyesinteger

Responses

200 TwoFactorEmailStateEnvelope

Authentication

cookieSession

DELETE/api/v1/users/{id}/two-factor/email

Turn off a user's emailed second factor (administrator)

Lockout recovery for a user who lost their mailbox. Administrators only; the change is recorded in the activity log.

Parameters

nameinrequiredtype
idpathyesinteger

Responses

200 TwoFactorEmailDisabledEnvelope

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

work-items

GET/api/v1/work-items/github/setup/callback

Finish the private GitHub App registration

Parameters

nameinrequiredtype
statequeryyesstring
codequeryyesstring

Responses

204 no content

Authentication

cookieSession

GET/api/v1/work-items/github/installations

List read-enabled App installations

Parameters

nameinrequiredtype
pagequeryinteger

Responses

200 GithubReaderInstallationsEnvelope

Authentication

cookieSession

GET/api/v1/work-items/github/repositories

List repository names available to the selected installation

Parameters

nameinrequiredtype
installation_idqueryyesstring
pagequeryinteger

Responses

200 GithubReaderRepositoriesEnvelope

Authentication

cookieSession

POST/api/v1/work-items/github/repositories

Verify an App installation repository and map it to a local task

Request body

GithubReaderMapRequest (required)

Responses

200 GithubReaderMapEnvelope

Authentication

cookieSession

POST/api/v1/work-items/github/setup

Prepare a private read-only GitHub App manifest

Request body

GithubReaderSetupRequest (required)

Responses

200 GithubReaderSetupEnvelope

Authentication

cookieSession

GET/api/v1/work-items/github/status

Inspect GitHub issue synchronization and deferred retries

Responses

200 GithubReaderStatusEnvelope

Authentication

cookieSession

POST/api/v1/work-items/github/disconnect

Fence GitHub reads and deliveries while retaining local links

Request body

GithubReaderDisconnectRequest (required)

Responses

200 GithubReaderDisconnectEnvelope

Authentication

cookieSession

POST/api/v1/work-items/github/reconcile

Schedule a bounded GitHub metadata reconciliation

Request body

GithubReaderReconcileRequest (required)

Responses

204 —

Authentication

cookieSession

GET/api/v1/work-item-links/{id}/github

Read verified issue metadata for an authorized local time link

Parameters

nameinrequiredtype
idpathyesinteger

Responses

200 GithubReaderMetadataEnvelope

Authentication

bearerAuth or cookieSession

GET/api/v1/work-items/github/publication

Inspect opted-in GitHub time publication

Responses

200 GithubPublicationsEnvelope

Authentication

cookieSession

GET/api/v1/work-items/github/publication/preview/{id}

Preview date and duration before publication consent

Parameters

nameinrequiredtype
idpathyesinteger

Responses

200 GithubPublicationPreviewEnvelope

Authentication

cookieSession

POST/api/v1/work-items/github/publication/policy

Explicitly enable or disable verified Issues-write publication

Request body

GithubPublicationPolicyRequest (required)

Responses

204 —

Authentication

cookieSession

POST/api/v1/work-items/github/publication/consent

Opt one reviewed time link into publication

Request body

GithubPublicationConsentRequest (required)

Responses

204 —

Authentication

cookieSession

POST/api/v1/work-items/github/publication/{id}/actions

Resolve a publication conflict or retry decision

Parameters

nameinrequiredtype
idpathyesinteger

Request body

GithubPublicationActionRequest (required)

Responses

204 —

Authentication

cookieSession

GET/api/v1/settings/work-item-connections

List the issue trackers this instance has connected

Administrators in a session only. credential_configured says whether the deployment holds the provider's credential; the credential itself is never returned.

Responses

200 WorkItemConnectionListEnvelope

Authentication

cookieSession

POST/api/v1/settings/work-item-connections

Connect an issue tracker

Administrators in a session only, recorded in the activity log. The credential is a deployment secret chosen by the server, never sent here: a provider with no secret configured is 409 credential_not_configured. Connecting a provider that was disconnected revives its row, so earlier links stay attached.

Request body

WorkItemConnectionInput (required)

Responses

201 WorkItemConnectionEnvelope

Authentication

cookieSession

POST/api/v1/settings/work-item-connections/{id}/disconnect

Disconnect an issue tracker

Administrators in a session only, recorded in the activity log. Drops the connection's credential reference and keeps the connection and every link made through it. Disconnecting one already disconnected changes nothing.

Parameters

nameinrequiredtype
idpathyesinteger

Responses

200 WorkItemConnectionEnvelope

Authentication

cookieSession

Schemas

AcceptContractorReview

fieldtyperequired
idstringyes
user_idintegeryes
monthstringyes
currencystringyes
review_versionstringyes
source_revisionstringyes
apply_allocationsbooleanyes
apply_creditsbooleanyes
reasonstringyes

AccountClosureInput

fieldtyperequired
expected_versionintegeryes
expected_policy_versionintegeryes
review_tokenstringyes
acknowledgedbooleanyes

AccountClosureInventoryItem

fieldtyperequired
locationstringyes
countintegeryes
categorytime_and_worker_attribution | billing_and_payments | audit_and_security | legal_holdyes

AccountClosurePreview

fieldtyperequired
apple_cleanup_retry_availableboolean
request_idstringyes
user_idintegeryes
request_versionintegeryes
review_tokenstringyes
policy_versioninteger | nullyes
policy_snapshotAccountRetentionPolicy | nullyes
inventoryarray of AccountClosureInventoryItemyes
uncovered_categoriesarray of stringyes
owner_transfer_requiredbooleanyes
running_timerbooleanyes
closureAccountClosureRecord | nullyes

AccountClosurePreviewEnvelope

fieldtyperequired
dataAccountClosurePreviewyes

AccountClosureRecord

fieldtyperequired
request_idstringyes
user_idintegeryes
actor_user_idintegeryes
closed_atstring (date-time)yes
policy_versionintegeryes
policy_snapshotAccountRetentionPolicyyes
inventoryarray of AccountClosureInventoryItemyes
retained_identitybooleanyes
calendar_cleanupCalendarCleanupStatus
apple_cleanupAppleCleanupStatusyes

AccountClosureRecordEnvelope

fieldtyperequired
dataAccountClosureRecordyes

AccountDeletionClosureDisclosure

fieldtyperequired
retained_recordsarray of AccountDeletionRetainedDisclosureyes
backup_handlingstringyes
user_noticestringyes
operator_contactstringyes

AccountDeletionDetailEnvelope

fieldtyperequired
dataAccountDeletionRecordyes
linksLinksyes

AccountDeletionListEnvelope

fieldtyperequired
dataarray of AccountDeletionRecordyes
linksLinksyes

AccountDeletionRecord

fieldtyperequired
calendar_cleanupCalendarCleanupStatus
apple_cleanupAppleCleanupStatus
idstringyes
user_idintegeryes
requested_atstring (date-time)yes
policy_versioninteger | nullyes
policy_snapshotAccountRetentionPolicy | nullyes
policy_reviewedbooleanyes
statuspending | in_progress | action_required | completedyes
versionintegeryes
messagestringyes
response_target_atstring | nullyes
expected_completion_atstring | nullyes
completed_atstring | nullyes
completion_confirmationstring | nullyes
notificationpending | sending | queued | failed | unavailableyes
notification_updated_atstring (date-time)yes
notification_delivery_idinteger | nullyes
updated_atstring (date-time)yes

AccountDeletionRequest

fieldtyperequired
user_idintegeryes
requested_atstring (date-time)yes

AccountDeletionRequestEnvelope

fieldtyperequired
dataAccountDeletionRecord | AccountDeletionRequestyes
linksLinksyes
status_accessAccountDeletionStatusAccess

AccountDeletionRetainedDisclosure

fieldtyperequired
categorystringyes
reasonstringyes
periodstringyes
review_after_daysintegeryes
review_duestring (date-time)yes

AccountDeletionStatusAccess

fieldtyperequired
tokenstringyes
expires_atstring (date-time)yes
urlstringyes

AccountDeletionStatusEnvelope

fieldtyperequired
dataAccountDeletionRecord | nullyes
linksLinksyes

AccountDeletionSubmission

fieldtyperequired
expected_policy_versioninteger | null

AccountDeletionTrackingEnvelope

fieldtyperequired
dataAccountDeletionTrackingStatusyes

AccountDeletionTrackingInput

fieldtyperequired
tokenstringyes

AccountDeletionTrackingStatus

fieldtyperequired
calendar_cleanupCalendarCleanupStatus
apple_cleanupAppleCleanupStatus
request_idstringyes
statuspending | in_progress | action_required | completedyes
requested_atstring (date-time)yes
expected_completion_atstring | nullyes
closed_atstring | nullyes
completed_atstring | nullyes
messagestringyes
completion_confirmationstring | nullyes
policy_versioninteger | nullyes
policy_snapshotAccountRetentionPolicy | nullyes
policy_reviewedbooleanyes
closure_disclosureAccountDeletionClosureDisclosure | nullyes
operator_contactstring | nullyes
expires_atstring (date-time)yes

AccountDeletionUpdate

fieldtyperequired
expected_versionintegeryes
statuspending | in_progress | action_requiredyes
messagestringyes
expected_completion_atstring | nullyes

AccountRetentionEnvelope

fieldtyperequired
dataAccountRetentionRecord | nullyes
linksLinksyes

AccountRetentionPolicy

fieldtyperequired
frameworksarray of stringyes
retained_recordsarray of AccountRetentionRuleyes
response_target_daysintegeryes
operator_contactstring (email)yes
user_noticestringyes
backup_handlingstringyes
acknowledgedtrueyes

AccountRetentionPublication

fieldtyperequired
expected_versionintegeryes
policyAccountRetentionPolicyyes

AccountRetentionRecord

fieldtyperequired
versionintegeryes
policyAccountRetentionPolicyyes
published_atstring (date-time)yes

AccountRetentionRule

fieldtyperequired
categorytime_and_worker_attribution | billing_and_payments | audit_and_security | legal_holdyes
reasonstringyes
periodstringyes
review_after_daysintegeryes

ActivityLog

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

ActivityLogActor

Who caused the event. type and id are what the event recorded; name is resolved when the log is read, so it is the person's current name. name is null for a system actor and for an id that no user or contact carries any more.

fieldtyperequired
typeuser | contact | systemyes
idinteger | nullyes
namestring | nullyes

ActivityLogPage

fieldtyperequired
dataarray of ActivityLogyes
linksPageLinksyes
pagePageMetadatayes

ActivityLogStatus

fieldtyperequired
enabledbooleanyes

ActivityLogStatusEnvelope

fieldtyperequired
dataActivityLogStatusyes
linksLinksyes

ActivityYearRolled

fieldtyperequired
yearintegeryes
rolledbooleanyes

ActivityYearRolledEnvelope

fieldtyperequired
dataActivityYearRolledyes
linksLinksyes

AdvanceCredit

fieldtyperequired
advance_item_idstringyes
user_idintegeryes
namestringyes
currencystringyes
monthstringyes
advance_project_idinteger | nullyes
advance_reasonstringyes
statestringyes
amount_centsintegeryes
settled_centsintegeryes
settled_atstring | nullyes
applied_centsintegeryes
returned_centsintegeryes
reserved_centsintegeryes
available_centsintegeryes
opening_centsintegeryes
period_settled_centsintegeryes
period_applied_centsintegeryes
period_returned_centsintegeryes
closing_centsintegeryes
applicationsarray of AdvanceCreditApplicationyes
returnsarray of AdvanceCreditReturnyes

AdvanceCreditApplication

fieldtyperequired
idstringyes
reasonstringyes
advance_item_idstringyes
user_idintegeryes
currencystringyes
monthstringyes
amount_centsintegeryes
scopemonth | project | entryyes
project_idinteger | nullyes
entry_idinteger | nullyes
actor_idintegeryes
recorded_atstringyes
reversed_atstring | nullyes
reversal_reasonstring | nullyes

AdvanceCreditReport

fieldtyperequired
fromstringyes
tostringyes
advancesarray of AdvanceCredityes

AdvanceCreditReportEnvelope

fieldtyperequired
dataAdvanceCreditReportyes

AdvanceCreditReturn

fieldtyperequired
idstringyes
reasonstringyes
advance_item_idstringyes
amount_centsintegeryes
referencestringyes
actor_idintegeryes
recorded_atstringyes

AllocatePayment

fieldtyperequired
idstringyes
payment_kindevent | run_itemyes
payment_idstringyes
user_idintegeryes
monthstringyes
scopemonth | project | entryyes
project_idinteger | nullyes
entry_idinteger | nullyes
secondsinteger | nullyes
amount_centsinteger | nullyes
reasonstringyes

Allocation

fieldtyperequired
versionintegeryes
idintegeryes
user_idintegeryes
project_idintegeryes
start_datestring (date)yes
end_datestring (date)yes
planned_seconds_per_weekintegeryes
created_atstring (date-time)yes
updated_atstring (date-time)yes

AllocationEnvelope

fieldtyperequired
dataAllocationyes
linksLinksyes

AllocationInput

fieldtyperequired
user_idintegeryes
project_idintegeryes
start_datestring (date)yes
end_datestring (date)yes
planned_seconds_per_weekintegeryes

AllocationPage

fieldtyperequired
dataarray of Allocationyes
linksPageLinksyes
pagePageMetadatayes

AllocationPatch

fieldtyperequired
versioninteger
start_datestring (date)
end_datestring (date)
planned_seconds_per_weekinteger

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

AppleCleanupStatus

{"type":"string","enum":["not_linked","pending","revoked","manual_required"]}

AppleCleanupStatusEnvelope

fieldtyperequired
dataobjectyes

AppleLifecycleProofInput

fieldtyperequired
receiptstringyes

ApplyAdvanceCredit

fieldtyperequired
idstringyes
reasonstringyes
advance_item_idstringyes
user_idintegeryes
currencystringyes
monthstringyes
amount_centsintegeryes
scopemonth | project | entryyes
project_idinteger | nullyes
entry_idinteger | nullyes

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
throughstring | null

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

BackupDownloadLinkEnvelope

fieldtyperequired
dataobjectyes

BackupDownloadLinkInput

fieldtyperequired
run_idinteger
codestring

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

BackupRunPage

fieldtyperequired
dataarray of BackupRunyes
linksPageLinksyes
pageCountedPageMetadatayes

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

BankDeposit

fieldtyperequired
idintegeryes
account_idintegeryes
account_namestringyes
providermercury | wiseyes
provider_transaction_idstringyes
currencystringyes
posted_atstringyes
amount_centsintegeryes
memostring | nullyes
counterpartystring | nullyes
stateunmatched | suggested | confirmed | rejectedyes
versionintegeryes
suggested_invoiceBankReviewInvoice | nullyes
source_statusfinal | pending | reversed | ineligible | unknownyes
classificationexternal_credit | internal_transfer | ambiguous_credityes
source_reasonstring | nullyes
verified_atstring | nullyes
verified_by_user_idinteger | nullyes
verification_referencestring | nullyes
confirmation_basisstring | nullyes
confirmation_readybooleanyes
payment_idinteger | nullyes
confirmed_invoice_idinteger | nullyes

BankDepositAccountsEnvelope

fieldtyperequired
dataarray of BankFeedAccountyes

BankDepositAssignInput

fieldtyperequired
expected_versionintegeryes
invoice_idintegeryes

BankDepositConfirmInput

fieldtyperequired
expected_versionintegeryes
invoice_idintegeryes
expected_invoice_versionintegeryes
confirm_overpaymentbooleanyes

BankDepositDecisionInput

fieldtyperequired
expected_versionintegeryes

BankDepositEnvelope

fieldtyperequired
dataBankDeposityes

BankDepositInvoicesEnvelope

fieldtyperequired
dataarray of BankReviewInvoiceyes

BankDepositListEnvelope

fieldtyperequired
dataarray of BankDeposityes
pageintegeryes
per_pageintegeryes
totalintegeryes

BankDepositVerifyInput

fieldtyperequired
expected_versionintegeryes
verification_referencestringyes
confirm_posted_fundsanyyes
confirm_external_creditanyyes

BankFeedAccount

fieldtyperequired
idintegeryes
providermercury | wiseyes
namestringyes

BankFeedStatusEnvelope

fieldtyperequired
dataarray of objectyes

BankFeedSyncEnvelope

fieldtyperequired
dataobjectyes

BankFeedSyncInput

{"type":"object","required":[],"properties":{},"additionalProperties":false}

BankReviewInvoice

fieldtyperequired
idintegeryes
numberstringyes
currencystringyes
due_amount_centsintegeryes
versionintegeryes
statestringyes

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

CalendarAuthorizationEnvelope

fieldtyperequired
dataobjectyes

CalendarAuthorizationInput

fieldtyperequired
generationintegeryes

CalendarCleanupEnvelope

fieldtyperequired
dataCalendarCleanupStatusyes

CalendarCleanupStatus

fieldtyperequired
pendingintegeryes
manual_requiredintegeryes
revokedintegeryes
manual_confirmedinteger
operator_confirmedinteger

CalendarConnectionList

fieldtyperequired
dataarray of objectyes

CalendarDisconnectInput

fieldtyperequired
generationintegeryes

CalendarFeed

fieldtyperequired
scopeself | project | teamyes
project_idinteger | nullyes
from_datestringyes
through_datestringyes
include_namesbooleanyes
idstringyes
issued_atstringyes
expires_atstringyes
revoked_atstring | nullyes
credential_generationintegeryes

CalendarFeedInput

fieldtyperequired
scopeself | project | teamyes
project_idinteger | nullyes
from_datestringyes
through_datestringyes
include_namesbooleanyes
expires_atstring

CalendarFeedIssued

fieldtyperequired
dataobjectyes

CalendarFeedList

fieldtyperequired
dataarray of CalendarFeedyes

CalendarManualCleanupInput

fieldtyperequired
obligation_idstringyes
generationintegeryes
credential_revisionintegeryes
confirm_removedanyyes

CalendarManualCleanupList

fieldtyperequired
dataarray of objectyes

CalendarOperatorCleanupInput

fieldtyperequired
idstringyes
user_idintegeryes
providergoogle | microsoftyes
instance_noncestringyes
generationintegeryes
credential_revisionintegeryes
key_idstringyes
request_idstring | nullyes
reasondisconnect | closure | reauth | restore | resetyes
review_instancestringyes
expected_statuspending | manual_requiredyes
evidence_referencestringyes
confirm_provider_removedbooleanyes

CalendarOperatorCleanupList

fieldtyperequired
dataarray of objectyes
pageobjectyes

CalendarOperatorCleanupReceiptEnvelope

fieldtyperequired
dataobjectyes

CalendarProposal

fieldtyperequired
idintegeryes
providergoogle | microsoftyes
calendar_idstringyes
event_idstringyes
occurrencestringyes
titlestringyes
starts_atstring (date-time)yes
ends_atstring (date-time)yes
statusproposed | accepted | discarded | cancelledyes
time_entry_idinteger | nullyes
decided_atstring | nullyes
source_changed_atstring | null
source_cancelled_atstring | null
created_atstring (date-time)yes
updated_atstring (date-time)yes

CalendarProposalAcceptInput

fieldtyperequired
project_idintegeryes
task_idintegeryes
notesstring | null
budgetedboolean

CalendarProposalEnvelope

fieldtyperequired
dataCalendarProposalyes
linksLinksyes

CalendarProposalPage

fieldtyperequired
dataarray of CalendarProposalyes
linksPageLinksyes
pagePageMetadatayes

CalendarRefreshInput

fieldtyperequired
past_daysinteger
future_daysinteger

CalendarRefreshResult

fieldtyperequired
dataobjectyes

Capacity

fieldtyperequired
week_start_daysaturday | sunday | mondayyes
weeksarray of stringyes
peoplearray of CapacityPersonyes

CapacityEnvelope

fieldtyperequired
dataCapacityyes
linksLinksyes

CapacityPerson

fieldtyperequired
user_idintegeryes
first_namestringyes
last_namestringyes
weekly_capacity_secondsintegeryes
weeksarray of CapacityWeekyes

CapacityWeek

fieldtyperequired
week_startstring (date)yes
planned_secondsintegeryes
time_off_secondsintegeryes
available_capacity_secondsintegeryes
tracked_secondsintegeryes
over_allocatedbooleanyes

ClientHierarchyListEnvelope

fieldtyperequired
dataarray of ClientHierarchyNodeyes
linksLinksyes

ClientHierarchyNode

fieldtyperequired
ancestor_idintegeryes
descendant_idintegeryes
depthintegeryes

ClientInvoiceSendingEnvelope

fieldtyperequired
dataobjectyes

ClientInvoiceSendingInput

fieldtyperequired
recipientsInvoiceRecipientLists | null
attach_pdfboolean | null
append_pdfsboolean | null
attach_filesboolean | null
attach_journalnull | null
journal_formatsJournalFormats | null

ClientRateCard

fieldtyperequired
idintegeryes
client_idintegeryes
namestringyes
created_atstring (date-time)yes
versionsarray of ClientRateCardVersionyes

ClientRateCardEnvelope

fieldtyperequired
dataClientRateCardyes
linksLinksyes

ClientRateCardInput

fieldtyperequired
namestringyes

ClientRateCardLine

fieldtyperequired
task_idinteger | nullyes
amount_centsintegeryes

ClientRateCardVersion

fieldtyperequired
idintegeryes
start_datestring | nullyes
linesarray of ClientRateCardLineyes
created_atstring (date-time)yes

ClientRateCardVersionInput

fieldtyperequired
start_datestring | nullyes
linesarray of ClientRateCardLineyes

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

ConfirmPaymentActuals

fieldtyperequired
idstringyes
user_idintegeryes
monthstringyes
expected_versionintegeryes
currencystringyes
entriesarray of objectyes
notestringyes

ContractorAcceptance

fieldtyperequired
idstringyes
user_idintegeryes
monthstringyes
currencystringyes
review_versionstringyes
reasonstringyes
actor_idintegeryes
recorded_atstringyes
allocation_idsarray of stringyes
credit_application_idsarray of stringyes
statecompletedyes

ContractorAcceptanceEnvelope

fieldtyperequired
dataContractorAcceptanceyes

ContractorAcceptancesEnvelope

fieldtyperequired
dataarray of ContractorAcceptanceyes

ContractorAllocationProposal

fieldtyperequired
payment_kindevent | run_itemyes
payment_idstringyes
amount_centsintegeryes
scopemonthyes

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

ContractorCreditProposal

fieldtyperequired
advance_item_idstringyes
amount_centsintegeryes
scopemonthyes

ContractorCurrencyReview

fieldtyperequired
currencystringyes
recorded_earnings_centsinteger | nullyes
proposed_earnings_centsinteger | nullyes
paid_centsintegeryes
reserved_centsintegeryes
available_to_pay_centsinteger | nullyes
available_credit_centsintegeryes
proposed_credit_centsintegeryes
remaining_after_credit_centsinteger | nullyes
invoicesarray of StaffInvoiceyes
advancesarray of AdvanceCredityes
allocationsarray of PaymentAllocationyes
allocation_proposalsarray of ContractorAllocationProposalyes
credit_proposalsarray of ContractorCreditProposalyes
itemsarray of ContractorReviewItemyes
proposal_blockedbooleanyes
flagsarray of stringyes

ContractorEarningsReview

fieldtyperequired
idstringyes
user_idintegeryes
currencystringyes
amount_centsintegeryes
expected_versionintegeryes
actor_idintegeryes
notestringyes
recorded_atstringyes

ContractorReview

fieldtyperequired
monthstringyes
completedbooleanyes
credit_periodobjectyes
versionstringyes
peoplearray of ContractorReviewPersonyes

ContractorReviewEarnings

fieldtyperequired
user_idintegeryes
namestringyes
proposed_centsintegeryes
confirmed_centsinteger | nullyes
statusnew | converged | differs | attentionyes
exceptionsarray of objectyes

ContractorReviewEntry

fieldtyperequired
entry_idintegeryes
project_idintegeryes
project_namestringyes
spent_datestringyes
rounded_secondsintegeryes
cost_rate_centsinteger | nullyes
selected_secondsintegeryes

ContractorReviewEnvelope

fieldtyperequired
dataContractorReviewyes

ContractorReviewItem

fieldtyperequired
idstringyes
run_idstringyes
run_namestringyes
purposeearnings | advanceyes
amount_centsintegeryes
statedraft | queued | creating | funding | processing | paid | failed | attention | cancelledyes
phasedraft | queued | processing | settled | failed | attention | cancelledyes
failurestring | nullyes
attemptsintegeryes

ContractorReviewPerson

fieldtyperequired
user_idintegeryes
namestringyes
activebooleanyes
ledger_versioninteger | nullyes
settled_throughstring | nullyes
ledger_eventsarray of StaffPaymentEventyes
phasereview | queued | processing | settled | failed | attentionyes
latest_reviewContractorEarningsReview | nullyes
earningsContractorReviewEarnings | nullyes
entriesarray of ContractorReviewEntryyes
currenciesarray of ContractorCurrencyReviewyes
source_revisionstring
review_versionstring

CostRateBackfill

fieldtyperequired
run_idstringyes
appliedbooleanyes
user_idintegeryes
fromstring (date)yes
tostring (date)yes
cost_rate_centsintegeryes
entry_countintegeryes
secondsintegeryes
cost_centsintegeryes
periodsarray of CostRateBackfillPeriodyes
captured_entry_countintegeryes
running_entry_countintegeryes

CostRateBackfillEnvelope

fieldtyperequired
dataCostRateBackfillyes
linksLinksyes

CostRateBackfillInput

fieldtyperequired
fromstring (date)yes
tostring (date)yes
cost_rate_centsintegeryes
reasonstringyes
replace_capturedboolean
applyboolean

CostRateBackfillPeriod

fieldtyperequired
monthstringyes
entry_countintegeryes
secondsintegeryes
cost_centsintegeryes

CountedPageMetadata

fieldtyperequired
per_pageintegeryes
next_cursorstring | nullyes
totalintegeryes

CreateApiTokenInput

fieldtyperequired
namestringyes
scopesarray of stringyes
expires_atstring | null

CsvImportApplyCommand

fieldtyperequired
preview_idstringyes
command_idstring (uuid)yes
versionintegeryes
expected_selected_rowsintegeryes
expected_source_secondsintegeryes
expected_destination_secondsintegeryes
acknowledge_exclusionsbooleanyes
acknowledge_destination_differencebooleanyes
acknowledge_new_peoplebooleanyes

CsvImportApplyEnvelope

fieldtyperequired
dataCsvImportApplyRunyes

CsvImportApplyRun

fieldtyperequired
stage_idstringyes
preview_idstring | nullyes
statenot_confirmed | queued | running | paused | partial | completed | cancelled | failed | supersededyes
codestring | nullyes
command_idstring | nullyes
command_knownbooleanyes
pending_commandCsvImportApplyCommand | nullyes
file_rowsintegeryes
selected_rowsintegeryes
excluded_rowsintegeryes
committed_rowsintegeryes
inserted_rowsintegeryes
already_imported_rowsintegeryes
created_setupintegeryes
source_seconds_totalinteger | nullyes
source_seconds_committedintegeryes
destination_secondsintegeryes
destination_delta_secondsintegeryes
deleted_imported_rowsintegeryes
retention_deadlinestring | nullyes
retryablebooleanyes
allowed_actionsarray of stringyes

CsvImportCancelCommand

fieldtyperequired
command_idstring (uuid)yes

CsvImportCandidate

fieldtyperequired
idintegeryes
namestringyes
parent_idinteger | nullyes
parent_namestring | nullyes
is_activebooleanyes
selectablebooleanyes
currencystring | nullyes

CsvImportCapabilities

fieldtyperequired
runtimecontainer | workeryes
staging_supportedbooleanyes
browser_readybooleanyes
apply_supportedbooleanyes
max_csv_bytesintegeryes
max_mapping_bytesintegeryes
raw_retention_hoursanyyes

CsvImportCapabilitiesEnvelope

fieldtyperequired
dataCsvImportCapabilitiesyes

CsvImportCatalogPage

fieldtyperequired
itemsarray of anyyes
totalintegeryes
next_cursorstring | nullyes
preview_idstring | nullyes

CsvImportCatalogPageEnvelope

fieldtyperequired
dataCsvImportCatalogPageyes

CsvImportChoices

fieldtyperequired
workspace_identitystringyes
source_idstringyes
adapter_idstringyes
date_formatisoyes
exporter_zonestringyes
destination_interpretationsource_wall_timeyes
currency_policydestination_ratesyes
excluded_linesarray of integeryes
mappingobjectyes

CsvImportErrorPage

fieldtyperequired
itemsarray of CsvImportLineErroryes
totalintegeryes
next_cursorstring | nullyes
preview_idstring | nullyes

CsvImportErrorPageEnvelope

fieldtyperequired
dataCsvImportErrorPageyes

CsvImportLineError

fieldtyperequired
lineintegeryes
scopefile | rowyes
excludablebooleanyes
kindinvalid | unsupported | warningyes
codestringyes
messagestringyes

CsvImportMapping

fieldtyperequired
workspace_identitystringyes
exporter_zonestringyes
date_formatisoyes
destination_interpretationsource_wall_timeyes
currency_policydestination_ratesyes
excluded_linesarray of integeryes
mappingobjectyes
versionintegeryes

CsvImportMappingState

fieldtyperequired
versionintegeryes
choicesCsvImportChoices | nullyes
preview_idstring | nullyes

CsvImportMappingStateEnvelope

fieldtyperequired
dataCsvImportMappingStateyes

CsvImportPreview

fieldtyperequired
organization_namestringyes
preview_idstringyes
runCsvImportRunyes
choicesCsvImportChoicesyes
talliesCsvImportTalliesyes

CsvImportPreviewEnvelope

fieldtyperequired
dataCsvImportPreviewyes

CsvImportPreviewRequest

fieldtyperequired
preview_idstring

CsvImportRun

fieldtyperequired
idstringyes
statusuploading | staged | previewed | confirmed | completed | failed | cancelled | expired | purgedyes
versionintegeryes
file_sha256stringyes
bytesintegeryes
staging_expires_atstringyes
retention_deadlinestring | nullyes
purge_allowedbooleanyes
allowed_actionsarray of stringyes
retryablebooleanyes
preview_idstring | nullyes
preview_stalebooleanyes
source_idstring | nullyes
talliesCsvImportTallies | nullyes

CsvImportRunEnvelope

fieldtyperequired
dataCsvImportRunyes

CsvImportSourceEntity

fieldtyperequired
kindpeople | clients | projects | tasksyes
source_keystringyes
labelstringyes
parent_source_keystring | nullyes
parentsarray of objectyes
statematched | new | rejected | excludedyes
selected_idinteger | nullyes
selected_destinationCsvImportCandidate | nullyes
ambiguousbooleanyes

CsvImportTallies

fieldtyperequired
file_rowsintegeryes
selected_rowsintegeryes
new_rowsintegeryes
already_imported_rowsintegeryes
rejected_row_countintegeryes
diagnostic_countintegeryes
file_error_countintegeryes
invalid_rowsintegeryes
unsupported_rowsintegeryes
source_secondsintegeryes
destination_secondsintegeryes
destination_delta_secondsintegeryes
deleted_imported_rowsintegeryes
organization_currencystringyes
unpricedanyyes
ignored_columnsarray of stringyes
ignored_column_countintegeryes
warning_countintegeryes
peopleobjectyes
clientsobjectyes
projectsobjectyes
tasksobjectyes
assignmentsobjectyes

CsvImportUploadBytes

{"type":"string","format":"binary"}

DeelPaymentStatusMonth

fieldtyperequired
monthstringyes

DeelPaymentStatusRefreshEnvelope

fieldtyperequired
dataobjectyes

DeelStageCommand

fieldtyperequired
fromstringyes
tostringyes
user_idsarray of integeryes
command_idstring (uuid)yes
preview_fingerprintstringyes

DeelStagePerson

fieldtyperequired
user_idintegeryes
contract_idstring | nullyes
secondsintegeryes
entriesintegeryes

DeelStagePreview

fieldtyperequired
statusanyyes
fromstringyes
tostringyes
user_idsarray of integeryes
preview_fingerprintstringyes
entry_idsarray of integeryes
secondsintegeryes
timesheetsintegeryes
already_stagedintegeryes
already_staged_entry_idsarray of integeryes
peoplearray of DeelStagePersonyes
conflict_entry_idsarray of integeryes
unsyncable_entry_idsarray of integeryes
zero_duration_entry_idsarray of integeryes
unmatchedarray of DeelStageUnmatchedyes
unresolved_entry_idsarray of integeryes

DeelStagePreviewEnvelope

fieldtyperequired
dataDeelStagePreviewyes

DeelStageResult

fieldtyperequired
statusstaged | attention | running | stale | busyyes
command_idstringyes
run_idinteger | nullyes
timesheets_stagedintegeryes
entries_stagedintegeryes
already_stagedintegeryes
unresolved_entry_idsarray of integeryes
codestring | nullyes

DeelStageResultEnvelope

fieldtyperequired
dataDeelStageResultyes

DeelStageSelection

fieldtyperequired
fromstringyes
tostringyes
user_idsarray of integeryes

DeelStageStatusEnvelope

fieldtyperequired
dataDeelStageResult | nullyes

DeelStageUnmatched

fieldtyperequired
user_idintegeryes
reasonstringyes

DeelStagingStatusEnvelope

fieldtyperequired
dataobjectyes

DeelSyncPreview

fieldtyperequired
statusreadyyes
windowobjectyes
entry_idsarray of integeryes
timesheetsintegeryes
already_transferredintegeryes
conflictsarray of anyyes
unsyncablearray of anyyes
unmatchedarray of anyyes

DeelSyncRun

fieldtyperequired
idintegeryes
started_atstringyes
finished_atstring | nullyes
outcomerunning | completed | failedyes
timesheets_submittedintegeryes
entries_transferredintegeryes
detailnull | nullyes

DeelSyncRunCommand

fieldtyperequired
fromstringyes
tostringyes
entry_idsarray of integeryes

DeelSyncRunResult

fieldtyperequired
statuscompleted | failedyes
run_idintegeryes
timesheets_submittedintegeryes
entries_transferredintegeryes
failedarray of anyyes
reconciliationnull | nullyes
errorstring | nullyes

DeelSyncSettingsCommand

fieldtyperequired
modemanual | automaticyes
run_timestringyes

DeelSyncStatus

fieldtyperequired
configuredbooleanyes
reasonstring | nullyes
modemanual | automaticyes
run_timestringyes
updated_atstringyes
updated_by_user_idinteger | nullyes
runsarray of DeelSyncRunyes

DeelSyncWindow

fieldtyperequired
fromstringyes
tostringyes

DeletionCompletionEnvelope

fieldtyperequired
dataobjectyes

DeletionCompletionInput

fieldtyperequired
apple_historical_manual_verifiedboolean
expected_request_versionintegeryes
expected_reviewsobjectyes
acknowledgedbooleanyes

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

DetailedTimeFacet

fieldtyperequired
idintegeryes
namestringyes

DetailedTimeFacets

fieldtyperequired
peoplearray of DetailedTimeFacetyes
tasksarray of DetailedTimeFacetyes
rolesarray of DetailedTimeFacetyes
tagsarray of DetailedTimeFacetyes

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
facetsDetailedTimeFacetsyes
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
invoice_numberstring | null
notesstring | null
project_activeboolean

EffectiveClientRateCard

fieldtyperequired
client_idintegeryes
supplied_by_client_idintegeryes
depthintegeryes
card_idintegeryes
card_namestringyes
version_start_datestring | nullyes
task_idinteger | nullyes
amount_centsintegeryes

EffectiveClientRateCardEnvelope

fieldtyperequired
dataEffectiveClientRateCardyes
linksLinksyes

EffectiveTimeRounding

The rule an entry on a project is saved under, and whose it is.

fieldtyperequired
modeexact | up | down | nearestyes
minutes6 | 10 | 15 | 20 | 30 | 60yes
sourceorganization | projectyes

ElevatedInvoiceTimeUnlinkEnvelope

fieldtyperequired
dataElevatedInvoiceTimeUnlinkyes

ElevatedInvoiceTimeUnlinkInput

fieldtyperequired
expected_versionintegeryes
entry_idsarray of integeryes
confirmedbooleanyes

EmailHealth

fieldtyperequired
reputationEmailReputationSnapshotyes
identitiesarray of EmailIdentityReputationyes

EmailHealthEnvelope

fieldtyperequired
dataEmailHealthyes
linksLinksyes

EmailIdentityReputation

fieldtyperequired
senderstringyes
sentintegeryes
bouncedintegeryes
complainedintegeryes
failedintegeryes
bounce_rate_ppmintegeryes
complaint_rate_ppmintegeryes

EmailInput

fieldtyperequired
emailstring (email)yes

EmailLog

fieldtyperequired
idintegeryes
fromEmailRecipient | nullyes
reply_toarray of EmailRecipientyes
toarray of EmailRecipientyes
ccarray 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
viewed_atstring | nullyes
created_atstring (date-time)yes
updated_atstring (date-time)yes

EmailLogPage

fieldtyperequired
dataarray of EmailLogyes
linksPageLinksyes
pageCountedPageMetadatayes

EmailRecipient

fieldtyperequired
emailstringyes
namestring

EmailReputationSnapshot

fieldtyperequired
sentintegeryes
bouncedintegeryes
complainedintegeryes
failedintegeryes
bounce_rate_ppmintegeryes
complaint_rate_ppmintegeryes

EmailSuppression

fieldtyperequired
idintegeryes
addressstring (email)yes
reasonbounce | complaintyes
first_seen_atstring (date-time)yes
last_seen_atstring (date-time)yes
event_countintegeryes

EmailSuppressionLift

fieldtyperequired
idintegeryes
addressstring (email)yes
through_event_idintegeryes
actor_user_idintegeryes
notestringyes
complaint_acknowledgedbooleanyes
lifted_atstring (date-time)yes

EmailSuppressionLiftEnvelope

fieldtyperequired
dataEmailSuppressionLiftyes
linksLinksyes

EmailSuppressionLiftInput

fieldtyperequired
notestringyes
confirmationstring

EmailSuppressionsPage

fieldtyperequired
dataarray of EmailSuppressionyes
linksPageLinksyes
pagePageMetadatayes

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

EmptyObject

{"type":"object","additionalProperties":false,"properties":{}}

ErrorDetail

fieldtyperequired
currentVersioninteger
currentany
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
expires_onstring | nullyes
effective_expires_onstring | nullyes
line_itemsarray of EstimateLineyes

EstimateContent

fieldtyperequired
subjectstring | nullyes
notesstring | nullyes
currencystringyes
tax_rate_ppminteger | nullyes
tax2_rate_ppminteger | nullyes
discount_rate_ppminteger | nullyes
linesarray of EstimateContentLineyes

EstimateContentLine

fieldtyperequired
kindstringyes
descriptionstring | nullyes
quantitynumberyes
unit_price_centsintegeryes
taxedbooleanyes
taxed2booleanyes

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

EstimateDraftEnvelope

fieldtyperequired
dataobjectyes

EstimateDraftInput

fieldtyperequired
client_idintegeryes
numberstringyes
issue_datestring (date)yes
contentEstimateContentyes
template_idstring | null
template_versioninteger | null

EstimateEnvelope

fieldtyperequired
dataEstimateyes
linksLinksyes

EstimateExpiryInput

fieldtyperequired
expected_versionintegeryes
expires_onstring | nullyes

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
contact_idinteger | nullyes
content_hashstring | nullyes
estimate_versioninteger | 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

EstimateTemplate

fieldtyperequired
idstringyes
namestringyes
versionintegeryes
archivedbooleanyes
contentEstimateContentyes
created_atstring (date-time)yes
updated_atstring (date-time)yes

EstimateTemplateEnvelope

fieldtyperequired
dataEstimateTemplateyes
linksLinksyes

EstimateTemplateInput

fieldtyperequired
namestringyes
contentEstimateContentyes

EstimateTemplateListEnvelope

fieldtyperequired
dataarray of EstimateTemplateyes
truncatedbooleanyes

EstimateTemplateUpdateInput

fieldtyperequired
namestringyes
contentEstimateContentyes
expected_versionintegeryes
archivedboolean

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

GithubPublicationActionRequest

fieldtyperequired
expected_versionintegeryes
actionretry | adopt | restore | unlinkyes
confirmbooleanyes
command_idstring (uuid)yes

GithubPublicationConsentRequest

fieldtyperequired
link_idintegeryes
source_versionstringyes
command_idstring (uuid)yes

GithubPublicationPolicyRequest

fieldtyperequired
connection_idstringyes
expected_generationintegeryes
enabledbooleanyes
confirm_permissionbooleanyes
command_idstring (uuid)yes

GithubPublicationPreviewEnvelope

fieldtyperequired
dataobjectyes

GithubPublicationsEnvelope

fieldtyperequired
dataobjectyes

GithubReaderConnection

fieldtyperequired
idstringyes
generationintegeryes
installation_idstringyes
stateactive | disconnecting | disconnected | revokedyes
deferred_untilinteger | nullyes
failure_codesarray of stringyes
resourcesarray of GithubReaderResourceyes

GithubReaderDisconnectEnvelope

fieldtyperequired
dataobjectyes

GithubReaderDisconnectRequest

fieldtyperequired
command_idstring (uuid)yes
expected_generationintegeryes
connection_idstringyes

GithubReaderInstallationsEnvelope

fieldtyperequired
dataobjectyes

GithubReaderMapEnvelope

fieldtyperequired
dataobjectyes

GithubReaderMapRequest

fieldtyperequired
command_idstring (uuid)yes
expected_generationintegeryes
installation_idstringyes
repository_idstringyes
project_idintegeryes
task_idintegeryes

GithubReaderMetadataEnvelope

fieldtyperequired
dataobjectyes

GithubReaderReconcileRequest

{"type":"object","properties":{},"required":[],"additionalProperties":false}

GithubReaderRepositoriesEnvelope

fieldtyperequired
dataobjectyes

GithubReaderResource

fieldtyperequired
repository_idstringyes
full_namestring | nullyes
project_idinteger | nullyes
task_idinteger | nullyes
stateactive | renamed | transferred | deleted | access_lostyes
checkpoint_statusidle | running | completeyes
attemptsintegeryes
next_retry_atintegeryes
failure_codestring | nullyes
items_visibleintegeryes
items_unavailableintegeryes

GithubReaderSetupEnvelope

fieldtyperequired
dataobjectyes

GithubReaderSetupRequest

fieldtyperequired
organizationstring

GithubReaderStatusEnvelope

fieldtyperequired
dataobjectyes

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

InvoiceBandClaim

fieldtyperequired
claimed_entry_countintegeryes
claimed_secondsintegeryes
billed_entry_countintegeryes
billed_secondsintegeryes

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

InvoiceDefaults

fieldtyperequired
company_namestringyes
company_addressstring | nullyes
notesstring | nullyes
subjectstring | nullyes
estimate_validity_daysinteger | nullyes
view_receiptsbooleanyes

InvoiceDefaultsEnvelope

fieldtyperequired
dataInvoiceDefaultsyes
linksLinksyes

InvoiceDefaultsInput

fieldtyperequired
company_namestring
company_addressstring | null
notesstring | null
subjectstring | null
estimate_validity_daysinteger | null
view_receiptsboolean

InvoiceDocumentPreferenceEnvelope

fieldtyperequired
dataobjectyes

InvoiceDocumentPreferenceInput

fieldtyperequired
attach_pdfboolean | null
attach_filesboolean | null
append_pdfsboolean | null
attach_journalnull | null
journal_formatsJournalFormats | null

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

InvoiceElevationChallenge

fieldtyperequired
statusstringyes
challenge_tokenstringyes
expires_atstring (date-time)yes
methodsarray of stringyes

InvoiceElevationChallengeEnvelope

fieldtyperequired
dataInvoiceElevationChallengeyes

InvoiceElevationEmailInput

fieldtyperequired
challenge_tokenstringyes

InvoiceElevationInput

fieldtyperequired
invoice_idintegeryes
emailstring (email)yes
passwordstringyes

InvoiceElevationIssued

fieldtyperequired
statusstringyes
credentialstringyes
idstringyes
invoice_idintegeryes
expires_atstring (date-time)yes
scopestringyes

InvoiceElevationIssuedEnvelope

fieldtyperequired
dataInvoiceElevationIssuedyes

InvoiceElevationStartEnvelope

fieldtyperequired
dataInvoiceElevationIssued | InvoiceElevationChallengeyes

InvoiceElevationVerifyInput

fieldtyperequired
challenge_tokenstringyes
codestringyes

InvoiceEmailDefaultsEnvelope

fieldtyperequired
dataobjectyes

InvoiceEmailDeliveryInput

fieldtyperequired
expected_versionintegeryes
recipientsarray of InvoiceRecipientyes
ccarray of InvoiceRecipient
subjectstring
messagestring
send_me_a_copyboolean
sender_identity_idinteger
template_versioninteger
confirmedtrueyes

InvoiceEmailPreviewAttachment

fieldtyperequired
kindinvoice | journal | fileyes
filenamestringyes
content_typestringyes
byte_sizeintegeryes
appendedarray of stringyes
not_appendedstring | nullyes

InvoiceEmailPreviewEnvelope

fieldtyperequired
dataobjectyes
linksobjectyes

InvoiceEmailPreviewInput

fieldtyperequired
expected_versioninteger
recipientsarray of InvoiceRecipientyes
ccarray of InvoiceRecipient
subjectstring
messagestring
send_me_a_copyboolean
sender_identity_idinteger
template_versioninteger
attach_pdfboolean
attach_filesboolean
append_pdfsboolean
attach_journalany
journal_formatsJournalFormats

InvoiceEmailPreviewSentEnvelope

fieldtyperequired
dataobjectyes

InvoiceEnvelope

fieldtyperequired
dataInvoiceyes
linksLinksyes

InvoiceGenerationEnvelope

fieldtyperequired
dataInvoiceyes
bandInvoiceBandClaim
linksLinksyes

InvoiceGenerationInput

{"oneOf":[{"type":"object","required":["client_id","to","project_ids","time_summary_type","expense_summary_type"],"properties":{"kind":{"const":"tracked"},"client_id":{"type":"integer","minimum":1},"f

InvoiceHoursReconciliationEnvelope

fieldtyperequired
dataobjectyes

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

InvoiceLineTimeReleaseEnvelope

fieldtyperequired
dataobjectyes

InvoiceLineTimeReleaseInput

fieldtyperequired
command_idstringyes
line_idintegeryes
expected_versionintegeryes
hours_versionstringyes
entry_idsarray of integeryes
confirmedtrueyes

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
ccarray 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":

InvoiceProviderAlert

fieldtyperequired
idstringyes
event_typestringyes
kindrefund | disputeyes
amount_centsintegeryes
currencystringyes
provider_statusstringyes
occurred_atstringyes
reviewed_atstring | nullyes
reviewed_byinteger | nullyes

InvoiceProviderAlertEnvelope

fieldtyperequired
dataInvoiceProviderAlertyes

InvoiceProviderAlertListEnvelope

fieldtyperequired
dataarray of InvoiceProviderAlertyes

InvoiceQuickBooksEnvelope

fieldtyperequired
dataobjectyes

InvoiceRecipient

fieldtyperequired
namestringyes
emailstringyes

InvoiceRecipientLists

fieldtyperequired
toarray of InvoiceRecipientyes
ccarray of InvoiceRecipientyes

InvoiceReminderPolicy

fieldtyperequired
first_after_daysintegeryes
every_daysintegeryes

InvoiceReminderPreferenceEnvelope

fieldtyperequired
dataobjectyes

InvoiceReminderPreferenceInput

fieldtyperequired
remindersboolean | nullyes

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

JournalFormats

{"type":"array","items":{"type":"string","enum":["pdf","csv","xlsx"]},"minItems":1,"maxItems":3,"uniqueItems":true}

MigrationLoadStatus

fieldtyperequired
idstring (uuid)yes
statusready | queued | running | completed | failed | cancelledyes
snapshot_sha256stringyes
source_rowsintegeryes
resourcestring | nullyes
rows_doneintegeryes
sequenceintegeryes
attemptsintegeryes
error_codestring | nullyes
created_atstring (date-time)yes
started_atstring | nullyes
completed_atstring | nullyes
source_cleaned_atstring | nullyes
updated_atstring (date-time)yes

MigrationLoadStatusEnvelope

fieldtyperequired
dataMigrationLoadStatusyes
linksLinksyes

ModuleListEnvelope

fieldtyperequired
dataarray of ModuleStateyes
linksLinksyes

ModulePatch

fieldtyperequired
enabledbooleanyes

ModuleState

fieldtyperequired
moduleapproval | expenses | own_money | activity_logyes
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

MyPayments

fieldtyperequired
monthstringyes
hours_secondsintegeryes
statuspending_review | in_progress | pending | partial | paid | settledyes
owedobject | nullyes
paid_centsintegeryes
balance_centsinteger | nullyes
paymentsarray of objectyes
upcomingarray of objectyes

MyPaymentsEnvelope

fieldtyperequired
dataMyPaymentsyes

NativeAppleCapabilities

fieldtyperequired
availablebooleanyes
lifecycle_versionintegeryes

NativeAppleSignInEnvelope

fieldtyperequired
dataobjectyes

NativeAppleSignInInput

fieldtyperequired
identityTokenstringyes
bindingReceiptstringyes
fullNameobject

NotificationSettingsEnvelope

fieldtyperequired
dataobjectyes

NotificationSettingsInput

fieldtyperequired
budget_alerts_include_adminsboolean
submission_reminderSubmissionReminderSchedule | null

OffsiteBackupCheckEnvelope

fieldtyperequired
dataobjectyes

OffsiteBackupRun

fieldtyperequired
idstringyes
backup_run_idintegeryes
statuspending | running | completed | failedyes
started_atstring (date-time)yes
completed_atstring | nullyes
uploaded_objectsintegeryes
total_objectsintegeryes
error_messagestring | nullyes

OffsiteBackupStatus

fieldtyperequired
configuredbooleanyes
statedisabled | misconfigured | waiting | running | completed | failedyes
destinationstring | nullyes
last_completedOffsiteBackupRun | nullyes
latestOffsiteBackupRun | nullyes
errorobject | nullyes

OrganizationHoliday

fieldtyperequired
idintegeryes
datestring (date)yes
namestringyes
versionintegeryes
created_atstring (date-time)yes
updated_atstring (date-time)yes

OrganizationHolidayDeleteInput

fieldtyperequired
versionintegeryes

OrganizationHolidayEnvelope

fieldtyperequired
dataOrganizationHolidayyes
linksobjectyes

OrganizationHolidayInput

fieldtyperequired
datestring (date)yes
namestringyes

OrganizationHolidayPage

fieldtyperequired
dataarray of OrganizationHolidayyes
linksobjectyes
pageobjectyes

OrganizationHolidayUpdateInput

fieldtyperequired
datestring (date)yes
namestringyes
versionintegeryes

OrganizationInvoiceDocumentsEnvelope

fieldtyperequired
dataobjectyes

OrganizationInvoiceDocumentsInput

fieldtyperequired
attach_pdfboolean
attach_filesboolean
append_pdfsboolean
attach_journalany
journal_formatsJournalFormats

OrganizationInvoiceRemindersEnvelope

fieldtyperequired
dataobjectyes

OrganizationInvoiceRemindersInput

fieldtyperequired
reminder_policyReminderPolicy | nullyes

OrganizationInvoiceSendingEnvelope

fieldtyperequired
dataobjectyes

OrganizationInvoiceSendingInput

fieldtyperequired
always_ccarray of InvoiceRecipientyes

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
linksPageLinksyes
pageCountedPageMetadatayes

PageMetadata

fieldtyperequired
per_pageintegeryes
next_cursorstring | nullyes

PasswordResetInput

fieldtyperequired
tokenstringyes
passwordstringyes

PasswordSignInInput

fieldtyperequired
emailstring (email)yes
passwordstringyes

PaymentActualsEnvelope

fieldtyperequired
dataobjectyes

PaymentAllocation

fieldtyperequired
idstringyes
payment_kindevent | run_itemyes
payment_idstringyes
user_idintegeryes
monthstringyes
currencystringyes
scopemonth | project | entryyes
project_idinteger | nullyes
project_namestring | nullyes
entry_idinteger | nullyes
secondsinteger | nullyes
rate_centsinteger | nullyes
amount_centsintegeryes
stateapplied | reserved | released | reversedyes
reasonstringyes
actor_idintegeryes
recorded_atstringyes

PaymentAllocationEntry

fieldtyperequired
entry_idintegeryes
spent_datestringyes
selected_secondsintegeryes
rate_centsinteger | nullyes
reviewed_rounded_secondsintegeryes
current_rounded_secondsinteger | nullyes
current_rate_centsinteger | nullyes
earned_centsintegeryes
applied_centsintegeryes
reserved_centsintegeryes
applied_secondsintegeryes
reserved_secondsintegeryes
remaining_centsintegeryes
remaining_secondsintegeryes
source_changedbooleanyes
over_allocatedbooleanyes

PaymentAllocationPerson

fieldtyperequired
user_idintegeryes
namestringyes
currencystring | nullyes
earned_centsintegeryes
paid_centsintegeryes
reserved_centsintegeryes
allocated_applied_centsintegeryes
allocated_reserved_centsintegeryes
remaining_centsintegeryes
projectsarray of PaymentAllocationProjectyes
unallocated_paymentsarray of UnallocatedPaymentyes
allocationsarray of PaymentAllocationyes

PaymentAllocationPreview

fieldtyperequired
scopemonth | project | entryyes
currencystringyes
secondsinteger | nullyes
rate_centsinteger | nullyes
amount_centsintegeryes
payment_centsintegeryes
payment_allocated_centsintegeryes
payment_remaining_centsintegeryes
earning_centsintegeryes
earning_allocated_centsintegeryes
earning_remaining_centsintegeryes
earning_remaining_secondsinteger | nullyes

PaymentAllocationPreviewEnvelope

fieldtyperequired
dataPaymentAllocationPreviewyes

PaymentAllocationProject

fieldtyperequired
project_idintegeryes
project_namestringyes
earned_centsintegeryes
applied_centsintegeryes
reserved_centsintegeryes
remaining_centsintegeryes
entriesarray of PaymentAllocationEntryyes

PaymentAllocationReport

fieldtyperequired
monthstringyes
peoplearray of PaymentAllocationPersonyes

PaymentAllocationReportEnvelope

fieldtyperequired
dataPaymentAllocationReportyes

PaymentDestination

fieldtyperequired
idintegeryes
external_idstringyes
kindaccount | contactyes

PaymentItem

fieldtyperequired
user_idintegeryes
monthstringyes
amount_centsintegeryes
expected_versionintegeryes
purposeearnings | advanceyes
advance_project_idinteger | nullyes
advance_reasonstring | nullyes
idstringyes
run_idstringyes
namestringyes
currencystringyes
destinationPaymentDestinationyes
quotePaymentQuoteyes
execution_quotePaymentQuote | nullyes
max_source_centsintegeryes
statedraft | queued | creating | funding | processing | paid | failed | attention | cancelledyes
transfer_idstring | nullyes
provider_statusstring | nullyes
failurestring | nullyes
attemptsintegeryes
next_attempt_atstringyes
updated_atstringyes
versionintegeryes
lease_tokenstring | nullyes
lease_untilstring | nullyes

PaymentQuote

fieldtyperequired
idstringyes
profile_idstringyes
recipient_idstringyes
recipient_namestringyes
source_currencystringyes
target_currencystringyes
target_centsintegeryes
source_centsintegeryes
fee_centsintegeryes
ratenumberyes
expires_atstringyes
estimated_arrivalstring | nullyes

PaymentReceivedReportRow

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

PaymentReconciliationEnvelope

fieldtyperequired
dataobjectyes

PaymentRun

fieldtyperequired
idstringyes
namestringyes
source_currencystringyes
scheduled_atstringyes
timezonestringyes
statedraft | approved | cancelledyes
actor_idintegeryes
approved_byinteger | nullyes
created_atstringyes
approved_atstring | nullyes
request_idstringyes
itemsarray of PaymentItemyes

PaymentRunApproval

fieldtyperequired
limitsarray of objectyes

PaymentRunCommand

fieldtyperequired
idstringyes
namestringyes
source_currencystringyes
scheduled_atstringyes
timezonestringyes
itemsarray of PaymentSelectionyes

PaymentRunEnvelope

fieldtyperequired
dataPaymentRunyes

PaymentRunReport

fieldtyperequired
fromstringyes
tostringyes
ledgersarray of StaffPaymentReportyes
runsarray of PaymentRunyes

PaymentRunReportEnvelope

fieldtyperequired
dataPaymentRunReportyes

PaymentSelection

fieldtyperequired
user_idintegeryes
monthstringyes
amount_centsintegeryes
expected_versionintegeryes
purposeearnings | advance
currencystring
advance_project_idinteger | null
advance_reasonstring | null

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

PayoutPreference

fieldtyperequired
user_idintegeryes
providerstring | nullyes
effective_providerdeel | wiseyes
organization_defaultdeel | wiseyes
versionintegeryes
set_bystring | nullyes
linked_providersarray of stringyes

PayoutPreferenceEnvelope

fieldtyperequired
dataPayoutPreferenceyes

PayoutPreferenceInput

fieldtyperequired
providerstring | nullyes
expected_versionintegeryes

PayoutPreferenceRosterEnvelope

fieldtyperequired
dataobjectyes

PayoutProviderListEnvelope

fieldtyperequired
dataarray of PayoutProviderSettingyes

PayoutProviderSetting

fieldtyperequired
providerdeel | wiseyes
enabledbooleanyes

PayoutProviderSettingInput

fieldtyperequired
enabledbooleanyes

PlaceholderAllocation

fieldtyperequired
idintegeryes
placeholder_idintegeryes
namestringyes
project_idintegeryes
project_namestringyes
start_datestring (date)yes
end_datestring (date)yes
planned_seconds_per_weekintegeryes
stateopen | assigned | archivedyes
versionintegeryes
assigned_allocation_idinteger | nullyes

PlaceholderAllocationEnvelope

fieldtyperequired
dataPlaceholderAllocationyes

PlaceholderAllocationInput

fieldtyperequired
placeholder_idintegeryes
project_idintegeryes
start_datestring (date)yes
end_datestring (date)yes
planned_seconds_per_weekintegeryes

PlaceholderAllocationPage

fieldtyperequired
dataarray of PlaceholderAllocationyes
linksobjectyes
pageobjectyes

PlaceholderAllocationUpdateInput

fieldtyperequired
versionintegeryes
start_datestring (date)
end_datestring (date)
planned_seconds_per_weekinteger

PlaceholderAssignment

fieldtyperequired
allocationobjectyes
placeholderPlaceholderAllocationyes
warningsarray of objectyes
prerequisitesarray of objectyes

PlaceholderAssignmentEnvelope

fieldtyperequired
dataPlaceholderAssignmentyes

PlaceholderAssignmentInput

fieldtyperequired
versionintegeryes
user_idintegeryes
idempotency_keystringyes

PlanningPlaceholder

fieldtyperequired
idintegeryes
namestringyes
is_activebooleanyes
versionintegeryes

PlanningPlaceholderEnvelope

fieldtyperequired
dataPlanningPlaceholderyes

PlanningPlaceholderInput

fieldtyperequired
namestringyes

PlanningPlaceholderPage

fieldtyperequired
dataarray of PlanningPlaceholderyes
linksobjectyes
pageobjectyes

PlanningPlaceholderUpdateInput

fieldtyperequired
namestringyes
versionintegeryes

PlanningRevisionInput

fieldtyperequired
versioninteger

PlanningVersionInput

fieldtyperequired
versionintegeryes

Profile

fieldtyperequired
user_idintegeryes
first_namestring
last_namestring
emailstring | null
timezonestringyes
effective_timezonestring
invoice_copy_to_selfboolean

ProfileEnvelope

fieldtyperequired
dataProfileyes
linksLinksyes

ProfileNotificationEnvelope

fieldtyperequired
dataTeamNotificationPreferenceyes

ProfileNotificationInput

fieldtyperequired
daily_reminder_enabledbooleanyes
reminder_timestring | nullyes
reminder_daysarray of stringyes
channelsTeamNotificationChannelsInputyes
include_in_team_remindersbooleanyes
weekly_digestbooleanyes
notify_project_deletedfalseyes

ProfilePatch

fieldtyperequired
timezonestring
invoice_copy_to_selfboolean

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

ProjectMissingRates

fieldtyperequired
project_idintegeryes
hourly_rate_centsintegeryes
currencystringyes
entry_countintegeryes
secondsintegeryes
earliest_datestringyes
latest_datestringyes
fingerprintstringyes
applied_entriesintegeryes

ProjectMissingRatesEnvelope

fieldtyperequired
dataProjectMissingRatesyes

ProjectMissingRatesInput

fieldtyperequired
fingerprintstring

QuickBooksAuthorizeEnvelope

fieldtyperequired
dataobjectyes

QuickBooksConnection

fieldtyperequired
realm_idstringyes
company_namestring | nullyes
scopestringyes
allow_online_paymentbooleanyes
connected_atstringyes

QuickBooksConnectionEnvelope

fieldtyperequired
dataQuickBooksConnection | nullyes

QuickBooksReconciliationEnvelope

fieldtyperequired
dataobjectyes

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"

RecurringAttachmentThroughInput

fieldtyperequired
throughstring | nullyes

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
purchase_orderstring | 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
purchase_orderstring | 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

ResourceCalendar

fieldtyperequired
contextResourceCalendarContextyes
viewproject | teamyes
revisionstringyes
week_startsarray of stringyes
peoplearray of ResourceCalendarPersonyes
unassignedarray of ResourceCalendarUnassignedyes
unassigned_truncatedbooleanyes
has_other_scopebooleanyes

ResourceCalendarAllocation

fieldtyperequired
idintegeryes
versionintegeryes
user_idintegeryes
project_idintegeryes
project_namestringyes
start_datestring (date)yes
end_datestring (date)yes
planned_seconds_per_weekintegeryes

ResourceCalendarAllocationPage

fieldtyperequired
dataarray of ResourceCalendarAllocationyes
linksobjectyes
pageobjectyes

ResourceCalendarContext

fieldtyperequired
time_zonestringyes
week_start_daysaturday | sunday | mondayyes
todaystring (date)yes
current_week_startstring (date)yes

ResourceCalendarContextEnvelope

fieldtyperequired
dataResourceCalendarContextyes
linksobjectyes

ResourceCalendarEnvelope

fieldtyperequired
dataResourceCalendaryes
linksobjectyes
pageobjectyes

ResourceCalendarPerson

fieldtyperequired
person_idintegeryes
namestringyes
weeksarray of ResourceCalendarWeekyes

ResourceCalendarProject

fieldtyperequired
idintegeryes
namestringyes
is_activebooleanyes

ResourceCalendarProjectHours

fieldtyperequired
project_idintegeryes
planned_secondsintegeryes

ResourceCalendarProjectPage

fieldtyperequired
dataarray of ResourceCalendarProjectyes
linksobjectyes
pageobjectyes

ResourceCalendarUnassigned

fieldtyperequired
week_startstring (date)yes
placeholder_idintegeryes
namestringyes
project_idintegeryes
planned_secondsintegeryes

ResourceCalendarWeek

fieldtyperequired
week_startstring (date)yes
planned_secondsintegeryes
available_secondsintegeryes
tracked_secondsintegeryes
person_planned_secondsintegeryes
person_other_scope_planned_secondsintegeryes
over_allocatedbooleanyes
projectsarray of ResourceCalendarProjectHoursyes
other_scope_planned_secondsintegeryes
other_scope_tracked_secondsintegeryes

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

RetentionReview

fieldtyperequired
request_idstringyes
areastringyes
kindretained_category | downstreamyes
original_reasonstringyes
original_periodstringyes
decisionpending | retain | removed | not_applicable | failed | release_holdyes
basisstringyes
release_conditionstringyes
evidencestringyes
next_review_atstring | nullyes
hold_activebooleanyes
versionintegeryes
reviewed_atstring | nullyes
actor_user_idinteger | nullyes

RetentionReviewEnvelope

fieldtyperequired
dataRetentionReviewyes

RetentionReviewInput

fieldtyperequired
expected_versionintegeryes
decisionretain | removed | not_applicable | failed | release_holdyes
basisstringyes
release_conditionstringyes
evidencestringyes
next_review_atstring | nullyes
acknowledgedbooleanyes

RetentionReviewListEnvelope

fieldtyperequired
dataarray of RetentionReviewyes

ReturnAdvanceCredit

fieldtyperequired
idstringyes
reasonstringyes
advance_item_idstringyes
amount_centsintegeryes
referencestringyes

ReverseAdvanceCredit

fieldtyperequired
idstringyes
reasonstringyes
application_idstringyes

ReversePaymentAllocation

fieldtyperequired
idstringyes
allocation_idstringyes
reasonstringyes

ReviewInvoiceProviderAlertInput

{"type":"object","properties":{},"required":[],"additionalProperties":false}

RollableActivityYears

fieldtyperequired
rollablearray of objectyes

RollableActivityYearsEnvelope

fieldtyperequired
dataRollableActivityYearsyes
linksLinksyes

RollActivityYearInput

fieldtyperequired
yearintegeryes

SavedReport

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

SavedReportAddress

fieldtyperequired
reportstringyes
querystringyes

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
viewSavedReportAddress
presentationReportDefinitionPresentation

SavedReportViewInput

fieldtyperequired
namestringyes
viewSavedReportAddressyes

SaveStaffInvoice

fieldtyperequired
idstringyes
invoice_idinteger | nullyes
expected_versionintegeryes
user_idintegeryes
monthstringyes
currencystringyes
referencestringyes
kinddraft | received | voidyes
from_reviewbooleanyes
linesarray of StaffInvoiceLineyes
document_idstring | nullyes
reasonstringyes
acknowledge_paid_historybooleanyes

ScheduledJob

fieldtyperequired
actionstringyes
namestringyes
scopeanyyes
cadencestringyes
confirmationrequired | noneyes
confirm_within_minutesintegeryes
is_activebooleanyes
idintegeryes
versionintegeryes
created_byintegeryes
created_atstringyes
updated_atstringyes
last_checked_atstring | nullyes
last_errorstring | nullyes
last_run_idinteger | nullyes

ScheduledJobCreate

fieldtyperequired
actionstring
namestringyes
scopeobject
cadencestring
confirmationstring
confirm_within_minutesinteger
is_activeboolean

ScheduledJobEnvelope

fieldtyperequired
dataScheduledJobyes

ScheduledJobPatch

fieldtyperequired
actionstring
namestring
scopeobject
cadencestring
confirmationstring
confirm_within_minutesinteger
is_activeboolean
expected_versionintegeryes

ScheduledJobsPage

fieldtyperequired
dataarray of ScheduledJobyes
linksPageLinksyes
pagePageMetadatayes

ScheduledReviewLinkEnvelope

fieldtyperequired
dataobjectyes

ScheduledReviewLinkInput

fieldtyperequired
tokenstringyes

ScheduledRun

fieldtyperequired
idintegeryes
job_idintegeryes
occurrence_keystringyes
stateproposed | confirmed | cancelled | expired | completedyes
proposed_atstringyes
expires_atstringyes
confirmed_byinteger | nullyes
confirmed_atstring | nullyes
settled_reasonstring | nullyes
itemsarray of ScheduledRunItemyes

ScheduledRunConfirmInput

fieldtyperequired
acknowledge_report_warningsboolean

ScheduledRunEnvelope

fieldtyperequired
dataScheduledRunyes

ScheduledRunItem

fieldtyperequired
report_peoplearray of objectyes
report_namestring | nullyes
report_warningsarray of objectyes
attempt_limitintegeryes
delivery_idinteger | nullyes
delivery_statusstring | nullyes
idintegeryes
subject_typestringyes
subject_idintegeryes
descriptionstringyes
amount_centsinteger | nullyes
currencystring | nullyes
targetstring | nullyes
quantity_secondsinteger | nullyes
client_namestring | nullyes
statepending | running | done | failedyes
attempt_countintegeryes
failure_reasonstring | nullyes
completed_atstring | nullyes

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

StaffInvoice

fieldtyperequired
idintegeryes
user_idintegeryes
monthstringyes
currencystringyes
referencestringyes
versionsarray of StaffInvoiceVersionyes
matched_centsintegeryes
flagsarray of stringyes
line_flagsarray of arrayyes

StaffInvoiceDocumentEnvelope

fieldtyperequired
dataStaffInvoiceDocumentInfoyes

StaffInvoiceDocumentInfo

fieldtyperequired
idstringyes
invoice_idintegeryes
namestringyes
byte_sizeintegeryes
content_typestringyes

StaffInvoiceEnvelope

fieldtyperequired
dataStaffInvoiceyes

StaffInvoiceLine

fieldtyperequired
descriptionstringyes
project_idinteger | nullyes
entry_idinteger | nullyes
secondsintegeryes
rate_centsintegeryes

StaffInvoicePerson

fieldtyperequired
user_idintegeryes
namestringyes
currencystring | nullyes
earned_centsinteger | nullyes
paid_centsintegeryes
invoiced_centsintegeryes
matched_invoice_centsintegeryes
uninvoiced_centsinteger | nullyes
invoicesarray of StaffInvoiceyes

StaffInvoiceReport

fieldtyperequired
monthstringyes
peoplearray of StaffInvoicePersonyes

StaffInvoiceReportEnvelope

fieldtyperequired
dataStaffInvoiceReportyes

StaffInvoiceVersion

fieldtyperequired
command_idstringyes
versionintegeryes
monthstringyes
currencystringyes
kinddraft | received | voidyes
linesarray of StaffInvoiceLineyes
amount_centsintegeryes
review_idstring | nullyes
document_idstring | nullyes
reasonstringyes
actor_idintegeryes
recorded_atstringyes
paid_cents_at_recordingintegeryes
has_payment_historybooleanyes

StaffPaymentCommand

fieldtyperequired
idstringyes
user_idintegeryes
monthstringyes
expected_versionintegeryes
kindamount | payment | void | opening | reopen | noteyes
amount_centsinteger | nullyes
currencystring | nullyes
paid_onstring | nullyes
due_onstring | nullyes
referencestringyes
notestringyes
payment_idstring | nullyes
sourcewise | deel | historicalyes

StaffPaymentEvent

fieldtyperequired
idstringyes
user_idintegeryes
monthstringyes
expected_versionintegeryes
kindamount | payment | void | opening | reopen | noteyes
amount_centsinteger | nullyes
currencystring | nullyes
paid_onstring | nullyes
due_onstring | nullyes
referencestringyes
notestringyes
payment_idstring | nullyes
sourcewise | deel | historical | advance_credityes
versionintegeryes
actor_idintegeryes
actor_namestringyes
recorded_atstringyes
request_idstringyes

StaffPaymentProviderCommand

fieldtyperequired
idstringyes
user_idinteger | nullyes
expected_versionintegeryes
providerstring | nullyes
notestringyes

StaffPaymentProviderEvent

fieldtyperequired
idstringyes
user_idinteger | nullyes
expected_versionintegeryes
providerstring | nullyes
notestringyes
versionintegeryes
actor_idintegeryes
actor_namestringyes
recorded_atstringyes
request_idstringyes

StaffPaymentProviderSettings

fieldtyperequired
default_providerwise | deelyes
versionintegeryes
eventsarray of StaffPaymentProviderEventyes

StaffPaymentReport

fieldtyperequired
monthstringyes
as_ofstringyes
rowsarray of StaffPaymentRowyes
provider_settingsStaffPaymentProviderSettingsyes

StaffPaymentReportEnvelope

fieldtyperequired
dataStaffPaymentReportyes

StaffPaymentRow

fieldtyperequired
deel_stagingobject
is_contractorbooleanyes
user_idintegeryes
namestringyes
activebooleanyes
wise_readybooleanyes
deel_readybooleanyes
payout_providerwise | deelyes
provider_overridestring | nullyes
provider_versionintegeryes
monthstringyes
versionintegeryes
amount_centsinteger | nullyes
currencystring | nullyes
has_hoursbooleanyes
amount_basisledger | contractor_costyes
paid_centsintegeryes
balance_centsinteger | nullyes
reserved_centsintegeryes
available_centsinteger | nullyes
due_onstring | nullyes
settled_throughstring | nullyes
statusin_progress | pending | partial | paid | settledyes
overduebooleanyes
eventsarray of StaffPaymentEventyes

SubmissionReminderSchedule

fieldtyperequired
daymonday | tuesday | wednesday | thursday | friday | saturday | sundayyes
timestringyes

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

TeamNamedRelation

fieldtyperequired
idintegeryes
namestringyes

TeamNotificationChannels

fieldtyperequired
emailbooleanyes
desktopbooleanyes
slackbooleanyes

TeamNotificationChannelsInput

fieldtyperequired
emailbooleanyes
desktopfalseyes
slackfalseyes

TeamNotificationInput

fieldtyperequired
expected_versionintegeryes
daily_reminder_enabledbooleanyes
reminder_timestring | nullyes
reminder_daysarray of stringyes
channelsTeamNotificationChannelsInputyes
include_in_team_remindersbooleanyes
weekly_digestbooleanyes
notify_project_deletedfalseyes

TeamNotificationPreference

fieldtyperequired
delivery_activetrueyes
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
user_idinteger
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
time_roundingEffectiveTimeRoundingyes
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_roundingTimeRoundingyes
time_entry_modeduration | start_endyes
time_formatdecimal | hours_minutesyes
clock12h | 24hyes
week_start_daysaturday | sunday | mondayyes

TimeEntrySettingsEnvelope

fieldtyperequired
dataTimeEntrySettingsyes
linksLinksyes

TimeOff

fieldtyperequired
versionintegeryes
idintegeryes
user_idintegeryes
start_datestring (date)yes
end_datestring (date)yes
kindvacation | sick | holiday | otheryes
seconds_per_dayinteger | nullyes
created_atstring (date-time)yes
updated_atstring (date-time)yes

TimeOffEnvelope

fieldtyperequired
dataTimeOffyes
linksLinksyes

TimeOffInput

fieldtyperequired
user_idintegeryes
start_datestring (date)yes
end_datestring (date)yes
kindvacation | sick | holiday | otheryes
seconds_per_dayinteger | null

TimeOffPage

fieldtyperequired
dataarray of TimeOffyes
linksPageLinksyes
pagePageMetadatayes

TimeOffPatch

fieldtyperequired
versioninteger
start_datestring (date)
end_datestring (date)
kindvacation | sick | holiday | other
seconds_per_dayinteger | null

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

TimeRounding

fieldtyperequired
modeexact | up | down | nearestyes
minutes6 | 10 | 15 | 20 | 30 | 60yes

TimeRoundingEnvelope

fieldtyperequired
dataTimeRoundingyes
linksLinksyes

TimeRoundingPatch

fieldtyperequired
modeexact | up | down | nearest
minutes6 | 10 | 15 | 20 | 30 | 60

TimeRoundingRecalculationApplied

fieldtyperequired
recalculated_entriesintegeryes
previewTimeRoundingRecalculationPreviewyes

TimeRoundingRecalculationAppliedEnvelope

fieldtyperequired
dataTimeRoundingRecalculationAppliedyes
linksLinksyes

TimeRoundingRecalculationPreview

fieldtyperequired
scopeTimeRoundingRecalculationScopeyes
open_entriesintegeryes
changed_entriesintegeryes
rounded_seconds_beforeintegeryes
rounded_seconds_afterintegeryes
earliest_spent_datestring | nullyes
latest_spent_datestring | nullyes
projectsarray of TimeRoundingRecalculationProjectyes
keptobjectyes
fingerprintstringyes

TimeRoundingRecalculationPreviewEnvelope

fieldtyperequired
dataTimeRoundingRecalculationPreviewyes
linksLinksyes

TimeRoundingRecalculationProject

fieldtyperequired
project_idintegeryes
project_namestringyes
time_roundingEffectiveTimeRoundingyes
changed_entriesintegeryes
rounded_seconds_beforeintegeryes
rounded_seconds_afterintegeryes

TimeRoundingRecalculationRequest

fieldtyperequired
project_idinteger
fromstring (date)
tostring (date)
fingerprintstringyes

TimeRoundingRecalculationScope

fieldtyperequired
project_idinteger | nullyes
fromstring | nullyes
tostring | nullyes

TimesheetAutoApprovalEnvelope

fieldtyperequired
dataobjectyes

TimesheetAutoApprovalInput

fieldtyperequired
enabledboolean
window_daysinteger

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
automatic_approvalobject
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
methodsarray of stringyes

TwoFactorChallengeIssuedEnvelope

fieldtyperequired
dataTwoFactorChallengeIssuedyes

TwoFactorCodeInput

fieldtyperequired
codestringyes

TwoFactorEmailCodeInput

fieldtyperequired
challengestring

TwoFactorEmailDisabled

fieldtyperequired
user_idintegeryes
email_enabledfalseyes

TwoFactorEmailDisabledEnvelope

fieldtyperequired
dataTwoFactorEmailDisabledyes

TwoFactorEmailState

fieldtyperequired
user_idintegeryes
email_enabledbooleanyes

TwoFactorEmailStateEnvelope

fieldtyperequired
dataTwoFactorEmailStateyes

TwoFactorEnrolment

fieldtyperequired
secretstringyes
otpauth_uristringyes
recovery_codesarray of stringyes

TwoFactorEnrolmentEnvelope

fieldtyperequired
dataTwoFactorEnrolmentyes
linksLinksyes

TwoFactorStatus

fieldtyperequired
enrolledbooleanyes
email_enabledbooleanyes
pending_confirmationbooleanyes
recovery_codes_remainingintegeryes

TwoFactorStatusEnvelope

fieldtyperequired
dataTwoFactorStatusyes
linksLinksyes

UnallocatedPayment

fieldtyperequired
payment_kindevent | run_itemyes
payment_idstringyes
amount_centsintegeryes
allocated_centsintegeryes
unallocated_centsintegeryes
stateapplied | reservedyes

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

WebhookActiveInput

fieldtyperequired
versionintegeryes
is_activebooleanyes

WebhookCreateInput

fieldtyperequired
urlstringyes
eventsarray of stringyes

WebhookDelivery

fieldtyperequired
idstringyes
subscription_idstring (uuid)yes
event_idstringyes
event_typeinvoice.created | invoice.sent | invoice.viewed | invoice.updated | invoice.drafted | invoice.reopened | invoice.cancelled | invoice.written_off | invoice.closed | invoice.unpaid | invoice.partially_paid | invoice.paid | payment.recorded | payment.updated | payment.deleted | time_entry.created_on_behalf | time_entry.updated_on_behalf | time_entry.stopped_on_behalf | time_entry.deleted_on_behalfyes
payload_jsonstringyes
statuspending | processing | delivered | failedyes
attempt_countintegeryes
cycle_attemptsintegeryes
replay_countintegeryes
last_statusinteger | nullyes
last_error_codestring | nullyes
next_attempt_atstring | nullyes
last_attempt_atstring | nullyes
delivered_atstring | nullyes
failed_atstring | nullyes
created_atstring (date-time)yes
updated_atstring (date-time)yes

WebhookDeliveryEnvelope

fieldtyperequired
dataWebhookDeliveryyes

WebhookDeliveryPage

fieldtyperequired
dataarray of WebhookDeliveryyes
linksobjectyes
pageobjectyes

WebhookReplayInput

{"type":"object","properties":{},"required":[],"additionalProperties":false}

WebhookRotateInput

fieldtyperequired
versionintegeryes
overlap_secondsinteger

WebhookSecretEnvelope

fieldtyperequired
dataWebhookSubscriptionyes
signing_secretstringyes

WebhookSubscription

fieldtyperequired
idstring (uuid)yes
urlstring (uri)yes
eventsarray of stringyes
is_activebooleanyes
versionintegeryes
generationintegeryes
previous_valid_untilstring | nullyes
created_atstring (date-time)yes
updated_atstring (date-time)yes
deleted_atstring | nullyes

WebhookSubscriptionEnvelope

fieldtyperequired
dataWebhookSubscriptionyes

WebhookSubscriptionsEnvelope

fieldtyperequired
dataarray of WebhookSubscriptionyes
configurationobjectyes
linksobjectyes

WebhookVersionInput

fieldtyperequired
versionintegeryes

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

WorkItemConnection

fieldtyperequired
idintegeryes
providergithubyes
statusactive | disconnectedyes
owner_user_idintegeryes
credential_configuredbooleanyes
connected_atstring (date-time)yes
disconnected_atstring | nullyes
created_atstring (date-time)yes
updated_atstring (date-time)yes

WorkItemConnectionEnvelope

fieldtyperequired
dataWorkItemConnectionyes

WorkItemConnectionInput

fieldtyperequired
providergithubyes

WorkItemConnectionListEnvelope

fieldtyperequired
dataarray of WorkItemConnectionyes
linksLinksyes

WorkItemLinkEnvelope

fieldtyperequired
dataWorkItemLinkyes
linksLinksyes

WorkItemLinkInput

fieldtyperequired
connection_idintegeryes
time_entry_idinteger
project_idinteger
item_idstringyes
urlstring | null

WorkItemLinkPage

fieldtyperequired
dataarray of WorkItemLinkyes
linksPageLinksyes
pagePageMetadatayes