# Batch Relay API - [Introduction](https://docs.batchrelay.com/introduction.md): A provider-neutral fulfillment API for professional photography. - [Quickstart](https://docs.batchrelay.com/quickstart.md): Quote and submit one sandbox print order safely. - [Keyless Test Mode](https://docs.batchrelay.com/keyless-test-mode.md): Start a persistent sandbox workflow without an account or copied API key. - [Authentication](https://docs.batchrelay.com/authentication.md): Use an anonymous Test Mode session or a scoped API key to authenticate v1 API requests. - [Studio management](https://docs.batchrelay.com/studio-management.md): Read studio events, manage versioned event forms, and replace a studio storefront assortment. - [Products](https://docs.batchrelay.com/products.md): Browse every canonical Batch Relay product and copy a verified prepared-media contract. - [Catalog ownership and projection](https://docs.batchrelay.com/catalog-projection.md): Keep fulfillment data canonical in Batch Relay and retail data local to each studio. - [Shipping services](https://docs.batchrelay.com/shipping-services.md): Read the V1 automation shipping choices before creating a quote. - [Managed assets](https://docs.batchrelay.com/managed-assets.md): Copy external images into private temporary storage or reuse an existing managed asset. - [Asset sessions and event image imports](https://docs.batchrelay.com/event-image-imports.md): Stage, review, and commit event images without binding files before review. - [Template renders](https://docs.batchrelay.com/template-renders.md): Render published template inputs into print-ready assets for products that require them. - [Billing](https://docs.batchrelay.com/billing.md): Understand API billing setup, billing gates, and charge tracking. - [API-account activation and sandbox claims](https://docs.batchrelay.com/activation.md): Current OpenAPI routes, implementation boundaries, and runtime prerequisites. - [Idempotency](https://docs.batchrelay.com/idempotency.md): Avoid duplicate print-order creation with idempotency keys. - [Checkout Links](https://docs.batchrelay.com/checkout-links.md): Prepare and revoke studio-scoped guest checkout links safely. - [Promote sandbox studio setup](https://docs.batchrelay.com/sandbox-promotions.md): Review and apply a bounded sandbox-to-Live studio configuration promotion. - [Provider Offers and Quotes](https://docs.batchrelay.com/provider-routing.md): Discover canonical provider offers and create one-provider quotes. - [Sandbox Testing](https://docs.batchrelay.com/sandbox-testing.md): Test Batch Relay without production provider work. - [Errors](https://docs.batchrelay.com/errors.md): Read and recover from Batch Relay API errors. - [Prints](https://docs.batchrelay.com/products/prints.md): Choose an immutable print size and submit prepared portrait or landscape artwork. - [Wallets (set of 4)](https://docs.batchrelay.com/products/wallet-set-4.md): Order prepared wallet sheets; each quantity produces four 2.5 × 3.5 wallets. - [4 × 5 Magnet](https://docs.batchrelay.com/products/magnet-4x5.md): Order one prepared 4 × 5 photo magnet per quantity. - [3-inch Photo Button](https://docs.batchrelay.com/products/photo-button-3.md): Order one 3-inch button from a prepared square artwork asset. - [Acrylic keychains](https://docs.batchrelay.com/products/acrylic-keychains.md): Choose a small or large two-sided acrylic keychain. - [Metal Keychain](https://docs.batchrelay.com/products/metal-keychain.md): Order one two-sided metal keychain from separate prepared front and back assets. - [Bag tags](https://docs.batchrelay.com/products/bag-tags.md): Choose a small or large two-sided bag tag. - [Trader Cards (set of 12)](https://docs.batchrelay.com/products/trader-cards-12.md): Order double-sided 12-card sets with complete front and back artwork. - [Trader Card Magnets (set of 2)](https://docs.batchrelay.com/products/trader-card-magnets-2.md): Order prepared two-magnet sets with separate front and back assets. - [Contemporary plaques](https://docs.batchrelay.com/products/contemporary-plaques.md): Choose a 5 × 7 or 8 × 10 contemporary plaque. - [Memory Mates](https://docs.batchrelay.com/products/memory-mates.md): Choose a physical size and order a portrait or landscape template render as one finished print. - [Magazine Cover, 8 × 10](https://docs.batchrelay.com/products/magazine-cover-8x10.md): Order a rendered magazine cover as one finished 8 × 10 print. - [Digital Download](https://docs.batchrelay.com/products/digital-download.md): A catalog record for one digital-download entitlement. - [n8n](https://docs.batchrelay.com/n8n.md): n8n node for Batch Relay API automations. - [Zapier](https://docs.batchrelay.com/zapier.md): Create catalog-backed Batch Relay print orders from Zapier. - [Webhooks](https://docs.batchrelay.com/webhooks.md): Batch Relay Events V1 is delivered as signed CloudEvents webhooks. - [Events V1 overview](https://docs.batchrelay.com/events/overview.md): Receive Batch Relay lifecycle facts as signed CloudEvents webhooks. - [Receiving webhooks](https://docs.batchrelay.com/events/receiving-webhooks.md): Verify Standard Webhooks signatures, acknowledge delivery, and deduplicate CloudEvents. - [Public topic reference](https://docs.batchrelay.com/events/topic-reference.md): Public Events V1 topic names, resource subjects, and payload intent. - [Complete public examples](https://docs.batchrelay.com/events/examples.md): Canonical direct CloudEvents payloads for public Events V1 topics. - [Event privacy](https://docs.batchrelay.com/events/privacy.md): Understand what shared event payloads expose and how authorized purchaser context differs. - [Purchaser context](https://docs.batchrelay.com/events/purchaser-context.md): Retrieve a storefront transaction purchaser with an explicit Studio integration grant. - [Versioning and compatibility](https://docs.batchrelay.com/events/versioning.md): How Events V1 evolves without breaking existing webhook consumers. - [Check API health](https://docs.batchrelay.com/api-reference/system/check-api-health.md) - [Get this OpenAPI document](https://docs.batchrelay.com/api-reference/system/get-this-openapi-document.md) - [Create an isolated Test Mode session](https://docs.batchrelay.com/api-reference/authentication/create-an-isolated-test-mode-session.md): Creates a short-lived anonymous Test Mode bearer session for evaluation. The session is isolated from every other session and cannot access Live Mode, billing, studios, or events. Calls must use the public API host so the edge can apply abuse controls. - [Get safe API-key or dashboard authentication context](https://docs.batchrelay.com/api-reference/authentication/get-safe-api-key-or-dashboard-authentication-context.md) - [Create a one-time anonymous session claim code](https://docs.batchrelay.com/api-reference/anonymous-sessions/create-a-one-time-anonymous-session-claim-code.md) - [List authorized API accounts](https://docs.batchrelay.com/api-reference/api-accounts/list-authorized-api-accounts.md) - [Create an individual or studio-owned API account](https://docs.batchrelay.com/api-reference/api-accounts/create-an-individual-or-studio-owned-api-account.md): A verified individual may create their own individual account. A studio account is created only after server-side studio owner/admin authorization. - [Get an authorized API account](https://docs.batchrelay.com/api-reference/api-accounts/get-an-authorized-api-account.md) - [Activate an API account](https://docs.batchrelay.com/api-reference/api-accounts/activate-an-api-account.md) - [Get API account activation status](https://docs.batchrelay.com/api-reference/api-accounts/get-api-account-activation-status.md) - [Accept a versioned agreement](https://docs.batchrelay.com/api-reference/api-accounts/accept-a-versioned-agreement.md) - [Start hosted payment-method setup](https://docs.batchrelay.com/api-reference/api-accounts/start-hosted-payment-method-setup.md): Creates a server-side Stripe-hosted setup session for an authorized account. No card data is accepted by Batch Relay. A completed browser redirect does not activate billing; the verified Stripe webhook does. - [Claim an account sandbox](https://docs.batchrelay.com/api-reference/api-accounts/claim-an-account-sandbox.md) - [Get API account usage and spend summary](https://docs.batchrelay.com/api-reference/api-accounts/get-api-account-usage-and-spend-summary.md) - [List remote API keys](https://docs.batchrelay.com/api-reference/api-keys/list-remote-api-keys.md) - [Create a remote API key](https://docs.batchrelay.com/api-reference/api-keys/create-a-remote-api-key.md) - [Revoke a remote API key](https://docs.batchrelay.com/api-reference/api-keys/revoke-a-remote-api-key.md) - [Rotate a remote API key](https://docs.batchrelay.com/api-reference/api-keys/rotate-a-remote-api-key.md) - [Copy one external image into Batch Relay-managed fulfillment storage](https://docs.batchrelay.com/api-reference/managed-assets/copy-one-external-image-into-batch-relay-managed-fulfillment-storage.md): Requires print_orders:write and an Idempotency-Key up to 200 characters. Anonymous Test Mode sessions use a separate managed-ingest request limit, not byte metering. Supply exactly one source: an externally routable HTTPS url is downloaded with SSRF protections, content-validated, SHA-256-addressed,… - [Get browser-preview proof status](https://docs.batchrelay.com/api-reference/browser-previews/get-browser-preview-proof-status.md) - [Stream a short-lived browser-preview artifact](https://docs.batchrelay.com/api-reference/browser-previews/stream-a-short-lived-browser-preview-artifact.md) - [Get a published browser-preview package](https://docs.batchrelay.com/api-reference/browser-previews/get-a-published-browser-preview-package.md): Requires a studio-owned API account and templates:read. During the compatibility period, print_orders:read is also accepted. Only a published or superseded immutable revision may be resolved; draft editor revisions are unavailable. The package is the output-scoped visual node discovery surface: brow… - [Queue a short-lived browser proof render](https://docs.batchrelay.com/api-reference/browser-previews/queue-a-short-lived-browser-proof-render.md): Requires a studio-owned API account and template_previews:write. During the compatibility period, print_orders:write is also accepted. Image inputs must be authorized immutable asset IDs; local pan and zoom are checkpointed into a managed crop asset before this request. The fixed 96-DPI JPEG profile… - [Stream an authorized browser-preview source asset](https://docs.batchrelay.com/api-reference/browser-previews/stream-an-authorized-browser-preview-source-asset.md) - [List active products](https://docs.batchrelay.com/api-reference/catalog/list-active-products.md): Lists active immutable products plus a discovery-only family view. Orders and quotes always use the concrete product ID and revision. Deprecated catalog records remain available only to trusted historical decoding and are not publicly discoverable. - [Get one active product](https://docs.batchrelay.com/api-reference/catalog/get-one-active-product.md): Returns active products only. Deprecated product IDs return product_not_found. - [List exact published provider offers](https://docs.batchrelay.com/api-reference/catalog/list-exact-published-provider-offers.md): Returns canonical provider-neutral discovery offers. Available WHCC offers include exact verified unit costs; unknown or unavailable offers are intentionally unpriced. Fulfillment constraints are discovery data, not a provider submission guarantee. Provider-native SKU and UID values are never expose… - [List semantic field definitions](https://docs.batchrelay.com/api-reference/catalog/list-semantic-field-definitions.md) - [Get a semantic field definition](https://docs.batchrelay.com/api-reference/catalog/get-a-semantic-field-definition.md) - [List V1 automation shipping services](https://docs.batchrelay.com/api-reference/catalog/list-v1-automation-shipping-services.md): Zapier-safe public discovery metadata for currently supported automation choices. Base amounts and eligibility are schedule guidance only: the exact quote may be higher or the service may be unavailable. Quote the complete order to determine its final available service and charge. One-day service va… - [Get explicitly authorized purchaser context for a studio order event](https://docs.batchrelay.com/api-reference/event-context/get-explicitly-authorized-purchaser-context-for-a-studio-order-event.md): Requires a studio-owned API key with events.orders.buyer.read, a current studio grant, and explicit buyer-context access enabled on the active event integration for the same environment. Tenant and environment come from the API key and stored event; neither can be selected by the request. Supports s… - [Apply one reviewed bulk athlete team change](https://docs.batchrelay.com/api-reference/event-team-changes/apply-one-reviewed-bulk-athlete-team-change.md): Requires an active studio-owned API account with the event_teams:write scope. Submit only the confirmation returned by prepare plus a stable command_id. Convex atomically rechecks the confirmation fingerprint and current roster. A stale or already-invalid confirmation returns 409; clients must prepa… - [Prepare a studio-owned bulk athlete team change](https://docs.batchrelay.com/api-reference/event-team-changes/prepare-a-studio-owned-bulk-athlete-team-change.md): Requires an active studio-owned API account with the event_teams:write scope. The server derives the studio from the API key and rechecks event/team ownership in Convex. Prepare returns an opaque, short-lived confirmation bound to the reviewed roster; it does not apply membership changes. - [List events for the header-selected studio](https://docs.batchrelay.com/api-reference/studio-management/list-events-for-the-header-selected-studio.md): Requires events:read and X-Studio-ID. The API never infers a studio from the credential or a local profile. - [Create an unpublished event for the header-selected studio](https://docs.batchrelay.com/api-reference/studio-management/create-an-unpublished-event-for-the-header-selected-studio.md): Requires events:write, X-Studio-ID, and Idempotency-Key. Creates an unpublished event; publishing is a separate readiness-checked operation. - [Get an event for the header-selected studio](https://docs.batchrelay.com/api-reference/studio-management/get-an-event-for-the-header-selected-studio.md): Requires events:read and X-Studio-ID. - [List studios available to this API credential](https://docs.batchrelay.com/api-reference/studio-management/list-studios-available-to-this-api-credential.md): Requires studios:read. This is the only studio-scoped discovery operation without a studio_id path parameter. Every subsequent studio, event, and form request names its target studio explicitly; the credential and Convex both recheck tenancy. - [List events for one explicit studio](https://docs.batchrelay.com/api-reference/studio-management/list-events-for-one-explicit-studio.md) - [Get one event for one explicit studio](https://docs.batchrelay.com/api-reference/studio-management/get-one-event-for-one-explicit-studio.md) - [List an event's form revisions](https://docs.batchrelay.com/api-reference/studio-management/list-an-events-form-revisions.md) - [Create a draft event form revision](https://docs.batchrelay.com/api-reference/studio-management/create-a-draft-event-form-revision.md): Requires forms:write, a live credential, and Idempotency-Key. Test keys may read this surface but cannot create, update, or publish. Convex validates studio/event/definition tenancy and stale base-revision semantics. - [Get one event form revision](https://docs.batchrelay.com/api-reference/studio-management/get-one-event-form-revision.md) - [Update an editable event form revision](https://docs.batchrelay.com/api-reference/studio-management/update-an-editable-event-form-revision.md): Requires forms:write and a live credential. expected_edit_version is required; published revisions are immutable and stale revisions conflict. - [Publish an editable event form revision](https://docs.batchrelay.com/api-reference/studio-management/publish-an-editable-event-form-revision.md): Requires forms:publish, a live credential, Idempotency-Key, and expected_edit_version. Convex atomically rejects stale versions, invalid drafts, and attempts to alter published revisions. - [List reusable form definitions](https://docs.batchrelay.com/api-reference/studio-management/list-reusable-form-definitions.md) - [Get a reusable form definition](https://docs.batchrelay.com/api-reference/studio-management/get-a-reusable-form-definition.md) - [List account-scoped API print orders](https://docs.batchrelay.com/api-reference/print-orders/list-account-scoped-api-print-orders.md) - [Submit a quoted API print order](https://docs.batchrelay.com/api-reference/print-orders/submit-a-quoted-api-print-order.md): Requires a scoped API key or an anonymous Test Mode session and Idempotency-Key. Anonymous sessions always use sandbox, no-charge simulation. Live API keys retain billable production behavior. The quote is account/environment scoped and freezes exactly one resolved provider; submission cannot alter… - [Create a server-calculated API order quote](https://docs.batchrelay.com/api-reference/print-orders/create-a-server-calculated-api-order-quote.md): Requires print_orders:write through an API key or anonymous Test Mode session and Idempotency-Key. The server derives the fulfillment lane from the credential. Price, tax, shipping, and platform fee are server-calculated and frozen for 15 minutes. Routing is explicit: studio_default never falls back… - [Validate a non-authorizing prepared-media print order](https://docs.batchrelay.com/api-reference/print-orders/validate-a-non-authorizing-prepared-media-print-order.md): Accepts exactly one JSON object up to 2 MiB and rejects unknown fields. environment is used only for structural preflight and cannot quote, create, pay for, upload media for, or submit an order. Authenticated quote and submission routes derive their fulfillment lane from the API credential. Clients… - [Get an account-scoped API print order](https://docs.batchrelay.com/api-reference/print-orders/get-an-account-scoped-api-print-order.md) - [Get a template render and its output artifacts](https://docs.batchrelay.com/api-reference/template-renders/get-a-template-render-and-its-output-artifacts.md): Requires the studio-owned API account that owns the render and templates:read. During the compatibility period, print_orders:read is also accepted. - [List studio template renders](https://docs.batchrelay.com/api-reference/template-renders/list-studio-template-renders.md): Requires templates:read; print_orders:read remains accepted during the compatibility period. - [Get one published output's render contract](https://docs.batchrelay.com/api-reference/template-renders/get-one-published-outputs-render-contract.md): Requires a studio-owned API account with templates:read. During the compatibility period, print_orders:read is also accepted. Omit revision_id to resolve the latest published revision. Only published or superseded immutable revisions are eligible; draft editor revisions are never returned. The selec… - [Create a render from a published template](https://docs.batchrelay.com/api-reference/template-renders/create-a-render-from-a-published-template.md): Requires a studio-owned API account with template_renders:write. During the compatibility period, print_orders:write is also accepted. Accepts explicit stable slot IDs only. Omit revision_id to resolve the latest published revision; the response snapshots the resolved immutable revision. The service… - [Reserve a studio-scoped original-asset upload session](https://docs.batchrelay.com/api-reference/studio-assets/reserve-a-studio-scoped-original-asset-upload-session.md): Requires an active studio-owned API account and the studio_assets:write scope. Each file supplies a stable local_id and its lowercase SHA-256 before any upload grant is created. Convex resolves the API key's owner studio, reconciles matching ready bytes only within that studio and event, and returns… - [Get a studio asset upload session](https://docs.batchrelay.com/api-reference/studio-assets/get-a-studio-asset-upload-session.md): Requires studio_assets:write. Session IDs are bindings, not credentials: the API key and durable owner studio are rechecked. Object keys and storage details are never returned. - [Upload bytes for one reserved studio asset](https://docs.batchrelay.com/api-reference/studio-assets/upload-bytes-for-one-reserved-studio-asset.md): Requires studio_assets:write and an upload_required reconciliation entry. Content-Type and Content-Length must exactly match the reservation and the streamed bytes must match its SHA-256. The API marks the asset uploading through Convex, uses only the server-derived R2 object key, computes MD5/SHA-2… - [List privacy-safe studio management activity](https://docs.batchrelay.com/api-reference/studio-audit/list-privacy-safe-studio-management-activity.md): Lists append-only, privacy-safe studio management activity from selected API write boundaries. It is not a raw lifecycle, fulfillment, or delivery feed and never returns request bodies, secrets, or PII. - [Read Studio events analytics](https://docs.batchrelay.com/api-reference/studio-analytics/read-studio-events-analytics.md): Requires analytics:read and an exact active Studio grant. Dates are inclusive from and exclusive to, at most 366 civil days, in the supplied IANA timezone. Currency USD is supported. The credential selects Test or Live; query lane overrides and unknown or repeated filters are rejected. Refunds obser… - [Read Studio sales analytics](https://docs.batchrelay.com/api-reference/studio-analytics/read-studio-sales-analytics.md): Requires analytics:read and an exact active Studio grant. Dates are inclusive from and exclusive to, at most 366 civil days, in the supplied IANA timezone. Currency USD is supported. The credential selects Test or Live; query lane overrides and unknown or repeated filters are rejected. Refunds obser… - [Read Studio sellables analytics](https://docs.batchrelay.com/api-reference/studio-analytics/read-studio-sellables-analytics.md): Requires analytics:read and an exact active Studio grant. Dates are inclusive from and exclusive to, at most 366 civil days, in the supplied IANA timezone. Currency USD is supported. The credential selects Test or Live; query lane overrides and unknown or repeated filters are rejected. Refunds obser… - [Create an asset session](https://docs.batchrelay.com/api-reference/asset-sessions/create-an-asset-session.md) - [Get an asset session](https://docs.batchrelay.com/api-reference/asset-sessions/get-an-asset-session.md) - [Upload a session asset](https://docs.batchrelay.com/api-reference/asset-sessions/upload-a-session-asset.md) - [Cancel an asset session](https://docs.batchrelay.com/api-reference/asset-sessions/cancel-an-asset-session.md) - [Finalize an asset session](https://docs.batchrelay.com/api-reference/asset-sessions/finalize-an-asset-session.md) - [List studio-scoped managed assets](https://docs.batchrelay.com/api-reference/assets/list-studio-scoped-managed-assets.md): Lists only managed assets bound to the selected studio and current credential lane. It requires studio_assets:read plus an exact studio grant or studio ownership. - [Reserve a managed asset upload](https://docs.batchrelay.com/api-reference/studio-catalog-assets/reserve-a-managed-asset-upload.md): Requires studio_assets:write, a Live key, and Idempotency-Key. upload_url is a short-lived upload capability: do not log or persist it. Stable asset responses expose only opaque metadata and IDs. - [Finalize a managed asset upload](https://docs.batchrelay.com/api-reference/studio-catalog-assets/finalize-a-managed-asset-upload.md): Requires studio_assets:write and a Live key. upload_session_id is the idempotency identity; the storage receipt is accepted only for that temporary session. - [Get managed asset metadata](https://docs.batchrelay.com/api-reference/studio-catalog-assets/get-managed-asset-metadata.md): Requires studio_assets:read. No raw asset URL is returned. - [List studio checkout links](https://docs.batchrelay.com/api-reference/checkout-links/list-studio-checkout-links.md) - [Create a studio-scoped guest checkout link](https://docs.batchrelay.com/api-reference/checkout-links/create-a-studio-scoped-guest-checkout-link.md): Requires checkout_links:write and print_orders:write plus access to the explicit studio. Anonymous sessions cannot use this management lane. The credential persists the sandbox or production checkout lane: a br_test_ key creates an explicitly sandboxed, non-payable link with preview_status=non_payab… - [Get a studio-scoped checkout link](https://docs.batchrelay.com/api-reference/checkout-links/get-a-studio-scoped-checkout-link.md): Requires checkout_links:read and print_orders:read plus access to the explicit studio. The response never returns the checkout token, recipient identity, or payment-provider data. - [Prepare a payable checkout URL](https://docs.batchrelay.com/api-reference/checkout-links/prepare-a-payable-checkout-url.md): Requires checkout_links:write, offers:apply, print_orders:write, and Idempotency-Key. The authoritative checkout owner resolves catalog totals and the selected offer, reserves the offer, and creates the Stripe Checkout Session. A Test Mode key remains non-payable and never receives a URL. - [Recover a prepared checkout URL](https://docs.batchrelay.com/api-reference/checkout-links/recover-a-prepared-checkout-url.md): Requires checkout_links:write, offers:apply, print_orders:write, and the same Idempotency-Key used for preparation. The server returns an existing authoritative Live Mode URL or an explicit non-payable Test Mode result. - [Revoke a studio-scoped checkout link](https://docs.batchrelay.com/api-reference/checkout-links/revoke-a-studio-scoped-checkout-link.md): Requires checkout_links:write and print_orders:write plus access to the explicit studio. Only a currently revocable link can transition; revocation never creates or returns a replacement token. - [Get checkout payment status](https://docs.batchrelay.com/api-reference/checkout-links/get-checkout-payment-status.md) - [Create an event image import](https://docs.batchrelay.com/api-reference/image-imports/create-an-event-image-import.md) - [Get an event image import](https://docs.batchrelay.com/api-reference/image-imports/get-an-event-image-import.md) - [Review an event image import](https://docs.batchrelay.com/api-reference/image-imports/review-an-event-image-import.md) - [Cancel an event image import](https://docs.batchrelay.com/api-reference/image-imports/cancel-an-event-image-import.md) - [Commit an event image import](https://docs.batchrelay.com/api-reference/image-imports/commit-an-event-image-import.md) - [List a studio's operational messages](https://docs.batchrelay.com/api-reference/studio-messages/list-a-studios-operational-messages.md) - [Create or schedule an operational event message](https://docs.batchrelay.com/api-reference/studio-messages/create-or-schedule-an-operational-event-message.md): Requires messages:write, a production studio credential with an exact active studio grant, owner/admin authorization, and Idempotency-Key. Transactional alert emails never contain the freeform body. - [Get an operational message](https://docs.batchrelay.com/api-reference/studio-messages/get-an-operational-message.md) - [Cancel a draft or scheduled message](https://docs.batchrelay.com/api-reference/studio-messages/cancel-a-draft-or-scheduled-message.md) - [Create an immutable correction](https://docs.batchrelay.com/api-reference/studio-messages/create-an-immutable-correction.md) - [List read and delivery facts without recipient addresses](https://docs.batchrelay.com/api-reference/studio-messages/list-read-and-delivery-facts-without-recipient-addresses.md) - [List studio offers](https://docs.batchrelay.com/api-reference/studio-offers/list-studio-offers.md): Requires offers:read and the exact studio grant. The projection contains server-owned lifecycle, immutable revision, usage, and bounded margin metadata; it never exposes Stripe provider identifiers or secrets. - [Create a studio offer](https://docs.batchrelay.com/api-reference/studio-offers/create-a-studio-offer.md): Requires offers:write, a production or Test Mode API key, the exact studio grant, and Idempotency-Key. The request supplies only policy terms and selectors; the server owns Stripe provisioning, totals, and eligibility. - [Get a studio offer](https://docs.batchrelay.com/api-reference/studio-offers/get-a-studio-offer.md) - [Append a studio offer revision](https://docs.batchrelay.com/api-reference/studio-offers/append-a-studio-offer-revision.md): Offer terms are immutable after creation. PATCH appends a new revision and requires expected_revision plus Idempotency-Key; stale revisions fail with 409. The authorized mutation projection contains the latest candidate revision, so offers:write is sufficient. - [Activate a studio offer](https://docs.batchrelay.com/api-reference/studio-offers/activate-a-studio-offer.md) - [Preview studio offer margin](https://docs.batchrelay.com/api-reference/studio-offers/preview-studio-offer-margin.md): Requires margins:read. The preview uses server catalog and provider-cost evidence. Unknown or stale cost facts remain explicitly marked in cost_status and are never replaced with caller-supplied costs. - [Pause a studio offer](https://docs.batchrelay.com/api-reference/studio-offers/pause-a-studio-offer.md) - [List offer redemptions](https://docs.batchrelay.com/api-reference/studio-offers/list-offer-redemptions.md) - [Resume a studio offer](https://docs.batchrelay.com/api-reference/studio-offers/resume-a-studio-offer.md) - [Revoke a studio offer](https://docs.batchrelay.com/api-reference/studio-offers/revoke-a-studio-offer.md) - [Schedule a studio offer](https://docs.batchrelay.com/api-reference/studio-offers/schedule-a-studio-offer.md): Schedule requires a future starts_at and an expected revision. The durable offer service owns the transition and activation time. - [List studio packages](https://docs.batchrelay.com/api-reference/studio-catalog/list-studio-packages.md) - [Create a draft package](https://docs.batchrelay.com/api-reference/studio-catalog/create-a-draft-package.md): Requires studio_catalog:write, a Live key, and Idempotency-Key. - [Get a package](https://docs.batchrelay.com/api-reference/studio-catalog/get-a-package.md) - [Update a package draft](https://docs.batchrelay.com/api-reference/studio-catalog/update-a-package-draft.md): Requires expected_edit_version. When replacing composition, provide both lines and add_ons in the same request. Updating a published package creates or updates its server-owned draft revision. - [Archive a package](https://docs.batchrelay.com/api-reference/studio-catalog/archive-a-package.md) - [Publish a package](https://docs.batchrelay.com/api-reference/studio-catalog/publish-a-package.md) - [Restore a package](https://docs.batchrelay.com/api-reference/studio-catalog/restore-a-package.md) - [List a studio's retail products](https://docs.batchrelay.com/api-reference/studio-catalog/list-a-studios-retail-products.md): Requires studio_catalog:read. Canonical /v1/catalog/products remains a separate read-only provider-neutral catalog. - [Create a draft studio product](https://docs.batchrelay.com/api-reference/studio-catalog/create-a-draft-studio-product.md): Requires studio_catalog:write, a Live key, and Idempotency-Key. Test keys never write Live catalog data. - [Get a studio product](https://docs.batchrelay.com/api-reference/studio-catalog/get-a-studio-product.md) - [Update a product draft](https://docs.batchrelay.com/api-reference/studio-catalog/update-a-product-draft.md): Requires studio_catalog:write, a Live key, and expected_edit_version. Updating a published product creates or updates its server-owned draft revision. - [Archive a product](https://docs.batchrelay.com/api-reference/studio-catalog/archive-a-product.md) - [Publish a product](https://docs.batchrelay.com/api-reference/studio-catalog/publish-a-product.md): Requires studio_catalog:publish, a Live key, Idempotency-Key, and expected_edit_version. - [Restore a product](https://docs.batchrelay.com/api-reference/studio-catalog/restore-a-product.md) - [List product variants](https://docs.batchrelay.com/api-reference/studio-catalog/list-product-variants.md) - [Create a product variant](https://docs.batchrelay.com/api-reference/studio-catalog/create-a-product-variant.md): Requires studio_catalog:write, a Live key, and Idempotency-Key. - [Create an immutable sandbox-to-Live promotion plan](https://docs.batchrelay.com/api-reference/sandbox-promotions/create-an-immutable-sandbox-to-live-promotion-plan.md): Requires a production br_ API key with sandbox_promotions:read and the exact studio grant; br_test_ keys and anonymous Test Mode sessions are never allowed to plan or apply Live changes. Content-Type must be application/json and the strict body limit is 32 KiB. Select one or more sections. Creating… - [Get a bounded sandbox-to-Live promotion plan](https://docs.batchrelay.com/api-reference/sandbox-promotions/get-a-bounded-sandbox-to-live-promotion-plan.md): Requires a production br_ API key with sandbox_promotions:read and the exact studio grant. Returns public resource mappings, user-visible before/after fields, bounded warnings and errors, and version fingerprints only; it excludes provider payloads, object keys, storage identifiers, secret material,… - [Apply one reviewed sandbox-to-Live promotion plan](https://docs.batchrelay.com/api-reference/sandbox-promotions/apply-one-reviewed-sandbox-to-live-promotion-plan.md): Requires a production br_ API key with sandbox_promotions:apply, the exact studio grant, Idempotency-Key, and the reviewed plan version plus SHA-256. Content-Type must be application/json and the strict body limit is 32 KiB. Convex atomically rechecks current Live revisions and returns 409 if any co… - [Roll back one applied sandbox-to-Live promotion](https://docs.batchrelay.com/api-reference/sandbox-promotions/roll-back-one-applied-sandbox-to-live-promotion.md): Requires a production br_ API key with sandbox_promotions:apply, the exact studio grant, Idempotency-Key, and the applied version plus SHA-256. Content-Type must be application/json and the strict body limit is 32 KiB. Convex returns 409 when newer Live edits make rollback unsafe; clients must inspe… - [Get a studio storefront assortment](https://docs.batchrelay.com/api-reference/storefront/get-a-studio-storefront-assortment.md): Requires storefronts:read. The public API deliberately exposes one storefront per studio, not internal loadouts or loadout IDs. - [Atomically replace a studio storefront assortment](https://docs.batchrelay.com/api-reference/storefront/atomically-replace-a-studio-storefront-assortment.md): Requires storefronts:write, a Live key, expected_published_revision, and Idempotency-Key. PATCH immediately publishes a new immutable assortment revision; this API has no storefront draft or publish endpoint yet. - [List published studio templates](https://docs.batchrelay.com/api-reference/templates/list-published-studio-templates.md): Requires templates:read; print_orders:read remains accepted during the compatibility period. - [Get one studio template](https://docs.batchrelay.com/api-reference/templates/get-one-studio-template.md): Requires templates:read; print_orders:read remains accepted during the compatibility period. - [List a template's compatible canonical products](https://docs.batchrelay.com/api-reference/templates/list-a-templates-compatible-canonical-products.md): Requires templates:read; print_orders:read remains accepted during the compatibility period. ## OpenAPI Specs - [openapi](https://api.batchrelay.com/openapi.json) This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.