> ## 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.

# Avaliação de pedido

> Envie a nota da pesquisa de satisfação do cliente para até 500 pedidos por requisição

Envia avaliações de pedidos (nota, comentário) para a Repediu. Suporta até **500 avaliações por requisição** e é sempre processado de forma **assíncrona** — use [Status avaliação pedido](/envio-de-dados/status-avaliacao-pedido) com o `Batch id` retornado para acompanhar o processamento.

<Warning>
  Envie ao menos um de `saleId` ou `customerId` — os dois ausentes são rejeitados. `stars` deve ser um inteiro entre **1 e 5**. `externalId` é obrigatório e não pode ser vazio/espaços em branco.
</Warning>

<Info>
  `ratingDate` aceita hora UTC (sufixo `Z`) ou hora local **ingênua** (sem offset, ex.: `2025-09-01T16:04:00`). Um offset numérico explícito (ex.: `-03:00`) é **rejeitado** com uma mensagem específica — normalize a data antes de enviar.
</Info>

## 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 (ex.: `{"[0].Stars": ["Stars must be between 1 and 5"]}`) | Falha de validação por item: `stars` fora de 1–5, nem `saleId` nem `customerId`, `ratingDate` com offset, `externalId` vazio |

<Card title="Status avaliação pedido" icon="hourglass" href="/envio-de-dados/status-avaliacao-pedido">
  Acompanhe o processamento do lote enviado aqui.
</Card>


## OpenAPI

````yaml openapi-envio-de-dados.yaml POST /sale-ratings
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:
  /sale-ratings:
    post:
      tags:
        - Avaliações
      summary: Avaliação de pedido
      description: >-
        Envia até 500 avaliações por requisição. Sempre processado de forma
        assíncrona — use GET /sale-ratings/batch-status/{id} para acompanhar o
        lote.
      operationId: createSaleRatings
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: array
              maxItems: 500
              items:
                $ref: '#/components/schemas/SaleRatingRequest'
            example:
              - customerId: '242150'
                saleId: '1'
                stars: 5
                review: Ótimo atendimento, refeição muito boa!
                ratingDate: '2025-09-26T11:39:51Z'
                externalId: '126'
      responses:
        '200':
          description: Lote recebido para processamento.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StringEnvelope'
              example:
                result: >-
                  Sales ratings received. Batch id:
                  e0f104ab-0c47-4812-806c-53142984b6a4
                error: null
                timeGenerated: '2025-09-26T18:36:03.0791284Z'
                success: true
        '400':
          description: >-
            Lista vazia ou mais de 500 itens (retorna no envelope padrão), OU
            falha de validação por item — stars fora de 1-5, nem saleId nem
            customerId informado, ratingDate com offset numérico explícito, ou
            externalId em branco (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: Only 500 sale ratings per requisition are allowed
                  notifications: null
                  errorDetails: null
                timeGenerated: '2025-09-26T18:36:03.0791284Z'
                success: false
        '429':
          $ref: '#/components/responses/TooManyRequests'
components:
  schemas:
    SaleRatingRequest:
      type: object
      required:
        - stars
        - externalId
      properties:
        saleId:
          type: string
          description: saleId e/ou customerId — ao menos um dos dois é obrigatório.
        customerId:
          type: string
        stars:
          type: integer
          minimum: 1
          maximum: 5
        ratingDate:
          type: string
          format: date-time
          description: >-
            Envie hora UTC (sufixo Z) ou hora local ingênua (sem offset).
            Offsets numéricos explícitos (ex.: -03:00) são rejeitados.
        externalId:
          type: string
        review:
          type: string
    StringEnvelope:
      type: object
      properties:
        result:
          type: string
          nullable: true
        error:
          $ref: '#/components/schemas/EnvelopeError'
        timeGenerated:
          type: string
          format: date-time
        success:
          type: boolean
    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.