API
Integra a tua stack com a API pública da Revolio
Autenticação, scopes, exemplos de request/response e fluxos suportados para integrares reparações, catálogo técnico, pagamentos, clientes, peças e WooCommerce.
Atualizado em abril de 2026
Overview
O que esta API cobre
Começa aqui se precisas de perceber rapidamente o âmbito técnico da API antes de ligares um cliente, middleware, ponte WooCommerce ou pipeline de dados.
Domínios
6
Endpoints
35
Com escrita
12
Scopes
14
Boa para
- Sincronizar reparações, clientes, estados e pagamentos com ERP, CRM ou backoffice próprio.
- Ligar checkout, intake ou WooCommerce ao ciclo real de reparações da plataforma.
- Alimentar BI, ETL, data warehouse ou automações internas com dados operacionais autenticados.
- Consultar catálogo técnico, peças, fornecedores e shipping a partir do teu fluxo de integração.
Não é para
- Consumir dados públicos anonimamente: tudo depende de chave e contexto autenticado.
- Servir como marketplace genérico de apps OAuth ou plataforma pública de extensões.
- Substituir um SDK de UI embebida dentro do dashboard.
- Eliminar o dashboard da equação: chaves, scopes e ativação continuam a ser geridos lá.
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.
Passo 1
Criar a chave API
Entra no dashboard do lojista, abre Configurações e gera uma chave para a tua integração.
Passo 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.
Passo 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.
Passo 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.
Base URL
https://api.revolio.io/api/public/v1
Compatibilidade total mantida em https://www.revolio.io/api/public/v1
Headers aceites
X-API-Key: rvl_xxxxxxxx_xxxxxxxxxxxxxxxxxxxxxx Authorization: Bearer rvl_xxxxxxxx_xxxxxxxxxxxxxxxxxxxxxx
Exemplo de validação
curl -X GET https://api.revolio.io/api/public/v1/health -H "X-API-Key: rvl_xxxxxxxx_xxxxxxxxxxxxxxxxxxxxxx"
O que tens de confirmar na resposta
- Recebes `status: ok` e a versão da API.
- O bloco `context` devolve `repairShopId`, `keyId`, `keyName` e `scopes`.
- Se o contexto estiver correto, avança para uma leitura simples como `/me` ou `/repairs?limit=5`.
- Se falhar aqui, corrige chave e scopes antes de testares qualquer fluxo de escrita.
Leituras seguintes recomendadas
/api/public/v1/me/api/public/v1/repairs?limit=5/api/public/v1/catalog/device-models?limit=5Acesso e suporte técnico
Convenções
Convenções globais
Antes de ligares qualquer cliente ou middleware, assume estas regras de autenticação, contexto e operação.
Autenticação
Usa `X-API-Key` ou `Authorization: Bearer`. O contrato público atual está centrado em chave por loja.
Contexto por loja
Cada chave fica presa a uma loja e os dados devolvidos respeitam sempre esse perímetro.
Scopes por operação
Leitura e escrita estão separadas. Ajusta scopes no dashboard e evita dar privilégios a mais.
Paginação
Nas listagens que a suportam, trabalha com `limit` e `offset` e pagina sempre do lado do cliente.
JSON e timestamps
Os exemplos usam payloads JSON e timestamps ISO 8601. Quando um endpoint não recebe body, isso fica explícito na referência.
Versionamento e limites
Trabalha sobre /api/public/v1 e conta hoje com 100 pedidos por minuto por chave.
Casos de uso
Fluxos de integração prontos para arrancar
Se precisas de decidir por onde começar, estes quatro caminhos cobrem os cenários mais óbvios para uma integração externa.
Sincronizar o ciclo de reparações
Consulta backlog, lê detalhe, acompanha timeline e muda estados a partir do teu sistema interno.
- Lista em /repairs para obter backlog e tracking codes.
- Lê detalhe, mensagens, pagamentos e eventos por reparação.
- Usa /repairs/{id}/status só quando já tiveres os scopes de escrita certos.
/api/public/v1/repairs/api/public/v1/repairs/{id}/api/public/v1/repairs/{id}/statusCriar reparações a partir do checkout
Orçamenta antes, cria a reparação validada e guarda o contexto técnico no teu fluxo ecommerce.
- Calcula preços em /repairs/quote.
- Cria a reparação em /repairs com cliente, serviços e método de entrega.
- Segue estado, mensagens e pagamentos no mesmo tracking.
/api/public/v1/repairs/quote/api/public/v1/repairs/api/public/v1/repairs/{id}/paymentsLer clientes e indicadores
Cruza CRM, operação e analítica sem sair da API pública autenticada.
- Lista clientes com pesquisa e atividade recente.
- Consulta stats e analítica agregada para dashboards externos.
- Usa estes dados para BI, follow-up ou reporting interno.
/api/public/v1/customers/api/public/v1/stats/api/public/v1/analytics/repairsProcurar peças e fechar pedidos
Pesquisa o catálogo, compara ofertas, calcula shipping e só depois cria o pedido.
- Pesquisa em /spare-parts com filtros por marca, componente e pesquisa livre.
- Valida shipping em /spare-parts/shipping.
- Cria o pedido em /spare-parts/order com `parts.read + orders.write`.
/api/public/v1/spare-parts/api/public/v1/spare-parts/shipping/api/public/v1/spare-parts/orderMapa
Mapa atual da API
Aqui tens o mapa do contrato público atual sem repetir a referência inteira. Cada bloco aponta para um domínio, a respetiva superfície de endpoints e a presença ou não de escrita.
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.
/api/public/v1/health/api/public/v1/meCatálogo técnico
Consulta o catálogo que suporta os fluxos públicos e operacionais: marcas, categorias, modelos, tipos de avaria, estados e componentes.
/api/public/v1/catalog/brands/api/public/v1/catalog/categories/api/public/v1/catalog/component-types/api/public/v1/catalog/device-modelsReparaçõ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.
/api/public/v1/repairs/api/public/v1/repairs/api/public/v1/repairs/quote/api/public/v1/repairs/{id}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.
/api/public/v1/customers/api/public/v1/customers/{id}/api/public/v1/stats/api/public/v1/analytics/repairsPeç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.
/api/public/v1/parts/api/public/v1/spare-parts/api/public/v1/spare-parts/order/api/public/v1/spare-parts/shippingWooCommerce e sync
Endpoints para ligar uma instalação WooCommerce, sincronizar clientes, encomendas e produtos e promover scopes sem reinstalar a chave.
/api/public/v1/woocommerce/capabilities/api/public/v1/woocommerce/connect/api/public/v1/woocommerce/customers/upsert/api/public/v1/woocommerce/orders/upsertTroubleshooting
Erros típicos de integração
Se a tua primeira tentativa falhou, normalmente o problema não está no endpoint: está na chave, nos scopes, no plano ou no payload.
Payload ou query inválida
Valida campos obrigatórios, tipos, enums e limites do endpoint antes de repetires o pedido.
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.
Plano ou subscrição necessária
Alguns fluxos dependem de subscrição ativa ou de capacidades adicionais no contexto da loja.
Scope insuficiente
Volta ao dashboard, ajusta scopes e testa primeiro em /health antes de tentares o write de novo.
Rate limit excedido
Implementa retry com backoff e evita burst desnecessário na mesma chave.
Erro interno
Guarda endpoint, payload, hora e resposta recebida para acelerar a análise com a equipa.
Antes de falares com a equipa
- Valida primeiro o /health com a mesma chave.
- Confirma scopes, plano e se o endpoint é mesmo público.
- Guarda path, método, payload e corpo da resposta antes de abrires ticket.
- Se o fluxo for WooCommerce, confirma também capabilities e ligação atual.
Se precisares mesmo de escalar, envia endpoint, método, payload, hora do pedido e o corpo da resposta. Isso corta bastante o tempo de análise.
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.
Base canónica
https://api.revolio.io/api/public/v1
Compatibilidade legacy
https://www.revolio.io/api/public/v1
Host atual do Try it out
https://api.revolio.io/api/public/v1
Estás no host canónico da API, por isso o Try it out corre diretamente sobre a base pública dedicada.
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
https://api.revolio.io/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.
Scope necessario: 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
https://api.revolio.io/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.
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.
Scope necessario: repairs.readAuth por API key
/api/public/v1/catalog/brandsListar marcas ativas do catálogo.
Parametros de Query:
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
https://api.revolio.io/api/public/v1/catalog/brands?limit=100&offset=0
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.
Scope necessario: repairs.readAuth por API key
/api/public/v1/catalog/categoriesListar categorias ativas do catálogo.
Parametros de Query:
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
https://api.revolio.io/api/public/v1/catalog/categories?limit=100&offset=0
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.
Scope necessario: parts.readAuth por API key
/api/public/v1/catalog/component-typesListar tipos de componente usados nos filtros de peças.
Parametros de Query:
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
https://api.revolio.io/api/public/v1/catalog/component-types?limit=100&offset=0
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.
Scope necessario: repairs.readAuth por API key
/api/public/v1/catalog/device-modelsListar modelos de equipamento por marca, categoria ou pesquisa.
Parametros de Query:
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
https://api.revolio.io/api/public/v1/catalog/device-models?limit=100&offset=0
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.
Scope necessario: repairs.readAuth por API key
/api/public/v1/catalog/problem-typesObter tipos de avaria para alimentar orçamentos e fluxos de criação.
Parametros de Query:
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
https://api.revolio.io/api/public/v1/catalog/problem-types?limit=100&offset=0
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.
Scope necessario: 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
https://api.revolio.io/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/repairsListar reparacoes da sua loja. Suporta paginacao e filtros.
Scope necessario: repairs.readAuth por API key
/api/public/v1/repairsListar reparacoes da sua loja. Suporta paginacao e filtros.
Parametros de Query:
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
https://api.revolio.io/api/public/v1/repairs?limit=20&offset=0
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/repairsCriar uma reparacao (checkout nativo WooCommerce).
Scope necessario: repairs.writeAuth por API key
/api/public/v1/repairsCriar uma reparacao (checkout nativo WooCommerce).
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
https://api.revolio.io/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/quoteObter orcamento (precos) para servicos de reparacao.
Scope necessario: pricing.readAuth por API key
/api/public/v1/repairs/quoteObter orcamento (precos) para servicos de reparacao.
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
https://api.revolio.io/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}Obter o detalhe completo de uma reparação.
Scope necessario: 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.
Scope necessario: 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.
Scope necessario: 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.
Scope necessario: 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.
Scope necessario: messages.readAuth por API key
/api/public/v1/repairs/{id}/messagesListar mensagens do thread da reparação.
Path params
Parametros de Query:
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}/messagesEnviar uma mensagem no thread da reparacao.
Scope necessario: messages.writeAuth por API key
/api/public/v1/repairs/{id}/messagesEnviar uma mensagem no thread da reparacao.
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.
Scope necessario: 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}/paymentsRegistar um pagamento numa reparacao.
Scope necessario: payments.writeAuth por API key
/api/public/v1/repairs/{id}/paymentsRegistar um pagamento numa reparacao.
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.
Scope necessario: 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.
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.
Scope necessario: customers.readAuth por API key
/api/public/v1/customersListar clientes da loja com pesquisa, contagem de reparações e última atividade.
Parametros de Query:
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
https://api.revolio.io/api/public/v1/customers?limit=20&offset=0
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.
Scope necessario: 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.
Scope necessario: 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
https://api.revolio.io/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.
Scope necessario: repairs.readAuth por API key
/api/public/v1/analytics/repairsObter analítica agregada de reparações por intervalo temporal.
Parametros de Query:
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
https://api.revolio.io/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.
Scope necessario: parts.readAuth por API key
/api/public/v1/partsListar a camada legacy de peças.
Parametros de Query:
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
https://api.revolio.io/api/public/v1/parts?limit=20&offset=0
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.
Scope necessario: parts.readAuth por API key
/api/public/v1/spare-partsListar peças com filtros por marca, equipamento, categoria, componente e pesquisa livre.
Parametros de Query:
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
https://api.revolio.io/api/public/v1/spare-parts?limit=20&offset=0
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.
Scope necessario: 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
https://api.revolio.io/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.
Scope necessario: 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
https://api.revolio.io/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.
Scope necessario: suppliers.readAuth por API key
/api/public/v1/suppliersListar fornecedores aprovados e filtrar por pesquisa.
Parametros de Query:
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
https://api.revolio.io/api/public/v1/suppliers?limit=20&offset=0
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.
Scope necessario: 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
https://api.revolio.io/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
https://api.revolio.io/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.
Scope necessario: 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
https://api.revolio.io/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.
Scope necessario: 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
https://api.revolio.io/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.
Scope necessario: 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
https://api.revolio.io/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
https://api.revolio.io/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.
Governança
Acessos, artefactos e suporte
A parte crítica desta API não é decorar paths: é controlar scopes, separar chaves por sistema e saber quando uma integração precisa mesmo de apoio técnico.
Scopes e principio do menor privilegio
Usa o princípio do menor privilégio: ativa apenas os scopes que a tua integração precisa e mantém chaves separadas por sistema ou ambiente.
As chaves criadas por defeito arrancam num perfil mais conservador, centrado em leitura operacional. Se precisares de escrita ou sync mais profunda, ajusta os scopes no dashboard.
Artefactos e pontos de apoio
As chaves são geridas no dashboard do lojista. Se precisares de ajustar scopes, validar a tua integração ou discutir um fluxo específico, usa os acessos abaixo.
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.
Rate limit consolidado por chave
A camada pública trabalha hoje com 100 pedidos por minuto por chave, com proteção de backend mais consistente.
WooCommerce com elevação de scopes mais restrita
A promoção de scopes WooCommerce já não confia apenas na API key e pede validação adicional no fluxo.
Pedidos de peças com requisitos de escrita mais claros
A escrita em /spare-parts/order depende agora explicitamente de `parts.read + orders.write`.
Precisas de credenciais ou de ajuda com scopes?
Gera a tua chave, valida `/health` e fala connosco se precisares de mapear scopes, payloads ou um fluxo específico de integração.