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

# Criar pedido (frota própria)

> Cria um novo envio de frota própria a partir do painel admin ou de um webhook de ERP.
Este é o endpoint de referência para simular uma entrada completa via API:
destinatário (com endereço), CEPs de origem/destino, itens/produtos, pedido externo e observações.
O CEP de destino é usado para geocodificar e enriquecer o endereço automaticamente.

Autenticação: use um token JWT no header `Authorization: Bearer <token>` (painel admin)
OU uma chave de API no header `X-API-Key: bk_...` (webhook/ERP). Com a chave de API,
o tenant é resolvido automaticamente a partir da chave — não é necessário enviar `tenantId`.




## OpenAPI

````yaml /openapi.json post /orders
openapi: 3.0.0
info:
  title: BulkRoute API
  version: 1.0.0
  description: |2-

            API de orquestração logística para e-commerce B2B.
            
            ## Funcionalidades
            
            - **Cotação de Frete**: Calcule frete com múltiplos carriers em paralelo
            - **Geração de Etiquetas**: Crie etiquetas de envio para diferentes transportadoras
            - **Rastreamento**: Acompanhe entregas em tempo real
            - **Gestão de Tenants**: Configure múltiplos clientes com regras customizadas
            - **Integração de Carriers**: Adapte-se a diferentes transportadoras via pattern Adapter
            
            ## Autenticação
            
            A API usa dois métodos de autenticação:
            - **JWT Bearer** (dashboard admin/driver): `Authorization: Bearer <token>`
            - **API Key** (integrações ERP/e-commerce): `X-API-Key: bk_live_...`
            
            Endpoints de integração (quotes, orders, tracking) aceitam ambos.
            Endpoints admin exigem JWT. Endpoints públicos (tracking público, rebook) não exigem auth.
            
            ## Rate Limiting
            
            A API possui rate limiting por IP e por tenant para garantir estabilidade.
          
  contact:
    name: BulkRoute Support
    email: support@bulkroute.com.br
    url: https://www.bulkroute.com.br
  license:
    name: Proprietary
servers:
  - url: http://localhost:3000
    description: Servidor de desenvolvimento
  - url: https://api.bulkroute.com.br
    description: Servidor de produção
security: []
tags:
  - name: Auth
    description: Autenticação e gestão de tokens
  - name: Cotação
    description: Cotação de frete com múltiplos carriers
  - name: Pedidos
    description: Criação e gestão de shipments/envios
  - name: Rastreamento
    description: Tracking unificado de entregas
  - name: Orquestrador
    description: Motor de decisão com scoring e regras
  - name: Etiquetas
    description: Geração e gestão de etiquetas
  - name: Tenants
    description: Gestão de tenants (clientes)
  - name: Transportadoras
    description: Gestão de carriers e planilhas
  - name: Usuários
    description: Gestão de usuários
  - name: Motorista
    description: Endpoints do PWA do motorista
  - name: Frota
    description: Operações de campo da frota própria
  - name: Veículos
    description: Gestão de veículos
  - name: Regras
    description: Flow visual de regras de envio
  - name: Scoring
    description: Pontuação e ranking de carriers
  - name: Webhooks
    description: Webhooks inbound de transportadoras
  - name: Chat
    description: Chat admin ↔ motorista
  - name: Notificações
    description: Log de notificações enviadas
  - name: CDs
    description: Centros de distribuição
  - name: Contratos
    description: Contratos com transportadoras
  - name: Faturas
    description: Faturas por tenant/carrier
  - name: Integrações
    description: Integrações externas
  - name: Público
    description: Endpoints públicos (sem auth)
  - name: Endereço
    description: Lookup de CEP e CNPJ
  - name: Rotas
    description: Cálculo de rota e analytics de custo
  - name: Storage
    description: Upload e download de arquivos
  - name: SSE
    description: Server-Sent Events (tempo real)
paths:
  /orders:
    post:
      tags:
        - Pedidos
      summary: Criar pedido (frota própria)
      description: >
        Cria um novo envio de frota própria a partir do painel admin ou de um
        webhook de ERP.

        Este é o endpoint de referência para simular uma entrada completa via
        API:

        destinatário (com endereço), CEPs de origem/destino, itens/produtos,
        pedido externo e observações.

        O CEP de destino é usado para geocodificar e enriquecer o endereço
        automaticamente.


        Autenticação: use um token JWT no header `Authorization: Bearer <token>`
        (painel admin)

        OU uma chave de API no header `X-API-Key: bk_...` (webhook/ERP). Com a
        chave de API,

        o tenant é resolvido automaticamente a partir da chave — não é
        necessário enviar `tenantId`.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                externalOrderId:
                  type: string
                  description: ID do pedido no ERP/cliente (opcional).
                  example: PED-10023
                tenantId:
                  type: string
                  format: uuid
                  description: >-
                    ID do tenant. Apenas para admins; por padrão usa o tenant do
                    usuário ou o primeiro ativo.
                  example: a1b2c3d4-e5f6-7890-abcd-ef1234567890
                recipient:
                  type: object
                  required:
                    - name
                    - phone
                    - address
                  properties:
                    name:
                      type: string
                      description: Nome do destinatário.
                      example: Loja Moveis Silva
                    phone:
                      type: string
                      description: Telefone para contato.
                      example: (11) 98888-7777
                    email:
                      type: string
                      format: email
                      description: E-mail do destinatário (opcional).
                      example: contato@moveissilva.com.br
                    address:
                      type: string
                      description: Endereço completo do destinatário.
                      example: Av. das Palmeiras, 123, Centro, São Paulo, SP
                originZip:
                  type: string
                  pattern: ^\d{5}-?\d{3}$
                  description: CEP de origem (opcional).
                  example: 01001-000
                destinationZip:
                  type: string
                  pattern: ^\d{5}-?\d{3}$
                  description: CEP de destino.
                  example: 89010-000
                notes:
                  type: string
                  description: Observações da entrega.
                  example: 'Entregar somente após as 14h. Documento: NF-e 12345.'
                items:
                  type: array
                  description: Itens/produtos do pedido.
                  items:
                    type: object
                    required:
                      - description
                    properties:
                      description:
                        type: string
                        description: Descrição do item.
                        example: Sofá de 3 lugares retrátil
                      weight:
                        type: number
                        description: Peso do item em kg (opcional).
                        example: 85.5
                      quantity:
                        type: integer
                        description: 'Quantidade (padrão: 1).'
                        example: 2
      responses:
        '201':
          description: Pedido criado com sucesso.
          content:
            application/json:
              schema:
                type: object
                properties:
                  shipmentId:
                    type: string
                    format: uuid
                    description: ID do envio criado.
                  trackingCode:
                    type: string
                    description: Código de rastreio gerado.
                  status:
                    type: string
                    enum:
                      - PENDING
                  recipientName:
                    type: string
                  destinationZip:
                    type: string
        '400':
          description: Dados inválidos (validação Zod).
        '401':
          description: Não autenticado.
        '500':
          description: Erro interno do servidor.
      security:
        - bearerAuth: []
        - apiKeyAuth: []
components:
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: JWT token obtido via endpoint /auth/login
    apiKeyAuth:
      type: apiKey
      in: header
      name: X-API-Key
      description: >-
        Chave de API (formato bk_...) criada no painel admin para integrações
        ERP/webhook

````