Como usar a API para criar uma cobrança com descontos?
Criar cobrança com descontos via API
Para criar uma cobrança Pix com descontos, você utiliza o endpoint /api/v1/charge da API.
Você pode acessar aqui a documentação referente a esse endpoint.
Os campos obrigatórios para criar uma cobrança Pix com descontos são os seguintes:
type: O tipo de cobrança Pix (Apenas o tipoOVERDUEé considerado para essa modalidade).customer: O cliente que será destinado a essa cobrança Pix.daysForDueDate: O número de dias para vencimento da cobrança.value: O valor em centavos da cobrança Pix a ser criado.correlationID: Um identificador único para a cobrança Pix. CorrelationIDdiscountSettings: O objeto que contém as configurações de descontos da cobrança Pix.
Exemplo
O body da sua requisição será semelhante a este exemplo:
{
  "correlationID": "c782e0ac-833d-4a89-9e73-9b60b2b41d3a",
  "value": 1600,
  "type": "OVERDUE",
  "daysForDueDate": 15,
  "customer": {
    "name": "Jonh Doe",
    "taxID": "123.456-789-10",
    "address": {
      "zipcode": "00000000",
      "street": "Rua 00",
      "number": "0",
      "neighborhood": "Bairro",
      "city": "São Paulo",
      "state": "SP"
    }
  },
  "discountSettings": {
    "modality": "PERCENTAGE_UNTIL_SPECIFIED_DATE",
    "discountFixedDate": [
      {
        "daysActive": 5,
        "value": 150
      },
      {
        "daysActive": 15,
        "value": 100
      }
    ]
  }
}
O modality dentro do objeto discountSettings é o tipo de desconto que será aplicado na cobrança. No exemplo acima, o desconto será aplicado em valor fixo até a data especificada. Todavia, você também pode aplicar desconto em porcetagem até a data especificada também.
Atualmente contamos com os seguintes enums para especificar a modalidade do desconto:
FIXED_VALUE_UNTIL_SPECIFIED_DATE(Valor fixo até a data especificada)PERCENTAGE_UNTIL_SPECIFIED_DATE(Porcentagem até a data especificada)
O discountFixedDate é um array de objetos que contém os seguintes campos:
value: descreve o valor do desconto em centavos.daysActive: descreve o número de dias que o desconto será aplicado.- Exemplo: Hoje é dia 20/02/2024, eu quero aplicar um desconto de R$ 1,50 caso o meu cliente pague antecipado até o dia 28/02/2024. Então o 
daysActiveserá de8e ovalueserá150. 
- Exemplo: Hoje é dia 20/02/2024, eu quero aplicar um desconto de R$ 1,50 caso o meu cliente pague antecipado até o dia 28/02/2024. Então o 
 
Exemplos em código
- Shell + cURL
 - JavaScript + Fetch
 
  curl 'https://api.openpix.com.br/api/v1/charge' -X POST \
      -H "Accept: application/json" \
      -H "Content-Type: application/json" \
      -H "user-agent: node-fetch" \
      --data-binary '{
        "correlationID": "c782e0ac-833d-4a89-9e73-9b60b2b41d3a",
        "value": 1600,
        "type": "OVERDUE",
        "daysForDueDate": 15,
        "customer": {
          "name": "Jonh Doe",
          "taxID": "123.456-789-10",
          "address": {
            "zipcode": "00000000",
            "street": "Rua 00",
            "number": "0",
            "neighborhood": "Bairro",
            "city": "São Paulo",
            "state": "SP"
          }
        },
        "discountSettings": {
          "modality": "PERCENTAGE_UNTIL_SPECIFIED_DATE",
          "discountFixedDate": [
            {
              "daysActive": 5,
              "value": 150
            },
            {
              "daysActive": 15,
              "value": 100
            }
          ]
        }
      }'
fetch('https://api.openpix.com.br/api/v1/charge', {
  method: 'POST',
  body: JSON.stringify({
    correlationID: 'c782e0ac-833d-4a89-9e73-9b60b2b41d3a',
    value: 1600,
    type: 'OVERDUE',
    daysForDueDate: 15,
    customer: {
      name: 'Jonh Doe',
      taxID: '123.456-789-10',
      address: {
        zipcode: '00000000',
        street: 'Rua 00',
        number: '0',
        neighborhood: 'Bairro',
        city: 'São Paulo',
        state: 'SP',
      },
    },
    discountSettings: {
      modality: 'PERCENTAGE_UNTIL_SPECIFIED_DATE',
      discountFixedDate: [
        {
          daysActive: 5,
          value: 150,
        },
        {
          daysActive: 15,
          value: 100,
        },
      ],
    },
  }),
  headers: {
    Authorization: 'AUTHORIZATION',
    'Content-Type': 'application/json',
  },
}).then((res) => res.json());