Criar campanhas a partir de links
Recebe de 1 a 50 links de produto e, para cada link, gera a promoção (texto,
imagem e link de afiliado, com as integrações da sua conta) e cria uma
campanha no segmento informado. O trabalho é assíncrono: a resposta é um
pedido de promoção (id_promotion_job) com o estado de cada link em items.
201— o pedido terminou dentro dewait_seconds.202— o pedido segue em andamento: acompanhe pelo headerLocation(GET /api/external/info-promotion-job/<id_promotion_job>).200— mesmaIdempotency-Keye mesmo corpo: devolve o pedido original, sem criar nada de novo.
O header Idempotency-Key é obrigatório. A mesma chave com outro corpo
devolve 422 com idempotency_key_reused.
A falha de um link não vira erro HTTP: o link aparece em items com
status: failed e error.code. Com on_error: all_or_nothing, nenhuma
campanha é criada se algum link falhar.
App de parceiro (OAuth): exige promotions:write e campaigns:send; o
código e o link do cupom aplicado voltam mascarados.
Modo de teste (sk_test_): respostas sintéticas, sem gerar nem criar nada.
Use id_segment: segment_test_1; sandbox_error e sandbox_warning simulam
falha e aviso.
Chave de API no formato sk_live_..., no header x-api-key.
In: header
Query Parameters
Só no modo de teste (sk_test_): o último link do pedido falha com este código de erro de item (ex.: link_invalid). Ignorado com credencial real.
Só no modo de teste (sk_test_): os links criados recebem este aviso (ex.: outside_sending_window). Ignorado com credencial real.
Header Parameters
Chave de idempotência, obrigatória neste endpoint. Use um valor único por pedido (ex.: um UUID) e repita o MESMO valor ao re-tentar: o pedido original é devolvido e nenhuma campanha é criada em dobro.
1 <= length <= 255Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Corpo de create-campaign/promotion. Campo fora desta lista é recusado (unknown_field).
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X POST "https://example.com/api/external/create-campaign/promotion" \ -H "Idempotency-Key: string" \ -H "Content-Type: application/json" \ -d '{ "id_segment": "segment_xxx", "links": [ "https://shopee.com.br/produto-exemplo-i.123456.7890123" ] }'{ "success": true, "id_promotion_job": "string", "status": "queued", "mode": "create", "id_segment": "string", "on_error": "skip", "summary": { "total": 0, "queued": 0, "processing": 0, "generated": 0, "created": 0, "failed": 0, "skipped": 0, "cancelled": 0, "expired": 0 }, "items": [ { "index": 0, "link": "string", "store": "string", "status": "queued", "id_campaign": "string", "campaign_status": "string", "scheduled_at": "2019-08-24T14:15:22Z", "product": { "title": "string" }, "message": "string", "link_url": "string", "template_applied": { "mode": "id", "id_template": "string" }, "coupon_applied": { "code": "string", "link": "string" }, "discount_applied": true, "error": { "code": "string", "message": "string", "retryable": true }, "warnings": [ "string" ] } ], "created_at": "2019-08-24T14:15:22Z", "finished_at": "2019-08-24T14:15:22Z"}{ "success": true, "id_promotion_job": "promotion_job_6f1c2d3e-0000-4000-8000-000000000000", "status": "completed", "mode": "create", "id_segment": "5b7e1a2c-0000-4000-8000-000000000000", "on_error": "skip", "summary": { "total": 1, "queued": 0, "processing": 0, "generated": 0, "created": 1, "failed": 0, "skipped": 0, "cancelled": 0, "expired": 0 }, "items": [ { "index": 0, "link": "https://shopee.com.br/produto-exemplo-i.123456.7890123", "store": "shopee", "status": "created", "id_campaign": "campaign_9a0b4c1d-0000-4000-8000-000000000000", "campaign_status": "pending", "scheduled_at": null, "product": { "title": "Fone de ouvido sem fio" }, "message": "🔥 Fone de ouvido sem fio\nDe R$ 199,90 por R$ 149,90\nhttps://exemplo.com/s/abc123", "link_url": "https://exemplo.com/s/abc123", "template_applied": { "mode": "id", "id_template": "2c4d8e0f-0000-4000-8000-000000000000" }, "coupon_applied": null, "discount_applied": false, "warnings": [] } ], "created_at": "2026-09-15T12:00:00.000Z", "finished_at": "2026-09-15T12:00:14.000Z"}{ "success": true, "id_promotion_job": "string", "status": "queued", "mode": "create", "id_segment": "string", "on_error": "skip", "summary": { "total": 0, "queued": 0, "processing": 0, "generated": 0, "created": 0, "failed": 0, "skipped": 0, "cancelled": 0, "expired": 0 }, "items": [ { "index": 0, "link": "string", "store": "string", "status": "queued", "id_campaign": "string", "campaign_status": "string", "scheduled_at": "2019-08-24T14:15:22Z", "product": { "title": "string" }, "message": "string", "link_url": "string", "template_applied": { "mode": "id", "id_template": "string" }, "coupon_applied": { "code": "string", "link": "string" }, "discount_applied": true, "error": { "code": "string", "message": "string", "retryable": true }, "warnings": [ "string" ] } ], "created_at": "2019-08-24T14:15:22Z", "finished_at": "2019-08-24T14:15:22Z"}{ "success": false, "error": "Bad Request", "code": "unsupported_link", "message": "O link na posição 2 não é um link http(s) de loja suportada.", "field": "links[2]"}{ "success": false, "error": "Unauthorized", "message": "Chave de API inválida ou ausente."}{ "success": false, "error": "Forbidden", "code": "plan_feature_locked", "message": "Seu plano permite 1 link por pedido. Para vários links de uma vez é preciso o Multi Sender.", "feature": "multi_sender"}{ "success": false, "error": "Not Found", "code": "promotion_job_not_found", "message": "Pedido de promoção não encontrado."}{ "success": false, "error": "Payload Too Large", "code": "payload_too_large", "message": "O corpo do pedido passa de 256 KB."}{ "success": false, "error": "Unprocessable Entity", "code": "coupon_expired", "message": "Este cupom está vencido.", "field": "coupon.id_coupon"}{ "success": false, "error": "Too Many Requests", "code": "too_many_active_jobs", "message": "Esta conta já tem 3 pedidos de promoção em andamento. Aguarde um terminar."}{ "success": false, "error": "Internal Server Error", "code": "internal_error", "message": "Erro interno ao processar o pedido de promoção."}{ "success": false, "error": "Service Unavailable", "code": "service_paused", "message": "A geração de promoções pela API está pausada no momento. Tente novamente mais tarde."}