Skip to content

List recurring schedules

GET
/api/recurring-schedules
curl --request GET \
--url 'https://invoicing-api.eddish.app/api/recurring-schedules?includeInactive=false' \
--header 'Authorization: Bearer <token>'

Lists recurring invoice schedules, soonest first. Admins and Finance only.

clientId
string format: uuid

Only schedules for this client.

includeInactive
boolean

Include stopped schedules. Defaults to false.

OK

Media typeapplication/json

Shorthand for the overwhelmingly common ServiceResponse&lt;TData, ErrorResponse&gt;. C# cannot alias an open generic, so this is expressed as a subclass rather than a using alias.

object
success

True when the call succeeded and TData? ServiceResponse<TData, TError>.Data is populated.

boolean
data

Payload on success; default on failure.

Array<object> | null

A recurring invoice schedule.

object
id
required
string format: uuid
clientId
required
string format: uuid
clientName
required
string
intervalCount
required

How many interval units pass between invoices: 2 with Week means every two weeks.

integer | string format: int32
/^-?(?:0|[1-9]\d*)$/
intervalUnit
required

Day, Week, Month or Year.

Allowed values: Day Week Month Year
firstIssueDate
required

The date the first invoice is issued, as yyyy-MM-dd.

string format: date
nextIssueDate
required

The date the next invoice is issued, as yyyy-MM-dd.

string format: date
endMode
required

When the schedule stops issuing: Never (until someone stops it), OnDate (no invoice is issued after EndDate) or AfterOccurrences (once MaxOccurrences invoices have been issued).

Allowed values: Never OnDate AfterOccurrences
endDate
required

With OnDate, the last date an invoice can be issued, as yyyy-MM-dd.

null | string format: date
maxOccurrences
required

With AfterOccurrences, how many invoices to issue in all.

null | integer | string format: int32
/^-?(?:0|[1-9]\d*)$/
occurrencesGenerated
required

How many invoices have been issued so far.

integer | string format: int32
/^-?(?:0|[1-9]\d*)$/
inclusions
required

What the invoices are built from: Manual, Time, Expenses or TimeAndExpenses.

Allowed values: Manual Time Expenses TimeAndExpenses
projectIds
required

The projects billed.

Array<string>
groupBy
required

How lines are grouped: Project, Task, Person or Detailed.

Allowed values: Project Task Person Detailed
includeProject
required
boolean
includeTask
required
boolean
includePeople
required
boolean
includeDate
required
boolean
includeNotes
required
boolean
purchaseOrder
required
null | string
subjectTemplate
required

The subject as entered, with its date placeholders unfilled.

null | string
notesTemplate
required

The notes as entered, with their date placeholders unfilled.

null | string
paymentTerm
required

UponReceipt, Net15, Net30, Net45, Net60 or Custom.

Allowed values: UponReceipt Net15 Net30 Net45 Net60 Custom
customPaymentTermDays
required

The length of a Custom payment term, counted in the custom unit.

null | integer | string format: int32
/^-?(?:0|[1-9]\d*)$/
customPaymentTermUnit
required
One of:
null
tax
required

The tax rate, as a percentage.

null | number | string format: double
/^-?(?:0|[1-9]\d*)(?:\.\d+)?$/
discount
required

The discount, as a percentage.

null | number | string format: double
/^-?(?:0|[1-9]\d*)(?:\.\d+)?$/
showHoursSummary
required
boolean
isActive
required

False once the schedule has been stopped.

boolean
lastGeneratedAtUtc
required

When the schedule last issued an invoice.

null | string format: date-time
cadence
required

The repeat pattern in words, such as “Every 2 weeks”.

string
templateInvoiceId
required

The template invoice each new invoice is copied from. Edit the template as an ordinary invoice.

null | string format: uuid
templateInvoiceNumber
required

The template invoice’s number.

null | string
templateHasLineItems
required

Whether the template has any line items yet. A schedule whose template is empty issues nothing.

boolean
error
One of:
null

Example

{
"data": [
{
"intervalUnit": "Day",
"endMode": "Never",
"inclusions": "Manual",
"groupBy": "Project",
"paymentTerm": "UponReceipt",
"customPaymentTermUnit": "Day"
}
]
}

Not signed in, or the credential isn’t recognised, has expired or was revoked: auth.missing_credential, auth.invalid_credential, auth.expired_credential, auth.revoked_credential.

Media typeapplication/json

Shorthand for the overwhelmingly common ServiceResponse&lt;TData, ErrorResponse&gt;. C# cannot alias an open generic, so this is expressed as a subclass rather than a using alias.

object
success

True when the call succeeded and TData? ServiceResponse<TData, TError>.Data is populated.

boolean
data

Payload on success; default on failure.

error

The Framework’s default error shape, used as the TError of ServiceResponse<TData, TError> unless an App genuinely needs its own.

object
code

Stable, machine-readable error identifier (for example account.not_found). Clients branch on this, never on string ErrorResponse.Message.

string
message

Human-readable description of what went wrong. Safe to surface to a User.

string
fieldErrors

Optional per-field validation failures, keyed by field name. Null (and omitted from JSON) for errors that are not validation failures.

null | object
details

Optional machine-readable facts about the failure that a client renders rather than parses out of string ErrorResponse.Message — e.g. plan.limit_reached’s limit, count and planName. Null (and omitted from JSON) for errors that carry none.

null | object

Example generated

{
"success": true,
"data": "example",
"error": {
"code": "example",
"message": "example",
"fieldErrors": "example",
"details": "example"
}
}

Not allowed. error.code says why: auth.role_not_permitted (your role doesn’t allow it), auth.read_only_token (the token can only read), app.no_seat (no seat in this App), auth.api_access_not_in_plan (the plan doesn’t include API access), auth.not_a_member (no longer a member of the Account), auth.insufficient_scope (an Account API key without the scope).

Media typeapplication/json

Shorthand for the overwhelmingly common ServiceResponse&lt;TData, ErrorResponse&gt;. C# cannot alias an open generic, so this is expressed as a subclass rather than a using alias.

object
success

True when the call succeeded and TData? ServiceResponse<TData, TError>.Data is populated.

boolean
data

Payload on success; default on failure.

error

The Framework’s default error shape, used as the TError of ServiceResponse<TData, TError> unless an App genuinely needs its own.

object
code

Stable, machine-readable error identifier (for example account.not_found). Clients branch on this, never on string ErrorResponse.Message.

string
message

Human-readable description of what went wrong. Safe to surface to a User.

string
fieldErrors

Optional per-field validation failures, keyed by field name. Null (and omitted from JSON) for errors that are not validation failures.

null | object
details

Optional machine-readable facts about the failure that a client renders rather than parses out of string ErrorResponse.Message — e.g. plan.limit_reached’s limit, count and planName. Null (and omitted from JSON) for errors that carry none.

null | object

Example generated

{
"success": true,
"data": "example",
"error": {
"code": "example",
"message": "example",
"fieldErrors": "example",
"details": "example"
}
}

Too many requests: rate_limit.exceeded. Wait the number of seconds in the Retry-After header.

Media typeapplication/json

Shorthand for the overwhelmingly common ServiceResponse&lt;TData, ErrorResponse&gt;. C# cannot alias an open generic, so this is expressed as a subclass rather than a using alias.

object
success

True when the call succeeded and TData? ServiceResponse<TData, TError>.Data is populated.

boolean
data

Payload on success; default on failure.

error

The Framework’s default error shape, used as the TError of ServiceResponse<TData, TError> unless an App genuinely needs its own.

object
code

Stable, machine-readable error identifier (for example account.not_found). Clients branch on this, never on string ErrorResponse.Message.

string
message

Human-readable description of what went wrong. Safe to surface to a User.

string
fieldErrors

Optional per-field validation failures, keyed by field name. Null (and omitted from JSON) for errors that are not validation failures.

null | object
details

Optional machine-readable facts about the failure that a client renders rather than parses out of string ErrorResponse.Message — e.g. plan.limit_reached’s limit, count and planName. Null (and omitted from JSON) for errors that carry none.

null | object

Example generated

{
"success": true,
"data": "example",
"error": {
"code": "example",
"message": "example",
"fieldErrors": "example",
"details": "example"
}
}
Retry-After
integer

Seconds to wait before trying again.