Add the same opening cylinders to several customers
POST
/customers/holdings/add
const url = 'https://example.com/customers/holdings/add';const options = { method: 'POST', headers: { cookie: '__Host-bottle.session_token=<__Host-bottle.session_token>', 'Content-Type': 'application/json' }, body: '{"customerIds":["019205d1-6e7a-7c3b-9f6e-3a2b1c0d9e8f"],"opening":{"items":[{"productId":"019205d1-6e7a-7c3b-9f6e-3a2b1c0d9e8f","quantity":1,"since":"2026-04-15"}]}}'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request POST \ --url https://example.com/customers/holdings/add \ --header 'Content-Type: application/json' \ --cookie __Host-bottle.session_token=<__Host-bottle.session_token> \ --data '{ "customerIds": [ "019205d1-6e7a-7c3b-9f6e-3a2b1c0d9e8f" ], "opening": { "items": [ { "productId": "019205d1-6e7a-7c3b-9f6e-3a2b1c0d9e8f", "quantity": 1, "since": "2026-04-15" } ] } }'Adds the same cylinders to the opening balance of every customer named, on top of what each holds now. All of them are written or none are. An archived or missing customer is left out and listed as skipped. Each optional date sets when rent and deposit-refund timing starts. When a date is omitted, Bottle uses the date each customer was added.
Authorizations
Section titled “Authorizations”Request Bodyrequired
Section titled “Request Bodyrequired”Media typeapplication/json
object
customerIds
required
Array<string>
opening
required
object
items
required
Array<object>
object
productId
required
UUID v7
string format: uuid
Example
019205d1-6e7a-7c3b-9f6e-3a2b1c0d9e8fquantity
required
integer
since
string format: date
Responses
Section titled “Responses”Who the cylinders were added to, and who was skipped
Media typeapplication/json
object
done
required
Array<object>
object
customerId
required
UUID v7
string format: uuid
name
required
string
skipped
required
Array<object>
object
customerId
required
UUID v7
string format: uuid
name
required
string | null
reason
required
string
Example
{ "done": [ { "customerId": "019205d1-6e7a-7c3b-9f6e-3a2b1c0d9e8f" } ], "skipped": [ { "customerId": "019205d1-6e7a-7c3b-9f6e-3a2b1c0d9e8f", "reason": "not_found" } ]}Not signed in
Media typeapplication/json
object
error
required
string
message
required
string
Example
{ "error": "not_found", "message": "Customer not found"}Not a member of that tenant
Media typeapplication/json
object
error
required
string
message
required
string
Example
{ "error": "not_found", "message": "Customer not found"}Not found
Media typeapplication/json
object
error
required
string
message
required
string
Example
{ "error": "not_found", "message": "Customer not found"}A product is a charge, not a cylinder, or a day is in the future
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
message
required
string
issues
required
Array<object>
object
path
required
string
message
required
string
Example
{ "error": "validation", "issues": [ { "path": "email", "message": "Invalid email" } ]}