# Take a brand live

> The brands.go_live operation: POST /api/v1/brands/{id}/go_live in the REST API and the brands_go_live tool in the MCP server.

Moves the brand from test mode (`test_only`) to `live`, so it can take real payments, once every item of its
go-live checklist holds (`brands.go_live_checklist`). The brand's live processor connection is tested at the
processor first, and the test result is recorded on the connection. If anything is missing the call fails with
`go_live_requirements_unmet` and `details.unmet` lists what. A brand that is live already is returned as is.

After this, live API keys can be created for the brand and its live checkout sessions are accepted.

Call it in live mode, with a sign-in in the last 15 minutes in the console. Security tier for agents (it needs
approval). Needs `brands:admin` (organization owners and admins).

## At a glance

- **REST:** `POST /api/v1/brands/{id}/go_live`
- **MCP tool:** `brands_go_live`
- **Operation ID:** `brands.go_live`
- **Scope:** Organization, or one of its legal entities or brands
- **Permission:** `brands:admin`
- **Risk tier:** `security`
- **Dry run:** Supported (send `Ownrecord-Dry-Run: true`)
- **Idempotency:** `Idempotency-Key` required
- **Modes:** Live mode only
- **Authentication:** API key with the `brands:admin` scope
- **Fresh sign-in:** In the console, a sign-in within the last 15 minutes
- **Since:** M12

## Request

### Path parameters

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

### Body

This operation takes no body.

## Response

`200 OK` with a JSON object:

| Field                                                 | Type                                                                                                 | Description                                                                                                         |
| ----------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------- |
| `brand`                                               | object                                                                                               |                                                                                                                     |
| `brand.id`                                            | `brd_…` ID                                                                                           |                                                                                                                     |
| `brand.object`                                        | `"brand"`                                                                                            |                                                                                                                     |
| `brand.orgId`                                         | `org_…` ID                                                                                           |                                                                                                                     |
| `brand.entityId`                                      | `ent_…` ID                                                                                           |                                                                                                                     |
| `brand.slug`                                          | string                                                                                               |                                                                                                                     |
| `brand.name`                                          | string                                                                                               |                                                                                                                     |
| `brand.status`                                        | one of `draft`, `test_only`, `live`, `suspended`                                                     |                                                                                                                     |
| `brand.isPlatformBrand`                               | boolean                                                                                              |                                                                                                                     |
| `brand.branding`                                      | object                                                                                               |                                                                                                                     |
| `brand.branding.logoUrl`                              | string or null                                                                                       |                                                                                                                     |
| `brand.branding.iconUrl`                              | string or null                                                                                       |                                                                                                                     |
| `brand.branding.primaryColor`                         | string or null                                                                                       |                                                                                                                     |
| `brand.branding.accentColor`                          | string or null                                                                                       |                                                                                                                     |
| `brand.branding.supportEmail`                         | string or null                                                                                       |                                                                                                                     |
| `brand.branding.supportUrl`                           | string or null                                                                                       |                                                                                                                     |
| `brand.branding.termsUrl`                             | string or null                                                                                       |                                                                                                                     |
| `brand.branding.privacyUrl`                           | string or null                                                                                       |                                                                                                                     |
| `brand.statementDescriptor`                           | string                                                                                               |                                                                                                                     |
| `brand.statementDescriptorSuffix`                     | string or null                                                                                       |                                                                                                                     |
| `brand.invoiceSeries`                                 | object                                                                                               |                                                                                                                     |
| `brand.invoiceSeries.invoice`                         | string                                                                                               |                                                                                                                     |
| `brand.invoiceSeries.creditNote`                      | string                                                                                               |                                                                                                                     |
| `brand.billingSettings`                               | object                                                                                               |                                                                                                                     |
| `brand.billingSettings.dunning`                       | object                                                                                               |                                                                                                                     |
| `brand.billingSettings.dunning.retryOffsetsDays`      | array of integer                                                                                     |                                                                                                                     |
| `brand.billingSettings.dunning.finalAction`           | one of `unpaid`, `canceled`                                                                          |                                                                                                                     |
| `brand.billingSettings.entitlementGraceDays`          | integer                                                                                              |                                                                                                                     |
| `brand.billingSettings.sendInvoice`                   | object                                                                                               |                                                                                                                     |
| `brand.billingSettings.sendInvoice.graceDays`         | integer                                                                                              |                                                                                                                     |
| `brand.billingSettings.cardExpiryReminders`           | boolean                                                                                              |                                                                                                                     |
| `brand.billingSettings.pausedEntitlements`            | boolean                                                                                              |                                                                                                                     |
| `brand.billingSettings.paymentBehavior`               | one of `allow_incomplete`, `pending_if_incomplete`                                                   |                                                                                                                     |
| `brand.policies`                                      | object                                                                                               |                                                                                                                     |
| `brand.policies.breakageRecognition`                  | one of `at_expiry`, `manual`                                                                         | `at_expiry` (the default) or `manual` (held as expired credits until recognised).                                   |
| `brand.policies.supportRefundLimits`                  | array of object                                                                                      | The support role's refund limit per currency (M8); a currency not listed has the default of 100 of it.              |
| `brand.policies.supportRefundLimits[].amount`         | string                                                                                               | Integer micros as a string.                                                                                         |
| `brand.policies.supportRefundLimits[].currency`       | string                                                                                               |                                                                                                                     |
| `brand.policies.disputeWalletFreeze`                  | boolean                                                                                              | Freeze the customer's wallets when a dispute opens (default true; §19.2, M8).                                       |
| `brand.policies.taxIdUnavailable`                     | one of `charge_as_b2c`, `block`                                                                      | What a sale does when a tax ID couldn't be checked (§9.1 step 1; M13): `charge_as_b2c` (the default) or `block`.    |
| `brand.portalSettings`                                | object                                                                                               |                                                                                                                     |
| `brand.portalSettings.allowPlanChanges`               | boolean                                                                                              | Customers may switch plans along `planChangeMatrix` (no row: no switch).                                            |
| `brand.portalSettings.planChangeMatrix`               | array of object                                                                                      | One row per price: a subscription item on `fromPriceId` may switch to any of `toPriceIds` (same mode and currency). |
| `brand.portalSettings.planChangeMatrix[].fromPriceId` | `price_…` ID                                                                                         |                                                                                                                     |
| `brand.portalSettings.planChangeMatrix[].toPriceIds`  | array of `price_…` ID                                                                                |                                                                                                                     |
| `brand.portalSettings.allowCancel`                    | boolean                                                                                              | Customers may cancel their subscriptions.                                                                           |
| `brand.portalSettings.cancelBehavior`                 | one of `period_end`, `immediate`                                                                     | A portal cancellation ends the subscription at the period end (default) or at once.                                 |
| `brand.portalSettings.collectCancelReason`            | boolean                                                                                              | The portal asks why the customer cancels.                                                                           |
| `brand.portalSettings.allowQuantityChanges`           | boolean                                                                                              | Customers may change the quantity (seats) of licensed items.                                                        |
| `brand.checkoutSettings`                              | object                                                                                               |                                                                                                                     |
| `brand.checkoutSettings.locales`                      | array of string                                                                                      | The brand's languages, its default first. A default, not a restriction: a customer's own language comes first.      |
| `brand.checkoutSettings.collectPhone`                 | boolean                                                                                              |                                                                                                                     |
| `brand.checkoutSettings.requireBusinessDetails`       | one of `auto`, `always`, `never`                                                                     |                                                                                                                     |
| `brand.createdAt`                                     | date-time                                                                                            |                                                                                                                     |
| `brand.updatedAt`                                     | date-time                                                                                            |                                                                                                                     |
| `checklist`                                           | object                                                                                               |                                                                                                                     |
| `checklist.object`                                    | `"go_live_checklist"`                                                                                |                                                                                                                     |
| `checklist.brandId`                                   | `brd_…` ID                                                                                           |                                                                                                                     |
| `checklist.entityId`                                  | `ent_…` ID                                                                                           |                                                                                                                     |
| `checklist.brandStatus`                               | string                                                                                               |                                                                                                                     |
| `checklist.ready`                                     | boolean                                                                                              | Every requirement is met: `brands.go_live` will move the brand to `live`.                                           |
| `checklist.live`                                      | boolean                                                                                              | The brand is live already.                                                                                          |
| `checklist.items`                                     | array of object                                                                                      |                                                                                                                     |
| `checklist.items[].requirement`                       | one of 10 values, e.g. `plan_livemode`, `org_status`, `legal_accepted` (all in the OpenAPI document) |                                                                                                                     |
| `checklist.items[].met`                               | boolean                                                                                              |                                                                                                                     |
| `checklist.items[].reason`                            | string or null                                                                                       | Why it isn't met, in plain words.                                                                                   |
| `checklist.processor`                                 | object or null                                                                                       | The brand's live processor connection, with its last connection test.                                               |
| `checklist.legalVersions`                             | object                                                                                               |                                                                                                                     |
| `checklist.legalVersions.terms`                       | string                                                                                               |                                                                                                                     |
| `checklist.legalVersions.dpa`                         | string                                                                                               |                                                                                                                     |
| `checklist.legalAccepted`                             | object                                                                                               | Whether the organization accepted the current version of each document.                                             |
| `checklist.legalAccepted.terms`                       | boolean                                                                                              |                                                                                                                     |
| `checklist.legalAccepted.dpa`                         | boolean                                                                                              |                                                                                                                     |

## Examples

### Every item holds

```http
POST /api/v1/brands/brd_01m4tx5nj8emwbyf7y9vcf47x4/go_live
Authorization: Bearer or_test_…
Idempotency-Key: 3f1c9a52-7d0e-4b8f-9a61-0c2d5e8b7f14
```

Response (`200`):

```json
{
  "brand": {
    "id": "brd_01m4tx5nj8emwbyf7y9vcf47x4",
    "object": "brand",
    "orgId": "org_01m4tx5nj7ekd958x53w4bntcg",
    "entityId": "ent_01m4tx5nj8emwbyf7y9vcf47x2",
    "slug": "acme-app",
    "name": "Acme App",
    "status": "live",
    "isPlatformBrand": false,
    "branding": {
      "logoUrl": null,
      "iconUrl": null,
      "primaryColor": null,
      "accentColor": null,
      "supportEmail": null,
      "supportUrl": null,
      "termsUrl": null,
      "privacyUrl": null
    },
    "statementDescriptor": "ACME APP",
    "statementDescriptorSuffix": null,
    "invoiceSeries": {
      "invoice": "ACM",
      "creditNote": "ACM-CN"
    },
    "billingSettings": {
      "dunning": {
        "retryOffsetsDays": [1, 3, 5, 7],
        "finalAction": "unpaid"
      },
      "entitlementGraceDays": 7,
      "sendInvoice": {
        "graceDays": 14
      },
      "cardExpiryReminders": true,
      "pausedEntitlements": false,
      "paymentBehavior": "allow_incomplete"
    },
    "policies": {
      "breakageRecognition": "at_expiry",
      "supportRefundLimits": [],
      "disputeWalletFreeze": true,
      "taxIdUnavailable": "charge_as_b2c"
    },
    "portalSettings": {
      "allowPlanChanges": true,
      "planChangeMatrix": [],
      "allowCancel": true,
      "cancelBehavior": "period_end",
      "collectCancelReason": true,
      "allowQuantityChanges": false
    },
    "checkoutSettings": {
      "locales": ["en", "hr"],
      "collectPhone": false,
      "requireBusinessDetails": "auto"
    },
    "createdAt": "2026-10-13T12:00:00.000Z",
    "updatedAt": "2026-10-13T12:00:00.000Z"
  },
  "checklist": {
    "object": "go_live_checklist",
    "brandId": "brd_01m4tx5nj8emwbyf7y9vcf47x4",
    "entityId": "ent_01m4tx5nj8emwbyf7y9vcf47x2",
    "brandStatus": "live",
    "ready": true,
    "live": true,
    "items": [
      {
        "requirement": "plan_livemode",
        "met": true,
        "reason": null
      },
      {
        "requirement": "org_status",
        "met": true,
        "reason": null
      },
      {
        "requirement": "legal_accepted",
        "met": true,
        "reason": null
      },
      {
        "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": true,
        "reason": null
      },
      {
        "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                                                                                                                           |
| -------------------------------------------------------------------------------------------------------- | ----------- | ----------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------ |
| [`go_live_requirements_unmet`](https://ownrecord.io/docs/reference/errors.md#go_live_requirements_unmet) | 409         | A requirement isn't met (`details.unmet`, `details.items`); the brand stays in test mode. | Open the brand's go-live checklist (`brands.go_live_checklist`) and complete the open items.                                         |
| [`mode_not_supported`](https://ownrecord.io/docs/reference/errors.md#mode_not_supported)                 | 400         | The request is in test mode.                                                              | Use the mode the operation supports (`details.supported_mode`): test-only operations such as test clocks need test-mode credentials. |
| [`processor_request_failed`](https://ownrecord.io/docs/reference/errors.md#processor_request_failed)     | 502         | The processor couldn't be reached for the connection test.                                | If `retryable` is true, retry with the same Idempotency-Key after a short wait; otherwise check `details.code`.                      |
| [`upstream_timeout`](https://ownrecord.io/docs/reference/errors.md#upstream_timeout)                     | 502         | The processor didn't answer the connection test in time.                                  | Retry the request with the same Idempotency-Key after a short wait.                                                                  |
| [`version_conflict`](https://ownrecord.io/docs/reference/errors.md#version_conflict)                     | 409         | The brand changed at the same time; try again.                                            | Fetch the object again and retry the change.                                                                                         |
| [`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.                                 |
| [`livemode_not_allowed`](https://ownrecord.io/docs/reference/errors.md#livemode_not_allowed)             | 403         | You have no live-mode access.                                                             | Use test mode, or credentials for the target's mode. Developers need live access granted by an organization owner or admin.          |
| [`fresh_auth_required`](https://ownrecord.io/docs/reference/errors.md#fresh_auth_required)               | 403         | Your last sign-in is older than 15 minutes.                                               | Sign in again, then repeat the action within 15 minutes.                                                                             |
| [`permission_denied`](https://ownrecord.io/docs/reference/errors.md#permission_denied)                   | 403         | You can't take this brand live.                                                           | 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), [`invalid_json`](https://ownrecord.io/docs/reference/errors.md#invalid_json), [`unsupported_media_type`](https://ownrecord.io/docs/reference/errors.md#unsupported_media_type), [`authentication_required`](https://ownrecord.io/docs/reference/errors.md#authentication_required), [`api_key_invalid`](https://ownrecord.io/docs/reference/errors.md#api_key_invalid), [`idempotency_key_required`](https://ownrecord.io/docs/reference/errors.md#idempotency_key_required), [`idempotency_key_reused`](https://ownrecord.io/docs/reference/errors.md#idempotency_key_reused), [`idempotency_in_progress`](https://ownrecord.io/docs/reference/errors.md#idempotency_in_progress), [`approval_required`](https://ownrecord.io/docs/reference/errors.md#approval_required), [`approval_rejected`](https://ownrecord.io/docs/reference/errors.md#approval_rejected), [`approval_expired`](https://ownrecord.io/docs/reference/errors.md#approval_expired), [`stale_approval`](https://ownrecord.io/docs/reference/errors.md#stale_approval), [`approval_policy_denied`](https://ownrecord.io/docs/reference/errors.md#approval_policy_denied), [`rate_limited`](https://ownrecord.io/docs/reference/errors.md#rate_limited), [`internal_error`](https://ownrecord.io/docs/reference/errors.md#internal_error).
