> ## Documentation Index
> Fetch the complete documentation index at: https://docs.repediu.com.br/llms.txt
> Use this file to discover all available pages before exploring further.

# Cashback

> Informe o valor e a data de validade do cashback de até 500 clientes por requisição

Envia saldo e validade de cashback de clientes para a Repediu. Suporta até **500 registros por requisição**.

<Warning>
  Envie ao menos um de `id`, `documentNumber` ou `phoneNumber` em `customer` — os três ausentes são rejeitados. Quando informado, `documentNumber` é validado por **dígito verificador real** de CPF (11 dígitos) ou CNPJ (14 dígitos), não apenas por tamanho.
</Warning>

<Info>
  `value` aceita `0` na prática, apesar de a mensagem de erro do sistema dizer "deve ser maior que zero" — apenas valores **negativos** são rejeitados. `expiresAt` não pode estar no passado (comparado em UTC).
</Info>

<Warning>
  O campo `result` da resposta vem como uma **string contendo um array JSON serializado**, não um array no nível raiz:

  ```json theme={null}
  { "result": "[{\"Identifier\":null,\"Message\":\"Cashbacks synced successfully\",\"IsError\":false}]", "error": null, "success": true }
  ```

  É preciso um segundo `JSON.parse(result)` para obter a lista de `{Identifier, Message, IsError}`.
</Warning>

## Erros

Esta rota tem dois formatos de erro diferentes:

| HTTP | Formato | Quando acontece |
| - | - | - |
| `400` | Envelope padrão (`error.message`) | Lista vazia ou mais de 500 itens |
| `400` | `ModelState` bruto do ASP.NET | Nenhum identificador de cliente informado, CPF/CNPJ com dígito verificador inválido, `value`/`expiresAt` ausentes, ou `expiresAt` no passado |


## OpenAPI

````yaml openapi-envio-de-dados.yaml POST /cashback/insert
openapi: 3.0.1
info:
  title: Repediu — API de Envio de Dados
  description: >-
    API para o parceiro ENVIAR dados para a Repediu (vendas, clientes,
    avaliações e cashback) — sentido inverso ao da API Open Delivery, onde o
    parceiro LÊ dados da Repediu. Autenticação própria via
    clientId/clientSecret, sem relação com o token client_credentials do Open
    Delivery.
  version: v1
servers:
  - url: https://public-api.repediu.com.br
    description: Produção
security:
  - Bearer: []
paths:
  /cashback/insert:
    post:
      tags:
        - Cashback
      summary: Cashback
      description: >-
        Envia até 500 cashbacks por requisição. O campo result da resposta vem
        como uma string contendo um array JSON serializado (precisa de um
        segundo JSON.parse) — não é um array no nível raiz da resposta.
      operationId: insertCashbacks
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: array
              maxItems: 500
              items:
                $ref: '#/components/schemas/CompleteCashbackRequest'
            example:
              - customer:
                  id: '242150'
                  documentNumber: ''
                  phoneNumber: ''
                cashback:
                  value: 10
                  expiresAt: '2025-10-15T15:00:00.000Z'
      responses:
        '200':
          description: Cashbacks processados (ver nota sobre result acima).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StringEnvelope'
              example:
                result: >-
                  [{"Identifier":null,"Message":"Cashbacks synced
                  successfully","IsError":false}]
                error: null
                timeGenerated: '2025-10-10T18:26:41.0936104Z'
                success: true
        '400':
          description: >-
            Lista vazia, mais de 500 itens (envelope padrão), OU falha de
            validação por item — nenhum de id/documentNumber/phoneNumber
            informado, documentNumber com dígito verificador de CPF/CNPJ
            inválido, value ou expiresAt ausente, ou expiresAt no passado (nesse
            caso retorna o formato bruto de ModelState do ASP.NET, não o
            envelope padrão).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StringEnvelope'
              example:
                result: null
                error:
                  message: Maximum 500 records per requisition are allowed
                  notifications: null
                  errorDetails: null
                timeGenerated: '2025-10-10T18:26:41.0936104Z'
                success: false
        '429':
          $ref: '#/components/responses/TooManyRequests'
components:
  schemas:
    CompleteCashbackRequest:
      type: object
      required:
        - customer
        - cashback
      properties:
        customer:
          $ref: '#/components/schemas/CustomerCashbackRequest'
        cashback:
          $ref: '#/components/schemas/CashbackRequest'
    StringEnvelope:
      type: object
      properties:
        result:
          type: string
          nullable: true
        error:
          $ref: '#/components/schemas/EnvelopeError'
        timeGenerated:
          type: string
          format: date-time
        success:
          type: boolean
    CustomerCashbackRequest:
      type: object
      description: Ao menos um de id, documentNumber ou phoneNumber é obrigatório.
      properties:
        id:
          type: string
        documentNumber:
          type: string
          description: >-
            CPF (11 dígitos) ou CNPJ (14 dígitos) — validado por dígito
            verificador real.
        phoneNumber:
          type: string
    CashbackRequest:
      type: object
      required:
        - value
        - expiresAt
      properties:
        value:
          type: number
          minimum: 0
          description: >-
            A mensagem de erro do sistema diz "maior que zero", mas o valor 0 é
            aceito na prática — só valores negativos são rejeitados.
        expiresAt:
          type: string
          format: date-time
          description: Não pode estar no passado (comparado em UTC).
    EnvelopeError:
      type: object
      nullable: true
      properties:
        message:
          type: string
        notifications:
          type: array
          nullable: true
          items:
            type: object
            properties:
              key:
                type: string
              message:
                type: string
        errorDetails:
          nullable: true
          description: Formato livre — string, objeto ou array dependendo do erro.
  responses:
    TooManyRequests:
      description: >-
        Mais de 60 requisições no último minuto para este token. Sem fila — o
        excedente é rejeitado na hora.
      content:
        application/json:
          schema:
            type: string
          example: To many requests, try again in 1 minutes.
  securitySchemes:
    Bearer:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: >-
        Token emitido por POST /authentication/users/accessToken. Envie no
        header Authorization como `Bearer <token>`. Válido por 6 horas.

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.