Pular para o conteúdo
sellumeDOCS · INTEGRADORES Portal do integrador

Referência

Referência da API

Operação por operação, gerada do contrato OpenAPI 3.1 da API v1. Os caminhos são relativos ao endereço da API.

bash
B=https://api.sellume.com.br/v1

O endereço técnico antigo continua aceito (Mudanças). Convenções:

  • JSON em UTF-8, campos em português camelCase, valores de lista em snake_case. Ignore campos que você não conhece: campos novos podem entrar a qualquer momento (política de mudanças).
  • Respostas em { "data": … }. Listas com paginacao (pagina, limite padrão e máximo 100, total, totalPaginas) e os parâmetros pagina e limite.
  • Identificadores com prefixo: cta_ conta, prd_ produto, cnf_ conferência, ger_ geração, img_ imagem, avs_ endereço de aviso, ent_ entrega, evt_ evento, tst_ teste de avisos, mov_ movimento, req_ chamada.
  • Erros em { "error": { "type", "message", "description", "fields", "documentation" } } (Catálogo de erros).
  • Toda resposta traz X-Request-Id e os cabeçalhos de limite X-RateLimit-* (Idempotência e limites).
  • Nos exemplos, campos de valor em dinheiro aparecem como "definido no contrato".

Contas#

Subcontas dos clientes finais do integrador e contas vinculadas por OAuth.

GET/contas

Listar contas do integrador#

  • Escopocontas:ler
  • Chave de APIsim
  • Token OAuthsim

Parâmetros

ParâmetroOndeDescrição
paginaconsultaNúmero da página, começando em 1. Tipo: inteiro. Padrão: 1. Mínimo 1.
limiteconsultaItens por página (padrão 100, máximo 100). Tipo: inteiro. Padrão: 100. De 1 a 100.
situacaoconsultaTipo: texto. Valores: ativa, pausada, encerrada.
codigoExternoconsultaTipo: texto. Até 120 caracteres.
origemconsultaTipo: texto. Valores: subconta, vinculada.

Respostas

  • 200
    Página de contas.

    Cabeçalhos: X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset.

  • 401
    Chave ou token ausente, inválido, revogado ou expirado.

    Erro: UNAUTHORIZED.

  • 429
    Limite de pedidos por minuto atingido.

    Cabeçalhos: Retry-After, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset. Erro: TOO_MANY_REQUESTS.

POST/contas

Criar a subconta de um cliente final#

Cria a subconta de um cliente do integrador (cada vendedor do ERP ou cada seguidor do influencer). A subconta não tem login nem recebe e-mails do Sellume. codigoExterno é o identificador do cliente no sistema do integrador e é único por integrador: repetir o mesmo codigoExterno devolve 409 com o id existente em error.fields.

  • Escopocontas:escrever
  • Chave de APIsim
  • Token OAuthnão (responde 403)

Parâmetros

ParâmetroOndeDescrição
Idempotency-KeycabeçalhoOpcional neste endpoint (não gasta crédito); mesmas regras do obrigatório. Tipo: texto. De 8 a 120 caracteres. Formato: ^[A-Za-z0-9_\-:.]+$.

Corpo do pedido

application/json · obrigatório

CampoTipoDescrição
codigoExterno obrigatóriotextoDe 1 a 120 caracteres.
nome obrigatóriotextoNome comercial (loja). Não é obrigatório nome de pessoa. De 2 a 160 caracteres.
metadadosobjetoAté 20 chaves livres do integrador (texto até 500 caracteres). Não use dados pessoais sensíveis. Até 20 chaves. Chaves livres.
exemplo
{
  "codigoExterno": "vendedor-98213",
  "nome": "Loja Casa Bonita",
  "metadados": {
    "planoNoErp": "ouro"
  }
}

Respostas

  • 201
    Subconta criada.

    Cabeçalhos: X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-Request-Id.

  • 400
    Dados inválidos.

    Erro: VALIDATION_ERROR.

  • 401
    Chave ou token ausente, inválido, revogado ou expirado.

    Erro: UNAUTHORIZED.

  • 403
    Escopo insuficiente, integrador ou conta pausada, ou origem não autorizada.

    Erro: FORBIDDEN.

  • 409
    Conflito de estado, duplicidade ou Idempotency-Key reutilizada com outro corpo.

    Erro: IDEMPOTENCY_KEY_REUSED.

  • 429
    Limite de pedidos por minuto atingido.

    Cabeçalhos: Retry-After, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset. Erro: TOO_MANY_REQUESTS.

  • 500
    Erro inesperado (sem detalhe interno).

    Erro: INTERNAL_ERROR.

Campos da resposta 201 (data — objeto)
CampoTipoDescrição
id obrigatóriotextoFormato: ^cta_[0-9A-Z]{26}$.
codigoExterno obrigatóriotexto ou nulo
nome obrigatóriotexto
origem obrigatóriotextosubconta = criada pelo integrador; vinculada = conta Sellume do vendedor autorizada por OAuth. Valores: subconta, vinculada.
situacao obrigatóriotextoValores: ativa, pausada, encerrada.
ambiente obrigatóriotextoteste = chave sk_test_ (mídia de exemplo, sem custo); producao = chave sk_live_. Valores: teste, producao.
metadadosobjetoAté 20 chaves livres do integrador (texto até 500 caracteres). Não use dados pessoais sensíveis. Até 20 chaves. Chaves livres.
criadoEm obrigatóriotexto (date-time)
atualizadoEm obrigatóriotexto (date-time)
resposta 201
{
  "data": {
    "id": "cta_01J9Z6K8X2M4R7T1Q3W5E8Y0U2",
    "codigoExterno": "vendedor-98213",
    "nome": "Loja Casa Bonita",
    "origem": "subconta",
    "situacao": "ativa",
    "ambiente": "producao",
    "metadados": {
      "planoNoErp": "ouro"
    },
    "criadoEm": "2026-10-10T14:03:22Z",
    "atualizadoEm": "2026-10-10T14:03:22Z"
  }
}
GET/contas/{contaId}

Detalhar uma conta#

  • Escopocontas:ler
  • Chave de APIsim
  • Token OAuthsim

Parâmetros

ParâmetroOndeDescrição
contaId obrigatóriocaminhoTipo: texto. Formato: ^cta_[0-9A-Z]{26}$.

Respostas

  • 200
    Conta encontrada.
  • 401
    Chave ou token ausente, inválido, revogado ou expirado.

    Erro: UNAUTHORIZED.

  • 404
    Recurso não existe ou não pertence a este integrador.

    Erro: RESOURCE_NOT_FOUND.

  • 429
    Limite de pedidos por minuto atingido.

    Cabeçalhos: Retry-After, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset. Erro: TOO_MANY_REQUESTS.

Campos da resposta 200 (data — objeto)
CampoTipoDescrição
id obrigatóriotextoFormato: ^cta_[0-9A-Z]{26}$.
codigoExterno obrigatóriotexto ou nulo
nome obrigatóriotexto
origem obrigatóriotextosubconta = criada pelo integrador; vinculada = conta Sellume do vendedor autorizada por OAuth. Valores: subconta, vinculada.
situacao obrigatóriotextoValores: ativa, pausada, encerrada.
ambiente obrigatóriotextoteste = chave sk_test_ (mídia de exemplo, sem custo); producao = chave sk_live_. Valores: teste, producao.
metadadosobjetoAté 20 chaves livres do integrador (texto até 500 caracteres). Não use dados pessoais sensíveis. Até 20 chaves. Chaves livres.
criadoEm obrigatóriotexto (date-time)
atualizadoEm obrigatóriotexto (date-time)
PATCH/contas/{contaId}

Atualizar nome, metadados ou situação da subconta#

situacao: pausada impede novas gerações da subconta (as em andamento terminam). Contas vinculadas por OAuth não podem ser pausadas por aqui: revogue a autorização.

  • Escopocontas:escrever
  • Chave de APIsim
  • Token OAuthnão (responde 403)

Parâmetros

ParâmetroOndeDescrição
contaId obrigatóriocaminhoTipo: texto. Formato: ^cta_[0-9A-Z]{26}$.

Corpo do pedido

application/json · obrigatório

CampoTipoDescrição
nometextoDe 2 a 160 caracteres.
situacaotextoValores: ativa, pausada.
metadadosobjetoAté 20 chaves livres do integrador (texto até 500 caracteres). Não use dados pessoais sensíveis. Até 20 chaves. Chaves livres.
exemplo
{
  "situacao": "pausada"
}

Respostas

  • 200
    Conta atualizada.
  • 400
    Dados inválidos.

    Erro: VALIDATION_ERROR.

  • 401
    Chave ou token ausente, inválido, revogado ou expirado.

    Erro: UNAUTHORIZED.

  • 404
    Recurso não existe ou não pertence a este integrador.

    Erro: RESOURCE_NOT_FOUND.

  • 429
    Limite de pedidos por minuto atingido.

    Cabeçalhos: Retry-After, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset. Erro: TOO_MANY_REQUESTS.

Campos da resposta 200 (data — objeto)
CampoTipoDescrição
id obrigatóriotextoFormato: ^cta_[0-9A-Z]{26}$.
codigoExterno obrigatóriotexto ou nulo
nome obrigatóriotexto
origem obrigatóriotextosubconta = criada pelo integrador; vinculada = conta Sellume do vendedor autorizada por OAuth. Valores: subconta, vinculada.
situacao obrigatóriotextoValores: ativa, pausada, encerrada.
ambiente obrigatóriotextoteste = chave sk_test_ (mídia de exemplo, sem custo); producao = chave sk_live_. Valores: teste, producao.
metadadosobjetoAté 20 chaves livres do integrador (texto até 500 caracteres). Não use dados pessoais sensíveis. Até 20 chaves. Chaves livres.
criadoEm obrigatóriotexto (date-time)
atualizadoEm obrigatóriotexto (date-time)
DELETE/contas/{contaId}

Encerrar a subconta#

Encerra a subconta: novas gerações são recusadas e os dados pessoais e mídias entram na rotina de exclusão (LGPD) depois do prazo de retenção do contrato. O extrato do integrador continua guardando o consumo dessa subconta (sem dados pessoais).

  • Escopocontas:escrever
  • Chave de APIsim
  • Token OAuthnão (responde 403)

Parâmetros

ParâmetroOndeDescrição
contaId obrigatóriocaminhoTipo: texto. Formato: ^cta_[0-9A-Z]{26}$.

Respostas

  • 202
    Encerramento aceito.
  • 401
    Chave ou token ausente, inválido, revogado ou expirado.

    Erro: UNAUTHORIZED.

  • 404
    Recurso não existe ou não pertence a este integrador.

    Erro: RESOURCE_NOT_FOUND.

  • 409
    Conflito de estado, duplicidade ou Idempotency-Key reutilizada com outro corpo.

    Erro: IDEMPOTENCY_KEY_REUSED.

Campos da resposta 202 (data — objeto)
CampoTipoDescrição
id obrigatóriotextoFormato: ^cta_[0-9A-Z]{26}$.
codigoExterno obrigatóriotexto ou nulo
nome obrigatóriotexto
origem obrigatóriotextosubconta = criada pelo integrador; vinculada = conta Sellume do vendedor autorizada por OAuth. Valores: subconta, vinculada.
situacao obrigatóriotextoValores: ativa, pausada, encerrada.
ambiente obrigatóriotextoteste = chave sk_test_ (mídia de exemplo, sem custo); producao = chave sk_live_. Valores: teste, producao.
metadadosobjetoAté 20 chaves livres do integrador (texto até 500 caracteres). Não use dados pessoais sensíveis. Até 20 chaves. Chaves livres.
criadoEm obrigatóriotexto (date-time)
atualizadoEm obrigatóriotexto (date-time)

Produtos#

Ficha do produto (única fonte de dados e fotos) e conferência dos requisitos mínimos.

GET/contas/{contaId}/produtos

Listar produtos da conta#

  • Escopoprodutos:ler
  • Chave de APIsim
  • Token OAuthsim

Parâmetros

ParâmetroOndeDescrição
contaId obrigatóriocaminhoTipo: texto. Formato: ^cta_[0-9A-Z]{26}$.
paginaconsultaNúmero da página, começando em 1. Tipo: inteiro. Padrão: 1. Mínimo 1.
limiteconsultaItens por página (padrão 100, máximo 100). Tipo: inteiro. Padrão: 100. De 1 a 100.
situacaoconsultaTipo: texto. Valores: conferindo, aprovado, aprovado_parcial, reprovado, falhou.

Respostas

  • 200
    Página de produtos.
  • 401
    Chave ou token ausente, inválido, revogado ou expirado.

    Erro: UNAUTHORIZED.

  • 404
    Recurso não existe ou não pertence a este integrador.

    Erro: RESOURCE_NOT_FOUND.

GET/contas/{contaId}/produtos/{codigo}

Detalhar o produto#

  • Escopoprodutos:ler
  • Chave de APIsim
  • Token OAuthsim

Parâmetros

ParâmetroOndeDescrição
contaId obrigatóriocaminhoTipo: texto. Formato: ^cta_[0-9A-Z]{26}$.
codigo obrigatóriocaminhoCódigo (SKU) do produto no sistema do integrador. Tipo: texto. De 1 a 120 caracteres.

Respostas

  • 200
    Produto encontrado.
  • 401
    Chave ou token ausente, inválido, revogado ou expirado.

    Erro: UNAUTHORIZED.

  • 404
    Recurso não existe ou não pertence a este integrador.

    Erro: RESOURCE_NOT_FOUND.

Campos da resposta 200 (data — objeto)
CampoTipoDescrição
id obrigatóriotextoFormato: ^prd_[0-9A-Z]{26}$.
contaId obrigatóriotextoFormato: ^cta_[0-9A-Z]{26}$.
codigo obrigatóriotexto
nometexto ou nulo
situacao obrigatóriotextoResumo da conferência da versão atual: aprovado = todos os tipos aprovados; aprovado_parcial = pelo menos um tipo aprovado; reprovado = nenhum tipo aprovado; falhou = a conferência não conseguiu terminar (ex.: nenhuma foto baixada) — veja erro. Valores: conferindo, aprovado, aprovado_parcial, reprovado, falhou.
versao obrigatóriointeiroMínimo 1.
conferenciaIdtexto ou nuloConferência da versão atual.
anuncioobjetoReferência do anúncio no marketplace — só metadado de rastreio. O Sellume não lê o marketplace; nada deste objeto entra na produção.
anuncio.marketplace obrigatóriotextoSó para o metadado anuncio (rastreio). O Sellume não lê nenhum marketplace. Valores: mercado_livre, shopee, amazon, magalu, americanas, shein, tiktok_shop, outro.
anuncio.idtextoAté 60 caracteres.
anuncio.urltexto (uri)Até 2048 caracteres.
fotosobjeto
fotos.recebidasinteiroMínimo 0.
fotos.aprovadasinteiroMínimo 0.
erroobjeto ou nulo
erro.typetexto
erro.messagetexto
criadoEm obrigatóriotexto (date-time)
atualizadoEm obrigatóriotexto (date-time)
PUT/contas/{contaId}/produtos/{codigo}

Enviar ou atualizar a ficha do produto (única fonte)#

Envia a ficha completa com fotos — a única fonte de dados e fotos do produto. O Sellume não busca nada no marketplace; anuncio é só rastreio. Campos compatíveis com Bling, Tiny, Magis5 e Shopping de Preços (veja FichaProduto, que lista os requisitos mínimos).

As fotos são baixadas pelo servidor do Sellume (proteção contra endereços internos, tipo pelos bytes, tamanho e resolução conferidos, cópia no armazenamento) e passam pela triagem. Fotos e dados valem como oficiais (responsabilidade do integrador, por contrato).

Cada envio com conteúdo diferente cria uma nova versão e inicia a conferência dessa versão automaticamente (o resultado chega no aviso produto.conferido). Gerações já pedidas usam a versão da hora do pedido. Envio idêntico ao anterior não cria versão nem nova conferência.

  • Escopoprodutos:escrever
  • Chave de APIsim
  • Token OAuthsim

Parâmetros

ParâmetroOndeDescrição
contaId obrigatóriocaminhoTipo: texto. Formato: ^cta_[0-9A-Z]{26}$.
codigo obrigatóriocaminhoCódigo (SKU) do produto no sistema do integrador. Tipo: texto. De 1 a 120 caracteres.

Corpo do pedido

application/json · obrigatório

Ficha do produto — única fonte de dados e fotos (o Sellume não lê marketplace). Fotos e dados valem como oficiais, sob responsabilidade do integrador. Campos compatíveis com Bling (codigo, nome, descricaoCurta→descricao, descricaoComplementar, marca, gtin, midia.imagens.externas→imagens, midia.video→video, dimensões, variacoes), Tiny/Olist (codigo, nome, descricao_complementar, marca, gtin, anexos/imagens_externas), Magis5 (sku, title, description, brand, ean, images) e Shopping de Preços (nome, descrição, marca, EAN, categoria, imagem). O codigo vem do caminho.

CampoTipoDescrição
codigotextoIgual ao código do caminho. Só leitura.
nome obrigatóriotextoDe 3 a 200 caracteres.
descricaotextoAté 10000 caracteres.
descricaoComplementartextoAté 10000 caracteres.
marcatextoAté 120 caracteres.
modelotextoAté 120 caracteres.
gtintextoEAN/GTIN. Formato: ^(\d{8}|\d{12,14})$.
categoriaobjeto
categoria.codigotextoAté 120 caracteres.
categoria.nometextoAté 200 caracteres.
categoria.caminhotextoEx.: Casa > Iluminação > Arandelas Até 500 caracteres.
atributoslista de objetoAté 60 itens.
atributos[].nome obrigatóriotextoDe 1 a 120 caracteres.
atributos[].valor obrigatóriotextoDe 1 a 500 caracteres.
imagens obrigatóriolista de objetoDe 1 a 20 itens.
imagens[].url obrigatóriotexto (uri)HTTPS público. JPEG, PNG ou WebP, de 1 KB a 15 MB; lado menor de pelo menos 800 px. Até 2048 caracteres.
imagens[].ordeminteiroDe 1 a 50.
imagens[].principalbooleanoA foto principal precisa ser do produto limpo: fora da embalagem, fundo liso, sem pessoa, só o item anunciado. Padrão: false.
videoobjetoVídeo de referência do produto (opcional; guardado, não usado pelo motor atual).
video.urltexto (uri)Até 2048 caracteres.
dimensoesobjeto
dimensoes.larguranúmeroMínimo 0.
dimensoes.alturanúmeroMínimo 0.
dimensoes.profundidadenúmeroMínimo 0.
dimensoes.unidadetextoValores: cm, mm, m. Padrão: cm.
dimensoes.pesoLiquidonúmeroMínimo 0.
dimensoes.pesoBrutonúmeroMínimo 0.
dimensoes.unidadePesotextoValores: kg, g. Padrão: kg.
variacoeslista de objetoAté 50 itens.
variacoes[].codigo obrigatóriotextoDe 1 a 120 caracteres.
variacoes[].nometextoAté 200 caracteres.
variacoes[].gtintextoFormato: ^(\d{8}|\d{12,14})$.
variacoes[].atributoslista de objetoAté 30 itens.
variacoes[].atributos[].nome obrigatóriotextoDe 1 a 120 caracteres.
variacoes[].atributos[].valor obrigatóriotextoDe 1 a 500 caracteres.
variacoes[].imagenslista de objetoAté 20 itens.
variacoes[].imagens[].url obrigatóriotexto (uri)HTTPS público. JPEG, PNG ou WebP, de 1 KB a 15 MB; lado menor de pelo menos 800 px. Até 2048 caracteres.
variacoes[].imagens[].ordeminteiroDe 1 a 50.
variacoes[].imagens[].principalbooleanoA foto principal precisa ser do produto limpo: fora da embalagem, fundo liso, sem pessoa, só o item anunciado. Padrão: false.
composicaoOfertalista de objetoO que vem na oferta e quantas unidades. Obrigatório em kit ou oferta com mais de 1 unidade. Até 30 itens.
composicaoOferta[].item obrigatóriotextoDe 1 a 120 caracteres.
composicaoOferta[].quantidade obrigatóriointeiroDe 1 a 999.
garantiatextoEx.: 12 meses contra defeitos de fabricação. Até 300 caracteres.
avaliacoeslista de objetoAté 50 itens.
avaliacoes[].notainteiroDe 1 a 5.
avaliacoes[].texto obrigatóriotextoDe 10 a 2000 caracteres.
avaliacoes[].datatexto (date)
perguntaslista de objetoAté 50 itens.
perguntas[].pergunta obrigatóriotextoDe 5 a 1000 caracteres.
perguntas[].respostatextoAté 2000 caracteres.
provaSocialobjetoVolume declarado pelo integrador (oficial por contrato).
provaSocial.totalAvaliacoesinteiroMínimo 0.
provaSocial.notaMedianúmeroDe 1 a 5.
provaSocial.vendidosinteiroMínimo 0.
anuncioobjetoReferência do anúncio no marketplace — só metadado de rastreio. O Sellume não lê o marketplace; nada deste objeto entra na produção.
anuncio.marketplace obrigatóriotextoSó para o metadado anuncio (rastreio). O Sellume não lê nenhum marketplace. Valores: mercado_livre, shopee, amazon, magalu, americanas, shein, tiktok_shop, outro.
anuncio.idtextoAté 60 caracteres.
anuncio.urltexto (uri)Até 2048 caracteres.
exemplo
{
  "nome": "Arandela LED de parede 12W luz quente",
  "descricao": "Arandela de alumínio com difusor de vidro jateado, ideal para corredores e varandas.",
  "descricaoComplementar": "Acompanha kit de fixação. Bivolt.",
  "marca": "Lumina Casa",
  "modelo": "AR-12Q",
  "gtin": "7891234567895",
  "categoria": {
    "codigo": "ilum-arandelas",
    "nome": "Arandelas",
    "caminho": "Casa > Iluminação > Arandelas"
  },
  "atributos": [
    {
      "nome": "Cor",
      "valor": "Preto fosco"
    },
    {
      "nome": "Potência",
      "valor": "12 W"
    },
    {
      "nome": "Material",
      "valor": "Alumínio"
    }
  ],
  "imagens": [
    {
      "url": "https://cdn.erp.exemplo.com.br/p/arandela-1.jpg",
      "ordem": 1,
      "principal": true
    },
    {
      "url": "https://cdn.erp.exemplo.com.br/p/arandela-2.jpg",
      "ordem": 2,
      "principal": false
    }
  ],
  "dimensoes": {
    "largura": 12,
    "altura": 25,
    "profundidade": 8,
    "unidade": "cm",
    "pesoLiquido": 0.6,
    "pesoBruto": 0.8,
    "unidadePeso": "kg"
  },
  "composicaoOferta": [
    {
      "item": "Arandela",
      "quantidade": 1
    }
  ],
  "garantia": "12 meses contra defeitos de fabricação",
  "avaliacoes": [
    {
      "nota": 5,
      "texto": "Iluminou bem o corredor e a instalação foi simples."
    }
  ],
  "perguntas": [
    {
      "pergunta": "Serve para área externa coberta?",
      "resposta": "Sim, para área coberta."
    }
  ],
  "anuncio": {
    "marketplace": "mercado_livre",
    "id": "MLB4123456789"
  }
}

Respostas

  • 200
    Ficha atualizada (nova versão; conferência iniciada).
  • 201
    Produto criado.
  • 400
    Dados inválidos.

    Erro: VALIDATION_ERROR.

  • 401
    Chave ou token ausente, inválido, revogado ou expirado.

    Erro: UNAUTHORIZED.

  • 404
    Recurso não existe ou não pertence a este integrador.

    Erro: RESOURCE_NOT_FOUND.

  • 413
    Corpo ou foto acima do tamanho permitido.

    Erro: PAYLOAD_TOO_LARGE.

  • 429
    Limite de pedidos por minuto atingido.

    Cabeçalhos: Retry-After, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset. Erro: TOO_MANY_REQUESTS.

Campos da resposta 200 (data — objeto)
CampoTipoDescrição
id obrigatóriotextoFormato: ^prd_[0-9A-Z]{26}$.
contaId obrigatóriotextoFormato: ^cta_[0-9A-Z]{26}$.
codigo obrigatóriotexto
nometexto ou nulo
situacao obrigatóriotextoResumo da conferência da versão atual: aprovado = todos os tipos aprovados; aprovado_parcial = pelo menos um tipo aprovado; reprovado = nenhum tipo aprovado; falhou = a conferência não conseguiu terminar (ex.: nenhuma foto baixada) — veja erro. Valores: conferindo, aprovado, aprovado_parcial, reprovado, falhou.
versao obrigatóriointeiroMínimo 1.
conferenciaIdtexto ou nuloConferência da versão atual.
anuncioobjetoReferência do anúncio no marketplace — só metadado de rastreio. O Sellume não lê o marketplace; nada deste objeto entra na produção.
anuncio.marketplace obrigatóriotextoSó para o metadado anuncio (rastreio). O Sellume não lê nenhum marketplace. Valores: mercado_livre, shopee, amazon, magalu, americanas, shein, tiktok_shop, outro.
anuncio.idtextoAté 60 caracteres.
anuncio.urltexto (uri)Até 2048 caracteres.
fotosobjeto
fotos.recebidasinteiroMínimo 0.
fotos.aprovadasinteiroMínimo 0.
erroobjeto ou nulo
erro.typetexto
erro.messagetexto
criadoEm obrigatóriotexto (date-time)
atualizadoEm obrigatóriotexto (date-time)
Campos da resposta 201 (data — objeto)
CampoTipoDescrição
id obrigatóriotextoFormato: ^prd_[0-9A-Z]{26}$.
contaId obrigatóriotextoFormato: ^cta_[0-9A-Z]{26}$.
codigo obrigatóriotexto
nometexto ou nulo
situacao obrigatóriotextoResumo da conferência da versão atual: aprovado = todos os tipos aprovados; aprovado_parcial = pelo menos um tipo aprovado; reprovado = nenhum tipo aprovado; falhou = a conferência não conseguiu terminar (ex.: nenhuma foto baixada) — veja erro. Valores: conferindo, aprovado, aprovado_parcial, reprovado, falhou.
versao obrigatóriointeiroMínimo 1.
conferenciaIdtexto ou nuloConferência da versão atual.
anuncioobjetoReferência do anúncio no marketplace — só metadado de rastreio. O Sellume não lê o marketplace; nada deste objeto entra na produção.
anuncio.marketplace obrigatóriotextoSó para o metadado anuncio (rastreio). O Sellume não lê nenhum marketplace. Valores: mercado_livre, shopee, amazon, magalu, americanas, shein, tiktok_shop, outro.
anuncio.idtextoAté 60 caracteres.
anuncio.urltexto (uri)Até 2048 caracteres.
fotosobjeto
fotos.recebidasinteiroMínimo 0.
fotos.aprovadasinteiroMínimo 0.
erroobjeto ou nulo
erro.typetexto
erro.messagetexto
criadoEm obrigatóriotexto (date-time)
atualizadoEm obrigatóriotexto (date-time)
DELETE/contas/{contaId}/produtos/{codigo}

Remover o produto#

Remove o produto da conta. Gerações já entregues continuam no extrato e em GET /geracoes.

  • Escopoprodutos:escrever
  • Chave de APIsim
  • Token OAuthsim

Parâmetros

ParâmetroOndeDescrição
contaId obrigatóriocaminhoTipo: texto. Formato: ^cta_[0-9A-Z]{26}$.
codigo obrigatóriocaminhoCódigo (SKU) do produto no sistema do integrador. Tipo: texto. De 1 a 120 caracteres.

Respostas

  • 204
    Produto removido.
  • 401
    Chave ou token ausente, inválido, revogado ou expirado.

    Erro: UNAUTHORIZED.

  • 404
    Recurso não existe ou não pertence a este integrador.

    Erro: RESOURCE_NOT_FOUND.

GET/produtos/{produtoId}/conferencia

Último resultado da conferência da versão atual#

  • Escopoprodutos:ler
  • Chave de APIsim
  • Token OAuthsim

Parâmetros

ParâmetroOndeDescrição
produtoId obrigatóriocaminhoTipo: texto. Formato: ^prd_[0-9A-Z]{26}$.

Respostas

  • 200
    Última conferência da versão atual (concluída ou em andamento).
  • 401
    Chave ou token ausente, inválido, revogado ou expirado.

    Erro: UNAUTHORIZED.

  • 404
    Recurso não existe ou não pertence a este integrador.

    Erro: RESOURCE_NOT_FOUND.

Campos da resposta 200 (data — objeto)
CampoTipoDescrição
id obrigatóriotextoFormato: ^cnf_[0-9A-Z]{26}$.
produtoId obrigatóriotextoFormato: ^prd_[0-9A-Z]{26}$.
versaoProduto obrigatóriointeiroMínimo 1.
politica obrigatóriotextoVersão das regras usada (ex. integradores.requisitos.v1).
situacao obrigatóriotextoValores: em_andamento, concluida, falhou.
conferidoEmtexto (date-time) ou nulo
resultados obrigatóriolista de objeto
resultados[].tipo obrigatóriotextoValores: galeria, video_apresentacao, video_cinepremium.
resultados[].aprovado obrigatóriobooleano
resultados[].creditosinteiroPreço na tabela vigente do integrador (na galeria, para a maior quantidade aprovada). Mínimo 0.
resultados[].quantidadeMaximaImagensinteiro ou nuloSó galeria: maior quantidade que o motor sustenta (3 a 10).
resultados[].quantidadesAprovadaslista de inteiroSó galeria: quais das opções 3, 6 e 10 podem ser pedidas.
resultados[].notaVideointeiro ou nuloSó vídeos. De 0 a 10.
resultados[].pendencias obrigatóriolista de objeto
resultados[].pendencias[].codigo obrigatóriotextoCódigo estável do que falta ou está fraco. O "como corrigir" de cada código está no catálogo (GET /integracao/erros e docs.sellume.com.br). Valores: NOME_AUSENTE, FOTO_AUSENTE, FOTO_PRINCIPAL_NAO_E_PRODUTO_LIMPO, CARACTERISTICAS_AUSENTES, DESCRICAO_CURTA, OFERTA_QUANTIDADE_AMBIGUA, GALERIA_ABAIXO_DO_MINIMO, GALERIA_QUANTIDADE_ACIMA_DO_SUPORTADO, VIDEO_NOTA_BAIXA, FOTO_SEM_PESSOA_AUSENTE, CINEPREMIUM_FOTOS_INSUFICIENTES, ROUPA_FOTOS_SEM_PESSOA_INSUFICIENTES, CONFERENCIA_FALHOU, FOTO_DOWNLOAD_FALHOU, FOTO_FORMATO_INVALIDO, FOTO_TAMANHO_INVALIDO, FOTO_RESOLUCAO_BAIXA, FOTO_DUPLICADA, FOTO_COM_CRIANCA, FOTO_COM_PESSOA, FOTO_AMBIENTADA, FOTO_EMBALAGEM, FOTO_INFOGRAFICO, FOTO_OUTRA_VARIANTE, FOTO_PROPORCAO_EXTREMA, POUCAS_CARACTERISTICAS, POUCOS_ANGULOS, FOTOS_FUNDO_LISO_INSUFICIENTES, SEM_AVALIACOES_OU_PERGUNTAS, SEM_GARANTIA, MARCA_AUSENTE.
resultados[].pendencias[].severidade obrigatóriotextobloqueio reprova o tipo; fraco aprova, mas a qualidade cai. Valores: bloqueio, fraco.
resultados[].pendencias[].campotextoCampo da ficha (ex. imagens[2], atributos, descricao).
resultados[].pendencias[].mensagem obrigatóriotextoEm português, com o número que faltou.
resultados[].pendencias[].comoCorrigirtexto
fotosobjeto
fotos.recebidasinteiroMínimo 0.
fotos.aprovadasinteiroMínimo 0.
fotos.principaltexto ou nuloFoto usada como principal depois da triagem.
fotos.itenslista de objeto
fotos.itens[].id obrigatóriotextofoto-1, foto-2… na ordem da ficha.
fotos.itens[].url obrigatóriotexto (uri)
fotos.itens[].situacao obrigatóriotextoreprovada = não serve (download, formato, tamanho, resolução, criança); descartada = serve, mas sai do vídeo porque há fotos melhores. Valores: aprovada, descartada, reprovada.
fotos.itens[].largurainteiro
fotos.itens[].alturainteiro
fotos.itens[].tipotextoValores: produto_limpo, produto_em_uso, infografico, embalagem.
fotos.itens[].fundotextoValores: liso, ambiente.
fotos.itens[].pessoastextoValores: nenhuma, adultos, crianca_ou_idade_incerta.
fotos.itens[].outraVarianteOuUnidadesbooleano
fotos.itens[].codigoslista de texto
erroobjeto ou nulo
erro.typetexto
erro.messagetexto
POST/produtos/{produtoId}/conferencia

Conferir os requisitos mínimos (obrigatório antes de gerar, grátis)#

Confere a versão atual do produto contra os requisitos mínimos de qualidade do Sellume e responde aprovado ou reprovado por tipo de geração (galeria, Apresentação, CinePremium), com a lista exata do que falta (bloqueio) ou está fraco (fraco), em códigos estáveis e mensagens em português. Não cobra nada.

É obrigatória: POST /galerias e POST /videos só aceitam produto cuja versão atual tenha conferência concluída e aprovada para o tipo pedido (e, na galeria, para a quantidade pedida). Caso contrário a geração é recusada antes de qualquer custo com PRODUCT_NOT_VERIFIED (sem conferência da versão atual) ou PRODUCT_REQUIREMENTS_NOT_MET (reprovado).

A conferência já começa sozinha a cada nova versão da ficha. Este endpoint devolve o resultado pronto (200) ou inicia/aguarda a conferência (202, resultado no aviso produto.conferido). Uma conferência vale para a versão do produto e para a versão das regras (politica); se as regras mudarem, o produto precisa ser conferido de novo. Limite: 10 conferências por produto por dia.

  • Escopoprodutos:ler
  • Chave de APIsim
  • Token OAuthsim

Parâmetros

ParâmetroOndeDescrição
produtoId obrigatóriocaminhoTipo: texto. Formato: ^prd_[0-9A-Z]{26}$.

Respostas

  • 200
    Conferência concluída para a versão atual.
  • 202
    Conferência em andamento para a versão atual.
  • 401
    Chave ou token ausente, inválido, revogado ou expirado.

    Erro: UNAUTHORIZED.

  • 404
    Recurso não existe ou não pertence a este integrador.

    Erro: RESOURCE_NOT_FOUND.

  • 429
    Limite de pedidos por minuto atingido.

    Cabeçalhos: Retry-After, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset. Erro: TOO_MANY_REQUESTS.

Campos da resposta 200 (data — objeto)
CampoTipoDescrição
id obrigatóriotextoFormato: ^cnf_[0-9A-Z]{26}$.
produtoId obrigatóriotextoFormato: ^prd_[0-9A-Z]{26}$.
versaoProduto obrigatóriointeiroMínimo 1.
politica obrigatóriotextoVersão das regras usada (ex. integradores.requisitos.v1).
situacao obrigatóriotextoValores: em_andamento, concluida, falhou.
conferidoEmtexto (date-time) ou nulo
resultados obrigatóriolista de objeto
resultados[].tipo obrigatóriotextoValores: galeria, video_apresentacao, video_cinepremium.
resultados[].aprovado obrigatóriobooleano
resultados[].creditosinteiroPreço na tabela vigente do integrador (na galeria, para a maior quantidade aprovada). Mínimo 0.
resultados[].quantidadeMaximaImagensinteiro ou nuloSó galeria: maior quantidade que o motor sustenta (3 a 10).
resultados[].quantidadesAprovadaslista de inteiroSó galeria: quais das opções 3, 6 e 10 podem ser pedidas.
resultados[].notaVideointeiro ou nuloSó vídeos. De 0 a 10.
resultados[].pendencias obrigatóriolista de objeto
resultados[].pendencias[].codigo obrigatóriotextoCódigo estável do que falta ou está fraco. O "como corrigir" de cada código está no catálogo (GET /integracao/erros e docs.sellume.com.br). Valores: NOME_AUSENTE, FOTO_AUSENTE, FOTO_PRINCIPAL_NAO_E_PRODUTO_LIMPO, CARACTERISTICAS_AUSENTES, DESCRICAO_CURTA, OFERTA_QUANTIDADE_AMBIGUA, GALERIA_ABAIXO_DO_MINIMO, GALERIA_QUANTIDADE_ACIMA_DO_SUPORTADO, VIDEO_NOTA_BAIXA, FOTO_SEM_PESSOA_AUSENTE, CINEPREMIUM_FOTOS_INSUFICIENTES, ROUPA_FOTOS_SEM_PESSOA_INSUFICIENTES, CONFERENCIA_FALHOU, FOTO_DOWNLOAD_FALHOU, FOTO_FORMATO_INVALIDO, FOTO_TAMANHO_INVALIDO, FOTO_RESOLUCAO_BAIXA, FOTO_DUPLICADA, FOTO_COM_CRIANCA, FOTO_COM_PESSOA, FOTO_AMBIENTADA, FOTO_EMBALAGEM, FOTO_INFOGRAFICO, FOTO_OUTRA_VARIANTE, FOTO_PROPORCAO_EXTREMA, POUCAS_CARACTERISTICAS, POUCOS_ANGULOS, FOTOS_FUNDO_LISO_INSUFICIENTES, SEM_AVALIACOES_OU_PERGUNTAS, SEM_GARANTIA, MARCA_AUSENTE.
resultados[].pendencias[].severidade obrigatóriotextobloqueio reprova o tipo; fraco aprova, mas a qualidade cai. Valores: bloqueio, fraco.
resultados[].pendencias[].campotextoCampo da ficha (ex. imagens[2], atributos, descricao).
resultados[].pendencias[].mensagem obrigatóriotextoEm português, com o número que faltou.
resultados[].pendencias[].comoCorrigirtexto
fotosobjeto
fotos.recebidasinteiroMínimo 0.
fotos.aprovadasinteiroMínimo 0.
fotos.principaltexto ou nuloFoto usada como principal depois da triagem.
fotos.itenslista de objeto
fotos.itens[].id obrigatóriotextofoto-1, foto-2… na ordem da ficha.
fotos.itens[].url obrigatóriotexto (uri)
fotos.itens[].situacao obrigatóriotextoreprovada = não serve (download, formato, tamanho, resolução, criança); descartada = serve, mas sai do vídeo porque há fotos melhores. Valores: aprovada, descartada, reprovada.
fotos.itens[].largurainteiro
fotos.itens[].alturainteiro
fotos.itens[].tipotextoValores: produto_limpo, produto_em_uso, infografico, embalagem.
fotos.itens[].fundotextoValores: liso, ambiente.
fotos.itens[].pessoastextoValores: nenhuma, adultos, crianca_ou_idade_incerta.
fotos.itens[].outraVarianteOuUnidadesbooleano
fotos.itens[].codigoslista de texto
erroobjeto ou nulo
erro.typetexto
erro.messagetexto
resposta 200
{
  "data": {
    "id": "cnf_01J9Z7Q2W3E4R5T6Y7U8I9O0P1",
    "produtoId": "prd_01J9Z7A1B2C3D4E5F6G7H8J9K0",
    "versaoProduto": 3,
    "politica": "integradores.requisitos.v1",
    "situacao": "concluida",
    "conferidoEm": "2026-10-10T14:06:10Z",
    "resultados": [
      {
        "tipo": "galeria",
        "aprovado": true,
        "creditos": 60,
        "quantidadeMaximaImagens": 6,
        "quantidadesAprovadas": [
          3,
          6
        ],
        "pendencias": [
          {
            "codigo": "GALERIA_QUANTIDADE_ACIMA_DO_SUPORTADO",
            "severidade": "fraco",
            "campo": "atributos",
            "mensagem": "Com as informações atuais a galeria sustenta até 6 imagens. Para 10, envie mais características do produto."
          }
        ]
      },
      {
        "tipo": "video_apresentacao",
        "aprovado": true,
        "creditos": 120,
        "notaVideo": 7,
        "pendencias": [
          {
            "codigo": "SEM_AVALIACOES_OU_PERGUNTAS",
            "severidade": "fraco",
            "campo": "avaliacoes",
            "mensagem": "Sem avaliações nem perguntas, a fala não responde dúvidas de quem compra."
          }
        ]
      },
      {
        "tipo": "video_cinepremium",
        "aprovado": false,
        "creditos": 400,
        "notaVideo": 7,
        "pendencias": [
          {
            "codigo": "CINEPREMIUM_FOTOS_INSUFICIENTES",
            "severidade": "bloqueio",
            "campo": "imagens",
            "mensagem": "O CinePremium precisa de pelo menos 3 fotos aprovadas do produto, de lados diferentes. Há 2."
          }
        ]
      }
    ],
    "fotos": {
      "recebidas": 4,
      "aprovadas": 2,
      "principal": "foto-1",
      "itens": [
        {
          "id": "foto-1",
          "url": "https://cdn.erp.exemplo.com.br/p/arandela-1.jpg",
          "situacao": "aprovada",
          "largura": 1200,
          "altura": 1200,
          "tipo": "produto_limpo",
          "fundo": "liso",
          "pessoas": "nenhuma"
        },
        {
          "id": "foto-2",
          "url": "https://cdn.erp.exemplo.com.br/p/arandela-2.jpg",
          "situacao": "aprovada",
          "largura": 1000,
          "altura": 1000,
          "tipo": "produto_limpo",
          "fundo": "liso",
          "pessoas": "nenhuma"
        },
        {
          "id": "foto-3",
          "url": "https://cdn.erp.exemplo.com.br/p/arandela-3.jpg",
          "situacao": "descartada",
          "tipo": "produto_em_uso",
          "fundo": "ambiente",
          "pessoas": "adultos",
          "codigos": [
            "FOTO_COM_PESSOA"
          ]
        },
        {
          "id": "foto-4",
          "url": "https://cdn.erp.exemplo.com.br/p/arandela-4.jpg",
          "situacao": "reprovada",
          "largura": 480,
          "altura": 480,
          "codigos": [
            "FOTO_RESOLUCAO_BAIXA"
          ]
        }
      ]
    }
  }
}
Campos da resposta 202 (data — objeto)
CampoTipoDescrição
id obrigatóriotextoFormato: ^cnf_[0-9A-Z]{26}$.
produtoId obrigatóriotextoFormato: ^prd_[0-9A-Z]{26}$.
versaoProduto obrigatóriointeiroMínimo 1.
politica obrigatóriotextoVersão das regras usada (ex. integradores.requisitos.v1).
situacao obrigatóriotextoValores: em_andamento, concluida, falhou.
conferidoEmtexto (date-time) ou nulo
resultados obrigatóriolista de objeto
resultados[].tipo obrigatóriotextoValores: galeria, video_apresentacao, video_cinepremium.
resultados[].aprovado obrigatóriobooleano
resultados[].creditosinteiroPreço na tabela vigente do integrador (na galeria, para a maior quantidade aprovada). Mínimo 0.
resultados[].quantidadeMaximaImagensinteiro ou nuloSó galeria: maior quantidade que o motor sustenta (3 a 10).
resultados[].quantidadesAprovadaslista de inteiroSó galeria: quais das opções 3, 6 e 10 podem ser pedidas.
resultados[].notaVideointeiro ou nuloSó vídeos. De 0 a 10.
resultados[].pendencias obrigatóriolista de objeto
resultados[].pendencias[].codigo obrigatóriotextoCódigo estável do que falta ou está fraco. O "como corrigir" de cada código está no catálogo (GET /integracao/erros e docs.sellume.com.br). Valores: NOME_AUSENTE, FOTO_AUSENTE, FOTO_PRINCIPAL_NAO_E_PRODUTO_LIMPO, CARACTERISTICAS_AUSENTES, DESCRICAO_CURTA, OFERTA_QUANTIDADE_AMBIGUA, GALERIA_ABAIXO_DO_MINIMO, GALERIA_QUANTIDADE_ACIMA_DO_SUPORTADO, VIDEO_NOTA_BAIXA, FOTO_SEM_PESSOA_AUSENTE, CINEPREMIUM_FOTOS_INSUFICIENTES, ROUPA_FOTOS_SEM_PESSOA_INSUFICIENTES, CONFERENCIA_FALHOU, FOTO_DOWNLOAD_FALHOU, FOTO_FORMATO_INVALIDO, FOTO_TAMANHO_INVALIDO, FOTO_RESOLUCAO_BAIXA, FOTO_DUPLICADA, FOTO_COM_CRIANCA, FOTO_COM_PESSOA, FOTO_AMBIENTADA, FOTO_EMBALAGEM, FOTO_INFOGRAFICO, FOTO_OUTRA_VARIANTE, FOTO_PROPORCAO_EXTREMA, POUCAS_CARACTERISTICAS, POUCOS_ANGULOS, FOTOS_FUNDO_LISO_INSUFICIENTES, SEM_AVALIACOES_OU_PERGUNTAS, SEM_GARANTIA, MARCA_AUSENTE.
resultados[].pendencias[].severidade obrigatóriotextobloqueio reprova o tipo; fraco aprova, mas a qualidade cai. Valores: bloqueio, fraco.
resultados[].pendencias[].campotextoCampo da ficha (ex. imagens[2], atributos, descricao).
resultados[].pendencias[].mensagem obrigatóriotextoEm português, com o número que faltou.
resultados[].pendencias[].comoCorrigirtexto
fotosobjeto
fotos.recebidasinteiroMínimo 0.
fotos.aprovadasinteiroMínimo 0.
fotos.principaltexto ou nuloFoto usada como principal depois da triagem.
fotos.itenslista de objeto
fotos.itens[].id obrigatóriotextofoto-1, foto-2… na ordem da ficha.
fotos.itens[].url obrigatóriotexto (uri)
fotos.itens[].situacao obrigatóriotextoreprovada = não serve (download, formato, tamanho, resolução, criança); descartada = serve, mas sai do vídeo porque há fotos melhores. Valores: aprovada, descartada, reprovada.
fotos.itens[].largurainteiro
fotos.itens[].alturainteiro
fotos.itens[].tipotextoValores: produto_limpo, produto_em_uso, infografico, embalagem.
fotos.itens[].fundotextoValores: liso, ambiente.
fotos.itens[].pessoastextoValores: nenhuma, adultos, crianca_ou_idade_incerta.
fotos.itens[].outraVarianteOuUnidadesbooleano
fotos.itens[].codigoslista de texto
erroobjeto ou nulo
erro.typetexto
erro.messagetexto
resposta 202
{
  "data": {
    "id": "cnf_01J9Z7Q2W3E4R5T6Y7U8I9O0P1",
    "produtoId": "prd_01J9Z7A1B2C3D4E5F6G7H8J9K0",
    "versaoProduto": 3,
    "politica": "integradores.requisitos.v1",
    "situacao": "em_andamento",
    "resultados": []
  }
}

Gerações#

Galerias de imagens, vídeos (Apresentação e CinePremium) e edições de imagem.

POST/galerias

Criar galeria de imagens (3, 6 ou 10)#

Exige a versão atual do produto aprovada na conferência para galeria e quantidadeImagens entre as quantidadesAprovadas; senão responde 422 (PRODUCT_NOT_VERIFIED ou PRODUCT_REQUIREMENTS_NOT_MET) sem reservar nada. Aprovado: reserva os créditos na carteira do integrador e enfileira a galeria. A cobrança só é liquidada na entrega; falha do Sellume devolve os créditos. Entrega parcial cobra só as imagens entregues.

  • Escopogeracoes:criar
  • Chave de APIsim
  • Token OAuthsim

Parâmetros

ParâmetroOndeDescrição
Idempotency-Key obrigatóriocabeçalhoObrigatório em todo POST que gasta crédito. Valor único por pedido (sugestão: UUID v4), de 8 a 120 caracteres. Guardado por 7 dias por integrador e ambiente. Mesma chave + mesmo corpo devolve a resposta original sem nova cobrança; mesma chave + corpo diferente devolve 409 com IDEMPOTENCY_KEY_REUSED. Tipo: texto. De 8 a 120 caracteres. Formato: ^[A-Za-z0-9_\-:.]+$.

Corpo do pedido

application/json · obrigatório

CampoTipoDescrição
produtoId obrigatóriotextoFormato: ^prd_[0-9A-Z]{26}$.
quantidadeImagens obrigatóriointeiroValores: 3, 6, 10.
objetivotextoValores: conversao. Padrão: conversao.
referenciaExternatextoCódigo livre do integrador (volta no extrato e nos avisos). Até 120 caracteres.
modotextoSó com a chave sk_test_. simulado (padrão) devolve mídia de exemplo e não gasta nada; real gera de verdade no motor e gasta créditos de teste (verba liberada pelo Sellume para homologar a integração antes de contratar). Sem créditos de teste suficientes: 402 INSUFFICIENT_CREDITS, nada cobrado. Com sk_live_ o campo não se aplica (400 VALIDATION_ERROR, código NAO_SE_APLICA): na produção toda geração é real. Valores: simulado, real. Padrão: simulado.
exemplo
{
  "produtoId": "prd_01J9Z7A1B2C3D4E5F6G7H8J9K0",
  "quantidadeImagens": 6,
  "objetivo": "conversao",
  "referenciaExterna": "pedido-erp-55120"
}

Respostas

  • 202
    Pedido recebido; a geração é assíncrona.

    Cabeçalhos: Location, Idempotent-Replayed, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-Request-Id.

  • 400
    Dados inválidos.

    Erro: VALIDATION_ERROR.

  • 401
    Chave ou token ausente, inválido, revogado ou expirado.

    Erro: UNAUTHORIZED.

  • 402
    Saldo insuficiente — a cota do mês (teto do plano) acabou e não há crédito avulso guardado, ou o saldo pré-pago não cobre. Nada foi cobrado.

    Erro: INSUFFICIENT_CREDITS.

  • 403
    Escopo insuficiente, integrador ou conta pausada, ou origem não autorizada.

    Erro: FORBIDDEN.

  • 404
    Recurso não existe ou não pertence a este integrador.

    Erro: RESOURCE_NOT_FOUND.

  • 409
    Conflito de estado, duplicidade ou Idempotency-Key reutilizada com outro corpo.

    Erro: IDEMPOTENCY_KEY_REUSED.

  • 422
    Produto sem conferência aprovada da versão atual para este tipo de geração. Recusado antes de qualquer custo. PRODUCT_NOT_VERIFIED = a versão atual ainda não foi conferida (ou a conferência está em andamento); PRODUCT_REQUIREMENTS_NOT_MET = conferida e reprovada para este tipo (ou a quantidade de imagens pedida passa do máximo sustentado). fields traz as pendências de bloqueio.

    Erro: PRODUCT_REQUIREMENTS_NOT_MET, PRODUCT_NOT_VERIFIED.

  • 429
    Limite de pedidos por minuto atingido.

    Cabeçalhos: Retry-After, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset. Erro: TOO_MANY_REQUESTS.

  • 503
    Capacidade temporariamente indisponível (manutenção ou fila cheia).

    Cabeçalhos: Retry-After. Erro: SERVICE_UNAVAILABLE.

Campos da resposta 202 (data — objeto)
CampoTipoDescrição
id obrigatóriotextoFormato: ^ger_[0-9A-Z]{26}$.
tipo obrigatóriotextoValores: galeria, video_apresentacao, video_cinepremium, edicao_imagem.
situacao obrigatóriotextona_fila = recebida, crédito reservado, esperando a vaga na fila justa (com fila: posição e tempo estimado; o vídeo também prepara a fala enquanto espera); gerando = ganhou a vaga e está em produção (aviso geracao.iniciada); concluida = tudo entregue; parcial = parte entregue (cobra só o entregue); falhou = nada entregue (créditos devolvidos); cancelada = cancelada na fila (POST /geracoes/{geracaoId}/cancelar, créditos devolvidos). Valores: na_fila, gerando, concluida, parcial, falhou, cancelada.
creditosReservadosinteiroMínimo 0.
ambientetextoteste = chave sk_test_ (mídia de exemplo, sem custo); producao = chave sk_live_. Valores: teste, producao.
resposta 202
{
  "data": {
    "id": "ger_01J9Z8C4D5E6F7G8H9J0K1L2M3",
    "tipo": "galeria",
    "situacao": "na_fila",
    "creditosReservados": 60,
    "ambiente": "producao"
  }
}
POST/videos

Criar vídeo Apresentação ou CinePremium (fala automática)#

Cria um vídeo vertical do produto. Exige a versão atual aprovada na conferência para o tipo (video_apresentacao ou video_cinepremium); senão responde 422 sem reservar nada.

A fala é automática: o sistema gera as opções de fala e escolhe a melhor pelos mesmos critérios e travas do fluxo atual (fato sem prova na ficha, CTA, duração). Não há etapa de escolha nem endpoint para escolher a fala. A fala usada volta no resultado (resultados.video.fala e fala na geração). Se nenhuma opção passar nas travas, a geração falha antes de qualquer render pago, os créditos voltam e o erro vem como VIDEO_SPEECH_NOT_APPROVED. Depois que a geração começa, o vídeo não pode ser cancelado.

Como a fala é escolhida: só contam as opções que passaram nas travas determinísticas; entre elas, a de maior nota do crítico quando a revisão existe; empate → a recomendada pelo motor e, depois, a safe (no CinePremium, empate → safe).

Fila justa (13/10/2026): ninguém é recusado por capacidade. O pedido entra na fila (na_fila, com fila.posicao e fila.esperaEstimadaSegundos) e o crédito fica reservado; o teto de vídeos do plano (Base 1, Growth 2, Business 3, Enterprise 4; Apresentação e CinePremium contam igual) limita só quantos rodam ao mesmo tempo. Ao ganhar a vaga passa a gerando (aviso geracao.iniciada). Um vídeo por produto por vez (409). Com chave sk_test_ volta um vídeo de exemplo (sem motor e sem crédito), com a escolha da fala simulada, concluído em cerca de 15 s.

  • Escopogeracoes:criar
  • Chave de APIsim
  • Token OAuthsim

Parâmetros

ParâmetroOndeDescrição
Idempotency-Key obrigatóriocabeçalhoObrigatório em todo POST que gasta crédito. Valor único por pedido (sugestão: UUID v4), de 8 a 120 caracteres. Guardado por 7 dias por integrador e ambiente. Mesma chave + mesmo corpo devolve a resposta original sem nova cobrança; mesma chave + corpo diferente devolve 409 com IDEMPOTENCY_KEY_REUSED. Tipo: texto. De 8 a 120 caracteres. Formato: ^[A-Za-z0-9_\-:.]+$.

Corpo do pedido

application/json · obrigatório

CampoTipoDescrição
produtoId obrigatóriotextoFormato: ^prd_[0-9A-Z]{26}$.
tipo obrigatóriotextoValores: apresentacao, cinepremium.
avatartextoautomatico ou o codigo de um avatar ativo de GET /avatares. Só para apresentacao. Código inexistente ou inativo → 400 com AVATAR_INDISPONIVEL. Padrão: automatico.
voztextoVoz da narração do CinePremium. Só para cinepremium (na Apresentação a voz é a do avatar). Valores: automatica, masculina, feminina. Padrão: automatica.
formatotextoValores: 9:16. Padrão: 9:16.
referenciaExternatextoAté 120 caracteres.
modotextoSó com a chave sk_test_. simulado (padrão) devolve mídia de exemplo e não gasta nada; real gera de verdade no motor e gasta créditos de teste (verba liberada pelo Sellume para homologar a integração antes de contratar). Sem créditos de teste suficientes: 402 INSUFFICIENT_CREDITS, nada cobrado. Com sk_live_ o campo não se aplica (400 VALIDATION_ERROR, código NAO_SE_APLICA): na produção toda geração é real. Valores: simulado, real. Padrão: simulado.
exemplo
{
  "produtoId": "prd_01J9Z7A1B2C3D4E5F6G7H8J9K0",
  "tipo": "apresentacao",
  "avatar": "automatico",
  "referenciaExterna": "pedido-erp-55121"
}

Respostas

  • 202
    Pedido recebido; a geração é assíncrona.

    Cabeçalhos: Location, Idempotent-Replayed, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-Request-Id.

  • 400
    Dados inválidos.

    Erro: VALIDATION_ERROR.

  • 401
    Chave ou token ausente, inválido, revogado ou expirado.

    Erro: UNAUTHORIZED.

  • 402
    Saldo insuficiente — a cota do mês (teto do plano) acabou e não há crédito avulso guardado, ou o saldo pré-pago não cobre. Nada foi cobrado.

    Erro: INSUFFICIENT_CREDITS.

  • 403
    Escopo insuficiente, integrador ou conta pausada, ou origem não autorizada.

    Erro: FORBIDDEN.

  • 404
    Recurso não existe ou não pertence a este integrador.

    Erro: RESOURCE_NOT_FOUND.

  • 409
    Conflito de estado, duplicidade ou Idempotency-Key reutilizada com outro corpo.

    Erro: IDEMPOTENCY_KEY_REUSED.

  • 422
    Produto sem conferência aprovada da versão atual para este tipo de geração. Recusado antes de qualquer custo. PRODUCT_NOT_VERIFIED = a versão atual ainda não foi conferida (ou a conferência está em andamento); PRODUCT_REQUIREMENTS_NOT_MET = conferida e reprovada para este tipo (ou a quantidade de imagens pedida passa do máximo sustentado). fields traz as pendências de bloqueio.

    Erro: PRODUCT_REQUIREMENTS_NOT_MET, PRODUCT_NOT_VERIFIED.

  • 429
    Limite de pedidos por minuto atingido.

    Cabeçalhos: Retry-After, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset. Erro: TOO_MANY_REQUESTS.

  • 503
    Capacidade temporariamente indisponível (manutenção ou fila cheia).

    Cabeçalhos: Retry-After. Erro: SERVICE_UNAVAILABLE.

Campos da resposta 202 (data — objeto)
CampoTipoDescrição
id obrigatóriotextoFormato: ^ger_[0-9A-Z]{26}$.
tipo obrigatóriotextoValores: galeria, video_apresentacao, video_cinepremium, edicao_imagem.
situacao obrigatóriotextona_fila = recebida, crédito reservado, esperando a vaga na fila justa (com fila: posição e tempo estimado; o vídeo também prepara a fala enquanto espera); gerando = ganhou a vaga e está em produção (aviso geracao.iniciada); concluida = tudo entregue; parcial = parte entregue (cobra só o entregue); falhou = nada entregue (créditos devolvidos); cancelada = cancelada na fila (POST /geracoes/{geracaoId}/cancelar, créditos devolvidos). Valores: na_fila, gerando, concluida, parcial, falhou, cancelada.
creditosReservadosinteiroMínimo 0.
ambientetextoteste = chave sk_test_ (mídia de exemplo, sem custo); producao = chave sk_live_. Valores: teste, producao.
resposta 202
{
  "data": {
    "id": "ger_01J9Z8C4D5E6F7G8H9J0K1L2M3",
    "tipo": "galeria",
    "situacao": "na_fila",
    "creditosReservados": 60,
    "ambiente": "producao"
  }
}
GET/avatares

Avatares oficiais para a Apresentação#

Lista os avatares ativos que podem apresentar o produto num vídeo apresentacao, para o seu sistema montar a escolha e oferecer ao cliente. Envie o codigo no campo avatar de POST /videos (ou automatico para o sistema escolher). Grátis, não gasta crédito; pode ser guardada por 5 minutos (Cache-Control: private, max-age=300). Baixe e guarde a foto e a previaAnimada no seu sistema e atualize a lista de vez em quando: avatar pode sair de linha e outros podem entrar. Código inexistente ou inativo no pedido de vídeo: 400 VALIDATION_ERROR com o campo avatar e o código AVATAR_INDISPONIVEL. O CinePremium não usa avatar (use voz).

  • Chave de APIsim
  • Token OAuthnão (responde 403)

Respostas

  • 200
    Avatares ativos.
  • 401
    Chave ou token ausente, inválido, revogado ou expirado.

    Erro: UNAUTHORIZED.

  • 429
    Limite de pedidos por minuto atingido.

    Cabeçalhos: Retry-After, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset. Erro: TOO_MANY_REQUESTS.

resposta 200
{
  "data": [
    {
      "codigo": "h01",
      "nome": "Bruno",
      "genero": "masculino",
      "idadeAparente": 22,
      "foto": "https://app.sellume.com.br/assets/avatares/h01/poster.jpg",
      "previaAnimada": "https://app.sellume.com.br/assets/avatares/h01/clipe-01.mp4",
      "tiposDeVideo": [
        "apresentacao"
      ]
    }
  ],
  "total": 1,
  "automatico": "Envie avatar: \"automatico\" (ou omita) para o Sellume escolher pelo produto."
}
POST/imagens/{imagemId}/edicoes

Editar uma imagem, mudando só o que foi pedido#

Edita uma imagem já entregue. Só o que foi pedido muda: produto, enquadramento, textos e fundo que não fazem parte do pedido são preservados. troca_de_cor troca a cor do produto (ou da parte indicada) pela cor pedida. A edição gera uma nova imagem (a original continua disponível) e cobra o preço de edição da tabela do integrador.

  • Escopogeracoes:criar
  • Chave de APIsim
  • Token OAuthsim

Parâmetros

ParâmetroOndeDescrição
imagemId obrigatóriocaminhoImagem entregue por uma galeria (resultados.imagens[].id). Tipo: texto. Formato: ^img_[0-9A-Z]{26}$.
Idempotency-Key obrigatóriocabeçalhoObrigatório em todo POST que gasta crédito. Valor único por pedido (sugestão: UUID v4), de 8 a 120 caracteres. Guardado por 7 dias por integrador e ambiente. Mesma chave + mesmo corpo devolve a resposta original sem nova cobrança; mesma chave + corpo diferente devolve 409 com IDEMPOTENCY_KEY_REUSED. Tipo: texto. De 8 a 120 caracteres. Formato: ^[A-Za-z0-9_\-:.]+$.

Corpo do pedido

application/json · obrigatório

Só o que foi pedido muda; o restante da imagem é preservado.

CampoTipoDescrição
tipo obrigatóriotextoValores: troca_de_cor, ajuste.
corobjetoObrigatório quando tipo = troca_de_cor.
cor.nome obrigatóriotextoAté 60 caracteres.
cor.hextextoFormato: ^#[0-9A-Fa-f]{6}$.
partetextoParte do produto que muda de cor (opcional). Até 120 caracteres.
instrucaotextoObrigatória para ajuste. De 5 a 500 caracteres. Obrigatório quando tipo = ajuste.
referenciaExternatextoAté 120 caracteres.
exemplo · Troca de cor do produto
{
  "tipo": "troca_de_cor",
  "cor": {
    "nome": "Branco",
    "hex": "#FFFFFF"
  },
  "parte": "corpo da arandela"
}
exemplo · Ajuste pontual descrito em texto
{
  "tipo": "ajuste",
  "instrucao": "Trocar o fundo da parede por um tom de cinza claro."
}

Respostas

  • 202
    Pedido recebido; a geração é assíncrona.

    Cabeçalhos: Location, Idempotent-Replayed, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-Request-Id.

  • 400
    Dados inválidos.

    Erro: VALIDATION_ERROR.

  • 401
    Chave ou token ausente, inválido, revogado ou expirado.

    Erro: UNAUTHORIZED.

  • 402
    Saldo insuficiente — a cota do mês (teto do plano) acabou e não há crédito avulso guardado, ou o saldo pré-pago não cobre. Nada foi cobrado.

    Erro: INSUFFICIENT_CREDITS.

  • 404
    Recurso não existe ou não pertence a este integrador.

    Erro: RESOURCE_NOT_FOUND.

  • 409
    Conflito de estado, duplicidade ou Idempotency-Key reutilizada com outro corpo.

    Erro: IDEMPOTENCY_KEY_REUSED.

  • 422
    Produto sem conferência aprovada da versão atual para este tipo de geração. Recusado antes de qualquer custo. PRODUCT_NOT_VERIFIED = a versão atual ainda não foi conferida (ou a conferência está em andamento); PRODUCT_REQUIREMENTS_NOT_MET = conferida e reprovada para este tipo (ou a quantidade de imagens pedida passa do máximo sustentado). fields traz as pendências de bloqueio.

    Erro: PRODUCT_REQUIREMENTS_NOT_MET, PRODUCT_NOT_VERIFIED.

  • 429
    Limite de pedidos por minuto atingido.

    Cabeçalhos: Retry-After, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset. Erro: TOO_MANY_REQUESTS.

Campos da resposta 202 (data — objeto)
CampoTipoDescrição
id obrigatóriotextoFormato: ^ger_[0-9A-Z]{26}$.
tipo obrigatóriotextoValores: galeria, video_apresentacao, video_cinepremium, edicao_imagem.
situacao obrigatóriotextona_fila = recebida, crédito reservado, esperando a vaga na fila justa (com fila: posição e tempo estimado; o vídeo também prepara a fala enquanto espera); gerando = ganhou a vaga e está em produção (aviso geracao.iniciada); concluida = tudo entregue; parcial = parte entregue (cobra só o entregue); falhou = nada entregue (créditos devolvidos); cancelada = cancelada na fila (POST /geracoes/{geracaoId}/cancelar, créditos devolvidos). Valores: na_fila, gerando, concluida, parcial, falhou, cancelada.
creditosReservadosinteiroMínimo 0.
ambientetextoteste = chave sk_test_ (mídia de exemplo, sem custo); producao = chave sk_live_. Valores: teste, producao.
resposta 202
{
  "data": {
    "id": "ger_01J9Z8C4D5E6F7G8H9J0K1L2M3",
    "tipo": "galeria",
    "situacao": "na_fila",
    "creditosReservados": 60,
    "ambiente": "producao"
  }
}
GET/geracoes

Listar gerações#

  • Escopogeracoes:ler
  • Chave de APIsim
  • Token OAuthsim

Parâmetros

ParâmetroOndeDescrição
paginaconsultaNúmero da página, começando em 1. Tipo: inteiro. Padrão: 1. Mínimo 1.
limiteconsultaItens por página (padrão 100, máximo 100). Tipo: inteiro. Padrão: 100. De 1 a 100.
contaIdconsultaTipo: texto. Formato: ^cta_[0-9A-Z]{26}$.
produtoIdconsultaTipo: texto. Formato: ^prd_[0-9A-Z]{26}$.
tipoconsultaTipo: texto. Valores: galeria, video_apresentacao, video_cinepremium, edicao_imagem.
situacaoconsultaTipo: texto. Valores: na_fila, gerando, concluida, parcial, falhou, cancelada.
criadoDeconsultaTipo: texto (date-time).
criadoAteconsultaTipo: texto (date-time).

Respostas

  • 200
    Página de gerações (sem links de download; use o detalhe).
  • 400
    Dados inválidos.

    Erro: VALIDATION_ERROR.

  • 401
    Chave ou token ausente, inválido, revogado ou expirado.

    Erro: UNAUTHORIZED.

  • 429
    Limite de pedidos por minuto atingido.

    Cabeçalhos: Retry-After, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset. Erro: TOO_MANY_REQUESTS.

GET/geracoes/{geracaoId}

Andamento e resultado, com links para baixar#

  • Escopogeracoes:ler
  • Chave de APIsim
  • Token OAuthsim

Parâmetros

ParâmetroOndeDescrição
geracaoId obrigatóriocaminhoTipo: texto. Formato: ^ger_[0-9A-Z]{26}$.

Respostas

  • 200
    Geração encontrada.
  • 401
    Chave ou token ausente, inválido, revogado ou expirado.

    Erro: UNAUTHORIZED.

  • 404
    Recurso não existe ou não pertence a este integrador.

    Erro: RESOURCE_NOT_FOUND.

  • 429
    Limite de pedidos por minuto atingido.

    Cabeçalhos: Retry-After, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset. Erro: TOO_MANY_REQUESTS.

Campos da resposta 200 (data — objeto)
CampoTipoDescrição
id obrigatóriotextoFormato: ^ger_[0-9A-Z]{26}$.
tipo obrigatóriotextoValores: galeria, video_apresentacao, video_cinepremium, edicao_imagem.
situacao obrigatóriotextona_fila = recebida, crédito reservado, esperando a vaga na fila justa (com fila: posição e tempo estimado; o vídeo também prepara a fala enquanto espera); gerando = ganhou a vaga e está em produção (aviso geracao.iniciada); concluida = tudo entregue; parcial = parte entregue (cobra só o entregue); falhou = nada entregue (créditos devolvidos); cancelada = cancelada na fila (POST /geracoes/{geracaoId}/cancelar, créditos devolvidos). Valores: na_fila, gerando, concluida, parcial, falhou, cancelada.
ambiente obrigatóriotextoteste = chave sk_test_ (mídia de exemplo, sem custo); producao = chave sk_live_. Valores: teste, producao.
modotextoreal na produção e no teste pago com créditos de teste; simulado = mídia de exemplo do teste, sem gasto. Valores: simulado, real.
contaId obrigatóriotextoFormato: ^cta_[0-9A-Z]{26}$.
produtoIdtexto ou nulo
versaoProdutointeiro ou nulo
imagemOrigemIdtexto ou nuloPara edicao_imagem.
referenciaExternatexto ou nulo
progressoobjeto
progresso.etapatextoValores: na_fila, preparando, planejando, gerando, finalizando, entregue.
progresso.percentualinteiroDe 0 a 100.
filaobjeto ou nuloSó em na_fila (produção). Posição na fila justa e tempo estimado para começar, recalculados a cada leitura (estimativa: o uso real muda a cada vaga). etapa: preparando = o vídeo ainda prepara a fala e entra na fila de vídeos em seguida.
fila.etapatextoValores: na_fila, preparando.
fila.posicaointeiro ou nuloMínimo 1.
fila.naFrenteinteiro ou nuloMínimo 0.
fila.esperaEstimadaSegundosinteiro ou nuloMínimo 0.
fila.atualizadoEmtexto (date-time)
creditosobjeto
creditos.reservadosinteiroMínimo 0.
creditos.cobradosinteiroMínimo 0.
creditos.devolvidosinteiroMínimo 0.
valorCentavosinteiro ou nuloValor da geração em centavos (créditos cobrados × valor do crédito na hora). Nulo até liquidar.
criadoEm obrigatóriotexto (date-time)
iniciadoEmtexto (date-time) ou nulo
concluidoEmtexto (date-time) ou nulo
resultadosobjeto
resultados.imagenslista de objeto
resultados.imagens[].id obrigatóriotextoFormato: ^img_[0-9A-Z]{26}$.
resultados.imagens[].posicao obrigatóriointeiroDe 1 a 10.
resultados.imagens[].url obrigatóriotexto (uri)Link assinado e temporário.
resultados.imagens[].expiraEm obrigatóriotexto (date-time)
resultados.imagens[].largurainteiro
resultados.imagens[].alturainteiro
resultados.imagens[].formatotexto
resultados.imagens[].origemEdicaotexto ou nuloId da imagem original quando é uma edição.
resultados.videoobjeto
resultados.video.url obrigatóriotexto (uri)Link assinado e temporário (MP4).
resultados.video.expiraEm obrigatóriotexto (date-time)
resultados.video.capaUrltexto (uri) ou nulo
resultados.video.duracaoSegundosnúmero
resultados.video.largurainteiro
resultados.video.alturainteiro
resultados.video.falaobjetoFala usada no vídeo. A escolha é automática (sem etapa humana).
falaobjetoSó vídeos — a fala escolhida automaticamente, assim que a escolha acontece (antes da entrega).
fala.texto obrigatóriotextoTexto falado (Apresentação: fala A + fala B + CTA; CinePremium: gancho + A + B + CTA).
fala.escolha obrigatóriotextoSempre automatica.
fala.opcoesConsideradasinteiroMínimo 1.
fala.tomtexto ou nuloOpção escolhida. Valores: safe, aggressive.
fala.criteriotexto ou nuloVersão da regra de escolha (ex. sellume.integradores.fala_automatica.v1).
erroobjeto ou nuloGENERATION_FAILED = nada entregue, créditos devolvidos; VIDEO_SPEECH_NOT_APPROVED = nenhuma opção de fala passou nas travas de qualidade, nada foi renderizado e os créditos voltaram.
erro.typetexto
erro.messagetexto
resposta 200
{
  "data": {
    "id": "ger_01J9Z8C4D5E6F7G8H9J0K1L2M3",
    "tipo": "galeria",
    "situacao": "concluida",
    "ambiente": "producao",
    "contaId": "cta_01J9Z6K8X2M4R7T1Q3W5E8Y0U2",
    "produtoId": "prd_01J9Z7A1B2C3D4E5F6G7H8J9K0",
    "versaoProduto": 3,
    "referenciaExterna": "pedido-erp-55120",
    "progresso": {
      "etapa": "entregue",
      "percentual": 100
    },
    "creditos": {
      "reservados": 60,
      "cobrados": 60,
      "devolvidos": 0
    },
    "valorCentavos": "definido no contrato",
    "criadoEm": "2026-10-10T14:07:00Z",
    "iniciadoEm": "2026-10-10T14:07:03Z",
    "concluidoEm": "2026-10-10T14:08:31Z",
    "resultados": {
      "imagens": [
        {
          "id": "img_01J9Z8F1A2B3C4D5E6F7G8H9J0",
          "posicao": 1,
          "url": "https://armazenamento.exemplo/assinado/img-1.png?token=...",
          "expiraEm": "2026-10-17T14:08:31Z",
          "largura": 1200,
          "altura": 1200,
          "formato": "image/png"
        }
      ]
    }
  }
}
POST/geracoes/{geracaoId}/cancelar

Cancela uma geração que ainda está na fila#

Só enquanto a geração está na_fila. A passagem para gerando e o cancelamento são decididos numa única transação no Sellume: ou a geração começa, ou é cancelada — nunca as duas. Os créditos reservados voltam só se nenhum fornecedor de geração foi chamado para o pedido; se já houve chamada, o pedido não é cancelado e segue até o fim (cobrado só se entregue). Depois que começou (gerando), não cancela. Toda tentativa fica no histórico do Sellume (quem pediu, quando, estado e decisão).

  • Escopogeracoes:criar
  • Chave de APIsim
  • Token OAuthsim

Parâmetros

ParâmetroOndeDescrição
geracaoId obrigatóriocaminhoTipo: texto. Formato: ^ger_[0-9A-Z]{26}$.

Respostas

  • 200
    Cancelada; situacao = cancelada e os créditos reservados devolvidos.
  • 401
    Chave ou token ausente, inválido, revogado ou expirado.

    Erro: UNAUTHORIZED.

  • 404
    Recurso não existe ou não pertence a este integrador.

    Erro: RESOURCE_NOT_FOUND.

  • 409
    Conflito de estado, duplicidade ou Idempotency-Key reutilizada com outro corpo.

    Erro: IDEMPOTENCY_KEY_REUSED.

  • 429
    Limite de pedidos por minuto atingido.

    Cabeçalhos: Retry-After, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset. Erro: TOO_MANY_REQUESTS.

Campos da resposta 200 (data — objeto)
CampoTipoDescrição
id obrigatóriotextoFormato: ^ger_[0-9A-Z]{26}$.
tipo obrigatóriotextoValores: galeria, video_apresentacao, video_cinepremium, edicao_imagem.
situacao obrigatóriotextona_fila = recebida, crédito reservado, esperando a vaga na fila justa (com fila: posição e tempo estimado; o vídeo também prepara a fala enquanto espera); gerando = ganhou a vaga e está em produção (aviso geracao.iniciada); concluida = tudo entregue; parcial = parte entregue (cobra só o entregue); falhou = nada entregue (créditos devolvidos); cancelada = cancelada na fila (POST /geracoes/{geracaoId}/cancelar, créditos devolvidos). Valores: na_fila, gerando, concluida, parcial, falhou, cancelada.
ambiente obrigatóriotextoteste = chave sk_test_ (mídia de exemplo, sem custo); producao = chave sk_live_. Valores: teste, producao.
modotextoreal na produção e no teste pago com créditos de teste; simulado = mídia de exemplo do teste, sem gasto. Valores: simulado, real.
contaId obrigatóriotextoFormato: ^cta_[0-9A-Z]{26}$.
produtoIdtexto ou nulo
versaoProdutointeiro ou nulo
imagemOrigemIdtexto ou nuloPara edicao_imagem.
referenciaExternatexto ou nulo
progressoobjeto
progresso.etapatextoValores: na_fila, preparando, planejando, gerando, finalizando, entregue.
progresso.percentualinteiroDe 0 a 100.
filaobjeto ou nuloSó em na_fila (produção). Posição na fila justa e tempo estimado para começar, recalculados a cada leitura (estimativa: o uso real muda a cada vaga). etapa: preparando = o vídeo ainda prepara a fala e entra na fila de vídeos em seguida.
fila.etapatextoValores: na_fila, preparando.
fila.posicaointeiro ou nuloMínimo 1.
fila.naFrenteinteiro ou nuloMínimo 0.
fila.esperaEstimadaSegundosinteiro ou nuloMínimo 0.
fila.atualizadoEmtexto (date-time)
creditosobjeto
creditos.reservadosinteiroMínimo 0.
creditos.cobradosinteiroMínimo 0.
creditos.devolvidosinteiroMínimo 0.
valorCentavosinteiro ou nuloValor da geração em centavos (créditos cobrados × valor do crédito na hora). Nulo até liquidar.
criadoEm obrigatóriotexto (date-time)
iniciadoEmtexto (date-time) ou nulo
concluidoEmtexto (date-time) ou nulo
resultadosobjeto
resultados.imagenslista de objeto
resultados.imagens[].id obrigatóriotextoFormato: ^img_[0-9A-Z]{26}$.
resultados.imagens[].posicao obrigatóriointeiroDe 1 a 10.
resultados.imagens[].url obrigatóriotexto (uri)Link assinado e temporário.
resultados.imagens[].expiraEm obrigatóriotexto (date-time)
resultados.imagens[].largurainteiro
resultados.imagens[].alturainteiro
resultados.imagens[].formatotexto
resultados.imagens[].origemEdicaotexto ou nuloId da imagem original quando é uma edição.
resultados.videoobjeto
resultados.video.url obrigatóriotexto (uri)Link assinado e temporário (MP4).
resultados.video.expiraEm obrigatóriotexto (date-time)
resultados.video.capaUrltexto (uri) ou nulo
resultados.video.duracaoSegundosnúmero
resultados.video.largurainteiro
resultados.video.alturainteiro
resultados.video.falaobjetoFala usada no vídeo. A escolha é automática (sem etapa humana).
falaobjetoSó vídeos — a fala escolhida automaticamente, assim que a escolha acontece (antes da entrega).
fala.texto obrigatóriotextoTexto falado (Apresentação: fala A + fala B + CTA; CinePremium: gancho + A + B + CTA).
fala.escolha obrigatóriotextoSempre automatica.
fala.opcoesConsideradasinteiroMínimo 1.
fala.tomtexto ou nuloOpção escolhida. Valores: safe, aggressive.
fala.criteriotexto ou nuloVersão da regra de escolha (ex. sellume.integradores.fala_automatica.v1).
erroobjeto ou nuloGENERATION_FAILED = nada entregue, créditos devolvidos; VIDEO_SPEECH_NOT_APPROVED = nenhuma opção de fala passou nas travas de qualidade, nada foi renderizado e os créditos voltaram.
erro.typetexto
erro.messagetexto

Créditos#

Saldo, extrato, plano, cota do mês (créditos do plano, que também são o teto) e pacotes avulsos da carteira do integrador.

GET/saldo

Saldo da carteira do integrador#

  • Escopocreditos:ler
  • Chave de APIsim
  • Token OAuthnão (responde 403)

Respostas

  • 200
    Saldo atual.
  • 401
    Chave ou token ausente, inválido, revogado ou expirado.

    Erro: UNAUTHORIZED.

  • 429
    Limite de pedidos por minuto atingido.

    Cabeçalhos: Retry-After, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset. Erro: TOO_MANY_REQUESTS.

Campos da resposta 200 (data — objeto)
CampoTipoDescrição
modeloCobranca obrigatóriotextoValores: plano_mensal, pre_pago.
ambiente obrigatóriotextoteste = chave sk_test_ (mídia de exemplo, sem custo); producao = chave sk_live_. Valores: teste, producao.
creditosDisponiveis obrigatóriointeiroCota do ciclo restante + crédito avulso guardado + cortesias válidas (sem os créditos de teste). Mínimo 0.
creditosReservados obrigatóriointeiroMínimo 0.
creditosDeRecargainteiroCrédito avulso guardado (não vence; gasto depois da cota do plano). Mínimo 0.
valorCreditoCentavosinteiro ou nuloValor de 1 crédito no contrato vigente (consumo). Mínimo 0.
alertaAbaixoDeinteiro ou nuloLimite de alerta de creditos.baixos.
creditosDeTesteobjetoCréditos de teste liberados pelo Sellume para homologar a integração: só pagam modo: real com a chave sk_test_ e nunca pagam produção. Vencem em venceEm (o que sobrar vence).
creditosDeTeste.disponiveisinteiroMínimo 0.
creditosDeTeste.reservadosinteiroMínimo 0.
creditosDeTeste.usadosinteiroMínimo 0.
creditosDeTeste.concedidosinteiroMínimo 0.
creditosDeTeste.venceEmtexto (date-time) ou nulo
planoobjeto ou nulo
plano.codigotextoValores: base, growth, business, enterprise.
plano.nometexto
cicloobjeto ou nuloCiclo aberto do plano (só no modelo plano_mensal).
ciclo.competenciatextoFormato: ^\d{4}-(0[1-9]|1[0-2])$.
ciclo.creditosDoCiclointeiroCota do mês = teto. Mínimo 0.
ciclo.creditosUsadosinteiroMínimo 0.
ciclo.creditosRestantesinteiroMínimo 0.
ciclo.tetoAtingidobooleano
ciclo.terminaEmtexto (date-time)
atualizadoEm obrigatóriotexto (date-time)
resposta 200
{
  "data": {
    "modeloCobranca": "plano_mensal",
    "ambiente": "producao",
    "creditosDisponiveis": 3200,
    "creditosReservados": 60,
    "creditosDeRecarga": 1000,
    "valorCreditoCentavos": "definido no contrato",
    "creditosDeTeste": {
      "disponiveis": 0,
      "reservados": 0,
      "usados": 0,
      "concedidos": 0,
      "venceEm": null
    },
    "plano": {
      "codigo": "base",
      "nome": "Sellume API Base"
    },
    "ciclo": {
      "competencia": "2026-10",
      "creditosDoCiclo": 3000,
      "creditosUsados": 800,
      "creditosRestantes": 2200,
      "tetoAtingido": false,
      "terminaEm": "2026-11-11T13:00:00Z"
    },
    "atualizadoEm": "2026-10-10T14:10:00Z"
  }
}
GET/extrato

Extrato detalhado (por conta, produto e geração)#

  • Escopocreditos:ler
  • Chave de APIsim
  • Token OAuthnão (responde 403)

Parâmetros

ParâmetroOndeDescrição
paginaconsultaNúmero da página, começando em 1. Tipo: inteiro. Padrão: 1. Mínimo 1.
limiteconsultaItens por página (padrão 100, máximo 100). Tipo: inteiro. Padrão: 100. De 1 a 100.
contaIdconsultaTipo: texto. Formato: ^cta_[0-9A-Z]{26}$.
tipoconsultaTipo: texto. Valores: recarga, ciclo_aberto, reserva, cobranca, devolucao, expiracao, cortesia, ajuste, creditos_de_teste.
deconsultaTipo: texto (date).
ateconsultaTipo: texto (date).

Respostas

  • 200
    Página do extrato.
  • 400
    Dados inválidos.

    Erro: VALIDATION_ERROR.

  • 401
    Chave ou token ausente, inválido, revogado ou expirado.

    Erro: UNAUTHORIZED.

  • 429
    Limite de pedidos por minuto atingido.

    Cabeçalhos: Retry-After, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset. Erro: TOO_MANY_REQUESTS.

GET/cota-do-mes

Cota do mês (créditos do ciclo do plano, que também são o teto)#

Para integradores no modelo plano_mensal. O plano é pago antes: a fatura paga abre o ciclo com os créditos do plano (a cota). A cota é também o teto do mês: não há excedente nem limite separado. Quando ela acaba, o uso sai do crédito avulso guardado (pacote avulso, que não vence); sem ele, os pedidos que gastam crédito respondem 402 INSUFFICIENT_CREDITS sem cobrar, até um pacote avulso ou o próximo ciclo. Sem competencia, devolve o ciclo aberto (ou o último). Integradores no modelo pre_pago recebem 404.

  • Escopocreditos:ler
  • Chave de APIsim
  • Token OAuthnão (responde 403)

Parâmetros

ParâmetroOndeDescrição
competenciaconsultaMês do ciclo no formato AAAA-MM. Tipo: texto. Formato: ^\d{4}-(0[1-9]|1[0-2])$.

Respostas

  • 200
    Situação do ciclo.
  • 401
    Chave ou token ausente, inválido, revogado ou expirado.

    Erro: UNAUTHORIZED.

  • 404
    Recurso não existe ou não pertence a este integrador.

    Erro: RESOURCE_NOT_FOUND.

Campos da resposta 200 (data — objeto)
CampoTipoDescrição
competencia obrigatóriotextoFormato: ^\d{4}-(0[1-9]|1[0-2])$.
situacao obrigatóriotextoaguardando_pagamento = o plano do mês ainda não foi pago (sem créditos do ciclo). Valores: aguardando_pagamento, aberta, encerrada, em_atraso, cancelada.
plano obrigatórioobjeto
plano.codigotextoValores: base, growth, business, enterprise.
plano.nometexto
creditosDoCiclo obrigatóriointeiroCréditos do plano no ciclo: a cota, que também é o teto. Mínimo 0.
creditosUsados obrigatóriointeiroMínimo 0.
creditosRestantesinteiroMínimo 0.
percentualUsadointeiro ou nuloMínimo 0.
tetoAtingido obrigatóriobooleanoA cota acabou: o uso segue só com crédito avulso guardado; sem ele, 402 sem cobrar.
passouDoTetobooleanoO uso do ciclo passou da cota (com crédito avulso).
comprouAvulsobooleanoComprou pacote avulso neste ciclo (2 ciclos seguidos → sugestão de subida).
valorPagoCentavosinteiroValor do plano pago antes, neste ciclo. Mínimo 0.
iniciotexto (date-time)
fechaEmtexto (date-time)
resposta 200
{
  "data": {
    "competencia": "2026-10",
    "situacao": "aberta",
    "plano": {
      "codigo": "base",
      "nome": "Sellume API Base"
    },
    "creditosDoCiclo": 3000,
    "creditosUsados": 2700,
    "creditosRestantes": 300,
    "percentualUsado": 90,
    "tetoAtingido": false,
    "passouDoTeto": false,
    "comprouAvulso": false,
    "valorPagoCentavos": "definido no contrato",
    "inicio": "2026-10-11T13:00:00Z",
    "fechaEm": "2026-11-11T13:00:00Z"
  }
}
GET/plano

Plano atual, cota do mês, troca pendente, sugestão de subida e pacotes avulsos#

Planos: Sellume API Base (máquinas compartilhadas com cota de simultâneos), Growth (máquina própria), Business (máquina própria maior e prioridade) e Enterprise (sob medida: cota e preço por contrato). Valores definitivos na Fase 7 (valoresDeExemplo = true enquanto forem de exemplo). Subir de plano vale na hora: é pedida no portal e aplicada pelo time do Sellume; o plano novo é cobrado inteiro no mesmo dia (sem valor proporcional), o ciclo recomeça nesse dia, os créditos do plano novo entram inteiros e o saldo que sobrou continua até a data em que já venceria. Descer de plano vale só no próximo ciclo; nada é cobrado na hora. Pacote avulso (recarga.pacotes): pago na hora pela página segura de pagamentos; o crédito não vence e é gasto depois da cota do plano do mês; o crédito avulso custa mais que o crédito do plano e que o do plano de cima. Comprou pacote avulso em 2 ciclos seguidos → sugestaoSubida. No pré-pago, atual é nulo e a recarga tem quantidade livre.

  • Escopocreditos:ler
  • Chave de APIsim
  • Token OAuthnão (responde 403)

Respostas

  • 200
    Plano e cota.
  • 401
    Chave ou token ausente, inválido, revogado ou expirado.

    Erro: UNAUTHORIZED.

  • 429
    Limite de pedidos por minuto atingido.

    Cabeçalhos: Retry-After, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset. Erro: TOO_MANY_REQUESTS.

Campos da resposta 200 (data — objeto)
CampoTipoDescrição
modeloCobrancatextoValores: plano_mensal, pre_pago.
atualobjeto ou nulo
atual.codigo obrigatóriotextoValores: base, growth, business, enterprise.
atual.nome obrigatóriotextoValores: Sellume API Base, Sellume API Growth, Sellume API Business, Sellume API Enterprise.
atual.ordeminteiro
atual.versaointeiro
atual.valorMensalCentavos obrigatóriointeiroMínimo 1.
atual.creditosDoMes obrigatóriointeiroCota do mês = teto. Mínimo 1.
atual.valorCreditoDoPlanoCentavosnúmero
atual.valorCreditoAvulsoCentavos obrigatóriointeiroPreço de 1 crédito do pacote avulso: maior que o crédito do plano e que o do plano de cima.
atual.capacidadeobjeto
atual.capacidade.tipotextoValores: compartilhada, dedicada.
atual.capacidade.maquinaPropriabooleano
atual.capacidade.maquinaMaiorbooleano
atual.capacidade.prioridadeDeFilabooleano
atual.capacidade.sobMedidabooleano
atual.cotasTecnicasobjeto
atual.cotasTecnicas.limiteRequisicoesMinutointeiro
atual.cotasTecnicas.maxGeracoesSimultaneasinteiro
atual.cotasTecnicas.maxVideosSimultaneosinteiro
atual.personalizadobooleanoEnterprise sob medida deste integrador (contrato).
atual.autoatendimentobooleanofalse = só pelo Sellume (Enterprise).
atual.valoresDeExemplobooleano
trocaDePlanotexto
mudancaPendenteobjeto ou nulo
mudancaPendente.tipotextoValores: subida, descida.
mudancaPendente.situacaotextoValores: preparando, agendada.
mudancaPendente.paratexto
mudancaPendente.valeEmtextoSempre proximo_ciclo.
mudancaPendente.desdetexto (date-time)
sugestaoSubidaobjeto ou nuloComprou pacote avulso em 2 ciclos seguidos (nada automático; a subida, se pedida, é aplicada na hora pelo time do Sellume).
sugestaoSubida.planoSugeridotexto ou nulo
sugestaoSubida.cicloslista de texto
sugestaoSubida.motivotexto
sugestaoSubida.valeEmtextoSempre proximo_ciclo.
sugestaoSubida.desdetexto (date-time)
recargaobjeto ou nulo
recarga.pacoteslista de objeto
recarga.pacotes[].codigotextoFormato: ^avulso_[0-9]{3,7}$.
recarga.pacotes[].creditosinteiro
recarga.pacotes[].valorCreditoCentavosinteiro
recarga.pacotes[].valorCentavosinteiro
recarga.pacotes[].validadetextoSempre sem_vencimento.
recarga.pacotes[].valoresDeExemplobooleano
recarga.valorCreditoCentavosinteiroSó pré-pago.
recarga.minimoCreditosinteiro
recarga.maximoCreditosinteiro
recarga.validadetextoSempre sem_vencimento.
cotaobjeto ou nulo
cota.competencia obrigatóriotextoFormato: ^\d{4}-(0[1-9]|1[0-2])$.
cota.situacao obrigatóriotextoaguardando_pagamento = o plano do mês ainda não foi pago (sem créditos do ciclo). Valores: aguardando_pagamento, aberta, encerrada, em_atraso, cancelada.
cota.plano obrigatórioobjeto
cota.plano.codigotextoValores: base, growth, business, enterprise.
cota.plano.nometexto
cota.creditosDoCiclo obrigatóriointeiroCréditos do plano no ciclo: a cota, que também é o teto. Mínimo 0.
cota.creditosUsados obrigatóriointeiroMínimo 0.
cota.creditosRestantesinteiroMínimo 0.
cota.percentualUsadointeiro ou nuloMínimo 0.
cota.tetoAtingido obrigatóriobooleanoA cota acabou: o uso segue só com crédito avulso guardado; sem ele, 402 sem cobrar.
cota.passouDoTetobooleanoO uso do ciclo passou da cota (com crédito avulso).
cota.comprouAvulsobooleanoComprou pacote avulso neste ciclo (2 ciclos seguidos → sugestão de subida).
cota.valorPagoCentavosinteiroValor do plano pago antes, neste ciclo. Mínimo 0.
cota.iniciotexto (date-time)
cota.fechaEmtexto (date-time)
GET/planos

Planos disponíveis para este integrador (com o movimento possível a partir do atual)#

  • Escopocreditos:ler
  • Chave de APIsim
  • Token OAuthnão (responde 403)

Respostas

  • 200
    Catálogo do ambiente do integrador (o Enterprise sob medida dele, quando existe, no lugar do Enterprise do catálogo).
  • 401
    Chave ou token ausente, inválido, revogado ou expirado.

    Erro: UNAUTHORIZED.

POST/recargas

Compra um pacote avulso (devolve o link da página segura de pagamentos)#

Plano: envie pacote (um dos de GET /plano → recarga.pacotes; de exemplo: avulso_1000, avulso_3000, avulso_6000). Pré-pago (componente embutido): envie creditos (100 a 1.000.000). Nada é cobrado nem concedido nesta chamada: os créditos entram quando o pagamento é confirmado na página segura de pagamentos (extrato recarga). O crédito avulso não vence. Com chave sk_test_ de um integrador de produção a compra é recusada (409): no teste não há cobrança.

  • Escopocreditos:comprar
  • Chave de APIsim
  • Token OAuthnão (responde 403)

Corpo do pedido

application/json · obrigatório

CampoTipoDescrição
pacotetextoPlano: código do pacote avulso. Formato: ^avulso_[0-9]{3,7}$.
creditosinteiroPré-pago: quantidade livre. De 100 a 1000000.
exemplo
{
  "pacote": "avulso_1000"
}

Respostas

  • 201
    Link para pagar.
  • 400
    Dados inválidos.

    Erro: VALIDATION_ERROR.

  • 401
    Chave ou token ausente, inválido, revogado ou expirado.

    Erro: UNAUTHORIZED.

  • 403
    Escopo insuficiente, integrador ou conta pausada, ou origem não autorizada.

    Erro: FORBIDDEN.

  • 409
    Conflito de estado, duplicidade ou Idempotency-Key reutilizada com outro corpo.

    Erro: IDEMPOTENCY_KEY_REUSED.

  • 429
    Limite de pedidos por minuto atingido.

    Cabeçalhos: Retry-After, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset. Erro: TOO_MANY_REQUESTS.

  • 503
    Capacidade temporariamente indisponível (manutenção ou fila cheia).

    Cabeçalhos: Retry-After. Erro: SERVICE_UNAVAILABLE.

Campos da resposta 201 (data — objeto)
CampoTipoDescrição
pacotetexto ou nulo
creditos obrigatóriointeiro
valorCentavos obrigatóriointeiro
valorCreditoCentavosinteiro ou nulo
validadetextoSempre sem_vencimento.
pagarEm obrigatóriotexto (uri)Página segura de pagamentos.
linkExpiraEmtexto (date-time) ou nulo
resposta 201
{
  "data": {
    "pacote": "avulso_1000",
    "creditos": 1000,
    "valorCentavos": "definido no contrato",
    "valorCreditoCentavos": "definido no contrato",
    "validade": "sem_vencimento",
    "pagarEm": "https://pagamento.exemplo/c/pay/cs_exemplo",
    "linkExpiraEm": "2026-10-12T16:00:00Z"
  }
}

Avisos#

Cadastro de endereços de webhook, entregas, reenvios e teste de assinatura.

GET/avisos

Listar endereços de aviso cadastrados#

  • Escopoavisos:gerenciar
  • Chave de APIsim
  • Token OAuthnão (responde 403)

Respostas

  • 200
    Endereços cadastrados (máximo 5 por integrador e ambiente).
  • 401
    Chave ou token ausente, inválido, revogado ou expirado.

    Erro: UNAUTHORIZED.

POST/avisos

Cadastrar um endereço que recebe avisos#

O segredo de assinatura (segredo, prefixo whsec_) aparece só nesta resposta e na rotação. Guarde-o: ele confere a assinatura X-Sellume-Signature de cada aviso. O endereço precisa ser HTTPS público.

  • Escopoavisos:gerenciar
  • Chave de APIsim
  • Token OAuthnão (responde 403)

Corpo do pedido

application/json · obrigatório

CampoTipoDescrição
url obrigatóriotexto (uri)HTTPS público (endereços internos são recusados). Até 2048 caracteres.
eventos obrigatóriolista de textoPelo menos 1 item. Sem repetidos.
descricaotextoAté 120 caracteres.
exemplo
{
  "url": "https://erp.exemplo.com.br/webhooks/sellume",
  "eventos": [
    "geracao.concluida",
    "geracao.falhou",
    "creditos.baixos"
  ],
  "descricao": "Produção"
}

Respostas

  • 201
    Endereço cadastrado.
  • 400
    Dados inválidos.

    Erro: VALIDATION_ERROR.

  • 401
    Chave ou token ausente, inválido, revogado ou expirado.

    Erro: UNAUTHORIZED.

  • 409
    Conflito de estado, duplicidade ou Idempotency-Key reutilizada com outro corpo.

    Erro: IDEMPOTENCY_KEY_REUSED.

Campos da resposta 201 (data — objeto)
CampoTipoDescrição
id obrigatóriotextoFormato: ^avs_[0-9A-Z]{26}$.
url obrigatóriotexto (uri)
eventos obrigatóriolista de texto
descricaotexto ou nulo
situacao obrigatóriotextodesligado = desligado automaticamente após falhas seguidas por 3 dias. Valores: ativo, pausado, desligado.
ambiente obrigatóriotextoteste = chave sk_test_ (mídia de exemplo, sem custo); producao = chave sk_live_. Valores: teste, producao.
falhasSeguidasinteiroMínimo 0.
ultimaEntregaEmtexto (date-time) ou nulo
desligadoEmtexto (date-time) ou nulo
criadoEm obrigatóriotexto (date-time)
segredo obrigatóriotextoMostrado uma única vez. Formato: ^whsec_[A-Za-z0-9]{32,}$.
PUT/avisos

Cadastrar ou atualizar um endereço pelo url (idempotente)#

Mesmo corpo de POST /avisos. Se o endereço ainda não existe neste ambiente, cadastra e responde 201 com o segredo (mostrado uma única vez). Se já existe, atualiza eventos e descricao e responde 200 sem o segredo. Útil para o ERP reaplicar a configuração sem duplicar endereços.

  • Escopoavisos:gerenciar
  • Chave de APIsim
  • Token OAuthnão (responde 403)

Corpo do pedido

application/json · obrigatório

CampoTipoDescrição
url obrigatóriotexto (uri)HTTPS público (endereços internos são recusados). Até 2048 caracteres.
eventos obrigatóriolista de textoPelo menos 1 item. Sem repetidos.
descricaotextoAté 120 caracteres.

Respostas

  • 200
    Endereço já existia e foi atualizado.
  • 201
    Endereço cadastrado (com o segredo, mostrado uma única vez).
  • 400
    Dados inválidos.

    Erro: VALIDATION_ERROR.

  • 401
    Chave ou token ausente, inválido, revogado ou expirado.

    Erro: UNAUTHORIZED.

  • 409
    Conflito de estado, duplicidade ou Idempotency-Key reutilizada com outro corpo.

    Erro: IDEMPOTENCY_KEY_REUSED.

Campos da resposta 200 (data — objeto)
CampoTipoDescrição
id obrigatóriotextoFormato: ^avs_[0-9A-Z]{26}$.
url obrigatóriotexto (uri)
eventos obrigatóriolista de texto
descricaotexto ou nulo
situacao obrigatóriotextodesligado = desligado automaticamente após falhas seguidas por 3 dias. Valores: ativo, pausado, desligado.
ambiente obrigatóriotextoteste = chave sk_test_ (mídia de exemplo, sem custo); producao = chave sk_live_. Valores: teste, producao.
falhasSeguidasinteiroMínimo 0.
ultimaEntregaEmtexto (date-time) ou nulo
desligadoEmtexto (date-time) ou nulo
criadoEm obrigatóriotexto (date-time)
Campos da resposta 201 (data — objeto)
CampoTipoDescrição
id obrigatóriotextoFormato: ^avs_[0-9A-Z]{26}$.
url obrigatóriotexto (uri)
eventos obrigatóriolista de texto
descricaotexto ou nulo
situacao obrigatóriotextodesligado = desligado automaticamente após falhas seguidas por 3 dias. Valores: ativo, pausado, desligado.
ambiente obrigatóriotextoteste = chave sk_test_ (mídia de exemplo, sem custo); producao = chave sk_live_. Valores: teste, producao.
falhasSeguidasinteiroMínimo 0.
ultimaEntregaEmtexto (date-time) ou nulo
desligadoEmtexto (date-time) ou nulo
criadoEm obrigatóriotexto (date-time)
segredo obrigatóriotextoFormato: ^whsec_[A-Za-z0-9]{32,}$.
GET/testes-de-avisos/{testeId}

Resultado de um teste de avisos (as três entregas)#

  • Escopoavisos:gerenciar
  • Chave de APIsim
  • Token OAuthnão (responde 403)

Parâmetros

ParâmetroOndeDescrição
testeId obrigatóriocaminhoTipo: texto. Formato: ^tst_[0-9A-Z]{26}$.

Respostas

  • 200
    Teste encontrado.
  • 401
    Chave ou token ausente, inválido, revogado ou expirado.

    Erro: UNAUTHORIZED.

  • 404
    Recurso não existe ou não pertence a este integrador.

    Erro: RESOURCE_NOT_FOUND.

Campos da resposta 200 (data — objeto)
CampoTipoDescrição
id obrigatóriotextoFormato: ^tst_[0-9A-Z]{26}$.
avisoId obrigatóriotextoFormato: ^avs_[0-9A-Z]{26}$.
situacao obrigatóriotextoValores: em_andamento, aprovado, reprovado.
entregas obrigatóriolista de objeto
entregas[].caso obrigatóriotextoValores: valido, assinatura_invalida, carimbo_antigo.
entregas[].esperado obrigatóriotexto
entregas[].statusHttpinteiro ou nulo
entregas[].motivoFalhatexto ou nulotempo_esgotado = sem resposta em 5 s; status_http = respondeu fora de 2XX; conexao_recusada, dns, tls = não deu para conectar; assinatura_nao_conferida = no teste, aceitou (2XX) uma entrega com assinatura errada ou carimbo antigo; endereco_bloqueado = o endereço aponta para rede interna e é recusado. Valores: tempo_esgotado, status_http, conexao_recusada, dns, tls, assinatura_nao_conferida, endereco_bloqueado.
entregas[].aprovadobooleano ou nulo
POST/avisos/teste

Disparar o teste de avisos (evento aviso.teste) e conferir a assinatura#

Envia o evento aviso.teste ao endereço indicado (ou a todos os ativos do ambiente) em três entregas e confere as respostas automaticamente:

  1. assinatura correta e carimbo atual → espera 2XX;
  2. assinatura errada (cabeçalho X-Sellume-Teste: assinatura_invalida) → espera 400, 401 ou 403;
  3. carimbo de horário de 10 minutos atrás, assinatura correta (X-Sellume-Teste: carimbo_antigo) → espera 400, 401 ou 403.

As três certas marcam a etapa AVISOS_ASSINATURA do status da integração. Assim o Sellume sabe que o integrador confere a assinatura, e não só responde 2XX. O resultado chega em GET /integracao/status e em GET /testes-de-avisos/{testeId} em segundos (a entrega sai na hora; tempo-limite de 5 s por entrega).

  • Escopoavisos:gerenciar
  • Chave de APIsim
  • Token OAuthnão (responde 403)

Corpo do pedido

application/json · opcional

CampoTipoDescrição
avisoIdtextoSem ele, testa todos os endereços ativos do ambiente. Formato: ^avs_[0-9A-Z]{26}$.

Respostas

  • 202
    Teste enfileirado.
  • 401
    Chave ou token ausente, inválido, revogado ou expirado.

    Erro: UNAUTHORIZED.

  • 404
    Recurso não existe ou não pertence a este integrador.

    Erro: RESOURCE_NOT_FOUND.

  • 429
    Limite de pedidos por minuto atingido.

    Cabeçalhos: Retry-After, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset. Erro: TOO_MANY_REQUESTS.

GET/avisos/{avisoId}

Detalhar um endereço de aviso#

  • Escopoavisos:gerenciar
  • Chave de APIsim
  • Token OAuthnão (responde 403)

Parâmetros

ParâmetroOndeDescrição
avisoId obrigatóriocaminhoTipo: texto. Formato: ^avs_[0-9A-Z]{26}$.

Respostas

  • 200
    Endereço encontrado.
  • 401
    Chave ou token ausente, inválido, revogado ou expirado.

    Erro: UNAUTHORIZED.

  • 404
    Recurso não existe ou não pertence a este integrador.

    Erro: RESOURCE_NOT_FOUND.

Campos da resposta 200 (data — objeto)
CampoTipoDescrição
id obrigatóriotextoFormato: ^avs_[0-9A-Z]{26}$.
url obrigatóriotexto (uri)
eventos obrigatóriolista de texto
descricaotexto ou nulo
situacao obrigatóriotextodesligado = desligado automaticamente após falhas seguidas por 3 dias. Valores: ativo, pausado, desligado.
ambiente obrigatóriotextoteste = chave sk_test_ (mídia de exemplo, sem custo); producao = chave sk_live_. Valores: teste, producao.
falhasSeguidasinteiroMínimo 0.
ultimaEntregaEmtexto (date-time) ou nulo
desligadoEmtexto (date-time) ou nulo
criadoEm obrigatóriotexto (date-time)
PATCH/avisos/{avisoId}

Alterar eventos, descrição ou reativar um endereço desligado#

  • Escopoavisos:gerenciar
  • Chave de APIsim
  • Token OAuthnão (responde 403)

Parâmetros

ParâmetroOndeDescrição
avisoId obrigatóriocaminhoTipo: texto. Formato: ^avs_[0-9A-Z]{26}$.

Corpo do pedido

application/json · obrigatório

CampoTipoDescrição
eventoslista de textoPelo menos 1 item. Sem repetidos.
descricaotextoAté 120 caracteres.
situacaotextoUse ativo para religar um endereço desligado automaticamente. Valores: ativo, pausado.

Respostas

Campos da resposta 200 (data — objeto)
CampoTipoDescrição
id obrigatóriotextoFormato: ^avs_[0-9A-Z]{26}$.
url obrigatóriotexto (uri)
eventos obrigatóriolista de texto
descricaotexto ou nulo
situacao obrigatóriotextodesligado = desligado automaticamente após falhas seguidas por 3 dias. Valores: ativo, pausado, desligado.
ambiente obrigatóriotextoteste = chave sk_test_ (mídia de exemplo, sem custo); producao = chave sk_live_. Valores: teste, producao.
falhasSeguidasinteiroMínimo 0.
ultimaEntregaEmtexto (date-time) ou nulo
desligadoEmtexto (date-time) ou nulo
criadoEm obrigatóriotexto (date-time)
DELETE/avisos/{avisoId}

Remover um endereço de aviso#

  • Escopoavisos:gerenciar
  • Chave de APIsim
  • Token OAuthnão (responde 403)

Parâmetros

ParâmetroOndeDescrição
avisoId obrigatóriocaminhoTipo: texto. Formato: ^avs_[0-9A-Z]{26}$.

Respostas

  • 204
    Removido. Entregas pendentes para ele são canceladas.
  • 401
    Chave ou token ausente, inválido, revogado ou expirado.

    Erro: UNAUTHORIZED.

  • 404
    Recurso não existe ou não pertence a este integrador.

    Erro: RESOURCE_NOT_FOUND.

POST/avisos/{avisoId}/segredo

Trocar o segredo de assinatura#

O segredo anterior continua aceito por 24 horas para a troca sem interrupção.

  • Escopoavisos:gerenciar
  • Chave de APIsim
  • Token OAuthnão (responde 403)

Parâmetros

ParâmetroOndeDescrição
avisoId obrigatóriocaminhoTipo: texto. Formato: ^avs_[0-9A-Z]{26}$.

Respostas

  • 200
    Novo segredo (mostrado uma única vez).
  • 401
    Chave ou token ausente, inválido, revogado ou expirado.

    Erro: UNAUTHORIZED.

  • 404
    Recurso não existe ou não pertence a este integrador.

    Erro: RESOURCE_NOT_FOUND.

Campos da resposta 200 (data — objeto)
CampoTipoDescrição
segredo obrigatóriotextoFormato: ^whsec_[A-Za-z0-9]{32,}$.
segredoAnteriorValidoAte obrigatóriotexto (date-time)
GET/avisos/{avisoId}/entregas

Listar entregas (inclui as que falharam)#

  • Escopoavisos:gerenciar
  • Chave de APIsim
  • Token OAuthnão (responde 403)

Parâmetros

ParâmetroOndeDescrição
avisoId obrigatóriocaminhoTipo: texto. Formato: ^avs_[0-9A-Z]{26}$.
paginaconsultaNúmero da página, começando em 1. Tipo: inteiro. Padrão: 1. Mínimo 1.
limiteconsultaItens por página (padrão 100, máximo 100). Tipo: inteiro. Padrão: 100. De 1 a 100.
situacaoconsultaTipo: texto. Valores: pendente, entregue, tentando, falhou, cancelada.
eventoconsultaTipo: texto. Valores: produto.conferido, geracao.iniciada, geracao.concluida, geracao.falhou, creditos.baixos, cota.alerta, aviso.teste.

Respostas

  • 200
    Página de entregas.
  • 401
    Chave ou token ausente, inválido, revogado ou expirado.

    Erro: UNAUTHORIZED.

  • 404
    Recurso não existe ou não pertence a este integrador.

    Erro: RESOURCE_NOT_FOUND.

POST/avisos/{avisoId}/entregas/{entregaId}/reenvio

Reenviar uma entrega agora#

Reenvia o mesmo evento (mesmo eventId), com nova assinatura e novo carimbo de horário.

  • Escopoavisos:gerenciar
  • Chave de APIsim
  • Token OAuthnão (responde 403)

Parâmetros

ParâmetroOndeDescrição
avisoId obrigatóriocaminhoTipo: texto. Formato: ^avs_[0-9A-Z]{26}$.
entregaId obrigatóriocaminhoTipo: texto. Formato: ^ent_[0-9A-Z]{26}$.

Respostas

  • 202
    Reenvio enfileirado.
  • 401
    Chave ou token ausente, inválido, revogado ou expirado.

    Erro: UNAUTHORIZED.

  • 404
    Recurso não existe ou não pertence a este integrador.

    Erro: RESOURCE_NOT_FOUND.

  • 409
    Conflito de estado, duplicidade ou Idempotency-Key reutilizada com outro corpo.

    Erro: IDEMPOTENCY_KEY_REUSED.

Campos da resposta 202 (data — objeto)
CampoTipoDescrição
id obrigatóriotextoFormato: ^ent_[0-9A-Z]{26}$.
avisoId obrigatóriotextoFormato: ^avs_[0-9A-Z]{26}$.
eventId obrigatóriotextoFormato: ^evt_[0-9A-Z]{26}$.
evento obrigatóriotextoValores: produto.conferido, geracao.iniciada, geracao.concluida, geracao.falhou, creditos.baixos, cota.alerta, aviso.teste.
situacao obrigatóriotextoValores: pendente, entregue, tentando, falhou, cancelada.
tentativas obrigatóriointeiroMínimo 0.
ultimoStatusHttpinteiro ou nulo
ultimoErrotexto ou nuloResumo curto (ex. tempo esgotado, HTTP 500).
motivoFalhatexto ou nulotempo_esgotado = sem resposta em 5 s; status_http = respondeu fora de 2XX; conexao_recusada, dns, tls = não deu para conectar; assinatura_nao_conferida = no teste, aceitou (2XX) uma entrega com assinatura errada ou carimbo antigo; endereco_bloqueado = o endereço aponta para rede interna e é recusado. Valores: tempo_esgotado, status_http, conexao_recusada, dns, tls, assinatura_nao_conferida, endereco_bloqueado.
comoCorrigirtexto ou nuloO que mudar no endpoint para a próxima entrega passar.
proximaTentativaEmtexto (date-time) ou nulo
entregueEmtexto (date-time) ou nulo
criadoEm obrigatóriotexto (date-time)

Integração#

Status da integração (etapas verificadas automaticamente), registro de chamadas e catálogo de erros.

GET/integracao/status

Status da integração (etapas verificadas automaticamente)#

Etapas verificadas automaticamente pelo Sellume a partir das chamadas reais (o integrador não marca nada). Quando todas as obrigatórias estão ok no ambiente de teste, o acesso de produção fica disponível: a chave sk_live_ só pode ser criada com as etapas aprovadas ou com liberação manual do Sellume (e com contrato vigente aprovado). O mesmo quadro aparece no portal do integrador e no painel do Sellume.

Para a etapa LIMITE_429, uma chamada de teste com o cabeçalho X-Sellume-Teste: forcar-429 (só com sk_test_) recebe um 429 com Retry-After; a etapa fica ok quando a chamada seguinte da mesma chave chega depois do tempo pedido.

  • Escopocontas:ler
  • Chave de APIsim
  • Token OAuthnão (responde 403)

Parâmetros

ParâmetroOndeDescrição
ambienteconsultaPadrão, o ambiente da credencial usada. Tipo: texto. Valores: teste, producao.

Respostas

  • 200
    Etapas e situação do acesso de produção.
  • 401
    Chave ou token ausente, inválido, revogado ou expirado.

    Erro: UNAUTHORIZED.

Campos da resposta 200 (data — objeto)
CampoTipoDescrição
ambiente obrigatóriotextoteste = chave sk_test_ (mídia de exemplo, sem custo); producao = chave sk_live_. Valores: teste, producao.
etapasConcluidas obrigatóriointeiroMínimo 0.
etapasObrigatorias obrigatóriointeiroMínimo 0.
etapas obrigatóriolista de objeto
etapas[].codigo obrigatóriotextoEtapas obrigatórias, verificadas pelo Sellume nas chamadas reais do ambiente de teste: CHAVE_E_PRIMEIRA_CHAMADA (chave sk_test_ criada e uma chamada autenticada 2XX); SUBCONTA_CRIADA (POST /contas 201); PRODUTO_APROVADO (produto com conferência aprovada em pelo menos um tipo); GALERIA_TESTE (galeria concluída no teste); VIDEO_TESTE (vídeo concluído no teste); AVISOS_ASSINATURA (endereço cadastrado e as três entregas de POST /avisos/teste respondidas como esperado); IDEMPOTENCIA (Idempotency-Key em todas as chamadas que gastam crédito nos últimos 7 dias e pelo menos uma repetição segura com Idempotent-Replayed); LIMITE_429 (depois de um 429, a chamada seguinte respeitou o Retry-After). Valores: CHAVE_E_PRIMEIRA_CHAMADA, SUBCONTA_CRIADA, PRODUTO_APROVADO, GALERIA_TESTE, VIDEO_TESTE, AVISOS_ASSINATURA, IDEMPOTENCIA, LIMITE_429.
etapas[].nome obrigatóriotexto
etapas[].situacao obrigatóriotextoValores: pendente, ok, falhou.
etapas[].verificadoEmtexto (date-time) ou nulo
etapas[].evidenciaobjeto ou nuloO que provou a etapa (requestId, eventId, geracaoId).
etapas[].evidencia.requestIdtexto
etapas[].evidencia.eventIdtexto
etapas[].evidencia.geracaoIdtexto
etapas[].ultimaFalhatexto ou nuloPor que a última tentativa não valeu, em português.
etapas[].comoConcluirtexto
etapas[].disponivelNaFaseinteiroFase do ADR-116 em que a etapa passa a ser verificável (antes disso fica pendente). Mínimo 1.
etapas[].linkDocumentacaotexto (uri) ou nuloNulo até a documentação pública (Fase 5).
producao obrigatórioobjeto
producao.situacao obrigatóriotextoValores: bloqueada, pode_pedir, liberada, suspensa.
producao.liberacaotexto ou nuloValores: automatica, manual_master.
producao.liberadaEmtexto (date-time) ou nulo
producao.motivotexto ou nulo
alertasAbertoslista de objeto
alertasAbertos[].tipotextoValores: taxa_de_erro_alta, avisos_falhando, aviso_desligado, saldo_baixo, cota_perto_do_limite.
alertasAbertos[].abertoEmtexto (date-time)
alertasAbertos[].resumotexto
resposta 200
{
  "data": {
    "ambiente": "teste",
    "etapasConcluidas": 6,
    "etapasObrigatorias": 8,
    "producao": {
      "situacao": "bloqueada",
      "liberacao": null,
      "motivo": "Faltam 2 etapas."
    },
    "etapas": [
      {
        "codigo": "CHAVE_E_PRIMEIRA_CHAMADA",
        "nome": "Chave de teste criada e primeira chamada autenticada",
        "situacao": "ok",
        "verificadoEm": "2026-10-10T13:02:11Z",
        "evidencia": {
          "requestId": "req_01J9Z5…"
        }
      },
      {
        "codigo": "AVISOS_ASSINATURA",
        "nome": "Avisos cadastrados e assinatura conferida",
        "situacao": "falhou",
        "verificadoEm": "2026-10-10T15:20:00Z",
        "ultimaFalha": "A entrega com assinatura errada recebeu 200; o seu endpoint precisa recusar com 400, 401 ou 403.",
        "comoConcluir": "Confira X-Sellume-Signature com o segredo whsec_ e recuse quando não bater.",
        "linkDocumentacao": "https://docs.sellume.com.br/avisos#assinatura"
      },
      {
        "codigo": "LIMITE_429",
        "nome": "Limite de uso tratado (respeitou Retry-After)",
        "situacao": "pendente",
        "comoConcluir": "Envie uma chamada com X-Sellume-Teste: forcar-429 e espere o Retry-After antes da próxima.",
        "linkDocumentacao": "https://docs.sellume.com.br/integracao#limite_429"
      }
    ]
  }
}
POST/integracao/pedido-producao

Pedir acesso de produção#

Com todas as etapas obrigatórias do ambiente de teste ok, o acesso é liberado na hora (liberacao: automatica) e o portal permite criar a chave sk_live_ (sempre com contrato vigente). Com etapas pendentes, responde 409 INTEGRATION_STEPS_PENDING e fields traz uma linha por etapa que falta (campo: etapas, codigo = código da etapa, mensagem = como concluir); o Sellume pode liberar à mão, com motivo. Repetir depois de liberado devolve o mesmo acesso (idempotente). Acesso suspenso pelo Sellume responde 403 FORBIDDEN. Chave restrita a contas não pede produção (403). Disponível desde a Fase 3 (11/10/2026); o mesmo pedido existe no portal do integrador.

  • Chave de APIsim
  • Token OAuthnão (responde 403)

Respostas

  • 200
    Acesso de produção liberado.
  • 401
    Chave ou token ausente, inválido, revogado ou expirado.

    Erro: UNAUTHORIZED.

  • 403
    Escopo insuficiente, integrador ou conta pausada, ou origem não autorizada.

    Erro: FORBIDDEN.

  • 409
    Conflito de estado, duplicidade ou Idempotency-Key reutilizada com outro corpo.

    Erro: IDEMPOTENCY_KEY_REUSED.

Campos da resposta 200 (data — objeto)
CampoTipoDescrição
situacao obrigatóriotextoValores: bloqueada, pode_pedir, liberada, suspensa.
liberacaotexto ou nuloValores: automatica, manual_master.
liberadaEmtexto (date-time) ou nulo
motivotexto ou nulo
GET/integracao/chamadas

Registro de chamadas (request log) com o "como corrigir"#

Cada chamada à API com data, endpoint, status, código do erro, mensagem, causa, como corrigir e link da documentação. Retenção: 30 dias. A lista não traz os corpos; use o detalhe.

  • Escopocontas:ler
  • Chave de APIsim
  • Token OAuthnão (responde 403)

Parâmetros

ParâmetroOndeDescrição
paginaconsultaNúmero da página, começando em 1. Tipo: inteiro. Padrão: 1. Mínimo 1.
limiteconsultaItens por página (padrão 100, máximo 100). Tipo: inteiro. Padrão: 100. De 1 a 100.
deconsultaTipo: texto (date-time).
ateconsultaTipo: texto (date-time).
statusconsultaCódigo HTTP exato (ex. 422) ou faixa: 2xx, 4xx, 5xx. Tipo: texto. Formato: ^([1-5]\d{2}|[1-5]xx)$.
metodoconsultaTipo: texto. Valores: GET, POST, PUT, PATCH, DELETE.
endpointconsultaModelo do endereço, ex. /galerias ou /contas/{contaId}/produtos/{codigo}. Tipo: texto. Até 200 caracteres.
codigoErroconsultaValor de error.type ou de uma pendência (ex. PRODUCT_REQUIREMENTS_NOT_MET). Tipo: texto. Até 80 caracteres.
contaIdconsultaTipo: texto. Formato: ^cta_[0-9A-Z]{26}$.
chaveconsultaIdentificador público da chave (sk_test_xxxxxxxxxxxx). Tipo: texto. Até 40 caracteres.
ambienteconsultaTipo: texto. Valores: teste, producao.

Respostas

  • 200
    Página de chamadas.
  • 400
    Dados inválidos.

    Erro: VALIDATION_ERROR.

  • 401
    Chave ou token ausente, inválido, revogado ou expirado.

    Erro: UNAUTHORIZED.

GET/integracao/chamadas/{requestId}

Detalhe de uma chamada, com corpo enviado e recebido (mascarados)#

  • Escopocontas:ler
  • Chave de APIsim
  • Token OAuthnão (responde 403)

Parâmetros

ParâmetroOndeDescrição
requestId obrigatóriocaminhoValor do cabeçalho X-Request-Id. Tipo: texto. Formato: ^req_[0-9A-Z]{26}$.

Respostas

  • 200
    Chamada encontrada.
  • 401
    Chave ou token ausente, inválido, revogado ou expirado.

    Erro: UNAUTHORIZED.

  • 404
    Recurso não existe ou não pertence a este integrador.

    Erro: RESOURCE_NOT_FOUND.

Campos da resposta 200 (data — objeto)
CampoTipoDescrição
requestId obrigatóriotextoFormato: ^req_[0-9A-Z]{26}$.
data obrigatóriotexto (date-time)
ambiente obrigatóriotextoteste = chave sk_test_ (mídia de exemplo, sem custo); producao = chave sk_live_. Valores: teste, producao.
metodo obrigatóriotexto
endpoint obrigatóriotextoModelo do endereço (sem ids).
status obrigatóriointeiro
duracaoMsinteiro
chavetexto ou nuloIdentificador público da chave (nunca o segredo).
contaIdtexto ou nulo
codigoErrotexto ou nulo
mensagemtexto ou nulo
causatexto ou nuloO que aconteceu nesta chamada, em português.
comoCorrigirtexto ou nulo
linkDocumentacaotexto (uri) ou nulo
idempotentebooleano ou nulotrue quando foi repetição com a mesma Idempotency-Key.
corpoEnviadoqualquerCorpo do pedido, mascarado e cortado em 64 KB.
corpoRecebidoqualquerCorpo da resposta, mascarado e cortado em 64 KB.
cabecalhosEnviadosobjetoAuthorization e Idempotency-Key aparecem mascarados. Chaves livres.
resposta 200
{
  "data": {
    "requestId": "req_01J9Z9A1B2C3D4E5F6G7H8J9K0",
    "data": "2026-10-10T15:31:02Z",
    "ambiente": "teste",
    "metodo": "POST",
    "endpoint": "/videos",
    "status": 422,
    "duracaoMs": 84,
    "chave": "sk_test_ab12cd34ef56",
    "codigoErro": "PRODUCT_REQUIREMENTS_NOT_MET",
    "mensagem": "O produto não atende aos requisitos mínimos",
    "causa": "O CinePremium foi reprovado na conferência: há 2 fotos aprovadas e são necessárias 3.",
    "comoCorrigir": "Envie pelo menos 3 fotos do produto sozinho, de lados diferentes, fundo liso, lado menor ≥ 800 px; depois confira o produto de novo.",
    "linkDocumentacao": "https://docs.sellume.com.br/requisitos#cinepremium",
    "cabecalhosEnviados": {
      "authorization": "Bearer sk_test_ab12cd34ef56_••••",
      "idempotency-key": "5c0a••••9c40"
    },
    "corpoEnviado": {
      "produtoId": "prd_01J9Z7A1B2C3D4E5F6G7H8J9K0",
      "tipo": "cinepremium"
    }
  }
}
GET/integracao/erros

Catálogo de erros e pendências, com "como corrigir"#

Todos os error.type da API e todos os códigos de pendência da conferência. Também publicado em docs.sellume.com.br.

  • Escopocontas:ler
  • Chave de APIsim
  • Token OAuthsim

Respostas

  • 200
    Catálogo vigente.
  • 401
    Chave ou token ausente, inválido, revogado ou expirado.

    Erro: UNAUTHORIZED.

OAuth#

Token e revogação do OAuth2 para contas vinculadas. Veja o fluxo completo em Autenticação.

POSThttps://api.sellume.com.br/oauth/token

Trocar o código por tokens ou renovar com o refresh token#

authorization_code: depois que o vendedor autoriza em https://app.sellume.com.br/oauth/autorizar, troque o code (vale 60 s, uso único) informando a mesma redirect_uri e o code_verifier do PKCE (S256 obrigatório). refresh_token: devolve um novo par e invalida o refresh usado (rotativo). Reusar um refresh já trocado, ou um código já usado, revoga a autorização inteira (o vendedor precisa autorizar de novo).

Autenticação do app: HTTP Basic (client_id:client_secret) ou client_id + client_secret no corpo (app confidencial); app público manda só client_id. Limite: 60 chamadas por minuto por app; 20 falhas de autenticação em 10 minutos bloqueiam o app por 10 minutos. Resposta com Cache-Control: no-store.

Corpo do pedido

application/x-www-form-urlencoded ou application/json · obrigatório

CampoTipoDescrição
grant_type obrigatóriotextoValores: authorization_code, refresh_token.
codetextoSó authorization_code. Formato: ^oac_[A-Za-z0-9_-]{43}$.
redirect_uritextoSó authorization_code: a mesma da autorização.
code_verifiertextoSó authorization_code (PKCE). De 43 a 128 caracteres.
refresh_tokentextoSó refresh_token.
scopetextoSó refresh_token, opcional: escopos menores que os autorizados, separados por espaço.
client_idtextoSe não usar HTTP Basic. Formato: ^app_[0-9A-Z]{26}$.
client_secrettextoSe não usar HTTP Basic (app confidencial).
exemplo · Trocar o código
grant_type=authorization_code&code=oac_…&redirect_uri=https%3A%2F%2Ferp.exemplo.com.br%2Foauth%2Fretorno&code_verifier=…&client_id=app_…
exemplo · Renovar com o refresh token
grant_type=refresh_token&refresh_token=ort_test_…&client_id=app_…

Respostas

Campos da resposta 200 (objeto)
CampoTipoDescrição
access_token obrigatóriotexto
token_type obrigatóriotextoSempre Bearer.
expires_in obrigatóriointeiroSempre 3600.
refresh_token obrigatóriotexto
scope obrigatóriotexto
conta_id obrigatóriotextoA conta vinculada que o token enxerga. Formato: ^cta_[0-9A-Z]{26}$.
resposta 200
{
  "access_token": "oat_test_…",
  "token_type": "Bearer",
  "expires_in": 3600,
  "refresh_token": "ort_test_…",
  "scope": "contas:ler produtos:escrever geracoes:criar",
  "conta_id": "cta_…"
}
POSThttps://api.sellume.com.br/oauth/revogar

Revogar um token (encerra a autorização)#

RFC 7009. Envie o access ou o refresh token; a autorização inteira é encerrada (todos os tokens dela param) e a conta vinculada fica pausada até o vendedor autorizar de novo. Responde 200 também para token desconhecido.

Corpo do pedido

application/x-www-form-urlencoded · obrigatório

CampoTipoDescrição
token obrigatóriotextoAccess (oat_…) ou refresh (ort_…).
token_type_hinttextoOpcional; ignorado. Valores: access_token, refresh_token.
client_idtextoSe não usar HTTP Basic.
client_secrettextoSe não usar HTTP Basic (app confidencial).
exemplo
token=ort_test_…&client_id=app_…

Respostas

Avisos enviados ao seu endereço#

Eventos que o Sellume envia por POST aos endereços cadastrados em POST/avisos. Como conferir a assinatura: Avisos e assinatura.

POSTseu endereço · produto.conferido

Conferência do produto concluída#

Cabeçalhos enviados

ParâmetroOndeDescrição
X-Sellume-Signature obrigatóriocabeçalhot=<segundos unix>,v1=<hex>, onde v1 = HMAC-SHA256(segredo, "<t>.<corpo bruto>"). Durante a rotação do segredo pode vir mais de um v1. Recuse se t estiver a mais de 5 minutos do seu relógio (proteção contra reenvio de má-fé) e compare em tempo constante. Tipo: texto. Formato: ^t=\d{10},v1=[a-f0-9]{64}(,v1=[a-f0-9]{64})*$.
X-Sellume-Event-Id obrigatóriocabeçalhoIgual a eventId do corpo. Use para descartar duplicados (a entrega é "pelo menos uma vez"). Tipo: texto. Formato: ^evt_[0-9A-Z]{26}$.

Corpo: o envelope com event = produto.conferido e data no formato Conferencia. Responda 2XX em até 5 segundos.

POSTseu endereço · geracao.concluida

Geração entregue (inteira ou parcial)#

Enviado quando a geração termina com entrega (concluida ou parcial). O aviso traz o resumo e os links; links expiram — consulte GET /geracoes/{geracaoId} para links novos.

Cabeçalhos enviados

ParâmetroOndeDescrição
X-Sellume-Signature obrigatóriocabeçalhot=<segundos unix>,v1=<hex>, onde v1 = HMAC-SHA256(segredo, "<t>.<corpo bruto>"). Durante a rotação do segredo pode vir mais de um v1. Recuse se t estiver a mais de 5 minutos do seu relógio (proteção contra reenvio de má-fé) e compare em tempo constante. Tipo: texto. Formato: ^t=\d{10},v1=[a-f0-9]{64}(,v1=[a-f0-9]{64})*$.
X-Sellume-Event-Id obrigatóriocabeçalhoIgual a eventId do corpo. Use para descartar duplicados (a entrega é "pelo menos uma vez"). Tipo: texto. Formato: ^evt_[0-9A-Z]{26}$.

Corpo: o envelope com event = geracao.concluida e data no formato Geracao. Responda 2XX em até 5 segundos.

exemplo
{
  "eventId": "evt_01J9Z8H7J6K5L4M3N2P1Q0R9S8",
  "date": "2026-10-10T14:08:32Z",
  "version": "1",
  "event": "geracao.concluida",
  "integradorId": "itg_01J9Z5W4V3U2T1S0R9Q8P7N6M5",
  "contaId": "cta_01J9Z6K8X2M4R7T1Q3W5E8Y0U2",
  "data": {
    "id": "ger_01J9Z8C4D5E6F7G8H9J0K1L2M3",
    "tipo": "galeria",
    "situacao": "concluida",
    "ambiente": "producao",
    "contaId": "cta_01J9Z6K8X2M4R7T1Q3W5E8Y0U2",
    "produtoId": "prd_01J9Z7A1B2C3D4E5F6G7H8J9K0",
    "creditos": {
      "reservados": 60,
      "cobrados": 60,
      "devolvidos": 0
    },
    "criadoEm": "2026-10-10T14:07:00Z"
  }
}
POSTseu endereço · geracao.falhou

Geração falhou (créditos devolvidos)#

Cabeçalhos enviados

ParâmetroOndeDescrição
X-Sellume-Signature obrigatóriocabeçalhot=<segundos unix>,v1=<hex>, onde v1 = HMAC-SHA256(segredo, "<t>.<corpo bruto>"). Durante a rotação do segredo pode vir mais de um v1. Recuse se t estiver a mais de 5 minutos do seu relógio (proteção contra reenvio de má-fé) e compare em tempo constante. Tipo: texto. Formato: ^t=\d{10},v1=[a-f0-9]{64}(,v1=[a-f0-9]{64})*$.
X-Sellume-Event-Id obrigatóriocabeçalhoIgual a eventId do corpo. Use para descartar duplicados (a entrega é "pelo menos uma vez"). Tipo: texto. Formato: ^evt_[0-9A-Z]{26}$.

Corpo: o envelope com event = geracao.falhou e data no formato Geracao. Responda 2XX em até 5 segundos.

POSTseu endereço · creditos.baixos

Saldo abaixo do limite de alerta configurado#

Cabeçalhos enviados

ParâmetroOndeDescrição
X-Sellume-Signature obrigatóriocabeçalhot=<segundos unix>,v1=<hex>, onde v1 = HMAC-SHA256(segredo, "<t>.<corpo bruto>"). Durante a rotação do segredo pode vir mais de um v1. Recuse se t estiver a mais de 5 minutos do seu relógio (proteção contra reenvio de má-fé) e compare em tempo constante. Tipo: texto. Formato: ^t=\d{10},v1=[a-f0-9]{64}(,v1=[a-f0-9]{64})*$.
X-Sellume-Event-Id obrigatóriocabeçalhoIgual a eventId do corpo. Use para descartar duplicados (a entrega é "pelo menos uma vez"). Tipo: texto. Formato: ^evt_[0-9A-Z]{26}$.

Corpo: o envelope com event = creditos.baixos e data no formato Saldo. Responda 2XX em até 5 segundos.

POSTseu endereço · cota.alerta

Uso do ciclo chegou a 70% ou 90% da cota do plano, ou bateu o teto (cota esgotada)#

Cabeçalhos enviados

ParâmetroOndeDescrição
X-Sellume-Signature obrigatóriocabeçalhot=<segundos unix>,v1=<hex>, onde v1 = HMAC-SHA256(segredo, "<t>.<corpo bruto>"). Durante a rotação do segredo pode vir mais de um v1. Recuse se t estiver a mais de 5 minutos do seu relógio (proteção contra reenvio de má-fé) e compare em tempo constante. Tipo: texto. Formato: ^t=\d{10},v1=[a-f0-9]{64}(,v1=[a-f0-9]{64})*$.
X-Sellume-Event-Id obrigatóriocabeçalhoIgual a eventId do corpo. Use para descartar duplicados (a entrega é "pelo menos uma vez"). Tipo: texto. Formato: ^evt_[0-9A-Z]{26}$.

Corpo: o envelope com event = cota.alerta e data no formato CotaDoMes. Responda 2XX em até 5 segundos.

POSTseu endereço · aviso.teste

Aviso de teste pedido pelo integrador#

Cabeçalhos enviados

ParâmetroOndeDescrição
X-Sellume-Signature obrigatóriocabeçalhot=<segundos unix>,v1=<hex>, onde v1 = HMAC-SHA256(segredo, "<t>.<corpo bruto>"). Durante a rotação do segredo pode vir mais de um v1. Recuse se t estiver a mais de 5 minutos do seu relógio (proteção contra reenvio de má-fé) e compare em tempo constante. Tipo: texto. Formato: ^t=\d{10},v1=[a-f0-9]{64}(,v1=[a-f0-9]{64})*$.
X-Sellume-Event-Id obrigatóriocabeçalhoIgual a eventId do corpo. Use para descartar duplicados (a entrega é "pelo menos uma vez"). Tipo: texto. Formato: ^evt_[0-9A-Z]{26}$.

Corpo: o envelope com event = aviso.teste. Responda 2XX em até 5 segundos.