openapi: 3.2.0 info: title: Oto Data Auth API description: 'A Data API do Oto permite que você faça cargas de dados de forma segura e confiável, utilizando padrões REST e corpos das mensagens em formato JSON. Os registros são inseridos na modalidade _upsert_, isto é, caso um registro com a mesma chave primária exista na base de dados, ele será integralmente substituído pelo registro enviado. Caso contrário, um novo registro será criado na base de dados. # Limites Dois limites são aplicados em todos os endpoints desta API: requisições por minuto e quantidade máxima de registros por requisição. ## Limite de requisições Para garantir a estabilidade e segurança da plataforma, esta API aceita um número máximo de **200** requisições por minuto por IP de origem. As requisições que excederem este limite terão suas respostas atrasadas para que se mantenha o ritmo estipulado, até que eventualmente podem ser barradas com a resposta `HTTP/1.1 429 Too many requests`. ## Limite de registros por requisição São aceitos até **10.000** registros por requisição. Caso a propriedade `data` contenha um número superior de entradas, a requisição será recusada com a resposta `HTTP/1.1 413 Payload Too Large`.' version: 1.3.5 x-logo: url: https://pmweblabs.s3.amazonaws.com/assets/oto-logo.png href: https://suporte.otocrm.com.br/ altText: Oto. Quem conhece, vende. servers: - url: https://data-api.otocrm.com.br description: Production - url: https://data-api-hmg.otocrm.com.br description: Test - url: http://localhost:8000 description: Test tags: - name: Auth paths: /auth/login: post: summary: Login description: "Autentica um usuário e retorna um token JWT de acesso.\n\nEste endpoint valida o nome de usuário e a senha informados na collection\n`users` do MongoDB. Caso as credenciais sejam válidas e o usuário esteja ativo,\num token JWT é gerado contendo informações do usuário e suas permissões, com\ntempo de expiração padrão de 60 minutos (3600 segundos).\n\nRegistro de logs:\n - Registra um log de ERRO se o banco de dados não estiver inicializado.\n - Registra um log de AVISO (WARNING) se as credenciais forem inválidas ou o usuário estiver inativo.\n - Registra um log de INFO em caso de login bem-sucedido.\n - Registra um log de ERRO para exceções inesperadas.\n\nArgumentos:\n data (LoginRequest): Objeto contendo os campos `username` e `password`.\n\nRetorno:\n TokenResponse: Objeto contendo o `access_token` JWT e o tempo de expiração em segundos.\n\nCódigos de status:\n 200: Autenticação realizada com sucesso.\n 401: Credenciais inválidas.\n 403: Conta de usuário inativa.\n 500: Erro interno no servidor por exceção não esperada.\n\nExemplo de requisição:\n Corpo da requisição:\n {\n \"username\": \"joao_silva\",\n \"password\": \"senhaSegura123\"\n }\n\nExemplo de resposta (200):\n {\n \"access_token\": \"\",\n \"expires_in\": 3600\n }" operationId: login_auth_login_post requestBody: content: application/json: schema: $ref: '#/components/schemas/LoginRequest' required: true responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/TokenResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' tags: - Auth components: schemas: HTTPValidationError: properties: detail: items: $ref: '#/components/schemas/ValidationError' type: array title: Detail type: object title: HTTPValidationError LoginRequest: properties: username: type: string title: Username password: type: string title: Password type: object required: - username - password title: LoginRequest ValidationError: properties: loc: items: anyOf: - type: string - type: integer type: array title: Location msg: type: string title: Message type: type: string title: Error Type type: object required: - loc - msg - type title: ValidationError TokenResponse: properties: access_token: type: string title: Access Token expires_in: type: integer title: Expires In type: object required: - access_token - expires_in title: TokenResponse securitySchemes: HTTPBearer: type: http scheme: bearer description: "Você deverá enviar sua chave privada\nno cabeçalho HTTP `Authorization`, com o padrão `Bearer `. Exemplo:\n\n```\nGET / HTTP/1.1\nHost: data-api.otocrm.com.br\nAuthorization: Bearer abcdef123456\n```\n "