Anúncios do seller
Lista, cria, consulta e edita os anúncios (rascunhos) do seller nos marketplaces; a prévia e a publicação ficam na página seguinte.
Um anúncio (listing) é um produto da loja oferecido em um canal, com título, descrição, categoria do canal, atributos e preço próprios daquele canal. Ele nasce como rascunho (D), você completa os dados e depois publica. Cada anúncio pertence a uma conta e a um produto (ou kit) da loja; enquanto não está publicado, nada é enviado ao canal.
Depois de publicado, o estoque e (salvo preço fixo) o preço do anúncio acompanham o produto da loja: a plataforma envia as mudanças ao canal sozinha. Para cada variação do produto o anúncio guarda um SKU (skus), que carrega o preço e o estoque enviados.
Listar anúncios
/api/v1/vendor/markethub/listingsSellerLista os anúncios das contas do seller
Devolve os anúncios das contas do seller, do mais recentemente alterado para o mais antigo, com uma prévia do preço e um resumo dos problemas.
Parâmetros de consulta
accountuuidstatusstringDQAPECRqstringproductuuidissuesstring11 traz só os anúncios em erro (E).pageintegerpadrão: 1per_pageintegerpadrão: 50{
"listings": [
{
"id": "a7c1d0e2-3b4f-4c5a-8d6e-9f0a1b2c3d4e",
"account_id": "e4648fc4-dd0d-45cd-9eaf-4fad48de4a78",
"marketplace": "mercadolivre",
"account_name": "Mercado Livre (produção)",
"product_id": "c3f92551-9dda-4fc7-b518-353d1c4e4035",
"bundle_id": null,
"product_name": "Smartphone Plus Roxo",
"product_image": "/uploads/products/smartphone-roxo.jpg",
"external_id": null,
"external_url": null,
"status": "E",
"title": "Smartphone Plus Roxo 128 GB",
"description": "Smartphone com tela de 6,5 polegadas.",
"category_ext_id": "MLB1055",
"listing_type_ext_id": "gold_special",
"price_override_cents": null,
"attributes": [{ "id": "BRAND", "name": "Marca", "value": "Plus" }],
"last_issues": [{ "code": "missing_required_attribute", "message": "Preencha a cor.", "attr_id": "COLOR" }],
"last_synced_at": null,
"published_at": null,
"created_at": "2026-10-11T20:00:00Z",
"updated_at": "2026-10-11T20:30:00Z",
"price_resolution": { "base_cents": 129900, "rule_label": "Preço da loja", "final_cents": 129900 }
}
],
"total": 1,
"page": 1,
"per_page": 50,
"issue_groups": [
{ "code": "missing_required_attribute", "count": 1, "message": "Preencha a cor.", "listing_ids": ["a7c1d0e2-3b4f-4c5a-8d6e-9f0a1b2c3d4e"] }
]
}Campos da resposta
listingsarray[] quando não há nenhum (na lista do seller; a do administrador pode trazer null).totalintegerpageintegerper_pageintegerissue_groupsarrayissue_groups[].codestringissue_groups[].countintegerissue_groups[].messagestringissue_groups[].listing_idsarraylistings[].iduuidlistings[].account_iduuidlistings[].marketplacestringlistings[].account_namestringlistings[].product_iduuidlistings[].bundle_iduuidlistings[].product_namestringlistings[].product_imagestringlistings[].external_idstringlistings[].external_urlstringlistings[].statusstringDQAPECRD rascunho, Q na fila, A ativo, P pausado, E erro, C encerrado, R em revisão.listings[].titlestringlistings[].descriptionstringlistings[].category_ext_idstringlistings[].listing_type_ext_idstringlistings[].price_override_centsintegerlistings[].attributesarrayid, name, value, e value_id e unit quando há).listings[].last_issuesarraycode, message, attr_id, warning).listings[].last_synced_atstringlistings[].published_atstringlistings[].created_atstringlistings[].updated_atstringlistings[].price_resolutionobjectbase_cents (preço da loja), rule_label (regra do canal aplicada, se houver), final_cents e override_cents (quando há preço fixo).Criar um anúncio
/api/v1/vendor/markethub/listingsSellerCria um anúncio em rascunho
Cria o rascunho (status: D) e já gera os SKUs a partir do produto: um por variação, ou um só para produto simples. Nada é enviado ao canal. Informe exatamente um entre product_id e bundle_id. A resposta é o detalhe do anúncio (com skus e jobs).
Corpo da requisição
account_iduuidobrigatórioproduct_iduuidbundle_id.bundle_iduuidproduct_id.titlestringdescriptionstringcategory_ext_idstringlisting_type_ext_idstringprice_override_centsintegerattributesarray{ "id", "name", "value", "value_id", "unit" }. Um JSON inválido é descartado e vira [].Exemplo de requisição: criar
curl -X POST "$BASE_URL/api/v1/vendor/markethub/listings" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"account_id": "e4648fc4-dd0d-45cd-9eaf-4fad48de4a78",
"product_id": "c3f92551-9dda-4fc7-b518-353d1c4e4035",
"category_ext_id": "MLB1055",
"attributes": [{ "id": "BRAND", "value": "Plus" }]
}'Consultar um anúncio
/api/v1/vendor/markethub/listings/{id}SellerDetalhe de um anúncio, com SKUs e jobs recentes
Devolve o anúncio com os mesmos campos da lista e mais duas listas: skus (um por variação) e jobs (os jobs recentes só deste anúncio). Anúncio de outra conta responde 404.
Parâmetros de caminho
iduuidobrigatório{
"id": "a7c1d0e2-3b4f-4c5a-8d6e-9f0a1b2c3d4e",
"account_id": "e4648fc4-dd0d-45cd-9eaf-4fad48de4a78",
"marketplace": "mercadolivre",
"product_id": "c3f92551-9dda-4fc7-b518-353d1c4e4035",
"status": "D",
"title": "Smartphone Plus Roxo 128 GB",
"category_ext_id": "MLB1055",
"attributes": [{ "id": "BRAND", "value": "Plus" }],
"last_issues": null,
"price_resolution": { "base_cents": 129900, "final_cents": 129900 },
"skus": [
{
"id": "5b8e1c0a-0d3f-4a7b-9c21-6e4f8a1b2c3d",
"listing_id": "a7c1d0e2-3b4f-4c5a-8d6e-9f0a1b2c3d4e",
"local_key": "c3f92551-9dda-4fc7-b518-353d1c4e4035",
"seller_sku": "SMART-ROXO-128",
"external_sku_id": null,
"price_cents": null,
"stock": null
}
],
"jobs": []
}Campos da resposta
skusarrayskus[].local_keystringproduto:variação).skus[].seller_skustringskus[].external_sku_idstringskus[].price_centsintegerskus[].stockintegerskus[].b2bobjectprice_cents e faixas por quantidade), nos canais que têm.jobsarrayOs demais campos são os da lista.
Alterar um rascunho
/api/v1/vendor/markethub/listings/{id}SellerAltera parcialmente um anúncio
Altera só os campos presentes no corpo; o que não vier fica como está. Enviar null limpa um campo de texto ou o preço fixo. Trocar category_ext_id descarta os atributos que não existem na nova categoria. A alteração não reenvia nada ao canal: para isso, publique de novo. A resposta é o detalhe do anúncio.
Parâmetros de caminho
iduuidobrigatórioCorpo da requisição
titlestringnull ou vazio volta ao nome do produto.descriptionstringcategory_ext_idstringlisting_type_ext_idstringprice_override_centsintegernull volta ao preço da loja.attributesarraycurl -X PATCH "$BASE_URL/api/v1/vendor/markethub/listings/a7c1d0e2-3b4f-4c5a-8d6e-9f0a1b2c3d4e" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"price_override_cents": 119900, "attributes": [{"id": "BRAND", "value": "Plus"}, {"id": "COLOR", "value": "Roxo"}]}'Erros
| Status | Quando | Corpo de exemplo |
|---|---|---|
| 400 | Corpo não é JSON. | {"error":"invalid body","detail":"..."} |
| 400 | Criação sem account_id, ou sem ou com os dois product_id e bundle_id. | {"error":"failed to create listing","detail":"markethub: invalid input: exactly one of product_id or bundle_id is required"} |
| 400 | Campo de texto que não é texto, price_override_cents que não é inteiro, attributes que não é lista (alteração). | {"error":"failed to update listing","detail":"markethub: invalid input: attributes must be an array"} |
| 401 | Sem token. | {"error":"authentication required"} |
| 403 | Módulo desligado. | {"error":"module_disabled","module":"marketplace-hub"} |
| 403 | Usuário sem seller. | {"error":"no vendor account associated with this user"} |
| 404 | Conta (na criação) ou anúncio de outro seller, ou inexistente. | {"error":"listing not found","detail":"markethub: listing not found"} |
| 500 | Qualquer id que não é UUID válido. | {"error":"failed to create listing","detail":"..."} |