Worksheets

List worksheets

Returns worksheets in the authenticated user's company, newest first. Filter by status with ?status=, by customer with ?customer_id=, search customer names with ?q=, and bound by created_at with ?from= / ?to= / ?preset=. Paginate with cursor-based ?limit= + ?starting_after=.

The date window defaults to the last 12 months; set it with from/to/preset. The applied range is echoed in date_filter. Pass ?preset=all to list across all time.

Line items are not included in the list shape — fetch the detail endpoint when full line-item data is needed.

The cursor is opaque — clients MUST NOT parse it. Pass back the value verbatim.

get/v1/worksheets

Request

  • Base URL: https://api.officina.it
  • URL: https://api.officina.it/v1/worksheets
  • Auth: HTTP bearer

Query parameters

qstring

Substring match on the customer's full name.

status'draft' | 'waiting' | 'started' | 'completed' | 'delivered' | 'archived'

Filter to a single lifecycle state. Sending an unrecognized value returns 422 instead of silently coercing.

customer_idstring

Restrict results to a single customer's worksheets.

sort'date' | 'number' | 'customer' | 'vehicle' | 'total' | 'outstanding'

Sort key (default date = creation date). Named keys are mapped server-side to whitelisted columns.

direction'asc' | 'desc'

Sort direction (default desc).

fromstring date

Inclusive lower bound on created_at (YYYY-MM-DD).

tostring date

Inclusive upper bound on created_at (YYYY-MM-DD).

preset'rel30' | 'rel90' | 'rel365' | 'year' | 'Q1' | 'Q2' | 'Q3' | 'Q4' | 'month' | 'custom' | 'all'

Date filter preset. Relative presets (rel30/rel90/rel365) are resolved server-side from "now" and ignore from/to. Absolute presets (year, Q1-Q4, month, custom) require both from and to. all returns everything (no time bound). Unknown values are rejected with 422.

Omitting from/to/preset gives the default window, the last 12 months. This tier is stateless: a selection applies to the request that carries it and is never stored, so the same request always covers the same range. The effective range is echoed back in date_filter.

limitinteger

Page size. Default 20, max 100.

starting_afterstring

Opaque cursor from a prior response. Omit on the first page.

Response

Page of worksheets (without line items).

object'list' required

Polymorphic discriminator.

has_moreboolean required

True if more results exist beyond this page. Use this for the "load more" UI — data.length alone is unreliable because a full page may still be the last page.

next_starting_afterstring

Opaque cursor for the next page. Present (and non-empty) when has_more is true; omitted otherwise. Pass the value verbatim as ?starting_after= on the follow-up request. Clients MUST NOT parse it — today it encodes an offset, tomorrow it may encode a (created_at, id) tuple without a wire-visible change.

urlstring required

The request path that produced this list.

Example response

{
  "data": [
    {
      "id": "a5d21e64-8f37-4b90-ae12-3c7d6b048f95"
    }
  ]
}

Changes

No recorded changes to this operation across all 1 revision of this API.