Skip to main content
Beta - Account data is currently in beta. The payload structure may still evolve before general availability. Share your feedback at support@bookingshake.com.

Overview

PATCH /accounts/{id} updates a single account (company) by its ID. It is a partial update: only the fields you include in the body are modified, everything else is left untouched. The request body uses the same conventions as the response - the English (snake_case) field names returned by GET /accounts/{id}. So you can read an account, change a few fields, and send them straight back. Pass null on any field to clear it.
Updating an account automatically emits the account.updated webhook when at least one exposed field changes. Country fields (country, billing_country) are stored verbatim as provided - no ISO normalization.

Authentication

All requests require a Bearer token (your BookingShake API key):
Authorization: Bearer YOUR_API_KEY

Path Parameters

id
string
required
The account ID - the id field carried by the account.* webhooks.

Body Parameters

All body fields are optional, but at least one must be provided. String fields are trimmed and limited to 255 characters. Pass null on any field to clear it. id and created_at are read-only and ignored.
name
string
Company display name.
Registered legal name.
company_type
string
Legal form (e.g., SAS, SARL).
company_registration_id
string
Company registration number (SIREN in France).
siret
string
SIRET number (France).
vat_number
string
VAT number.
rcs_number
string
Trade register number (RCS).
sector
string
Business sector.
address_line_1
string
Main address.
address_line_2
string
Main address, line 2.
postal_code
string
Main address postal code.
city
string
Main address city.
country
string
Main address country, stored verbatim.
billing_address_line_1
string
Billing address.
billing_address_line_2
string
Billing address, line 2.
billing_postal_code
string
Billing address postal code.
billing_city
string
Billing address city.
billing_country
string
Billing address country, stored verbatim.
accounting_account
string
Accounting account code.
custom_<uuid>
string | array
Custom fields configured for your venue. A single-value field takes a string; a multi-select field takes an array of strings. An unknown custom field key, or a value whose shape does not match the field type, is rejected with 400.

Request

curl -X PATCH https://api.bookingshake.io/api/accounts/account-123 \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "name": "Acme Corp", "vat_number": "FR98765432101" }'
const res = await fetch("https://api.bookingshake.io/api/accounts/account-123", {
  method: "PATCH",
  headers: {
    Authorization: `Bearer ${process.env.BOOKINGSHAKE_API_KEY}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({ name: "Acme Corp", vat_number: "FR98765432101" }),
});
const { data: account } = await res.json();
import os, requests

res = requests.patch(
    "https://api.bookingshake.io/api/accounts/account-123",
    headers={"Authorization": f"Bearer {os.environ['BOOKINGSHAKE_API_KEY']}"},
    json={"name": "Acme Corp", "vat_number": "FR98765432101"},
)
account = res.json()["data"]
<?php
$ch = curl_init("https://api.bookingshake.io/api/accounts/account-123");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PATCH");
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode([
    "name" => "Acme Corp",
    "vat_number" => "FR98765432101",
]));
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    "Authorization: Bearer " . getenv("BOOKINGSHAKE_API_KEY"),
    "Content-Type: application/json",
]);
$account = json_decode(curl_exec($ch), true)["data"];
curl_close($ch);

Response

The full account is returned in its post-update state, wrapped in the standard { message, data } envelope - identical in shape to GET /accounts/{id}.
{
  "message": "success",
  "data": {
    "id": "account-123",
    "name": "Acme Corp",
    "legal_name": "ACME CORPORATION SAS",
    "company_type": "SAS",
    "company_registration_id": "987654321",
    "siret": "98765432100012",
    "vat_number": "FR98765432101",
    "rcs_number": "RCS Paris 987 654 321",
    "sector": "Technology",
    "address_line_1": "123 rue Example",
    "address_line_2": "Bâtiment A",
    "postal_code": "75001",
    "city": "Paris",
    "country": "France",
    "billing_address_line_1": "123 rue Example",
    "billing_address_line_2": null,
    "billing_postal_code": "75001",
    "billing_city": "Paris",
    "billing_country": "France",
    "accounting_account": "411000",
    "created_at": 1731495000000,
    "custom_u1v2w3x4y5": "50-100",
    "custom_z6a7b8c9d0": null
  }
}
See the Get an Account reference for the full field descriptions.

Errors

StatusMeaning
400Missing/invalid token, missing account id, empty/invalid body, no updatable fields, a non-string value on a string field, a value over 255 characters, or an unknown custom field key
404Account not found - it does not exist, or belongs to another venue or venues group
429Rate limit exceeded (30 requests/minute)
500Internal server error
A 404 is returned uniformly whenever the account is outside your scope, so the existence of another venue’s account is never disclosed.

Next Steps

Get an Account

Retrieve an account before updating it

Account Events

Receive account changes in real time via the account.* webhooks