Accept an invitation
const url = 'https://example.com/invitations/accept';const options = { method: 'POST', headers: {'Content-Type': 'application/json'}, body: '{"token":"example"}'};
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/invitations/accept \ --header 'Content-Type: application/json' \ --data '{ "token": "example" }'Requires a signed-in account whose email matches the invitation. Returns the new membership, which is what the caller then uses as X-Tenant-Id.
Request Bodyrequired
Section titled “Request Bodyrequired”object
Example generated
{ "token": "example"}Responses
Section titled “Responses”Joined
object
object
UUID v7
Owner: billing, deleting the tenant, full control of members. admin: all operational work and may manage drivers and admins. driver: their own round only.
Whether each piece of new work is live for this business yet. Set by Bottle, not the business, and removed once the work has launched.
object
object
Whether products can be tracked one cylinder at a time. On unless the business switches it off. Nothing changes on screen until a product is tracked.
Whether drivers and yard staff can record cylinders with the phone’s camera. Set by Bottle once the business’s cylinders have been tested.
Whether the business keeps service dates for the equipment its customers have. Off unless switched on.
Example
{ "tenant": { "id": "019205d1-6e7a-7c3b-9f6e-3a2b1c0d9e8f", "name": "Acme Gas", "slug": "acme-gas" }, "role": "owner", "plan": "shop", "planStatus": "trialing"}Not signed in
object
Example
{ "error": "not_found", "message": "Customer not found"}Signed in as a different email
object
Example
{ "error": "not_found", "message": "Customer not found"}Unknown, already used, revoked or expired
object
Example
{ "error": "not_found", "message": "Customer not found"}