# Get a brand's go-live checklist

> The brands.go_live_checklist operation: GET /api/v1/brands/{id}/go_live_checklist in the REST API and the brands_go_live_checklist tool in the MCP server.

Returns what the brand needs before it can go live, each requirement `met` or not with the reason:

- `plan_livemode`: the organization's plan includes live mode;
- `org_status`: the organization is active (not restricted, suspended, closing or closed);
- `legal_accepted`: the current Terms of Service and Data Processing Agreement are accepted;
- `entity_verified`: the legal entity's tax ID is verified;
- `invoice_settings`: the entity's invoice details are complete;
- `home_registration`: the entity's home registration is `registered`, with a number (live mode);
- `processor_live`: the brand has a live processor connection whose last connection test passed (going live
  tests it again);
- `brand_urls`: the brand has its terms and privacy URLs;
- `brand_status`: the brand is in test mode (`test_only`), not suspended.

Live API keys and live checkout sessions are refused until the brand is live. Reading the checklist calls
no processor.

## At a glance

- **REST:** `GET /api/v1/brands/{id}/go_live_checklist`
- **MCP tool:** `brands_go_live_checklist`
- **Operation ID:** `brands.go_live_checklist`
- **Scope:** Organization, or one of its legal entities or brands
- **Permission:** `brands:read`
- **Risk tier:** `read`
- **Dry run:** Not supported
- **Idempotency:** Not needed (read only)
- **Modes:** Test and live
- **Authentication:** API key with the `brands:read` scope
- **Since:** M12

## Request

### Path parameters

| Field | Type       | Description |
| ----- | ---------- | ----------- |
| `id`  | `brd_…` ID |             |

### Query parameters

This operation takes no query parameters.

## Response

`200 OK` with a JSON object:

| Field                 | Type                                                                                                 | Description                                                               |
| --------------------- | ---------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------- |
| `object`              | `"go_live_checklist"`                                                                                |                                                                           |
| `brandId`             | `brd_…` ID                                                                                           |                                                                           |
| `entityId`            | `ent_…` ID                                                                                           |                                                                           |
| `brandStatus`         | string                                                                                               |                                                                           |
| `ready`               | boolean                                                                                              | Every requirement is met: `brands.go_live` will move the brand to `live`. |
| `live`                | boolean                                                                                              | The brand is live already.                                                |
| `items`               | array of object                                                                                      |                                                                           |
| `items[].requirement` | one of 10 values, e.g. `plan_livemode`, `org_status`, `legal_accepted` (all in the OpenAPI document) |                                                                           |
| `items[].met`         | boolean                                                                                              |                                                                           |
| `items[].reason`      | string or null                                                                                       | Why it isn't met, in plain words.                                         |
| `processor`           | object or null                                                                                       | The brand's live processor connection, with its last connection test.     |
| `legalVersions`       | object                                                                                               |                                                                           |
| `legalVersions.terms` | string                                                                                               |                                                                           |
| `legalVersions.dpa`   | string                                                                                               |                                                                           |
| `legalAccepted`       | object                                                                                               | Whether the organization accepted the current version of each document.   |
| `legalAccepted.terms` | boolean                                                                                              |                                                                           |
| `legalAccepted.dpa`   | boolean                                                                                              |                                                                           |

## Examples

### Two items left

```http
GET /api/v1/brands/brd_01m4tx5nj8emwbyf7y9vcf47x4/go_live_checklist
Authorization: Bearer or_test_…
```

Response (`200`):

```json
{
  "object": "go_live_checklist",
  "brandId": "brd_01m4tx5nj8emwbyf7y9vcf47x4",
  "entityId": "ent_01m4tx5nj8emwbyf7y9vcf47x2",
  "brandStatus": "test_only",
  "ready": false,
  "live": false,
  "items": [
    {
      "requirement": "plan_livemode",
      "met": true,
      "reason": null
    },
    {
      "requirement": "org_status",
      "met": true,
      "reason": null
    },
    {
      "requirement": "legal_accepted",
      "met": false,
      "reason": "An owner or admin must accept the current version of the Data Processing Agreement."
    },
    {
      "requirement": "entity_verified",
      "met": true,
      "reason": null
    },
    {
      "requirement": "invoice_settings",
      "met": true,
      "reason": null
    },
    {
      "requirement": "home_registration",
      "met": true,
      "reason": null
    },
    {
      "requirement": "processor_live",
      "met": true,
      "reason": null
    },
    {
      "requirement": "brand_urls",
      "met": false,
      "reason": "The brand needs its privacy URL."
    },
    {
      "requirement": "brand_status",
      "met": true,
      "reason": null
    }
  ],
  "processor": {
    "connectionId": "pcon_01m4tx5nj8emwbyf7y9vcf47xd",
    "processor": "stripe",
    "status": "active",
    "lastTestOk": true,
    "lastTestAt": "2026-10-26T09:00:00.000Z"
  },
  "legalVersions": {
    "terms": "1.0",
    "dpa": "1.0"
  },
  "legalAccepted": {
    "terms": true,
    "dpa": false
  }
}
```

## Errors

| Code                                                                                     | HTTP status | When                         | What to do                                                                                           |
| ---------------------------------------------------------------------------------------- | ----------- | ---------------------------- | ---------------------------------------------------------------------------------------------------- |
| [`resource_not_found`](https://ownrecord.io/docs/reference/errors.md#resource_not_found) | 404         | No such brand in your scope. | Check the ID and that your credentials are scoped to the right organization, entity, brand and mode. |
| [`permission_denied`](https://ownrecord.io/docs/reference/errors.md#permission_denied)   | 403         | You can't read this brand.   | Ask an organization owner or admin for a role or scope that allows this action.                      |

It can also return these [common errors](https://ownrecord.io/docs/reference.md#common-errors): [`validation_failed`](https://ownrecord.io/docs/reference/errors.md#validation_failed), [`api_version_unsupported`](https://ownrecord.io/docs/reference/errors.md#api_version_unsupported), [`authentication_required`](https://ownrecord.io/docs/reference/errors.md#authentication_required), [`api_key_invalid`](https://ownrecord.io/docs/reference/errors.md#api_key_invalid), [`dry_run_not_supported`](https://ownrecord.io/docs/reference/errors.md#dry_run_not_supported), [`rate_limited`](https://ownrecord.io/docs/reference/errors.md#rate_limited), [`internal_error`](https://ownrecord.io/docs/reference/errors.md#internal_error).
