Account
The Account resource represents your shop’s identity, business profile, locale settings, opening hours, logo, and subscription plan. It is a singleton: every tenant has exactly one account object, so there are no list or create endpoints.
The account object
Section titled “The account object”{ "object": "account", "shop_name": "Riverside Repair", "timezone": "America/New_York", "currency_code": "USD", "country_code": "US", "logo_url": "https://app.benchkey.com/api/business/logo/abc123.png", "business_profile": { "name": "Riverside Repair", "address1": "123 Main St", "address2": null, "city": "Springfield", "state": "IL", "zip": "62701", "country": "US", "phone": "+12175550100", "email": "info@riversiderepair.com", "website": "https://riversiderepair.com", "tagline": "Fixed right the first time." }, "business_hours": { "mon": { "open": "09:00", "close": "17:00", "closed": false }, "tue": { "open": "09:00", "close": "17:00", "closed": false }, "sat": { "closed": true }, "sun": { "closed": true } }, "plan": { "name": "scale", "status": "active", "trial": false }}| Field | Type | Description |
|---|---|---|
shop_name | string|null | The shop’s display name |
timezone | string|null | IANA timezone (e.g. America/Chicago) |
currency_code | string | ISO 4217 currency (e.g. USD) |
country_code | string | ISO 3166-1 alpha-2 country |
logo_url | string|null | Public URL of the shop logo, or null if not set |
business_profile | object | Contact and address fields, see sub-fields below |
business_hours | object | Map of weekday keys (mon–sun) to open/close/closed |
plan | object|null | Subscription summary; name currently contains the plan code (for example scale for Business), plus status and trial |
plan.name uses starter for Standard, pro for Pro, and scale for Business. API access requires Business (scale). The summary is null if billing status cannot be read. plan.trial is true for a non-expired trial, including a synthetic trial; see Billing for prices, limits, and trial metadata.
business_profile fields
Section titled “business_profile fields”| Field | Type | Description |
|---|---|---|
name | string|null | Legal or trade name |
address1 | string|null | Street address |
address2 | string|null | Suite, unit, etc. |
city | string|null | City |
state | string|null | State / province |
zip | string|null | Postal code |
country | string|null | Country (ISO 3166-1 alpha-2) |
phone | string|null | Business phone |
email | string|null | Business contact email |
website | string|null | Website URL |
tagline | string|null | Short tagline |
Retrieve the account
Section titled “Retrieve the account”GET /api/v1/accountReturns the singleton account object.
Scope required: account.read
curl https://app.benchkey.com/api/v1/account \ -H "Authorization: Bearer bk_live_<tenantId>_<secret>"Node.js
Section titled “Node.js”const res = await fetch("https://app.benchkey.com/api/v1/account", { headers: { Authorization: "Bearer bk_live_<tenantId>_<secret>" },});const account = await res.json();console.log(account.shop_name);Response
Section titled “Response”{ "object": "account", "shop_name": "Riverside Repair", "timezone": "America/New_York", "currency_code": "USD", "country_code": "US", "logo_url": null, "business_profile": { "name": "Riverside Repair", "address1": null, "address2": null, "city": null, "state": null, "zip": null, "country": "US", "phone": "+12175550100", "email": null, "website": null, "tagline": null }, "business_hours": { "mon": { "open": "09:00", "close": "17:00", "closed": false } }, "plan": { "name": "scale", "status": "active", "trial": false }}Retrieve the logo
Section titled “Retrieve the logo”GET /api/v1/account/logoReturns the logo URL and a present flag. The raw image bytes are served at the url directly.
Scope required: account.read
curl https://app.benchkey.com/api/v1/account/logo \ -H "Authorization: Bearer bk_live_<tenantId>_<secret>"Node.js
Section titled “Node.js”const res = await fetch("https://app.benchkey.com/api/v1/account/logo", { headers: { Authorization: "Bearer bk_live_<tenantId>_<secret>" },});const logo = await res.json();if (logo.present) console.log("Logo URL:", logo.url);Response
Section titled “Response”{ "object": "account_logo", "present": true, "url": "https://app.benchkey.com/api/business/logo/abc123.png"}| Field | Type | Description |
|---|---|---|
present | boolean | true if a logo has been uploaded |
url | string|null | Public URL of the logo, or null if not present |
Update the business profile
Section titled “Update the business profile”PATCH /api/v1/accountUpdates one or more business-profile fields. Only the fields listed below are writable; unknown fields are rejected with 400 invalid_field. Returns the re-read account object.
Scope required: account.write
Writable fields
Section titled “Writable fields”| Field | Type | Notes |
|---|---|---|
name | string|null | Trade or legal name |
address1 | string|null | Street address |
address2 | string|null | Suite, unit, etc. |
city | string|null | City |
state | string|null | State / province |
zip | string|null | Postal code |
country | string|null | ISO 3166-1 alpha-2 |
phone | string|null | Business phone |
email | string|null | Business email |
website | string|null | Website URL |
tagline | string|null | Short tagline |
Fields may be supplied flat (top-level) or nested under a business_profile key, both shapes are accepted. When the nested form is used, all fields must live inside business_profile; top-level keys alongside it are rejected with 400 invalid_field.
# Flat shapecurl -X PATCH https://app.benchkey.com/api/v1/account \ -H "Authorization: Bearer bk_live_<tenantId>_<secret>" \ -H "Content-Type: application/json" \ -d '{"phone": "+12175550200", "website": "https://riversiderepair.com"}'
# Nested shapecurl -X PATCH https://app.benchkey.com/api/v1/account \ -H "Authorization: Bearer bk_live_<tenantId>_<secret>" \ -H "Content-Type: application/json" \ -d '{"business_profile": {"phone": "+12175550200"}}'Node.js
Section titled “Node.js”const res = await fetch("https://app.benchkey.com/api/v1/account", { method: "PATCH", headers: { Authorization: "Bearer bk_live_<tenantId>_<secret>", "Content-Type": "application/json", }, body: JSON.stringify({ phone: "+12175550200", tagline: "Fixed right the first time." }),});const account = await res.json();console.log(account.business_profile.phone); // "+12175550200"Response
Section titled “Response”Returns the full updated account object.
Error codes
Section titled “Error codes”| Code | HTTP | Meaning |
|---|---|---|
invalid_body | 400 | Request body is not a JSON object |
no_fields | 400 | Body contained no writable fields |
invalid_field | 400 | Field is not writable, value is not a string or null, or profile text/email/phone validation failed |
account_save_failed | 422 | The backend rejected the update |
unauthorized | 401 | Missing or invalid API key |
insufficient_scope | 403 | API key lacks account.read or account.write scope |