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

# Enviar mensagem na corrida como passageiro

> Envia uma mensagem na conversa entre passageiro e condutor de uma corrida. A mensagem é gravada como sendo do **passageiro** da corrida — é essa a identidade que o condutor vê no app dele — e dispara o push de mensagem nova no aplicativo do condutor.

Só a corrida criada pela API de Integração **com `"chat_ativo": true`** aceita mensagem por este endpoint. Sem o campo a corrida não tem chat, e a conversa fica indisponível para todos. Com ele, você pode escrever desde o início da corrida, sem esperar o condutor.

**O texto é sanitizado:** marcação HTML é removida e emoji é descartado, mas os demais caracteres chegam ao condutor como você os enviou.



## OpenAPI

````yaml pages/v2/openapi-corridas.json POST /mensagens/corridas/passageiro
openapi: 3.1.0
info:
  title: API de Integração
  description: API de Integração v2 - Corridas
  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:
  /mensagens/corridas/passageiro:
    post:
      summary: Enviar mensagem na conversa da corrida como passageiro
      description: >-
        Envia uma mensagem na conversa entre passageiro e condutor de uma
        corrida. A mensagem é gravada como sendo do **passageiro** da corrida —
        é essa a identidade que o condutor vê no app dele — e dispara o push de
        mensagem nova no aplicativo do condutor.


        Só a corrida criada pela API de Integração **com `"chat_ativo": true`**
        aceita mensagem por este endpoint. Sem o campo a corrida não tem chat, e
        a conversa fica indisponível para todos. Com ele, você pode escrever
        desde o início da corrida, sem esperar o condutor.


        **O texto é sanitizado:** marcação HTML é removida e emoji é descartado,
        mas os demais caracteres chegam ao condutor como você os enviou.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - solicitacao_id
                - passageiro_id
                - mensagem
              properties:
                solicitacao_id:
                  type: integer
                  description: ID da corrida (solicitação) na qual a mensagem será enviada.
                  example: 639
                passageiro_id:
                  type: integer
                  description: >-
                    ID do passageiro da corrida. Precisa corresponder ao
                    passageiro da solicitação informada. Ele vem como
                    `passageiro_id` na resposta da criação da corrida; guarde-o
                    ali para não precisar consultar a corrida antes de cada
                    envio.
                  example: 543
                mensagem:
                  type: string
                  description: >-
                    Conteúdo da mensagem. Máximo de 10.000 caracteres. Marcação
                    HTML e emoji são removidos; os demais caracteres chegam ao
                    condutor como enviados.
                  maxLength: 10000
                  example: Estou na portaria.
      responses:
        '201':
          description: Mensagem gravada como do passageiro e push enviado ao condutor
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                  data:
                    type: object
                    properties:
                      solicitacao_id:
                        type: integer
                      passageiro_id:
                        type: integer
                      conversa_id:
                        type: integer
                        description: Conversa da corrida em que a mensagem foi gravada.
                      sequencial:
                        type: integer
                        description: >-
                          Posição da mensagem gravada na conversa. É o mesmo
                          `sequencial` que a leitura devolve.
                  message:
                    type: string
                  __links:
                    type: object
                    description: Links HATEOAS do domínio, indexados pelo rel.
              example:
                success: true
                data:
                  solicitacao_id: 639
                  passageiro_id: 543
                  conversa_id: 8
                  sequencial: 3
                message: Mensagem enviada com sucesso.
                __links:
                  self:
                    href: api/v2/integracao/mensagens/corridas/passageiro
                    metodo: post
                  listar-mensagens-corrida-passageiro:
                    href: api/v2/integracao/mensagens/corridas/passageiro/{id}
                    metodo: get
        '400':
          description: Erro de validação ou de regra de negócio
          content:
            application/json:
              schema:
                type: object
              examples:
                campo_obrigatorio:
                  summary: Campo obrigatório ausente
                  value:
                    success: false
                    errors:
                      - code: 2
                        message: '''mensagem'': Preenchimento obrigatório'
                id_nao_numerico:
                  summary: Identificador que não é número
                  value:
                    success: false
                    errors:
                      - code: 0
                        message: '''passageiro_id'': Deve ser numérico.'
                id_nao_inteiro:
                  summary: >-
                    Identificador com sinal, espaço, casa decimal ou zero à
                    esquerda
                  value:
                    success: false
                    errors:
                      - code: 0
                        message: >-
                          'solicitacao_id': Deve ser um número inteiro positivo,
                          sem sinal, espaço ou casa decimal.
                mensagem_longa:
                  summary: Mensagem acima de 10.000 caracteres
                  value:
                    success: false
                    errors:
                      - code: 0
                        message: '''mensagem'': Deve ter no máximo 10000 caracteres.'
                corpo_nao_json:
                  summary: Corpo que não é JSON
                  value:
                    success: false
                    errors:
                      - code: 0
                        message: JSON inválido
                texto_vazio:
                  summary: Texto vazio depois de remover HTML e emoji
                  value:
                    success: false
                    errors:
                      - code: 0
                        message: O texto da mensagem não pode ficar vazio.
                corrida_outra_central:
                  summary: >-
                    Central do condutor numa corrida de repasse (só a central
                    que recebeu a corrida fala pelo passageiro)
                  value:
                    success: false
                    errors:
                      - code: 0
                        message: >-
                          Só a central que recebeu a corrida pode trocar
                          mensagens pelo passageiro.
                corrida_fora_da_integracao:
                  summary: >-
                    Corrida sem chat: não foi criada pela API de Integração, ou
                    foi criada sem `chat_ativo`
                  value:
                    success: false
                    errors:
                      - code: 0
                        message: A conversa da corrida não está disponível.
                fora_da_janela:
                  summary: Corrida fora dos status aceita, em espera e em andamento
                  value:
                    success: false
                    errors:
                      - code: 0
                        message: A corrida não está em andamento.
                passageiro_divergente:
                  summary: passageiro_id não é o passageiro da corrida
                  value:
                    success: false
                    errors:
                      - code: 0
                        message: O passageiro informado não é o passageiro da corrida.
                sem_condutor:
                  summary: Corrida ainda sem condutor
                  value:
                    success: false
                    errors:
                      - code: 0
                        message: A corrida ainda não tem condutor.
                passageiro_sem_usuario:
                  summary: Passageiro da corrida sem usuário vinculado
                  value:
                    success: false
                    errors:
                      - code: 0
                        message: Não foi possível identificar o usuário do passageiro.
                conversa_indisponivel:
                  summary: Central não permite mensagem entre passageiro e condutor
                  value:
                    success: false
                    errors:
                      - code: 0
                        message: A conversa da corrida não está disponível.
                conversa_empresa_condutor:
                  summary: A conversa da corrida é entre empresa e condutor
                  value:
                    success: false
                    errors:
                      - code: 0
                        message: A conversa desta corrida é entre empresa e condutor.
                nao_enviada:
                  summary: Falha ao gravar a mensagem
                  value:
                    success: false
                    errors:
                      - code: 0
                        message: Não foi possível enviar a mensagem.
        '401':
          description: Credenciais ausentes ou inválidas
          content:
            application/json:
              schema:
                type: object
              examples:
                gestor_invalido:
                  summary: Usuário ou senha do Basic Auth inválidos
                  value:
                    success: false
                    errors:
                      - code: 401
                        message: Usuário e/ou senhas inválidos.
                api_key_invalida:
                  summary: Api-Key ausente ou sem bandeira
                  value:
                    success: false
                    errors:
                      - code: 401
                        message: Você não está autorizado a acessar este recurso.
        '404':
          description: Corrida não encontrada no escopo do parceiro
          content:
            application/json:
              schema:
                type: object
              example:
                success: false
                errors:
                  - code: 404
                    message: Solicitação não encontrada.
        '429':
          description: >-
            Limite de requisições excedido. Os limites estão na tabela de rate
            limit da introdução.
          content:
            application/json:
              schema:
                type: object
              example:
                success: false
components:
  securitySchemes:
    basicAuth:
      type: http
      scheme: basic
    ApiKeyAuth:
      type: apiKey
      in: header
      name: api-key
      description: Obrigatório. Sua chave API.

````