Horus BI API

Horus BI API as documented publicly: 14 operations. Contract generated from the documentation by API Evangelist (2026-11-11); not the provider's own document.

GitHub OpenAPI

Operations 14

GET /download/lumo/install.sh GET /download/lumo/install.sh #
POST /lumo/alertas POST /lumo/alertas #
POST /tenant/ai/chat `POST /tenant/ai/chat` manda uma pergunta ao Chat com Dados em nome de um usuário e devolve a resposta em streaming (Server‑Sent Events). #
GET /tenant/ai/limit Consulta o limite mensal de IA para um usuário antes de enviar a pergunta. #
POST /tenant/ai/threads/{threadid}/cancel Cancela uma resposta (rota de compatibilidade que não interrompe o processamento). #
GET /tenant/files Lista os arquivos do tenant (os que já foram confirmados). #
DELETE /tenant/files/{id} Exclui o arquivo do tenant. #
PATCH /tenant/files/{id} Torna o arquivo público. #
POST /tenant/files/{id}/sign Gera um link assinado para abrir o arquivo privado. #
POST /v1/tenant/ai/chat POST /v1/tenant/ai/chat #
POST /v1/tenant/files/confirm POST /v1/tenant/files/confirm #
POST /v1/tenant/files/presign POST /v1/tenant/files/presign #
POST /v1/tenant/files/upload POST /v1/tenant/files/upload #
GET /v1/tenant/users GET /v1/tenant/users #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/horusbi-com-br:horusbi-com-br-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

horusbi-com-br-openapi-generated.yml Raw ↑
openapi: 3.1.0
info:
  title: Horus BI API
  version: '2026-11-11'
  description: 'GENERATED FROM DOCUMENTATION by API Evangelist on 2026-11-11: 14 operation(s) read from 6 public documentation page(s) (each operation
    names its page in x-source). This is not the provider''s published contract; Horus BI has published no machine-readable contract that the
    pipeline could find. Engine: local.'
  x-evidence-tiers:
    code-example: 7
    documentation: 7
    pages-with-code: 5
    pages-read: 6
  x-generated-from: documentation
  x-provenance: generated
  x-authored-by: API Evangelist
  x-generated: '2026-11-11'
  x-generator: generate-contract-from-docs.py
  x-engine: local
  x-sources:
  - https://docs.horusbi.com.br/api/upload.md
  - https://docs.horusbi.com.br/api/streaming.md
  - https://docs.horusbi.com.br/api.md
  - https://docs.horusbi.com.br/lumo/ci.md
  - https://docs.horusbi.com.br/lumo/instalar.md
  - https://docs.horusbi.com.br/dataviz/alertas/webhook/receber.md
servers:
- url: https://api.horusbi.com.br
paths:
  /download/lumo/install.sh:
    get:
      operationId: get_download_lumo_install_sh
      tags:
      - Download
      summary: GET /download/lumo/install.sh
      x-source: https://docs.horusbi.com.br/lumo/ci.md
      responses:
        '200':
          description: Success (status as documented)
      x-evidence:
        kind: code-example
        language: curl
        snippet: 'curl -fsSL https://storage.horusbi.com.br/download/lumo/install.sh | bash -s -- --no-skill

          export LUMO_NO_UPDATE_NOTIFIER=1

          ```'
  /lumo/alertas:
    post:
      operationId: post_lumo_alertas
      tags:
      - Lumo
      summary: POST /lumo/alertas
      x-source: https://docs.horusbi.com.br/dataviz/alertas/webhook/receber.md
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PostLumoAlertasRequest'
      responses:
        '201':
          description: Success (status as documented)
      x-evidence:
        kind: code-example
        language: curl
        snippet: "curl -X POST https://seu-endpoint.exemplo.com/lumo/alertas  -H 'Content-Type: application/json'  -H 'X-Auth-Token: seu-token-secreto'\
          \  -d '{\"alert\":{\"id\":412,\"nome\":\"Teste\",\"type\":\"trigger\",\"app_id\":null},\n       \"user\":{\"id\":87,\"nome\":\"Maria\"\
          ,\"email\":\"maria@empresa.com.br\"},\n       \"tenantId\":23,\"timestamp\":\"2026-10-30T10:30:00.512Z\",\n       \"content\":[{\"id\"\
          :\"x\",\"type\":\"text\",\"nome\":\"Resumo\",\"gen"
  /tenant/ai/chat:
    post:
      operationId: post_tenant_ai_chat
      tags:
      - Tenant
      summary: '`POST /tenant/ai/chat` manda uma pergunta ao Chat com Dados em nome de um usuário e devolve a resposta em streaming (Server‑Sent
        Events).'
      description: 'A resposta vem em SSE por padrão; pode ser recebida inteira em JSON usando `?stream=false` ou o header `Accept: application/json`.'
      x-source: https://docs.horusbi.com.br/api/streaming.md
      parameters:
      - name: stream
        in: query
        required: false
        schema:
          type: string
        description: Define se a resposta vem em SSE (true) ou JSON (false).
      - name: Accept
        in: header
        required: false
        schema:
          type: string
        description: Para receber JSON use o valor `application/json`.
      - name: Content-Type
        in: header
        required: true
        schema:
          type: string
        description: '`application/json`'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PostTenantAiChatRequest'
      responses:
        '201':
          description: Success (status as documented)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PostTenantAiChatResponse'
      x-evidence:
        kind: documentation
  /tenant/ai/limit:
    get:
      operationId: get_tenant_ai_limit
      tags:
      - Tenant
      summary: Consulta o limite mensal de IA para um usuário antes de enviar a pergunta.
      description: Retorna 200 com dados de limite; se `state` for `block`, novas mensagens são recusadas.
      x-source: https://docs.horusbi.com.br/api/streaming.md
      parameters:
      - name: userId
        in: query
        required: true
        schema:
          type: integer
        description: ID do usuário cujo limite será consultado.
      responses:
        '200':
          description: Success (status as documented)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetTenantAiLimitResponse'
      x-evidence:
        kind: documentation
  /tenant/ai/threads/{threadid}/cancel:
    post:
      operationId: post_tenant_ai_threads_threadid_cancel
      tags:
      - Tenant
      summary: Cancela uma resposta (rota de compatibilidade que não interrompe o processamento).
      description: A conexão pode ser fechada pelo cliente; a rota não interrompe o processamento interno.
      x-source: https://docs.horusbi.com.br/api/streaming.md
      parameters:
      - name: threadid
        in: path
        required: true
        schema:
          type: string
      responses:
        '201':
          description: Success (status as documented)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PostTenantAiThreadsThreadidCancelResponse'
      x-evidence:
        kind: documentation
  /tenant/files:
    get:
      operationId: get_tenant_files
      tags:
      - Tenant
      summary: Lista os arquivos do tenant (os que já foram confirmados).
      x-source: https://docs.horusbi.com.br/api/upload.md
      responses:
        '200':
          description: Success (status as documented)
      x-evidence:
        kind: documentation
  /tenant/files/{id}:
    delete:
      operationId: delete_tenant_files_id
      tags:
      - Tenant
      summary: Exclui o arquivo do tenant.
      x-source: https://docs.horusbi.com.br/api/upload.md
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Success (status as documented)
      x-evidence:
        kind: documentation
    patch:
      operationId: patch_tenant_files_id
      tags:
      - Tenant
      summary: Torna o arquivo público.
      x-source: https://docs.horusbi.com.br/api/upload.md
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PatchTenantFilesIdRequest'
      responses:
        '200':
          description: Success (status as documented)
      x-evidence:
        kind: documentation
  /tenant/files/{id}/sign:
    post:
      operationId: post_tenant_files_id_sign
      tags:
      - Tenant
      summary: Gera um link assinado para abrir o arquivo privado.
      x-source: https://docs.horusbi.com.br/api/upload.md
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
      requestBody:
        required: false
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PostTenantFilesIdSignRequest'
      responses:
        '201':
          description: Success (status as documented)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PostTenantFilesIdSignResponse'
      x-evidence:
        kind: documentation
  /v1/tenant/ai/chat:
    post:
      operationId: post_v1_tenant_ai_chat
      tags:
      - Tenant
      summary: POST /v1/tenant/ai/chat
      x-source: https://docs.horusbi.com.br/api/streaming.md
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PostV1TenantAiChatRequest'
      responses:
        '201':
          description: Success (status as documented)
      x-evidence:
        kind: code-example
        language: curl
        snippet: 'curl -N -X POST "https://api.horusbi.com.br/v1/tenant/ai/chat"  -H "Authorization: Bearer $TENANT_TOKEN"  -H "Content-Type:
          application/json"  -d ''{"userId": 123, "message": "Quanto vendi em setembro?"}''

          ```'
  /v1/tenant/files/confirm:
    post:
      operationId: post_v1_tenant_files_confirm
      tags:
      - Tenant
      summary: POST /v1/tenant/files/confirm
      x-source: https://docs.horusbi.com.br/api/upload.md
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PostV1TenantFilesConfirmRequest'
      responses:
        '201':
          description: Success (status as documented)
      x-evidence:
        kind: code-example
        language: curl
        snippet: "curl -X POST \"https://api.horusbi.com.br/v1/tenant/files/confirm\"  -H \"Authorization: Bearer $TENANT_TOKEN\"  -H \"Content-Type:\
          \ application/json\"  -d '{\"id\": \"a1b2c3d4-e5f6-7890-abcd-ef1234567890\", \"mime\": \"application/vnd.apache.parquet\"}'\n   ```"
  /v1/tenant/files/presign:
    post:
      operationId: post_v1_tenant_files_presign
      tags:
      - Tenant
      summary: POST /v1/tenant/files/presign
      x-source: https://docs.horusbi.com.br/api/upload.md
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PostV1TenantFilesPresignRequest'
      responses:
        '201':
          description: Success (status as documented)
      x-evidence:
        kind: code-example
        language: curl
        snippet: "curl -X POST \"https://api.horusbi.com.br/v1/tenant/files/presign\"  -H \"Authorization: Bearer $TENANT_TOKEN\"  -H \"Content-Type:\
          \ application/json\"  -d '{\"file_name\": \"vendas-2026.parquet\", \"mime\": \"application/vnd.apache.parquet\"}'\n   ```"
  /v1/tenant/files/upload:
    post:
      operationId: post_v1_tenant_files_upload
      tags:
      - Tenant
      summary: POST /v1/tenant/files/upload
      x-source: https://docs.horusbi.com.br/api/upload.md
      responses:
        '201':
          description: Success (status as documented)
      x-evidence:
        kind: code-example
        language: curl
        snippet: 'curl -X POST "https://api.horusbi.com.br/v1/tenant/files/upload"  -H "Authorization: Bearer $TENANT_TOKEN"  -F "file=@vendas-setembro.csv"  -F
          "filename=vendas-setembro.csv"

          ```'
  /v1/tenant/users:
    get:
      operationId: get_v1_tenant_users
      tags:
      - Tenant
      summary: GET /v1/tenant/users
      x-source: https://docs.horusbi.com.br/api/streaming.md
      parameters:
      - name: email
        in: query
        required: false
        schema:
          type: string
      responses:
        '200':
          description: Success (status as documented)
      x-evidence:
        kind: code-example
        language: curl
        snippet: 'curl "https://api.horusbi.com.br/v1/tenant/users?email=ana.souza@lojaexemplo.com.br"  -H "Authorization: Bearer $TENANT_TOKEN"

          ```'
components:
  schemas:
    PostLumoAlertasRequest:
      type: object
      properties:
        alert:
          type: object
          properties:
            id:
              type: integer
            nome:
              type: string
            type:
              type: string
            app_id:
              type:
              - string
              - 'null'
        user:
          type: object
          properties:
            id:
              type: integer
            nome:
              type: string
            email:
              type: string
        tenantId:
          type: integer
        timestamp:
          type: string
          format: date-time
        content:
          type: array
          items:
            type: object
            properties:
              id:
                type: string
              type:
                type: string
              nome:
                type: string
              generated:
                type: object
                properties:
                  text:
                    type: string
    PostTenantAiChatRequest:
      type: object
      properties:
        userId:
          type: integer
          description: ID do usuário ativo no tenant.
        message:
          type: string
          description: Pergunta a ser enviada ao assistente.
        threadId:
          type: string
          description: ID da conversa existente; omitido cria nova conversa.
        modelKey:
          type: string
          description: '`fast` ou `reasoning` para escolher o modelo.'
      required:
      - userId
      - message
    PostTenantAiChatResponse:
      type: object
      properties:
        event:
          type: string
          description: Tipo de evento SSE (thread, text-delta, tool-call, etc.).
        data:
          type: object
          description: Payload JSON do evento, variando conforme o tipo.
    GetTenantAiLimitResponse:
      type: object
      properties:
        limit:
          type: object
          description: Informações sobre o limite de tokens e estado (`block` ou `allow`).
    PostTenantAiThreadsThreadidCancelResponse:
      type: object
      properties:
        status:
          type: integer
          description: Código HTTP da operação (geralmente 200).
    PatchTenantFilesIdRequest:
      type: object
      properties:
        public:
          type: boolean
          description: Define se o arquivo será público.
      required:
      - public
    PostTenantFilesIdSignRequest:
      type: object
      properties:
        ttl:
          type: integer
          description: Tempo de validade em segundos (60 a 604800).
    PostTenantFilesIdSignResponse:
      type: object
      properties:
        url:
          type: string
          description: Link assinado para acesso ao arquivo.
    PostV1TenantAiChatRequest:
      type: object
      properties:
        userId:
          type: integer
        message:
          type: string
    PostV1TenantFilesConfirmRequest:
      type: object
      properties:
        id:
          type: string
        mime:
          type: string
    PostV1TenantFilesPresignRequest:
      type: object
      properties:
        file_name:
          type: string
        mime:
          type: string
  securitySchemes:
    bearer:
      type: http
      scheme: bearer
security:
- bearer: []
tags:
- name: Download
- name: Lumo
- name: Tenant