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
Criar a chave API
Entra no dashboard do lojista, abre Configurações e gera uma chave para a tua integração.
- 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
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
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", ... }.
400Payload ou query inválida
Valida campos obrigatórios, tipos, enums e limites do endpoint antes de repetires o pedido.
401Chave em falta ou inválida
Confirma header, formato da chave e se não estás a usar uma chave errada para outra loja.
402Plano ou subscrição necessária
Alguns fluxos dependem de subscrição ativa ou de capacidades adicionais no contexto da loja.
403Scope insuficiente
Volta ao dashboard, ajusta scopes e testa primeiro em /health antes de tentares o write de novo.
429Rate limit excedido
Implementa retry com backoff e evita burst desnecessário na mesma chave.
500Erro 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.
| Scope | Endpoints | Estado |
|---|---|---|
| repairs.read | 13 | Em uso |
| repairs.write | 4 | Em uso |
| customers.read | 2 | Em uso |
| customers.write | 1 | Em uso |
| orders.read | 0 | Reservado |
| orders.write | 2 | Em uso |
| products.read | 1 | Em uso |
| products.write | 1 | Em uso |
| payments.read | 1 | Em uso |
| payments.write | 1 | Em uso |
| messages.read | 1 | Em uso |
| messages.write | 1 | Em uso |
| parts.read | 6 | Em uso |
| suppliers.read | 1 | Em uso |
| inventory.read | 0 | Reservado |
| inventory.write | 0 | Reservado |
| storefront.read | 0 | Reservado |
| storefront.write | 0 | Reservado |
| pricing.read | 1 | Em uso |
| diagnostics.write | 2 | Em uso |
| mcp:use | 1 | Em 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/healthValidar a chave API e devolver o contexto autenticado da loja.
Auth por API key
/api/public/v1/healthValidar a chave API e devolver o contexto autenticado da loja.
Exemplo de request
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
Resposta em direto
Executa o pedido neste card para validares status, tempo e corpo real da resposta.
GET/api/public/v1/meObter um resumo do perfil autenticado da loja.
Required scope: parts.readAuth por API key
/api/public/v1/meObter um resumo do perfil autenticado da loja.
Exemplo de request
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
Resposta em direto
Executa o pedido neste card para validares status, tempo e corpo real da resposta.
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/mcpUse 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
/api/public/mcpUse 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).
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.
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/brandsListar marcas ativas do catálogo.
Required scope: repairs.readAuth por API key
/api/public/v1/catalog/brandsListar marcas ativas do catálogo.
Query Parameters:
Exemplo de request
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
Resposta em direto
Executa o pedido neste card para validares status, tempo e corpo real da resposta.
GET/api/public/v1/catalog/categoriesListar categorias ativas do catálogo.
Required scope: repairs.readAuth por API key
/api/public/v1/catalog/categoriesListar categorias ativas do catálogo.
Query Parameters:
Exemplo de request
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
Resposta em direto
Executa o pedido neste card para validares status, tempo e corpo real da resposta.
GET/api/public/v1/catalog/component-typesListar tipos de componente usados nos filtros de peças.
Required scope: parts.readAuth por API key
/api/public/v1/catalog/component-typesListar tipos de componente usados nos filtros de peças.
Query Parameters:
Exemplo de request
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
Resposta em direto
Executa o pedido neste card para validares status, tempo e corpo real da resposta.
GET/api/public/v1/catalog/device-modelsListar modelos de equipamento por marca, categoria ou pesquisa.
Required scope: repairs.readAuth por API key
/api/public/v1/catalog/device-modelsListar modelos de equipamento por marca, categoria ou pesquisa.
Query Parameters:
Exemplo de request
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
Resposta em direto
Executa o pedido neste card para validares status, tempo e corpo real da resposta.
GET/api/public/v1/catalog/problem-typesObter tipos de avaria para alimentar orçamentos e fluxos de criação.
Required scope: repairs.readAuth por API key
/api/public/v1/catalog/problem-typesObter tipos de avaria para alimentar orçamentos e fluxos de criação.
Query Parameters:
Exemplo de request
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
Resposta em direto
Executa o pedido neste card para validares status, tempo e corpo real da resposta.
GET/api/public/v1/catalog/repair-statusesListar todos os estados de reparação suportados.
Required scope: repairs.readAuth por API key
/api/public/v1/catalog/repair-statusesListar todos os estados de reparação suportados.
Exemplo de request
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
Resposta em direto
Executa o pedido neste card para validares status, tempo e corpo real da resposta.
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/repairsList repairs for your shop. Supports pagination and filtering.
Required scope: repairs.readAuth por API key
/api/public/v1/repairsList repairs for your shop. Supports pagination and filtering.
Query Parameters:
Exemplo de request
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
Resposta em direto
Executa o pedido neste card para validares status, tempo e corpo real da resposta.
POST/api/public/v1/repairsCreate a repair (WooCommerce native checkout).
Required scope: repairs.writeAuth por API key
/api/public/v1/repairsCreate a repair (WooCommerce native checkout).
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.
POST/api/public/v1/repairs/quoteGet pricing quote for repair services.
Required scope: pricing.readAuth por API key
/api/public/v1/repairs/quoteGet pricing quote for repair services.
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.
GET/api/public/v1/repairs/{id}/quote-proposalsList formal quote proposals of a repair.
Required scope: repairs.readAuth por API key
/api/public/v1/repairs/{id}/quote-proposalsList formal quote proposals of a repair.
Path params
Exemplo de request
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-proposalsBody JSON editável
Resposta em direto
Executa o pedido neste card para validares status, tempo e corpo real da resposta.
POST/api/public/v1/repairs/{id}/quote-proposalsCreate a formal quote proposal with options and lines.
Required scope: repairs.writeAuth por API key
/api/public/v1/repairs/{id}/quote-proposalsCreate a formal quote proposal with options and lines.
Path params
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-proposalsBody JSON editável
Resposta em direto
Executa o pedido neste card para validares status, tempo e corpo real da resposta.
GET/api/public/v1/repairs/{id}Obter o detalhe completo de uma reparação.
Required scope: repairs.readAuth por API key
/api/public/v1/repairs/{id}Obter o detalhe completo de uma reparação.
Path params
Exemplo de request
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
Resposta em direto
Executa o pedido neste card para validares status, tempo e corpo real da resposta.
POST/api/public/v1/repairs/{id}/statusAtualizar o estado da reparação e registar notas operacionais.
Required scope: repairs.writeAuth por API key
/api/public/v1/repairs/{id}/statusAtualizar o estado da reparação e registar notas operacionais.
Path params
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}/statusBody JSON editável
Resposta em direto
Executa o pedido neste card para validares status, tempo e corpo real da resposta.
GET/api/public/v1/repairs/{id}/itemsListar items associados a uma reparação.
Required scope: repairs.readAuth por API key
/api/public/v1/repairs/{id}/itemsListar items associados a uma reparação.
Path params
Exemplo de request
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}/itemsBody JSON editável
Resposta em direto
Executa o pedido neste card para validares status, tempo e corpo real da resposta.
GET/api/public/v1/repairs/{id}/servicesListar serviços associados a uma reparação.
Required scope: repairs.readAuth por API key
/api/public/v1/repairs/{id}/servicesListar serviços associados a uma reparação.
Path params
Exemplo de request
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}/servicesBody JSON editável
Resposta em direto
Executa o pedido neste card para validares status, tempo e corpo real da resposta.
GET/api/public/v1/repairs/{id}/messagesListar mensagens do thread da reparação.
Required scope: messages.readAuth por API key
/api/public/v1/repairs/{id}/messagesListar mensagens do thread da reparação.
Path params
Query Parameters:
Exemplo de request
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}/messagesBody JSON editável
Resposta em direto
Executa o pedido neste card para validares status, tempo e corpo real da resposta.
POST/api/public/v1/repairs/{id}/messagesSend a message on a repair thread.
Required scope: messages.writeAuth por API key
/api/public/v1/repairs/{id}/messagesSend a message on a repair thread.
Path params
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}/messagesBody JSON editável
Resposta em direto
Executa o pedido neste card para validares status, tempo e corpo real da resposta.
GET/api/public/v1/repairs/{id}/paymentsListar pagamentos de uma reparação.
Required scope: payments.readAuth por API key
/api/public/v1/repairs/{id}/paymentsListar pagamentos de uma reparação.
Path params
Exemplo de request
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}/paymentsBody JSON editável
Resposta em direto
Executa o pedido neste card para validares status, tempo e corpo real da resposta.
POST/api/public/v1/repairs/{id}/paymentsRegister a payment for a repair.
Required scope: payments.writeAuth por API key
/api/public/v1/repairs/{id}/paymentsRegister a payment for a repair.
Path params
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}/paymentsBody JSON editável
Resposta em direto
Executa o pedido neste card para validares status, tempo e corpo real da resposta.
GET/api/public/v1/repairs/{id}/eventsObter a timeline de eventos de uma reparação.
Required scope: repairs.readAuth por API key
/api/public/v1/repairs/{id}/eventsObter a timeline de eventos de uma reparação.
Path params
Exemplo de request
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}/eventsBody JSON editável
Resposta em direto
Executa o pedido neste card para validares status, tempo e corpo real da resposta.
POST/api/public/v1/repairs/{id}/diagnosticsRegistar o resultado do diagnóstico de um equipamento (score, grade e resultados) numa reparação.
Required scope: diagnostics.writeAuth por API key
/api/public/v1/repairs/{id}/diagnosticsRegistar o resultado do diagnóstico de um equipamento (score, grade e resultados) numa reparação.
Path params
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}/diagnosticsBody JSON editável
Resposta em direto
Executa o pedido neste card para validares status, tempo e corpo real da resposta.
POST/api/public/v1/repairs/{id}/diagnostics/analysisCorrer 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
/api/public/v1/repairs/{id}/diagnostics/analysisCorrer a análise forense IA sobre um diagnóstico guardado (pode demorar até 60s, consome créditos de diagnóstico).
Path params
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/analysisBody JSON editável
Resposta em direto
Executa o pedido neste card para validares status, tempo e corpo real da resposta.
POST/api/public/v1/uploads/presignedObter URL pré-assinado para upload de relatório forense em PDF (só application/pdf).
Required scope: repairs.writeAuth por API key
/api/public/v1/uploads/presignedObter URL pré-assinado para upload de relatório forense em PDF (só application/pdf).
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.
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/customersListar clientes da loja com pesquisa, contagem de reparações e última atividade.
Required scope: customers.readAuth por API key
/api/public/v1/customersListar clientes da loja com pesquisa, contagem de reparações e última atividade.
Query Parameters:
Exemplo de request
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
Resposta em direto
Executa o pedido neste card para validares status, tempo e corpo real da resposta.
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
/api/public/v1/customers/{id}Obter o detalhe de um cliente e as suas reparações recentes.
Path params
Exemplo de request
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
Resposta em direto
Executa o pedido neste card para validares status, tempo e corpo real da resposta.
GET/api/public/v1/statsObter resumo de reparações, clientes e receita agregada da loja.
Required scope: repairs.readAuth por API key
/api/public/v1/statsObter resumo de reparações, clientes e receita agregada da loja.
Exemplo de request
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
Resposta em direto
Executa o pedido neste card para validares status, tempo e corpo real da resposta.
GET/api/public/v1/analytics/repairsObter analítica agregada de reparações por intervalo temporal.
Required scope: repairs.readAuth por API key
/api/public/v1/analytics/repairsObter analítica agregada de reparações por intervalo temporal.
Query Parameters:
Exemplo de request
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
Resposta em direto
Executa o pedido neste card para validares status, tempo e corpo real da resposta.
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/partsListar a camada legacy de peças.
Required scope: parts.readAuth por API key
/api/public/v1/partsListar a camada legacy de peças.
Query Parameters:
Exemplo de request
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
Resposta em direto
Executa o pedido neste card para validares status, tempo e corpo real da resposta.
GET/api/public/v1/spare-partsListar peças com filtros por marca, equipamento, categoria, componente e pesquisa livre.
Required scope: parts.readAuth por API key
/api/public/v1/spare-partsListar peças com filtros por marca, equipamento, categoria, componente e pesquisa livre.
Query Parameters:
Exemplo de request
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
Resposta em direto
Executa o pedido neste card para validares status, tempo e corpo real da resposta.
POST/api/public/v1/spare-parts/orderCriar um pedido de peças com validação de stock, tax e total final.
Required scope: parts.read + orders.writeAuth por API key
/api/public/v1/spare-parts/orderCriar um pedido de peças com validação de stock, tax e total final.
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.
POST/api/public/v1/spare-parts/shippingCalcular custo de envio de peças antes de fechar a encomenda.
Required scope: parts.readAuth por API key
/api/public/v1/spare-parts/shippingCalcular custo de envio de peças antes de fechar a encomenda.
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.
GET/api/public/v1/suppliersListar fornecedores aprovados e filtrar por pesquisa.
Required scope: suppliers.readAuth por API key
/api/public/v1/suppliersListar fornecedores aprovados e filtrar por pesquisa.
Query Parameters:
Exemplo de request
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
Resposta em direto
Executa o pedido neste card para validares status, tempo e corpo real da resposta.
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/capabilitiesConsultar o que a instalação WooCommerce pode sincronizar com a tua chave atual.
Required scope: products.readAuth por API key
/api/public/v1/woocommerce/capabilitiesConsultar o que a instalação WooCommerce pode sincronizar com a tua chave atual.
Exemplo de request
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
Resposta em direto
Executa o pedido neste card para validares status, tempo e corpo real da resposta.
POST/api/public/v1/woocommerce/connectLigar uma instalação WooCommerce, gerar credenciais e preparar webhooks de sincronização.
Auth por email e password
/api/public/v1/woocommerce/connectLigar uma instalação WooCommerce, gerar credenciais e preparar webhooks de sincronização.
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.
POST/api/public/v1/woocommerce/customers/upsertCriar ou atualizar clientes vindos do WooCommerce.
Required scope: customers.writeAuth por API key
/api/public/v1/woocommerce/customers/upsertCriar ou atualizar clientes vindos do WooCommerce.
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.
POST/api/public/v1/woocommerce/orders/upsertCriar ou atualizar encomendas vindas do WooCommerce.
Required scope: orders.writeAuth por API key
/api/public/v1/woocommerce/orders/upsertCriar ou atualizar encomendas vindas do WooCommerce.
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.
POST/api/public/v1/woocommerce/products/upsertCriar ou atualizar produtos vindos do WooCommerce.
Required scope: products.writeAuth por API key
/api/public/v1/woocommerce/products/upsertCriar ou atualizar produtos vindos do WooCommerce.
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.
POST/api/public/v1/woocommerce/upgrade-scopesPromover uma chave existente com os scopes necessários para WooCommerce.
Auth por email e password
/api/public/v1/woocommerce/upgrade-scopesPromover uma chave existente com os scopes necessários para WooCommerce.
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.
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.
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.
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.