Livegest API
    v1 · REST · JSON

    API Pública

    Integra sistemas externos com a tua conta Livegest. Toda a API é REST, aceita e devolve JSON, e é autenticada com uma chave por empresa (Bearer token).

    Especificação OpenAPI 3.1

    Descarrega o ficheiro OpenAPI para gerar automaticamente clientes (openapi-generator, Kiota, Orval, etc.) ou importa-o diretamente no Postman, Insomnia ou Swagger UI.

    OpenAPI v1

    Atual
    Publicado 2026-07

    Versão estável. Endpoints de clientes, artigos, documentos, recebimentos e séries.

    openapi-generator-cli generate -i https://livegest.pt/openapi/v1.json -g typescript-fetch -o ./livegest-client-v1

    Seguro

    Autenticação por chave, isolada por empresa. Podes revogar em qualquer momento.

    Rápido

    Endpoints paginados. Limite de 120 pedidos por minuto por chave.

    Simples

    Um único URL base, um header, JSON no corpo.

    Começar em 3 passos

    1. Entra na tua conta → escolhe a empresa → menu Chaves de APIGerar chave. Copia e guarda o valor mostrado (só aparece uma vez).
    2. Guarda a chave numa variável de ambiente do teu sistema (ex.: LIVEGEST_API_KEY). Nunca a coloques em código front-end.
    3. Envia pedidos com o header Authorization: Bearer <chave> para o URL base:
    https://qsdehmjotjflpcraaihp.supabase.co/functions/v1/public-api

    Autenticação

    Envia sempre o header:

    Authorization: Bearer lg_live_xxxxxxxxxxxxxxxxxxxxxxxx
    • Chaves inválidas ou revogadas devolvem 401 unauthorized.
    • Excesso de pedidos (120/min por chave) devolve 429 rate_limited.
    • Podes gerir e revogar chaves em Chaves de API na área da empresa.

    Exemplos

    curl -X GET "https://qsdehmjotjflpcraaihp.supabase.co/functions/v1/public-api/v1/customers?limit=20" \
      -H "Authorization: Bearer lg_live_xxxxxxxxxxxxxxxxxxxxxxxx"

    Endpoints

    Meta

    GET/v1/me

    Devolve a empresa associada à chave e scopes.

    Clientes

    GET/v1/customers?limit=50&offset=0&search=

    Lista clientes (paginado).

    POST/v1/customers

    Cria cliente.

    Request
    { "name": "Empresa X, Lda.", "tax_id": "500000000", "email": "geral@x.pt" }
    GET/v1/customers/:id

    Obtém cliente por id.

    PATCH/v1/customers/:id

    Atualiza campos do cliente.

    Request
    { "email": "novo@x.pt" }
    DELETE/v1/customers/:id

    Apaga cliente.

    Artigos

    GET/v1/products?limit=50&offset=0&search=

    Lista artigos.

    POST/v1/products

    Cria artigo.

    Request
    { "name": "Consultoria", "unit_price_net": 100, "tax_rate": 23, "unit": "un" }
    GET/v1/products/:id

    Obtém artigo por id.

    PATCH/v1/products/:id

    Atualiza campos do artigo.

    DELETE/v1/products/:id

    Apaga artigo.

    Documentos

    GET/v1/documents?doc_type=FT&status=issued&from=2026-01-01&to=2026-12-31

    Lista documentos, com filtros por tipo, estado e data.

    POST/v1/documents

    Cria documento (rascunho ou emitido se `issue: true`).

    Request
    {
      "doc_type": "FT",
      "series_id": "<uuid da série>",
      "issue_date": "2026-07-17",
      "customer_id": "<uuid do cliente>",
      "issue": true,
      "lines": [
        { "description": "Consultoria", "qty": 2, "unit_price_net": 100, "tax_rate": 23 }
      ]
    }
    GET/v1/documents/:id

    Obtém documento com linhas e pagamentos.

    POST/v1/documents/:id/issue

    Emite um documento em rascunho (atribui número, ATCUD, hash).

    POST/v1/documents/:id/cancel

    Anula um documento emitido.

    Pagamentos

    GET/v1/payments?document_id=

    Lista pagamentos (opcionalmente filtrados por documento).

    POST/v1/documents/:id/payments

    Regista um pagamento para o documento.

    Request
    { "amount": 123.00, "method_code": "MB", "payment_date": "2026-07-17" }

    Códigos de erro

    400
    Dados inválidos ou em falta.
    401
    Chave ausente, inválida ou revogada.
    403
    Falta scope necessário na chave.
    404
    Recurso não encontrado.
    429
    Limite de 120 pedidos/minuto excedido.
    500
    Erro interno.
    { "error": { "code": "unauthorized", "message": "Invalid API key" } }