{
  "openapi": "3.0.3",
  "info": {
    "title": "API de integração do CRM",
    "version": "1.0.0",
    "description": "API existente de consulta do CRM. Somente GET; autenticação Bearer de aplicação. dados:read autoriza todos os recursos de negócio disponíveis da organização. Exemplos são fictícios."
  },
  "servers": [
    {
      "url": "https://crm.sendero.network/api/integracoes/v1",
      "description": "Produção"
    },
    {
      "url": "http://localhost:3000/api/integracoes/v1",
      "description": "Teste local no próprio computador"
    },
    {
      "url": "/api/integracoes/v1",
      "description": "API no mesmo servidor da documentação"
    }
  ],
  "security": [
    {
      "ApplicationKey": []
    }
  ],
  "paths": {
    "/catalogo": {
      "get": {
        "operationId": "catalogo",
        "summary": "Catálogo de recursos",
        "description": "Lista recursos amigáveis, campos, escopos e limites disponíveis para integração.\n\nEscopos: Qualquer credencial de aplicação válida.",
        "tags": [
          "Recursos amigáveis"
        ],
        "x-required-scopes": [],
        "parameters": [],
        "responses": {
          "200": {
            "description": "Objeto de catálogo; não possui items/pagination.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ResourceCatalog"
                },
                "example": {
                  "version": "v1",
                  "readOnly": true,
                  "scopes": [
                    "dados:read"
                  ],
                  "resources": {
                    "creditos.list": {
                      "scope": "creditos:read",
                      "fields": [
                        "id",
                        "legacyId",
                        "legacyProspectId",
                        "legacyContactId",
                        "name",
                        "document",
                        "normalizedDocument",
                        "documentType",
                        "documentValid",
                        "campaignId",
                        "campaignName",
                        "processNumber",
                        "sourceState",
                        "className",
                        "category",
                        "groupName",
                        "situation",
                        "status",
                        "responsibleId",
                        "responsibleName",
                        "closingResponsibleName",
                        "office",
                        "cessionary",
                        "partner",
                        "creditRisk",
                        "paymentType",
                        "proceduralStrategy",
                        "createdAt",
                        "updatedAt",
                        "statusChangedAt",
                        "archivedAt",
                        "historicalAmount",
                        "proposalAmount",
                        "maximumProposalAmount",
                        "receivableAmount",
                        "acquisitionAmount",
                        "closingAmount",
                        "paidAmount",
                        "receivedAmount",
                        "settlementAmount",
                        "proposedAt",
                        "signedAt",
                        "paidAt",
                        "receivedAt",
                        "paymentTermDays"
                      ],
                      "maxPageSize": 1000,
                      "defaultFields": [
                        "id",
                        "legacyId",
                        "name",
                        "document",
                        "documentType",
                        "campaignId",
                        "campaignName",
                        "sourceState",
                        "situation",
                        "status",
                        "responsibleId",
                        "responsibleName",
                        "updatedAt"
                      ],
                      "filters": [
                        "name",
                        "campaignId",
                        "campaignName",
                        "legacyId",
                        "legacyProspectId",
                        "legacyContactId",
                        "document",
                        "situation",
                        "status",
                        "responsibleId",
                        "sourceState",
                        "archived"
                      ]
                    },
                    "creditos.detail": {
                      "scope": "creditos:read",
                      "fields": [
                        "id",
                        "legacyId",
                        "legacyProspectId",
                        "legacyContactId",
                        "name",
                        "document",
                        "normalizedDocument",
                        "documentType",
                        "documentValid",
                        "campaignId",
                        "campaignName",
                        "processNumber",
                        "sourceState",
                        "className",
                        "category",
                        "groupName",
                        "situation",
                        "status",
                        "responsibleId",
                        "responsibleName",
                        "closingResponsibleName",
                        "office",
                        "cessionary",
                        "partner",
                        "creditRisk",
                        "paymentType",
                        "proceduralStrategy",
                        "createdAt",
                        "updatedAt",
                        "statusChangedAt",
                        "archivedAt",
                        "historicalAmount",
                        "proposalAmount",
                        "maximumProposalAmount",
                        "receivableAmount",
                        "acquisitionAmount",
                        "closingAmount",
                        "paidAmount",
                        "receivedAmount",
                        "settlementAmount",
                        "proposedAt",
                        "signedAt",
                        "paidAt",
                        "receivedAt",
                        "paymentTermDays"
                      ],
                      "maxPageSize": 200,
                      "defaultFields": [
                        "id",
                        "legacyId",
                        "legacyProspectId",
                        "legacyContactId",
                        "name",
                        "document",
                        "normalizedDocument",
                        "documentType",
                        "documentValid",
                        "campaignId",
                        "campaignName",
                        "processNumber",
                        "sourceState",
                        "className",
                        "category",
                        "groupName",
                        "situation",
                        "status",
                        "responsibleId",
                        "responsibleName",
                        "closingResponsibleName",
                        "office",
                        "cessionary",
                        "partner",
                        "creditRisk",
                        "paymentType",
                        "proceduralStrategy",
                        "createdAt",
                        "updatedAt",
                        "statusChangedAt",
                        "archivedAt"
                      ],
                      "filters": [
                        "prospectId"
                      ]
                    },
                    "contatos.list": {
                      "scope": "contatos:read",
                      "fields": [
                        "id",
                        "prospectId",
                        "type",
                        "value",
                        "normalizedValue",
                        "areaCode",
                        "status",
                        "primary",
                        "whatsapp",
                        "source",
                        "createdAt",
                        "updatedAt"
                      ],
                      "maxPageSize": 200,
                      "defaultFields": [
                        "id",
                        "prospectId",
                        "type",
                        "value",
                        "normalizedValue",
                        "areaCode",
                        "status",
                        "primary",
                        "whatsapp",
                        "source",
                        "createdAt",
                        "updatedAt"
                      ],
                      "filters": [
                        "prospectId",
                        "type",
                        "status"
                      ]
                    },
                    "interacoes.list": {
                      "scope": "interacoes:read",
                      "fields": [
                        "id",
                        "prospectId",
                        "userId",
                        "userName",
                        "type",
                        "occurredAt",
                        "occurredDate",
                        "occurredTime",
                        "notes",
                        "situation",
                        "priority",
                        "completed",
                        "source",
                        "createdAt"
                      ],
                      "maxPageSize": 200,
                      "defaultFields": [
                        "id",
                        "prospectId",
                        "userId",
                        "userName",
                        "type",
                        "occurredAt",
                        "occurredDate",
                        "occurredTime",
                        "notes",
                        "situation",
                        "priority",
                        "completed",
                        "source",
                        "createdAt"
                      ],
                      "filters": [
                        "prospectId",
                        "userId",
                        "situation",
                        "completed",
                        "type"
                      ]
                    },
                    "financeiro.list": {
                      "scope": "financeiro:read",
                      "fields": [
                        "id",
                        "prospectId",
                        "kind",
                        "occurredOn",
                        "amount",
                        "beneficiary",
                        "notes",
                        "fromOpening",
                        "createdById",
                        "createdByName",
                        "createdAt",
                        "updatedAt"
                      ],
                      "maxPageSize": 200,
                      "defaultFields": [
                        "id",
                        "prospectId",
                        "kind",
                        "occurredOn",
                        "amount",
                        "beneficiary",
                        "notes",
                        "fromOpening",
                        "createdById",
                        "createdByName",
                        "createdAt",
                        "updatedAt"
                      ],
                      "filters": [
                        "prospectId",
                        "kind"
                      ]
                    },
                    "campanhas.list": {
                      "scope": "campanhas:read",
                      "fields": [
                        "id",
                        "name",
                        "productId",
                        "productName",
                        "status",
                        "category",
                        "partner",
                        "processNumber",
                        "active",
                        "createdAt",
                        "updatedAt"
                      ],
                      "maxPageSize": 200,
                      "defaultFields": [
                        "id",
                        "name",
                        "productId",
                        "productName",
                        "status",
                        "category",
                        "partner",
                        "processNumber",
                        "active",
                        "createdAt",
                        "updatedAt"
                      ],
                      "filters": [
                        "name",
                        "status",
                        "active"
                      ]
                    },
                    "usuarios.list": {
                      "scope": "usuarios:read",
                      "fields": [
                        "id",
                        "name",
                        "active",
                        "profiles"
                      ],
                      "maxPageSize": 200,
                      "defaultFields": [
                        "id",
                        "name",
                        "active",
                        "profiles"
                      ],
                      "filters": [
                        "name",
                        "active"
                      ]
                    },
                    "situacoes.list": {
                      "scope": "situacoes:read",
                      "fields": [
                        "id",
                        "name",
                        "status",
                        "groupName",
                        "active",
                        "createdAt",
                        "updatedAt"
                      ],
                      "maxPageSize": 200,
                      "defaultFields": [
                        "id",
                        "name",
                        "status",
                        "groupName",
                        "active",
                        "createdAt",
                        "updatedAt"
                      ],
                      "filters": [
                        "name",
                        "status",
                        "groupName",
                        "active"
                      ]
                    }
                  },
                  "fields": {
                    "creditos.list": {
                      "id": {
                        "scope": "creditos:read"
                      },
                      "legacyId": {
                        "scope": "creditos:read"
                      },
                      "legacyProspectId": {
                        "scope": "creditos:read"
                      },
                      "legacyContactId": {
                        "scope": "creditos:read"
                      },
                      "name": {
                        "scope": "creditos:read"
                      },
                      "document": {
                        "scope": "creditos:read"
                      },
                      "normalizedDocument": {
                        "scope": "creditos:read"
                      },
                      "documentType": {
                        "scope": "creditos:read"
                      },
                      "documentValid": {
                        "scope": "creditos:read"
                      },
                      "campaignId": {
                        "scope": "creditos:read"
                      },
                      "campaignName": {
                        "scope": "creditos:read"
                      },
                      "processNumber": {
                        "scope": "creditos:read"
                      },
                      "sourceState": {
                        "scope": "creditos:read"
                      },
                      "className": {
                        "scope": "creditos:read"
                      },
                      "category": {
                        "scope": "creditos:read"
                      },
                      "groupName": {
                        "scope": "creditos:read"
                      },
                      "situation": {
                        "scope": "creditos:read"
                      },
                      "status": {
                        "scope": "creditos:read"
                      },
                      "responsibleId": {
                        "scope": "creditos:read"
                      },
                      "responsibleName": {
                        "scope": "creditos:read"
                      },
                      "closingResponsibleName": {
                        "scope": "creditos:read"
                      },
                      "office": {
                        "scope": "creditos:read"
                      },
                      "cessionary": {
                        "scope": "creditos:read"
                      },
                      "partner": {
                        "scope": "creditos:read"
                      },
                      "creditRisk": {
                        "scope": "creditos:read"
                      },
                      "paymentType": {
                        "scope": "creditos:read"
                      },
                      "proceduralStrategy": {
                        "scope": "creditos:read"
                      },
                      "createdAt": {
                        "scope": "creditos:read"
                      },
                      "updatedAt": {
                        "scope": "creditos:read"
                      },
                      "statusChangedAt": {
                        "scope": "creditos:read"
                      },
                      "archivedAt": {
                        "scope": "creditos:read"
                      },
                      "historicalAmount": {
                        "scope": "financeiro:read"
                      },
                      "proposalAmount": {
                        "scope": "financeiro:read"
                      },
                      "maximumProposalAmount": {
                        "scope": "financeiro:read"
                      },
                      "receivableAmount": {
                        "scope": "financeiro:read"
                      },
                      "acquisitionAmount": {
                        "scope": "financeiro:read"
                      },
                      "closingAmount": {
                        "scope": "financeiro:read"
                      },
                      "paidAmount": {
                        "scope": "financeiro:read"
                      },
                      "receivedAmount": {
                        "scope": "financeiro:read"
                      },
                      "settlementAmount": {
                        "scope": "financeiro:read"
                      },
                      "proposedAt": {
                        "scope": "financeiro:read"
                      },
                      "signedAt": {
                        "scope": "financeiro:read"
                      },
                      "paidAt": {
                        "scope": "financeiro:read"
                      },
                      "receivedAt": {
                        "scope": "financeiro:read"
                      },
                      "paymentTermDays": {
                        "scope": "financeiro:read"
                      }
                    },
                    "creditos.detail": {
                      "id": {
                        "scope": "creditos:read"
                      },
                      "legacyId": {
                        "scope": "creditos:read"
                      },
                      "legacyProspectId": {
                        "scope": "creditos:read"
                      },
                      "legacyContactId": {
                        "scope": "creditos:read"
                      },
                      "name": {
                        "scope": "creditos:read"
                      },
                      "document": {
                        "scope": "creditos:read"
                      },
                      "normalizedDocument": {
                        "scope": "creditos:read"
                      },
                      "documentType": {
                        "scope": "creditos:read"
                      },
                      "documentValid": {
                        "scope": "creditos:read"
                      },
                      "campaignId": {
                        "scope": "creditos:read"
                      },
                      "campaignName": {
                        "scope": "creditos:read"
                      },
                      "processNumber": {
                        "scope": "creditos:read"
                      },
                      "sourceState": {
                        "scope": "creditos:read"
                      },
                      "className": {
                        "scope": "creditos:read"
                      },
                      "category": {
                        "scope": "creditos:read"
                      },
                      "groupName": {
                        "scope": "creditos:read"
                      },
                      "situation": {
                        "scope": "creditos:read"
                      },
                      "status": {
                        "scope": "creditos:read"
                      },
                      "responsibleId": {
                        "scope": "creditos:read"
                      },
                      "responsibleName": {
                        "scope": "creditos:read"
                      },
                      "closingResponsibleName": {
                        "scope": "creditos:read"
                      },
                      "office": {
                        "scope": "creditos:read"
                      },
                      "cessionary": {
                        "scope": "creditos:read"
                      },
                      "partner": {
                        "scope": "creditos:read"
                      },
                      "creditRisk": {
                        "scope": "creditos:read"
                      },
                      "paymentType": {
                        "scope": "creditos:read"
                      },
                      "proceduralStrategy": {
                        "scope": "creditos:read"
                      },
                      "createdAt": {
                        "scope": "creditos:read"
                      },
                      "updatedAt": {
                        "scope": "creditos:read"
                      },
                      "statusChangedAt": {
                        "scope": "creditos:read"
                      },
                      "archivedAt": {
                        "scope": "creditos:read"
                      },
                      "historicalAmount": {
                        "scope": "financeiro:read"
                      },
                      "proposalAmount": {
                        "scope": "financeiro:read"
                      },
                      "maximumProposalAmount": {
                        "scope": "financeiro:read"
                      },
                      "receivableAmount": {
                        "scope": "financeiro:read"
                      },
                      "acquisitionAmount": {
                        "scope": "financeiro:read"
                      },
                      "closingAmount": {
                        "scope": "financeiro:read"
                      },
                      "paidAmount": {
                        "scope": "financeiro:read"
                      },
                      "receivedAmount": {
                        "scope": "financeiro:read"
                      },
                      "settlementAmount": {
                        "scope": "financeiro:read"
                      },
                      "proposedAt": {
                        "scope": "financeiro:read"
                      },
                      "signedAt": {
                        "scope": "financeiro:read"
                      },
                      "paidAt": {
                        "scope": "financeiro:read"
                      },
                      "receivedAt": {
                        "scope": "financeiro:read"
                      },
                      "paymentTermDays": {
                        "scope": "financeiro:read"
                      }
                    },
                    "contatos.list": {
                      "id": {
                        "scope": "contatos:read"
                      },
                      "prospectId": {
                        "scope": "contatos:read"
                      },
                      "type": {
                        "scope": "contatos:read"
                      },
                      "value": {
                        "scope": "contatos:read"
                      },
                      "normalizedValue": {
                        "scope": "contatos:read"
                      },
                      "areaCode": {
                        "scope": "contatos:read"
                      },
                      "status": {
                        "scope": "contatos:read"
                      },
                      "primary": {
                        "scope": "contatos:read"
                      },
                      "whatsapp": {
                        "scope": "contatos:read"
                      },
                      "source": {
                        "scope": "contatos:read"
                      },
                      "createdAt": {
                        "scope": "contatos:read"
                      },
                      "updatedAt": {
                        "scope": "contatos:read"
                      }
                    },
                    "interacoes.list": {
                      "id": {
                        "scope": "interacoes:read"
                      },
                      "prospectId": {
                        "scope": "interacoes:read"
                      },
                      "userId": {
                        "scope": "interacoes:read"
                      },
                      "userName": {
                        "scope": "interacoes:read"
                      },
                      "type": {
                        "scope": "interacoes:read"
                      },
                      "occurredAt": {
                        "scope": "interacoes:read"
                      },
                      "occurredDate": {
                        "scope": "interacoes:read"
                      },
                      "occurredTime": {
                        "scope": "interacoes:read"
                      },
                      "notes": {
                        "scope": "interacoes:read"
                      },
                      "situation": {
                        "scope": "interacoes:read"
                      },
                      "priority": {
                        "scope": "interacoes:read"
                      },
                      "completed": {
                        "scope": "interacoes:read"
                      },
                      "source": {
                        "scope": "interacoes:read"
                      },
                      "createdAt": {
                        "scope": "interacoes:read"
                      }
                    },
                    "financeiro.list": {
                      "id": {
                        "scope": "financeiro:read"
                      },
                      "prospectId": {
                        "scope": "financeiro:read"
                      },
                      "kind": {
                        "scope": "financeiro:read"
                      },
                      "occurredOn": {
                        "scope": "financeiro:read"
                      },
                      "amount": {
                        "scope": "financeiro:read"
                      },
                      "beneficiary": {
                        "scope": "financeiro:read"
                      },
                      "notes": {
                        "scope": "financeiro:read"
                      },
                      "fromOpening": {
                        "scope": "financeiro:read"
                      },
                      "createdById": {
                        "scope": "financeiro:read"
                      },
                      "createdByName": {
                        "scope": "financeiro:read"
                      },
                      "createdAt": {
                        "scope": "financeiro:read"
                      },
                      "updatedAt": {
                        "scope": "financeiro:read"
                      }
                    },
                    "campanhas.list": {
                      "id": {
                        "scope": "campanhas:read"
                      },
                      "name": {
                        "scope": "campanhas:read"
                      },
                      "productId": {
                        "scope": "campanhas:read"
                      },
                      "productName": {
                        "scope": "campanhas:read"
                      },
                      "status": {
                        "scope": "campanhas:read"
                      },
                      "category": {
                        "scope": "campanhas:read"
                      },
                      "partner": {
                        "scope": "campanhas:read"
                      },
                      "processNumber": {
                        "scope": "campanhas:read"
                      },
                      "active": {
                        "scope": "campanhas:read"
                      },
                      "createdAt": {
                        "scope": "campanhas:read"
                      },
                      "updatedAt": {
                        "scope": "campanhas:read"
                      }
                    },
                    "usuarios.list": {
                      "id": {
                        "scope": "usuarios:read"
                      },
                      "name": {
                        "scope": "usuarios:read"
                      },
                      "active": {
                        "scope": "usuarios:read"
                      },
                      "profiles": {
                        "scope": "usuarios:read"
                      }
                    },
                    "situacoes.list": {
                      "id": {
                        "scope": "situacoes:read"
                      },
                      "name": {
                        "scope": "situacoes:read"
                      },
                      "status": {
                        "scope": "situacoes:read"
                      },
                      "groupName": {
                        "scope": "situacoes:read"
                      },
                      "active": {
                        "scope": "situacoes:read"
                      },
                      "createdAt": {
                        "scope": "situacoes:read"
                      },
                      "updatedAt": {
                        "scope": "situacoes:read"
                      }
                    }
                  },
                  "financialSummary": {
                    "values": [
                      "historicalAmount",
                      "proposalAmount",
                      "maximumProposalAmount",
                      "receivableAmount",
                      "acquisitionAmount",
                      "closingAmount",
                      "paidAmount",
                      "receivedAmount",
                      "settlementAmount",
                      "proposedAt",
                      "signedAt",
                      "paidAt",
                      "receivedAt",
                      "paymentTermDays"
                    ],
                    "details": [
                      "legalNature",
                      "lawyer",
                      "feePercentage",
                      "feeBaseAmount",
                      "feeBaseDescription",
                      "feeExpectedAmount",
                      "feeTreatment",
                      "legacyLawyerPaidAmount",
                      "legacyLawyerPaidAt",
                      "legacyLawyerPaidTreatment",
                      "legacyOriginationPaidAmount",
                      "legacyOriginationPaidAt",
                      "originationPercentage",
                      "originationAmount",
                      "creditorFeesAmount",
                      "taxPercentage",
                      "taxes",
                      "calculationBase",
                      "acquisitionCosts",
                      "cpOrigination",
                      "cpAcquisition",
                      "cpLawyerSuccess",
                      "receivablePercentage",
                      "creditorPayableAmount",
                      "intermediaryAmount",
                      "finalGain",
                      "gainPercentage",
                      "managerReleased",
                      "directorReleased"
                    ],
                    "totals": [
                      "creditor_paid",
                      "lawyer_paid",
                      "origination_paid",
                      "other_paid",
                      "payments",
                      "receipts",
                      "allocated_paid",
                      "allocated_received",
                      "last_paid_at",
                      "last_lawyer_paid_at",
                      "last_received_at"
                    ],
                    "paymentTotals": [
                      "paid",
                      "legacyLawyerPaid",
                      "reconciled",
                      "treatment"
                    ],
                    "opening": [
                      "paid",
                      "received",
                      "paidAt",
                      "receivedAt"
                    ]
                  },
                  "database": "/api/integracoes/v1/dados",
                  "continuous": {
                    "path": "/api/integracoes/v1/acompanhar/NOME_DA_TABELA",
                    "summaries": true,
                    "scope": "dados:read",
                    "transport": "sse",
                    "recovery": "fresh_snapshot",
                    "maxStreamsPerCredential": 3,
                    "maxStreams": 12,
                    "minimumRefreshMs": 2000,
                    "safetyRefreshMs": 60000
                  },
                  "limits": {
                    "defaultPageSize": 50,
                    "maxPageSize": 200,
                    "maxPageSizeByResource": {
                      "creditos": 1000
                    },
                    "requestsPerMinute": 60,
                    "maxConcurrent": 4
                  }
                }
              }
            }
          },
          "400": {
            "description": "Parâmetros ou cursor inválidos. Corrija a consulta antes de repetir.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Chave ausente, inválida, suspensa, revogada, expirada ou organização indisponível. Pare e verifique o acesso com o responsável.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Escopo insuficiente. Confira os escopos autorizados; filtros não concedem acesso.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Recurso, crédito ou documento não disponível para a organização. Confira o catálogo e o identificador.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "405": {
            "description": "Método não permitido. Use GET; a API não recebe gravações ou retornos de SMS.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Snapshot excedeu dois MiB. Reduza campos, página ou filtros do acompanhamento.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "414": {
            "description": "URL de consulta excedeu o limite. Reduza a consulta; limite atual de 16.000 caracteres.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Resumo excedeu o limite de grupos. Restrinja filtros ou agrupamentos; não há resultado parcial.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Limite de requisições, consultas ou streams. Respeite Retry-After e use espera limitada.",
            "headers": {
              "Retry-After": {
                "description": "Quando presente, tempo mínimo antes de tentar novamente.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Falha interna. Registre somente status/código/requestId e contate o responsável; não registre a chave.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "503": {
            "description": "Consulta demorada ou indisponibilidade temporária. Restrinja filtros e use nova tentativa controlada.",
            "headers": {
              "Retry-After": {
                "description": "Quando presente, tempo mínimo antes de tentar novamente.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/": {
      "get": {
        "operationId": "raiz",
        "summary": "Catálogo na raiz",
        "description": "Alias do catálogo de recursos.\n\nEscopos: Qualquer credencial de aplicação válida.",
        "tags": [
          "Recursos amigáveis"
        ],
        "x-required-scopes": [],
        "parameters": [],
        "responses": {
          "200": {
            "description": "Mesmo contrato de /catalogo.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ResourceCatalog"
                },
                "example": {
                  "version": "v1",
                  "readOnly": true,
                  "scopes": [
                    "dados:read"
                  ],
                  "resources": {
                    "creditos.list": {
                      "scope": "creditos:read",
                      "fields": [
                        "id",
                        "legacyId",
                        "legacyProspectId",
                        "legacyContactId",
                        "name",
                        "document",
                        "normalizedDocument",
                        "documentType",
                        "documentValid",
                        "campaignId",
                        "campaignName",
                        "processNumber",
                        "sourceState",
                        "className",
                        "category",
                        "groupName",
                        "situation",
                        "status",
                        "responsibleId",
                        "responsibleName",
                        "closingResponsibleName",
                        "office",
                        "cessionary",
                        "partner",
                        "creditRisk",
                        "paymentType",
                        "proceduralStrategy",
                        "createdAt",
                        "updatedAt",
                        "statusChangedAt",
                        "archivedAt",
                        "historicalAmount",
                        "proposalAmount",
                        "maximumProposalAmount",
                        "receivableAmount",
                        "acquisitionAmount",
                        "closingAmount",
                        "paidAmount",
                        "receivedAmount",
                        "settlementAmount",
                        "proposedAt",
                        "signedAt",
                        "paidAt",
                        "receivedAt",
                        "paymentTermDays"
                      ],
                      "maxPageSize": 1000,
                      "defaultFields": [
                        "id",
                        "legacyId",
                        "name",
                        "document",
                        "documentType",
                        "campaignId",
                        "campaignName",
                        "sourceState",
                        "situation",
                        "status",
                        "responsibleId",
                        "responsibleName",
                        "updatedAt"
                      ],
                      "filters": [
                        "name",
                        "campaignId",
                        "campaignName",
                        "legacyId",
                        "legacyProspectId",
                        "legacyContactId",
                        "document",
                        "situation",
                        "status",
                        "responsibleId",
                        "sourceState",
                        "archived"
                      ]
                    },
                    "creditos.detail": {
                      "scope": "creditos:read",
                      "fields": [
                        "id",
                        "legacyId",
                        "legacyProspectId",
                        "legacyContactId",
                        "name",
                        "document",
                        "normalizedDocument",
                        "documentType",
                        "documentValid",
                        "campaignId",
                        "campaignName",
                        "processNumber",
                        "sourceState",
                        "className",
                        "category",
                        "groupName",
                        "situation",
                        "status",
                        "responsibleId",
                        "responsibleName",
                        "closingResponsibleName",
                        "office",
                        "cessionary",
                        "partner",
                        "creditRisk",
                        "paymentType",
                        "proceduralStrategy",
                        "createdAt",
                        "updatedAt",
                        "statusChangedAt",
                        "archivedAt",
                        "historicalAmount",
                        "proposalAmount",
                        "maximumProposalAmount",
                        "receivableAmount",
                        "acquisitionAmount",
                        "closingAmount",
                        "paidAmount",
                        "receivedAmount",
                        "settlementAmount",
                        "proposedAt",
                        "signedAt",
                        "paidAt",
                        "receivedAt",
                        "paymentTermDays"
                      ],
                      "maxPageSize": 200,
                      "defaultFields": [
                        "id",
                        "legacyId",
                        "legacyProspectId",
                        "legacyContactId",
                        "name",
                        "document",
                        "normalizedDocument",
                        "documentType",
                        "documentValid",
                        "campaignId",
                        "campaignName",
                        "processNumber",
                        "sourceState",
                        "className",
                        "category",
                        "groupName",
                        "situation",
                        "status",
                        "responsibleId",
                        "responsibleName",
                        "closingResponsibleName",
                        "office",
                        "cessionary",
                        "partner",
                        "creditRisk",
                        "paymentType",
                        "proceduralStrategy",
                        "createdAt",
                        "updatedAt",
                        "statusChangedAt",
                        "archivedAt"
                      ],
                      "filters": [
                        "prospectId"
                      ]
                    },
                    "contatos.list": {
                      "scope": "contatos:read",
                      "fields": [
                        "id",
                        "prospectId",
                        "type",
                        "value",
                        "normalizedValue",
                        "areaCode",
                        "status",
                        "primary",
                        "whatsapp",
                        "source",
                        "createdAt",
                        "updatedAt"
                      ],
                      "maxPageSize": 200,
                      "defaultFields": [
                        "id",
                        "prospectId",
                        "type",
                        "value",
                        "normalizedValue",
                        "areaCode",
                        "status",
                        "primary",
                        "whatsapp",
                        "source",
                        "createdAt",
                        "updatedAt"
                      ],
                      "filters": [
                        "prospectId",
                        "type",
                        "status"
                      ]
                    },
                    "interacoes.list": {
                      "scope": "interacoes:read",
                      "fields": [
                        "id",
                        "prospectId",
                        "userId",
                        "userName",
                        "type",
                        "occurredAt",
                        "occurredDate",
                        "occurredTime",
                        "notes",
                        "situation",
                        "priority",
                        "completed",
                        "source",
                        "createdAt"
                      ],
                      "maxPageSize": 200,
                      "defaultFields": [
                        "id",
                        "prospectId",
                        "userId",
                        "userName",
                        "type",
                        "occurredAt",
                        "occurredDate",
                        "occurredTime",
                        "notes",
                        "situation",
                        "priority",
                        "completed",
                        "source",
                        "createdAt"
                      ],
                      "filters": [
                        "prospectId",
                        "userId",
                        "situation",
                        "completed",
                        "type"
                      ]
                    },
                    "financeiro.list": {
                      "scope": "financeiro:read",
                      "fields": [
                        "id",
                        "prospectId",
                        "kind",
                        "occurredOn",
                        "amount",
                        "beneficiary",
                        "notes",
                        "fromOpening",
                        "createdById",
                        "createdByName",
                        "createdAt",
                        "updatedAt"
                      ],
                      "maxPageSize": 200,
                      "defaultFields": [
                        "id",
                        "prospectId",
                        "kind",
                        "occurredOn",
                        "amount",
                        "beneficiary",
                        "notes",
                        "fromOpening",
                        "createdById",
                        "createdByName",
                        "createdAt",
                        "updatedAt"
                      ],
                      "filters": [
                        "prospectId",
                        "kind"
                      ]
                    },
                    "campanhas.list": {
                      "scope": "campanhas:read",
                      "fields": [
                        "id",
                        "name",
                        "productId",
                        "productName",
                        "status",
                        "category",
                        "partner",
                        "processNumber",
                        "active",
                        "createdAt",
                        "updatedAt"
                      ],
                      "maxPageSize": 200,
                      "defaultFields": [
                        "id",
                        "name",
                        "productId",
                        "productName",
                        "status",
                        "category",
                        "partner",
                        "processNumber",
                        "active",
                        "createdAt",
                        "updatedAt"
                      ],
                      "filters": [
                        "name",
                        "status",
                        "active"
                      ]
                    },
                    "usuarios.list": {
                      "scope": "usuarios:read",
                      "fields": [
                        "id",
                        "name",
                        "active",
                        "profiles"
                      ],
                      "maxPageSize": 200,
                      "defaultFields": [
                        "id",
                        "name",
                        "active",
                        "profiles"
                      ],
                      "filters": [
                        "name",
                        "active"
                      ]
                    },
                    "situacoes.list": {
                      "scope": "situacoes:read",
                      "fields": [
                        "id",
                        "name",
                        "status",
                        "groupName",
                        "active",
                        "createdAt",
                        "updatedAt"
                      ],
                      "maxPageSize": 200,
                      "defaultFields": [
                        "id",
                        "name",
                        "status",
                        "groupName",
                        "active",
                        "createdAt",
                        "updatedAt"
                      ],
                      "filters": [
                        "name",
                        "status",
                        "groupName",
                        "active"
                      ]
                    }
                  },
                  "fields": {
                    "creditos.list": {
                      "id": {
                        "scope": "creditos:read"
                      },
                      "legacyId": {
                        "scope": "creditos:read"
                      },
                      "legacyProspectId": {
                        "scope": "creditos:read"
                      },
                      "legacyContactId": {
                        "scope": "creditos:read"
                      },
                      "name": {
                        "scope": "creditos:read"
                      },
                      "document": {
                        "scope": "creditos:read"
                      },
                      "normalizedDocument": {
                        "scope": "creditos:read"
                      },
                      "documentType": {
                        "scope": "creditos:read"
                      },
                      "documentValid": {
                        "scope": "creditos:read"
                      },
                      "campaignId": {
                        "scope": "creditos:read"
                      },
                      "campaignName": {
                        "scope": "creditos:read"
                      },
                      "processNumber": {
                        "scope": "creditos:read"
                      },
                      "sourceState": {
                        "scope": "creditos:read"
                      },
                      "className": {
                        "scope": "creditos:read"
                      },
                      "category": {
                        "scope": "creditos:read"
                      },
                      "groupName": {
                        "scope": "creditos:read"
                      },
                      "situation": {
                        "scope": "creditos:read"
                      },
                      "status": {
                        "scope": "creditos:read"
                      },
                      "responsibleId": {
                        "scope": "creditos:read"
                      },
                      "responsibleName": {
                        "scope": "creditos:read"
                      },
                      "closingResponsibleName": {
                        "scope": "creditos:read"
                      },
                      "office": {
                        "scope": "creditos:read"
                      },
                      "cessionary": {
                        "scope": "creditos:read"
                      },
                      "partner": {
                        "scope": "creditos:read"
                      },
                      "creditRisk": {
                        "scope": "creditos:read"
                      },
                      "paymentType": {
                        "scope": "creditos:read"
                      },
                      "proceduralStrategy": {
                        "scope": "creditos:read"
                      },
                      "createdAt": {
                        "scope": "creditos:read"
                      },
                      "updatedAt": {
                        "scope": "creditos:read"
                      },
                      "statusChangedAt": {
                        "scope": "creditos:read"
                      },
                      "archivedAt": {
                        "scope": "creditos:read"
                      },
                      "historicalAmount": {
                        "scope": "financeiro:read"
                      },
                      "proposalAmount": {
                        "scope": "financeiro:read"
                      },
                      "maximumProposalAmount": {
                        "scope": "financeiro:read"
                      },
                      "receivableAmount": {
                        "scope": "financeiro:read"
                      },
                      "acquisitionAmount": {
                        "scope": "financeiro:read"
                      },
                      "closingAmount": {
                        "scope": "financeiro:read"
                      },
                      "paidAmount": {
                        "scope": "financeiro:read"
                      },
                      "receivedAmount": {
                        "scope": "financeiro:read"
                      },
                      "settlementAmount": {
                        "scope": "financeiro:read"
                      },
                      "proposedAt": {
                        "scope": "financeiro:read"
                      },
                      "signedAt": {
                        "scope": "financeiro:read"
                      },
                      "paidAt": {
                        "scope": "financeiro:read"
                      },
                      "receivedAt": {
                        "scope": "financeiro:read"
                      },
                      "paymentTermDays": {
                        "scope": "financeiro:read"
                      }
                    },
                    "creditos.detail": {
                      "id": {
                        "scope": "creditos:read"
                      },
                      "legacyId": {
                        "scope": "creditos:read"
                      },
                      "legacyProspectId": {
                        "scope": "creditos:read"
                      },
                      "legacyContactId": {
                        "scope": "creditos:read"
                      },
                      "name": {
                        "scope": "creditos:read"
                      },
                      "document": {
                        "scope": "creditos:read"
                      },
                      "normalizedDocument": {
                        "scope": "creditos:read"
                      },
                      "documentType": {
                        "scope": "creditos:read"
                      },
                      "documentValid": {
                        "scope": "creditos:read"
                      },
                      "campaignId": {
                        "scope": "creditos:read"
                      },
                      "campaignName": {
                        "scope": "creditos:read"
                      },
                      "processNumber": {
                        "scope": "creditos:read"
                      },
                      "sourceState": {
                        "scope": "creditos:read"
                      },
                      "className": {
                        "scope": "creditos:read"
                      },
                      "category": {
                        "scope": "creditos:read"
                      },
                      "groupName": {
                        "scope": "creditos:read"
                      },
                      "situation": {
                        "scope": "creditos:read"
                      },
                      "status": {
                        "scope": "creditos:read"
                      },
                      "responsibleId": {
                        "scope": "creditos:read"
                      },
                      "responsibleName": {
                        "scope": "creditos:read"
                      },
                      "closingResponsibleName": {
                        "scope": "creditos:read"
                      },
                      "office": {
                        "scope": "creditos:read"
                      },
                      "cessionary": {
                        "scope": "creditos:read"
                      },
                      "partner": {
                        "scope": "creditos:read"
                      },
                      "creditRisk": {
                        "scope": "creditos:read"
                      },
                      "paymentType": {
                        "scope": "creditos:read"
                      },
                      "proceduralStrategy": {
                        "scope": "creditos:read"
                      },
                      "createdAt": {
                        "scope": "creditos:read"
                      },
                      "updatedAt": {
                        "scope": "creditos:read"
                      },
                      "statusChangedAt": {
                        "scope": "creditos:read"
                      },
                      "archivedAt": {
                        "scope": "creditos:read"
                      },
                      "historicalAmount": {
                        "scope": "financeiro:read"
                      },
                      "proposalAmount": {
                        "scope": "financeiro:read"
                      },
                      "maximumProposalAmount": {
                        "scope": "financeiro:read"
                      },
                      "receivableAmount": {
                        "scope": "financeiro:read"
                      },
                      "acquisitionAmount": {
                        "scope": "financeiro:read"
                      },
                      "closingAmount": {
                        "scope": "financeiro:read"
                      },
                      "paidAmount": {
                        "scope": "financeiro:read"
                      },
                      "receivedAmount": {
                        "scope": "financeiro:read"
                      },
                      "settlementAmount": {
                        "scope": "financeiro:read"
                      },
                      "proposedAt": {
                        "scope": "financeiro:read"
                      },
                      "signedAt": {
                        "scope": "financeiro:read"
                      },
                      "paidAt": {
                        "scope": "financeiro:read"
                      },
                      "receivedAt": {
                        "scope": "financeiro:read"
                      },
                      "paymentTermDays": {
                        "scope": "financeiro:read"
                      }
                    },
                    "contatos.list": {
                      "id": {
                        "scope": "contatos:read"
                      },
                      "prospectId": {
                        "scope": "contatos:read"
                      },
                      "type": {
                        "scope": "contatos:read"
                      },
                      "value": {
                        "scope": "contatos:read"
                      },
                      "normalizedValue": {
                        "scope": "contatos:read"
                      },
                      "areaCode": {
                        "scope": "contatos:read"
                      },
                      "status": {
                        "scope": "contatos:read"
                      },
                      "primary": {
                        "scope": "contatos:read"
                      },
                      "whatsapp": {
                        "scope": "contatos:read"
                      },
                      "source": {
                        "scope": "contatos:read"
                      },
                      "createdAt": {
                        "scope": "contatos:read"
                      },
                      "updatedAt": {
                        "scope": "contatos:read"
                      }
                    },
                    "interacoes.list": {
                      "id": {
                        "scope": "interacoes:read"
                      },
                      "prospectId": {
                        "scope": "interacoes:read"
                      },
                      "userId": {
                        "scope": "interacoes:read"
                      },
                      "userName": {
                        "scope": "interacoes:read"
                      },
                      "type": {
                        "scope": "interacoes:read"
                      },
                      "occurredAt": {
                        "scope": "interacoes:read"
                      },
                      "occurredDate": {
                        "scope": "interacoes:read"
                      },
                      "occurredTime": {
                        "scope": "interacoes:read"
                      },
                      "notes": {
                        "scope": "interacoes:read"
                      },
                      "situation": {
                        "scope": "interacoes:read"
                      },
                      "priority": {
                        "scope": "interacoes:read"
                      },
                      "completed": {
                        "scope": "interacoes:read"
                      },
                      "source": {
                        "scope": "interacoes:read"
                      },
                      "createdAt": {
                        "scope": "interacoes:read"
                      }
                    },
                    "financeiro.list": {
                      "id": {
                        "scope": "financeiro:read"
                      },
                      "prospectId": {
                        "scope": "financeiro:read"
                      },
                      "kind": {
                        "scope": "financeiro:read"
                      },
                      "occurredOn": {
                        "scope": "financeiro:read"
                      },
                      "amount": {
                        "scope": "financeiro:read"
                      },
                      "beneficiary": {
                        "scope": "financeiro:read"
                      },
                      "notes": {
                        "scope": "financeiro:read"
                      },
                      "fromOpening": {
                        "scope": "financeiro:read"
                      },
                      "createdById": {
                        "scope": "financeiro:read"
                      },
                      "createdByName": {
                        "scope": "financeiro:read"
                      },
                      "createdAt": {
                        "scope": "financeiro:read"
                      },
                      "updatedAt": {
                        "scope": "financeiro:read"
                      }
                    },
                    "campanhas.list": {
                      "id": {
                        "scope": "campanhas:read"
                      },
                      "name": {
                        "scope": "campanhas:read"
                      },
                      "productId": {
                        "scope": "campanhas:read"
                      },
                      "productName": {
                        "scope": "campanhas:read"
                      },
                      "status": {
                        "scope": "campanhas:read"
                      },
                      "category": {
                        "scope": "campanhas:read"
                      },
                      "partner": {
                        "scope": "campanhas:read"
                      },
                      "processNumber": {
                        "scope": "campanhas:read"
                      },
                      "active": {
                        "scope": "campanhas:read"
                      },
                      "createdAt": {
                        "scope": "campanhas:read"
                      },
                      "updatedAt": {
                        "scope": "campanhas:read"
                      }
                    },
                    "usuarios.list": {
                      "id": {
                        "scope": "usuarios:read"
                      },
                      "name": {
                        "scope": "usuarios:read"
                      },
                      "active": {
                        "scope": "usuarios:read"
                      },
                      "profiles": {
                        "scope": "usuarios:read"
                      }
                    },
                    "situacoes.list": {
                      "id": {
                        "scope": "situacoes:read"
                      },
                      "name": {
                        "scope": "situacoes:read"
                      },
                      "status": {
                        "scope": "situacoes:read"
                      },
                      "groupName": {
                        "scope": "situacoes:read"
                      },
                      "active": {
                        "scope": "situacoes:read"
                      },
                      "createdAt": {
                        "scope": "situacoes:read"
                      },
                      "updatedAt": {
                        "scope": "situacoes:read"
                      }
                    }
                  },
                  "financialSummary": {
                    "values": [
                      "historicalAmount",
                      "proposalAmount",
                      "maximumProposalAmount",
                      "receivableAmount",
                      "acquisitionAmount",
                      "closingAmount",
                      "paidAmount",
                      "receivedAmount",
                      "settlementAmount",
                      "proposedAt",
                      "signedAt",
                      "paidAt",
                      "receivedAt",
                      "paymentTermDays"
                    ],
                    "details": [
                      "legalNature",
                      "lawyer",
                      "feePercentage",
                      "feeBaseAmount",
                      "feeBaseDescription",
                      "feeExpectedAmount",
                      "feeTreatment",
                      "legacyLawyerPaidAmount",
                      "legacyLawyerPaidAt",
                      "legacyLawyerPaidTreatment",
                      "legacyOriginationPaidAmount",
                      "legacyOriginationPaidAt",
                      "originationPercentage",
                      "originationAmount",
                      "creditorFeesAmount",
                      "taxPercentage",
                      "taxes",
                      "calculationBase",
                      "acquisitionCosts",
                      "cpOrigination",
                      "cpAcquisition",
                      "cpLawyerSuccess",
                      "receivablePercentage",
                      "creditorPayableAmount",
                      "intermediaryAmount",
                      "finalGain",
                      "gainPercentage",
                      "managerReleased",
                      "directorReleased"
                    ],
                    "totals": [
                      "creditor_paid",
                      "lawyer_paid",
                      "origination_paid",
                      "other_paid",
                      "payments",
                      "receipts",
                      "allocated_paid",
                      "allocated_received",
                      "last_paid_at",
                      "last_lawyer_paid_at",
                      "last_received_at"
                    ],
                    "paymentTotals": [
                      "paid",
                      "legacyLawyerPaid",
                      "reconciled",
                      "treatment"
                    ],
                    "opening": [
                      "paid",
                      "received",
                      "paidAt",
                      "receivedAt"
                    ]
                  },
                  "database": "/api/integracoes/v1/dados",
                  "continuous": {
                    "path": "/api/integracoes/v1/acompanhar/NOME_DA_TABELA",
                    "summaries": true,
                    "scope": "dados:read",
                    "transport": "sse",
                    "recovery": "fresh_snapshot",
                    "maxStreamsPerCredential": 3,
                    "maxStreams": 12,
                    "minimumRefreshMs": 2000,
                    "safetyRefreshMs": 60000
                  },
                  "limits": {
                    "defaultPageSize": 50,
                    "maxPageSize": 200,
                    "maxPageSizeByResource": {
                      "creditos": 1000
                    },
                    "requestsPerMinute": 60,
                    "maxConcurrent": 4
                  }
                }
              }
            }
          },
          "400": {
            "description": "Parâmetros ou cursor inválidos. Corrija a consulta antes de repetir.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Chave ausente, inválida, suspensa, revogada, expirada ou organização indisponível. Pare e verifique o acesso com o responsável.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Escopo insuficiente. Confira os escopos autorizados; filtros não concedem acesso.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Recurso, crédito ou documento não disponível para a organização. Confira o catálogo e o identificador.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "405": {
            "description": "Método não permitido. Use GET; a API não recebe gravações ou retornos de SMS.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Snapshot excedeu dois MiB. Reduza campos, página ou filtros do acompanhamento.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "414": {
            "description": "URL de consulta excedeu o limite. Reduza a consulta; limite atual de 16.000 caracteres.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Resumo excedeu o limite de grupos. Restrinja filtros ou agrupamentos; não há resultado parcial.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Limite de requisições, consultas ou streams. Respeite Retry-After e use espera limitada.",
            "headers": {
              "Retry-After": {
                "description": "Quando presente, tempo mínimo antes de tentar novamente.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Falha interna. Registre somente status/código/requestId e contate o responsável; não registre a chave.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "503": {
            "description": "Consulta demorada ou indisponibilidade temporária. Restrinja filtros e use nova tentativa controlada.",
            "headers": {
              "Retry-After": {
                "description": "Quando presente, tempo mínimo antes de tentar novamente.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/creditos": {
      "get": {
        "operationId": "creditos_list",
        "summary": "Créditos e credores",
        "description": "Lista créditos com identificação do credor, campanha, situação e responsável.\n\nEscopos: creditos:read ou dados:read.\n\nOrdenação estável definida pela API; não existe parâmetro de ordenação personalizado.\n\nCampos financeiros exigem também financeiro:read, ou dados:read; solicite-os explicitamente em fields. CPF/CNPJ e códigos legados são strings, preservando zeros.",
        "tags": [
          "Recursos amigáveis"
        ],
        "x-required-scopes": [
          "creditos:read"
        ],
        "parameters": [
          {
            "name": "fields",
            "in": "query",
            "required": false,
            "description": "Campos separados por vírgulas. Use somente nomes do catálogo deste recurso; não aceita SQL, expressões ou joins. Disponíveis: id, legacyId, legacyProspectId, legacyContactId, name, document, normalizedDocument, documentType, documentValid, campaignId, campaignName, processNumber, sourceState, className, category, groupName, situation, status, responsibleId, responsibleName, closingResponsibleName, office, cessionary, partner, creditRisk, paymentType, proceduralStrategy, createdAt, updatedAt, statusChangedAt, archivedAt, historicalAmount, proposalAmount, maximumProposalAmount, receivableAmount, acquisitionAmount, closingAmount, paidAmount, receivedAmount, settlementAmount, proposedAt, signedAt, paidAt, receivedAt, paymentTermDays. Padrão: id, legacyId, name, document, documentType, campaignId, campaignName, sourceState, situation, status, responsibleId, responsibleName, updatedAt.",
            "schema": {
              "type": "string"
            },
            "example": "id,legacyId"
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "Itens por página: de 1 a 1000; padrão 50. Para cargas completas, informe limit=1000 e percorra os cursores.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 1000,
              "default": 50
            },
            "example": 50
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "description": "nextCursor recebido na página anterior. Reenvie a mesma consulta, com os mesmos campos e filtros. Não decodifique, fabrique nem altere o cursor.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "name",
            "in": "query",
            "required": false,
            "description": "Trecho do nome; busca sem distinção entre maiúsculas e minúsculas.",
            "schema": {
              "type": "string"
            },
            "example": "EXEMPLO"
          },
          {
            "name": "campaignId",
            "in": "query",
            "required": false,
            "description": "UUID da campanha; igualdade.",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "example": "11111111-1111-4111-8111-111111111111"
          },
          {
            "name": "campaignName",
            "in": "query",
            "required": false,
            "description": "Trecho do nome da campanha.",
            "schema": {
              "type": "string"
            },
            "example": "EXEMPLO"
          },
          {
            "name": "legacyId",
            "in": "query",
            "required": false,
            "description": "Código legado do vínculo crédito/credor, como string de 1–20 dígitos; igualdade.",
            "schema": {
              "type": "string",
              "pattern": "^\\d{1,20}$"
            },
            "example": "10001"
          },
          {
            "name": "legacyProspectId",
            "in": "query",
            "required": false,
            "description": "Código legado do prospect, como string de 1–20 dígitos; igualdade.",
            "schema": {
              "type": "string",
              "pattern": "^\\d{1,20}$"
            },
            "example": "10001"
          },
          {
            "name": "legacyContactId",
            "in": "query",
            "required": false,
            "description": "Código legado do contato, como string de 1–20 dígitos; igualdade.",
            "schema": {
              "type": "string",
              "pattern": "^\\d{1,20}$"
            },
            "example": "10001"
          },
          {
            "name": "document",
            "in": "query",
            "required": false,
            "description": "Documento textual, preservando zeros iniciais. Compara valor original ou normalizado.",
            "schema": {
              "type": "string"
            },
            "example": "00000000000"
          },
          {
            "name": "situation",
            "in": "query",
            "required": false,
            "description": "Nome exato da situação.",
            "schema": {
              "type": "string"
            },
            "example": "EXEMPLO"
          },
          {
            "name": "status",
            "in": "query",
            "required": false,
            "description": "Status exato do recurso.",
            "schema": {
              "type": "string"
            },
            "example": "EXEMPLO"
          },
          {
            "name": "responsibleId",
            "in": "query",
            "required": false,
            "description": "UUID do responsável.",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "example": "11111111-1111-4111-8111-111111111111"
          },
          {
            "name": "sourceState",
            "in": "query",
            "required": false,
            "description": "Origem do crédito: nao_finalizado, finalizado ou nova_carga.",
            "schema": {
              "type": "string",
              "enum": [
                "nao_finalizado",
                "finalizado",
                "nova_carga"
              ]
            },
            "example": "nao_finalizado"
          },
          {
            "name": "archived",
            "in": "query",
            "required": false,
            "description": "true seleciona arquivados; false seleciona não arquivados. Omitir não aplica esse filtro.",
            "schema": {
              "type": "boolean"
            },
            "example": false
          }
        ],
        "responses": {
          "200": {
            "description": "Página de registros.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CreditPage"
                },
                "example": {
                  "items": [],
                  "pagination": {
                    "limit": 50,
                    "hasMore": false,
                    "nextCursor": null
                  },
                  "consultedAt": "2026-01-01T12:00:00.000Z"
                }
              }
            }
          },
          "400": {
            "description": "Parâmetros ou cursor inválidos. Corrija a consulta antes de repetir.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Chave ausente, inválida, suspensa, revogada, expirada ou organização indisponível. Pare e verifique o acesso com o responsável.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Escopo insuficiente. Confira os escopos autorizados; filtros não concedem acesso.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Recurso, crédito ou documento não disponível para a organização. Confira o catálogo e o identificador.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "405": {
            "description": "Método não permitido. Use GET; a API não recebe gravações ou retornos de SMS.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Snapshot excedeu dois MiB. Reduza campos, página ou filtros do acompanhamento.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "414": {
            "description": "URL de consulta excedeu o limite. Reduza a consulta; limite atual de 16.000 caracteres.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Resumo excedeu o limite de grupos. Restrinja filtros ou agrupamentos; não há resultado parcial.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Limite de requisições, consultas ou streams. Respeite Retry-After e use espera limitada.",
            "headers": {
              "Retry-After": {
                "description": "Quando presente, tempo mínimo antes de tentar novamente.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Falha interna. Registre somente status/código/requestId e contate o responsável; não registre a chave.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "503": {
            "description": "Consulta demorada ou indisponibilidade temporária. Restrinja filtros e use nova tentativa controlada.",
            "headers": {
              "Retry-After": {
                "description": "Quando presente, tempo mínimo antes de tentar novamente.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/creditos/{id}": {
      "get": {
        "operationId": "creditos_detail",
        "summary": "Detalhe de um crédito",
        "description": "Consulta um único crédito pelo UUID. Mantém o envelope de lista, com um item.\n\nEscopos: creditos:read ou dados:read.\n\nOrdenação estável definida pela API; não existe parâmetro de ordenação personalizado.\n\nCampos financeiros exigem também financeiro:read, ou dados:read; solicite-os explicitamente em fields. CPF/CNPJ e códigos legados são strings, preservando zeros.",
        "tags": [
          "Recursos amigáveis"
        ],
        "x-required-scopes": [
          "creditos:read"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "UUID do crédito, obtido no campo id de /creditos. Não é CPF/CNPJ nem código legado.",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "example": "11111111-1111-4111-8111-111111111111"
          },
          {
            "name": "fields",
            "in": "query",
            "required": false,
            "description": "Campos separados por vírgulas. Use somente nomes do catálogo deste recurso; não aceita SQL, expressões ou joins. Disponíveis: id, legacyId, legacyProspectId, legacyContactId, name, document, normalizedDocument, documentType, documentValid, campaignId, campaignName, processNumber, sourceState, className, category, groupName, situation, status, responsibleId, responsibleName, closingResponsibleName, office, cessionary, partner, creditRisk, paymentType, proceduralStrategy, createdAt, updatedAt, statusChangedAt, archivedAt, historicalAmount, proposalAmount, maximumProposalAmount, receivableAmount, acquisitionAmount, closingAmount, paidAmount, receivedAmount, settlementAmount, proposedAt, signedAt, paidAt, receivedAt, paymentTermDays. Padrão: id, legacyId, legacyProspectId, legacyContactId, name, document, normalizedDocument, documentType, documentValid, campaignId, campaignName, processNumber, sourceState, className, category, groupName, situation, status, responsibleId, responsibleName, closingResponsibleName, office, cessionary, partner, creditRisk, paymentType, proceduralStrategy, createdAt, updatedAt, statusChangedAt, archivedAt.",
            "schema": {
              "type": "string"
            },
            "example": "id,legacyId"
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "Aceita 1–200, mas o detalhe sempre retorna no máximo um item.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200,
              "default": 50
            },
            "example": 50
          }
        ],
        "responses": {
          "200": {
            "description": "Um item em items; ausência responde 404.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Page"
                },
                "example": {
                  "items": [
                    {
                      "id": "11111111-1111-4111-8111-111111111111",
                      "name": "CREDOR EXEMPLO"
                    }
                  ],
                  "pagination": {
                    "limit": 1,
                    "hasMore": false,
                    "nextCursor": null
                  },
                  "consultedAt": "2026-01-01T12:00:00.000Z"
                }
              }
            }
          },
          "400": {
            "description": "Parâmetros ou cursor inválidos. Corrija a consulta antes de repetir.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Chave ausente, inválida, suspensa, revogada, expirada ou organização indisponível. Pare e verifique o acesso com o responsável.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Escopo insuficiente. Confira os escopos autorizados; filtros não concedem acesso.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Recurso, crédito ou documento não disponível para a organização. Confira o catálogo e o identificador.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "405": {
            "description": "Método não permitido. Use GET; a API não recebe gravações ou retornos de SMS.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Snapshot excedeu dois MiB. Reduza campos, página ou filtros do acompanhamento.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "414": {
            "description": "URL de consulta excedeu o limite. Reduza a consulta; limite atual de 16.000 caracteres.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Resumo excedeu o limite de grupos. Restrinja filtros ou agrupamentos; não há resultado parcial.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Limite de requisições, consultas ou streams. Respeite Retry-After e use espera limitada.",
            "headers": {
              "Retry-After": {
                "description": "Quando presente, tempo mínimo antes de tentar novamente.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Falha interna. Registre somente status/código/requestId e contate o responsável; não registre a chave.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "503": {
            "description": "Consulta demorada ou indisponibilidade temporária. Restrinja filtros e use nova tentativa controlada.",
            "headers": {
              "Retry-After": {
                "description": "Quando presente, tempo mínimo antes de tentar novamente.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/creditos/{id}/contatos": {
      "get": {
        "operationId": "contatos_list",
        "summary": "Contatos do crédito",
        "description": "Consulta telefones e e-mails ativos quanto à exclusão lógica. Não valida disponibilidade de SMS nem envia mensagens.\n\nEscopos: creditos:read + contatos:read ou dados:read.\n\nOrdenação estável definida pela API; não existe parâmetro de ordenação personalizado.",
        "tags": [
          "Recursos amigáveis"
        ],
        "x-required-scopes": [
          "creditos:read",
          "contatos:read"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "UUID do crédito, obtido no campo id de /creditos. Não é CPF/CNPJ nem código legado.",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "example": "11111111-1111-4111-8111-111111111111"
          },
          {
            "name": "fields",
            "in": "query",
            "required": false,
            "description": "Campos separados por vírgulas. Use somente nomes do catálogo deste recurso; não aceita SQL, expressões ou joins. Disponíveis: id, prospectId, type, value, normalizedValue, areaCode, status, primary, whatsapp, source, createdAt, updatedAt. Padrão: id, prospectId, type, value, normalizedValue, areaCode, status, primary, whatsapp, source, createdAt, updatedAt.",
            "schema": {
              "type": "string"
            },
            "example": "id,prospectId"
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "Itens por página: de 1 a 200; padrão 50.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200,
              "default": 50
            },
            "example": 50
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "description": "nextCursor recebido na página anterior. Reenvie a mesma consulta, com os mesmos campos e filtros. Não decodifique, fabrique nem altere o cursor.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "type",
            "in": "query",
            "required": false,
            "description": "Tipo exato do registro.",
            "schema": {
              "type": "string",
              "enum": [
                "phone",
                "email"
              ]
            },
            "example": "phone"
          },
          {
            "name": "status",
            "in": "query",
            "required": false,
            "description": "Status exato do recurso.",
            "schema": {
              "type": "string"
            },
            "example": "EXEMPLO"
          }
        ],
        "responses": {
          "200": {
            "description": "Página de registros.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Page"
                },
                "example": {
                  "items": [],
                  "pagination": {
                    "limit": 50,
                    "hasMore": false,
                    "nextCursor": null
                  },
                  "consultedAt": "2026-01-01T12:00:00.000Z"
                }
              }
            }
          },
          "400": {
            "description": "Parâmetros ou cursor inválidos. Corrija a consulta antes de repetir.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Chave ausente, inválida, suspensa, revogada, expirada ou organização indisponível. Pare e verifique o acesso com o responsável.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Escopo insuficiente. Confira os escopos autorizados; filtros não concedem acesso.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Recurso, crédito ou documento não disponível para a organização. Confira o catálogo e o identificador.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "405": {
            "description": "Método não permitido. Use GET; a API não recebe gravações ou retornos de SMS.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Snapshot excedeu dois MiB. Reduza campos, página ou filtros do acompanhamento.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "414": {
            "description": "URL de consulta excedeu o limite. Reduza a consulta; limite atual de 16.000 caracteres.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Resumo excedeu o limite de grupos. Restrinja filtros ou agrupamentos; não há resultado parcial.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Limite de requisições, consultas ou streams. Respeite Retry-After e use espera limitada.",
            "headers": {
              "Retry-After": {
                "description": "Quando presente, tempo mínimo antes de tentar novamente.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Falha interna. Registre somente status/código/requestId e contate o responsável; não registre a chave.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "503": {
            "description": "Consulta demorada ou indisponibilidade temporária. Restrinja filtros e use nova tentativa controlada.",
            "headers": {
              "Retry-After": {
                "description": "Quando presente, tempo mínimo antes de tentar novamente.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/creditos/{id}/interacoes": {
      "get": {
        "operationId": "interacoes_list",
        "summary": "Interações do crédito",
        "description": "Consulta interações/FUPs sem exclusão lógica.\n\nEscopos: creditos:read + interacoes:read ou dados:read.\n\nOrdenação estável definida pela API; não existe parâmetro de ordenação personalizado.",
        "tags": [
          "Recursos amigáveis"
        ],
        "x-required-scopes": [
          "creditos:read",
          "interacoes:read"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "UUID do crédito, obtido no campo id de /creditos. Não é CPF/CNPJ nem código legado.",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "example": "11111111-1111-4111-8111-111111111111"
          },
          {
            "name": "fields",
            "in": "query",
            "required": false,
            "description": "Campos separados por vírgulas. Use somente nomes do catálogo deste recurso; não aceita SQL, expressões ou joins. Disponíveis: id, prospectId, userId, userName, type, occurredAt, occurredDate, occurredTime, notes, situation, priority, completed, source, createdAt. Padrão: id, prospectId, userId, userName, type, occurredAt, occurredDate, occurredTime, notes, situation, priority, completed, source, createdAt.",
            "schema": {
              "type": "string"
            },
            "example": "id,prospectId"
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "Itens por página: de 1 a 200; padrão 50.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200,
              "default": 50
            },
            "example": 50
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "description": "nextCursor recebido na página anterior. Reenvie a mesma consulta, com os mesmos campos e filtros. Não decodifique, fabrique nem altere o cursor.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "userId",
            "in": "query",
            "required": false,
            "description": "UUID do usuário da interação.",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "example": "11111111-1111-4111-8111-111111111111"
          },
          {
            "name": "situation",
            "in": "query",
            "required": false,
            "description": "Nome exato da situação.",
            "schema": {
              "type": "string"
            },
            "example": "EXEMPLO"
          },
          {
            "name": "completed",
            "in": "query",
            "required": false,
            "description": "Conclusão da interação: true ou false.",
            "schema": {
              "type": "boolean"
            },
            "example": false
          },
          {
            "name": "type",
            "in": "query",
            "required": false,
            "description": "Tipo exato do registro.",
            "schema": {
              "type": "string"
            },
            "example": "EXEMPLO"
          }
        ],
        "responses": {
          "200": {
            "description": "Página de registros.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Page"
                },
                "example": {
                  "items": [],
                  "pagination": {
                    "limit": 50,
                    "hasMore": false,
                    "nextCursor": null
                  },
                  "consultedAt": "2026-01-01T12:00:00.000Z"
                }
              }
            }
          },
          "400": {
            "description": "Parâmetros ou cursor inválidos. Corrija a consulta antes de repetir.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Chave ausente, inválida, suspensa, revogada, expirada ou organização indisponível. Pare e verifique o acesso com o responsável.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Escopo insuficiente. Confira os escopos autorizados; filtros não concedem acesso.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Recurso, crédito ou documento não disponível para a organização. Confira o catálogo e o identificador.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "405": {
            "description": "Método não permitido. Use GET; a API não recebe gravações ou retornos de SMS.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Snapshot excedeu dois MiB. Reduza campos, página ou filtros do acompanhamento.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "414": {
            "description": "URL de consulta excedeu o limite. Reduza a consulta; limite atual de 16.000 caracteres.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Resumo excedeu o limite de grupos. Restrinja filtros ou agrupamentos; não há resultado parcial.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Limite de requisições, consultas ou streams. Respeite Retry-After e use espera limitada.",
            "headers": {
              "Retry-After": {
                "description": "Quando presente, tempo mínimo antes de tentar novamente.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Falha interna. Registre somente status/código/requestId e contate o responsável; não registre a chave.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "503": {
            "description": "Consulta demorada ou indisponibilidade temporária. Restrinja filtros e use nova tentativa controlada.",
            "headers": {
              "Retry-After": {
                "description": "Quando presente, tempo mínimo antes de tentar novamente.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/creditos/{id}/financeiro": {
      "get": {
        "operationId": "financeiro_list",
        "summary": "Financeiro do crédito",
        "description": "Consulta movimentos financeiros e um resumo da ficha financeira.\n\nEscopos: creditos:read + financeiro:read ou dados:read.\n\nOrdenação estável definida pela API; não existe parâmetro de ordenação personalizado.\n\nitems contém movimentos sem exclusão lógica; summary contém values, details, totals, paymentTotals, ledgerInitialized e opening. O filtro kind e a paginação restringem os movimentos, não o resumo geral da ficha.",
        "tags": [
          "Recursos amigáveis"
        ],
        "x-required-scopes": [
          "creditos:read",
          "financeiro:read"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "UUID do crédito, obtido no campo id de /creditos. Não é CPF/CNPJ nem código legado.",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "example": "11111111-1111-4111-8111-111111111111"
          },
          {
            "name": "fields",
            "in": "query",
            "required": false,
            "description": "Campos separados por vírgulas. Use somente nomes do catálogo deste recurso; não aceita SQL, expressões ou joins. Disponíveis: id, prospectId, kind, occurredOn, amount, beneficiary, notes, fromOpening, createdById, createdByName, createdAt, updatedAt. Padrão: id, prospectId, kind, occurredOn, amount, beneficiary, notes, fromOpening, createdById, createdByName, createdAt, updatedAt.",
            "schema": {
              "type": "string"
            },
            "example": "id,prospectId"
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "Itens por página: de 1 a 200; padrão 50.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200,
              "default": 50
            },
            "example": 50
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "description": "nextCursor recebido na página anterior. Reenvie a mesma consulta, com os mesmos campos e filtros. Não decodifique, fabrique nem altere o cursor.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "kind",
            "in": "query",
            "required": false,
            "description": "Tipo do movimento financeiro: creditor, lawyer, origination, other ou receipt.",
            "schema": {
              "type": "string",
              "enum": [
                "creditor",
                "lawyer",
                "origination",
                "other",
                "receipt"
              ]
            },
            "example": "creditor"
          }
        ],
        "responses": {
          "200": {
            "description": "Página de movimentos e summary financeiro completo.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FinancialPage"
                },
                "example": {
                  "items": [],
                  "pagination": {
                    "limit": 50,
                    "hasMore": false,
                    "nextCursor": null
                  },
                  "consultedAt": "2026-01-01T12:00:00.000Z",
                  "summary": {
                    "prospectId": "11111111-1111-4111-8111-111111111111",
                    "values": {},
                    "details": {},
                    "totals": {},
                    "paymentTotals": {
                      "paid": null,
                      "legacyLawyerPaid": null,
                      "reconciled": true,
                      "treatment": null
                    },
                    "ledgerInitialized": false,
                    "opening": {
                      "paid": null,
                      "received": null,
                      "paidAt": null,
                      "receivedAt": null
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Parâmetros ou cursor inválidos. Corrija a consulta antes de repetir.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Chave ausente, inválida, suspensa, revogada, expirada ou organização indisponível. Pare e verifique o acesso com o responsável.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Escopo insuficiente. Confira os escopos autorizados; filtros não concedem acesso.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Recurso, crédito ou documento não disponível para a organização. Confira o catálogo e o identificador.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "405": {
            "description": "Método não permitido. Use GET; a API não recebe gravações ou retornos de SMS.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Snapshot excedeu dois MiB. Reduza campos, página ou filtros do acompanhamento.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "414": {
            "description": "URL de consulta excedeu o limite. Reduza a consulta; limite atual de 16.000 caracteres.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Resumo excedeu o limite de grupos. Restrinja filtros ou agrupamentos; não há resultado parcial.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Limite de requisições, consultas ou streams. Respeite Retry-After e use espera limitada.",
            "headers": {
              "Retry-After": {
                "description": "Quando presente, tempo mínimo antes de tentar novamente.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Falha interna. Registre somente status/código/requestId e contate o responsável; não registre a chave.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "503": {
            "description": "Consulta demorada ou indisponibilidade temporária. Restrinja filtros e use nova tentativa controlada.",
            "headers": {
              "Retry-After": {
                "description": "Quando presente, tempo mínimo antes de tentar novamente.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/campanhas": {
      "get": {
        "operationId": "campanhas_list",
        "summary": "Campanhas",
        "description": "Lista as campanhas da organização.\n\nEscopos: campanhas:read ou dados:read.\n\nOrdenação estável definida pela API; não existe parâmetro de ordenação personalizado.",
        "tags": [
          "Recursos amigáveis"
        ],
        "x-required-scopes": [
          "campanhas:read"
        ],
        "parameters": [
          {
            "name": "fields",
            "in": "query",
            "required": false,
            "description": "Campos separados por vírgulas. Use somente nomes do catálogo deste recurso; não aceita SQL, expressões ou joins. Disponíveis: id, name, productId, productName, status, category, partner, processNumber, active, createdAt, updatedAt. Padrão: id, name, productId, productName, status, category, partner, processNumber, active, createdAt, updatedAt.",
            "schema": {
              "type": "string"
            },
            "example": "id,name"
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "Itens por página: de 1 a 200; padrão 50.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200,
              "default": 50
            },
            "example": 50
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "description": "nextCursor recebido na página anterior. Reenvie a mesma consulta, com os mesmos campos e filtros. Não decodifique, fabrique nem altere o cursor.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "name",
            "in": "query",
            "required": false,
            "description": "Trecho do nome; busca sem distinção entre maiúsculas e minúsculas.",
            "schema": {
              "type": "string"
            },
            "example": "EXEMPLO"
          },
          {
            "name": "status",
            "in": "query",
            "required": false,
            "description": "Status exato do recurso.",
            "schema": {
              "type": "string"
            },
            "example": "EXEMPLO"
          },
          {
            "name": "active",
            "in": "query",
            "required": false,
            "description": "Situação ativa: true ou false. Omitir não restringe.",
            "schema": {
              "type": "boolean"
            },
            "example": false
          }
        ],
        "responses": {
          "200": {
            "description": "Página de registros.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Page"
                },
                "example": {
                  "items": [],
                  "pagination": {
                    "limit": 50,
                    "hasMore": false,
                    "nextCursor": null
                  },
                  "consultedAt": "2026-01-01T12:00:00.000Z"
                }
              }
            }
          },
          "400": {
            "description": "Parâmetros ou cursor inválidos. Corrija a consulta antes de repetir.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Chave ausente, inválida, suspensa, revogada, expirada ou organização indisponível. Pare e verifique o acesso com o responsável.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Escopo insuficiente. Confira os escopos autorizados; filtros não concedem acesso.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Recurso, crédito ou documento não disponível para a organização. Confira o catálogo e o identificador.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "405": {
            "description": "Método não permitido. Use GET; a API não recebe gravações ou retornos de SMS.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Snapshot excedeu dois MiB. Reduza campos, página ou filtros do acompanhamento.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "414": {
            "description": "URL de consulta excedeu o limite. Reduza a consulta; limite atual de 16.000 caracteres.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Resumo excedeu o limite de grupos. Restrinja filtros ou agrupamentos; não há resultado parcial.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Limite de requisições, consultas ou streams. Respeite Retry-After e use espera limitada.",
            "headers": {
              "Retry-After": {
                "description": "Quando presente, tempo mínimo antes de tentar novamente.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Falha interna. Registre somente status/código/requestId e contate o responsável; não registre a chave.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "503": {
            "description": "Consulta demorada ou indisponibilidade temporária. Restrinja filtros e use nova tentativa controlada.",
            "headers": {
              "Retry-After": {
                "description": "Quando presente, tempo mínimo antes de tentar novamente.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/usuarios": {
      "get": {
        "operationId": "usuarios_list",
        "summary": "Usuários",
        "description": "Lista identificação, atividade e perfis dos usuários; não fornece autenticação do CRM.\n\nEscopos: usuarios:read ou dados:read.\n\nOrdenação estável definida pela API; não existe parâmetro de ordenação personalizado.",
        "tags": [
          "Recursos amigáveis"
        ],
        "x-required-scopes": [
          "usuarios:read"
        ],
        "parameters": [
          {
            "name": "fields",
            "in": "query",
            "required": false,
            "description": "Campos separados por vírgulas. Use somente nomes do catálogo deste recurso; não aceita SQL, expressões ou joins. Disponíveis: id, name, active, profiles. Padrão: id, name, active, profiles.",
            "schema": {
              "type": "string"
            },
            "example": "id,name"
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "Itens por página: de 1 a 200; padrão 50.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200,
              "default": 50
            },
            "example": 50
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "description": "nextCursor recebido na página anterior. Reenvie a mesma consulta, com os mesmos campos e filtros. Não decodifique, fabrique nem altere o cursor.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "name",
            "in": "query",
            "required": false,
            "description": "Trecho do nome; busca sem distinção entre maiúsculas e minúsculas.",
            "schema": {
              "type": "string"
            },
            "example": "EXEMPLO"
          },
          {
            "name": "active",
            "in": "query",
            "required": false,
            "description": "Situação ativa: true ou false. Omitir não restringe.",
            "schema": {
              "type": "boolean"
            },
            "example": false
          }
        ],
        "responses": {
          "200": {
            "description": "Página de registros.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Page"
                },
                "example": {
                  "items": [],
                  "pagination": {
                    "limit": 50,
                    "hasMore": false,
                    "nextCursor": null
                  },
                  "consultedAt": "2026-01-01T12:00:00.000Z"
                }
              }
            }
          },
          "400": {
            "description": "Parâmetros ou cursor inválidos. Corrija a consulta antes de repetir.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Chave ausente, inválida, suspensa, revogada, expirada ou organização indisponível. Pare e verifique o acesso com o responsável.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Escopo insuficiente. Confira os escopos autorizados; filtros não concedem acesso.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Recurso, crédito ou documento não disponível para a organização. Confira o catálogo e o identificador.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "405": {
            "description": "Método não permitido. Use GET; a API não recebe gravações ou retornos de SMS.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Snapshot excedeu dois MiB. Reduza campos, página ou filtros do acompanhamento.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "414": {
            "description": "URL de consulta excedeu o limite. Reduza a consulta; limite atual de 16.000 caracteres.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Resumo excedeu o limite de grupos. Restrinja filtros ou agrupamentos; não há resultado parcial.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Limite de requisições, consultas ou streams. Respeite Retry-After e use espera limitada.",
            "headers": {
              "Retry-After": {
                "description": "Quando presente, tempo mínimo antes de tentar novamente.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Falha interna. Registre somente status/código/requestId e contate o responsável; não registre a chave.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "503": {
            "description": "Consulta demorada ou indisponibilidade temporária. Restrinja filtros e use nova tentativa controlada.",
            "headers": {
              "Retry-After": {
                "description": "Quando presente, tempo mínimo antes de tentar novamente.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/situacoes": {
      "get": {
        "operationId": "situacoes_list",
        "summary": "Situações",
        "description": "Lista situações, status e grupos cadastrados.\n\nEscopos: situacoes:read ou dados:read.\n\nOrdenação estável definida pela API; não existe parâmetro de ordenação personalizado.",
        "tags": [
          "Recursos amigáveis"
        ],
        "x-required-scopes": [
          "situacoes:read"
        ],
        "parameters": [
          {
            "name": "fields",
            "in": "query",
            "required": false,
            "description": "Campos separados por vírgulas. Use somente nomes do catálogo deste recurso; não aceita SQL, expressões ou joins. Disponíveis: id, name, status, groupName, active, createdAt, updatedAt. Padrão: id, name, status, groupName, active, createdAt, updatedAt.",
            "schema": {
              "type": "string"
            },
            "example": "id,name"
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "Itens por página: de 1 a 200; padrão 50.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200,
              "default": 50
            },
            "example": 50
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "description": "nextCursor recebido na página anterior. Reenvie a mesma consulta, com os mesmos campos e filtros. Não decodifique, fabrique nem altere o cursor.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "name",
            "in": "query",
            "required": false,
            "description": "Trecho do nome; busca sem distinção entre maiúsculas e minúsculas.",
            "schema": {
              "type": "string"
            },
            "example": "EXEMPLO"
          },
          {
            "name": "status",
            "in": "query",
            "required": false,
            "description": "Status exato do recurso.",
            "schema": {
              "type": "string"
            },
            "example": "EXEMPLO"
          },
          {
            "name": "groupName",
            "in": "query",
            "required": false,
            "description": "Nome exato do grupo.",
            "schema": {
              "type": "string"
            },
            "example": "EXEMPLO"
          },
          {
            "name": "active",
            "in": "query",
            "required": false,
            "description": "Situação ativa: true ou false. Omitir não restringe.",
            "schema": {
              "type": "boolean"
            },
            "example": false
          }
        ],
        "responses": {
          "200": {
            "description": "Página de registros.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Page"
                },
                "example": {
                  "items": [],
                  "pagination": {
                    "limit": 50,
                    "hasMore": false,
                    "nextCursor": null
                  },
                  "consultedAt": "2026-01-01T12:00:00.000Z"
                }
              }
            }
          },
          "400": {
            "description": "Parâmetros ou cursor inválidos. Corrija a consulta antes de repetir.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Chave ausente, inválida, suspensa, revogada, expirada ou organização indisponível. Pare e verifique o acesso com o responsável.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Escopo insuficiente. Confira os escopos autorizados; filtros não concedem acesso.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Recurso, crédito ou documento não disponível para a organização. Confira o catálogo e o identificador.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "405": {
            "description": "Método não permitido. Use GET; a API não recebe gravações ou retornos de SMS.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Snapshot excedeu dois MiB. Reduza campos, página ou filtros do acompanhamento.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "414": {
            "description": "URL de consulta excedeu o limite. Reduza a consulta; limite atual de 16.000 caracteres.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Resumo excedeu o limite de grupos. Restrinja filtros ou agrupamentos; não há resultado parcial.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Limite de requisições, consultas ou streams. Respeite Retry-After e use espera limitada.",
            "headers": {
              "Retry-After": {
                "description": "Quando presente, tempo mínimo antes de tentar novamente.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Falha interna. Registre somente status/código/requestId e contate o responsável; não registre a chave.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "503": {
            "description": "Consulta demorada ou indisponibilidade temporária. Restrinja filtros e use nova tentativa controlada.",
            "headers": {
              "Retry-After": {
                "description": "Quando presente, tempo mínimo antes de tentar novamente.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/dados": {
      "get": {
        "operationId": "dados_catalogo",
        "summary": "Catálogo de tabelas",
        "description": "Descobre tabelas, campos, tipos, operadores e relações. Use somente entradas e colunas com available=true.\n\nEscopos: dados:read.",
        "tags": [
          "Tabelas e resumos"
        ],
        "x-required-scopes": [
          "dados:read"
        ],
        "parameters": [],
        "responses": {
          "200": {
            "description": "Objeto {tables:[...]}. Este download público documenta apenas os recursos disponíveis; a resposta autenticada também pode identificar recursos indisponíveis.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DatabaseCatalog"
                },
                "example": {
                  "tables": [
                    {
                      "name": "prospects",
                      "available": true,
                      "fields": [
                        "prospect_id",
                        "creditor_name"
                      ]
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Parâmetros ou cursor inválidos. Corrija a consulta antes de repetir.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Chave ausente, inválida, suspensa, revogada, expirada ou organização indisponível. Pare e verifique o acesso com o responsável.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Escopo insuficiente. Confira os escopos autorizados; filtros não concedem acesso.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Recurso, crédito ou documento não disponível para a organização. Confira o catálogo e o identificador.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "405": {
            "description": "Método não permitido. Use GET; a API não recebe gravações ou retornos de SMS.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Snapshot excedeu dois MiB. Reduza campos, página ou filtros do acompanhamento.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "414": {
            "description": "URL de consulta excedeu o limite. Reduza a consulta; limite atual de 16.000 caracteres.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Resumo excedeu o limite de grupos. Restrinja filtros ou agrupamentos; não há resultado parcial.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Limite de requisições, consultas ou streams. Respeite Retry-After e use espera limitada.",
            "headers": {
              "Retry-After": {
                "description": "Quando presente, tempo mínimo antes de tentar novamente.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Falha interna. Registre somente status/código/requestId e contate o responsável; não registre a chave.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "503": {
            "description": "Consulta demorada ou indisponibilidade temporária. Restrinja filtros e use nova tentativa controlada.",
            "headers": {
              "Retry-After": {
                "description": "Quando presente, tempo mínimo antes de tentar novamente.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/dados/{tabela}": {
      "get": {
        "operationId": "dados_consulta",
        "summary": "Consultar uma tabela",
        "description": "Consulta os campos disponíveis de uma tabela de negócio, com paginação e filtros. Não executa SQL fornecido pelo consumidor.\n\nEscopos: dados:read.\n\nTodas as condições são combinadas por E. Campos/operadores devem existir no catálogo.\n\nA consulta universal inclui registros com exclusão lógica; filtre deleted_at isNull quando essa for a regra desejada.\n\nRelações são referências para o consumidor; a API não recebe joins.",
        "tags": [
          "Tabelas e resumos"
        ],
        "x-required-scopes": [
          "dados:read"
        ],
        "parameters": [
          {
            "name": "tabela",
            "in": "path",
            "required": true,
            "description": "Nome de uma tabela disponível no catálogo público.",
            "schema": {
              "type": "string",
              "enum": [
                "audit_events",
                "bulk_operations",
                "campaign_documents",
                "campaigns",
                "document_types",
                "generated_documents",
                "import_batch_reviews",
                "import_batch_rows",
                "import_batches",
                "import_contact_lookups",
                "migration_sources",
                "organizations",
                "permissions",
                "phone_contact_attempts",
                "products",
                "prospect_contact_lookups",
                "prospect_documents",
                "prospect_emails",
                "prospect_financial_movement_documents",
                "prospect_financial_movements",
                "prospect_financial_profiles",
                "prospect_financial_totals",
                "prospect_interactions",
                "prospect_phones",
                "prospect_values",
                "prospects",
                "queue_notifications",
                "role_permissions",
                "roles",
                "situation_definitions",
                "situation_fup_role_permissions",
                "situation_role_visibility",
                "user_annual_goals",
                "user_legacy_aliases",
                "user_roles",
                "users",
                "work_tasks"
              ]
            },
            "example": "prospects"
          },
          {
            "name": "fields",
            "in": "query",
            "required": false,
            "description": "Campos separados por vírgulas. Use somente nomes do catálogo deste recurso; não aceita SQL, expressões ou joins. Omitir retorna todos os campos disponíveis da tabela.",
            "schema": {
              "type": "string",
              "maxLength": 5000
            },
            "example": "prospect_id,creditor_name,situation"
          },
          {
            "name": "filters",
            "in": "query",
            "required": false,
            "description": "Array JSON com até 20 condições combinadas por E. Cada condição contém field, op e value. Use URLSearchParams/URL encoding; operadores dependem de columns[].operators. in aceita 1–100 valores; isNull usa true/false; decimais e inteiros extensos devem ser strings.",
            "schema": {
              "type": "string",
              "maxLength": 12000
            },
            "example": "[{\"field\":\"prospect_id\",\"op\":\"eq\",\"value\":\"11111111-1111-4111-8111-111111111111\"}]"
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "Itens por página: de 1 a 200; padrão 50.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200,
              "default": 50
            },
            "example": 50
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "description": "nextCursor recebido na página anterior. Reenvie a mesma consulta, com os mesmos campos e filtros. Não decodifique, fabrique nem altere o cursor.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Página de registros com os campos solicitados.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Page"
                },
                "example": {
                  "items": [],
                  "pagination": {
                    "limit": 50,
                    "hasMore": false,
                    "nextCursor": null
                  },
                  "consultedAt": "2026-01-01T12:00:00.000Z"
                }
              }
            }
          },
          "400": {
            "description": "Parâmetros ou cursor inválidos. Corrija a consulta antes de repetir.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Chave ausente, inválida, suspensa, revogada, expirada ou organização indisponível. Pare e verifique o acesso com o responsável.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Escopo insuficiente. Confira os escopos autorizados; filtros não concedem acesso.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Recurso, crédito ou documento não disponível para a organização. Confira o catálogo e o identificador.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "405": {
            "description": "Método não permitido. Use GET; a API não recebe gravações ou retornos de SMS.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Snapshot excedeu dois MiB. Reduza campos, página ou filtros do acompanhamento.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "414": {
            "description": "URL de consulta excedeu o limite. Reduza a consulta; limite atual de 16.000 caracteres.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Resumo excedeu o limite de grupos. Restrinja filtros ou agrupamentos; não há resultado parcial.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Limite de requisições, consultas ou streams. Respeite Retry-After e use espera limitada.",
            "headers": {
              "Retry-After": {
                "description": "Quando presente, tempo mínimo antes de tentar novamente.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Falha interna. Registre somente status/código/requestId e contate o responsável; não registre a chave.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "503": {
            "description": "Consulta demorada ou indisponibilidade temporária. Restrinja filtros e use nova tentativa controlada.",
            "headers": {
              "Retry-After": {
                "description": "Quando presente, tempo mínimo antes de tentar novamente.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/dados/{tabela}/resumo": {
      "get": {
        "operationId": "dados_resumo",
        "summary": "Resumo de uma tabela",
        "description": "Calcula contagens, somas, médias, mínimos e máximos com os mesmos filtros e isolamento da consulta de tabela.\n\nEscopos: dados:read.\n\nAo ultrapassar limit, retorna 422 AGGREGATION_TOO_LARGE sem resultado parcial.\n\ncount sem field conta linhas; com field conta valores não nulos. Agrupamentos nulos são permitidos. min/max de UUID, booleano e inet usam ordem textual.",
        "tags": [
          "Tabelas e resumos"
        ],
        "x-required-scopes": [
          "dados:read"
        ],
        "parameters": [
          {
            "name": "tabela",
            "in": "path",
            "required": true,
            "description": "Nome de uma tabela disponível no catálogo público.",
            "schema": {
              "type": "string",
              "enum": [
                "audit_events",
                "bulk_operations",
                "campaign_documents",
                "campaigns",
                "document_types",
                "generated_documents",
                "import_batch_reviews",
                "import_batch_rows",
                "import_batches",
                "import_contact_lookups",
                "migration_sources",
                "organizations",
                "permissions",
                "phone_contact_attempts",
                "products",
                "prospect_contact_lookups",
                "prospect_documents",
                "prospect_emails",
                "prospect_financial_movement_documents",
                "prospect_financial_movements",
                "prospect_financial_profiles",
                "prospect_financial_totals",
                "prospect_interactions",
                "prospect_phones",
                "prospect_values",
                "prospects",
                "queue_notifications",
                "role_permissions",
                "roles",
                "situation_definitions",
                "situation_fup_role_permissions",
                "situation_role_visibility",
                "user_annual_goals",
                "user_legacy_aliases",
                "user_roles",
                "users",
                "work_tasks"
              ]
            },
            "example": "prospects"
          },
          {
            "name": "filters",
            "in": "query",
            "required": false,
            "description": "Array JSON com até 20 condições combinadas por E. Cada condição contém field, op e value. Use URLSearchParams/URL encoding; operadores dependem de columns[].operators. in aceita 1–100 valores; isNull usa true/false; decimais e inteiros extensos devem ser strings.",
            "schema": {
              "type": "string",
              "maxLength": 12000
            },
            "example": "[{\"field\":\"prospect_id\",\"op\":\"eq\",\"value\":\"11111111-1111-4111-8111-111111111111\"}]"
          },
          {
            "name": "groupBy",
            "in": "query",
            "required": false,
            "description": "Até 3 campos distintos separados por vírgulas. Omitir produz um resumo geral. Campos JSON não podem agrupar.",
            "schema": {
              "type": "string",
              "maxLength": 1000
            },
            "example": "situation"
          },
          {
            "name": "metrics",
            "in": "query",
            "required": false,
            "description": "Array JSON com 1–10 métricas {fn,field?,as}. fn: count, sum, avg, min ou max. Somente count pode omitir field. sum/avg exigem campo numérico. as: letra minúscula inicial, até 63 letras minúsculas/dígitos/_. Sem JSON como métrica. Padrão: [{\"fn\":\"count\",\"as\":\"count\"}].",
            "schema": {
              "type": "string",
              "maxLength": 5000
            },
            "example": "[{\"fn\":\"count\",\"as\":\"quantidade\"}]"
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "Máximo de grupos, de 1 a 200; padrão 200. Exceder esse limite resulta em 422, sem resumo parcial.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200,
              "default": 200
            },
            "example": 200
          }
        ],
        "responses": {
          "200": {
            "description": "Grupos e métricas. Todas as métricas são strings ou null; não há cursor.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Page"
                },
                "example": {
                  "items": [
                    {
                      "quantidade": "0"
                    }
                  ],
                  "pagination": {
                    "limit": 200,
                    "hasMore": false,
                    "nextCursor": null
                  },
                  "consultedAt": "2026-01-01T12:00:00.000Z"
                }
              }
            }
          },
          "400": {
            "description": "Parâmetros ou cursor inválidos. Corrija a consulta antes de repetir.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Chave ausente, inválida, suspensa, revogada, expirada ou organização indisponível. Pare e verifique o acesso com o responsável.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Escopo insuficiente. Confira os escopos autorizados; filtros não concedem acesso.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Recurso, crédito ou documento não disponível para a organização. Confira o catálogo e o identificador.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "405": {
            "description": "Método não permitido. Use GET; a API não recebe gravações ou retornos de SMS.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Snapshot excedeu dois MiB. Reduza campos, página ou filtros do acompanhamento.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "414": {
            "description": "URL de consulta excedeu o limite. Reduza a consulta; limite atual de 16.000 caracteres.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Resumo excedeu o limite de grupos. Restrinja filtros ou agrupamentos; não há resultado parcial.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Limite de requisições, consultas ou streams. Respeite Retry-After e use espera limitada.",
            "headers": {
              "Retry-After": {
                "description": "Quando presente, tempo mínimo antes de tentar novamente.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Falha interna. Registre somente status/código/requestId e contate o responsável; não registre a chave.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "503": {
            "description": "Consulta demorada ou indisponibilidade temporária. Restrinja filtros e use nova tentativa controlada.",
            "headers": {
              "Retry-After": {
                "description": "Quando presente, tempo mínimo antes de tentar novamente.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/acompanhar/{tabela}": {
      "get": {
        "operationId": "acompanhar_tabela",
        "summary": "Acompanhar uma consulta",
        "description": "Mantém uma conexão SSE e envia snapshots completos do resultado atual da consulta selecionada.\n\nEscopos: dados:read.\n\nEnvie Accept: text/event-stream e Authorization no cabeçalho; EventSource nativo não aceita cabeçalho Bearer personalizado.\n\nSubstitua o resultado anterior pelo snapshot. Não concatene snapshots nem interprete cada evento como uma linha alterada.\n\nCada conexão acompanha somente o resultado/página selecionado; sem cursor, acompanha a primeira página. Não replica automaticamente a tabela inteira.\n\nReconectar obtém o estado atual; Last-Event-ID não reproduz histórico. Estados intermediários podem não ser enviados.\n\nHeartbeats não são alterações. Mínimo de 2 segundos entre reavaliações, mais o tempo da consulta; verificação de segurança a cada 60 segundos. Resultados idênticos não geram novos snapshots.\n\nRevogação, organização inativa, escopos e validade são reavaliados durante a conexão. Erros permanentes não devem provocar reconexão automática.",
        "tags": [
          "Acompanhamento"
        ],
        "x-required-scopes": [
          "dados:read"
        ],
        "parameters": [
          {
            "name": "tabela",
            "in": "path",
            "required": true,
            "description": "Nome de uma tabela disponível no catálogo público.",
            "schema": {
              "type": "string",
              "enum": [
                "audit_events",
                "bulk_operations",
                "campaign_documents",
                "campaigns",
                "document_types",
                "generated_documents",
                "import_batch_reviews",
                "import_batch_rows",
                "import_batches",
                "import_contact_lookups",
                "migration_sources",
                "organizations",
                "permissions",
                "phone_contact_attempts",
                "products",
                "prospect_contact_lookups",
                "prospect_documents",
                "prospect_emails",
                "prospect_financial_movement_documents",
                "prospect_financial_movements",
                "prospect_financial_profiles",
                "prospect_financial_totals",
                "prospect_interactions",
                "prospect_phones",
                "prospect_values",
                "prospects",
                "queue_notifications",
                "role_permissions",
                "roles",
                "situation_definitions",
                "situation_fup_role_permissions",
                "situation_role_visibility",
                "user_annual_goals",
                "user_legacy_aliases",
                "user_roles",
                "users",
                "work_tasks"
              ]
            },
            "example": "prospects"
          },
          {
            "name": "fields",
            "in": "query",
            "required": false,
            "description": "Campos separados por vírgulas. Use somente nomes do catálogo deste recurso; não aceita SQL, expressões ou joins. Omitir retorna todos os campos disponíveis da tabela.",
            "schema": {
              "type": "string",
              "maxLength": 5000
            },
            "example": "prospect_id,creditor_name,situation"
          },
          {
            "name": "filters",
            "in": "query",
            "required": false,
            "description": "Array JSON com até 20 condições combinadas por E. Cada condição contém field, op e value. Use URLSearchParams/URL encoding; operadores dependem de columns[].operators. in aceita 1–100 valores; isNull usa true/false; decimais e inteiros extensos devem ser strings.",
            "schema": {
              "type": "string",
              "maxLength": 12000
            },
            "example": "[{\"field\":\"prospect_id\",\"op\":\"eq\",\"value\":\"11111111-1111-4111-8111-111111111111\"}]"
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "Itens por página: de 1 a 200; padrão 50.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200,
              "default": 50
            },
            "example": 50
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "description": "nextCursor recebido na página anterior. Reenvie a mesma consulta, com os mesmos campos e filtros. Não decodifique, fabrique nem altere o cursor.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "event: snapshot com {result,refreshedAt}; event: error com {error:{code,message}} após abrir a conexão.",
            "content": {
              "text/event-stream": {
                "schema": {
                  "type": "string",
                  "description": "Fluxo de eventos SSE snapshot/error e comentários heartbeat."
                },
                "example": "event: snapshot\ndata: {\"result\":{\"items\":[],\"pagination\":{\"limit\":50,\"hasMore\":false,\"nextCursor\":null},\"consultedAt\":\"2026-01-01T12:00:00.000Z\"},\"refreshedAt\":\"2026-01-01T12:00:00.000Z\"}\n\n"
              }
            }
          },
          "400": {
            "description": "Parâmetros ou cursor inválidos. Corrija a consulta antes de repetir.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Chave ausente, inválida, suspensa, revogada, expirada ou organização indisponível. Pare e verifique o acesso com o responsável.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Escopo insuficiente. Confira os escopos autorizados; filtros não concedem acesso.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Recurso, crédito ou documento não disponível para a organização. Confira o catálogo e o identificador.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "405": {
            "description": "Método não permitido. Use GET; a API não recebe gravações ou retornos de SMS.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Snapshot excedeu dois MiB. Reduza campos, página ou filtros do acompanhamento.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "414": {
            "description": "URL de consulta excedeu o limite. Reduza a consulta; limite atual de 16.000 caracteres.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Resumo excedeu o limite de grupos. Restrinja filtros ou agrupamentos; não há resultado parcial.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Limite de requisições, consultas ou streams. Respeite Retry-After e use espera limitada.",
            "headers": {
              "Retry-After": {
                "description": "Quando presente, tempo mínimo antes de tentar novamente.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Falha interna. Registre somente status/código/requestId e contate o responsável; não registre a chave.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "503": {
            "description": "Consulta demorada ou indisponibilidade temporária. Restrinja filtros e use nova tentativa controlada.",
            "headers": {
              "Retry-After": {
                "description": "Quando presente, tempo mínimo antes de tentar novamente.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/acompanhar/{tabela}/resumo": {
      "get": {
        "operationId": "acompanhar_resumo",
        "summary": "Acompanhar um resumo",
        "description": "Mantém uma conexão SSE e envia snapshots completos do resultado atual da consulta selecionada.\n\nEscopos: dados:read.\n\nEnvie Accept: text/event-stream e Authorization no cabeçalho; EventSource nativo não aceita cabeçalho Bearer personalizado.\n\nSubstitua o resultado anterior pelo snapshot. Não concatene snapshots nem interprete cada evento como uma linha alterada.\n\nCada conexão acompanha somente o resultado/página selecionado; sem cursor, acompanha a primeira página. Não replica automaticamente a tabela inteira.\n\nReconectar obtém o estado atual; Last-Event-ID não reproduz histórico. Estados intermediários podem não ser enviados.\n\nHeartbeats não são alterações. Mínimo de 2 segundos entre reavaliações, mais o tempo da consulta; verificação de segurança a cada 60 segundos. Resultados idênticos não geram novos snapshots.\n\nRevogação, organização inativa, escopos e validade são reavaliados durante a conexão. Erros permanentes não devem provocar reconexão automática.",
        "tags": [
          "Acompanhamento"
        ],
        "x-required-scopes": [
          "dados:read"
        ],
        "parameters": [
          {
            "name": "tabela",
            "in": "path",
            "required": true,
            "description": "Nome de uma tabela disponível no catálogo público.",
            "schema": {
              "type": "string",
              "enum": [
                "audit_events",
                "bulk_operations",
                "campaign_documents",
                "campaigns",
                "document_types",
                "generated_documents",
                "import_batch_reviews",
                "import_batch_rows",
                "import_batches",
                "import_contact_lookups",
                "migration_sources",
                "organizations",
                "permissions",
                "phone_contact_attempts",
                "products",
                "prospect_contact_lookups",
                "prospect_documents",
                "prospect_emails",
                "prospect_financial_movement_documents",
                "prospect_financial_movements",
                "prospect_financial_profiles",
                "prospect_financial_totals",
                "prospect_interactions",
                "prospect_phones",
                "prospect_values",
                "prospects",
                "queue_notifications",
                "role_permissions",
                "roles",
                "situation_definitions",
                "situation_fup_role_permissions",
                "situation_role_visibility",
                "user_annual_goals",
                "user_legacy_aliases",
                "user_roles",
                "users",
                "work_tasks"
              ]
            },
            "example": "prospects"
          },
          {
            "name": "filters",
            "in": "query",
            "required": false,
            "description": "Array JSON com até 20 condições combinadas por E. Cada condição contém field, op e value. Use URLSearchParams/URL encoding; operadores dependem de columns[].operators. in aceita 1–100 valores; isNull usa true/false; decimais e inteiros extensos devem ser strings.",
            "schema": {
              "type": "string",
              "maxLength": 12000
            },
            "example": "[{\"field\":\"prospect_id\",\"op\":\"eq\",\"value\":\"11111111-1111-4111-8111-111111111111\"}]"
          },
          {
            "name": "groupBy",
            "in": "query",
            "required": false,
            "description": "Até 3 campos distintos separados por vírgulas. Omitir produz um resumo geral. Campos JSON não podem agrupar.",
            "schema": {
              "type": "string",
              "maxLength": 1000
            },
            "example": "situation"
          },
          {
            "name": "metrics",
            "in": "query",
            "required": false,
            "description": "Array JSON com 1–10 métricas {fn,field?,as}. fn: count, sum, avg, min ou max. Somente count pode omitir field. sum/avg exigem campo numérico. as: letra minúscula inicial, até 63 letras minúsculas/dígitos/_. Sem JSON como métrica. Padrão: [{\"fn\":\"count\",\"as\":\"count\"}].",
            "schema": {
              "type": "string",
              "maxLength": 5000
            },
            "example": "[{\"fn\":\"count\",\"as\":\"quantidade\"}]"
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "Máximo de grupos, de 1 a 200; padrão 200. Exceder esse limite resulta em 422, sem resumo parcial.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200,
              "default": 200
            },
            "example": 200
          }
        ],
        "responses": {
          "200": {
            "description": "event: snapshot com {result,refreshedAt}; event: error com {error:{code,message}} após abrir a conexão.",
            "content": {
              "text/event-stream": {
                "schema": {
                  "type": "string",
                  "description": "Fluxo de eventos SSE snapshot/error e comentários heartbeat."
                },
                "example": "event: snapshot\ndata: {\"result\":{\"items\":[],\"pagination\":{\"limit\":50,\"hasMore\":false,\"nextCursor\":null},\"consultedAt\":\"2026-01-01T12:00:00.000Z\"},\"refreshedAt\":\"2026-01-01T12:00:00.000Z\"}\n\n"
              }
            }
          },
          "400": {
            "description": "Parâmetros ou cursor inválidos. Corrija a consulta antes de repetir.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Chave ausente, inválida, suspensa, revogada, expirada ou organização indisponível. Pare e verifique o acesso com o responsável.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Escopo insuficiente. Confira os escopos autorizados; filtros não concedem acesso.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Recurso, crédito ou documento não disponível para a organização. Confira o catálogo e o identificador.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "405": {
            "description": "Método não permitido. Use GET; a API não recebe gravações ou retornos de SMS.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Snapshot excedeu dois MiB. Reduza campos, página ou filtros do acompanhamento.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "414": {
            "description": "URL de consulta excedeu o limite. Reduza a consulta; limite atual de 16.000 caracteres.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Resumo excedeu o limite de grupos. Restrinja filtros ou agrupamentos; não há resultado parcial.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Limite de requisições, consultas ou streams. Respeite Retry-After e use espera limitada.",
            "headers": {
              "Retry-After": {
                "description": "Quando presente, tempo mínimo antes de tentar novamente.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Falha interna. Registre somente status/código/requestId e contate o responsável; não registre a chave.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "503": {
            "description": "Consulta demorada ou indisponibilidade temporária. Restrinja filtros e use nova tentativa controlada.",
            "headers": {
              "Retry-After": {
                "description": "Quando presente, tempo mínimo antes de tentar novamente.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/documentos/prospects/{id}/arquivo": {
      "get": {
        "operationId": "arquivo_prospects",
        "summary": "Arquivo do crédito",
        "description": "Baixa o arquivo de um documento acessível à organização.\n\nEscopos: dados:read.\n\nObtenha prospect_document_id em /dados/prospect_documents. Não recebe parâmetros de query.\n\nDocumentos com exclusão lógica continuam consultáveis conforme o contrato universal. Metadados de documentos gerados não garantem arquivo disponível por esta rota.",
        "tags": [
          "Documentos"
        ],
        "x-required-scopes": [
          "dados:read"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "UUID do documento obtido nos metadados da respectiva tabela. Não é o ID do crédito ou da campanha.",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "example": "11111111-1111-4111-8111-111111111111"
          }
        ],
        "responses": {
          "200": {
            "description": "Bytes do arquivo; Content-Disposition indica download. Não interpretar como JSON.",
            "headers": {
              "Content-Disposition": {
                "schema": {
                  "type": "string"
                },
                "description": "attachment; nome do arquivo em filename*."
              }
            },
            "content": {
              "application/octet-stream": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "400": {
            "description": "Parâmetros ou cursor inválidos. Corrija a consulta antes de repetir.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Chave ausente, inválida, suspensa, revogada, expirada ou organização indisponível. Pare e verifique o acesso com o responsável.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Escopo insuficiente. Confira os escopos autorizados; filtros não concedem acesso.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Recurso, crédito ou documento não disponível para a organização. Confira o catálogo e o identificador.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "405": {
            "description": "Método não permitido. Use GET; a API não recebe gravações ou retornos de SMS.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Snapshot excedeu dois MiB. Reduza campos, página ou filtros do acompanhamento.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "414": {
            "description": "URL de consulta excedeu o limite. Reduza a consulta; limite atual de 16.000 caracteres.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Resumo excedeu o limite de grupos. Restrinja filtros ou agrupamentos; não há resultado parcial.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Limite de requisições, consultas ou streams. Respeite Retry-After e use espera limitada.",
            "headers": {
              "Retry-After": {
                "description": "Quando presente, tempo mínimo antes de tentar novamente.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Falha interna. Registre somente status/código/requestId e contate o responsável; não registre a chave.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "503": {
            "description": "Consulta demorada ou indisponibilidade temporária. Restrinja filtros e use nova tentativa controlada.",
            "headers": {
              "Retry-After": {
                "description": "Quando presente, tempo mínimo antes de tentar novamente.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/documentos/campanhas/{id}/arquivo": {
      "get": {
        "operationId": "arquivo_campanhas",
        "summary": "Arquivo da campanha",
        "description": "Baixa o arquivo de um documento acessível à organização.\n\nEscopos: dados:read.\n\nObtenha campaign_document_id em /dados/campaign_documents. Não recebe parâmetros de query.\n\nDocumentos com exclusão lógica continuam consultáveis conforme o contrato universal. Metadados de documentos gerados não garantem arquivo disponível por esta rota.",
        "tags": [
          "Documentos"
        ],
        "x-required-scopes": [
          "dados:read"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "UUID do documento obtido nos metadados da respectiva tabela. Não é o ID do crédito ou da campanha.",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "example": "11111111-1111-4111-8111-111111111111"
          }
        ],
        "responses": {
          "200": {
            "description": "Bytes do arquivo; Content-Disposition indica download. Não interpretar como JSON.",
            "headers": {
              "Content-Disposition": {
                "schema": {
                  "type": "string"
                },
                "description": "attachment; nome do arquivo em filename*."
              }
            },
            "content": {
              "application/octet-stream": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "400": {
            "description": "Parâmetros ou cursor inválidos. Corrija a consulta antes de repetir.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Chave ausente, inválida, suspensa, revogada, expirada ou organização indisponível. Pare e verifique o acesso com o responsável.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Escopo insuficiente. Confira os escopos autorizados; filtros não concedem acesso.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Recurso, crédito ou documento não disponível para a organização. Confira o catálogo e o identificador.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "405": {
            "description": "Método não permitido. Use GET; a API não recebe gravações ou retornos de SMS.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Snapshot excedeu dois MiB. Reduza campos, página ou filtros do acompanhamento.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "414": {
            "description": "URL de consulta excedeu o limite. Reduza a consulta; limite atual de 16.000 caracteres.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Resumo excedeu o limite de grupos. Restrinja filtros ou agrupamentos; não há resultado parcial.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Limite de requisições, consultas ou streams. Respeite Retry-After e use espera limitada.",
            "headers": {
              "Retry-After": {
                "description": "Quando presente, tempo mínimo antes de tentar novamente.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Falha interna. Registre somente status/código/requestId e contate o responsável; não registre a chave.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "503": {
            "description": "Consulta demorada ou indisponibilidade temporária. Restrinja filtros e use nova tentativa controlada.",
            "headers": {
              "Retry-After": {
                "description": "Quando presente, tempo mínimo antes de tentar novamente.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "securitySchemes": {
      "ApplicationKey": {
        "type": "http",
        "scheme": "bearer",
        "bearerFormat": "64 hexadecimal characters",
        "description": "Chave de aplicação no cabeçalho Authorization. Não é JWT, senha de usuário ou token de URL."
      }
    },
    "schemas": {
      "Pagination": {
        "type": "object",
        "required": [
          "limit",
          "hasMore",
          "nextCursor"
        ],
        "properties": {
          "limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 200
          },
          "hasMore": {
            "type": "boolean"
          },
          "nextCursor": {
            "type": "string",
            "nullable": true
          }
        }
      },
      "Page": {
        "type": "object",
        "required": [
          "items",
          "pagination",
          "consultedAt"
        ],
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": true
            }
          },
          "pagination": {
            "$ref": "#/components/schemas/Pagination"
          },
          "consultedAt": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "FinancialPage": {
        "allOf": [
          {
            "$ref": "#/components/schemas/Page"
          },
          {
            "type": "object",
            "required": [
              "summary"
            ],
            "properties": {
              "summary": {
                "$ref": "#/components/schemas/FinancialSummary"
              }
            }
          }
        ]
      },
      "FinancialSummary": {
        "type": "object",
        "required": [
          "prospectId",
          "values",
          "details",
          "totals",
          "paymentTotals",
          "ledgerInitialized",
          "opening"
        ],
        "properties": {
          "prospectId": {
            "type": "string",
            "format": "uuid"
          },
          "ledgerInitialized": {
            "type": "boolean"
          },
          "values": {
            "type": "object",
            "additionalProperties": true
          },
          "details": {
            "type": "object",
            "additionalProperties": true
          },
          "totals": {
            "type": "object",
            "additionalProperties": true
          },
          "opening": {
            "type": "object",
            "additionalProperties": true
          },
          "paymentTotals": {
            "type": "object",
            "properties": {
              "paid": {
                "type": "string",
                "nullable": true
              },
              "legacyLawyerPaid": {
                "type": "string",
                "nullable": true
              },
              "reconciled": {
                "type": "boolean"
              },
              "treatment": {
                "type": "string",
                "enum": [
                  "separate",
                  "included"
                ],
                "nullable": true
              }
            }
          }
        }
      },
      "ResourceCatalog": {
        "type": "object",
        "required": [
          "version",
          "readOnly",
          "scopes",
          "resources",
          "fields",
          "financialSummary",
          "database",
          "continuous",
          "limits"
        ],
        "properties": {
          "version": {
            "type": "string"
          },
          "readOnly": {
            "type": "boolean"
          },
          "scopes": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "resources": {
            "type": "object",
            "additionalProperties": true
          },
          "fields": {
            "type": "object",
            "additionalProperties": true
          },
          "financialSummary": {
            "type": "object",
            "additionalProperties": true
          },
          "database": {
            "type": "string"
          },
          "continuous": {
            "type": "object",
            "additionalProperties": true
          },
          "limits": {
            "type": "object",
            "additionalProperties": true
          }
        }
      },
      "DatabaseCatalog": {
        "type": "object",
        "required": [
          "tables"
        ],
        "properties": {
          "tables": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": true
            }
          }
        }
      },
      "Error": {
        "type": "object",
        "required": [
          "error"
        ],
        "properties": {
          "error": {
            "type": "object",
            "required": [
              "code",
              "message"
            ],
            "properties": {
              "code": {
                "type": "string"
              },
              "message": {
                "type": "string"
              }
            }
          },
          "requestId": {
            "type": "string",
            "format": "uuid",
            "description": "Identificador da requisição. Eventos SSE de erro não incluem este campo."
          }
        }
      },
      "CreditPagination": {
        "type": "object",
        "required": [
          "limit",
          "hasMore",
          "nextCursor"
        ],
        "properties": {
          "limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 1000
          },
          "hasMore": {
            "type": "boolean"
          },
          "nextCursor": {
            "type": "string",
            "nullable": true
          }
        }
      },
      "CreditPage": {
        "type": "object",
        "required": [
          "items",
          "pagination",
          "consultedAt"
        ],
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": true
            }
          },
          "pagination": {
            "$ref": "#/components/schemas/CreditPagination"
          },
          "consultedAt": {
            "type": "string",
            "format": "date-time"
          }
        }
      }
    }
  },
  "x-crm-scopes": [
    {
      "id": "creditos:read",
      "description": "Consulta de créditos e identificação dos credores."
    },
    {
      "id": "contatos:read",
      "description": "Telefones e e-mails de um crédito; também requer creditos:read."
    },
    {
      "id": "interacoes:read",
      "description": "Interações/FUPs de um crédito; também requer creditos:read."
    },
    {
      "id": "financeiro:read",
      "description": "Valores, resumo financeiro e movimentos; nas rotas de crédito também requer creditos:read."
    },
    {
      "id": "usuarios:read",
      "description": "Identificação, situação ativa e perfis dos usuários."
    },
    {
      "id": "campanhas:read",
      "description": "Cadastro de campanhas."
    },
    {
      "id": "situacoes:read",
      "description": "Situações cadastradas, status e grupos."
    },
    {
      "id": "dados:read",
      "description": "Todos os dados de negócio disponibilizados para a organização, inclusive financeiro, tabelas, resumos, acompanhamento e arquivos. Também autoriza os recursos amigáveis."
    }
  ]
}
