---
title: "Onboard a customer"
method: POST
path: "/api/v1/businesses"
tags: ["businesses"]
---

# Onboard a customer

`POST /api/v1/businesses`

## Request

- Base URL: `https://app.blueticked.com`
- URL: `https://app.blueticked.com/api/v1/businesses`
- Auth: HTTP bearer

Create a business for one of your customers, and optionally mint a credential scoped to it in the same call.

The whole onboarding is now machine-driven: create the business, mint its key, send it a connect link, and wait for channel.connected. No step needs a human in our dashboard.

`create_key` accepts `true` to copy this key's own scopes, or an object to name the key and narrow its scopes. Minting it here rather than in a second call means a failure cannot strand a business you have no credential for.

`api_key.key` is returned ONCE and is never retrievable. Store it before you respond to your own caller.

The minted key is always pinned to that one business, never carries businesses:write, and can only hold scopes your key holds. Its environment is inherited from yours: a blu_test_ key mints only blu_test_ keys.

The key doing the creating must be organization-wide. A key already restricted to a business cannot create more, or a per-customer credential would become a master one.

Slugs are derived from the name and de-duplicated automatically, so two customers may share a name without colliding.

## Request body

- object
  - `name` string, required
  - `create_key` object
    - `name` string, required
    - `scopes` string[], required

## Response `201`

Success

- object
  - `id` string, uuid, required
  - `organization_id` string, uuid, required
  - `name` string, required
  - `slug` string, required
  - `timezone` string, nullable, required
  - `is_default` boolean, required
  - `api_key` object, nullable, required
    - `id` string, uuid, required
    - `prefix` string, required
    - `scopes` string[], required
    - `key` string, required
  - `request_id` string, required

## Other responses

- `400`: Validation failed
- `401`: Unauthorized: missing or invalid API key
- `402`: Insufficient wallet balance
- `403`: Forbidden: scope, plan limit, or suspension
- `404`: Not found
- `409`: Conflict (idempotency-key reuse or resource in use)
- `413`: Request body above the endpoint's size limit
- `422`: Understood but refused: the request is well-formed, the action is not permitted for this resource
- `429`: Rate limited
- `500`: Internal error
- `502`: An upstream provider refused or failed the request
- `503`: Channel or send queue unavailable

---

[API](https://skmtc.dev/blueticked/apis/blueticked-api.md) · [All operations](https://skmtc.dev/blueticked/apis/blueticked-api/llms.txt) · [OpenAPI document](https://skmtc.dev/blueticked/apis/blueticked-api/revisions/07132284f4ff?raw)
