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 leve será responsável por indicar a quantidade mínima que entrará no gatilho que ativará a promoção através do campo quantity dentro de trigger.
  • O campo pague será responsável por indicar o benefício aplicado ao ativar a promoção em quantidade de itens. Será enviado no campo pay dentro de benefits .

type: discount

Ganhe uma porcentagem ao levar itens. Ao selecionar essa regra, exibiremos dois campos de texto: leve e ganhe.

  • O campo leve será responsável por indicar a quantidade mínima que entrará no gatilho que ativará a promoção através do campo quantity dentro de trigger .
  • O campo ganhe será 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 campo discount dentro de benefits .

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âmetroDescriçãoValoresObrigatório
nome_layoutO nome do layout indica o formato de dados recebido e o formato retornado-genericSim

JSON:

POST /api/promotion/calculate/{{nome_layout}}


Payload

Todos os campos devem ser enviados no body.

AtributoDescriçãoTipoObrigatório
store_idCódigo identificador da lojaStringSim
social_idCPF/CNPJ do clienteStringSim
itemsInformações dos produtosArray<Object>Sim
external_idCódigo externo do itemstringSim
pricePreço do itemNumberSim
quantityQuantidade do itemNumbersim

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 discount irá retornar com o valor zero e o objeto promotion estará vazio.

Criação de Promoção via API

Todos os campos devem ser enviados no body.

AtributoDescriçãoTipoObrigatório
nameNome da promoçãoStringSim
account_idCódigo identificador da contaStringSim
promotion_type

Tipo da promoção

Valores:
buy_pay

discount

 

StringSim
descriptionDescrição da promoçãoStringNão
offers_idsCódigo sku do produtoArray<String>Sim
location_idsCódigo da LojaArray<String>Não
trigger.quantityIndica a quantidade minima para disparar a promoçãoNumberSim
benefits.payIndica quantos itens serão pagos dentre os selecionados. Só é usado para o tipo de promoção buy_payNumberSim (Quanto o tipo de promoção for buy_pay)
benefits.discountIndica o percentual de desconto. Só é usando para o tipo de promoção discountNumberSim (Quanto o tipo de promoção for discount)
start_promotion

Indica a data/hora do inicio da promoção.

Exemplo:
"2022-01-25T13:11:24.394Z”

String 
end_promotion

Indica a data/hora do fim da promoção.

Exemplo:
"2022-01-25T13:11:24.394Z”

String 
activeIndica se a promoção está ativaboolean 
is_loyalty_promotionis_loyalty_promotionbooleanNão
cover_urlURL da imagem da capa da promoçãoStringNão
templateIndica o template da promoçãoString

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"
}