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

# Criar tarifa da categoria

> Cria a tarifa padrão ou uma tarifa extra da categoria. A tarifa começa a valer na hora.

### Tarifa padrão × tarifa extra
- A **primeira** tarifa da categoria é a **padrão**: é criada **sem** `horarios` e vale o tempo todo.
- Com a padrão já criada, toda tarifa nova é **extra** e **exige** `horarios`.
- A categoria aceita no máximo **8** tarifas vigentes: a padrão e mais 7 extras.

### Método de cálculo (`metodo_calculo_tarifa`)

| Método | Campos aceitos | Obrigatórios |
|---|---|---|
| `D` duração | `valor_bandeirada`, `valor_km`, `valor_minuto`, `valor_minimo`, `valor_parada_adicional`, `habilitar_limite_distancia` | `valor_bandeirada`, `valor_km`, `valor_minuto`, `valor_minimo` |
| `P` hora parada | `valor_bandeirada`, `valor_km`, `valor_hora_parada`, `valor_minimo`, `valor_parada_adicional` | `valor_bandeirada`, `valor_km`, `valor_hora_parada`, `valor_minimo` |
| `V` km variável | `valor_bandeirada`, `valor_minuto`, `valor_minimo`, `valor_parada_adicional`, `valores_tabelados`, `habilitar_limite_distancia` | `valor_bandeirada`, `valor_minuto`, `valor_minimo` e `valores_tabelados` com a faixa `a_partir_de` |
| `T` tabelado | `valor_parada_adicional`, `valores_tabelados` | `valores_tabelados` (sem a faixa `a_partir_de`) |
| `B` por bairro | `valores_tabelados` | `valores_tabelados` com a faixa `a_partir_de` |

Os obrigatórios são os mesmos que o painel exige ao salvar: só o campo vazio é recusado, e zero é aceito. Os demais valores podem ficar vazios. Em todos os métodos também valem `nome`, `horarios` e `habilitar_taxa_deslocamento`.

Restrições de bandeira (400 quando não atendidas):
- `V` exige o app de motorista da bandeira (ou da bandeira agrupadora) na versão **14.4** ou superior;
- `B` só em bandeira que faz **somente entregas**;
- `P` não é aceito em bandeira com cálculo de corrida **pré-fixado**.

Uma tarifa que já usa `V`, `B` ou `P` pode continuar com o mesmo método mesmo sem atender à restrição.

### Campos condicionais
- `limite_distancia_maxima` (maior que zero): só com `habilitar_limite_distancia: true` (métodos `D` e `V`). No `V`, precisa ser maior que a maior faixa de `valores_tabelados`.
- Bônus de deslocamento: `habilitar_taxa_deslocamento: true` exige `taxa_deslocamento_valor_km` (maior que zero), `taxa_deslocamento_km_minimo` (aceita zero) e `taxa_deslocamento_valor_maximo` (maior que zero). Com `false`, os três são limpos e não são aceitos.
- Retorno (`tipo_cobranca_retorno`): só em bandeira que faz entregas. `T` pelo cálculo da tarifa, `N` não cobrar, `F` valor fixo e `K` por km percorrido (ambos exigem `valor_retorno_adicional` maior que zero), `P` porcentagem (exige `taxa_retorno_porcentagem` maior que zero, até `999.99`). Sem a funcionalidade de taxa de retorno na bandeira, só `T` é aceito.
- `calcular_individual_por_entrega`: só em bandeira que faz entregas, com o cálculo individual por entrega liberado, e em método diferente de `B`. Com `true`, a parada adicional não é cobrada (`valor_parada_adicional` fica vazio).

Campo enviado que não se aplica ao método ou à operação da bandeira responde **400** com a mensagem `'<campo>': Não se aplica ao método de cálculo da tarifa ou à operação da bandeira.` Campos que não fazem parte do contrato (como `id`, `categoria_id` ou `data_inicio`) são ignorados.

### Formatos
- **Valores**: número JSON ou texto, não negativo, com **ponto** como separador e até **2 casas decimais** (`"5.90"` ou `5.9`), nos mesmos limites do painel: até 8 dígitos inteiros nos valores da tarifa, 5 na taxa de deslocamento, 7 em `limite_distancia_maxima` e 11 no valor das faixas. `"5,90"` e `"5.999"` respondem 400. Na resposta, os valores vêm sempre como texto (`"5.90"`). `null` limpa o campo (e a obrigatoriedade do método continua valendo).
- **Booleanos** (`habilitar_*`, `calcular_individual_por_entrega`): `true` ou `false`.
- **`nome`**: texto de 1 a 20 caracteres, sem `<`, `>`, `"`, `'`, `&`, `\`, emoji, quebra de linha e outros caracteres de controle (400). Omitido, vale "Tarifa padrão" ou "Tarifa extra N", como no painel.
- **`horarios`**: lista de até **36** horários `{dia_semana, hora_inicio, hora_fim}` por tarifa, com `dia_semana` de `1` (domingo) a `7` (sábado) e horas em `HH:MM`, **sem segundos** (`18:00:00` responde 400), `hora_fim` maior que `hora_inicio` e `24:00` para ir até o fim do dia. `hora_fim` é o fim do bloco, como no calendário do painel: `08:00`–`12:00` e `12:00`–`18:00` no mesmo dia **não** se sobrepõem. Na resposta, os horários vêm no mesmo formato. Sobreposição dentro do próprio payload responde 400; com outra tarifa vigente da categoria, 409.
- **`valores_tabelados`**: lista de faixas `{distancia_km, valor}` (ambos maiores que zero, sem repetir distância) e no máximo uma faixa `{a_partir_de: true, valor}`, sem `distancia_km`, que vale acima da maior distância. Até **100** faixas de distância. A ordem é definida pelo servidor (distância crescente, `a_partir_de` por último).

### Alterações simultâneas
A criação de tarifa e a troca de horários de uma tarifa (PUT) travam a categoria enquanto gravam. Uma segunda chamada desse tipo para a mesma categoria, feita ao mesmo tempo, responde **409** com `Outra alteração de tarifa desta categoria está em andamento. Tente novamente em instantes.` e não grava nada: aguarde a anterior terminar e repita a chamada.

### Resposta
Devolve a tarifa criada no mesmo formato da listagem (só os campos aplicáveis).

### Status de erro
| Status | Quando |
|---|---|
| 400 | Payload inválido (formato, campo obrigatório do método, campo não aplicável) ou configuração que a bandeira não pode usar |
| 401 | Gestor não autenticado no header `Authorization` (Basic) |
| 403 | Gestor sem a permissão de API de categoria (`api_integracao_categoria`) no cargo da bandeira |
| 404 | Categoria ou tarifa inexistente, ou de outra bandeira |
| 409 | Conflito com as tarifas vigentes da categoria, ou outra alteração de tarifa da mesma categoria em andamento (detalhes no exemplo de cada resposta) |

Requer Api-Key (bandeira) + autenticação HTTP Basic de um gestor ativo da bandeira com a permissão de API de categoria (`api_integracao_categoria`) no cargo; sem ela, responde 403.

<Info>
  A primeira tarifa da categoria é a **tarifa padrão** e deve ser criada **sem** `horarios`. As seguintes são **tarifas extras** e exigem `horarios`. A categoria aceita até 8 tarifas vigentes (a padrão e mais 7 extras).
</Info>


## OpenAPI

````yaml pages/v2/openapi-entregas.json POST /configuracoes/categorias/{id}/tarifas
openapi: 3.1.0
info:
  title: API de Integração
  description: API de Integração v2 - Entregas
  license:
    name: MIT
  version: 2.0.0
servers:
  - url: https://api-vendas.taximachine.com.br/api/v2/integracao
  - url: https://api.taximachine.com.br/api/v2/integracao
security:
  - basicAuth: []
    ApiKeyAuth: []
paths:
  /configuracoes/categorias/{id}/tarifas:
    post:
      summary: Criar tarifa da categoria
      description: >-
        Cria a tarifa padrão ou uma tarifa extra da categoria. A tarifa começa a
        valer na hora.


        ### Tarifa padrão × tarifa extra

        - A **primeira** tarifa da categoria é a **padrão**: é criada **sem**
        `horarios` e vale o tempo todo.

        - Com a padrão já criada, toda tarifa nova é **extra** e **exige**
        `horarios`.

        - A categoria aceita no máximo **8** tarifas vigentes: a padrão e mais 7
        extras.


        ### Método de cálculo (`metodo_calculo_tarifa`)


        | Método | Campos aceitos | Obrigatórios |

        |---|---|---|

        | `D` duração | `valor_bandeirada`, `valor_km`, `valor_minuto`,
        `valor_minimo`, `valor_parada_adicional`, `habilitar_limite_distancia` |
        `valor_bandeirada`, `valor_km`, `valor_minuto`, `valor_minimo` |

        | `P` hora parada | `valor_bandeirada`, `valor_km`, `valor_hora_parada`,
        `valor_minimo`, `valor_parada_adicional` | `valor_bandeirada`,
        `valor_km`, `valor_hora_parada`, `valor_minimo` |

        | `V` km variável | `valor_bandeirada`, `valor_minuto`, `valor_minimo`,
        `valor_parada_adicional`, `valores_tabelados`,
        `habilitar_limite_distancia` | `valor_bandeirada`, `valor_minuto`,
        `valor_minimo` e `valores_tabelados` com a faixa `a_partir_de` |

        | `T` tabelado | `valor_parada_adicional`, `valores_tabelados` |
        `valores_tabelados` (sem a faixa `a_partir_de`) |

        | `B` por bairro | `valores_tabelados` | `valores_tabelados` com a faixa
        `a_partir_de` |


        Os obrigatórios são os mesmos que o painel exige ao salvar: só o campo
        vazio é recusado, e zero é aceito. Os demais valores podem ficar vazios.
        Em todos os métodos também valem `nome`, `horarios` e
        `habilitar_taxa_deslocamento`.


        Restrições de bandeira (400 quando não atendidas):

        - `V` exige o app de motorista da bandeira (ou da bandeira agrupadora)
        na versão **14.4** ou superior;

        - `B` só em bandeira que faz **somente entregas**;

        - `P` não é aceito em bandeira com cálculo de corrida **pré-fixado**.


        Uma tarifa que já usa `V`, `B` ou `P` pode continuar com o mesmo método
        mesmo sem atender à restrição.


        ### Campos condicionais

        - `limite_distancia_maxima` (maior que zero): só com
        `habilitar_limite_distancia: true` (métodos `D` e `V`). No `V`, precisa
        ser maior que a maior faixa de `valores_tabelados`.

        - Bônus de deslocamento: `habilitar_taxa_deslocamento: true` exige
        `taxa_deslocamento_valor_km` (maior que zero),
        `taxa_deslocamento_km_minimo` (aceita zero) e
        `taxa_deslocamento_valor_maximo` (maior que zero). Com `false`, os três
        são limpos e não são aceitos.

        - Retorno (`tipo_cobranca_retorno`): só em bandeira que faz entregas.
        `T` pelo cálculo da tarifa, `N` não cobrar, `F` valor fixo e `K` por km
        percorrido (ambos exigem `valor_retorno_adicional` maior que zero), `P`
        porcentagem (exige `taxa_retorno_porcentagem` maior que zero, até
        `999.99`). Sem a funcionalidade de taxa de retorno na bandeira, só `T` é
        aceito.

        - `calcular_individual_por_entrega`: só em bandeira que faz entregas,
        com o cálculo individual por entrega liberado, e em método diferente de
        `B`. Com `true`, a parada adicional não é cobrada
        (`valor_parada_adicional` fica vazio).


        Campo enviado que não se aplica ao método ou à operação da bandeira
        responde **400** com a mensagem `'<campo>': Não se aplica ao método de
        cálculo da tarifa ou à operação da bandeira.` Campos que não fazem parte
        do contrato (como `id`, `categoria_id` ou `data_inicio`) são ignorados.


        ### Formatos

        - **Valores**: número JSON ou texto, não negativo, com **ponto** como
        separador e até **2 casas decimais** (`"5.90"` ou `5.9`), nos mesmos
        limites do painel: até 8 dígitos inteiros nos valores da tarifa, 5 na
        taxa de deslocamento, 7 em `limite_distancia_maxima` e 11 no valor das
        faixas. `"5,90"` e `"5.999"` respondem 400. Na resposta, os valores vêm
        sempre como texto (`"5.90"`). `null` limpa o campo (e a obrigatoriedade
        do método continua valendo).

        - **Booleanos** (`habilitar_*`, `calcular_individual_por_entrega`):
        `true` ou `false`.

        - **`nome`**: texto de 1 a 20 caracteres, sem `<`, `>`, `"`, `'`, `&`,
        `\`, emoji, quebra de linha e outros caracteres de controle (400).
        Omitido, vale "Tarifa padrão" ou "Tarifa extra N", como no painel.

        - **`horarios`**: lista de até **36** horários `{dia_semana,
        hora_inicio, hora_fim}` por tarifa, com `dia_semana` de `1` (domingo) a
        `7` (sábado) e horas em `HH:MM`, **sem segundos** (`18:00:00` responde
        400), `hora_fim` maior que `hora_inicio` e `24:00` para ir até o fim do
        dia. `hora_fim` é o fim do bloco, como no calendário do painel:
        `08:00`–`12:00` e `12:00`–`18:00` no mesmo dia **não** se sobrepõem. Na
        resposta, os horários vêm no mesmo formato. Sobreposição dentro do
        próprio payload responde 400; com outra tarifa vigente da categoria,
        409.

        - **`valores_tabelados`**: lista de faixas `{distancia_km, valor}`
        (ambos maiores que zero, sem repetir distância) e no máximo uma faixa
        `{a_partir_de: true, valor}`, sem `distancia_km`, que vale acima da
        maior distância. Até **100** faixas de distância. A ordem é definida
        pelo servidor (distância crescente, `a_partir_de` por último).


        ### Alterações simultâneas

        A criação de tarifa e a troca de horários de uma tarifa (PUT) travam a
        categoria enquanto gravam. Uma segunda chamada desse tipo para a mesma
        categoria, feita ao mesmo tempo, responde **409** com `Outra alteração
        de tarifa desta categoria está em andamento. Tente novamente em
        instantes.` e não grava nada: aguarde a anterior terminar e repita a
        chamada.


        ### Resposta

        Devolve a tarifa criada no mesmo formato da listagem (só os campos
        aplicáveis).


        ### Status de erro

        | Status | Quando |

        |---|---|

        | 400 | Payload inválido (formato, campo obrigatório do método, campo
        não aplicável) ou configuração que a bandeira não pode usar |

        | 401 | Gestor não autenticado no header `Authorization` (Basic) |

        | 403 | Gestor sem a permissão de API de categoria
        (`api_integracao_categoria`) no cargo da bandeira |

        | 404 | Categoria ou tarifa inexistente, ou de outra bandeira |

        | 409 | Conflito com as tarifas vigentes da categoria, ou outra
        alteração de tarifa da mesma categoria em andamento (detalhes no exemplo
        de cada resposta) |


        Requer Api-Key (bandeira) + autenticação HTTP Basic de um gestor ativo
        da bandeira com a permissão de API de categoria
        (`api_integracao_categoria`) no cargo; sem ela, responde 403.
      parameters:
        - name: id
          in: path
          required: true
          description: Id da categoria. Deve pertencer à central autenticada.
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - metodo_calculo_tarifa
              properties:
                nome:
                  type: string
                  minLength: 1
                  maxLength: 20
                  description: >-
                    Nome da tarifa (1 a 20 caracteres, sem `<`, `>`, `"`, `'`,
                    `&`, `\`, emoji e quebra de linha). Omitido, vale "Tarifa
                    padrão" ou "Tarifa extra N".
                metodo_calculo_tarifa:
                  type: string
                  enum:
                    - D
                    - P
                    - T
                    - V
                    - B
                  description: >-
                    Método de cálculo: `D` duração, `P` hora parada, `T`
                    tabelado, `V` km variável, `B` por bairro. Obrigatório.
                valor_bandeirada:
                  type:
                    - string
                    - number
                    - 'null'
                  description: Bandeirada. Métodos `D`, `P` e `V` (obrigatório).
                  example: '5.90'
                valor_km:
                  type:
                    - string
                    - number
                    - 'null'
                  description: Valor por km. Métodos `D` e `P` (obrigatório).
                  example: '5.90'
                valor_minuto:
                  type:
                    - string
                    - number
                    - 'null'
                  description: Valor por minuto. Métodos `D` e `V` (obrigatório).
                  example: '5.90'
                valor_hora_parada:
                  type:
                    - string
                    - number
                    - 'null'
                  description: Valor da hora parada. Método `P` (obrigatório).
                  example: '5.90'
                valor_minimo:
                  type:
                    - string
                    - number
                    - 'null'
                  description: >-
                    Valor mínimo da corrida. Métodos `D`, `P` e `V`
                    (obrigatório).
                  example: '5.90'
                valor_parada_adicional:
                  type:
                    - string
                    - number
                    - 'null'
                  description: Valor por parada adicional. Métodos `D`, `P`, `V` e `T`.
                  example: '5.90'
                valores_tabelados:
                  type: array
                  maxItems: 101
                  items:
                    type: object
                    required:
                      - valor
                    properties:
                      distancia_km:
                        type:
                          - string
                          - number
                          - 'null'
                        description: >-
                          Distância da faixa em km (maior que zero). Não
                          informar na faixa `a_partir_de`.
                        example: '5.00'
                      a_partir_de:
                        type: boolean
                        description: >-
                          `true` na faixa que vale acima da maior distância (no
                          máximo uma). Obrigatória em `V` e `B`; não aceita em
                          `T`.
                      valor:
                        type:
                          - string
                          - number
                        description: Valor da faixa (maior que zero).
                        example: '15.00'
                  description: >-
                    Faixas de distância. Métodos `T`, `V` e `B` (obrigatório).
                    Quando enviada, substitui a lista inteira.
                habilitar_limite_distancia:
                  type: boolean
                  description: >-
                    Liga o limite de distância. Métodos `D` e `V`. `false` limpa
                    `limite_distancia_maxima`.
                limite_distancia_maxima:
                  type:
                    - string
                    - number
                    - 'null'
                  description: >-
                    Distância máxima em km (maior que zero). Só com
                    `habilitar_limite_distancia: true`; no `V`, maior que a
                    maior faixa.
                  example: '5.90'
                habilitar_taxa_deslocamento:
                  type: boolean
                  description: >-
                    Liga o bônus de deslocamento. `false` limpa os três campos
                    do bônus.
                taxa_deslocamento_valor_km:
                  type:
                    - string
                    - number
                    - 'null'
                  description: >-
                    Bônus: valor por km (maior que zero). Só com
                    `habilitar_taxa_deslocamento: true`.
                  example: '5.90'
                taxa_deslocamento_km_minimo:
                  type:
                    - string
                    - number
                    - 'null'
                  description: >-
                    Bônus: km mínimo (aceita zero). Só com
                    `habilitar_taxa_deslocamento: true`.
                  example: '5.90'
                taxa_deslocamento_valor_maximo:
                  type:
                    - string
                    - number
                    - 'null'
                  description: >-
                    Bônus: valor máximo (maior que zero). Só com
                    `habilitar_taxa_deslocamento: true`.
                  example: '5.90'
                tipo_cobranca_retorno:
                  type: string
                  enum:
                    - T
                    - 'N'
                    - F
                    - K
                    - P
                  description: >-
                    Cobrança do retorno, só em bandeira que faz entregas: `T`
                    pelo cálculo da tarifa, `N` não cobrar, `F` valor fixo, `K`
                    por km percorrido, `P` porcentagem. Sem a funcionalidade de
                    taxa de retorno, só `T`.
                valor_retorno_adicional:
                  type:
                    - string
                    - number
                    - 'null'
                  description: >-
                    Valor do retorno (maior que zero). Só com
                    `tipo_cobranca_retorno` `F` ou `K`.
                  example: '5.90'
                taxa_retorno_porcentagem:
                  type:
                    - string
                    - number
                    - 'null'
                  description: >-
                    Percentual do retorno (maior que zero, até `999.99`). Só com
                    `tipo_cobranca_retorno` `P`.
                  example: '5.90'
                calcular_individual_por_entrega:
                  type: boolean
                  description: >-
                    Calcula o valor de cada entrega separadamente. Só em
                    bandeira que faz entregas com o cálculo individual liberado,
                    e método diferente de `B`.
                horarios:
                  type:
                    - array
                    - 'null'
                  items:
                    type: object
                    required:
                      - dia_semana
                      - hora_inicio
                      - hora_fim
                    properties:
                      dia_semana:
                        type: integer
                        minimum: 1
                        maximum: 7
                        description: 1 (domingo) a 7 (sábado).
                      hora_inicio:
                        type: string
                        description: '`HH:MM`, sem segundos (ex.: `18:00`).'
                        example: '18:00'
                      hora_fim:
                        type: string
                        description: >-
                          `HH:MM`, sem segundos, maior que `hora_inicio`; aceita
                          `24:00` para ir até o fim do dia. É o **fim do
                          bloco**, como no calendário do painel: `18:00`–`22:00`
                          vale das 18:00 até as 21:59:59, então um bloco
                          seguinte pode começar em `22:00` no mesmo dia sem
                          sobreposição.
                        example: '24:00'
                  description: >-
                    Horários de atuação. Omitido na tarifa padrão (primeira da
                    categoria); obrigatório nas extras. No máximo 36 horários
                    por tarifa.
                  maxItems: 36
            examples:
              padrao_duracao:
                summary: Tarifa padrão por duração (primeira da categoria)
                value:
                  metodo_calculo_tarifa: D
                  valor_bandeirada: '5.90'
                  valor_km: '1.20'
                  valor_minuto: '0.15'
                  valor_minimo: '8.00'
                  valor_parada_adicional: '2.00'
                  tipo_cobranca_retorno: F
                  valor_retorno_adicional: '4.00'
              extra_tabelada:
                summary: Tarifa extra tabelada com horários
                value:
                  nome: Noite fim de semana
                  metodo_calculo_tarifa: T
                  valor_parada_adicional: '2.00'
                  valores_tabelados:
                    - distancia_km: 5
                      valor: 15
                    - distancia_km: 10
                      valor: 25
                  horarios:
                    - dia_semana: 6
                      hora_inicio: '18:00'
                      hora_fim: '24:00'
                    - dia_semana: 7
                      hora_inicio: '18:00'
                      hora_fim: '24:00'
              extra_km_variavel:
                summary: >-
                  Tarifa extra km variável com limite de distância e bônus de
                  deslocamento
                value:
                  nome: Pico da manhã
                  metodo_calculo_tarifa: V
                  valor_bandeirada: '6.00'
                  valor_minuto: '0.20'
                  valor_minimo: '9.00'
                  valores_tabelados:
                    - distancia_km: '3.00'
                      valor: '2.50'
                    - distancia_km: '8.00'
                      valor: '2.00'
                    - a_partir_de: true
                      valor: '1.80'
                  habilitar_limite_distancia: true
                  limite_distancia_maxima: '30.00'
                  habilitar_taxa_deslocamento: true
                  taxa_deslocamento_valor_km: '1.00'
                  taxa_deslocamento_km_minimo: '2.00'
                  taxa_deslocamento_valor_maximo: '10.00'
                  horarios:
                    - dia_semana: 2
                      hora_inicio: '06:00'
                      hora_fim: '09:00'
                    - dia_semana: 3
                      hora_inicio: '06:00'
                      hora_fim: '09:00'
                    - dia_semana: 4
                      hora_inicio: '06:00'
                      hora_fim: '09:00'
                    - dia_semana: 5
                      hora_inicio: '06:00'
                      hora_fim: '09:00'
                    - dia_semana: 6
                      hora_inicio: '06:00'
                      hora_fim: '09:00'
              extra_por_bairro:
                summary: Tarifa extra por bairro (bandeira que faz somente entregas)
                value:
                  nome: Madrugada
                  metodo_calculo_tarifa: B
                  valores_tabelados:
                    - distancia_km: '5.00'
                      valor: '12.00'
                    - a_partir_de: true
                      valor: '20.00'
                  horarios:
                    - dia_semana: 1
                      hora_inicio: '00:00'
                      hora_fim: '06:00'
                    - dia_semana: 2
                      hora_inicio: '00:00'
                      hora_fim: '06:00'
                    - dia_semana: 3
                      hora_inicio: '00:00'
                      hora_fim: '06:00'
                    - dia_semana: 4
                      hora_inicio: '00:00'
                      hora_fim: '06:00'
                    - dia_semana: 5
                      hora_inicio: '00:00'
                      hora_fim: '06:00'
                    - dia_semana: 6
                      hora_inicio: '00:00'
                      hora_fim: '06:00'
                    - dia_semana: 7
                      hora_inicio: '00:00'
                      hora_fim: '06:00'
      responses:
        '201':
          description: Tarifa criada
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                  data:
                    type: object
                    description: >-
                      Tarifa com só os campos que se aplicam ao método e à
                      operação da bandeira. Valores em texto com 2 casas
                      decimais.
                    properties:
                      id:
                        type: integer
                      data_inicio:
                        type: string
                        description: >-
                          Data e hora a partir da qual a tarifa vale, em ISO
                          8601 UTC (ex.: 2026-09-30T13:20:00Z). Definida pelo
                          servidor no momento da gravação; não é aceita no corpo
                          do POST/PUT.
                      nome:
                        type: string
                      metodo_calculo_tarifa:
                        type: string
                        enum:
                          - D
                          - P
                          - T
                          - V
                          - B
                      valores_tabelados:
                        type: array
                        items:
                          type: object
                          properties:
                            distancia_km:
                              type:
                                - string
                                - 'null'
                            a_partir_de:
                              type: boolean
                            valor:
                              type: string
                      horarios:
                        type: array
                        description: Lista vazia na tarifa padrão.
                        items:
                          type: object
                          properties:
                            dia_semana:
                              type: integer
                            hora_inicio:
                              type: string
                              example: '18:00'
                            hora_fim:
                              type: string
                              example: '24:00'
                    additionalProperties: true
              example:
                success: true
                data:
                  id: 4823
                  data_inicio: '2026-09-30T13:25:00Z'
                  nome: Noite fim de semana
                  metodo_calculo_tarifa: T
                  valor_parada_adicional: '2.00'
                  valores_tabelados:
                    - distancia_km: '5.00'
                      a_partir_de: false
                      valor: '15.00'
                    - distancia_km: '10.00'
                      a_partir_de: false
                      valor: '25.00'
                  habilitar_taxa_deslocamento: false
                  tipo_cobranca_retorno: T
                  calcular_individual_por_entrega: false
                  horarios:
                    - dia_semana: 6
                      hora_inicio: '18:00'
                      hora_fim: '24:00'
                    - dia_semana: 7
                      hora_inicio: '18:00'
                      hora_fim: '24:00'
        '400':
          description: Erro de validação
          content:
            application/json:
              schema:
                type: object
              examples:
                metodo_ausente:
                  summary: Método de cálculo não informado
                  value:
                    success: false
                    errors:
                      - code: 2
                        message: '''metodo_calculo_tarifa'': Preenchimento obrigatório'
                decimal_com_virgula:
                  summary: Valor com vírgula ou mais de 2 casas
                  value:
                    success: false
                    errors:
                      - code: 0
                        message: >-
                          'valor_bandeirada': Deve ser um número não negativo,
                          com até 2 casas decimais e ponto como separador.
                obrigatorio_do_metodo:
                  summary: Obrigatório do método ausente
                  value:
                    success: false
                    errors:
                      - code: 0
                        message: >-
                          'valor_km': Preenchimento obrigatório para o método de
                          cálculo da tarifa.
                campo_nao_aplicavel:
                  summary: Campo que não se aplica ao método
                  value:
                    success: false
                    errors:
                      - code: 0
                        message: >-
                          'valor_hora_parada': Não se aplica ao método de
                          cálculo da tarifa ou à operação da bandeira.
                a_partir_de_obrigatorio:
                  summary: Km variável ou por bairro sem a faixa a_partir_de
                  value:
                    success: false
                    errors:
                      - code: 0
                        message: >-
                          'valores_tabelados': Informe o valor da faixa
                          'a_partir_de' (obrigatória no km variável e na tarifa
                          por bairro).
                km_variavel_versao_app:
                  summary: Km variável com app de motorista abaixo da 14.4
                  value:
                    success: false
                    errors:
                      - code: 0
                        message: >-
                          'metodo_calculo_tarifa': O km variável exige o app de
                          motorista na versão 14.4 ou superior.
                hora_parada_pre_fixada:
                  summary: Hora parada em bandeira pré-fixada
                  value:
                    success: false
                    errors:
                      - code: 0
                        message: >-
                          'metodo_calculo_tarifa': Bandeira com cálculo
                          pré-fixado não pode usar o método hora parada.
                horario_invalido:
                  summary: Horário inválido
                  value:
                    success: false
                    errors:
                      - code: 0
                        message: >-
                          'horarios.0.dia_semana': Deve ser um número inteiro de
                          1 (domingo) a 7 (sábado).
                      - code: 0
                        message: >-
                          'horarios.0.hora_fim': Deve ser maior que
                          'hora_inicio'.
                limite_horarios:
                  summary: Mais de 36 horários na tarifa
                  value:
                    success: false
                    errors:
                      - code: 0
                        message: >-
                          'horarios': Informe no máximo 36 horários em
                          'horarios'.
                por_bairro_somente_entregas:
                  summary: Por bairro em bandeira que não faz somente entregas
                  value:
                    success: false
                    errors:
                      - code: 0
                        message: >-
                          'metodo_calculo_tarifa': A tarifa por bairro é só para
                          bandeira que faz somente entregas.
                retorno_nao_liberado:
                  summary: Retorno sem a funcionalidade de taxa de retorno
                  value:
                    success: false
                    errors:
                      - code: 0
                        message: >-
                          'tipo_cobranca_retorno': A bandeira não tem a
                          funcionalidade de taxa de retorno: use 'T' (pelo
                          cálculo da tarifa).
        '401':
          description: Gestor não autenticado (Authorization Basic ausente ou inválido).
          content:
            application/json:
              schema:
                type: object
              example:
                success: false
                errors:
                  - code: B5
                    message: Usuário e/ou senhas inválidos.
        '403':
          description: >-
            Gestor sem a permissão de API de categoria
            (api_integracao_categoria).
          content:
            application/json:
              schema:
                type: object
              example:
                success: false
                errors:
                  - code: 68
                    message: >-
                      O usuário informado não tem permissão para realizar essa
                      operação.
        '404':
          description: Categoria não encontrada
          content:
            application/json:
              schema:
                type: object
              example:
                success: false
                errors:
                  - code: 0
                    message: Categoria informada não existe.
        '409':
          description: Conflito com as tarifas vigentes da categoria
          content:
            application/json:
              schema:
                type: object
              examples:
                padrao_obrigatoria:
                  summary: Categoria sem tarifa padrão e POST com horarios
                  value:
                    success: false
                    errors:
                      - code: 0
                        message: >-
                          A categoria ainda não tem tarifa padrão: a primeira
                          tarifa deve ser criada sem 'horarios'.
                padrao_existente:
                  summary: Categoria com tarifa padrão e POST sem horarios
                  value:
                    success: false
                    errors:
                      - code: 0
                        message: >-
                          A categoria já tem tarifa padrão: novas tarifas devem
                          informar 'horarios'. Para alterar a tarifa padrão, use
                          o PUT.
                limite_excedido:
                  summary: Categoria com 8 tarifas vigentes
                  value:
                    success: false
                    errors:
                      - code: 0
                        message: >-
                          A categoria já atingiu o limite de tarifas vigentes (a
                          padrão e mais 7 extras).
                horario_sobreposto:
                  summary: Horário sobreposto a outra tarifa vigente
                  value:
                    success: false
                    errors:
                      - code: 0
                        message: >-
                          Existe sobreposição de horários no mesmo dia da
                          semana.
                categoria_em_alteracao:
                  summary: Outra criação ou troca de horários da categoria em andamento
                  value:
                    success: false
                    errors:
                      - code: 0
                        message: >-
                          Outra alteração de tarifa desta categoria está em
                          andamento. Tente novamente em instantes.
        '500':
          description: Erro interno
          content:
            application/json:
              schema:
                type: object
              example:
                success: false
                errors:
                  - code: 0
                    message: Falha na operação
components:
  securitySchemes:
    basicAuth:
      type: http
      scheme: basic
    ApiKeyAuth:
      type: apiKey
      in: header
      name: api-key
      description: Obrigatório. Sua chave API.

````

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