Skip to content

Invoice the customer for a reported cylinder

POST
/customers/{id}/cylinder-reports/{reportId}/invoice
curl --request POST \
--url https://example.com/customers/019205d1-6e7a-7c3b-9f6e-3a2b1c0d9e8f/cylinder-reports/019205d1-6e7a-7c3b-9f6e-3a2b1c0d9e8f/invoice \
--header 'Content-Type: application/json' \
--cookie __Host-bottle.session_token=<__Host-bottle.session_token> \
--data '{ "unitPrice": 1, "priceIncludesVat": true, "vatRate": 1, "description": "example", "note": "example", "assetIds": [ "019205d1-6e7a-7c3b-9f6e-3a2b1c0d9e8f" ] }'

Raises an invoice now, numbered and sent the usual way, with one line: the amount typed (for each cylinder reported) and the description. The holding ends from now, as with a write-off, so rent stops. No deposit is refunded. 409 as for a write-off. The customer is emailed about the report; the invoice is sent as any invoice is.

id
required

UUID v7

string format: uuid

Example

019205d1-6e7a-7c3b-9f6e-3a2b1c0d9e8f

UUID v7

reportId
required

UUID v7

string format: uuid

Example

019205d1-6e7a-7c3b-9f6e-3a2b1c0d9e8f

UUID v7

Media typeapplication/json
object
unitPrice
required
integer
>= 1 <= 10000000
priceIncludesVat
required
boolean
vatRate
required

Basis points: 2000 is 20%. Ignored for a business not registered for VAT.

integer
<= 10000
description
required
string
>= 1 characters <= 200 characters
note

Shown to the customer on the shop and in the email, such as “Found at your gate”. Optional.

string
<= 500 characters
assetIds
Array<string>
<= 500 items

Invoiced

Media typeapplication/json
object
id
required

UUID v7

string format: uuid
customerId
required

UUID v7

string format: uuid
customerName
required
string
productId
required

UUID v7

string format: uuid
productName
required
string
gasType
required
object
name
required
string
colour
required
string | null
quantity
required
integer
> 0
problem
required

What the customer said happened: lost, stolen, damaged, or moved to another supplier.

string
Allowed values: lost stolen damaged moved_supplier
status
required

Pending: waiting for the business. written_off: the holding ended, with no charge. invoiced: the holding ended and the customer was invoiced. dismissed: closed with nothing changed. withdrawn: the customer took it back first.

string
Allowed values: pending written_off invoiced dismissed withdrawn
note
required
string | null
reportedAt
required
string format: date-time
reportedBy
required
string | null
withdrawnAt
required
string | null format: date-time
decidedAt
required
string | null format: date-time
decidedBy
required
string | null
businessNote
required
string | null
invoice
required
object
id
required

UUID v7

string format: uuid
number
required
string
pence
required
integer
description
required
string
heldNow
required
integer

Example

{
"id": "019205d1-6e7a-7c3b-9f6e-3a2b1c0d9e8f",
"customerId": "019205d1-6e7a-7c3b-9f6e-3a2b1c0d9e8f",
"productId": "019205d1-6e7a-7c3b-9f6e-3a2b1c0d9e8f",
"problem": "lost",
"status": "pending",
"invoice": {
"id": "019205d1-6e7a-7c3b-9f6e-3a2b1c0d9e8f"
}
}

Not signed in

Media typeapplication/json
object
error
required
string
message
required
string

Example

{
"error": "not_found",
"message": "Customer not found"
}

Not a member, or without the permission this needs

Media typeapplication/json
object
error
required
string
message
required
string

Example

{
"error": "not_found",
"message": "Customer not found"
}

No such customer or report

Media typeapplication/json
object
error
required
string
message
required
string

Example

{
"error": "not_found",
"message": "Customer not found"
}

Already acted on or withdrawn, or none held now

Media typeapplication/json
object
error
required
string
message
required
string

Example

{
"error": "not_found",
"message": "Customer not found"
}

Validation failed

Media typeapplication/json
object
error
required
string
Allowed values: validation
message
required
string
issues
required
Array<object>
object
path
required
string
message
required
string

Example

{
"error": "validation",
"issues": [
{
"path": "email",
"message": "Invalid email"
}
]
}