Skip to main content

Suite

9 operations in the Tolvi API, version 1. Paths are relative to https://api.tolvi.co.uk. Every amount is integer pence.

List the products in the Tolvi suite

GET/api/v1/products

Scopes
work:read

The catalogue, whether or not your firm has each one.

Responses

200 OK, application/json

Body: array of Product.

A product in the Tolvi suite.

200 OK response for GET /api/v1/products
FieldTypeDescription
[].​keyrequiredstring

Stable id, e.g. working_papers or meetings.

pattern ^[a-z][a-z0-9_]{1,39}$; example "meetings"

[].​namerequiredstring

example "Meetings"

[].​descriptionrequiredstring
[].​pathrequiredstring

Where the product opens in the web app.

example "/meetings"

[].​iconrequiredstring

A lucide icon name.

example "lucideVideo"

[].​statusrequiredstring (ProductStatus)

beta: available, still changing. retired: no longer offered.

One of: available, beta, retired

[].​selfServeTrialrequiredboolean

A firm admin can start a trial without asking Tolvi.

[].​trialDaysrequiredinteger

Length of a self-serve trial.

at least 0

Errors: 400 Bad request, 401 Unauthorised, 403 Forbidden, 429 Too many requests, as problem details (application/problem+json).

List the products you can open in this firm

GET/api/v1/me/products

Scopes
work:read

What the app switcher shows. A product the firm has only for people given access is listed only if you have been.

Responses

200 OK, application/json

Body: array of MyProduct.

A product you can open in this firm.

200 OK response for GET /api/v1/me/products
FieldTypeDescription
[].​keyrequiredstring

Stable id, e.g. working_papers or meetings.

pattern ^[a-z][a-z0-9_]{1,39}$; example "meetings"

[].​namerequiredstring

example "Meetings"

[].​descriptionrequiredstring
[].​pathrequiredstring

Where the product opens in the web app.

example "/meetings"

[].​iconrequiredstring

A lucide icon name.

example "lucideVideo"

[].​statusrequiredstring (ProductStatus)

beta: available, still changing. retired: no longer offered.

One of: available, beta, retired

[].​selfServeTrialrequiredboolean

A firm admin can start a trial without asking Tolvi.

[].​trialDaysrequiredinteger

Length of a self-serve trial.

at least 0

[].​firmStatusrequiredstring (FirmProductStatus)

The firm’s hold on it. suspended: read-only until billing is sorted out.

One of: active, trial, suspended

[].​userequiredstring (ProductUse)

read_only while the product is suspended.

One of: full, read_only

[].​trialEndsAtrequiredstring (date-time)nullable

Errors: 400 Bad request, 401 Unauthorised, 403 Forbidden, 429 Too many requests, as problem details (application/problem+json).

List the products your firm has

GET/api/v1/firm/products

Scopes
work:read

With status, access mode, trial end and how many people can use each.

Responses

200 OK, application/json

Body: array of FirmProduct.

A product the firm has, and who can use it.

200 OK response for GET /api/v1/firm/products
FieldTypeDescription
[].​keyrequiredstring

pattern ^[a-z][a-z0-9_]{1,39}$; example "meetings"

[].​namerequiredstring
[].​pathrequiredstring
[].​iconrequiredstring
[].​productStatusrequiredstring (ProductStatus)

beta: available, still changing. retired: no longer offered.

One of: available, beta, retired

[].​statusrequiredstring (FirmProductStatus)

Null: the firm doesn’t have Meetings.

One of: active, trial, suspended

[].​accessModerequiredstring (ProductAccessMode)

everyone: every member of the firm. assigned: only people given access.

One of: everyone, assigned

[].​sourcerequiredstring (FirmProductSource)

included: part of every firm. trial, subscription, or manual (set by Tolvi).

One of: included, trial, subscription, manual

[].​startedAtrequiredstring (date-time)
[].​trialEndsAtrequiredstring (date-time)nullable
[].​peopleWithAccessrequiredinteger

at least 0

Errors: 400 Bad request, 401 Unauthorised, 403 Forbidden, 429 Too many requests, as problem details (application/problem+json).

Start a trial of a product

POST/api/v1/firm/products/{key}

Scopes
settings:admin and work:read
Role
Firm admin
Access
A signed-in Tolvi session only, never an API token.
Retries
Send an Idempotency-Key to make retries safe.

Only for products the catalogue marks self-serve. You are given access to it straight away.

Parameters

Parameters for POST /api/v1/firm/products/{key}
NameInTypeDescription
keyrequiredpathstring

pattern ^[a-z][a-z0-9_]{1,39}$

Idempotency-Keyheaderstring

A unique key (1-255 visible characters) to make retries safe. Replayed for 24 hours.

1 to 255 characters

Responses

201 Created, application/json

Body: object (FirmProduct).

A product the firm has, and who can use it.

201 Created response for POST /api/v1/firm/products/{key}
FieldTypeDescription
keyrequiredstring

pattern ^[a-z][a-z0-9_]{1,39}$; example "meetings"

namerequiredstring
pathrequiredstring
iconrequiredstring
productStatusrequiredstring (ProductStatus)

beta: available, still changing. retired: no longer offered.

One of: available, beta, retired

statusrequiredstring (FirmProductStatus)

Null: the firm doesn’t have Meetings.

One of: active, trial, suspended

accessModerequiredstring (ProductAccessMode)

everyone: every member of the firm. assigned: only people given access.

One of: everyone, assigned

sourcerequiredstring (FirmProductSource)

included: part of every firm. trial, subscription, or manual (set by Tolvi).

One of: included, trial, subscription, manual

startedAtrequiredstring (date-time)
trialEndsAtrequiredstring (date-time)nullable
peopleWithAccessrequiredinteger

at least 0

Errors: 400 Bad request, 401 Unauthorised, 403 Forbidden, 404 Not found, 409 Conflict, 422 Unprocessable content, 429 Too many requests, as problem details (application/problem+json).

Change who can use a product

PATCH/api/v1/firm/products/{key}

Scopes
settings:admin and work:read
Role
Firm admin
Access
A signed-in Tolvi session only, never an API token.

everyone: every member of the firm. assigned: only people given access (their grants are kept either way).

Parameters

Parameters for PATCH /api/v1/firm/products/{key}
NameInTypeDescription
keyrequiredpathstring

pattern ^[a-z][a-z0-9_]{1,39}$

Request body

Required. application/json: object (FirmProductPatch).

Request body for PATCH /api/v1/firm/products/{key}
FieldTypeDescription
accessModerequiredstring (ProductAccessMode)

everyone: every member of the firm. assigned: only people given access.

One of: everyone, assigned

Responses

200 OK, application/json

Body: object (FirmProduct).

A product the firm has, and who can use it.

The fields are as shown above.

Errors: 400 Bad request, 401 Unauthorised, 403 Forbidden, 404 Not found, 429 Too many requests, as problem details (application/problem+json).

Get the people × products view

GET/api/v1/product-access

Scopes
settings:admin
Role
Firm admin

The firm’s products, and for each person which they can use and which they have been given.

Responses

200 OK, application/json

Body: object (ProductAccessMatrix).

The firm’s products and, for each person, which they can use.

200 OK response for GET /api/v1/product-access
FieldTypeDescription
productsrequiredarray of FirmProduct
products[].​keyrequiredstring

pattern ^[a-z][a-z0-9_]{1,39}$; example "meetings"

products[].​namerequiredstring
products[].​pathrequiredstring
products[].​iconrequiredstring
products[].​productStatusrequiredstring (ProductStatus)

beta: available, still changing. retired: no longer offered.

One of: available, beta, retired

products[].​statusrequiredstring (FirmProductStatus)

Null: the firm doesn’t have Meetings.

One of: active, trial, suspended

products[].​accessModerequiredstring (ProductAccessMode)

everyone: every member of the firm. assigned: only people given access.

One of: everyone, assigned

products[].​sourcerequiredstring (FirmProductSource)

included: part of every firm. trial, subscription, or manual (set by Tolvi).

One of: included, trial, subscription, manual

products[].​startedAtrequiredstring (date-time)
products[].​trialEndsAtrequiredstring (date-time)nullable
products[].​peopleWithAccessrequiredinteger

at least 0

membersrequiredarray of ProductAccessMember
members[].​userIdrequiredstring (uuid)
members[].​namerequiredstring
members[].​emailrequiredstring (email)
members[].​initialsrequiredstring

example "GL"

members[].​rolerequiredstring (MembershipRole)

One of: owner, admin, staff

members[].​staffRolerequiredstring (StaffRole)nullable

One of: partner, manager, reviewer, preparer, admin

members[].​isAdminrequiredboolean
members[].​productsrequiredarray of string

Product keys they can open now.

members[].​assignedrequiredarray of string

Product keys they have been given, whatever the access mode.

Errors: 400 Bad request, 401 Unauthorised, 403 Forbidden, 429 Too many requests, as problem details (application/problem+json).

Give someone access to a product

PUT/api/v1/product-access/{key}/members/{userId}

Scopes
settings:admin and settings:admin
Role
Firm admin
Access
A signed-in Tolvi session only, never an API token.

Idempotent. Takes effect at once.

Parameters

Parameters for PUT /api/v1/product-access/{key}/members/{userId}
NameInTypeDescription
keyrequiredpathstring

pattern ^[a-z][a-z0-9_]{1,39}$

userIdrequiredpathstring (uuid)

Responses

204 No content

They have access.

Errors: 400 Bad request, 401 Unauthorised, 403 Forbidden, 404 Not found, 429 Too many requests, as problem details (application/problem+json).

Take away someone’s access to a product

DELETE/api/v1/product-access/{key}/members/{userId}

Scopes
settings:admin and settings:admin
Role
Firm admin
Access
A signed-in Tolvi session only, never an API token.

Idempotent. In everyone mode they keep using it until the mode is assigned.

Parameters

Parameters for DELETE /api/v1/product-access/{key}/members/{userId}
NameInTypeDescription
keyrequiredpathstring

pattern ^[a-z][a-z0-9_]{1,39}$

userIdrequiredpathstring (uuid)

Responses

204 No content

They no longer have it.

Errors: 400 Bad request, 401 Unauthorised, 403 Forbidden, 404 Not found, 429 Too many requests, as problem details (application/problem+json).