TRUED API (1.0.0)

Download OpenAPI specification:

Read your TRUED billing, time and payment data from your own systems.

The TRUED API gives your reporting, payroll and automation tools read access to your TRUED workspace: invoices, time entries, charges, clients, client credit, contractors, confirmed payments and events. Webhooks tell your systems when something happens.

Every request needs an API key, created in TRUED under Settings, Integrations, API Keys, and sent as Authorization: Bearer <key>. A key belongs to one workspace and only ever sees that workspace's data. A key's permissions decide which endpoints it can call and which fields it can see: contractor pay and margins need their own permissions, and a field your key may not see is left out of the response.

Money is returned as a string with two decimals, for example "1234.50", next to a currency field. Dates and times are ISO 8601.

Guides: Authentication, Permissions, Pagination and sync, Errors, Rate limits, Webhooks and Reading the ledger.

Invoices

One invoice per contractor, client and period, with its numbered invoices nested inside.

List invoices

Returns invoices oldest change first. Drafts are not returned.

Authorizations:
apiKey
query Parameters
limit
integer [ 1 .. 100 ]
Default: 50

How many rows to return, from 1 to 100.

cursor
string

The next_cursor from the previous page. Keep every other parameter the same.

updated_since
string <date-time>

Only rows that changed at or after this time.

period
string^\d{4}-(0[1-9]|1[0-2])$|^\d{4}-W\d{2}$|^\d{4}...

A billing period, for example 2026-09 (monthly), 2026-W18 (weekly) or 2026-BW09 (every two weeks).

client_id
string
contractor_id
string
status
string
Enum: "not_ready" "ready_to_send" "sent" "paid"

Client billing status.

type
string
Enum: "invoice" "credit_note" "package"

Responses

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "has_more": true,
  • "next_cursor": "string"
}

Get an invoice

Authorizations:
apiKey
path Parameters
id
required
string

Responses

Response samples

Content type
application/json
{
  • "id": "string",
  • "number": "string",
  • "type": "invoice",
  • "reversed": true,
  • "client": {
    },
  • "contractor": {
    },
  • "period": "string",
  • "period_label": "string",
  • "period_start": "2019-08-24",
  • "period_end": "2019-08-24",
  • "plan_name": "string",
  • "client_billing_status": "not_ready",
  • "gross_amount": "string",
  • "credit_applied": "string",
  • "net_due": "string",
  • "currency": "USD",
  • "billed_externally": true,
  • "delivered_value": "string",
  • "recognized_revenue": "string",
  • "billable_hours": 0,
  • "sent_at": "2019-08-24T14:15:22Z",
  • "paid_at": "2019-08-24T14:15:22Z",
  • "period_closed": true,
  • "issued_invoices": [
    ],
  • "credit_note": {
    },
  • "updated_at": "2019-08-24T14:15:22Z",
  • "contractor_pay_status": "to_review",
  • "payout_amount": "string",
  • "payout_sent_to_payroll_at": "2019-08-24T14:15:22Z",
  • "margin_amount": "string",
  • "margin_percent": 0,
  • "margin_note": "string"
}

Charges

Additional charges and billed expenses.

List charges

Charges paid to a contractor but not billed to the client are returned only to keys with the pay:read permission.

Authorizations:
apiKey
query Parameters
limit
integer [ 1 .. 100 ]
Default: 50

How many rows to return, from 1 to 100.

cursor
string

The next_cursor from the previous page. Keep every other parameter the same.

updated_since
string <date-time>

Only rows that changed at or after this time.

period
string^\d{4}-(0[1-9]|1[0-2])$|^\d{4}-W\d{2}$|^\d{4}...

A billing period, for example 2026-09 (monthly), 2026-W18 (weekly) or 2026-BW09 (every two weeks).

client_id
string
contractor_id
string

Responses

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "has_more": true,
  • "next_cursor": "string"
}

Payments

Payments confirmed by your accounting system.

List confirmed payments

One row for each payment your accounting system confirmed. Nothing appears here until a payment is confirmed; an invoice that was only set aside or marked by hand is not a payment. Contractor payouts are returned only to keys with the pay:read permission.

Authorizations:
apiKey
query Parameters
limit
integer [ 1 .. 100 ]
Default: 50

How many rows to return, from 1 to 100.

cursor
string

The next_cursor from the previous page. Keep every other parameter the same.

updated_since
string <date-time>

Only rows that changed at or after this time.

client_id
string
direction
string
Enum: "received_from_client" "paid_to_contractor"

Responses

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "has_more": true,
  • "next_cursor": "string"
}

Time entries

Submitted time. Unsubmitted drafts are never returned.

List time entries

Authorizations:
apiKey
query Parameters
limit
integer [ 1 .. 100 ]
Default: 50

How many rows to return, from 1 to 100.

cursor
string

The next_cursor from the previous page. Keep every other parameter the same.

updated_since
string <date-time>

Only rows that changed at or after this time.

period
string^\d{4}-(0[1-9]|1[0-2])$|^\d{4}-W\d{2}$|^\d{4}...

A billing period, for example 2026-09 (monthly), 2026-W18 (weekly) or 2026-BW09 (every two weeks).

client_id
string
contractor_id
string
status
string
Enum: "in_review" "approved" "declined" "sent" "paid"

Responses

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "has_more": true,
  • "next_cursor": "string"
}

Get a time entry

Authorizations:
apiKey
path Parameters
id
required
string

Responses

Response samples

Content type
application/json
{
  • "id": "string",
  • "work_date": "2019-08-24",
  • "client": {
    },
  • "contractor": {
    },
  • "service": "string",
  • "description": "string",
  • "hours": 0,
  • "session_count": 0,
  • "is_flat_fee": true,
  • "status": "in_review",
  • "decline_outcome": "needs_correction",
  • "invoice_id": "string",
  • "issued_invoice_number": "string",
  • "period": "string",
  • "period_label": "string",
  • "period_start": "2019-08-24",
  • "period_end": "2019-08-24",
  • "currency": "USD",
  • "updated_at": "2019-08-24T14:15:22Z",
  • "bill_rate": "string",
  • "bill_amount": "string",
  • "pay_rate": "string",
  • "pay_amount": "string",
  • "pay_status": "to_review"
}

Contractors

The people who log time.

List contractors

Authorizations:
apiKey
query Parameters
limit
integer [ 1 .. 100 ]
Default: 50

How many rows to return, from 1 to 100.

cursor
string

The next_cursor from the previous page. Keep every other parameter the same.

updated_since
string <date-time>

Only rows that changed at or after this time.

Responses

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "has_more": true,
  • "next_cursor": "string"
}

Get a contractor

Authorizations:
apiKey
path Parameters
id
required
string

Responses

Response samples

Content type
application/json
{
  • "id": "string",
  • "name": "string",
  • "email": "string",
  • "status": "active",
  • "title": "string",
  • "updated_at": "2019-08-24T14:15:22Z"
}

Clients

Clients, their contacts and their credit on file.

List clients

Authorizations:
apiKey
query Parameters
limit
integer [ 1 .. 100 ]
Default: 50

How many rows to return, from 1 to 100.

cursor
string

The next_cursor from the previous page. Keep every other parameter the same.

updated_since
string <date-time>

Only rows that changed at or after this time.

Responses

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "has_more": true,
  • "next_cursor": "string"
}

Get a client

Authorizations:
apiKey
path Parameters
id
required
string

Responses

Response samples

Content type
application/json
{
  • "id": "string",
  • "name": "string",
  • "status": "active",
  • "billing_status": "active",
  • "plan_name": "string",
  • "billing_address": {
    },
  • "contacts": [
    ],
  • "contract_start_date": "string",
  • "contract_end_date": "string",
  • "updated_at": "2019-08-24T14:15:22Z"
}

Get a client's credit

The client's credit balance, prepaid packages and credit history, newest history first. Page through history with limit and cursor.

Authorizations:
apiKey
path Parameters
id
required
string
query Parameters
limit
integer [ 1 .. 100 ]
Default: 50

How many rows to return, from 1 to 100.

cursor
string

The next_cursor from the previous page. Keep every other parameter the same.

Responses

Response samples

Content type
application/json
{
  • "balance": "string",
  • "general_credit": "string",
  • "currency": "USD",
  • "packages": [
    ],
  • "history": [
    ],
  • "has_more": true,
  • "next_cursor": "string"
}

Events

A feed of things that happened, kept for 30 days.

An invoice was marked as sent to the client Webhook

Request Body schema: application/json
required
id
required
string
type
required
string (EventType)
Enum: "invoice.sent" "invoice.issued" "invoice.voided" "invoice.paid" "invoice.reversed" "credit_note.issued" "payout.paid" "time_entry.approved" "time_entry.declined" "time_entry.deleted" "charge.created" "charge.deleted" "credit.applied" "credit.taken_back" "period.closed" "test.ping"
created_at
required
string <date-time>
required
object (EventData)

Ids only. Fetch the object through the API to read its details.

Responses

Request samples

Content type
application/json
{
  • "id": "string",
  • "type": "invoice.sent",
  • "created_at": "2019-08-24T14:15:22Z",
  • "data": {
    }
}

A numbered invoice was issued Webhook

Request Body schema: application/json
required
id
required
string
type
required
string (EventType)
Enum: "invoice.sent" "invoice.issued" "invoice.voided" "invoice.paid" "invoice.reversed" "credit_note.issued" "payout.paid" "time_entry.approved" "time_entry.declined" "time_entry.deleted" "charge.created" "charge.deleted" "credit.applied" "credit.taken_back" "period.closed" "test.ping"
created_at
required
string <date-time>
required
object (EventData)

Ids only. Fetch the object through the API to read its details.

Responses

Request samples

Content type
application/json
{
  • "id": "string",
  • "type": "invoice.sent",
  • "created_at": "2019-08-24T14:15:22Z",
  • "data": {
    }
}

An issued invoice was voided Webhook

Request Body schema: application/json
required
id
required
string
type
required
string (EventType)
Enum: "invoice.sent" "invoice.issued" "invoice.voided" "invoice.paid" "invoice.reversed" "credit_note.issued" "payout.paid" "time_entry.approved" "time_entry.declined" "time_entry.deleted" "charge.created" "charge.deleted" "credit.applied" "credit.taken_back" "period.closed" "test.ping"
created_at
required
string <date-time>
required
object (EventData)

Ids only. Fetch the object through the API to read its details.

Responses

Request samples

Content type
application/json
{
  • "id": "string",
  • "type": "invoice.sent",
  • "created_at": "2019-08-24T14:15:22Z",
  • "data": {
    }
}

Your accounting system confirmed a client payment Webhook

Request Body schema: application/json
required
id
required
string
type
required
string (EventType)
Enum: "invoice.sent" "invoice.issued" "invoice.voided" "invoice.paid" "invoice.reversed" "credit_note.issued" "payout.paid" "time_entry.approved" "time_entry.declined" "time_entry.deleted" "charge.created" "charge.deleted" "credit.applied" "credit.taken_back" "period.closed" "test.ping"
created_at
required
string <date-time>
required
object (EventData)

Ids only. Fetch the object through the API to read its details.

Responses

Request samples

Content type
application/json
{
  • "id": "string",
  • "type": "invoice.sent",
  • "created_at": "2019-08-24T14:15:22Z",
  • "data": {
    }
}

An invoice was reversed with a credit note Webhook

Request Body schema: application/json
required
id
required
string
type
required
string (EventType)
Enum: "invoice.sent" "invoice.issued" "invoice.voided" "invoice.paid" "invoice.reversed" "credit_note.issued" "payout.paid" "time_entry.approved" "time_entry.declined" "time_entry.deleted" "charge.created" "charge.deleted" "credit.applied" "credit.taken_back" "period.closed" "test.ping"
created_at
required
string <date-time>
required
object (EventData)

Ids only. Fetch the object through the API to read its details.

Responses

Request samples

Content type
application/json
{
  • "id": "string",
  • "type": "invoice.sent",
  • "created_at": "2019-08-24T14:15:22Z",
  • "data": {
    }
}

A credit note was issued after payment Webhook

Request Body schema: application/json
required
id
required
string
type
required
string (EventType)
Enum: "invoice.sent" "invoice.issued" "invoice.voided" "invoice.paid" "invoice.reversed" "credit_note.issued" "payout.paid" "time_entry.approved" "time_entry.declined" "time_entry.deleted" "charge.created" "charge.deleted" "credit.applied" "credit.taken_back" "period.closed" "test.ping"
created_at
required
string <date-time>
required
object (EventData)

Ids only. Fetch the object through the API to read its details.

Responses

Request samples

Content type
application/json
{
  • "id": "string",
  • "type": "invoice.sent",
  • "created_at": "2019-08-24T14:15:22Z",
  • "data": {
    }
}

Your accounting system confirmed a contractor payout. Sent only to endpoints whose workspace allows pay data. Webhook

Request Body schema: application/json
required
id
required
string
type
required
string (EventType)
Enum: "invoice.sent" "invoice.issued" "invoice.voided" "invoice.paid" "invoice.reversed" "credit_note.issued" "payout.paid" "time_entry.approved" "time_entry.declined" "time_entry.deleted" "charge.created" "charge.deleted" "credit.applied" "credit.taken_back" "period.closed" "test.ping"
created_at
required
string <date-time>
required
object (EventData)

Ids only. Fetch the object through the API to read its details.

Responses

Request samples

Content type
application/json
{
  • "id": "string",
  • "type": "invoice.sent",
  • "created_at": "2019-08-24T14:15:22Z",
  • "data": {
    }
}

Time was approved Webhook

Request Body schema: application/json
required
id
required
string
type
required
string (EventType)
Enum: "invoice.sent" "invoice.issued" "invoice.voided" "invoice.paid" "invoice.reversed" "credit_note.issued" "payout.paid" "time_entry.approved" "time_entry.declined" "time_entry.deleted" "charge.created" "charge.deleted" "credit.applied" "credit.taken_back" "period.closed" "test.ping"
created_at
required
string <date-time>
required
object (EventData)

Ids only. Fetch the object through the API to read its details.

Responses

Request samples

Content type
application/json
{
  • "id": "string",
  • "type": "invoice.sent",
  • "created_at": "2019-08-24T14:15:22Z",
  • "data": {
    }
}

Time was declined Webhook

Request Body schema: application/json
required
id
required
string
type
required
string (EventType)
Enum: "invoice.sent" "invoice.issued" "invoice.voided" "invoice.paid" "invoice.reversed" "credit_note.issued" "payout.paid" "time_entry.approved" "time_entry.declined" "time_entry.deleted" "charge.created" "charge.deleted" "credit.applied" "credit.taken_back" "period.closed" "test.ping"
created_at
required
string <date-time>
required
object (EventData)

Ids only. Fetch the object through the API to read its details.

Responses

Request samples

Content type
application/json
{
  • "id": "string",
  • "type": "invoice.sent",
  • "created_at": "2019-08-24T14:15:22Z",
  • "data": {
    }
}

A time entry was deleted Webhook

Request Body schema: application/json
required
id
required
string
type
required
string (EventType)
Enum: "invoice.sent" "invoice.issued" "invoice.voided" "invoice.paid" "invoice.reversed" "credit_note.issued" "payout.paid" "time_entry.approved" "time_entry.declined" "time_entry.deleted" "charge.created" "charge.deleted" "credit.applied" "credit.taken_back" "period.closed" "test.ping"
created_at
required
string <date-time>
required
object (EventData)

Ids only. Fetch the object through the API to read its details.

Responses

Request samples

Content type
application/json
{
  • "id": "string",
  • "type": "invoice.sent",
  • "created_at": "2019-08-24T14:15:22Z",
  • "data": {
    }
}

A charge was added Webhook

Request Body schema: application/json
required
id
required
string
type
required
string (EventType)
Enum: "invoice.sent" "invoice.issued" "invoice.voided" "invoice.paid" "invoice.reversed" "credit_note.issued" "payout.paid" "time_entry.approved" "time_entry.declined" "time_entry.deleted" "charge.created" "charge.deleted" "credit.applied" "credit.taken_back" "period.closed" "test.ping"
created_at
required
string <date-time>
required
object (EventData)

Ids only. Fetch the object through the API to read its details.

Responses

Request samples

Content type
application/json
{
  • "id": "string",
  • "type": "invoice.sent",
  • "created_at": "2019-08-24T14:15:22Z",
  • "data": {
    }
}

A charge was removed Webhook

Request Body schema: application/json
required
id
required
string
type
required
string (EventType)
Enum: "invoice.sent" "invoice.issued" "invoice.voided" "invoice.paid" "invoice.reversed" "credit_note.issued" "payout.paid" "time_entry.approved" "time_entry.declined" "time_entry.deleted" "charge.created" "charge.deleted" "credit.applied" "credit.taken_back" "period.closed" "test.ping"
created_at
required
string <date-time>
required
object (EventData)

Ids only. Fetch the object through the API to read its details.

Responses

Request samples

Content type
application/json
{
  • "id": "string",
  • "type": "invoice.sent",
  • "created_at": "2019-08-24T14:15:22Z",
  • "data": {
    }
}

Credit was applied to an invoice Webhook

Request Body schema: application/json
required
id
required
string
type
required
string (EventType)
Enum: "invoice.sent" "invoice.issued" "invoice.voided" "invoice.paid" "invoice.reversed" "credit_note.issued" "payout.paid" "time_entry.approved" "time_entry.declined" "time_entry.deleted" "charge.created" "charge.deleted" "credit.applied" "credit.taken_back" "period.closed" "test.ping"
created_at
required
string <date-time>
required
object (EventData)

Ids only. Fetch the object through the API to read its details.

Responses

Request samples

Content type
application/json
{
  • "id": "string",
  • "type": "invoice.sent",
  • "created_at": "2019-08-24T14:15:22Z",
  • "data": {
    }
}

Applied credit was undone Webhook

Request Body schema: application/json
required
id
required
string
type
required
string (EventType)
Enum: "invoice.sent" "invoice.issued" "invoice.voided" "invoice.paid" "invoice.reversed" "credit_note.issued" "payout.paid" "time_entry.approved" "time_entry.declined" "time_entry.deleted" "charge.created" "charge.deleted" "credit.applied" "credit.taken_back" "period.closed" "test.ping"
created_at
required
string <date-time>
required
object (EventData)

Ids only. Fetch the object through the API to read its details.

Responses

Request samples

Content type
application/json
{
  • "id": "string",
  • "type": "invoice.sent",
  • "created_at": "2019-08-24T14:15:22Z",
  • "data": {
    }
}

A month was closed Webhook

Request Body schema: application/json
required
id
required
string
type
required
string (EventType)
Enum: "invoice.sent" "invoice.issued" "invoice.voided" "invoice.paid" "invoice.reversed" "credit_note.issued" "payout.paid" "time_entry.approved" "time_entry.declined" "time_entry.deleted" "charge.created" "charge.deleted" "credit.applied" "credit.taken_back" "period.closed" "test.ping"
created_at
required
string <date-time>
required
object (EventData)

Ids only. Fetch the object through the API to read its details.

Responses

Request samples

Content type
application/json
{
  • "id": "string",
  • "type": "invoice.sent",
  • "created_at": "2019-08-24T14:15:22Z",
  • "data": {
    }
}

List events

Events in the order they were published, oldest first, so you can follow the feed with a cursor and never miss one. An event appears a few seconds after it is published. Events are kept for 30 days. Contractor payout events are returned only to keys with the pay:read permission.

Authorizations:
apiKey
query Parameters
limit
integer [ 1 .. 100 ]
Default: 50

How many rows to return, from 1 to 100.

cursor
string

The next_cursor from the previous page. Keep every other parameter the same.

type
string (EventType)
Enum: "invoice.sent" "invoice.issued" "invoice.voided" "invoice.paid" "invoice.reversed" "credit_note.issued" "payout.paid" "time_entry.approved" "time_entry.declined" "time_entry.deleted" "charge.created" "charge.deleted" "credit.applied" "credit.taken_back" "period.closed" "test.ping"
created_since
string <date-time>

Only events published at or after this time. Follow the feed with the cursor, or resume from the publish time of the last event you processed.

Responses

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "has_more": true,
  • "next_cursor": "string"
}

Get an event

Authorizations:
apiKey
path Parameters
id
required
string

Responses

Response samples

Content type
application/json
{
  • "id": "string",
  • "type": "invoice.sent",
  • "created_at": "2019-08-24T14:15:22Z",
  • "data": {
    }
}

Account

Details about the key making the request.

Describe this key

The workspace, permissions and rate limit of the key making the request. Any valid key can call it.

Authorizations:
apiKey

Responses

Response samples

Content type
application/json
{
  • "company": {
    },
  • "key": {
    },
  • "scopes": [
    ],
  • "rate_limit_per_minute": 0
}

Get this API description

This document as JSON. No key needed.

Responses

Response samples

Content type
application/json
{ }