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

# Abre um atendimento

> Abre um atendimento aguardando a central escolher o prestador — esta chamada nunca aciona um prestador. Exige o cabeçalho Idempotency-Key: repetir a mesma chave com o mesmo corpo devolve o atendimento já criado (200), nunca um segundo atendimento.



## OpenAPI

````yaml /referencia/openapi.json post /v1/attendances
openapi: 3.0.0
info:
  title: Koolisys — API Pública
  description: >-
    Contrato da API pública de integração da Koolisys: atendimentos, catálogo de
    serviços, elegibilidade, cadastro e consulta de clientes e veículos e a
    própria contratante. Gerada a partir do código — rotas, DTOs de entrada,
    projeções de resposta e escopos declarados —, nunca mantida à mão.
  version: 1.0.0
  contact: {}
servers:
  - url: https://api-koolisys.eixoassistencia.com.br
    description: API pública da Koolisys
security: []
tags:
  - name: auth
    description: Emissão do token de curta duração a partir da chave de API
  - name: attendances
    description: Abertura, consulta e listagem de atendimentos
  - name: services
    description: Catálogo de serviços disponíveis
  - name: eligibility
    description: Consulta de elegibilidade de cliente e veículo
  - name: customers
    description: Cadastro, consulta, busca e listagem de clientes da contratante
  - name: vehicles
    description: Consulta e listagem de veículos da contratante
  - name: company
    description: 'A própria contratante: contratos vigentes e planos disponíveis'
  - name: meta
    description: A própria especificação
paths:
  /v1/attendances:
    post:
      tags:
        - attendances
      summary: Abre um atendimento
      description: >-
        Abre um atendimento aguardando a central escolher o prestador — esta
        chamada nunca aciona um prestador. Exige o cabeçalho Idempotency-Key:
        repetir a mesma chave com o mesmo corpo devolve o atendimento já criado
        (200), nunca um segundo atendimento.
      operationId: PublicAttendancesController_create
      parameters:
        - name: Idempotency-Key
          in: header
          description: Identificador único da tentativa de criação, gerado pelo integrador
          required: true
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreatePublicAttendanceRequestDto'
            examples:
              default:
                value:
                  attendanceTypeId: 17
                  serviceId: 7
                  attendanceTypeDetail: Pane seca no estacionamento
                  customerDocument: '12345678900'
                  vehiclePlate: ABC1D23
                  origin:
                    addressLine: Av. Paulista, 1000
                    number: '1000'
                    complement: Sala 12
                    district: Bela Vista
                    city: São Paulo
                    state: SP
                    zipCode: 01310-100
                    latitude: -23.561414
                    longitude: -46.655881
                    reference: Em frente ao metrô Trianon-MASP
                  destination:
                    addressLine: Rua Augusta, 500
                    city: São Paulo
                    state: SP
                    latitude: -23.554944
                    longitude: -46.661236
                  notes: Cliente aguarda no local, veículo não sai do lugar.
      responses:
        '200':
          description: Repetição idempotente — devolve o mesmo atendimento já criado
          content:
            application/json:
              schema:
                type: object
                required:
                  - data
                  - meta
                  - errors
                properties:
                  data:
                    $ref: '#/components/schemas/PublicAttendanceDetail'
                  meta:
                    type: object
                    description: Metadados da resposta — vazio nesta operação.
                    properties: {}
                  errors:
                    type: array
                    description: Sempre vazio numa resposta de sucesso.
                    items:
                      type: object
                    maxItems: 0
              example:
                data:
                  id: 12345
                  number: AT-2026-000123
                  status: IN_PROGRESS
                  customerDocument: '12345678900'
                  vehiclePlate: ABC1D23
                  attendanceTypeId: 17
                  attendanceTypeDetail: Pane seca no estacionamento
                  notes: Cliente aguarda no local, veículo não sai do lugar.
                  milestones:
                    openedAt: '2026-08-20T13:05:00.000Z'
                    providerDispatchedAt: '2026-08-20T13:10:00.000Z'
                    providerEnRouteAt: '2026-08-20T13:12:00.000Z'
                    providerArrivedAt: '2026-08-20T13:40:00.000Z'
                    serviceStartedAt: '2026-08-20T13:42:00.000Z'
                    concludedAt: null
                    canceledAt: null
                  createdAt: '2026-08-20T13:00:00.000Z'
                  amountCents: 15000
                  distanceKm: 12.3
                  location:
                    addressLine: Av. Paulista, 1000
                    city: São Paulo
                    state: SP
                    latitude: -23.561414
                    longitude: -46.655881
                  provider:
                    id: 318
                    status: ACCEPTED
                    dispatchedAt: '2026-08-20T13:10:00.000Z'
                    etaAt: '2026-08-20T13:35:00.000Z'
                  history:
                    - type: ATTENDANCE_OPENED
                      summary: Atendimento aberto pela API pública
                      occurredAt: '2026-08-20T13:00:00.000Z'
                    - type: PROVIDER_DISPATCHED
                      summary: Prestador acionado
                      occurredAt: '2026-08-20T13:10:00.000Z'
                meta: {}
                errors: []
        '201':
          description: Atendimento criado
          content:
            application/json:
              schema:
                type: object
                required:
                  - data
                  - meta
                  - errors
                properties:
                  data:
                    $ref: '#/components/schemas/PublicAttendanceDetail'
                  meta:
                    type: object
                    description: Metadados da resposta — vazio nesta operação.
                    properties: {}
                  errors:
                    type: array
                    description: Sempre vazio numa resposta de sucesso.
                    items:
                      type: object
                    maxItems: 0
              example:
                data:
                  id: 12345
                  number: AT-2026-000123
                  status: IN_PROGRESS
                  customerDocument: '12345678900'
                  vehiclePlate: ABC1D23
                  attendanceTypeId: 17
                  attendanceTypeDetail: Pane seca no estacionamento
                  notes: Cliente aguarda no local, veículo não sai do lugar.
                  milestones:
                    openedAt: '2026-08-20T13:05:00.000Z'
                    providerDispatchedAt: '2026-08-20T13:10:00.000Z'
                    providerEnRouteAt: '2026-08-20T13:12:00.000Z'
                    providerArrivedAt: '2026-08-20T13:40:00.000Z'
                    serviceStartedAt: '2026-08-20T13:42:00.000Z'
                    concludedAt: null
                    canceledAt: null
                  createdAt: '2026-08-20T13:00:00.000Z'
                  amountCents: 15000
                  distanceKm: 12.3
                  location:
                    addressLine: Av. Paulista, 1000
                    city: São Paulo
                    state: SP
                    latitude: -23.561414
                    longitude: -46.655881
                  provider:
                    id: 318
                    status: ACCEPTED
                    dispatchedAt: '2026-08-20T13:10:00.000Z'
                    etaAt: '2026-08-20T13:35:00.000Z'
                  history:
                    - type: ATTENDANCE_OPENED
                      summary: Atendimento aberto pela API pública
                      occurredAt: '2026-08-20T13:00:00.000Z'
                    - type: PROVIDER_DISPATCHED
                      summary: Prestador acionado
                      occurredAt: '2026-08-20T13:10:00.000Z'
                meta: {}
                errors: []
        '400':
          description: VALIDATION_ERROR
          content:
            application/json:
              example:
                data: null
                errors:
                  - code: VALIDATION_ERROR
                    message: 'customerDocument: Documento do cliente é obrigatório'
                    field: customerDocument
        '401':
          description: INVALID_TOKEN
          content:
            application/json:
              example:
                data: null
                errors:
                  - code: INVALID_TOKEN
                    message: Token inválido.
        '403':
          description: INSUFFICIENT_SCOPE
          content:
            application/json:
              example:
                data: null
                errors:
                  - code: INSUFFICIENT_SCOPE
                    message: Escopo insuficiente para este endpoint.
                    details:
                      requiredScope: attendances.read
        '404':
          description: NOT_FOUND
          content:
            application/json:
              example:
                data: null
                errors:
                  - code: NOT_FOUND
                    message: Attendance not found
        '409':
          description: IDEMPOTENCY_CONFLICT
          content:
            application/json:
              example:
                data: null
                errors:
                  - code: IDEMPOTENCY_CONFLICT
                    message: >-
                      Chave de idempotência já usada com um corpo de requisição
                      diferente.
        '422':
          description: NOT_COVERED
          content:
            application/json:
              example:
                data: null
                errors:
                  - code: NOT_COVERED
                    message: Cliente sem cobertura para este serviço
                    details:
                      reason: PLAN_UNAVAILABLE
        '429':
          description: RATE_LIMITED
          content:
            application/json:
              example:
                data: null
                errors:
                  - code: RATE_LIMITED
                    message: Limite de requisições excedido.
                    details:
                      retryAfterSeconds: 42
        '503':
          description: FEATURE_DISABLED
          content:
            application/json:
              example:
                data: null
                errors:
                  - code: FEATURE_DISABLED
                    message: 'Feature is disabled: public_api.enabled'
      security:
        - apiToken: []
components:
  schemas:
    CreatePublicAttendanceRequestDto:
      type: object
      properties:
        attendanceTypeId:
          type: number
          example: 12345
          description: Tipo de atendimento (id do catálogo — ver GET /v1/attendance-types)
        serviceId:
          type: number
          example: 7
          description: >-
            Serviço do catálogo (ver GET /v1/services) — precisa pertencer ao
            tipo de atendimento escolhido (GET /v1/attendance-types lista os
            serviços de cada tipo)
        attendanceTypeDetail:
          type: string
          example: Pane seca no estacionamento
          description: Detalhe obrigatório quando o tipo de atendimento exige justificativa
        customerDocument:
          type: string
          example: '12345678900'
          description: CPF ou CNPJ, só dígitos
        vehiclePlate:
          type: string
          example: ABC1D23
        origin:
          description: Origem do atendimento
          allOf:
            - $ref: '#/components/schemas/CreatePublicAttendanceLocationDto'
        destination:
          description: >-
            Destino do atendimento — obrigatório apenas quando o serviço exige
            destino
          allOf:
            - $ref: '#/components/schemas/CreatePublicAttendanceLocationDto'
        notes:
          type: string
          example: Cliente aguarda no local, veículo não sai do lugar.
      required:
        - attendanceTypeId
        - serviceId
        - customerDocument
        - vehiclePlate
        - origin
    PublicAttendanceDetail:
      type: object
      properties:
        id:
          type: integer
          format: int32
          description: Identificador do atendimento — use em GET /v1/attendances/{id}.
        number:
          type: string
          description: Número legível do atendimento, único na plataforma.
        status:
          type: string
          enum:
            - DRAFT
            - OPEN
            - SEARCHING_PROVIDER
            - PROVIDER_ASSIGNED
            - PROVIDER_ON_ROUTE
            - IN_PROGRESS
            - COMPLETED
            - CANCELED
          description: >-
            Situação do atendimento: OPEN (aberto, aguardando a central),
            SEARCHING_PROVIDER (buscando prestador), PROVIDER_ASSIGNED
            (prestador definido), PROVIDER_ON_ROUTE (prestador a caminho),
            IN_PROGRESS (em execução), COMPLETED (concluído) ou CANCELED
            (cancelado). DRAFT (rascunho) existe no vocabulário mas nunca
            aparece na listagem.
        customerDocument:
          type: string
          nullable: true
          description: CPF ou CNPJ do cliente, só dígitos, como registrado na abertura.
        vehiclePlate:
          type: string
          nullable: true
          description: Placa do veículo atendido, como registrada na abertura.
        attendanceTypeId:
          type: integer
          format: int32
          nullable: true
          description: Identificador do motivo de atendimento informado na abertura.
        attendanceTypeDetail:
          type: string
          nullable: true
          description: Detalhe livre do motivo, informado pelo integrador na abertura.
        notes:
          type: string
          nullable: true
          description: Observações informadas na abertura.
        milestones:
          description: Marcos da linha do tempo do atendimento.
          allOf:
            - $ref: '#/components/schemas/PublicAttendanceMilestones'
        createdAt:
          type: string
          format: date-time
          description: Quando o registro foi criado.
        amountCents:
          type: integer
          format: int32
          nullable: true
          description: >-
            Valor do acionamento mais recente, em centavos (ex.: 15000 = R$
            150,00). Reflete o total já concluído quando o atendimento está
            COMPLETED — não é recalculado depois. Nulo enquanto nenhum prestador
            foi acionado.
        distanceKm:
          type: number
          format: double
          nullable: true
          description: >-
            Distância percorrida no acionamento mais recente, em quilômetros.
            Congelada no momento do acionamento — nunca recalculada depois,
            mesmo que o endereço de origem/destino seja corrigido. Nula quando o
            prestador é avulso (sem rota calculada) ou enquanto nenhum prestador
            foi acionado.
        location:
          nullable: true
          description: Origem do atendimento. Nula quando ainda não há endereço definido.
          type: object
          allOf:
            - $ref: '#/components/schemas/PublicAttendanceLocation'
        provider:
          nullable: true
          description: >-
            Acionamento atual. Nulo enquanto a central não acionou nenhum
            prestador.
          type: object
          allOf:
            - $ref: '#/components/schemas/PublicAttendanceProvider'
        history:
          description: >-
            Linha do tempo do atendimento, do evento mais antigo ao mais
            recente.
          type: array
          items:
            $ref: '#/components/schemas/PublicAttendanceHistoryItem'
      required:
        - id
        - number
        - status
        - customerDocument
        - vehiclePlate
        - attendanceTypeId
        - attendanceTypeDetail
        - notes
        - milestones
        - createdAt
        - amountCents
        - distanceKm
        - location
        - provider
        - history
    CreatePublicAttendanceLocationDto:
      type: object
      properties:
        addressLine:
          type: string
          example: Av. Paulista, 1000
          description: Logradouro
        number:
          type: string
          example: '1000'
        complement:
          type: string
          example: Sala 12
        district:
          type: string
          example: Bela Vista
        city:
          type: string
          example: São Paulo
        state:
          type: string
          example: SP
          description: UF, duas letras maiúsculas
        zipCode:
          type: string
          example: 01310-100
        latitude:
          type: number
          example: -23.561414
        longitude:
          type: number
          example: -46.655881
        reference:
          type: string
          example: Em frente ao metrô Trianon-MASP
      required:
        - addressLine
        - city
        - state
        - latitude
        - longitude
    PublicAttendanceMilestones:
      type: object
      properties:
        openedAt:
          type: string
          format: date-time
          nullable: true
          description: Quando o atendimento foi aberto (ISO 8601, UTC).
        providerDispatchedAt:
          type: string
          format: date-time
          nullable: true
          description: >-
            Quando a central acionou um prestador. Nulo enquanto nenhum foi
            acionado.
        providerEnRouteAt:
          type: string
          format: date-time
          nullable: true
          description: Quando o prestador saiu em direção ao cliente.
        providerArrivedAt:
          type: string
          format: date-time
          nullable: true
          description: Quando o prestador chegou ao local.
        serviceStartedAt:
          type: string
          format: date-time
          nullable: true
          description: Quando a execução do serviço começou.
        concludedAt:
          type: string
          format: date-time
          nullable: true
          description: >-
            Quando o atendimento foi concluído. Nulo enquanto estiver em
            andamento.
        canceledAt:
          type: string
          format: date-time
          nullable: true
          description: Quando o atendimento foi cancelado. Nulo se não foi cancelado.
      required:
        - openedAt
        - providerDispatchedAt
        - providerEnRouteAt
        - providerArrivedAt
        - serviceStartedAt
        - concludedAt
        - canceledAt
    PublicAttendanceLocation:
      type: object
      properties:
        addressLine:
          type: string
          description: Logradouro da origem do atendimento.
        city:
          type: string
          description: Cidade.
        state:
          type: string
          description: UF, duas letras maiúsculas.
        latitude:
          type: number
          format: double
          description: Latitude em graus decimais.
        longitude:
          type: number
          format: double
          description: Longitude em graus decimais.
      required:
        - addressLine
        - city
        - state
        - latitude
        - longitude
    PublicAttendanceProvider:
      type: object
      properties:
        id:
          type: integer
          format: int32
          nullable: true
          description: >-
            Identificador do prestador cadastrado. Nulo quando a central acionou
            um prestador avulso.
        status:
          type: string
          enum:
            - DISPATCHED
            - ACCEPTED
            - REFUSED
            - NOT_FOUND
            - REPLACED
            - COMPLETED
          description: >-
            Situação do acionamento atual: DISPATCHED (acionado, aguardando
            resposta), ACCEPTED (aceito), REFUSED (recusado), NOT_FOUND (não
            localizado), REPLACED (substituído) ou COMPLETED (concluído).
        dispatchedAt:
          type: string
          format: date-time
          description: Quando este prestador foi acionado.
        etaAt:
          type: string
          format: date-time
          nullable: true
          description: Previsão de chegada do prestador. Nula quando ainda não estimada.
      required:
        - id
        - status
        - dispatchedAt
        - etaAt
    PublicAttendanceHistoryItem:
      type: object
      properties:
        type:
          type: string
          enum:
            - ATTENDANCE_OPENED
            - STATUS_CHANGED
            - ASSIGNED
            - TAKEN
            - PROVIDER_SELECTED
            - PROVIDER_DISPATCHED
            - PROVIDER_DISPATCH_ENDED
            - DISPATCH_VALUE_EDITED
            - DISPATCH_EN_ROUTE
            - DISPATCH_ARRIVED
            - PROVIDER_ACCESS_RENEWED
            - DISPATCH_COMPLETED_BY_PROVIDER
            - PLATE_MISMATCH_CONFIRMED
            - LOCATION_SET
            - LOCATION_CHANGED
            - ORIGIN_DIVERGED_AFTER_DISPATCH
            - CANCELED
            - SUB_ATTENDANCE_CREATED
            - DOCUMENT_REVEALED
            - FINANCE_ADJUSTMENT_ADDED
            - FINANCE_RECORD_SETTLED
            - ATTENDANCE_SLA_CRITICAL
          description: Tipo do evento registrado na linha do tempo do atendimento.
        summary:
          type: string
          description: Resumo legível do evento, em português.
        occurredAt:
          type: string
          format: date-time
          description: Quando o evento aconteceu.
      required:
        - type
        - summary
        - occurredAt
  securitySchemes:
    apiToken:
      scheme: bearer
      bearerFormat: JWT
      type: http
      description: >-
        Token de curta duração devolvido por POST /v1/auth/token, carregando os
        escopos concedidos à chave — exigido por todo endpoint de dados.

````

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