Products
Create a Product
Cria um produto.
Cria um recurso
product. Você pode criar o produto sem preço e definir os
valores depois via POST /v1/prices, ou enviar
prices[] inline no mesmo request. Quando prices[] tem itens, o primeiro preço
do array vira default_price, ou use default_price_index para escolher outro.
Use metadata para correlacionar o produto com IDs do seu sistema. Qualquer
chave funciona (ex.: sku, reference_id); o objeto inteiro é retornado em
todos os webhooks.
Autenticação
A API key da própria organização atua diretamente. A API key de plataforma exige o headerOrganization: <organization_id> apontando para uma organização
conectada ativa.
Attributes
Índice do preço em
prices[] que vira default_price. Só é aceito quando
prices[] tem pelo menos um item.Descrição livre. Envie
null para deixar vazio.URL retornada por
POST /v1/files com
purpose=product_image. Envie null para deixar vazio. URLs externas não
são aceitas.Indica se o produto é tributável.
Objeto livre
string → string para correlacionar com o seu sistema. Padrão
{}.Nome do produto exibido em checkout, faturas e webhooks.
Lista opcional de preços inline. Cada item segue o mesmo shape de
POST /v1/prices (sem product_id).
Quando omitido ou vazio, o produto nasce com default_price: null e
prices: [].Resposta
200 OK com o objeto product completo. Todo campo declarado pelo DTO público
é sempre retornado; vazio é null, {} ou [].
| Campo | Tipo | Observação |
|---|---|---|
id | string | ID do produto (prod_*) |
object | string | Sempre "product" |
name | string | — |
description | string | null | — |
image_url | string | null | — |
is_tax_applicable | boolean | — |
default_price | string | null | Aponta para um item de prices[], ou null quando o produto ainda não tem preço padrão |
is_active | boolean | false quando arquivado |
livemode | boolean | true em produção; false em ambiente de teste |
metadata | object | Eco do metadata enviado |
created_at | string | ISO 8601 |
updated_at | string | null | ISO 8601 |
prices | array | Lista de objetos price completos (mesmo shape de GET /v1/prices/:id) |
Erros comuns
| Status | code | Quando ocorre |
|---|---|---|
400 | invalid_request | name ausente; prices não-array; metadata não-objeto; default_price_index sem prices[] ou fora do range |
400 | invalid_request | image_url não aponta para um file ativo de purpose=product_image da organização |
400 | invalid_request | Em prices[N]: currency não é ISO de 3 letras; unit_amount negativo ou ausente; type inválido; recurring.interval ausente para recurring; recurring.interval_count não-inteiro ou < 1; recurring em one_time; tax_behavior inválido |
Webhook
A criação disparaproduct.created
com o product completo em data.object. Cada preço inline também dispara
price.created.
