Skip to main content

Practice VAT

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

List clients’ VAT returns

GET/api/v1/practice-vat/returns

Scopes
self_assessment:read

Part of the self_assessment product: the firm must have it and you must have access to it.

Parameters

Parameters for GET /api/v1/practice-vat/returns
NameInTypeDescription
clientIdquerystring (uuid)

Responses

200 OK, application/json

Body: object (PracticeVatReturnList).

200 OK response for GET /api/v1/practice-vat/returns
FieldTypeDescription
itemsrequiredarray of PracticeVatReturn
items[].​idrequiredstring (uuid)
items[].​clientIdrequiredstring (uuid)
items[].​clientNamestring
items[].​vrnrequiredstring
items[].​periodKeyrequiredstring
items[].​periodStartrequiredstring (date)

example "2026-03-31"

items[].​periodEndrequiredstring (date)

example "2026-03-31"

items[].​boxesrequiredobject

box1 to box9, integer pence.

items[].​sourcerequiredstring (PracticeVatSource)

One of: spreadsheet, typed, working_papers, books

items[].​sourceNoterequiredstringnullable
items[].​statusrequiredstring (PracticeVatStatus)

One of: draft, approved, filing, filed

items[].​submissionStatusrequiredstringnullable
items[].​receiptrequiredobjectnullable
items[].​lastErrorrequiredstringnullable
items[].​returnHashrequiredstring
items[].​clientApprovedOnrequiredstring (date)nullable

example "2026-03-31"

items[].​clientApprovalCurrentrequiredboolean
items[].​canSubmitrequiredboolean
items[].​cannotSubmitReasonrequiredstringnullable
items[].​filingEnabledrequiredboolean
items[].​declarationrequiredobject

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

Prepare a client’s VAT return

POST/api/v1/practice-vat/returns

Scopes
self_assessment:write
Role
Preparer or above

From a bridging sheet, or nine boxes typed or carried from Working Papers or Books and labelled so.

Needs the Preparer role or above. Part of the self_assessment product: the firm must have it and you must have access to it.

Request body

Required. application/json: object (CreatePracticeVatReturn).

Request body for POST /api/v1/practice-vat/returns
FieldTypeDescription
clientIdrequiredstring (uuid)
vrnstring

Left out, the VAT number on the client’s record. The return keeps the number it was prepared under.

periodKeyrequiredstring

HMRC’s period key, from the client’s VAT account.

periodStartrequiredstring (date)

example "2026-03-31"

periodEndrequiredstring (date)

example "2026-03-31"

sourcerequiredstring (PracticeVatSource)

One of: spreadsheet, typed, working_papers, books

sourceNotestring
rowsarray of array of string
boxesobject

Responses

200 OK, application/json

Body: object (PracticeVatReturn).

200 OK response for POST /api/v1/practice-vat/returns
FieldTypeDescription
idrequiredstring (uuid)
clientIdrequiredstring (uuid)
clientNamestring
vrnrequiredstring
periodKeyrequiredstring
periodStartrequiredstring (date)

example "2026-03-31"

periodEndrequiredstring (date)

example "2026-03-31"

boxesrequiredobject

box1 to box9, integer pence.

sourcerequiredstring (PracticeVatSource)

One of: spreadsheet, typed, working_papers, books

sourceNoterequiredstringnullable
statusrequiredstring (PracticeVatStatus)

One of: draft, approved, filing, filed

submissionStatusrequiredstringnullable
receiptrequiredobjectnullable
lastErrorrequiredstringnullable
returnHashrequiredstring
clientApprovedOnrequiredstring (date)nullable

example "2026-03-31"

clientApprovalCurrentrequiredboolean
canSubmitrequiredboolean
cannotSubmitReasonrequiredstringnullable
filingEnabledrequiredboolean
declarationrequiredobject

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

Read a bridging sheet

POST/api/v1/practice-vat/returns/read-sheet

Scopes
self_assessment:write
Role
Preparer or above

Says what the rows give, and what’s wrong. Keeps nothing.

Needs the Preparer role or above. Part of the self_assessment product: the firm must have it and you must have access to it.

Request body

Required. application/json: object (SpreadsheetRows).

Request body for POST /api/v1/practice-vat/returns/read-sheet
FieldTypeDescription
rowsrequiredarray of array of string

Label, then amount in pounds.

Responses

200 OK, application/json

Body: object (PracticeVatSheetReading).

200 OK response for POST /api/v1/practice-vat/returns/read-sheet
FieldTypeDescription
boxesrequiredobjectnullable
problemsrequiredarray of string
ignoredrequiredarray of string

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

A client’s VAT return

GET/api/v1/practice-vat/returns/{id}

Scopes
self_assessment:read

Part of the self_assessment product: the firm must have it and you must have access to it.

Parameters

Parameters for GET /api/v1/practice-vat/returns/{id}
NameInTypeDescription
idrequiredpathstring (uuid)

Responses

200 OK, application/json

Body: object (PracticeVatReturn).

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).

Approve

POST/api/v1/practice-vat/returns/{id}/approve

Scopes
self_assessment:write
Role
Manager or above
Access
A signed-in Tolvi session only, never an API token.

By the firm’s approver setting, against the hash reviewed. Never available to API keys or connected assistants.

Needs the Manager role or above. Part of the self_assessment product: the firm must have it and you must have access to it.

Parameters

Parameters for POST /api/v1/practice-vat/returns/{id}/approve
NameInTypeDescription
idrequiredpathstring (uuid)

Request body

Required. application/json: object (PracticeVatHash).

Request body for POST /api/v1/practice-vat/returns/{id}/approve
FieldTypeDescription
returnHashrequiredstring

Responses

200 OK, application/json

Body: object (PracticeVatReturn).

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).

Record the client’s approval

POST/api/v1/practice-vat/returns/{id}/client-approval

Scopes
self_assessment:write
Role
Preparer or above
Access
A signed-in Tolvi session only, never an API token.

Never available to API keys or connected assistants.

Needs the Preparer role or above. Part of the self_assessment product: the firm must have it and you must have access to it.

Parameters

Parameters for POST /api/v1/practice-vat/returns/{id}/client-approval
NameInTypeDescription
idrequiredpathstring (uuid)

Request body

Required. application/json: object (PracticeVatClientApproval).

Request body for POST /api/v1/practice-vat/returns/{id}/client-approval
FieldTypeDescription
approvedOnrequiredstring (date)

example "2026-03-31"

returnHashrequiredstring

Responses

200 OK, application/json

Body: object (PracticeVatReturn).

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).

File with HMRC

POST/api/v1/practice-vat/returns/{id}/submit

Scopes
self_assessment:write
Role
Manager or above
Access
A signed-in Tolvi session only, never an API token.
Retries
Send an Idempotency-Key to make retries safe.

A manager or partner with a second factor, once approved and the client has approved. Answers 503 while off. Off by default. It has only run against a fake: HMRC has not reviewed or accepted any of it. Never available to API keys or connected assistants.

Needs the Manager role or above. Part of the self_assessment product: the firm must have it and you must have access to it.

Parameters

Parameters for POST /api/v1/practice-vat/returns/{id}/submit
NameInTypeDescription
idrequiredpathstring (uuid)
Idempotency-Keyheaderstring

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

1 to 255 characters

Request body

Required. application/json: object (SubmitPracticeVat).

Request body for POST /api/v1/practice-vat/returns/{id}/submit
FieldTypeDescription
returnHashrequiredstring
declarationrequiredobject
clientFactsrequiredobject

The browser’s facts, for HMRC’s fraud prevention headers.

Responses

200 OK, application/json

Body: object (PracticeVatReturn).

The fields are as shown above.

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).