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.
B=https://api.sellume.com.br/v1O endereço técnico antigo continua aceito (Mudanças). Convenções:
- JSON em UTF-8, campos em português
camelCase, valores de lista emsnake_case. Ignore campos que você não conhece: campos novos podem entrar a qualquer momento (política de mudanças). - Respostas em
{ "data": … }. Listas compaginacao(pagina,limitepadrão e máximo 100,total,totalPaginas) e os parâmetrospaginaelimite. - 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-Ide os cabeçalhos de limiteX-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
/contasListar contas do integrador - POST
/contasCriar a subconta de um cliente final - GET
/contas/{contaId}Detalhar uma conta - PATCH
/contas/{contaId}Atualizar nome, metadados ou situação da subconta - DELETE
/contas/{contaId}Encerrar a subconta
/contasListar contas do integrador#
- Escopo
contas:ler - Chave de APIsim
- Token OAuthsim
Parâmetros
| Parâmetro | Onde | Descrição |
|---|---|---|
pagina | consulta | Número da página, começando em 1. Tipo: inteiro. Padrão: 1. Mínimo 1. |
limite | consulta | Itens por página (padrão 100, máximo 100). Tipo: inteiro. Padrão: 100. De 1 a 100. |
situacao | consulta | Tipo: texto. Valores: ativa, pausada, encerrada. |
codigoExterno | consulta | Tipo: texto. Até 120 caracteres. |
origem | consulta | Tipo: texto. Valores: subconta, vinculada. |
Respostas
- 200Página de contas.
Cabeçalhos:
X-RateLimit-Limit,X-RateLimit-Remaining,X-RateLimit-Reset. - 401Chave ou token ausente, inválido, revogado ou expirado.
Erro:
UNAUTHORIZED. - 429Limite de pedidos por minuto atingido.
Cabeçalhos:
Retry-After,X-RateLimit-Limit,X-RateLimit-Remaining,X-RateLimit-Reset. Erro:TOO_MANY_REQUESTS.
/contasCriar 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.
- Escopo
contas:escrever - Chave de APIsim
- Token OAuthnão (responde
403)
Parâmetros
| Parâmetro | Onde | Descrição |
|---|---|---|
Idempotency-Key | cabeçalho | Opcional 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
| Campo | Tipo | Descrição |
|---|---|---|
codigoExterno obrigatório | texto | De 1 a 120 caracteres. |
nome obrigatório | texto | Nome comercial (loja). Não é obrigatório nome de pessoa. De 2 a 160 caracteres. |
metadados | objeto | Até 20 chaves livres do integrador (texto até 500 caracteres). Não use dados pessoais sensíveis. Até 20 chaves. Chaves livres. |
{
"codigoExterno": "vendedor-98213",
"nome": "Loja Casa Bonita",
"metadados": {
"planoNoErp": "ouro"
}
}Respostas
- 201Subconta criada.
Cabeçalhos:
X-RateLimit-Limit,X-RateLimit-Remaining,X-RateLimit-Reset,X-Request-Id. - 400Dados inválidos.
Erro:
VALIDATION_ERROR. - 401Chave ou token ausente, inválido, revogado ou expirado.
Erro:
UNAUTHORIZED. - 403Escopo insuficiente, integrador ou conta pausada, ou origem não autorizada.
Erro:
FORBIDDEN. - 409Conflito de estado, duplicidade ou Idempotency-Key reutilizada com outro corpo.
Erro:
IDEMPOTENCY_KEY_REUSED. - 429Limite de pedidos por minuto atingido.
Cabeçalhos:
Retry-After,X-RateLimit-Limit,X-RateLimit-Remaining,X-RateLimit-Reset. Erro:TOO_MANY_REQUESTS. - 500Erro inesperado (sem detalhe interno).
Erro:
INTERNAL_ERROR.
Campos da resposta 201 (data — objeto)
| Campo | Tipo | Descrição |
|---|---|---|
id obrigatório | texto | Formato: ^cta_[0-9A-Z]{26}$. |
codigoExterno obrigatório | texto ou nulo | |
nome obrigatório | texto | |
origem obrigatório | texto | subconta = criada pelo integrador; vinculada = conta Sellume do vendedor autorizada por OAuth. Valores: subconta, vinculada. |
situacao obrigatório | texto | Valores: ativa, pausada, encerrada. |
ambiente obrigatório | texto | teste = chave sk_test_ (mídia de exemplo, sem custo); producao = chave sk_live_. Valores: teste, producao. |
metadados | objeto | Até 20 chaves livres do integrador (texto até 500 caracteres). Não use dados pessoais sensíveis. Até 20 chaves. Chaves livres. |
criadoEm obrigatório | texto (date-time) | |
atualizadoEm obrigatório | texto (date-time) |
{
"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"
}
}/contas/{contaId}Detalhar uma conta#
- Escopo
contas:ler - Chave de APIsim
- Token OAuthsim
Parâmetros
| Parâmetro | Onde | Descrição |
|---|---|---|
contaId obrigatório | caminho | Tipo: texto. Formato: ^cta_[0-9A-Z]{26}$. |
Respostas
- 200Conta encontrada.
- 401Chave ou token ausente, inválido, revogado ou expirado.
Erro:
UNAUTHORIZED. - 404Recurso não existe ou não pertence a este integrador.
Erro:
RESOURCE_NOT_FOUND. - 429Limite 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)
| Campo | Tipo | Descrição |
|---|---|---|
id obrigatório | texto | Formato: ^cta_[0-9A-Z]{26}$. |
codigoExterno obrigatório | texto ou nulo | |
nome obrigatório | texto | |
origem obrigatório | texto | subconta = criada pelo integrador; vinculada = conta Sellume do vendedor autorizada por OAuth. Valores: subconta, vinculada. |
situacao obrigatório | texto | Valores: ativa, pausada, encerrada. |
ambiente obrigatório | texto | teste = chave sk_test_ (mídia de exemplo, sem custo); producao = chave sk_live_. Valores: teste, producao. |
metadados | objeto | Até 20 chaves livres do integrador (texto até 500 caracteres). Não use dados pessoais sensíveis. Até 20 chaves. Chaves livres. |
criadoEm obrigatório | texto (date-time) | |
atualizadoEm obrigatório | texto (date-time) |
/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.
- Escopo
contas:escrever - Chave de APIsim
- Token OAuthnão (responde
403)
Parâmetros
| Parâmetro | Onde | Descrição |
|---|---|---|
contaId obrigatório | caminho | Tipo: texto. Formato: ^cta_[0-9A-Z]{26}$. |
Corpo do pedido
application/json · obrigatório
| Campo | Tipo | Descrição |
|---|---|---|
nome | texto | De 2 a 160 caracteres. |
situacao | texto | Valores: ativa, pausada. |
metadados | objeto | Até 20 chaves livres do integrador (texto até 500 caracteres). Não use dados pessoais sensíveis. Até 20 chaves. Chaves livres. |
{
"situacao": "pausada"
}Respostas
- 200Conta atualizada.
- 400Dados inválidos.
Erro:
VALIDATION_ERROR. - 401Chave ou token ausente, inválido, revogado ou expirado.
Erro:
UNAUTHORIZED. - 404Recurso não existe ou não pertence a este integrador.
Erro:
RESOURCE_NOT_FOUND. - 429Limite 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)
| Campo | Tipo | Descrição |
|---|---|---|
id obrigatório | texto | Formato: ^cta_[0-9A-Z]{26}$. |
codigoExterno obrigatório | texto ou nulo | |
nome obrigatório | texto | |
origem obrigatório | texto | subconta = criada pelo integrador; vinculada = conta Sellume do vendedor autorizada por OAuth. Valores: subconta, vinculada. |
situacao obrigatório | texto | Valores: ativa, pausada, encerrada. |
ambiente obrigatório | texto | teste = chave sk_test_ (mídia de exemplo, sem custo); producao = chave sk_live_. Valores: teste, producao. |
metadados | objeto | Até 20 chaves livres do integrador (texto até 500 caracteres). Não use dados pessoais sensíveis. Até 20 chaves. Chaves livres. |
criadoEm obrigatório | texto (date-time) | |
atualizadoEm obrigatório | texto (date-time) |
/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).
- Escopo
contas:escrever - Chave de APIsim
- Token OAuthnão (responde
403)
Parâmetros
| Parâmetro | Onde | Descrição |
|---|---|---|
contaId obrigatório | caminho | Tipo: texto. Formato: ^cta_[0-9A-Z]{26}$. |
Respostas
- 202Encerramento aceito.
- 401Chave ou token ausente, inválido, revogado ou expirado.
Erro:
UNAUTHORIZED. - 404Recurso não existe ou não pertence a este integrador.
Erro:
RESOURCE_NOT_FOUND. - 409Conflito de estado, duplicidade ou Idempotency-Key reutilizada com outro corpo.
Erro:
IDEMPOTENCY_KEY_REUSED.
Campos da resposta 202 (data — objeto)
| Campo | Tipo | Descrição |
|---|---|---|
id obrigatório | texto | Formato: ^cta_[0-9A-Z]{26}$. |
codigoExterno obrigatório | texto ou nulo | |
nome obrigatório | texto | |
origem obrigatório | texto | subconta = criada pelo integrador; vinculada = conta Sellume do vendedor autorizada por OAuth. Valores: subconta, vinculada. |
situacao obrigatório | texto | Valores: ativa, pausada, encerrada. |
ambiente obrigatório | texto | teste = chave sk_test_ (mídia de exemplo, sem custo); producao = chave sk_live_. Valores: teste, producao. |
metadados | objeto | Até 20 chaves livres do integrador (texto até 500 caracteres). Não use dados pessoais sensíveis. Até 20 chaves. Chaves livres. |
criadoEm obrigatório | texto (date-time) | |
atualizadoEm obrigatório | texto (date-time) |
Produtos#
Ficha do produto (única fonte de dados e fotos) e conferência dos requisitos mínimos.
- GET
/contas/{contaId}/produtosListar produtos da conta - GET
/contas/{contaId}/produtos/{codigo}Detalhar o produto - PUT
/contas/{contaId}/produtos/{codigo}Enviar ou atualizar a ficha do produto (única fonte) - DELETE
/contas/{contaId}/produtos/{codigo}Remover o produto - GET
/produtos/{produtoId}/conferenciaÚltimo resultado da conferência da versão atual - POST
/produtos/{produtoId}/conferenciaConferir os requisitos mínimos (obrigatório antes de gerar, grátis)
/contas/{contaId}/produtosListar produtos da conta#
- Escopo
produtos:ler - Chave de APIsim
- Token OAuthsim
Parâmetros
| Parâmetro | Onde | Descrição |
|---|---|---|
contaId obrigatório | caminho | Tipo: texto. Formato: ^cta_[0-9A-Z]{26}$. |
pagina | consulta | Número da página, começando em 1. Tipo: inteiro. Padrão: 1. Mínimo 1. |
limite | consulta | Itens por página (padrão 100, máximo 100). Tipo: inteiro. Padrão: 100. De 1 a 100. |
situacao | consulta | Tipo: texto. Valores: conferindo, aprovado, aprovado_parcial, reprovado, falhou. |
Respostas
- 200Página de produtos.
- 401Chave ou token ausente, inválido, revogado ou expirado.
Erro:
UNAUTHORIZED. - 404Recurso não existe ou não pertence a este integrador.
Erro:
RESOURCE_NOT_FOUND.
/contas/{contaId}/produtos/{codigo}Detalhar o produto#
- Escopo
produtos:ler - Chave de APIsim
- Token OAuthsim
Parâmetros
| Parâmetro | Onde | Descrição |
|---|---|---|
contaId obrigatório | caminho | Tipo: texto. Formato: ^cta_[0-9A-Z]{26}$. |
codigo obrigatório | caminho | Código (SKU) do produto no sistema do integrador. Tipo: texto. De 1 a 120 caracteres. |
Respostas
- 200Produto encontrado.
- 401Chave ou token ausente, inválido, revogado ou expirado.
Erro:
UNAUTHORIZED. - 404Recurso não existe ou não pertence a este integrador.
Erro:
RESOURCE_NOT_FOUND.
Campos da resposta 200 (data — objeto)
| Campo | Tipo | Descrição |
|---|---|---|
id obrigatório | texto | Formato: ^prd_[0-9A-Z]{26}$. |
contaId obrigatório | texto | Formato: ^cta_[0-9A-Z]{26}$. |
codigo obrigatório | texto | |
nome | texto ou nulo | |
situacao obrigatório | texto | Resumo 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ório | inteiro | Mínimo 1. |
conferenciaId | texto ou nulo | Conferência da versão atual. |
anuncio | objeto | Referê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ório | texto | Só para o metadado anuncio (rastreio). O Sellume não lê nenhum marketplace. Valores: mercado_livre, shopee, amazon, magalu, americanas, shein, tiktok_shop, outro. |
anuncio.id | texto | Até 60 caracteres. |
anuncio.url | texto (uri) | Até 2048 caracteres. |
fotos | objeto | |
fotos.recebidas | inteiro | Mínimo 0. |
fotos.aprovadas | inteiro | Mínimo 0. |
erro | objeto ou nulo | |
erro.type | texto | |
erro.message | texto | |
criadoEm obrigatório | texto (date-time) | |
atualizadoEm obrigatório | texto (date-time) |
/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.
- Escopo
produtos:escrever - Chave de APIsim
- Token OAuthsim
Parâmetros
| Parâmetro | Onde | Descrição |
|---|---|---|
contaId obrigatório | caminho | Tipo: texto. Formato: ^cta_[0-9A-Z]{26}$. |
codigo obrigatório | caminho | Có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.
| Campo | Tipo | Descrição |
|---|---|---|
codigo | texto | Igual ao código do caminho. Só leitura. |
nome obrigatório | texto | De 3 a 200 caracteres. |
descricao | texto | Até 10000 caracteres. |
descricaoComplementar | texto | Até 10000 caracteres. |
marca | texto | Até 120 caracteres. |
modelo | texto | Até 120 caracteres. |
gtin | texto | EAN/GTIN. Formato: ^(\d{8}|\d{12,14})$. |
categoria | objeto | |
categoria.codigo | texto | Até 120 caracteres. |
categoria.nome | texto | Até 200 caracteres. |
categoria.caminho | texto | Ex.: Casa > Iluminação > Arandelas Até 500 caracteres. |
atributos | lista de objeto | Até 60 itens. |
atributos[].nome obrigatório | texto | De 1 a 120 caracteres. |
atributos[].valor obrigatório | texto | De 1 a 500 caracteres. |
imagens obrigatório | lista de objeto | De 1 a 20 itens. |
imagens[].url obrigatório | texto (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[].ordem | inteiro | De 1 a 50. |
imagens[].principal | booleano | A foto principal precisa ser do produto limpo: fora da embalagem, fundo liso, sem pessoa, só o item anunciado. Padrão: false. |
video | objeto | Vídeo de referência do produto (opcional; guardado, não usado pelo motor atual). |
video.url | texto (uri) | Até 2048 caracteres. |
dimensoes | objeto | |
dimensoes.largura | número | Mínimo 0. |
dimensoes.altura | número | Mínimo 0. |
dimensoes.profundidade | número | Mínimo 0. |
dimensoes.unidade | texto | Valores: cm, mm, m. Padrão: cm. |
dimensoes.pesoLiquido | número | Mínimo 0. |
dimensoes.pesoBruto | número | Mínimo 0. |
dimensoes.unidadePeso | texto | Valores: kg, g. Padrão: kg. |
variacoes | lista de objeto | Até 50 itens. |
variacoes[].codigo obrigatório | texto | De 1 a 120 caracteres. |
variacoes[].nome | texto | Até 200 caracteres. |
variacoes[].gtin | texto | Formato: ^(\d{8}|\d{12,14})$. |
variacoes[].atributos | lista de objeto | Até 30 itens. |
variacoes[].atributos[].nome obrigatório | texto | De 1 a 120 caracteres. |
variacoes[].atributos[].valor obrigatório | texto | De 1 a 500 caracteres. |
variacoes[].imagens | lista de objeto | Até 20 itens. |
variacoes[].imagens[].url obrigatório | texto (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[].ordem | inteiro | De 1 a 50. |
variacoes[].imagens[].principal | booleano | A foto principal precisa ser do produto limpo: fora da embalagem, fundo liso, sem pessoa, só o item anunciado. Padrão: false. |
composicaoOferta | lista de objeto | O que vem na oferta e quantas unidades. Obrigatório em kit ou oferta com mais de 1 unidade. Até 30 itens. |
composicaoOferta[].item obrigatório | texto | De 1 a 120 caracteres. |
composicaoOferta[].quantidade obrigatório | inteiro | De 1 a 999. |
garantia | texto | Ex.: 12 meses contra defeitos de fabricação. Até 300 caracteres. |
avaliacoes | lista de objeto | Até 50 itens. |
avaliacoes[].nota | inteiro | De 1 a 5. |
avaliacoes[].texto obrigatório | texto | De 10 a 2000 caracteres. |
avaliacoes[].data | texto (date) | |
perguntas | lista de objeto | Até 50 itens. |
perguntas[].pergunta obrigatório | texto | De 5 a 1000 caracteres. |
perguntas[].resposta | texto | Até 2000 caracteres. |
provaSocial | objeto | Volume declarado pelo integrador (oficial por contrato). |
provaSocial.totalAvaliacoes | inteiro | Mínimo 0. |
provaSocial.notaMedia | número | De 1 a 5. |
provaSocial.vendidos | inteiro | Mínimo 0. |
anuncio | objeto | Referê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ório | texto | Só para o metadado anuncio (rastreio). O Sellume não lê nenhum marketplace. Valores: mercado_livre, shopee, amazon, magalu, americanas, shein, tiktok_shop, outro. |
anuncio.id | texto | Até 60 caracteres. |
anuncio.url | texto (uri) | Até 2048 caracteres. |
{
"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
- 200Ficha atualizada (nova versão; conferência iniciada).
- 201Produto criado.
- 400Dados inválidos.
Erro:
VALIDATION_ERROR. - 401Chave ou token ausente, inválido, revogado ou expirado.
Erro:
UNAUTHORIZED. - 404Recurso não existe ou não pertence a este integrador.
Erro:
RESOURCE_NOT_FOUND. - 413Corpo ou foto acima do tamanho permitido.
Erro:
PAYLOAD_TOO_LARGE. - 429Limite 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)
| Campo | Tipo | Descrição |
|---|---|---|
id obrigatório | texto | Formato: ^prd_[0-9A-Z]{26}$. |
contaId obrigatório | texto | Formato: ^cta_[0-9A-Z]{26}$. |
codigo obrigatório | texto | |
nome | texto ou nulo | |
situacao obrigatório | texto | Resumo 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ório | inteiro | Mínimo 1. |
conferenciaId | texto ou nulo | Conferência da versão atual. |
anuncio | objeto | Referê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ório | texto | Só para o metadado anuncio (rastreio). O Sellume não lê nenhum marketplace. Valores: mercado_livre, shopee, amazon, magalu, americanas, shein, tiktok_shop, outro. |
anuncio.id | texto | Até 60 caracteres. |
anuncio.url | texto (uri) | Até 2048 caracteres. |
fotos | objeto | |
fotos.recebidas | inteiro | Mínimo 0. |
fotos.aprovadas | inteiro | Mínimo 0. |
erro | objeto ou nulo | |
erro.type | texto | |
erro.message | texto | |
criadoEm obrigatório | texto (date-time) | |
atualizadoEm obrigatório | texto (date-time) |
Campos da resposta 201 (data — objeto)
| Campo | Tipo | Descrição |
|---|---|---|
id obrigatório | texto | Formato: ^prd_[0-9A-Z]{26}$. |
contaId obrigatório | texto | Formato: ^cta_[0-9A-Z]{26}$. |
codigo obrigatório | texto | |
nome | texto ou nulo | |
situacao obrigatório | texto | Resumo 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ório | inteiro | Mínimo 1. |
conferenciaId | texto ou nulo | Conferência da versão atual. |
anuncio | objeto | Referê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ório | texto | Só para o metadado anuncio (rastreio). O Sellume não lê nenhum marketplace. Valores: mercado_livre, shopee, amazon, magalu, americanas, shein, tiktok_shop, outro. |
anuncio.id | texto | Até 60 caracteres. |
anuncio.url | texto (uri) | Até 2048 caracteres. |
fotos | objeto | |
fotos.recebidas | inteiro | Mínimo 0. |
fotos.aprovadas | inteiro | Mínimo 0. |
erro | objeto ou nulo | |
erro.type | texto | |
erro.message | texto | |
criadoEm obrigatório | texto (date-time) | |
atualizadoEm obrigatório | texto (date-time) |
/contas/{contaId}/produtos/{codigo}Remover o produto#
Remove o produto da conta. Gerações já entregues continuam no extrato e em GET /geracoes.
- Escopo
produtos:escrever - Chave de APIsim
- Token OAuthsim
Parâmetros
| Parâmetro | Onde | Descrição |
|---|---|---|
contaId obrigatório | caminho | Tipo: texto. Formato: ^cta_[0-9A-Z]{26}$. |
codigo obrigatório | caminho | Código (SKU) do produto no sistema do integrador. Tipo: texto. De 1 a 120 caracteres. |
Respostas
- 204Produto removido.
- 401Chave ou token ausente, inválido, revogado ou expirado.
Erro:
UNAUTHORIZED. - 404Recurso não existe ou não pertence a este integrador.
Erro:
RESOURCE_NOT_FOUND.
/produtos/{produtoId}/conferenciaÚltimo resultado da conferência da versão atual#
- Escopo
produtos:ler - Chave de APIsim
- Token OAuthsim
Parâmetros
| Parâmetro | Onde | Descrição |
|---|---|---|
produtoId obrigatório | caminho | Tipo: texto. Formato: ^prd_[0-9A-Z]{26}$. |
Respostas
- 200Última conferência da versão atual (concluída ou em andamento).
- 401Chave ou token ausente, inválido, revogado ou expirado.
Erro:
UNAUTHORIZED. - 404Recurso não existe ou não pertence a este integrador.
Erro:
RESOURCE_NOT_FOUND.
Campos da resposta 200 (data — objeto)
| Campo | Tipo | Descrição |
|---|---|---|
id obrigatório | texto | Formato: ^cnf_[0-9A-Z]{26}$. |
produtoId obrigatório | texto | Formato: ^prd_[0-9A-Z]{26}$. |
versaoProduto obrigatório | inteiro | Mínimo 1. |
politica obrigatório | texto | Versão das regras usada (ex. integradores.requisitos.v1). |
situacao obrigatório | texto | Valores: em_andamento, concluida, falhou. |
conferidoEm | texto (date-time) ou nulo | |
resultados obrigatório | lista de objeto | |
resultados[].tipo obrigatório | texto | Valores: galeria, video_apresentacao, video_cinepremium. |
resultados[].aprovado obrigatório | booleano | |
resultados[].creditos | inteiro | Preço na tabela vigente do integrador (na galeria, para a maior quantidade aprovada). Mínimo 0. |
resultados[].quantidadeMaximaImagens | inteiro ou nulo | Só galeria: maior quantidade que o motor sustenta (3 a 10). |
resultados[].quantidadesAprovadas | lista de inteiro | Só galeria: quais das opções 3, 6 e 10 podem ser pedidas. |
resultados[].notaVideo | inteiro ou nulo | Só vídeos. De 0 a 10. |
resultados[].pendencias obrigatório | lista de objeto | |
resultados[].pendencias[].codigo obrigatório | texto | Có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ório | texto | bloqueio reprova o tipo; fraco aprova, mas a qualidade cai. Valores: bloqueio, fraco. |
resultados[].pendencias[].campo | texto | Campo da ficha (ex. imagens[2], atributos, descricao). |
resultados[].pendencias[].mensagem obrigatório | texto | Em português, com o número que faltou. |
resultados[].pendencias[].comoCorrigir | texto | |
fotos | objeto | |
fotos.recebidas | inteiro | Mínimo 0. |
fotos.aprovadas | inteiro | Mínimo 0. |
fotos.principal | texto ou nulo | Foto usada como principal depois da triagem. |
fotos.itens | lista de objeto | |
fotos.itens[].id obrigatório | texto | foto-1, foto-2… na ordem da ficha. |
fotos.itens[].url obrigatório | texto (uri) | |
fotos.itens[].situacao obrigatório | texto | reprovada = 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[].largura | inteiro | |
fotos.itens[].altura | inteiro | |
fotos.itens[].tipo | texto | Valores: produto_limpo, produto_em_uso, infografico, embalagem. |
fotos.itens[].fundo | texto | Valores: liso, ambiente. |
fotos.itens[].pessoas | texto | Valores: nenhuma, adultos, crianca_ou_idade_incerta. |
fotos.itens[].outraVarianteOuUnidades | booleano | |
fotos.itens[].codigos | lista de texto | |
erro | objeto ou nulo | |
erro.type | texto | |
erro.message | texto |
/produtos/{produtoId}/conferenciaConferir 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.
- Escopo
produtos:ler - Chave de APIsim
- Token OAuthsim
Parâmetros
| Parâmetro | Onde | Descrição |
|---|---|---|
produtoId obrigatório | caminho | Tipo: texto. Formato: ^prd_[0-9A-Z]{26}$. |
Respostas
- 200Conferência concluída para a versão atual.
- 202Conferência em andamento para a versão atual.
- 401Chave ou token ausente, inválido, revogado ou expirado.
Erro:
UNAUTHORIZED. - 404Recurso não existe ou não pertence a este integrador.
Erro:
RESOURCE_NOT_FOUND. - 429Limite 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)
| Campo | Tipo | Descrição |
|---|---|---|
id obrigatório | texto | Formato: ^cnf_[0-9A-Z]{26}$. |
produtoId obrigatório | texto | Formato: ^prd_[0-9A-Z]{26}$. |
versaoProduto obrigatório | inteiro | Mínimo 1. |
politica obrigatório | texto | Versão das regras usada (ex. integradores.requisitos.v1). |
situacao obrigatório | texto | Valores: em_andamento, concluida, falhou. |
conferidoEm | texto (date-time) ou nulo | |
resultados obrigatório | lista de objeto | |
resultados[].tipo obrigatório | texto | Valores: galeria, video_apresentacao, video_cinepremium. |
resultados[].aprovado obrigatório | booleano | |
resultados[].creditos | inteiro | Preço na tabela vigente do integrador (na galeria, para a maior quantidade aprovada). Mínimo 0. |
resultados[].quantidadeMaximaImagens | inteiro ou nulo | Só galeria: maior quantidade que o motor sustenta (3 a 10). |
resultados[].quantidadesAprovadas | lista de inteiro | Só galeria: quais das opções 3, 6 e 10 podem ser pedidas. |
resultados[].notaVideo | inteiro ou nulo | Só vídeos. De 0 a 10. |
resultados[].pendencias obrigatório | lista de objeto | |
resultados[].pendencias[].codigo obrigatório | texto | Có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ório | texto | bloqueio reprova o tipo; fraco aprova, mas a qualidade cai. Valores: bloqueio, fraco. |
resultados[].pendencias[].campo | texto | Campo da ficha (ex. imagens[2], atributos, descricao). |
resultados[].pendencias[].mensagem obrigatório | texto | Em português, com o número que faltou. |
resultados[].pendencias[].comoCorrigir | texto | |
fotos | objeto | |
fotos.recebidas | inteiro | Mínimo 0. |
fotos.aprovadas | inteiro | Mínimo 0. |
fotos.principal | texto ou nulo | Foto usada como principal depois da triagem. |
fotos.itens | lista de objeto | |
fotos.itens[].id obrigatório | texto | foto-1, foto-2… na ordem da ficha. |
fotos.itens[].url obrigatório | texto (uri) | |
fotos.itens[].situacao obrigatório | texto | reprovada = 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[].largura | inteiro | |
fotos.itens[].altura | inteiro | |
fotos.itens[].tipo | texto | Valores: produto_limpo, produto_em_uso, infografico, embalagem. |
fotos.itens[].fundo | texto | Valores: liso, ambiente. |
fotos.itens[].pessoas | texto | Valores: nenhuma, adultos, crianca_ou_idade_incerta. |
fotos.itens[].outraVarianteOuUnidades | booleano | |
fotos.itens[].codigos | lista de texto | |
erro | objeto ou nulo | |
erro.type | texto | |
erro.message | texto |
{
"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)
| Campo | Tipo | Descrição |
|---|---|---|
id obrigatório | texto | Formato: ^cnf_[0-9A-Z]{26}$. |
produtoId obrigatório | texto | Formato: ^prd_[0-9A-Z]{26}$. |
versaoProduto obrigatório | inteiro | Mínimo 1. |
politica obrigatório | texto | Versão das regras usada (ex. integradores.requisitos.v1). |
situacao obrigatório | texto | Valores: em_andamento, concluida, falhou. |
conferidoEm | texto (date-time) ou nulo | |
resultados obrigatório | lista de objeto | |
resultados[].tipo obrigatório | texto | Valores: galeria, video_apresentacao, video_cinepremium. |
resultados[].aprovado obrigatório | booleano | |
resultados[].creditos | inteiro | Preço na tabela vigente do integrador (na galeria, para a maior quantidade aprovada). Mínimo 0. |
resultados[].quantidadeMaximaImagens | inteiro ou nulo | Só galeria: maior quantidade que o motor sustenta (3 a 10). |
resultados[].quantidadesAprovadas | lista de inteiro | Só galeria: quais das opções 3, 6 e 10 podem ser pedidas. |
resultados[].notaVideo | inteiro ou nulo | Só vídeos. De 0 a 10. |
resultados[].pendencias obrigatório | lista de objeto | |
resultados[].pendencias[].codigo obrigatório | texto | Có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ório | texto | bloqueio reprova o tipo; fraco aprova, mas a qualidade cai. Valores: bloqueio, fraco. |
resultados[].pendencias[].campo | texto | Campo da ficha (ex. imagens[2], atributos, descricao). |
resultados[].pendencias[].mensagem obrigatório | texto | Em português, com o número que faltou. |
resultados[].pendencias[].comoCorrigir | texto | |
fotos | objeto | |
fotos.recebidas | inteiro | Mínimo 0. |
fotos.aprovadas | inteiro | Mínimo 0. |
fotos.principal | texto ou nulo | Foto usada como principal depois da triagem. |
fotos.itens | lista de objeto | |
fotos.itens[].id obrigatório | texto | foto-1, foto-2… na ordem da ficha. |
fotos.itens[].url obrigatório | texto (uri) | |
fotos.itens[].situacao obrigatório | texto | reprovada = 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[].largura | inteiro | |
fotos.itens[].altura | inteiro | |
fotos.itens[].tipo | texto | Valores: produto_limpo, produto_em_uso, infografico, embalagem. |
fotos.itens[].fundo | texto | Valores: liso, ambiente. |
fotos.itens[].pessoas | texto | Valores: nenhuma, adultos, crianca_ou_idade_incerta. |
fotos.itens[].outraVarianteOuUnidades | booleano | |
fotos.itens[].codigos | lista de texto | |
erro | objeto ou nulo | |
erro.type | texto | |
erro.message | texto |
{
"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
/galeriasCriar galeria de imagens (3, 6 ou 10) - POST
/videosCriar vídeo Apresentação ou CinePremium (fala automática) - GET
/avataresAvatares oficiais para a Apresentação - POST
/imagens/{imagemId}/edicoesEditar uma imagem, mudando só o que foi pedido - GET
/geracoesListar gerações - GET
/geracoes/{geracaoId}Andamento e resultado, com links para baixar - POST
/geracoes/{geracaoId}/cancelarCancela uma geração que ainda está na fila
/galeriasCriar 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.
- Escopo
geracoes:criar - Chave de APIsim
- Token OAuthsim
Parâmetros
| Parâmetro | Onde | Descrição |
|---|---|---|
Idempotency-Key obrigatório | cabeçalho | Obrigató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
| Campo | Tipo | Descrição |
|---|---|---|
produtoId obrigatório | texto | Formato: ^prd_[0-9A-Z]{26}$. |
quantidadeImagens obrigatório | inteiro | Valores: 3, 6, 10. |
objetivo | texto | Valores: conversao. Padrão: conversao. |
referenciaExterna | texto | Código livre do integrador (volta no extrato e nos avisos). Até 120 caracteres. |
modo | texto | Só 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. |
{
"produtoId": "prd_01J9Z7A1B2C3D4E5F6G7H8J9K0",
"quantidadeImagens": 6,
"objetivo": "conversao",
"referenciaExterna": "pedido-erp-55120"
}Respostas
- 202Pedido recebido; a geração é assíncrona.
Cabeçalhos:
Location,Idempotent-Replayed,X-RateLimit-Limit,X-RateLimit-Remaining,X-RateLimit-Reset,X-Request-Id. - 400Dados inválidos.
Erro:
VALIDATION_ERROR. - 401Chave ou token ausente, inválido, revogado ou expirado.
Erro:
UNAUTHORIZED. - 402Saldo 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. - 403Escopo insuficiente, integrador ou conta pausada, ou origem não autorizada.
Erro:
FORBIDDEN. - 404Recurso não existe ou não pertence a este integrador.
Erro:
RESOURCE_NOT_FOUND. - 409Conflito de estado, duplicidade ou Idempotency-Key reutilizada com outro corpo.
Erro:
IDEMPOTENCY_KEY_REUSED. - 422Produto 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).fieldstraz as pendências de bloqueio. - 429Limite de pedidos por minuto atingido.
Cabeçalhos:
Retry-After,X-RateLimit-Limit,X-RateLimit-Remaining,X-RateLimit-Reset. Erro:TOO_MANY_REQUESTS. - 503Capacidade temporariamente indisponível (manutenção ou fila cheia).
Cabeçalhos:
Retry-After. Erro:SERVICE_UNAVAILABLE.
Campos da resposta 202 (data — objeto)
| Campo | Tipo | Descrição |
|---|---|---|
id obrigatório | texto | Formato: ^ger_[0-9A-Z]{26}$. |
tipo obrigatório | texto | Valores: galeria, video_apresentacao, video_cinepremium, edicao_imagem. |
situacao obrigatório | texto | na_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. |
creditosReservados | inteiro | Mínimo 0. |
ambiente | texto | teste = chave sk_test_ (mídia de exemplo, sem custo); producao = chave sk_live_. Valores: teste, producao. |
{
"data": {
"id": "ger_01J9Z8C4D5E6F7G8H9J0K1L2M3",
"tipo": "galeria",
"situacao": "na_fila",
"creditosReservados": 60,
"ambiente": "producao"
}
}/videosCriar 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.
- Escopo
geracoes:criar - Chave de APIsim
- Token OAuthsim
Parâmetros
| Parâmetro | Onde | Descrição |
|---|---|---|
Idempotency-Key obrigatório | cabeçalho | Obrigató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
| Campo | Tipo | Descrição |
|---|---|---|
produtoId obrigatório | texto | Formato: ^prd_[0-9A-Z]{26}$. |
tipo obrigatório | texto | Valores: apresentacao, cinepremium. |
avatar | texto | automatico 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. |
voz | texto | Voz da narração do CinePremium. Só para cinepremium (na Apresentação a voz é a do avatar). Valores: automatica, masculina, feminina. Padrão: automatica. |
formato | texto | Valores: 9:16. Padrão: 9:16. |
referenciaExterna | texto | Até 120 caracteres. |
modo | texto | Só 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. |
{
"produtoId": "prd_01J9Z7A1B2C3D4E5F6G7H8J9K0",
"tipo": "apresentacao",
"avatar": "automatico",
"referenciaExterna": "pedido-erp-55121"
}Respostas
- 202Pedido recebido; a geração é assíncrona.
Cabeçalhos:
Location,Idempotent-Replayed,X-RateLimit-Limit,X-RateLimit-Remaining,X-RateLimit-Reset,X-Request-Id. - 400Dados inválidos.
Erro:
VALIDATION_ERROR. - 401Chave ou token ausente, inválido, revogado ou expirado.
Erro:
UNAUTHORIZED. - 402Saldo 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. - 403Escopo insuficiente, integrador ou conta pausada, ou origem não autorizada.
Erro:
FORBIDDEN. - 404Recurso não existe ou não pertence a este integrador.
Erro:
RESOURCE_NOT_FOUND. - 409Conflito de estado, duplicidade ou Idempotency-Key reutilizada com outro corpo.
Erro:
IDEMPOTENCY_KEY_REUSED. - 422Produto 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).fieldstraz as pendências de bloqueio. - 429Limite de pedidos por minuto atingido.
Cabeçalhos:
Retry-After,X-RateLimit-Limit,X-RateLimit-Remaining,X-RateLimit-Reset. Erro:TOO_MANY_REQUESTS. - 503Capacidade temporariamente indisponível (manutenção ou fila cheia).
Cabeçalhos:
Retry-After. Erro:SERVICE_UNAVAILABLE.
Campos da resposta 202 (data — objeto)
| Campo | Tipo | Descrição |
|---|---|---|
id obrigatório | texto | Formato: ^ger_[0-9A-Z]{26}$. |
tipo obrigatório | texto | Valores: galeria, video_apresentacao, video_cinepremium, edicao_imagem. |
situacao obrigatório | texto | na_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. |
creditosReservados | inteiro | Mínimo 0. |
ambiente | texto | teste = chave sk_test_ (mídia de exemplo, sem custo); producao = chave sk_live_. Valores: teste, producao. |
{
"data": {
"id": "ger_01J9Z8C4D5E6F7G8H9J0K1L2M3",
"tipo": "galeria",
"situacao": "na_fila",
"creditosReservados": 60,
"ambiente": "producao"
}
}/avataresAvatares 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
- 200Avatares ativos.
- 401Chave ou token ausente, inválido, revogado ou expirado.
Erro:
UNAUTHORIZED. - 429Limite de pedidos por minuto atingido.
Cabeçalhos:
Retry-After,X-RateLimit-Limit,X-RateLimit-Remaining,X-RateLimit-Reset. Erro:TOO_MANY_REQUESTS.
{
"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."
}/imagens/{imagemId}/edicoesEditar 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.
- Escopo
geracoes:criar - Chave de APIsim
- Token OAuthsim
Parâmetros
| Parâmetro | Onde | Descrição |
|---|---|---|
imagemId obrigatório | caminho | Imagem entregue por uma galeria (resultados.imagens[].id). Tipo: texto. Formato: ^img_[0-9A-Z]{26}$. |
Idempotency-Key obrigatório | cabeçalho | Obrigató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.
| Campo | Tipo | Descrição |
|---|---|---|
tipo obrigatório | texto | Valores: troca_de_cor, ajuste. |
cor | objeto | Obrigatório quando tipo = troca_de_cor. |
cor.nome obrigatório | texto | Até 60 caracteres. |
cor.hex | texto | Formato: ^#[0-9A-Fa-f]{6}$. |
parte | texto | Parte do produto que muda de cor (opcional). Até 120 caracteres. |
instrucao | texto | Obrigatória para ajuste. De 5 a 500 caracteres. Obrigatório quando tipo = ajuste. |
referenciaExterna | texto | Até 120 caracteres. |
{
"tipo": "troca_de_cor",
"cor": {
"nome": "Branco",
"hex": "#FFFFFF"
},
"parte": "corpo da arandela"
}{
"tipo": "ajuste",
"instrucao": "Trocar o fundo da parede por um tom de cinza claro."
}Respostas
- 202Pedido recebido; a geração é assíncrona.
Cabeçalhos:
Location,Idempotent-Replayed,X-RateLimit-Limit,X-RateLimit-Remaining,X-RateLimit-Reset,X-Request-Id. - 400Dados inválidos.
Erro:
VALIDATION_ERROR. - 401Chave ou token ausente, inválido, revogado ou expirado.
Erro:
UNAUTHORIZED. - 402Saldo 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. - 404Recurso não existe ou não pertence a este integrador.
Erro:
RESOURCE_NOT_FOUND. - 409Conflito de estado, duplicidade ou Idempotency-Key reutilizada com outro corpo.
Erro:
IDEMPOTENCY_KEY_REUSED. - 422Produto 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).fieldstraz as pendências de bloqueio. - 429Limite 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)
| Campo | Tipo | Descrição |
|---|---|---|
id obrigatório | texto | Formato: ^ger_[0-9A-Z]{26}$. |
tipo obrigatório | texto | Valores: galeria, video_apresentacao, video_cinepremium, edicao_imagem. |
situacao obrigatório | texto | na_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. |
creditosReservados | inteiro | Mínimo 0. |
ambiente | texto | teste = chave sk_test_ (mídia de exemplo, sem custo); producao = chave sk_live_. Valores: teste, producao. |
{
"data": {
"id": "ger_01J9Z8C4D5E6F7G8H9J0K1L2M3",
"tipo": "galeria",
"situacao": "na_fila",
"creditosReservados": 60,
"ambiente": "producao"
}
}/geracoesListar gerações#
- Escopo
geracoes:ler - Chave de APIsim
- Token OAuthsim
Parâmetros
| Parâmetro | Onde | Descrição |
|---|---|---|
pagina | consulta | Número da página, começando em 1. Tipo: inteiro. Padrão: 1. Mínimo 1. |
limite | consulta | Itens por página (padrão 100, máximo 100). Tipo: inteiro. Padrão: 100. De 1 a 100. |
contaId | consulta | Tipo: texto. Formato: ^cta_[0-9A-Z]{26}$. |
produtoId | consulta | Tipo: texto. Formato: ^prd_[0-9A-Z]{26}$. |
tipo | consulta | Tipo: texto. Valores: galeria, video_apresentacao, video_cinepremium, edicao_imagem. |
situacao | consulta | Tipo: texto. Valores: na_fila, gerando, concluida, parcial, falhou, cancelada. |
criadoDe | consulta | Tipo: texto (date-time). |
criadoAte | consulta | Tipo: texto (date-time). |
Respostas
- 200Página de gerações (sem links de download; use o detalhe).
- 400Dados inválidos.
Erro:
VALIDATION_ERROR. - 401Chave ou token ausente, inválido, revogado ou expirado.
Erro:
UNAUTHORIZED. - 429Limite de pedidos por minuto atingido.
Cabeçalhos:
Retry-After,X-RateLimit-Limit,X-RateLimit-Remaining,X-RateLimit-Reset. Erro:TOO_MANY_REQUESTS.
/geracoes/{geracaoId}Andamento e resultado, com links para baixar#
- Escopo
geracoes:ler - Chave de APIsim
- Token OAuthsim
Parâmetros
| Parâmetro | Onde | Descrição |
|---|---|---|
geracaoId obrigatório | caminho | Tipo: texto. Formato: ^ger_[0-9A-Z]{26}$. |
Respostas
- 200Geração encontrada.
- 401Chave ou token ausente, inválido, revogado ou expirado.
Erro:
UNAUTHORIZED. - 404Recurso não existe ou não pertence a este integrador.
Erro:
RESOURCE_NOT_FOUND. - 429Limite 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)
| Campo | Tipo | Descrição |
|---|---|---|
id obrigatório | texto | Formato: ^ger_[0-9A-Z]{26}$. |
tipo obrigatório | texto | Valores: galeria, video_apresentacao, video_cinepremium, edicao_imagem. |
situacao obrigatório | texto | na_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ório | texto | teste = chave sk_test_ (mídia de exemplo, sem custo); producao = chave sk_live_. Valores: teste, producao. |
modo | texto | real 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ório | texto | Formato: ^cta_[0-9A-Z]{26}$. |
produtoId | texto ou nulo | |
versaoProduto | inteiro ou nulo | |
imagemOrigemId | texto ou nulo | Para edicao_imagem. |
referenciaExterna | texto ou nulo | |
progresso | objeto | |
progresso.etapa | texto | Valores: na_fila, preparando, planejando, gerando, finalizando, entregue. |
progresso.percentual | inteiro | De 0 a 100. |
fila | objeto ou nulo | Só 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.etapa | texto | Valores: na_fila, preparando. |
fila.posicao | inteiro ou nulo | Mínimo 1. |
fila.naFrente | inteiro ou nulo | Mínimo 0. |
fila.esperaEstimadaSegundos | inteiro ou nulo | Mínimo 0. |
fila.atualizadoEm | texto (date-time) | |
creditos | objeto | |
creditos.reservados | inteiro | Mínimo 0. |
creditos.cobrados | inteiro | Mínimo 0. |
creditos.devolvidos | inteiro | Mínimo 0. |
valorCentavos | inteiro ou nulo | Valor da geração em centavos (créditos cobrados × valor do crédito na hora). Nulo até liquidar. |
criadoEm obrigatório | texto (date-time) | |
iniciadoEm | texto (date-time) ou nulo | |
concluidoEm | texto (date-time) ou nulo | |
resultados | objeto | |
resultados.imagens | lista de objeto | |
resultados.imagens[].id obrigatório | texto | Formato: ^img_[0-9A-Z]{26}$. |
resultados.imagens[].posicao obrigatório | inteiro | De 1 a 10. |
resultados.imagens[].url obrigatório | texto (uri) | Link assinado e temporário. |
resultados.imagens[].expiraEm obrigatório | texto (date-time) | |
resultados.imagens[].largura | inteiro | |
resultados.imagens[].altura | inteiro | |
resultados.imagens[].formato | texto | |
resultados.imagens[].origemEdicao | texto ou nulo | Id da imagem original quando é uma edição. |
resultados.video | objeto | |
resultados.video.url obrigatório | texto (uri) | Link assinado e temporário (MP4). |
resultados.video.expiraEm obrigatório | texto (date-time) | |
resultados.video.capaUrl | texto (uri) ou nulo | |
resultados.video.duracaoSegundos | número | |
resultados.video.largura | inteiro | |
resultados.video.altura | inteiro | |
resultados.video.fala | objeto | Fala usada no vídeo. A escolha é automática (sem etapa humana). |
fala | objeto | Só vídeos — a fala escolhida automaticamente, assim que a escolha acontece (antes da entrega). |
fala.texto obrigatório | texto | Texto falado (Apresentação: fala A + fala B + CTA; CinePremium: gancho + A + B + CTA). |
fala.escolha obrigatório | texto | Sempre automatica. |
fala.opcoesConsideradas | inteiro | Mínimo 1. |
fala.tom | texto ou nulo | Opção escolhida. Valores: safe, aggressive. |
fala.criterio | texto ou nulo | Versão da regra de escolha (ex. sellume.integradores.fala_automatica.v1). |
erro | objeto ou nulo | GENERATION_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.type | texto | |
erro.message | texto |
{
"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"
}
]
}
}
}/geracoes/{geracaoId}/cancelarCancela 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).
- Escopo
geracoes:criar - Chave de APIsim
- Token OAuthsim
Parâmetros
| Parâmetro | Onde | Descrição |
|---|---|---|
geracaoId obrigatório | caminho | Tipo: texto. Formato: ^ger_[0-9A-Z]{26}$. |
Respostas
- 200Cancelada;
situacao=canceladae os créditos reservados devolvidos. - 401Chave ou token ausente, inválido, revogado ou expirado.
Erro:
UNAUTHORIZED. - 404Recurso não existe ou não pertence a este integrador.
Erro:
RESOURCE_NOT_FOUND. - 409Conflito de estado, duplicidade ou Idempotency-Key reutilizada com outro corpo.
Erro:
IDEMPOTENCY_KEY_REUSED. - 429Limite 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)
| Campo | Tipo | Descrição |
|---|---|---|
id obrigatório | texto | Formato: ^ger_[0-9A-Z]{26}$. |
tipo obrigatório | texto | Valores: galeria, video_apresentacao, video_cinepremium, edicao_imagem. |
situacao obrigatório | texto | na_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ório | texto | teste = chave sk_test_ (mídia de exemplo, sem custo); producao = chave sk_live_. Valores: teste, producao. |
modo | texto | real 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ório | texto | Formato: ^cta_[0-9A-Z]{26}$. |
produtoId | texto ou nulo | |
versaoProduto | inteiro ou nulo | |
imagemOrigemId | texto ou nulo | Para edicao_imagem. |
referenciaExterna | texto ou nulo | |
progresso | objeto | |
progresso.etapa | texto | Valores: na_fila, preparando, planejando, gerando, finalizando, entregue. |
progresso.percentual | inteiro | De 0 a 100. |
fila | objeto ou nulo | Só 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.etapa | texto | Valores: na_fila, preparando. |
fila.posicao | inteiro ou nulo | Mínimo 1. |
fila.naFrente | inteiro ou nulo | Mínimo 0. |
fila.esperaEstimadaSegundos | inteiro ou nulo | Mínimo 0. |
fila.atualizadoEm | texto (date-time) | |
creditos | objeto | |
creditos.reservados | inteiro | Mínimo 0. |
creditos.cobrados | inteiro | Mínimo 0. |
creditos.devolvidos | inteiro | Mínimo 0. |
valorCentavos | inteiro ou nulo | Valor da geração em centavos (créditos cobrados × valor do crédito na hora). Nulo até liquidar. |
criadoEm obrigatório | texto (date-time) | |
iniciadoEm | texto (date-time) ou nulo | |
concluidoEm | texto (date-time) ou nulo | |
resultados | objeto | |
resultados.imagens | lista de objeto | |
resultados.imagens[].id obrigatório | texto | Formato: ^img_[0-9A-Z]{26}$. |
resultados.imagens[].posicao obrigatório | inteiro | De 1 a 10. |
resultados.imagens[].url obrigatório | texto (uri) | Link assinado e temporário. |
resultados.imagens[].expiraEm obrigatório | texto (date-time) | |
resultados.imagens[].largura | inteiro | |
resultados.imagens[].altura | inteiro | |
resultados.imagens[].formato | texto | |
resultados.imagens[].origemEdicao | texto ou nulo | Id da imagem original quando é uma edição. |
resultados.video | objeto | |
resultados.video.url obrigatório | texto (uri) | Link assinado e temporário (MP4). |
resultados.video.expiraEm obrigatório | texto (date-time) | |
resultados.video.capaUrl | texto (uri) ou nulo | |
resultados.video.duracaoSegundos | número | |
resultados.video.largura | inteiro | |
resultados.video.altura | inteiro | |
resultados.video.fala | objeto | Fala usada no vídeo. A escolha é automática (sem etapa humana). |
fala | objeto | Só vídeos — a fala escolhida automaticamente, assim que a escolha acontece (antes da entrega). |
fala.texto obrigatório | texto | Texto falado (Apresentação: fala A + fala B + CTA; CinePremium: gancho + A + B + CTA). |
fala.escolha obrigatório | texto | Sempre automatica. |
fala.opcoesConsideradas | inteiro | Mínimo 1. |
fala.tom | texto ou nulo | Opção escolhida. Valores: safe, aggressive. |
fala.criterio | texto ou nulo | Versão da regra de escolha (ex. sellume.integradores.fala_automatica.v1). |
erro | objeto ou nulo | GENERATION_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.type | texto | |
erro.message | texto |
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
/saldoSaldo da carteira do integrador - GET
/extratoExtrato detalhado (por conta, produto e geração) - GET
/cota-do-mesCota do mês (créditos do ciclo do plano, que também são o teto) - GET
/planoPlano atual, cota do mês, troca pendente, sugestão de subida e pacotes avulsos - GET
/planosPlanos disponíveis para este integrador (com o movimento possível a partir do atual) - POST
/recargasCompra um pacote avulso (devolve o link da página segura de pagamentos)
/saldoSaldo da carteira do integrador#
- Escopo
creditos:ler - Chave de APIsim
- Token OAuthnão (responde
403)
Respostas
- 200Saldo atual.
- 401Chave ou token ausente, inválido, revogado ou expirado.
Erro:
UNAUTHORIZED. - 429Limite 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)
| Campo | Tipo | Descrição |
|---|---|---|
modeloCobranca obrigatório | texto | Valores: plano_mensal, pre_pago. |
ambiente obrigatório | texto | teste = chave sk_test_ (mídia de exemplo, sem custo); producao = chave sk_live_. Valores: teste, producao. |
creditosDisponiveis obrigatório | inteiro | Cota do ciclo restante + crédito avulso guardado + cortesias válidas (sem os créditos de teste). Mínimo 0. |
creditosReservados obrigatório | inteiro | Mínimo 0. |
creditosDeRecarga | inteiro | Crédito avulso guardado (não vence; gasto depois da cota do plano). Mínimo 0. |
valorCreditoCentavos | inteiro ou nulo | Valor de 1 crédito no contrato vigente (consumo). Mínimo 0. |
alertaAbaixoDe | inteiro ou nulo | Limite de alerta de creditos.baixos. |
creditosDeTeste | objeto | Cré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.disponiveis | inteiro | Mínimo 0. |
creditosDeTeste.reservados | inteiro | Mínimo 0. |
creditosDeTeste.usados | inteiro | Mínimo 0. |
creditosDeTeste.concedidos | inteiro | Mínimo 0. |
creditosDeTeste.venceEm | texto (date-time) ou nulo | |
plano | objeto ou nulo | |
plano.codigo | texto | Valores: base, growth, business, enterprise. |
plano.nome | texto | |
ciclo | objeto ou nulo | Ciclo aberto do plano (só no modelo plano_mensal). |
ciclo.competencia | texto | Formato: ^\d{4}-(0[1-9]|1[0-2])$. |
ciclo.creditosDoCiclo | inteiro | Cota do mês = teto. Mínimo 0. |
ciclo.creditosUsados | inteiro | Mínimo 0. |
ciclo.creditosRestantes | inteiro | Mínimo 0. |
ciclo.tetoAtingido | booleano | |
ciclo.terminaEm | texto (date-time) | |
atualizadoEm obrigatório | texto (date-time) |
{
"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"
}
}/extratoExtrato detalhado (por conta, produto e geração)#
- Escopo
creditos:ler - Chave de APIsim
- Token OAuthnão (responde
403)
Parâmetros
| Parâmetro | Onde | Descrição |
|---|---|---|
pagina | consulta | Número da página, começando em 1. Tipo: inteiro. Padrão: 1. Mínimo 1. |
limite | consulta | Itens por página (padrão 100, máximo 100). Tipo: inteiro. Padrão: 100. De 1 a 100. |
contaId | consulta | Tipo: texto. Formato: ^cta_[0-9A-Z]{26}$. |
tipo | consulta | Tipo: texto. Valores: recarga, ciclo_aberto, reserva, cobranca, devolucao, expiracao, cortesia, ajuste, creditos_de_teste. |
de | consulta | Tipo: texto (date). |
ate | consulta | Tipo: texto (date). |
Respostas
- 200Página do extrato.
- 400Dados inválidos.
Erro:
VALIDATION_ERROR. - 401Chave ou token ausente, inválido, revogado ou expirado.
Erro:
UNAUTHORIZED. - 429Limite de pedidos por minuto atingido.
Cabeçalhos:
Retry-After,X-RateLimit-Limit,X-RateLimit-Remaining,X-RateLimit-Reset. Erro:TOO_MANY_REQUESTS.
/cota-do-mesCota 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.
- Escopo
creditos:ler - Chave de APIsim
- Token OAuthnão (responde
403)
Parâmetros
| Parâmetro | Onde | Descrição |
|---|---|---|
competencia | consulta | Mês do ciclo no formato AAAA-MM. Tipo: texto. Formato: ^\d{4}-(0[1-9]|1[0-2])$. |
Respostas
- 200Situação do ciclo.
- 401Chave ou token ausente, inválido, revogado ou expirado.
Erro:
UNAUTHORIZED. - 404Recurso não existe ou não pertence a este integrador.
Erro:
RESOURCE_NOT_FOUND.
Campos da resposta 200 (data — objeto)
| Campo | Tipo | Descrição |
|---|---|---|
competencia obrigatório | texto | Formato: ^\d{4}-(0[1-9]|1[0-2])$. |
situacao obrigatório | texto | aguardando_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ório | objeto | |
plano.codigo | texto | Valores: base, growth, business, enterprise. |
plano.nome | texto | |
creditosDoCiclo obrigatório | inteiro | Créditos do plano no ciclo: a cota, que também é o teto. Mínimo 0. |
creditosUsados obrigatório | inteiro | Mínimo 0. |
creditosRestantes | inteiro | Mínimo 0. |
percentualUsado | inteiro ou nulo | Mínimo 0. |
tetoAtingido obrigatório | booleano | A cota acabou: o uso segue só com crédito avulso guardado; sem ele, 402 sem cobrar. |
passouDoTeto | booleano | O uso do ciclo passou da cota (com crédito avulso). |
comprouAvulso | booleano | Comprou pacote avulso neste ciclo (2 ciclos seguidos → sugestão de subida). |
valorPagoCentavos | inteiro | Valor do plano pago antes, neste ciclo. Mínimo 0. |
inicio | texto (date-time) | |
fechaEm | texto (date-time) |
{
"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"
}
}/planoPlano 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.
- Escopo
creditos:ler - Chave de APIsim
- Token OAuthnão (responde
403)
Respostas
- 200Plano e cota.
- 401Chave ou token ausente, inválido, revogado ou expirado.
Erro:
UNAUTHORIZED. - 429Limite 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)
| Campo | Tipo | Descrição |
|---|---|---|
modeloCobranca | texto | Valores: plano_mensal, pre_pago. |
atual | objeto ou nulo | |
atual.codigo obrigatório | texto | Valores: base, growth, business, enterprise. |
atual.nome obrigatório | texto | Valores: Sellume API Base, Sellume API Growth, Sellume API Business, Sellume API Enterprise. |
atual.ordem | inteiro | |
atual.versao | inteiro | |
atual.valorMensalCentavos obrigatório | inteiro | Mínimo 1. |
atual.creditosDoMes obrigatório | inteiro | Cota do mês = teto. Mínimo 1. |
atual.valorCreditoDoPlanoCentavos | número | |
atual.valorCreditoAvulsoCentavos obrigatório | inteiro | Preço de 1 crédito do pacote avulso: maior que o crédito do plano e que o do plano de cima. |
atual.capacidade | objeto | |
atual.capacidade.tipo | texto | Valores: compartilhada, dedicada. |
atual.capacidade.maquinaPropria | booleano | |
atual.capacidade.maquinaMaior | booleano | |
atual.capacidade.prioridadeDeFila | booleano | |
atual.capacidade.sobMedida | booleano | |
atual.cotasTecnicas | objeto | |
atual.cotasTecnicas.limiteRequisicoesMinuto | inteiro | |
atual.cotasTecnicas.maxGeracoesSimultaneas | inteiro | |
atual.cotasTecnicas.maxVideosSimultaneos | inteiro | |
atual.personalizado | booleano | Enterprise sob medida deste integrador (contrato). |
atual.autoatendimento | booleano | false = só pelo Sellume (Enterprise). |
atual.valoresDeExemplo | booleano | |
trocaDePlano | texto | |
mudancaPendente | objeto ou nulo | |
mudancaPendente.tipo | texto | Valores: subida, descida. |
mudancaPendente.situacao | texto | Valores: preparando, agendada. |
mudancaPendente.para | texto | |
mudancaPendente.valeEm | texto | Sempre proximo_ciclo. |
mudancaPendente.desde | texto (date-time) | |
sugestaoSubida | objeto ou nulo | Comprou pacote avulso em 2 ciclos seguidos (nada automático; a subida, se pedida, é aplicada na hora pelo time do Sellume). |
sugestaoSubida.planoSugerido | texto ou nulo | |
sugestaoSubida.ciclos | lista de texto | |
sugestaoSubida.motivo | texto | |
sugestaoSubida.valeEm | texto | Sempre proximo_ciclo. |
sugestaoSubida.desde | texto (date-time) | |
recarga | objeto ou nulo | |
recarga.pacotes | lista de objeto | |
recarga.pacotes[].codigo | texto | Formato: ^avulso_[0-9]{3,7}$. |
recarga.pacotes[].creditos | inteiro | |
recarga.pacotes[].valorCreditoCentavos | inteiro | |
recarga.pacotes[].valorCentavos | inteiro | |
recarga.pacotes[].validade | texto | Sempre sem_vencimento. |
recarga.pacotes[].valoresDeExemplo | booleano | |
recarga.valorCreditoCentavos | inteiro | Só pré-pago. |
recarga.minimoCreditos | inteiro | |
recarga.maximoCreditos | inteiro | |
recarga.validade | texto | Sempre sem_vencimento. |
cota | objeto ou nulo | |
cota.competencia obrigatório | texto | Formato: ^\d{4}-(0[1-9]|1[0-2])$. |
cota.situacao obrigatório | texto | aguardando_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ório | objeto | |
cota.plano.codigo | texto | Valores: base, growth, business, enterprise. |
cota.plano.nome | texto | |
cota.creditosDoCiclo obrigatório | inteiro | Créditos do plano no ciclo: a cota, que também é o teto. Mínimo 0. |
cota.creditosUsados obrigatório | inteiro | Mínimo 0. |
cota.creditosRestantes | inteiro | Mínimo 0. |
cota.percentualUsado | inteiro ou nulo | Mínimo 0. |
cota.tetoAtingido obrigatório | booleano | A cota acabou: o uso segue só com crédito avulso guardado; sem ele, 402 sem cobrar. |
cota.passouDoTeto | booleano | O uso do ciclo passou da cota (com crédito avulso). |
cota.comprouAvulso | booleano | Comprou pacote avulso neste ciclo (2 ciclos seguidos → sugestão de subida). |
cota.valorPagoCentavos | inteiro | Valor do plano pago antes, neste ciclo. Mínimo 0. |
cota.inicio | texto (date-time) | |
cota.fechaEm | texto (date-time) |
/planosPlanos disponíveis para este integrador (com o movimento possível a partir do atual)#
- Escopo
creditos:ler - Chave de APIsim
- Token OAuthnão (responde
403)
Respostas
- 200Catálogo do ambiente do integrador (o Enterprise sob medida dele, quando existe, no lugar do Enterprise do catálogo).
- 401Chave ou token ausente, inválido, revogado ou expirado.
Erro:
UNAUTHORIZED.
/recargasCompra 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.
- Escopo
creditos:comprar - Chave de APIsim
- Token OAuthnão (responde
403)
Corpo do pedido
application/json · obrigatório
| Campo | Tipo | Descrição |
|---|---|---|
pacote | texto | Plano: código do pacote avulso. Formato: ^avulso_[0-9]{3,7}$. |
creditos | inteiro | Pré-pago: quantidade livre. De 100 a 1000000. |
{
"pacote": "avulso_1000"
}Respostas
- 201Link para pagar.
- 400Dados inválidos.
Erro:
VALIDATION_ERROR. - 401Chave ou token ausente, inválido, revogado ou expirado.
Erro:
UNAUTHORIZED. - 403Escopo insuficiente, integrador ou conta pausada, ou origem não autorizada.
Erro:
FORBIDDEN. - 409Conflito de estado, duplicidade ou Idempotency-Key reutilizada com outro corpo.
Erro:
IDEMPOTENCY_KEY_REUSED. - 429Limite de pedidos por minuto atingido.
Cabeçalhos:
Retry-After,X-RateLimit-Limit,X-RateLimit-Remaining,X-RateLimit-Reset. Erro:TOO_MANY_REQUESTS. - 503Capacidade temporariamente indisponível (manutenção ou fila cheia).
Cabeçalhos:
Retry-After. Erro:SERVICE_UNAVAILABLE.
Campos da resposta 201 (data — objeto)
| Campo | Tipo | Descrição |
|---|---|---|
pacote | texto ou nulo | |
creditos obrigatório | inteiro | |
valorCentavos obrigatório | inteiro | |
valorCreditoCentavos | inteiro ou nulo | |
validade | texto | Sempre sem_vencimento. |
pagarEm obrigatório | texto (uri) | Página segura de pagamentos. |
linkExpiraEm | texto (date-time) ou nulo |
{
"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
/avisosListar endereços de aviso cadastrados - POST
/avisosCadastrar um endereço que recebe avisos - PUT
/avisosCadastrar ou atualizar um endereço pelo `url` (idempotente) - GET
/testes-de-avisos/{testeId}Resultado de um teste de avisos (as três entregas) - POST
/avisos/testeDisparar o teste de avisos (evento aviso.teste) e conferir a assinatura - GET
/avisos/{avisoId}Detalhar um endereço de aviso - PATCH
/avisos/{avisoId}Alterar eventos, descrição ou reativar um endereço desligado - DELETE
/avisos/{avisoId}Remover um endereço de aviso - POST
/avisos/{avisoId}/segredoTrocar o segredo de assinatura - GET
/avisos/{avisoId}/entregasListar entregas (inclui as que falharam) - POST
/avisos/{avisoId}/entregas/{entregaId}/reenvioReenviar uma entrega agora
/avisosListar endereços de aviso cadastrados#
- Escopo
avisos:gerenciar - Chave de APIsim
- Token OAuthnão (responde
403)
Respostas
- 200Endereços cadastrados (máximo 5 por integrador e ambiente).
- 401Chave ou token ausente, inválido, revogado ou expirado.
Erro:
UNAUTHORIZED.
/avisosCadastrar 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.
- Escopo
avisos:gerenciar - Chave de APIsim
- Token OAuthnão (responde
403)
Corpo do pedido
application/json · obrigatório
| Campo | Tipo | Descrição |
|---|---|---|
url obrigatório | texto (uri) | HTTPS público (endereços internos são recusados). Até 2048 caracteres. |
eventos obrigatório | lista de texto | Pelo menos 1 item. Sem repetidos. |
descricao | texto | Até 120 caracteres. |
{
"url": "https://erp.exemplo.com.br/webhooks/sellume",
"eventos": [
"geracao.concluida",
"geracao.falhou",
"creditos.baixos"
],
"descricao": "Produção"
}Respostas
- 201Endereço cadastrado.
- 400Dados inválidos.
Erro:
VALIDATION_ERROR. - 401Chave ou token ausente, inválido, revogado ou expirado.
Erro:
UNAUTHORIZED. - 409Conflito de estado, duplicidade ou Idempotency-Key reutilizada com outro corpo.
Erro:
IDEMPOTENCY_KEY_REUSED.
Campos da resposta 201 (data — objeto)
| Campo | Tipo | Descrição |
|---|---|---|
id obrigatório | texto | Formato: ^avs_[0-9A-Z]{26}$. |
url obrigatório | texto (uri) | |
eventos obrigatório | lista de texto | |
descricao | texto ou nulo | |
situacao obrigatório | texto | desligado = desligado automaticamente após falhas seguidas por 3 dias. Valores: ativo, pausado, desligado. |
ambiente obrigatório | texto | teste = chave sk_test_ (mídia de exemplo, sem custo); producao = chave sk_live_. Valores: teste, producao. |
falhasSeguidas | inteiro | Mínimo 0. |
ultimaEntregaEm | texto (date-time) ou nulo | |
desligadoEm | texto (date-time) ou nulo | |
criadoEm obrigatório | texto (date-time) | |
segredo obrigatório | texto | Mostrado uma única vez. Formato: ^whsec_[A-Za-z0-9]{32,}$. |
/avisosCadastrar 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.
- Escopo
avisos:gerenciar - Chave de APIsim
- Token OAuthnão (responde
403)
Corpo do pedido
application/json · obrigatório
| Campo | Tipo | Descrição |
|---|---|---|
url obrigatório | texto (uri) | HTTPS público (endereços internos são recusados). Até 2048 caracteres. |
eventos obrigatório | lista de texto | Pelo menos 1 item. Sem repetidos. |
descricao | texto | Até 120 caracteres. |
Respostas
- 200Endereço já existia e foi atualizado.
- 201Endereço cadastrado (com o segredo, mostrado uma única vez).
- 400Dados inválidos.
Erro:
VALIDATION_ERROR. - 401Chave ou token ausente, inválido, revogado ou expirado.
Erro:
UNAUTHORIZED. - 409Conflito de estado, duplicidade ou Idempotency-Key reutilizada com outro corpo.
Erro:
IDEMPOTENCY_KEY_REUSED.
Campos da resposta 200 (data — objeto)
| Campo | Tipo | Descrição |
|---|---|---|
id obrigatório | texto | Formato: ^avs_[0-9A-Z]{26}$. |
url obrigatório | texto (uri) | |
eventos obrigatório | lista de texto | |
descricao | texto ou nulo | |
situacao obrigatório | texto | desligado = desligado automaticamente após falhas seguidas por 3 dias. Valores: ativo, pausado, desligado. |
ambiente obrigatório | texto | teste = chave sk_test_ (mídia de exemplo, sem custo); producao = chave sk_live_. Valores: teste, producao. |
falhasSeguidas | inteiro | Mínimo 0. |
ultimaEntregaEm | texto (date-time) ou nulo | |
desligadoEm | texto (date-time) ou nulo | |
criadoEm obrigatório | texto (date-time) |
Campos da resposta 201 (data — objeto)
| Campo | Tipo | Descrição |
|---|---|---|
id obrigatório | texto | Formato: ^avs_[0-9A-Z]{26}$. |
url obrigatório | texto (uri) | |
eventos obrigatório | lista de texto | |
descricao | texto ou nulo | |
situacao obrigatório | texto | desligado = desligado automaticamente após falhas seguidas por 3 dias. Valores: ativo, pausado, desligado. |
ambiente obrigatório | texto | teste = chave sk_test_ (mídia de exemplo, sem custo); producao = chave sk_live_. Valores: teste, producao. |
falhasSeguidas | inteiro | Mínimo 0. |
ultimaEntregaEm | texto (date-time) ou nulo | |
desligadoEm | texto (date-time) ou nulo | |
criadoEm obrigatório | texto (date-time) | |
segredo obrigatório | texto | Formato: ^whsec_[A-Za-z0-9]{32,}$. |
/testes-de-avisos/{testeId}Resultado de um teste de avisos (as três entregas)#
- Escopo
avisos:gerenciar - Chave de APIsim
- Token OAuthnão (responde
403)
Parâmetros
| Parâmetro | Onde | Descrição |
|---|---|---|
testeId obrigatório | caminho | Tipo: texto. Formato: ^tst_[0-9A-Z]{26}$. |
Respostas
- 200Teste encontrado.
- 401Chave ou token ausente, inválido, revogado ou expirado.
Erro:
UNAUTHORIZED. - 404Recurso não existe ou não pertence a este integrador.
Erro:
RESOURCE_NOT_FOUND.
Campos da resposta 200 (data — objeto)
| Campo | Tipo | Descrição |
|---|---|---|
id obrigatório | texto | Formato: ^tst_[0-9A-Z]{26}$. |
avisoId obrigatório | texto | Formato: ^avs_[0-9A-Z]{26}$. |
situacao obrigatório | texto | Valores: em_andamento, aprovado, reprovado. |
entregas obrigatório | lista de objeto | |
entregas[].caso obrigatório | texto | Valores: valido, assinatura_invalida, carimbo_antigo. |
entregas[].esperado obrigatório | texto | |
entregas[].statusHttp | inteiro ou nulo | |
entregas[].motivoFalha | texto ou nulo | tempo_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[].aprovado | booleano ou nulo |
/avisos/testeDisparar 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:
- assinatura correta e carimbo atual → espera 2XX;
- assinatura errada (cabeçalho
X-Sellume-Teste: assinatura_invalida) → espera 400, 401 ou 403; - 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).
- Escopo
avisos:gerenciar - Chave de APIsim
- Token OAuthnão (responde
403)
Corpo do pedido
application/json · opcional
| Campo | Tipo | Descrição |
|---|---|---|
avisoId | texto | Sem ele, testa todos os endereços ativos do ambiente. Formato: ^avs_[0-9A-Z]{26}$. |
Respostas
- 202Teste enfileirado.
- 401Chave ou token ausente, inválido, revogado ou expirado.
Erro:
UNAUTHORIZED. - 404Recurso não existe ou não pertence a este integrador.
Erro:
RESOURCE_NOT_FOUND. - 429Limite de pedidos por minuto atingido.
Cabeçalhos:
Retry-After,X-RateLimit-Limit,X-RateLimit-Remaining,X-RateLimit-Reset. Erro:TOO_MANY_REQUESTS.
/avisos/{avisoId}Detalhar um endereço de aviso#
- Escopo
avisos:gerenciar - Chave de APIsim
- Token OAuthnão (responde
403)
Parâmetros
| Parâmetro | Onde | Descrição |
|---|---|---|
avisoId obrigatório | caminho | Tipo: texto. Formato: ^avs_[0-9A-Z]{26}$. |
Respostas
- 200Endereço encontrado.
- 401Chave ou token ausente, inválido, revogado ou expirado.
Erro:
UNAUTHORIZED. - 404Recurso não existe ou não pertence a este integrador.
Erro:
RESOURCE_NOT_FOUND.
Campos da resposta 200 (data — objeto)
| Campo | Tipo | Descrição |
|---|---|---|
id obrigatório | texto | Formato: ^avs_[0-9A-Z]{26}$. |
url obrigatório | texto (uri) | |
eventos obrigatório | lista de texto | |
descricao | texto ou nulo | |
situacao obrigatório | texto | desligado = desligado automaticamente após falhas seguidas por 3 dias. Valores: ativo, pausado, desligado. |
ambiente obrigatório | texto | teste = chave sk_test_ (mídia de exemplo, sem custo); producao = chave sk_live_. Valores: teste, producao. |
falhasSeguidas | inteiro | Mínimo 0. |
ultimaEntregaEm | texto (date-time) ou nulo | |
desligadoEm | texto (date-time) ou nulo | |
criadoEm obrigatório | texto (date-time) |
/avisos/{avisoId}Alterar eventos, descrição ou reativar um endereço desligado#
- Escopo
avisos:gerenciar - Chave de APIsim
- Token OAuthnão (responde
403)
Parâmetros
| Parâmetro | Onde | Descrição |
|---|---|---|
avisoId obrigatório | caminho | Tipo: texto. Formato: ^avs_[0-9A-Z]{26}$. |
Corpo do pedido
application/json · obrigatório
| Campo | Tipo | Descrição |
|---|---|---|
eventos | lista de texto | Pelo menos 1 item. Sem repetidos. |
descricao | texto | Até 120 caracteres. |
situacao | texto | Use ativo para religar um endereço desligado automaticamente. Valores: ativo, pausado. |
Respostas
- 200Endereço atualizado.
- 400Dados inválidos.
Erro:
VALIDATION_ERROR. - 401Chave ou token ausente, inválido, revogado ou expirado.
Erro:
UNAUTHORIZED. - 404Recurso não existe ou não pertence a este integrador.
Erro:
RESOURCE_NOT_FOUND.
Campos da resposta 200 (data — objeto)
| Campo | Tipo | Descrição |
|---|---|---|
id obrigatório | texto | Formato: ^avs_[0-9A-Z]{26}$. |
url obrigatório | texto (uri) | |
eventos obrigatório | lista de texto | |
descricao | texto ou nulo | |
situacao obrigatório | texto | desligado = desligado automaticamente após falhas seguidas por 3 dias. Valores: ativo, pausado, desligado. |
ambiente obrigatório | texto | teste = chave sk_test_ (mídia de exemplo, sem custo); producao = chave sk_live_. Valores: teste, producao. |
falhasSeguidas | inteiro | Mínimo 0. |
ultimaEntregaEm | texto (date-time) ou nulo | |
desligadoEm | texto (date-time) ou nulo | |
criadoEm obrigatório | texto (date-time) |
/avisos/{avisoId}Remover um endereço de aviso#
- Escopo
avisos:gerenciar - Chave de APIsim
- Token OAuthnão (responde
403)
Parâmetros
| Parâmetro | Onde | Descrição |
|---|---|---|
avisoId obrigatório | caminho | Tipo: texto. Formato: ^avs_[0-9A-Z]{26}$. |
Respostas
- 204Removido. Entregas pendentes para ele são canceladas.
- 401Chave ou token ausente, inválido, revogado ou expirado.
Erro:
UNAUTHORIZED. - 404Recurso não existe ou não pertence a este integrador.
Erro:
RESOURCE_NOT_FOUND.
/avisos/{avisoId}/segredoTrocar o segredo de assinatura#
O segredo anterior continua aceito por 24 horas para a troca sem interrupção.
- Escopo
avisos:gerenciar - Chave de APIsim
- Token OAuthnão (responde
403)
Parâmetros
| Parâmetro | Onde | Descrição |
|---|---|---|
avisoId obrigatório | caminho | Tipo: texto. Formato: ^avs_[0-9A-Z]{26}$. |
Respostas
- 200Novo segredo (mostrado uma única vez).
- 401Chave ou token ausente, inválido, revogado ou expirado.
Erro:
UNAUTHORIZED. - 404Recurso não existe ou não pertence a este integrador.
Erro:
RESOURCE_NOT_FOUND.
Campos da resposta 200 (data — objeto)
| Campo | Tipo | Descrição |
|---|---|---|
segredo obrigatório | texto | Formato: ^whsec_[A-Za-z0-9]{32,}$. |
segredoAnteriorValidoAte obrigatório | texto (date-time) |
/avisos/{avisoId}/entregasListar entregas (inclui as que falharam)#
- Escopo
avisos:gerenciar - Chave de APIsim
- Token OAuthnão (responde
403)
Parâmetros
| Parâmetro | Onde | Descrição |
|---|---|---|
avisoId obrigatório | caminho | Tipo: texto. Formato: ^avs_[0-9A-Z]{26}$. |
pagina | consulta | Número da página, começando em 1. Tipo: inteiro. Padrão: 1. Mínimo 1. |
limite | consulta | Itens por página (padrão 100, máximo 100). Tipo: inteiro. Padrão: 100. De 1 a 100. |
situacao | consulta | Tipo: texto. Valores: pendente, entregue, tentando, falhou, cancelada. |
evento | consulta | Tipo: texto. Valores: produto.conferido, geracao.iniciada, geracao.concluida, geracao.falhou, creditos.baixos, cota.alerta, aviso.teste. |
Respostas
- 200Página de entregas.
- 401Chave ou token ausente, inválido, revogado ou expirado.
Erro:
UNAUTHORIZED. - 404Recurso não existe ou não pertence a este integrador.
Erro:
RESOURCE_NOT_FOUND.
/avisos/{avisoId}/entregas/{entregaId}/reenvioReenviar uma entrega agora#
Reenvia o mesmo evento (mesmo eventId), com nova assinatura e novo carimbo de horário.
- Escopo
avisos:gerenciar - Chave de APIsim
- Token OAuthnão (responde
403)
Parâmetros
| Parâmetro | Onde | Descrição |
|---|---|---|
avisoId obrigatório | caminho | Tipo: texto. Formato: ^avs_[0-9A-Z]{26}$. |
entregaId obrigatório | caminho | Tipo: texto. Formato: ^ent_[0-9A-Z]{26}$. |
Respostas
- 202Reenvio enfileirado.
- 401Chave ou token ausente, inválido, revogado ou expirado.
Erro:
UNAUTHORIZED. - 404Recurso não existe ou não pertence a este integrador.
Erro:
RESOURCE_NOT_FOUND. - 409Conflito de estado, duplicidade ou Idempotency-Key reutilizada com outro corpo.
Erro:
IDEMPOTENCY_KEY_REUSED.
Campos da resposta 202 (data — objeto)
| Campo | Tipo | Descrição |
|---|---|---|
id obrigatório | texto | Formato: ^ent_[0-9A-Z]{26}$. |
avisoId obrigatório | texto | Formato: ^avs_[0-9A-Z]{26}$. |
eventId obrigatório | texto | Formato: ^evt_[0-9A-Z]{26}$. |
evento obrigatório | texto | Valores: produto.conferido, geracao.iniciada, geracao.concluida, geracao.falhou, creditos.baixos, cota.alerta, aviso.teste. |
situacao obrigatório | texto | Valores: pendente, entregue, tentando, falhou, cancelada. |
tentativas obrigatório | inteiro | Mínimo 0. |
ultimoStatusHttp | inteiro ou nulo | |
ultimoErro | texto ou nulo | Resumo curto (ex. tempo esgotado, HTTP 500). |
motivoFalha | texto ou nulo | tempo_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. |
comoCorrigir | texto ou nulo | O que mudar no endpoint para a próxima entrega passar. |
proximaTentativaEm | texto (date-time) ou nulo | |
entregueEm | texto (date-time) ou nulo | |
criadoEm obrigatório | texto (date-time) |
Integração#
Status da integração (etapas verificadas automaticamente), registro de chamadas e catálogo de erros.
- GET
/integracao/statusStatus da integração (etapas verificadas automaticamente) - POST
/integracao/pedido-producaoPedir acesso de produção - GET
/integracao/chamadasRegistro de chamadas (request log) com o "como corrigir" - GET
/integracao/chamadas/{requestId}Detalhe de uma chamada, com corpo enviado e recebido (mascarados) - GET
/integracao/errosCatálogo de erros e pendências, com "como corrigir"
/integracao/statusStatus 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.
- Escopo
contas:ler - Chave de APIsim
- Token OAuthnão (responde
403)
Parâmetros
| Parâmetro | Onde | Descrição |
|---|---|---|
ambiente | consulta | Padrão, o ambiente da credencial usada. Tipo: texto. Valores: teste, producao. |
Respostas
- 200Etapas e situação do acesso de produção.
- 401Chave ou token ausente, inválido, revogado ou expirado.
Erro:
UNAUTHORIZED.
Campos da resposta 200 (data — objeto)
| Campo | Tipo | Descrição |
|---|---|---|
ambiente obrigatório | texto | teste = chave sk_test_ (mídia de exemplo, sem custo); producao = chave sk_live_. Valores: teste, producao. |
etapasConcluidas obrigatório | inteiro | Mínimo 0. |
etapasObrigatorias obrigatório | inteiro | Mínimo 0. |
etapas obrigatório | lista de objeto | |
etapas[].codigo obrigatório | texto | Etapas 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ório | texto | |
etapas[].situacao obrigatório | texto | Valores: pendente, ok, falhou. |
etapas[].verificadoEm | texto (date-time) ou nulo | |
etapas[].evidencia | objeto ou nulo | O que provou a etapa (requestId, eventId, geracaoId). |
etapas[].evidencia.requestId | texto | |
etapas[].evidencia.eventId | texto | |
etapas[].evidencia.geracaoId | texto | |
etapas[].ultimaFalha | texto ou nulo | Por que a última tentativa não valeu, em português. |
etapas[].comoConcluir | texto | |
etapas[].disponivelNaFase | inteiro | Fase do ADR-116 em que a etapa passa a ser verificável (antes disso fica pendente). Mínimo 1. |
etapas[].linkDocumentacao | texto (uri) ou nulo | Nulo até a documentação pública (Fase 5). |
producao obrigatório | objeto | |
producao.situacao obrigatório | texto | Valores: bloqueada, pode_pedir, liberada, suspensa. |
producao.liberacao | texto ou nulo | Valores: automatica, manual_master. |
producao.liberadaEm | texto (date-time) ou nulo | |
producao.motivo | texto ou nulo | |
alertasAbertos | lista de objeto | |
alertasAbertos[].tipo | texto | Valores: taxa_de_erro_alta, avisos_falhando, aviso_desligado, saldo_baixo, cota_perto_do_limite. |
alertasAbertos[].abertoEm | texto (date-time) | |
alertasAbertos[].resumo | texto |
{
"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"
}
]
}
}/integracao/pedido-producaoPedir 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
- 200Acesso de produção liberado.
- 401Chave ou token ausente, inválido, revogado ou expirado.
Erro:
UNAUTHORIZED. - 403Escopo insuficiente, integrador ou conta pausada, ou origem não autorizada.
Erro:
FORBIDDEN. - 409Conflito de estado, duplicidade ou Idempotency-Key reutilizada com outro corpo.
Erro:
IDEMPOTENCY_KEY_REUSED.
Campos da resposta 200 (data — objeto)
| Campo | Tipo | Descrição |
|---|---|---|
situacao obrigatório | texto | Valores: bloqueada, pode_pedir, liberada, suspensa. |
liberacao | texto ou nulo | Valores: automatica, manual_master. |
liberadaEm | texto (date-time) ou nulo | |
motivo | texto ou nulo |
/integracao/chamadasRegistro 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.
- Escopo
contas:ler - Chave de APIsim
- Token OAuthnão (responde
403)
Parâmetros
| Parâmetro | Onde | Descrição |
|---|---|---|
pagina | consulta | Número da página, começando em 1. Tipo: inteiro. Padrão: 1. Mínimo 1. |
limite | consulta | Itens por página (padrão 100, máximo 100). Tipo: inteiro. Padrão: 100. De 1 a 100. |
de | consulta | Tipo: texto (date-time). |
ate | consulta | Tipo: texto (date-time). |
status | consulta | Código HTTP exato (ex. 422) ou faixa: 2xx, 4xx, 5xx. Tipo: texto. Formato: ^([1-5]\d{2}|[1-5]xx)$. |
metodo | consulta | Tipo: texto. Valores: GET, POST, PUT, PATCH, DELETE. |
endpoint | consulta | Modelo do endereço, ex. /galerias ou /contas/{contaId}/produtos/{codigo}. Tipo: texto. Até 200 caracteres. |
codigoErro | consulta | Valor de error.type ou de uma pendência (ex. PRODUCT_REQUIREMENTS_NOT_MET). Tipo: texto. Até 80 caracteres. |
contaId | consulta | Tipo: texto. Formato: ^cta_[0-9A-Z]{26}$. |
chave | consulta | Identificador público da chave (sk_test_xxxxxxxxxxxx). Tipo: texto. Até 40 caracteres. |
ambiente | consulta | Tipo: texto. Valores: teste, producao. |
Respostas
- 200Página de chamadas.
- 400Dados inválidos.
Erro:
VALIDATION_ERROR. - 401Chave ou token ausente, inválido, revogado ou expirado.
Erro:
UNAUTHORIZED.
/integracao/chamadas/{requestId}Detalhe de uma chamada, com corpo enviado e recebido (mascarados)#
- Escopo
contas:ler - Chave de APIsim
- Token OAuthnão (responde
403)
Parâmetros
| Parâmetro | Onde | Descrição |
|---|---|---|
requestId obrigatório | caminho | Valor do cabeçalho X-Request-Id. Tipo: texto. Formato: ^req_[0-9A-Z]{26}$. |
Respostas
- 200Chamada encontrada.
- 401Chave ou token ausente, inválido, revogado ou expirado.
Erro:
UNAUTHORIZED. - 404Recurso não existe ou não pertence a este integrador.
Erro:
RESOURCE_NOT_FOUND.
Campos da resposta 200 (data — objeto)
| Campo | Tipo | Descrição |
|---|---|---|
requestId obrigatório | texto | Formato: ^req_[0-9A-Z]{26}$. |
data obrigatório | texto (date-time) | |
ambiente obrigatório | texto | teste = chave sk_test_ (mídia de exemplo, sem custo); producao = chave sk_live_. Valores: teste, producao. |
metodo obrigatório | texto | |
endpoint obrigatório | texto | Modelo do endereço (sem ids). |
status obrigatório | inteiro | |
duracaoMs | inteiro | |
chave | texto ou nulo | Identificador público da chave (nunca o segredo). |
contaId | texto ou nulo | |
codigoErro | texto ou nulo | |
mensagem | texto ou nulo | |
causa | texto ou nulo | O que aconteceu nesta chamada, em português. |
comoCorrigir | texto ou nulo | |
linkDocumentacao | texto (uri) ou nulo | |
idempotente | booleano ou nulo | true quando foi repetição com a mesma Idempotency-Key. |
corpoEnviado | qualquer | Corpo do pedido, mascarado e cortado em 64 KB. |
corpoRecebido | qualquer | Corpo da resposta, mascarado e cortado em 64 KB. |
cabecalhosEnviados | objeto | Authorization e Idempotency-Key aparecem mascarados. Chaves livres. |
{
"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"
}
}
}/integracao/errosCatá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.
- Escopo
contas:ler - Chave de APIsim
- Token OAuthsim
Respostas
- 200Catálogo vigente.
- 401Chave 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.
- POST
/oauth/tokenTrocar o código por tokens ou renovar com o refresh token - POST
/oauth/revogarRevogar um token (encerra a autorização)
https://api.sellume.com.br/oauth/tokenTrocar 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
| Campo | Tipo | Descrição |
|---|---|---|
grant_type obrigatório | texto | Valores: authorization_code, refresh_token. |
code | texto | Só authorization_code. Formato: ^oac_[A-Za-z0-9_-]{43}$. |
redirect_uri | texto | Só authorization_code: a mesma da autorização. |
code_verifier | texto | Só authorization_code (PKCE). De 43 a 128 caracteres. |
refresh_token | texto | Só refresh_token. |
scope | texto | Só refresh_token, opcional: escopos menores que os autorizados, separados por espaço. |
client_id | texto | Se não usar HTTP Basic. Formato: ^app_[0-9A-Z]{26}$. |
client_secret | texto | Se não usar HTTP Basic (app confidencial). |
grant_type=authorization_code&code=oac_…&redirect_uri=https%3A%2F%2Ferp.exemplo.com.br%2Foauth%2Fretorno&code_verifier=…&client_id=app_…grant_type=refresh_token&refresh_token=ort_test_…&client_id=app_…Respostas
- 200Par de tokens.
Cabeçalhos:
Cache-Control. - 400invalid_request, invalid_grant, invalid_scope, unauthorized_client ou unsupported_grant_type.
Erro:
invalid_request,invalid_grant,unauthorized_client,unsupported_grant_type,invalid_scope. - 401invalid_client (client_id ou segredo errado, app desativado ou integração pausada).
Erro:
invalid_client. - 429temporarily_unavailable (limite por minuto ou app bloqueado por falhas); respeite o Retry-After.
Cabeçalhos:
Retry-After. Erro:temporarily_unavailable.
Campos da resposta 200 (objeto)
| Campo | Tipo | Descrição |
|---|---|---|
access_token obrigatório | texto | |
token_type obrigatório | texto | Sempre Bearer. |
expires_in obrigatório | inteiro | Sempre 3600. |
refresh_token obrigatório | texto | |
scope obrigatório | texto | |
conta_id obrigatório | texto | A conta vinculada que o token enxerga. Formato: ^cta_[0-9A-Z]{26}$. |
{
"access_token": "oat_test_…",
"token_type": "Bearer",
"expires_in": 3600,
"refresh_token": "ort_test_…",
"scope": "contas:ler produtos:escrever geracoes:criar",
"conta_id": "cta_…"
}https://api.sellume.com.br/oauth/revogarRevogar 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
| Campo | Tipo | Descrição |
|---|---|---|
token obrigatório | texto | Access (oat_…) ou refresh (ort_…). |
token_type_hint | texto | Opcional; ignorado. Valores: access_token, refresh_token. |
client_id | texto | Se não usar HTTP Basic. |
client_secret | texto | Se não usar HTTP Basic (app confidencial). |
token=ort_test_…&client_id=app_…Respostas
- 200Revogado (ou token desconhecido).
- 400invalid_request (token ausente).
Erro:
invalid_request. - 401invalid_client.
Erro:
invalid_client.
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.
seu endereço · produto.conferidoConferência do produto concluída#
Cabeçalhos enviados
| Parâmetro | Onde | Descrição |
|---|---|---|
X-Sellume-Signature obrigatório | cabeçalho | t=<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ório | cabeçalho | Igual 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.
seu endereço · geracao.concluidaGeraçã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âmetro | Onde | Descrição |
|---|---|---|
X-Sellume-Signature obrigatório | cabeçalho | t=<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ório | cabeçalho | Igual 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.
{
"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"
}
}seu endereço · geracao.falhouGeração falhou (créditos devolvidos)#
Cabeçalhos enviados
| Parâmetro | Onde | Descrição |
|---|---|---|
X-Sellume-Signature obrigatório | cabeçalho | t=<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ório | cabeçalho | Igual 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.
seu endereço · creditos.baixosSaldo abaixo do limite de alerta configurado#
Cabeçalhos enviados
| Parâmetro | Onde | Descrição |
|---|---|---|
X-Sellume-Signature obrigatório | cabeçalho | t=<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ório | cabeçalho | Igual 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.
seu endereço · cota.alertaUso do ciclo chegou a 70% ou 90% da cota do plano, ou bateu o teto (cota esgotada)#
Cabeçalhos enviados
| Parâmetro | Onde | Descrição |
|---|---|---|
X-Sellume-Signature obrigatório | cabeçalho | t=<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ório | cabeçalho | Igual 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.
seu endereço · aviso.testeAviso de teste pedido pelo integrador#
Cabeçalhos enviados
| Parâmetro | Onde | Descrição |
|---|---|---|
X-Sellume-Signature obrigatório | cabeçalho | t=<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ório | cabeçalho | Igual 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.