Finance

Upsert expense templates in a batch

Upsert expense templates atomically. Send an array of complete writable records, each with its resource ID. One invalid record rejects the entire batch.

PUT/v1/expenses/templates

Body parameters

application/json · array of records · required
name string required

Display name of the resource.

Minimum length: 1 character. · Maximum length: 255 characters.

ExampleOffice cleaning
description string required

Human-readable description of the resource.

Maximum length: 10000 characters.

ExampleMonthly office cleaning service
notes string required

Notes attached to the record.

Maximum length: 10000 characters.

ExampleOffice cleaning service for January 2026
vendorId string required

ID of the related vendor.

Minimum length: 1 character. · Maximum length: 128 characters.

Example01JQ2T5Y5Q3R8W9N6M4K2H7P1C
clientId string required

Optional client reference. Null means the current workspace owns the record; do not create a placeholder client.

Must be present and may be null.

Minimum length: 1 character. · Maximum length: 128 characters.

Examplenull
projectId string required

Project identifier within the current workspace.

Must be present and may be null.

Minimum length: 1 character. · Maximum length: 128 characters.

Examplenull
bankAccountId string required

ID of the related bank account.

Must be present and may be null.

Minimum length: 1 character. · Maximum length: 128 characters.

Examplenull
tags string[] required

Tags assigned to the record.

at most 100 items

Example1 item
recurrenceMonths number required

recurrence months for this expense template.

maximum 1200 · greater than 0

Example1
currencyId string required

Currency identifier for the amount. It selects the currency metadata used by the record.

Minimum length: 1 character. · Maximum length: 128 characters.

Example01JQ2T5Y5Q3R8W9N6M4K2H7P1F
entries object[] required

Applied economic entries. Each entry is a reusable priced unit for a product, service, plan, or other calculable line. Entry prices are authored net prices; the workspace tax modifier calculates VAT.

ShowHide 7 properties
entries[].id string required

Opaque identifier for this resource or reference.

Minimum length: 1 character. · Maximum length: 128 characters.

Example01JQ2T5Y5Q3R8W9N6M4K2H7P1H
entries[].appliedId string nullable

Stable identity of this saved modifier application. Preserve it when updating a financial record, including repeated uses of the same catalog modifier.

Minimum length: 1 character. · Maximum length: 128 characters.

ExampleConsulting services
entries[].name string required

Display name of the resource.

Maximum length: 10000 characters.

ExampleOffice cleaning
entries[].description string required

Human-readable description of the resource.

Maximum length: 10000 characters.

ExampleMonthly office cleaning service
entries[].quantity string required

Exact decimal string used for financial calculations. Do not round or convert it to a display number.

Maximum length: 128 characters.

Example3.00
entries[].unit string required

Unit code from the workspace catalog.

Minimum length: 1 character. · Maximum length: 128 characters.

Exampleitem
entries[].pricePerUnit string required

Exact decimal string used for financial calculations. Do not round or convert it to a display number.

Maximum length: 128 characters.

Example50.00
modifiers object[] required

Modifiers applied to one entry or the whole source. Supported values are signed fixed amounts or percentages, such as `15.00%` or `-25.00`; arbitrary multiplication and division are not supported.

at most 1000 items

ShowHide 6 properties
modifiers[].id string required

Opaque identifier for this resource or reference.

Minimum length: 1 character. · Maximum length: 128 characters.

Example01JQ2T5Y5Q3R8W9N6M4K2H7P1J
modifiers[].appliedId string nullable

Stable identity of this saved modifier application. Preserve it when updating a financial record, including repeated uses of the same catalog modifier.

Minimum length: 1 character. · Maximum length: 128 characters.

ExampleConsulting services
modifiers[].name string required

Display name of the resource.

Minimum length: 1 character. · Maximum length: 10000 characters.

ExampleVAT
modifiers[].description string nullable

Human-readable description of the resource.

Maximum length: 10000 characters.

ExampleValue added tax
modifiers[].entryIndex number nullable

entry index within modifiers.

Example100
modifiers[].value string required

Modifier value. A trailing `%` marks a percentage; a leading `-` marks a decrease. Modifiers support fixed or percentage adjustments, not arbitrary multiplication or division.

Maximum length: 128 characters.

Example15.00%
id string required

Opaque identifier for this resource or reference.

Minimum length: 1 character. · Maximum length: 128 characters.

Example01JQ2T5Y5Q3R8W9N6M4K2H7P1S
startedAt string required

ISO 8601 timestamp for started.

Must be present and may be null.

Example2026-01-15T12:00:00.000Z
endedAt string required

ISO 8601 timestamp for ended.

Must be present and may be null.

Example2026-01-15T12:00:00.000Z
expectedUpdatedAt string nullable

Timestamp used for stale-edit protection. Preserve the server value when updating.

Example2026-01-15T12:00:00.000Z

Headers

authorization string required

Bearer workspace API key.

ExampleBearer $NQD_API_KEY
workspace-id string required

Workspace scope for the request. Required for workspace operations and must belong to the authenticated identity.

Minimum length: 1 character. · Maximum length: 128 characters.

Example01JQ2T5Y5Q3R8W9N6M4K2H7P1A

Send the complete writable representation or change set. Use the latest updatedAt for If-Match.

Recurring templates store schedules. The recurring process creates due records and payments.

Response

200Success

Response headers

x-request-id string

Correlation identifier returned with every response for support and request tracing.

Example550e8400-e29b-41d4-a716-446655440000
data object[]

Returned records. Collections and batches use an array; single records use an object.

ShowHide 28 properties
data[].id string

Opaque identifier for this resource or reference.

Example01JQ2T5Y5Q3R8W9N6M4K2H7P1S
data[].vendorId string

ID of the related vendor.

Example01JQ2T5Y5Q3R8W9N6M4K2H7P1C
data[].clientId string

Optional client reference. Null means the current workspace owns the record; do not create a placeholder client.

Examplenull
data[].projectId string

Project identifier within the current workspace.

Examplenull
data[].bankAccountId string

ID of the related bank account.

Examplenull
data[].name string

Display name of the record.

ExampleOffice cleaning
data[].description string

Optional human-readable description of the record.

ExampleMonthly office cleaning service
data[].notes string

Notes attached to the record.

ExampleOffice cleaning service for January 2026
data[].currency object

Referenced currency with its opaque ID and ISO 4217 currency code.

ShowHide 3 properties
data[].currency.id string

Opaque identifier for this resource or reference.

Minimum length: 1 character. · Maximum length: 128 characters.

Example01JQ2T5Y5Q3R8W9N6M4K2H7P1F
data[].currency.code string

ISO 4217 currency code, such as SAR or USD.

Minimum length: 1 character. · Maximum length: 128 characters.

ExampleSAR
data[].currency.conversion object

Currency conversion quote used for reporting, including source, target, and rate.

ShowHide 3 properties
data[].currency.conversion.from string

ISO 4217 code of the source currency in this persisted quote.

Minimum length: 1 character. · Maximum length: 128 characters.

ExampleSAR
data[].currency.conversion.to string

ISO 4217 code of the target reporting currency in this persisted quote.

Minimum length: 1 character. · Maximum length: 128 characters.

ExampleSAR
data[].currency.conversion.rate string

Exact decimal conversion rate from the quote source currency to its target currency.

Maximum length: 128 characters.

Example1.00
data[].entries object[]

Applied economic entries. Each entry is a reusable priced unit for a product, service, plan, or other calculable line. Entry prices are authored net prices; the workspace tax modifier calculates VAT.

ShowHide 7 properties
data[].entries[].id string

Opaque identifier for this resource or reference.

Minimum length: 1 character. · Maximum length: 128 characters.

Example01JQ2T5Y5Q3R8W9N6M4K2H7P1H
data[].entries[].appliedId string nullable

Stable identity of this saved modifier application. Preserve it when updating a financial record, including repeated uses of the same catalog modifier.

Minimum length: 1 character. · Maximum length: 128 characters.

ExampleConsulting services
data[].entries[].name string

Display name of the record.

Maximum length: 10000 characters.

ExampleOffice cleaning
data[].entries[].description string

Optional human-readable description of the record.

Maximum length: 10000 characters.

ExampleMonthly office cleaning service
data[].entries[].quantity string

Exact decimal string used for financial calculations. Do not round or convert it to a display number.

Maximum length: 128 characters.

Example3.00
data[].entries[].unit string

Unit code from the workspace catalog.

Minimum length: 1 character. · Maximum length: 128 characters.

Exampleitem
data[].entries[].pricePerUnit string

Exact decimal string used for financial calculations. Do not round or convert it to a display number.

Maximum length: 128 characters.

Example50.00
data[].modifiers object[]

Modifiers applied to one entry or the whole source. Supported values are signed fixed amounts or percentages, such as `15.00%` or `-25.00`; arbitrary multiplication and division are not supported.

at most 1000 items

ShowHide 6 properties
data[].modifiers[].id string

Opaque identifier for this resource or reference.

Minimum length: 1 character. · Maximum length: 128 characters.

Example01JQ2T5Y5Q3R8W9N6M4K2H7P1J
data[].modifiers[].appliedId string nullable

Stable identity of this saved modifier application. Preserve it when updating a financial record, including repeated uses of the same catalog modifier.

Minimum length: 1 character. · Maximum length: 128 characters.

ExampleConsulting services
data[].modifiers[].name string

Display name of the record.

Minimum length: 1 character. · Maximum length: 10000 characters.

ExampleVAT
data[].modifiers[].description string nullable

Optional human-readable description of the record.

Maximum length: 10000 characters.

ExampleValue added tax
data[].modifiers[].entryIndex number nullable

entry index within modifiers.

Example100
data[].modifiers[].value string

Modifier value. A trailing `%` marks a percentage; a leading `-` marks a decrease. Modifiers support fixed or percentage adjustments, not arbitrary multiplication or division.

Maximum length: 128 characters.

Example15.00%
data[].tags string[]

Tags assigned to the record.

Example1 item
data[].recurrenceMonths number

recurrence months for this expense template.

Example1
data[].createdBy string

Identifier of the identity that created the record.

Example01JQ2T5Y5Q3R8W9N6M4K2H7P1B
data[].updatedBy string

Identifier of the identity that last updated the record.

Examplenull
data[].deletedBy string

deleted by for this expense template.

Examplenull
data[].amount string

Exact decimal string used for financial calculations. Do not round or convert it to a display number.

Example172.50
data[].totals object

totals for this expense template.

ShowHide 7 properties
data[].totals.base string

base within totals.

Example150.00
data[].totals.net string

Total before tax and other modifiers.

Example150.00
data[].totals.tax string

Tax calculated from the workspace payable modifier.

Example22.50
data[].totals.gross string

Total after tax and other price modifiers.

Example172.50
data[].totals.payable string

Amount due after all applied modifiers.

Example172.50
data[].totals.reporting string

Amount converted to the workspace reporting currency.

Example172.50
data[].totals.lineTotals object

line totals within totals.

data[].vendorWebsite string[] nullable

vendor website for this expense template.

Example1 item
data[].projectWebsite string nullable

project website for this expense template.

Examplehttps://example.com
data[].clientWebsite string[] nullable

client website for this expense template.

Example1 item
data[].clientType string nullable

client type for this expense template.

Allowed values: "individual", "company", "government"

Exampleindividual
data[].startedAt string

ISO 8601 timestamp for started.

Example2026-01-15T12:00:00.000Z
data[].endedAt string

ISO 8601 timestamp for ended.

Example2026-01-15T12:00:00.000Z
data[].nextDueAt string

ISO 8601 timestamp for next due.

Example2026-01-15T12:00:00.000Z
data[].createdAt string

ISO 8601 timestamp for the authored or payment event. Recurring records preserve their scheduled occurrence.

Example2026-01-15T12:00:00.000Z
data[].updatedAt string

Timestamp used for stale-edit protection. Preserve the server value when updating.

Example2026-01-15T12:00:00.000Z
data[].deletedAt string

ISO 8601 timestamp when the record was deleted, or null when it exists.

Examplenull

Possible errors

400 Invalid request

Response headers

x-request-id string

Correlation identifier returned with every response for support and request tracing.

Example550e8400-e29b-41d4-a716-446655440000
error object

Error details returned for a failed request.

ShowHide 4 properties
error.code string

Stable machine-readable error or resource code.

Exampleinvalid_input
error.message string

Human-readable explanation of the result or error.

ExampleThe request could not be validated.
error.requestId string

Correlation identifier for support and request tracing.

Example550e8400-e29b-41d4-a716-446655440000
error.details object nullable

Additional structured details about the result or error.

ShowHide 1 property
error.details.issues object[]

Structured field issues returned when request validation fails.

ShowHide 3 properties
error.details.issues[].path string | number[]

Field path where the validation issue occurred.

One of: string alternative 1, number alternative 2

Example0 items
error.details.issues[].reason string

Machine-readable reason for the validation issue.

Allowed values: "expected_type", "required", "unexpected_property", "invalid_value", "invalid_json", "invalid_query", "unsupported_media_type", "body_too_large", "body_timeout", "conflicting_scope", "missing_header", "concurrency_required", "invalid_resource_id", "invalid_request"

Exampleinvalid_request
error.details.issues[].code string nullable

Stable machine-readable error or resource code.

Exampleinvalid_input
Example 400 response
{
  "error": {
    "code": "invalid_input",
    "message": "The request could not be validated.",
    "requestId": "550e8400-e29b-41d4-a716-446655440000",
    "details": {
      "issues": [
        {
          "path": [],
          "reason": "invalid_request"
        }
      ]
    }
  }
}
View raw OpenAPI operation

Use the machine-readable contract for client generation and payload validation.

Open OpenAPI contract ↗