A API de Gestão Promocional é responsável pela criação e ativação de ofertas nos meios de geração de pedido selecionados.
Atualmente temos os tipos:
- Leve e Pague
- Desconto
As ofertas poderão ser segmentadas por canais e locais em breve. No futuro, podemos colocar perfis de usuários.
Tipos de promoção
type: buy_pay
Leve Y e Pague X. Ao selecionar essa regra, exibiremos dois campos de texto: leve e pague.
- O campo
leveserá responsável por indicar a quantidade mínima que entrará no gatilho que ativará a promoção através do campoquantitydentro detrigger. - O campo
pagueserá responsável por indicar o benefício aplicado ao ativar a promoção em quantidade de itens. Será enviado no campopaydentro debenefits.
type: discount
Ganhe uma porcentagem ao levar itens. Ao selecionar essa regra, exibiremos dois campos de texto: leve e ganhe.
- O campo
leveserá responsável por indicar a quantidade mínima que entrará no gatilho que ativará a promoção através do campoquantitydentro detrigger. - O campo
ganheserá responsável por indicar o benefício aplicado ao ativar a promoção em porcentagem que será aplicada ao valor dos itens. Será enviado no campodiscountdentro debenefits.
Endpoint
Para cadastrar uma promoção na API de promoção será necessário fazer uma requisição POST para a seguinte url:
POST https://api.newtail.com.br
Autenticação
Seja mais sobre a autenticação em Documentação API Autenticação
Calculo de Promoções via API
O objetivo desta funcionalidade é conseguir calcular os descontos para uma cesta.
| Parâmetro | Descrição | Valores | Obrigatório |
|---|---|---|---|
| nome_layout | O nome do layout indica o formato de dados recebido e o formato retornado | -generic | Sim |
JSON:
POST /api/promotion/calculate/{{nome_layout}}Payload
Todos os campos devem ser enviados no body.
| Atributo | Descrição | Tipo | Obrigatório |
|---|---|---|---|
| store_id | Código identificador da loja | String | Sim |
| social_id | CPF/CNPJ do cliente | String | Sim |
| items | Informações dos produtos | Array<Object> | Sim |
| external_id | Código externo do item | string | Sim |
| price | Preço do item | Number | Sim |
| quantity | Quantidade do item | Number | sim |
Exemplo de requisição
{
"social_id": "11111111111",
"store_id": "001",
"items": [
{
"external_id": "1111",
"price": 5,
"quantity": 3
},
{
"external_id": "2222",
"price": 4.5,
"quantity": 3
},
{
"external_id": "3333",
"price": 5,
"quantity": 3
}
]
}Exemplo de Resposta
[
{
"external_id": "001",
"price": 5,
"quantity": 3,
"discount": 5,
"promotion": {
"id": "6243574f1f8211073c9e04fd",
"promotion_type": "buy_pay",
"unit_price_promotion": 3.33,
"average_price": 3.33
}
},
{
"external_id": "002",
"price": 4.5,
"quantity": 3,
"discount": 4.5,
"promotion": {
"id": "6243574f1f8211073c9e04fd",
"promotion_type": "buy_pay",
"unit_price_promotion": 3,
"average_price": 3
}
},
{
"external_id": "003",
"price": 5,
"quantity": 3,
"discount": 0,
"promotion": {}
}
]⚠️ * Os itens que tiverem promoção ativa, terá o campo discount com o valor total do desconto do item e o objeto promotion, terá as informações da promoção disparada para o item.
- Quando um item não tiver uma promoção, o campo
discountirá retornar com o valor zero e o objetopromotionestará vazio.
Criação de Promoção via API
Todos os campos devem ser enviados no body.
| Atributo | Descrição | Tipo | Obrigatório |
| name | Nome da promoção | String | Sim |
| account_id | Código identificador da conta | String | Sim |
| promotion_type | Tipo da promoção Valores: discount
| String | Sim |
| description | Descrição da promoção | String | Não |
| offers_ids | Código sku do produto | Array<String> | Sim |
| location_ids | Código da Loja | Array<String> | Não |
| trigger.quantity | Indica a quantidade minima para disparar a promoção | Number | Sim |
| benefits.pay | Indica quantos itens serão pagos dentre os selecionados. Só é usado para o tipo de promoção buy_pay | Number | Sim (Quanto o tipo de promoção for buy_pay) |
| benefits.discount | Indica o percentual de desconto. Só é usando para o tipo de promoção discount | Number | Sim (Quanto o tipo de promoção for discount) |
| start_promotion | Indica a data/hora do inicio da promoção. Exemplo: | String | |
| end_promotion | Indica a data/hora do fim da promoção. Exemplo: | String | |
| active | Indica se a promoção está ativa | boolean | |
| is_loyalty_promotion | is_loyalty_promotion | boolean | Não |
| cover_url | URL da imagem da capa da promoção | String | Não |
| template | Indica o template da promoção | String | Não |
Exemplo de requisição
{
"trigger": {
"quantity": 3
},
"benefits": {
"pay": 2
},
"location_ids": [],
"offers_ids": [
"2001261",
"21843"
],
"promotion_type": "buy_pay",
"account_id": "b9531180-a367-11eb-8e86-a140f88b70d4",
"name": "leve 3 pague 2",
"start_promotion": "2022-01-25T13:11:24.394Z",
"end_promotion": "2022-02-25T13:11:24.394Z",
"active": true
"cover_url": "<https://s3.newtail.com.br/promotions/cover.jpg>",
"is_loyalty_promotion": false,
"template": "default"
}Exemplo de Resposta
O retorno da requisição terá código HTTP 201 para caso que obtiveram sucesso na requisição. Em caso de erro será enviado um HTTP 4XX, com o possível problema.
Abaixo exemplo de requisição bem sucedida:
{
"_id": "620150ad1f6f55dc7b4f58b7",
"location_ids": [],
"offers_ids": [
"2001261"
],
"promotion_type": "buy_pay",
"account_id": "b9531180-a367-11eb-8e86-a140f88b70d4",
"name": "leve 3 pague 2",
"trigger": {
"quantity": 3
},
"benefits": {
"pay": 2
},
"start_promotion": "2022-01-25T13:11:24.394Z",
"end_promotion": "2022-02-25T13:11:24.394Z",
"created_at": "2022-02-07T17:02:37.896Z",
"updated_at": "2022-02-07T17:02:37.896Z",
"__v": 0,
"active": true,
"cover_url": "<https://s3.newtail.com.br/promotions/cover.jpg>",
"is_loyalty_promotion": false,
"template": "default",
"id": "620150ad1f6f55dc7b4f58b7"
}Para consultar uma promoção na API de promoção será necessário fazer uma requisição GET para a seguinte url:
GET /api/promotion/:id
Exemplo de Resposta
O retorno da requisição terá código HTTP 200 para caso que obtiveram sucesso na requisição. Em caso de erro será enviado um HTTP 4XX, com o possível problema.
Abaixo exemplo de requisição bem sucedida:
{
"trigger": {
"quantity": 3
},
"benefits": {
"pay": 2
},
"location_ids": [],
"offers_ids": [
"2001261"
],
"promotion_type": "buy_pay",
"_id": "62055e3310d035001c6e09f7",
"account_id": "b9531180-a367-11eb-8e86-a140f88b70d4",
"name": "Leve 3 pague 2 - Teste Diego",
"description": "",
"start_promotion": "2022-02-10T00:00:00.000Z",
"end_promotion": "2022-03-11T02:59:00.000Z",
"created_at": "2022-02-10T18:49:23.917Z",
"updated_at": "2022-02-10T19:03:03.250Z",
"__v": 0,
"active": true,
"id": "62055e3310d035001c6e09f7",
"selected_offers": [
{
"id": "6140fde45834d9506e73287e",
"name": "NISSIN MIOJO PICANHA 01",
"external_id": "2001261",
"assets": {
"small": [],
"large": [],
"raw": [
{
"mime": "image/webp",
"url": "<https://cdn.newtail.com.br/assets/products/612fb084873b7000081af8be/raw.6130e72afec07ad637a43839.webp>"
}
],
"medium": []
}
}
]
}Para consultar todas as promoções de uma conta na API será necessário fazer uma requisição GET para a seguinte url:
GET /api/promotion
Exemplo de Resposta
O retorno da requisição terá código HTTP 200 para caso que obtiveram sucesso na requisição. Em caso de erro será enviado um HTTP 4XX, com o possível problema.
Abaixo exemplo de requisição bem sucedida:
{
"total": 4,
"pages": 1,
"currentPage": 1,
"data": [
{
"trigger": {
"quantity": 5
},
"benefits": {
"pay": 3
},
"location_ids": [],
"offers_ids": [
"6140feff5834d956353a8ae3",
"614101b95834d94c57638708",
"6140ff5b5834d956353a9f18"
],
"promotion_type": "buy_pay",
"_id": "61f94b31d74a36001bbad618",
"target": {
"quantity": 0,
"offers_ids": []
},
"account_id": "b9531180-a367-11eb-8e86-a140f88b70d4",
"name": "Leve 5 batatas e pague 3",
"description": "O cliente levará 5 refrigerantes participantes e pagará 3.",
"start_promotion": "2021-12-01T13:00:00.000Z",
"end_promotion": "2022-02-02T01:00:00.000Z",
"created_at": "2022-02-01T15:01:05.793Z",
"updated_at": "2022-02-07T21:51:37.952Z",
"__v": 0,
"disabled_at": "2022-02-07T21:51:37.950Z",
"active": false,
"id": "61f94b31d74a36001bbad618"
},
{
"trigger": {
"quantity": 20
},
"benefits": {
"discount": 20
},
"target": {
"offers_ids": []
},
"location_ids": [],
"offers_ids": [
"35843",
"18130",
"2005364",
"13783",
"2025130010",
"2025130003"
],
"promotion_type": "discount",
"_id": "6201bae891bf31001b2324aa",
"account_id": "b9531180-a367-11eb-8e86-a140f88b70d4",
"name": "Nestlé fevereiro 2022",
"description": "Teste",
"start_promotion": "2022-02-10T13:00:00.000Z",
"end_promotion": "2022-02-19T02:59:00.000Z",
"created_at": "2022-02-08T00:35:52.627Z",
"updated_at": "2022-02-10T20:27:30.099Z",
"__v": 1,
"active": true,
"id": "6201bae891bf31001b2324aa"
},
{
"trigger": {
"quantity": 12
},
"benefits": {
"pay": 10
},
"location_ids": [],
"offers_ids": [
"2007606",
"2014080",
"2017944",
"2029482",
"2017295",
"2012228",
"2039808",
"2007099",
"2008843",
"21971",
"2016778",
"2016205",
"24631",
"2011799",
"2029113",
"36185",
"2030809"
],
"promotion_type": "buy_pay",
"_id": "62066f2f0a4024001bfaa199",
"account_id": "b9531180-a367-11eb-8e86-a140f88b70d4",
"name": "SEXTOU!!!",
"description": "",
"start_promotion": "2022-02-11T03:00:00.000Z",
"end_promotion": "2022-02-12T02:59:00.000Z",
"created_at": "2022-02-11T14:14:07.692Z",
"updated_at": "2022-02-11T14:14:07.692Z",
"__v": 0,
"active": true,
"id": "62066f2f0a4024001bfaa199"
},
{
"trigger": {
"quantity": 10
},
"benefits": {
"discount": 50
},
"target": {
"offers_ids": []
},
"location_ids": [],
"offers_ids": [
"2025160009",
"2025160010",
"2001261"
],
"promotion_type": "discount",
"_id": "62019e8410d035001c6e07b2",
"account_id": "b9531180-a367-11eb-8e86-a140f88b70d4",
"name": "Compre 10 baldes e ganha 50%",
"description": "Comprando 10 baldes o cliente ganhará 50%",
"start_promotion": "2022-02-15T08:00:00.000Z",
"end_promotion": "2022-08-02T01:00:00.000Z",
"created_at": "2022-02-07T22:34:44.594Z",
"updated_at": "2022-02-07T22:34:44.594Z",
"__v": 0,
"active": true,
"id": "62019e8410d035001c6e07b2"
}
]
}Para atualizar uma promoção na API de promoção será necessário fazer uma requisição PUT para a seguinte url:
PUT /api/promotion/:id
Exemplo de Resposta
O retorno da requisição terá código HTTP 200 para caso que obtiveram sucesso na requisição. Em caso de erro será enviado um HTTP 4XX, com o possível problema.
Abaixo exemplo de requisição bem sucedida:
{
"trigger": {
"quantity": 3
},
"benefits": {
"pay": 2
},
"location_ids": [],
"offers_ids": [
"2001261",
"21843"
],
"promotion_type": "buy_pay",
"_id": "620150ad1f6f55dc7b4f58b7",
"account_id": "b9531180-a367-11eb-8e86-a140f88b70d4",
"name": "leve 3 pague 2",
"start_promotion": "2022-01-25T13:11:24.394Z",
"end_promotion": "2022-02-25T13:11:24.394Z",
"created_at": "2022-02-07T17:02:37.896Z",
"updated_at": "2022-02-11T18:47:37.063Z",
"__v": 0,
"disabled_at": "2022-02-11T18:47:37.054Z",
"active": false,
"id": "620150ad1f6f55dc7b4f58b7"
}Para excluir uma promoção na API de promoção será necessário fazer uma requisição DELETE para a seguinte url:
DELETE /api/promotion/:id
Exemplo de Resposta
O retorno da requisição terá código HTTP 200 para caso que obtiveram sucesso na requisição. Em caso de erro será enviado um HTTP 4XX, com o possível problema.
Abaixo exemplo de requisição bem sucedida:
{
"deleted_id": "61fc1896a9c486f60c6f59ca"
}