Get the signed-in user
const url = 'https://example.com/me';const options = {method: 'GET'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request GET \ --url https://example.com/meEach membership names a tenant and the role held there. Pass one of these tenant ids as X-Tenant-Id on tenant-scoped requests.
Responses
Section titled “Responses”The caller
object
object
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.
object
object
object
Example
{ "user": { "id": "kZ8n2xQpR1vLmT4wY7bJc", "email": "joe.bloggs@example.com", "firstName": "Joe", "lastName": "Bloggs", "name": "Joe Bloggs", "twoFactorMethod": "totp" }, "memberships": [ { "tenant": { "id": "019205d1-6e7a-7c3b-9f6e-3a2b1c0d9e8f", "name": "Acme Gas", "slug": "acme-gas" }, "role": "owner", "plan": "shop", "planStatus": "trialing" } ], "staff": { "role": "support" }, "support": { "level": "view" }, "policiesOutstanding": [ { "document": "terms", "version": "2026-09-28", "acceptedVersion": "2026-09-28" } ]}Not signed in
object
Example
{ "error": "not_found", "message": "Customer not found"}