{"api":"Blimx Gateway","versao":"2.2.0","doc_llm":"http:\/\/api.rhuar.com\/blimx-llm.md","autenticacao":{"tipo":"API Key (Bearer Token via Sanctum)","header":"Authorization: Bearer {access_token}","obtencao":"POST \/api\/login retorna um token nomeado. Use POST \/api\/keys para criar chaves adicionais.","expiracao":"Tokens n\u00e3o expiram. Revogue manualmente via DELETE \/api\/keys\/{id} quando comprometidos."},"endpoints":{"publicos":[["POST","\/api\/login","Autentica e retorna um token nomeado (n\u00e3o apaga tokens existentes). Aceita name opcional. Rate limit: 5\/min."],["POST","\/api\/register","Cadastra um novo usu\u00e1rio e retorna um token inicial. Rate limit: 3\/min."],["GET","\/api\/doc","Retorna esta documenta\u00e7\u00e3o."]],"api_keys":[["GET","\/api\/keys","Lista chaves do usu\u00e1rio (id, name, last_used_at, created_at). N\u00e3o retorna o token plain."],["POST","\/api\/keys","Cria nova chave nomeada. Body: {name: string(3-50)}. Retorna o access_token UMA \u00daNICA VEZ."],["DELETE","\/api\/keys\/{id}","Revoga uma chave espec\u00edfica. 404 se a chave n\u00e3o pertence ao usu\u00e1rio."]],"depositos":[["POST","\/api\/deposito","Cria cobran\u00e7a PIX. Body: {amount (0.01 a max_deposito), callback_url?, expires_in?}. callback_url rejeita IPs privados (SSRF protection)."],["GET","\/api\/deposito\/{txid}","Consulta dep\u00f3sito por txid. Rate limit: 10\/min."],["GET","\/api\/depositos?limit=100","Lista dep\u00f3sitos (cap 500). Rate limit: 10\/min."]],"saques":[["POST","\/api\/saque","Cria saque PIX. Body: {amount (0.01 a max_saque), pix_key (11-77 chars), callback_url?}. Reserva o saldo (saque+taxa) atomicamente e envia \u00e0 Sicoob; em falha estorna saque e taxa."],["GET","\/api\/saque\/{e2e}","Consulta saque por endToEndId. Rate limit: 10\/min."],["GET","\/api\/saques?limit=100","Lista saques (cap 500). Rate limit: 10\/min."]],"conta":[["GET","\/api\/saldo","Saldo atual calculado a partir das transactions."],["GET","\/api\/extrato?limit=100","Extrato de transactions (cap 500)."],["GET","\/api\/webhook-secret","ROTACIONA o webhook_secret: invalida o anterior e retorna um novo (consulta = perdi o secret)."]]},"webhooks_enviados_ao_cliente":{"descricao":"POST assinado enviado para callback_url quando um evento ocorre.","headers":{"X-Blimx-Event":"deposito.concluido | saque.concluido | saque.falhou","X-Blimx-Timestamp":"Unix timestamp do envio","X-Blimx-Signature":"sha256=<HMAC-SHA256(timestamp . \".\" . payload, webhook_secret)>"},"verificacao":{"php":"$expected = \"sha256=\" . hash_hmac(\"sha256\", $timestamp . \".\" . $payload, $webhookSecret); hash_equals($expected, $received);","validade":"Rejeitar requests com abs(time() - timestamp) > 300."},"eventos":{"deposito.concluido":["txid","e2e","valor","status"],"saque.concluido":["e2e","valor","origem","destino","status"],"saque.falhou":["e2e","valor","origem","destino","status"]}},"codigos_erro":{"200":"Sucesso","201":"Recurso criado","401":"N\u00e3o autenticado ou credenciais inv\u00e1lidas","404":"Recurso n\u00e3o encontrado","422":"Erro de valida\u00e7\u00e3o (inclui SSRF block em callback_url)","429":"Rate limit excedido","500":"Erro interno do servidor"}}