Produtos

Criar um produto

POST /v1/products

POST /v1/products

Cria um produto e suas variantes na mesma requisição (variants[] é obrigatório, com pelo menos uma variante). A precificação de cada variante vai em pricing (veja o modelo de precificação).

Escopo requerido: products:create. Suporta chave de idempotência (X-Idempotency-Key).

Requisição

curl -X POST "https://api.selectwin.io/v1/products" \
  -H "SelectKey: sk_live_aBcDeFgHiJkLmNoPqRsTuVwXyZ" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Premium Course",
    "salesPage": "https://loja.com/premium",
    "description": "Curso completo",
    "enabled": true,
    "type": "digital",
    "language": "pt-BR",
    "category": "courses",
    "warrantyDays": 30,
    "externalReference": "SKU-EXT-1",
    "images": ["https://example.com/img1.png"],
    "variants": [
      {
        "name": "Plano Anual",
        "sku": "SKU-001",
        "description": "Acesso por 12 meses",
        "enabled": true,
        "externalReference": "VAR-EXT-1",
        "pricing": {
          "unitPrice": 49900,
          "currency": "BRL",
          "schema": "unit",
          "type": "oneTime",
          "oldPrice": 69900,
          "costPerItem": 12000
        }
      }
    ]
  }'

O slug não é aceito na requisição — a API o gera automaticamente a partir do name (tanto para o produto quanto para cada variante).

Campos do produto

CampoTipoObrigatórioDescrição
namestringSimNome do produto (máx. 40 caracteres)
categorystringSimCategoria de negócio (1–100 caracteres)
warrantyDaysintegerSimDias de garantia (7–3650)
typestringSimphysical, digital ou other
variants[]arraySimVariantes do produto (1 a 100), cada uma com pricing
languagestringNãoIdioma, até 10 caracteres (default pt-BR)
enabledbooleanNãoAtivo (default true)
salesPagestring (url)NãoPágina de vendas (até 255 caracteres)
descriptionstringNãoDescrição (até 400 caracteres)
externalReferencestringNãoSua referência externa (até 255 caracteres)
images[]arrayNãoURLs de imagens (até 10)

Campos da variante (variants[])

CampoTipoObrigatórioDescrição
namestringSimNome da variante (1–255 caracteres)
pricingobjectSimVeja campos de pricing. type e schema são imutáveis depois de criados
descriptionstringNãoDescrição (até 255 caracteres)
skustringNãoSKU (até 50 caracteres)
images[]arrayNãoURL de imagem (no máximo 1)
metadataobjectNãoPares chave/valor livres
attributesobjectNãoAtributos livres da variante
externalReferencestringNãoSua referência externa (até 255 caracteres)
enabledbooleanNãoAtivo (default true)

A primeira variante do array é marcada como primary: true na resposta.

Resposta 201 Created

Retorna o produto completo com suas variantes (mesmo formato de Consultar):

{
  "id": "prd_01hqzvabc",
  "name": "Premium Course",
  "slug": "premium-course",
  "salesPage": "https://loja.com/premium",
  "description": "Curso completo",
  "language": "pt-BR",
  "enabled": true,
  "salesQty": null,
  "type": "digital",
  "category": "courses",
  "externalReference": "SKU-EXT-1",
  "warrantyDays": 30,
  "images": ["https://example.com/img1.png"],
  "imageAssetIds": null,
  "createdAt": "2026-04-12T17:56:33.000Z",
  "updatedAt": "2026-04-12T17:56:33.000Z",
  "variants": [
    {
      "id": "var_01hqzvabc",
      "productId": "prd_01hqzvabc",
      "name": "Plano Anual",
      "slug": "plano-anual",
      "description": "Acesso por 12 meses",
      "sku": "SKU-001",
      "primary": true,
      "enabled": true,
      "pricing": {
        "unitPrice": 49900,
        "oldPrice": 69900,
        "costPerItem": 12000,
        "currency": "BRL",
        "schema": "unit",
        "type": "oneTime"
      },
      "images": null,
      "metadata": null,
      "attributes": null,
      "externalReference": "VAR-EXT-1",
      "checkoutUrl": null,
      "createdAt": "2026-04-12T17:56:33.000Z",
      "updatedAt": "2026-04-12T17:56:33.000Z"
    }
  ]
}

Erros

error.codeHTTPQuando
invalidParameters400Corpo inválido (campo obrigatório ausente, fora de faixa etc.)
invalidPricing422Configuração de pricing inconsistente com o schema/recorrência

Catálogo completo: Códigos de Erro.

How is this guide?

On this page