Revolio Public API

Esta página é a referência técnica pública da API da Revolio. O objetivo é dar-te uma visão rápida do contrato atual antes de ligares um cliente HTTP, middleware, ETL ou integração dedicada.

Cada pedido usa API key, fica isolado por loja e é validado por scopes específicos, para controlares leituras e writes desde a primeira chamada.

Domínios

7

Endpoints

41

Com escrita

17

Scopes

16

Para começar: Arranque rápido · Convenções globais · Scopes

Quickstart

Arranque rápido

Se queres validar credenciais e contrato em menos de 10 minutos, este é o fluxo mínimo para autenticar, confirmar scopes e fazer a primeira chamada útil.

  1. 1

    Criar a chave API

    Entra no dashboard do lojista, abre Configurações e gera uma chave para a tua integração.

  2. 2

    Autenticar cada pedido

    Envia a chave em X-API-Key ou Authorization: Bearer. Cada chave fica associada a uma loja e aos respetivos scopes.

  3. 3

    Validar antes de integrar

    Começa em /health para confirmar que a chave está válida e que os scopes devolvidos cobrem a operação que vais executar.

  4. 4

    Fazer a primeira leitura real

    Depois do /health, continua em /me, /repairs ou /catalog/device-models para validares o teu caso de uso antes de entrares em escrita.

Exemplo de validação

curl -X GET https://api.revolio.io/api/public/v1/health \
  -H "X-API-Key: rvl_xxxxxxxx_xxxxxxxxxxxxxxxxxxxxxx"

Sem sandbox

Não há ambiente de testes isolado. Valida a integração contra a tua loja com /health e leituras de baixo risco antes de fazeres writes.

Usar com assistentes IA (MCP)

Aponta um cliente MCP ao servidor da loja e opera em linguagem natural. Requer o scope mcp:use mais os scopes do domínio.

claude mcp add --transport http revolio https://api.revolio.io/api/public/mcp --header "x-api-key: rvl_YOUR_KEY_HERE"

Base URL

Base URL

Compatibilidade total mantida em

https://api.revolio.io/api/public/v1

https://www.revolio.io/api/public/v1

Headers aceites

X-API-Key: rvl_xxxxxxxx_xxxxxxxxxxxxxxxxxxxxxx
Authorization: Bearer rvl_xxxxxxxx_xxxxxxxxxxxxxxxxxxxxxx

O fallback ?api_key= no URL existe só para clientes MCP sem suporte a headers personalizados: é menos seguro (a chave fica em logs), por isso usa uma chave dedicada e rotativa.

Convenções

Convenções globais

Antes de ligares qualquer cliente ou middleware, assume estas regras de autenticação, contexto e operação.

Rate limits

Cada chave tem 100 pedidos por minuto (janela fixa de 60s). Se ultrapassares, recebes 429: implementa retry com backoff exponencial e evita bursts na mesma chave.

Paginação

As listas aceitam limit e offset e devolvem total, limit, offset e hasMore. Itera com offset += limit até hasMore ser false. O limit máximo varia por endpoint e está no schema.

Só GET e POST

Leituras são GET; criações e atualizações são POST de ação (ex.: /status, /items, upserts). Não há PUT, PATCH nem DELETE.

Respostas e erros

Sucesso devolve { ok: true, data }. Erros devolvem { error } com o código HTTP correspondente. Exceção: o /health devolve { status: "ok", ... }.

400

Payload ou query inválida

Valida campos obrigatórios, tipos, enums e limites do endpoint antes de repetires o pedido.

401

Chave em falta ou inválida

Confirma header, formato da chave e se não estás a usar uma chave errada para outra loja.

402

Plano ou subscrição necessária

Alguns fluxos dependem de subscrição ativa ou de capacidades adicionais no contexto da loja.

403

Scope insuficiente

Volta ao dashboard, ajusta scopes e testa primeiro em /health antes de tentares o write de novo.

429

Rate limit excedido

Implementa retry com backoff e evita burst desnecessário na mesma chave.

500

Erro interno

Guarda endpoint, payload, hora e resposta recebida para acelerar a análise com a equipa.

Governança

Scopes

Cada endpoint exige um ou mais scopes. Chaves novas arrancam só com leitura operacional. Scopes reservados existem no contrato mas ainda não têm endpoints públicos.

ScopeEndpointsEstado
repairs.read13Em uso
repairs.write4Em uso
customers.read2Em uso
customers.write1Em uso
orders.read0Reservado
orders.write2Em uso
products.read1Em uso
products.write1Em uso
payments.read1Em uso
payments.write1Em uso
messages.read1Em uso
messages.write1Em uso
parts.read6Em uso
suppliers.read1Em uso
inventory.read0Reservado
inventory.write0Reservado
storefront.read0Reservado
storefront.write0Reservado
pricing.read1Em uso
diagnostics.write2Em uso
mcp:use1Em uso

Endpoints sem scope indicado (ex.: /health) exigem apenas chave válida.

Referência

Referência detalhada por endpoint

Cada bloco abaixo usa exemplos de request e response alinhados com os route handlers atuais. Quando um endpoint não aceita body, isso aparece explicitamente.

endpoints visíveis com os filtros atuais.

Try it out

Acesso e contexto

Valida a chave, inspeciona o contexto autenticado e confirma que a tua loja responde com o scope esperado antes de passares para operações mais sensíveis.

GET/api/public/v1/health

Validar a chave API e devolver o contexto autenticado da loja.

Auth por API key
Sucesso esperado: 200Erro possível: 401Erro possível: 429Erro possível: 500

Exemplo de request

Este endpoint não recebe body JSON.

Exemplo de response

{
  "status": "ok",
  "version": "v1",
  "time": "2026-04-05T12:00:00.000Z",
  "context": {
    "repairShopId": "shop_123",
    "keyId": "key_123",
    "keyName": "WooCommerce sync",
    "scopes": [
      "repairs.read",
      "repairs.write",
      "products.write"
    ]
  }
}

Try it out

Este pedido usa a configuração de autenticação definida no topo do explorer.

URL executada

/api/public/v1/health

Body JSON editável

Este endpoint não recebe body JSON.

Resposta em direto

Executa o pedido neste card para validares status, tempo e corpo real da resposta.

Ainda não executaste nenhum pedido neste endpoint.
GET/api/public/v1/me

Obter um resumo do perfil autenticado da loja.

Required scope: parts.readAuth por API key
Sucesso esperado: 200Erro possível: 401Erro possível: 403Erro possível: 429Erro possível: 500

Exemplo de request

Este endpoint não recebe body JSON.

Exemplo de response

{
  "ok": true,
  "data": {
    "countryCode": "PT",
    "country": "Portugal",
    "companyName": "Loja Exemplo",
    "city": "Lisboa",
    "postalCode": "1000-001",
    "street": "Rua da Revolio 10"
  }
}

Try it out

Este pedido usa a configuração de autenticação definida no topo do explorer.

URL executada

/api/public/v1/me

Body JSON editável

Este endpoint não recebe body JSON.

Resposta em direto

Executa o pedido neste card para validares status, tempo e corpo real da resposta.

Ainda não executaste nenhum pedido neste endpoint.

Ferramentas IA (MCP)

Expõe a loja a assistentes IA via MCP: 39 tools com scopes por domínio sobre JSON-RPC. Requer o scope mcp:use.

POST/api/public/mcp

Use the MCP server tools (pricing, quotes, tracking, WhatsApp, customers, catalog, repair detail, messages, stats, status updates, payments, parts, shipping, uploads, diagnostics, invoices, WooCommerce, inventory, movements, purchase orders, suppliers, storefront theme/content/sections/SEO).

Required scope: mcp:useAuth por API key
Sucesso esperado: 200Erro possível: 400Erro possível: 401Erro possível: 403Erro possível: 405Erro possível: 429Erro possível: 500

Exemplo de request

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "calculate_quote_price",
    "arguments": {
      "services": [
        {
          "problemTypeId": "problem_screen"
        }
      ]
    }
  }
}

Exemplo de response

{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "content": [
      {
        "type": "text",
        "text": "{\"currency\":\"EUR\",\"total\":89.9}"
      }
    ]
  }
}

Try it out

Este pedido usa a configuração de autenticação definida no topo do explorer.

URL executada

/api/public/mcp

Body JSON editável

Resposta em direto

Executa o pedido neste card para validares status, tempo e corpo real da resposta.

Ainda não executaste nenhum pedido neste endpoint.

Catálogo técnico

Consulta o catálogo que suporta os fluxos públicos e operacionais: marcas, categorias, modelos, tipos de avaria, estados e componentes.

GET/api/public/v1/catalog/brands

Listar marcas ativas do catálogo.

Required scope: repairs.readAuth por API key
Sucesso esperado: 200Erro possível: 401Erro possível: 403Erro possível: 429Erro possível: 500

Query Parameters:

limit=100 max 200offset=0search=name

Exemplo de request

Este endpoint não recebe body JSON.

Exemplo de response

{
  "data": [
    {
      "id": "brand_apple",
      "name": "Apple",
      "logo": "https://cdn.revolio.io/brands/apple.svg"
    }
  ],
  "pagination": {
    "total": 1,
    "limit": 20,
    "offset": 0,
    "hasMore": false
  }
}

Try it out

Este pedido usa a configuração de autenticação definida no topo do explorer.

URL executada

/api/public/v1/catalog/brands

Body JSON editável

Este endpoint não recebe body JSON.

Resposta em direto

Executa o pedido neste card para validares status, tempo e corpo real da resposta.

Ainda não executaste nenhum pedido neste endpoint.
GET/api/public/v1/catalog/categories

Listar categorias ativas do catálogo.

Required scope: repairs.readAuth por API key
Sucesso esperado: 200Erro possível: 401Erro possível: 403Erro possível: 429Erro possível: 500

Query Parameters:

limit=100 max 200offset=0search=name

Exemplo de request

Este endpoint não recebe body JSON.

Exemplo de response

{
  "data": [
    {
      "id": "cat_phone",
      "name": "Smartphones",
      "description": "Telemoveis e smartphones",
      "image": null
    }
  ],
  "pagination": {
    "total": 1,
    "limit": 20,
    "offset": 0,
    "hasMore": false
  }
}

Try it out

Este pedido usa a configuração de autenticação definida no topo do explorer.

URL executada

/api/public/v1/catalog/categories

Body JSON editável

Este endpoint não recebe body JSON.

Resposta em direto

Executa o pedido neste card para validares status, tempo e corpo real da resposta.

Ainda não executaste nenhum pedido neste endpoint.
GET/api/public/v1/catalog/component-types

Listar tipos de componente usados nos filtros de peças.

Required scope: parts.readAuth por API key
Sucesso esperado: 200Erro possível: 401Erro possível: 403Erro possível: 429Erro possível: 500

Query Parameters:

limit=100 max 200offset=0search=name

Exemplo de request

Este endpoint não recebe body JSON.

Exemplo de response

{
  "data": [
    {
      "id": "component_screen",
      "name": "Ecra",
      "icon": "monitor",
      "color": "#0F766E"
    }
  ],
  "pagination": {
    "total": 1,
    "limit": 20,
    "offset": 0,
    "hasMore": false
  }
}

Try it out

Este pedido usa a configuração de autenticação definida no topo do explorer.

URL executada

/api/public/v1/catalog/component-types

Body JSON editável

Este endpoint não recebe body JSON.

Resposta em direto

Executa o pedido neste card para validares status, tempo e corpo real da resposta.

Ainda não executaste nenhum pedido neste endpoint.
GET/api/public/v1/catalog/device-models

Listar modelos de equipamento por marca, categoria ou pesquisa.

Required scope: repairs.readAuth por API key
Sucesso esperado: 200Erro possível: 401Erro possível: 403Erro possível: 429Erro possível: 500

Query Parameters:

limit=100 max 200offset=0id=deviceModelIdsearch=namebrandId=brand_applecategoryId=cat_phone

Exemplo de request

Este endpoint não recebe body JSON.

Exemplo de response

{
  "data": [
    {
      "id": "dm_iphone_14_pro",
      "name": "iPhone 14 Pro",
      "releaseYear": 2022,
      "image": "https://cdn.revolio.io/device-models/iphone-14-pro.png",
      "brand": {
        "id": "brand_apple",
        "name": "Apple"
      },
      "category": {
        "id": "cat_phone",
        "name": "Smartphones"
      }
    }
  ],
  "pagination": {
    "total": 1,
    "limit": 20,
    "offset": 0,
    "hasMore": false
  }
}

Try it out

Este pedido usa a configuração de autenticação definida no topo do explorer.

URL executada

/api/public/v1/catalog/device-models

Body JSON editável

Este endpoint não recebe body JSON.

Resposta em direto

Executa o pedido neste card para validares status, tempo e corpo real da resposta.

Ainda não executaste nenhum pedido neste endpoint.
GET/api/public/v1/catalog/problem-types

Obter tipos de avaria para alimentar orçamentos e fluxos de criação.

Required scope: repairs.readAuth por API key
Sucesso esperado: 200Erro possível: 401Erro possível: 403Erro possível: 429Erro possível: 500

Query Parameters:

limit=100 max 200offset=0id=problemTypeIdsearch=name

Exemplo de request

Este endpoint não recebe body JSON.

Exemplo de response

{
  "data": [
    {
      "id": "problem_screen",
      "name": "Ecra partido",
      "description": "Substituicao de ecra ou vidro",
      "icon": "smartphone",
      "categoryIds": [
        "cat_phone"
      ],
      "mappingTags": [
        "screen",
        "display"
      ]
    }
  ],
  "pagination": {
    "total": 1,
    "limit": 20,
    "offset": 0,
    "hasMore": false
  }
}

Try it out

Este pedido usa a configuração de autenticação definida no topo do explorer.

URL executada

/api/public/v1/catalog/problem-types

Body JSON editável

Este endpoint não recebe body JSON.

Resposta em direto

Executa o pedido neste card para validares status, tempo e corpo real da resposta.

Ainda não executaste nenhum pedido neste endpoint.
GET/api/public/v1/catalog/repair-statuses

Listar todos os estados de reparação suportados.

Required scope: repairs.readAuth por API key
Sucesso esperado: 200Erro possível: 401Erro possível: 403Erro possível: 429Erro possível: 500

Exemplo de request

Este endpoint não recebe body JSON.

Exemplo de response

{
  "data": [
    "PENDING_PAYMENT",
    "PAYMENT_FAILED",
    "PAID",
    "CONFIRMED",
    "IN_REPAIR",
    "COMPLETED",
    "DELIVERED"
  ]
}

Try it out

Este pedido usa a configuração de autenticação definida no topo do explorer.

URL executada

/api/public/v1/catalog/repair-statuses

Body JSON editável

Este endpoint não recebe body JSON.

Resposta em direto

Executa o pedido neste card para validares status, tempo e corpo real da resposta.

Ainda não executaste nenhum pedido neste endpoint.

Reparações e operação

Toda a camada operacional de reparações: listagem, criação, detalhe, timeline, items, serviços, mensagens, pagamentos e alteração de estado.

GET/api/public/v1/repairs

List repairs for your shop. Supports pagination and filtering.

Required scope: repairs.readAuth por API key
Sucesso esperado: 200Erro possível: 401Erro possível: 403Erro possível: 429Erro possível: 500

Query Parameters:

limit=20 max 100offset=0status=PENDING_PAYMENTtrackingCode=REP-ABC123

Exemplo de request

Este endpoint não recebe body JSON.

Exemplo de response

{
  "data": [
    {
      "id": "repair_123",
      "trackingCode": "REP-ABC123",
      "status": "PENDING_PAYMENT",
      "customerName": "Joao Silva",
      "customerPhone": "+351912345678",
      "deviceDescription": "iPhone 14 Pro",
      "description": "Ecra partido",
      "estimatedPrice": 129.9,
      "finalPrice": 129.9,
      "createdAt": "2026-04-05T12:00:00.000Z",
      "updatedAt": "2026-04-05T12:00:00.000Z",
      "completedDate": null,
      "deliveredAt": null,
      "device": {
        "id": "dm_iphone_14_pro",
        "name": "iPhone 14 Pro",
        "brand": {
          "id": "brand_apple",
          "name": "Apple"
        }
      },
      "problemType": {
        "id": "problem_screen",
        "name": "Ecra partido"
      }
    }
  ],
  "pagination": {
    "total": 1,
    "limit": 20,
    "offset": 0,
    "hasMore": false
  }
}

Try it out

Este pedido usa a configuração de autenticação definida no topo do explorer.

URL executada

/api/public/v1/repairs

Body JSON editável

Este endpoint não recebe body JSON.

Resposta em direto

Executa o pedido neste card para validares status, tempo e corpo real da resposta.

Ainda não executaste nenhum pedido neste endpoint.
POST/api/public/v1/repairs

Create a repair (WooCommerce native checkout).

Required scope: repairs.writeAuth por API key
Sucesso esperado: 200Erro possível: 400Erro possível: 401Erro possível: 403Erro possível: 429Erro possível: 500

Exemplo de request

{
  "customer": {
    "name": "Joao Silva",
    "email": "joao@example.com",
    "phone": "+351912345678",
    "city": "Lisboa",
    "postalCode": "1000-001",
    "country": "PT"
  },
  "device": {
    "deviceModelId": "dm_iphone_14_pro",
    "description": "iPhone 14 Pro 128GB"
  },
  "imei": "490154203237518",
  "services": [
    {
      "problemTypeId": "problem_screen",
      "description": "Substituicao de ecra",
      "price": 129.9,
      "estimatedTime": 60
    }
  ],
  "deliveryMethod": "STORE_PICKUP",
  "description": "Cliente deixou o equipamento no balcao",
  "external": {
    "source": "woocommerce",
    "orderId": "WC-1001"
  }
}

Exemplo de response

{
  "data": {
    "repairId": "repair_123",
    "trackingCode": "REP-ABC123",
    "total": 129.9,
    "currency": "EUR",
    "status": "PENDING_PAYMENT"
  }
}

Try it out

Este pedido usa a configuração de autenticação definida no topo do explorer.

URL executada

/api/public/v1/repairs

Body JSON editável

Resposta em direto

Executa o pedido neste card para validares status, tempo e corpo real da resposta.

Ainda não executaste nenhum pedido neste endpoint.
POST/api/public/v1/repairs/quote

Get pricing quote for repair services.

Required scope: pricing.readAuth por API key
Sucesso esperado: 200Erro possível: 400Erro possível: 401Erro possível: 403Erro possível: 404Erro possível: 429Erro possível: 500

Exemplo de request

{
  "services": [
    {
      "problemTypeId": "problem_screen",
      "deviceModelId": "dm_iphone_14_pro"
    }
  ]
}

Exemplo de response

{
  "data": {
    "currency": "EUR",
    "total": 129.9,
    "lines": [
      {
        "problemTypeId": "problem_screen",
        "repairShopPriceId": "price_123",
        "basePrice": 129.9,
        "hasVariants": false,
        "variants": [],
        "selectedVariantId": null,
        "resolvedPrice": 129.9,
        "estimatedTime": 60,
        "warrantyMonths": 6
      }
    ]
  }
}

Try it out

Este pedido usa a configuração de autenticação definida no topo do explorer.

URL executada

/api/public/v1/repairs/quote

Body JSON editável

Resposta em direto

Executa o pedido neste card para validares status, tempo e corpo real da resposta.

Ainda não executaste nenhum pedido neste endpoint.
GET/api/public/v1/repairs/{id}/quote-proposals

List formal quote proposals of a repair.

Required scope: repairs.readAuth por API key
Sucesso esperado: 200Erro possível: 401Erro possível: 403Erro possível: 404Erro possível: 429Erro possível: 500

Path params

id=repairId ou trackingCode

Exemplo de request

Este endpoint não recebe body JSON.

Exemplo de response

{
  "data": [
    {
      "id": "proposal_123",
      "status": "SENT",
      "version": 1,
      "title": "Ecrã iPhone 13",
      "options": [
        {
          "id": "opt_1",
          "title": "Original",
          "totalPrice": 89.9,
          "isRecommended": true
        }
      ]
    }
  ]
}

Try it out

Este pedido usa a configuração de autenticação definida no topo do explorer.

URL executada

/api/public/v1/repairs/{id}/quote-proposals

Body JSON editável

Este endpoint não recebe body JSON.

Resposta em direto

Executa o pedido neste card para validares status, tempo e corpo real da resposta.

Ainda não executaste nenhum pedido neste endpoint.
POST/api/public/v1/repairs/{id}/quote-proposals

Create a formal quote proposal with options and lines.

Required scope: repairs.writeAuth por API key
Sucesso esperado: 200Erro possível: 400Erro possível: 401Erro possível: 403Erro possível: 404Erro possível: 429Erro possível: 500

Path params

id=repairId ou trackingCode

Exemplo de request

{
  "title": "Ecrã iPhone 13",
  "customerMessage": "Orçamento válido por 7 dias.",
  "options": [
    {
      "title": "Original",
      "isRecommended": true,
      "lines": [
        {
          "type": "PART",
          "label": "Ecrã OLED",
          "quantity": 1,
          "unitPrice": 65
        },
        {
          "type": "LABOR",
          "label": "Mão de obra",
          "quantity": 1,
          "unitPrice": 24.9
        }
      ]
    }
  ]
}

Exemplo de response

{
  "data": {
    "id": "proposal_123",
    "status": "SENT",
    "version": 1,
    "title": "Ecrã iPhone 13",
    "options": [
      {
        "id": "opt_1",
        "title": "Original",
        "totalPrice": 89.9,
        "isRecommended": true
      }
    ]
  }
}

Try it out

Este pedido usa a configuração de autenticação definida no topo do explorer.

URL executada

/api/public/v1/repairs/{id}/quote-proposals

Body JSON editável

Resposta em direto

Executa o pedido neste card para validares status, tempo e corpo real da resposta.

Ainda não executaste nenhum pedido neste endpoint.
GET/api/public/v1/repairs/{id}

Obter o detalhe completo de uma reparação.

Required scope: repairs.readAuth por API key
Sucesso esperado: 200Erro possível: 401Erro possível: 403Erro possível: 404Erro possível: 429Erro possível: 500

Path params

id=repairId

Exemplo de request

Este endpoint não recebe body JSON.

Exemplo de response

{
  "data": {
    "id": "repair_123",
    "trackingCode": "REP-ABC123",
    "status": "PENDING_PAYMENT",
    "priority": "NORMAL",
    "customer": {
      "name": "Joao Silva",
      "phone": "+351912345678",
      "email": "joao@example.com"
    },
    "device": {
      "id": "dm_iphone_14_pro",
      "name": "iPhone 14 Pro",
      "brand": {
        "id": "brand_apple",
        "name": "Apple"
      },
      "description": "iPhone 14 Pro 128GB"
    },
    "problemType": {
      "id": "problem_screen",
      "name": "Ecra partido"
    },
    "description": "Cliente deixou o equipamento no balcao",
    "internalNotes": null,
    "pricing": {
      "estimated": 129.9,
      "final": 129.9,
      "paid": 0
    },
    "parts": [
      {
        "id": "repair_part_1",
        "name": "Ecra OLED",
        "quantity": 1,
        "unitPrice": 79.9,
        "totalPrice": 79.9
      }
    ],
    "dates": {
      "created": "2026-04-05T12:00:00.000Z",
      "updated": "2026-04-05T12:00:00.000Z",
      "estimatedCompletion": null,
      "completed": null,
      "delivered": null
    },
    "statusHistory": [
      {
        "id": "hist_1",
        "status": "PENDING_PAYMENT",
        "notes": "Created via Public API",
        "timestamp": "2026-04-05T12:00:00.000Z"
      }
    ]
  }
}

Try it out

Este pedido usa a configuração de autenticação definida no topo do explorer.

URL executada

/api/public/v1/repairs/{id}

Body JSON editável

Este endpoint não recebe body JSON.

Resposta em direto

Executa o pedido neste card para validares status, tempo e corpo real da resposta.

Ainda não executaste nenhum pedido neste endpoint.
POST/api/public/v1/repairs/{id}/status

Atualizar o estado da reparação e registar notas operacionais.

Required scope: repairs.writeAuth por API key
Sucesso esperado: 200Erro possível: 400Erro possível: 401Erro possível: 403Erro possível: 404Erro possível: 429Erro possível: 500

Path params

id=repairId

Exemplo de request

{
  "status": "IN_REPAIR",
  "notes": "Equipamento em bancada"
}

Exemplo de response

{
  "data": {
    "id": "repair_123",
    "status": "IN_REPAIR"
  }
}

Try it out

Este pedido usa a configuração de autenticação definida no topo do explorer.

URL executada

/api/public/v1/repairs/{id}/status

Body JSON editável

Resposta em direto

Executa o pedido neste card para validares status, tempo e corpo real da resposta.

Ainda não executaste nenhum pedido neste endpoint.
GET/api/public/v1/repairs/{id}/items

Listar items associados a uma reparação.

Required scope: repairs.readAuth por API key
Sucesso esperado: 200Erro possível: 401Erro possível: 403Erro possível: 404Erro possível: 429Erro possível: 500

Path params

id=repairId

Exemplo de request

Este endpoint não recebe body JSON.

Exemplo de response

{
  "data": [
    {
      "id": "repair_item_1",
      "name": "Ecra OLED",
      "description": "Ecra premium",
      "quantity": 1,
      "price": 79.9,
      "createdAt": "2026-04-05T12:05:00.000Z",
      "updatedAt": "2026-04-05T12:05:00.000Z",
      "part": {
        "id": "part_1",
        "sku": "SCR-IPH14PRO",
        "name": "Ecra OLED"
      }
    }
  ]
}

Try it out

Este pedido usa a configuração de autenticação definida no topo do explorer.

URL executada

/api/public/v1/repairs/{id}/items

Body JSON editável

Este endpoint não recebe body JSON.

Resposta em direto

Executa o pedido neste card para validares status, tempo e corpo real da resposta.

Ainda não executaste nenhum pedido neste endpoint.
GET/api/public/v1/repairs/{id}/services

Listar serviços associados a uma reparação.

Required scope: repairs.readAuth por API key
Sucesso esperado: 200Erro possível: 401Erro possível: 403Erro possível: 404Erro possível: 429Erro possível: 500

Path params

id=repairId

Exemplo de request

Este endpoint não recebe body JSON.

Exemplo de response

{
  "data": [
    {
      "id": "service_1",
      "description": "Substituicao de ecra",
      "price": 129.9,
      "estimatedTime": 60,
      "sortOrder": 0,
      "createdAt": "2026-04-05T12:00:00.000Z",
      "updatedAt": "2026-04-05T12:00:00.000Z",
      "problemType": {
        "id": "problem_screen",
        "name": "Ecra partido"
      },
      "selectedVariant": null,
      "selectedSparePart": null,
      "supplier": null
    }
  ]
}

Try it out

Este pedido usa a configuração de autenticação definida no topo do explorer.

URL executada

/api/public/v1/repairs/{id}/services

Body JSON editável

Este endpoint não recebe body JSON.

Resposta em direto

Executa o pedido neste card para validares status, tempo e corpo real da resposta.

Ainda não executaste nenhum pedido neste endpoint.
GET/api/public/v1/repairs/{id}/messages

Listar mensagens do thread da reparação.

Required scope: messages.readAuth por API key
Sucesso esperado: 200Erro possível: 401Erro possível: 403Erro possível: 404Erro possível: 429Erro possível: 500

Path params

id=repairId

Query Parameters:

limit=50 max 100offset=0

Exemplo de request

Este endpoint não recebe body JSON.

Exemplo de response

{
  "data": [
    {
      "id": "msg_1",
      "message": "A reparacao ja entrou em bancada.",
      "createdAt": "2026-04-05T13:00:00.000Z",
      "updatedAt": "2026-04-05T13:00:00.000Z",
      "sender": {
        "id": "shop_123",
        "name": "Loja Exemplo",
        "email": "loja@example.com",
        "role": "REPAIR_SHOP"
      }
    }
  ],
  "pagination": {
    "total": 1,
    "limit": 50,
    "offset": 0,
    "hasMore": false
  }
}

Try it out

Este pedido usa a configuração de autenticação definida no topo do explorer.

URL executada

/api/public/v1/repairs/{id}/messages

Body JSON editável

Este endpoint não recebe body JSON.

Resposta em direto

Executa o pedido neste card para validares status, tempo e corpo real da resposta.

Ainda não executaste nenhum pedido neste endpoint.
POST/api/public/v1/repairs/{id}/messages

Send a message on a repair thread.

Required scope: messages.writeAuth por API key
Sucesso esperado: 200Erro possível: 400Erro possível: 401Erro possível: 403Erro possível: 404Erro possível: 429Erro possível: 500

Path params

id=repairId

Exemplo de request

{
  "message": "A reparacao ja entrou em bancada."
}

Exemplo de response

{
  "data": {
    "id": "msg_1",
    "message": "A reparacao ja entrou em bancada.",
    "createdAt": "2026-04-05T13:00:00.000Z",
    "updatedAt": "2026-04-05T13:00:00.000Z"
  }
}

Try it out

Este pedido usa a configuração de autenticação definida no topo do explorer.

URL executada

/api/public/v1/repairs/{id}/messages

Body JSON editável

Resposta em direto

Executa o pedido neste card para validares status, tempo e corpo real da resposta.

Ainda não executaste nenhum pedido neste endpoint.
GET/api/public/v1/repairs/{id}/payments

Listar pagamentos de uma reparação.

Required scope: payments.readAuth por API key
Sucesso esperado: 200Erro possível: 401Erro possível: 403Erro possível: 404Erro possível: 429Erro possível: 500

Path params

id=repairId

Exemplo de request

Este endpoint não recebe body JSON.

Exemplo de response

{
  "data": [
    {
      "id": "payment_1",
      "amount": 129.9,
      "currency": "eur",
      "status": "COMPLETED",
      "method": "woocommerce",
      "paymentMethodType": "card",
      "paymentMethodDetails": {
        "orderId": "WC-1001"
      },
      "platformFee": null,
      "shopAmount": null,
      "failureReason": null,
      "createdAt": "2026-04-05T14:00:00.000Z",
      "updatedAt": "2026-04-05T14:00:00.000Z",
      "releasedAt": null
    }
  ]
}

Try it out

Este pedido usa a configuração de autenticação definida no topo do explorer.

URL executada

/api/public/v1/repairs/{id}/payments

Body JSON editável

Este endpoint não recebe body JSON.

Resposta em direto

Executa o pedido neste card para validares status, tempo e corpo real da resposta.

Ainda não executaste nenhum pedido neste endpoint.
POST/api/public/v1/repairs/{id}/payments

Register a payment for a repair.

Required scope: payments.writeAuth por API key
Sucesso esperado: 200Erro possível: 400Erro possível: 401Erro possível: 403Erro possível: 404Erro possível: 429Erro possível: 500

Path params

id=repairId

Exemplo de request

{
  "amount": 129.9,
  "currency": "EUR",
  "status": "COMPLETED",
  "method": "woocommerce",
  "paymentMethodType": "card",
  "details": {
    "orderId": "WC-1001"
  }
}

Exemplo de response

{
  "data": {
    "id": "payment_1",
    "amount": 129.9,
    "currency": "eur",
    "status": "COMPLETED",
    "method": "woocommerce",
    "createdAt": "2026-04-05T14:00:00.000Z",
    "repair": {
      "id": "repair_123",
      "status": "PAID"
    }
  }
}

Try it out

Este pedido usa a configuração de autenticação definida no topo do explorer.

URL executada

/api/public/v1/repairs/{id}/payments

Body JSON editável

Resposta em direto

Executa o pedido neste card para validares status, tempo e corpo real da resposta.

Ainda não executaste nenhum pedido neste endpoint.
GET/api/public/v1/repairs/{id}/events

Obter a timeline de eventos de uma reparação.

Required scope: repairs.readAuth por API key
Sucesso esperado: 200Erro possível: 401Erro possível: 403Erro possível: 429Erro possível: 500

Path params

id=repairId

Exemplo de request

Este endpoint não recebe body JSON.

Exemplo de response

{
  "data": [
    {
      "id": "hist_1",
      "type": "status_changed",
      "status": "IN_REPAIR",
      "notes": "Equipamento em bancada",
      "updatedBy": "shop_123",
      "updatedByType": "REPAIR_SHOP",
      "employee": null,
      "createdAt": "2026-04-05T14:10:00.000Z"
    }
  ]
}

Try it out

Este pedido usa a configuração de autenticação definida no topo do explorer.

URL executada

/api/public/v1/repairs/{id}/events

Body JSON editável

Este endpoint não recebe body JSON.

Resposta em direto

Executa o pedido neste card para validares status, tempo e corpo real da resposta.

Ainda não executaste nenhum pedido neste endpoint.
POST/api/public/v1/repairs/{id}/diagnostics

Registar o resultado do diagnóstico de um equipamento (score, grade e resultados) numa reparação.

Required scope: diagnostics.writeAuth por API key
Sucesso esperado: 201Erro possível: 400Erro possível: 401Erro possível: 403Erro possível: 404Erro possível: 429Erro possível: 500

Path params

id=repairId

Exemplo de request

{
  "deviceInfo": {
    "model": "iPhone 14 Pro",
    "os": "iOS 18"
  },
  "score": 82,
  "grade": "B",
  "results": {
    "screen": "ok",
    "battery": "degraded"
  },
  "agentVersion": "forense-1.4.0"
}

Exemplo de response

{
  "data": {
    "id": "diag_123"
  }
}

Try it out

Este pedido usa a configuração de autenticação definida no topo do explorer.

URL executada

/api/public/v1/repairs/{id}/diagnostics

Body JSON editável

Resposta em direto

Executa o pedido neste card para validares status, tempo e corpo real da resposta.

Ainda não executaste nenhum pedido neste endpoint.
POST/api/public/v1/repairs/{id}/diagnostics/analysis

Correr a análise forense IA sobre um diagnóstico guardado (pode demorar até 60s, consome créditos de diagnóstico).

Required scope: diagnostics.writeAuth por API key
Sucesso esperado: 200Erro possível: 400Erro possível: 401Erro possível: 403Erro possível: 404Erro possível: 429Erro possível: 500Erro possível: 502

Path params

id=repairId

Exemplo de request

{
  "deviceDiagnosticId": "diag_123",
  "language": "pt-PT"
}

Exemplo de response

{
  "analysis": {
    "verdict": "screen_genuine",
    "confidence": 0.94,
    "notes": "Compatível com peça original."
  },
  "diagnosticId": "diag_123"
}

Try it out

Este pedido usa a configuração de autenticação definida no topo do explorer.

URL executada

/api/public/v1/repairs/{id}/diagnostics/analysis

Body JSON editável

Resposta em direto

Executa o pedido neste card para validares status, tempo e corpo real da resposta.

Ainda não executaste nenhum pedido neste endpoint.
POST/api/public/v1/uploads/presigned

Obter URL pré-assinado para upload de relatório forense em PDF (só application/pdf).

Required scope: repairs.writeAuth por API key
Sucesso esperado: 200Erro possível: 400Erro possível: 401Erro possível: 403Erro possível: 429Erro possível: 500Erro possível: 501

Exemplo de request

{
  "fileName": "relatorio-forense-REP-ABC123.pdf",
  "contentType": "application/pdf"
}

Exemplo de response

{
  "uploadUrl": "https://storage.revolio.io/uploads/forense/shop_123/1710-relatorio.pdf?signature=...",
  "publicUrl": "https://cdn.revolio.io/uploads/forense/shop_123/1710-relatorio.pdf"
}

Try it out

Este pedido usa a configuração de autenticação definida no topo do explorer.

URL executada

/api/public/v1/uploads/presigned

Body JSON editável

Resposta em direto

Executa o pedido neste card para validares status, tempo e corpo real da resposta.

Ainda não executaste nenhum pedido neste endpoint.

Clientes e analítica

Consulta o relacionamento da loja com os clientes e os indicadores operacionais agregados sem sair do canal da API pública.

GET/api/public/v1/customers

Listar clientes da loja com pesquisa, contagem de reparações e última atividade.

Required scope: customers.readAuth por API key
Sucesso esperado: 200Erro possível: 401Erro possível: 403Erro possível: 429Erro possível: 500

Query Parameters:

limit=20 max 100offset=0search=name|email|phone

Exemplo de request

Este endpoint não recebe body JSON.

Exemplo de response

{
  "data": [
    {
      "id": "customer_1",
      "name": "Joao Silva",
      "email": "joao@example.com",
      "phone": "+351912345678",
      "nif": "123456789",
      "address": "Rua da Revolio 10",
      "city": "Lisboa",
      "postalCode": "1000-001",
      "country": "PT",
      "repairsCount": 3,
      "lastRepairAt": "2026-04-05T12:00:00.000Z"
    }
  ],
  "pagination": {
    "total": 1,
    "limit": 20,
    "offset": 0,
    "hasMore": false
  }
}

Try it out

Este pedido usa a configuração de autenticação definida no topo do explorer.

URL executada

/api/public/v1/customers

Body JSON editável

Este endpoint não recebe body JSON.

Resposta em direto

Executa o pedido neste card para validares status, tempo e corpo real da resposta.

Ainda não executaste nenhum pedido neste endpoint.
GET/api/public/v1/customers/{id}

Obter o detalhe de um cliente e as suas reparações recentes.

Required scope: customers.readAuth por API key
Sucesso esperado: 200Erro possível: 401Erro possível: 403Erro possível: 404Erro possível: 429Erro possível: 500

Path params

id=customerId

Exemplo de request

Este endpoint não recebe body JSON.

Exemplo de response

{
  "data": {
    "id": "customer_1",
    "name": "Joao Silva",
    "email": "joao@example.com",
    "phone": "+351912345678",
    "nif": "123456789",
    "address": "Rua da Revolio 10",
    "city": "Lisboa",
    "postalCode": "1000-001",
    "country": "PT",
    "repairsCount": 3,
    "recentRepairs": [
      {
        "id": "repair_123",
        "trackingCode": "REP-ABC123",
        "status": "PENDING_PAYMENT",
        "deviceDescription": "iPhone 14 Pro",
        "estimatedPrice": 129.9,
        "finalPrice": 129.9,
        "createdAt": "2026-04-05T12:00:00.000Z"
      }
    ],
    "createdAt": "2025-10-12T09:00:00.000Z",
    "updatedAt": "2026-04-05T12:00:00.000Z"
  }
}

Try it out

Este pedido usa a configuração de autenticação definida no topo do explorer.

URL executada

/api/public/v1/customers/{id}

Body JSON editável

Este endpoint não recebe body JSON.

Resposta em direto

Executa o pedido neste card para validares status, tempo e corpo real da resposta.

Ainda não executaste nenhum pedido neste endpoint.
GET/api/public/v1/stats

Obter resumo de reparações, clientes e receita agregada da loja.

Required scope: repairs.readAuth por API key
Sucesso esperado: 200Erro possível: 401Erro possível: 403Erro possível: 429Erro possível: 500

Exemplo de request

Este endpoint não recebe body JSON.

Exemplo de response

{
  "data": {
    "repairs": {
      "total": 340,
      "thisMonth": 25,
      "lastMonth": 21,
      "byStatus": {
        "pending": 9,
        "inProgress": 7,
        "completed": 17
      }
    },
    "customers": {
      "total": 210
    },
    "revenue": {
      "total": 48210.5,
      "thisMonth": 3290.2
    },
    "generatedAt": "2026-04-05T12:00:00.000Z"
  }
}

Try it out

Este pedido usa a configuração de autenticação definida no topo do explorer.

URL executada

/api/public/v1/stats

Body JSON editável

Este endpoint não recebe body JSON.

Resposta em direto

Executa o pedido neste card para validares status, tempo e corpo real da resposta.

Ainda não executaste nenhum pedido neste endpoint.
GET/api/public/v1/analytics/repairs

Obter analítica agregada de reparações por intervalo temporal.

Required scope: repairs.readAuth por API key
Sucesso esperado: 200Erro possível: 400Erro possível: 401Erro possível: 403Erro possível: 429Erro possível: 500

Query Parameters:

from=ISO dateto=ISO date

Exemplo de request

Este endpoint não recebe body JSON.

Exemplo de response

{
  "data": {
    "range": {
      "from": "2026-03-01T00:00:00.000Z",
      "to": "2026-03-31T23:59:59.999Z"
    },
    "repairs": {
      "created": 25,
      "completed": 18,
      "byStatus": {
        "PAID": 4,
        "IN_REPAIR": 7,
        "COMPLETED": 10
      },
      "avgCompletionDays": 2.4
    },
    "customers": {
      "unique": 21
    },
    "revenue": {
      "total": 3290.2
    },
    "series": {
      "dailyCreatedRepairs": [
        {
          "date": "2026-03-01",
          "count": 2
        },
        {
          "date": "2026-03-02",
          "count": 1
        }
      ]
    }
  }
}

Try it out

Este pedido usa a configuração de autenticação definida no topo do explorer.

URL executada

/api/public/v1/analytics/repairs

Body JSON editável

Este endpoint não recebe body JSON.

Resposta em direto

Executa o pedido neste card para validares status, tempo e corpo real da resposta.

Ainda não executaste nenhum pedido neste endpoint.

Peças, ofertas e fornecedores

Tens duas camadas de peças na API: a lista legacy `/parts` e o catálogo expandido `/spare-parts` com shipping, ordering e comparação de ofertas.

GET/api/public/v1/parts

Listar a camada legacy de peças.

Required scope: parts.readAuth por API key
Sucesso esperado: 200Erro possível: 401Erro possível: 403Erro possível: 429Erro possível: 500

Query Parameters:

limit=20 max 100offset=0search=name|skubrandId=brand_appledeviceId=device_123

Exemplo de request

Este endpoint não recebe body JSON.

Exemplo de response

{
  "data": [
    {
      "id": "part_1",
      "sku": "SCR-IPH14PRO",
      "name": "Ecra OLED",
      "description": "Ecra premium",
      "category": "Displays",
      "price": 79.9,
      "stock": 12,
      "images": [
        "https://cdn.revolio.io/parts/scr-iph14pro.png"
      ],
      "brand": {
        "id": "brand_apple",
        "name": "Apple"
      },
      "device": {
        "id": "device_123",
        "name": "iPhone 14 Pro"
      },
      "createdAt": "2026-04-05T12:00:00.000Z",
      "updatedAt": "2026-04-05T12:00:00.000Z"
    }
  ],
  "pagination": {
    "total": 1,
    "limit": 20,
    "offset": 0,
    "hasMore": false
  }
}

Try it out

Este pedido usa a configuração de autenticação definida no topo do explorer.

URL executada

/api/public/v1/parts

Body JSON editável

Este endpoint não recebe body JSON.

Resposta em direto

Executa o pedido neste card para validares status, tempo e corpo real da resposta.

Ainda não executaste nenhum pedido neste endpoint.
GET/api/public/v1/spare-parts

Listar peças com filtros por marca, equipamento, categoria, componente e pesquisa livre.

Required scope: parts.readAuth por API key
Sucesso esperado: 200Erro possível: 401Erro possível: 403Erro possível: 429Erro possível: 500

Query Parameters:

limit=20 max 100offset=0search=name|sku|descriptionbrandId=brand_appledeviceId=device_123categoryId=cat_phonecomponentTypeId=component_screensortBy=price_asc

Exemplo de request

Este endpoint não recebe body JSON.

Exemplo de response

{
  "data": [
    {
      "id": "spare_part_1",
      "sku": "SCR-IPH14PRO",
      "ean": "1234567890123",
      "name": "Ecra OLED",
      "description": "Ecra premium",
      "price": 74.9,
      "originalPrice": 79.9,
      "stock": 12,
      "images": [
        "https://cdn.revolio.io/parts/scr-iph14pro.png"
      ],
      "availability": true,
      "deliveryTime": 1,
      "category": {
        "id": "cat_phone",
        "name": "Smartphones"
      },
      "brand": {
        "id": "brand_apple",
        "name": "Apple",
        "logo": "https://cdn.revolio.io/brands/apple.svg"
      },
      "device": {
        "id": "dm_iphone_14_pro",
        "name": "iPhone 14 Pro",
        "image": "https://cdn.revolio.io/device-models/iphone-14-pro.png"
      },
      "componentType": {
        "id": "component_screen",
        "name": "Ecra"
      },
      "compatibility": [
        "iPhone 14 Pro"
      ],
      "createdAt": "2026-04-05T12:00:00.000Z",
      "offers": [
        {
          "source": "SPARE_PART",
          "partId": "spare_part_1",
          "supplierName": "Revolio",
          "isOfficialSupplier": true,
          "price": 79.9,
          "stock": 12,
          "availability": true,
          "deliveryTime": 1
        },
        {
          "source": "SUPPLIER_PRODUCT",
          "supplierProductId": "sup_prod_1",
          "supplierId": "supplier_1",
          "supplierName": "Distribuidor X",
          "supplierLogo": null,
          "isOfficialSupplier": false,
          "price": 74.9,
          "stock": 5,
          "availability": true,
          "deliveryTime": 2
        }
      ]
    }
  ],
  "pagination": {
    "total": 1,
    "limit": 20,
    "offset": 0,
    "hasMore": false
  }
}

Try it out

Este pedido usa a configuração de autenticação definida no topo do explorer.

URL executada

/api/public/v1/spare-parts

Body JSON editável

Este endpoint não recebe body JSON.

Resposta em direto

Executa o pedido neste card para validares status, tempo e corpo real da resposta.

Ainda não executaste nenhum pedido neste endpoint.
POST/api/public/v1/spare-parts/order

Criar um pedido de peças com validação de stock, tax e total final.

Required scope: parts.read + orders.writeAuth por API key
Sucesso esperado: 200Erro possível: 400Erro possível: 401Erro possível: 403Erro possível: 429Erro possível: 500

Exemplo de request

{
  "items": [
    {
      "partId": "spare_part_1",
      "quantity": 1
    }
  ],
  "notes": "Pedido para bancada 3"
}

Exemplo de response

{
  "data": {
    "id": "sp_order_1",
    "orderNumber": "SP1712323123ABCD",
    "status": "PENDING",
    "items": [
      {
        "id": "item_1",
        "name": "Ecra OLED",
        "sku": "SCR-IPH14PRO",
        "quantity": 1,
        "price": 79.9,
        "totalPrice": 79.9
      }
    ],
    "shippingCost": 5.5,
    "tax": 19.66,
    "total": 105.06,
    "currency": "EUR",
    "createdAt": "2026-04-05T15:00:00.000Z"
  }
}

Try it out

Este pedido usa a configuração de autenticação definida no topo do explorer.

URL executada

/api/public/v1/spare-parts/order

Body JSON editável

Resposta em direto

Executa o pedido neste card para validares status, tempo e corpo real da resposta.

Ainda não executaste nenhum pedido neste endpoint.
POST/api/public/v1/spare-parts/shipping

Calcular custo de envio de peças antes de fechar a encomenda.

Required scope: parts.readAuth por API key
Sucesso esperado: 200Erro possível: 400Erro possível: 401Erro possível: 403Erro possível: 429Erro possível: 500

Exemplo de request

{
  "items": [
    {
      "partId": "spare_part_1",
      "quantity": 1
    }
  ]
}

Exemplo de response

{
  "ok": true,
  "data": {
    "shippingCost": 5.5,
    "breakdown": [
      {
        "supplierId": "REVOLIO",
        "cost": 5.5
      }
    ]
  }
}

Try it out

Este pedido usa a configuração de autenticação definida no topo do explorer.

URL executada

/api/public/v1/spare-parts/shipping

Body JSON editável

Resposta em direto

Executa o pedido neste card para validares status, tempo e corpo real da resposta.

Ainda não executaste nenhum pedido neste endpoint.
GET/api/public/v1/suppliers

Listar fornecedores aprovados e filtrar por pesquisa.

Required scope: suppliers.readAuth por API key
Sucesso esperado: 200Erro possível: 401Erro possível: 403Erro possível: 429Erro possível: 500

Query Parameters:

limit=20 max 100offset=0search=name

Exemplo de request

Este endpoint não recebe body JSON.

Exemplo de response

{
  "data": [
    {
      "id": "supplier_1",
      "name": "Distribuidor X",
      "email": "comercial@distribuidorx.pt",
      "phone": "+351210000000",
      "website": "https://distribuidorx.pt",
      "taxId": "PT123456789",
      "address": "Av. Central 20",
      "city": "Porto",
      "postalCode": "4000-100",
      "country": "PT",
      "contactPerson": "Ana Costa",
      "paymentTerms": "30 dias",
      "rating": 4.8,
      "isReparia": false,
      "isActive": true,
      "createdAt": "2025-11-10T10:00:00.000Z",
      "updatedAt": "2026-04-05T11:00:00.000Z"
    }
  ],
  "pagination": {
    "total": 1,
    "limit": 20,
    "offset": 0,
    "hasMore": false
  }
}

Try it out

Este pedido usa a configuração de autenticação definida no topo do explorer.

URL executada

/api/public/v1/suppliers

Body JSON editável

Este endpoint não recebe body JSON.

Resposta em direto

Executa o pedido neste card para validares status, tempo e corpo real da resposta.

Ainda não executaste nenhum pedido neste endpoint.

WooCommerce e sync

Endpoints para ligar uma instalação WooCommerce, sincronizar clientes, encomendas e produtos e promover scopes sem reinstalar a chave.

GET/api/public/v1/woocommerce/capabilities

Consultar o que a instalação WooCommerce pode sincronizar com a tua chave atual.

Required scope: products.readAuth por API key
Sucesso esperado: 200Erro possível: 401Erro possível: 403Erro possível: 429Erro possível: 500

Exemplo de request

Este endpoint não recebe body JSON.

Exemplo de response

{
  "ok": true,
  "data": {
    "repairShopId": "shop_123",
    "siteUrl": "https://lojaexemplo.pt",
    "integration": {
      "appId": "woocommerce",
      "installationId": "install_1",
      "status": "ACTIVE"
    },
    "apps": {
      "inventoryManager": true
    }
  }
}

Try it out

Este pedido usa a configuração de autenticação definida no topo do explorer.

URL executada

/api/public/v1/woocommerce/capabilities

Body JSON editável

Este endpoint não recebe body JSON.

Resposta em direto

Executa o pedido neste card para validares status, tempo e corpo real da resposta.

Ainda não executaste nenhum pedido neste endpoint.
POST/api/public/v1/woocommerce/connect

Ligar uma instalação WooCommerce, gerar credenciais e preparar webhooks de sincronização.

Auth por email e password
Sucesso esperado: 200Erro possível: 400Erro possível: 401Erro possível: 402Erro possível: 403Erro possível: 429Erro possível: 500

Exemplo de request

{
  "email": "owner@lojaexemplo.pt",
  "password": "password-super-segura",
  "siteUrl": "https://lojaexemplo.pt",
  "installationName": "Woo principal"
}

Exemplo de response

{
  "ok": true,
  "data": {
    "installationId": "install_1",
    "webhookSecret": "whsec_xxxxxxxxxxxxxxxxx",
    "publicApiKey": {
      "token": "rvl_abcd_xxxxxxxxxxxxxxxxxxxxxx",
      "keyName": "WooCommerce",
      "scopes": [
        "repairs.read",
        "repairs.write",
        "customers.read",
        "products.write"
      ]
    }
  }
}

Try it out

Este endpoint usa credenciais no body e não envia API key no header.

URL executada

/api/public/v1/woocommerce/connect

Body JSON editável

Resposta em direto

Executa o pedido neste card para validares status, tempo e corpo real da resposta.

Ainda não executaste nenhum pedido neste endpoint.
POST/api/public/v1/woocommerce/customers/upsert

Criar ou atualizar clientes vindos do WooCommerce.

Required scope: customers.writeAuth por API key
Sucesso esperado: 200Erro possível: 400Erro possível: 401Erro possível: 403Erro possível: 429Erro possível: 500

Exemplo de request

{
  "siteUrl": "https://lojaexemplo.pt",
  "wooCustomerId": 501,
  "email": "cliente@example.com",
  "name": "Joao Silva",
  "phone": "+351912345678",
  "city": "Lisboa",
  "postalCode": "1000-001",
  "country": "PT"
}

Exemplo de response

{
  "ok": true,
  "data": {
    "revolioCustomerId": "customer_1"
  }
}

Try it out

Este pedido usa a configuração de autenticação definida no topo do explorer.

URL executada

/api/public/v1/woocommerce/customers/upsert

Body JSON editável

Resposta em direto

Executa o pedido neste card para validares status, tempo e corpo real da resposta.

Ainda não executaste nenhum pedido neste endpoint.
POST/api/public/v1/woocommerce/orders/upsert

Criar ou atualizar encomendas vindas do WooCommerce.

Required scope: orders.writeAuth por API key
Sucesso esperado: 200Erro possível: 400Erro possível: 401Erro possível: 403Erro possível: 429Erro possível: 500

Exemplo de request

{
  "siteUrl": "https://lojaexemplo.pt",
  "wooOrderId": 1001,
  "wooOrderNumber": "1001",
  "status": "processing",
  "customer": {
    "name": "Joao Silva",
    "email": "joao@example.com",
    "phone": "+351912345678",
    "nif": "123456789"
  },
  "currency": "EUR",
  "items": [
    {
      "name": "Ecra OLED",
      "sku": "SCR-IPH14PRO",
      "quantity": 1,
      "unitPrice": 79.9,
      "taxRate": 23
    }
  ]
}

Exemplo de response

{
  "ok": true,
  "data": {
    "posOrderId": "pos_order_1",
    "status": "PAID"
  }
}

Try it out

Este pedido usa a configuração de autenticação definida no topo do explorer.

URL executada

/api/public/v1/woocommerce/orders/upsert

Body JSON editável

Resposta em direto

Executa o pedido neste card para validares status, tempo e corpo real da resposta.

Ainda não executaste nenhum pedido neste endpoint.
POST/api/public/v1/woocommerce/products/upsert

Criar ou atualizar produtos vindos do WooCommerce.

Required scope: products.writeAuth por API key
Sucesso esperado: 200Erro possível: 400Erro possível: 401Erro possível: 403Erro possível: 429Erro possível: 500

Exemplo de request

{
  "siteUrl": "https://lojaexemplo.pt",
  "wooProductId": 2001,
  "sku": "SCR-IPH14PRO",
  "name": "Ecra OLED",
  "description": "Ecra premium",
  "salePrice": 79.9,
  "stock": 12,
  "images": [
    "https://lojaexemplo.pt/wp-content/uploads/scr-iph14pro.png"
  ]
}

Exemplo de response

{
  "ok": true,
  "data": {
    "inventoryProductId": "inventory_1",
    "marketplaceProductId": "marketplace_1"
  }
}

Try it out

Este pedido usa a configuração de autenticação definida no topo do explorer.

URL executada

/api/public/v1/woocommerce/products/upsert

Body JSON editável

Resposta em direto

Executa o pedido neste card para validares status, tempo e corpo real da resposta.

Ainda não executaste nenhum pedido neste endpoint.
POST/api/public/v1/woocommerce/upgrade-scopes

Promover uma chave existente com os scopes necessários para WooCommerce.

Auth por email e password
Sucesso esperado: 200Erro possível: 400Erro possível: 401Erro possível: 402Erro possível: 403Erro possível: 404Erro possível: 429Erro possível: 500

Exemplo de request

{
  "email": "owner@lojaexemplo.pt",
  "password": "password-super-segura",
  "apiKey": "rvl_abcd_xxxxxxxxxxxxxxxxxxxxxx"
}

Exemplo de response

{
  "ok": true,
  "upgraded": true,
  "added": [
    "orders.write",
    "products.write"
  ],
  "scopes": [
    "repairs.read",
    "repairs.write",
    "orders.write",
    "products.write"
  ]
}

Try it out

Este endpoint usa credenciais no body e não envia API key no header.

URL executada

/api/public/v1/woocommerce/upgrade-scopes

Body JSON editável

Resposta em direto

Executa o pedido neste card para validares status, tempo e corpo real da resposta.

Ainda não executaste nenhum pedido neste endpoint.

Changelog

Alterações recentes do contrato público

Se vais integrar fluxos de escrita, não te fiques pela data do topo da página. Usa esta lista para perceber o que mudou recentemente na superfície pública.

Abril 2026

OpenAPI e Postman gerados a partir da source of truth atual

Os artefactos públicos passaram a ser gerados da mesma base que alimenta a referência desta página.

Outubro 2026

Diagnósticos forenses e uploads documentados

Os endpoints de diagnósticos (POST /repairs/{id}/diagnostics e /analysis) e de upload pré-assinado de PDFs forenses passaram a fazer parte da referência, com scopes e exemplos.