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

# Criar operação de borderô

> Cria uma operação de borderô a partir de um CNAB 400 (parte `file`) e, opcionalmente, um ZIP de XMLs de NFe (parte `xmls`) para validação cruzada. Enfileira a análise e retorna 202. Faça polling em GET /operations/{id} e busque o resultado em /result.



## OpenAPI

````yaml /openapi/motor-credito.json post /operations
openapi: 3.0.0
info:
  title: Sherlocker Motor de Borderô - API v1
  description: >-
    API pública do Motor de Borderô: cria operações assíncronas de análise de
    borderô CNAB 400 via multipart/form-data (cedente, sacados, títulos e
    validação cruzada com NFe), consulta o status por polling e busca o
    resultado hierárquico (cedente → sacados → títulos, com issues por nó) em
    /result. Autenticação por chave de API (Bearer slhk_) no header. Erros em
    RFC 7807 (application/problem+json). Em beta: requer a feature
    analysis_engine habilitada no workspace.
  version: '1.0'
servers:
  - url: https://221b-api.sherlocker.com.br/api/v1
    description: >-
      Mesma base da API 221b. Autentica via Authorization: Bearer slhk_ (nao usa
      ?token=).
security:
  - bearerAuth: []
paths:
  /operations:
    post:
      tags:
        - Operações
      summary: Criar operação de borderô
      description: >-
        Cria uma operação de borderô a partir de um CNAB 400 (parte `file`) e,
        opcionalmente, um ZIP de XMLs de NFe (parte `xmls`) para validação
        cruzada. Enfileira a análise e retorna 202. Faça polling em GET
        /operations/{id} e busque o resultado em /result.
      operationId: createOperation
      parameters:
        - name: Idempotency-Key
          in: header
          required: false
          schema:
            type: string
          description: >-
            Opcional. Presente: reenviar a mesma key com o mesmo payload devolve
            a resposta original (HTTP 200), sem nova operação nem nova cobrança;
            a mesma key com payload diferente devolve 409 idempotency_conflict.
            Ausente: cada POST cria uma operação nova.
        - name: x-request-id
          in: header
          required: false
          schema:
            type: string
          description: >-
            Identificador de rastreio opcional fornecido pelo cliente. Ecoado no
            header da resposta (nunca no body).
      requestBody:
        required: true
        content:
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/CreateOperationRequest'
      responses:
        '200':
          description: >-
            Replay idempotente: mesma Idempotency-Key + mesmo payload. Corpo
            idêntico ao da resposta 202 original; nenhum token adicional é
            cobrado.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CreateOperationAccepted'
        '202':
          description: >-
            Operação aceita e enfileirada para processamento. CNAB parseado e
            tokens debitados (uma cobrança por entidade única do borderô; a
            cobrança não aparece no payload).
          headers:
            x-request-id:
              schema:
                type: string
              description: Identificador da requisição (ecoado ou gerado).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CreateOperationAccepted'
              example:
                operation_id: b2c3d4e5-0000-0000-0000-000000000001
                status: queued
                created_at: '2026-07-09T12:00:00.000Z'
        '400':
          description: >-
            Requisição inválida (validation_error, com errors[] field-level para
            file, xmls e cedente_cnpj): arquivo ausente ("No file provided"),
            cedente_cnpj ausente ("cedente_cnpj is required") ou com dígito
            verificador inválido ("Invalid CNPJ format"), CNAB que não parseia,
            ou arquivo acima do teto (16 MB para file, 32 MB para xmls). Nada é
            cobrado — o débito só acontece após o parse.
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Problem'
              example:
                type: https://docs.sherlocker.com.br/problems/validation_error
                title: Validation Error
                status: 400
                code: validation_error
                detail: One or more fields failed validation.
                errors:
                  - field: file
                    message: No file provided
                instance: /v1?request_id=3166fb9a-384c-44b7-ab77-90aca3146e0a
        '401':
          description: Chave de API ausente, malformada, inválida ou revogada.
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Problem'
              example:
                type: https://docs.sherlocker.com.br/problems/unauthorized
                title: Unauthorized
                status: 401
                code: unauthorized
                detail: Authentication is required to access this resource.
                instance: /v1?request_id=3166fb9a-384c-44b7-ab77-90aca3146e0a
        '402':
          description: >-
            Saldo de tokens do workspace insuficiente para as entidades únicas
            do borderô. Campos extras: required (tokens necessários) e balance
            (saldo atual). Nada é cobrado.
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Problem'
              example:
                type: https://docs.sherlocker.com.br/problems/insufficient_tokens
                title: Payment Required
                status: 402
                code: insufficient_tokens
                detail: 'Insufficient tokens: 5 available, 12 required'
                required: 12
                balance: 5
                instance: /v1?request_id=3166fb9a-384c-44b7-ab77-90aca3146e0a
        '403':
          description: >-
            Feature analysis_engine não habilitada no workspace
            (feature_not_enabled, com request_access_url) ou acesso negado
            genérico (forbidden).
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Problem'
              example:
                type: https://docs.sherlocker.com.br/problems/feature_not_enabled
                title: Feature Not Enabled
                status: 403
                code: feature_not_enabled
                detail: >-
                  The analysis_engine feature is not enabled for this workspace.
                  To request access visit
                  https://docs.sherlocker.com.br/api/access or contact support
                  at https://docs.sherlocker.com.br/support.
                request_access_url: https://docs.sherlocker.com.br/api/access
                instance: /v1?request_id=3166fb9a-384c-44b7-ab77-90aca3146e0a
        '409':
          description: >-
            Conflito de idempotência: a mesma Idempotency-Key foi reutilizada
            com um payload diferente (só ocorre quando o header opcional é
            enviado).
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Problem'
              example:
                type: https://docs.sherlocker.com.br/problems/idempotency_conflict
                title: Conflict
                status: 409
                code: idempotency_conflict
                detail: >-
                  A request with the same idempotency key is already in progress
                  or completed.
                instance: /v1?request_id=3166fb9a-384c-44b7-ab77-90aca3146e0a
        '422':
          description: >-
            Engine não utilizável ou nenhuma engine de borderô disponível para a
            operação.
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Problem'
              example:
                type: https://docs.sherlocker.com.br/problems/no_engine
                title: Unprocessable Entity
                status: 422
                code: no_engine
                detail: No bordero engine is available for this operation.
                instance: /v1?request_id=3166fb9a-384c-44b7-ab77-90aca3146e0a
        '500':
          description: >-
            Erro inesperado no servidor. Inclua o instance (request_id) ao
            acionar o suporte.
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Problem'
              example:
                type: https://docs.sherlocker.com.br/problems/server_error
                title: Internal Server Error
                status: 500
                code: server_error
                detail: An unexpected error occurred.
                instance: /v1?request_id=3166fb9a-384c-44b7-ab77-90aca3146e0a
components:
  schemas:
    CreateOperationRequest:
      type: object
      required:
        - file
        - cedente_cnpj
      properties:
        file:
          type: string
          format: binary
          description: >-
            Arquivo CNAB 400 remessa (.REM) — Banco Paulista 611, 444 colunas,
            Windows-1252. Obrigatório. Máximo de 16 MB.
        xmls:
          type: string
          format: binary
          description: >-
            ZIP com os XMLs de NFe (nfeProc) dos títulos, para validação
            cruzada. Opcional. Máximo de 32 MB.
        cedente_cnpj:
          type: string
          description: >-
            CNPJ do cedente, 14 dígitos ou formatado. Obrigatório; o dígito
            verificador é validado.
          example: '12345678000195'
        engine_id:
          type: string
          description: >-
            ID da engine de borderô a usar. Omitido ou "template-padrao": usa a
            engine template do sistema. Engine não utilizável retorna 422
            no_engine.
          example: template-padrao
        purpose:
          type: string
          description: Finalidade da análise (auditoria LGPD). Opcional.
        legal_basis:
          type: string
          description: Base legal LGPD para os sacados PF. Opcional.
    CreateOperationAccepted:
      type: object
      required:
        - operation_id
        - status
        - created_at
      properties:
        operation_id:
          type: string
          format: uuid
          description: >-
            UUID da operação criada. Use no GET /operations/{id} e no GET
            /operations/{id}/result.
        status:
          type: string
          enum:
            - queued
          description: Sempre queued imediatamente após a criação.
        created_at:
          type: string
          format: date-time
          description: Timestamp ISO 8601 de criação.
    Problem:
      type: object
      required:
        - type
        - title
        - status
        - code
      description: >-
        Erro no formato RFC 7807 (application/problem+json). Use o campo code
        para tratamento programático; type é apenas identificador.
      properties:
        type:
          type: string
          description: >-
            URI que identifica o tipo do problema
            (https://docs.sherlocker.com.br/problems/<code>).
        title:
          type: string
          description: Resumo curto do tipo do problema.
        status:
          type: integer
          description: Status HTTP desta ocorrência.
        code:
          type: string
          description: >-
            Código estável para tratamento programático (ex.:
            insufficient_tokens).
        detail:
          type: string
          description: Explicação legível específica desta ocorrência.
        instance:
          type: string
          description: Identificador da ocorrência (/v1?request_id=<request_id>).
        errors:
          type: array
          description: >-
            Erros de validação por campo (file, xmls, cedente_cnpj). Presente
            apenas em validation_error (400).
          items:
            type: object
            properties:
              field:
                type: string
              message:
                type: string
        required:
          type: number
          description: Tokens necessários. Presente apenas em insufficient_tokens (402).
        balance:
          type: number
          description: Saldo atual de tokens. Presente apenas em insufficient_tokens (402).
        request_access_url:
          type: string
          description: Onde solicitar acesso. Presente apenas em feature_not_enabled (403).
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: >-
        Chave de API do workspace (prefixo slhk_), enviada no header:
        Authorization: Bearer slhk_sua_chave_aqui

````