API
Build against Revolio's public API
Authentication, scopes, request/response examples, and supported integration flows for repairs, catalog, payments, customers, parts, and WooCommerce.
Updated in April 2026
Overview
What this API covers
Start here if you need the technical scope before wiring an HTTP client, middleware, ETL pipeline, or WooCommerce bridge.
Domains
6
Endpoints
35
With writes
12
Scopes
14
Good fit for
- Syncing repairs, customers, and payments with your ERP, CRM, or internal back office.
- Connecting WooCommerce to the shop's real operational flow without manual dashboard workarounds.
- Feeding BI, dashboards, or internal automations with operational shop data.
- Querying the technical catalog, parts, and suppliers from your checkout flow.
It does not replace
- An anonymous public data API: everything depends on an authenticated key and shop context.
- A public OAuth app platform or a third-party app marketplace contract.
- An embedded UI SDK or frontend extension model inside the dashboard.
- The dashboard itself: keys, scopes, and some operational decisions still live there.
Quickstart
Quick start
If you want to validate credentials and contract shape in under 10 minutes, this is the minimum flow to authenticate, confirm scopes, and make the first useful call.
Step 1
Create the API key
Sign in to the shop dashboard, open Settings, and generate a key for your integration.
Step 2
Authenticate every request
Send the key in X-API-Key or Authorization: Bearer. Every key is tied to one shop and its allowed scopes.
Step 3
Validate before integrating
Start with /health to confirm the key is valid and the returned scopes cover the operation you want to perform.
Step 4
Make the first real read
After /health, continue with /me, /repairs, or /catalog/device-models so you validate the use case before jumping straight into writes.
Base URL
https://api.revolio.io/api/public/v1
Full compatibility remains available at https://www.revolio.io/api/public/v1
Accepted headers
X-API-Key: rvl_xxxxxxxx_xxxxxxxxxxxxxxxxxxxxxx Authorization: Bearer rvl_xxxxxxxx_xxxxxxxxxxxxxxxxxxxxxx
Validation example
curl -X GET https://api.revolio.io/api/public/v1/health \ -H "X-API-Key: rvl_xxxxxxxx_xxxxxxxxxxxxxxxxxxxxxx"
What you need to see in the response
- You get `status: ok` and the API version.
- The `context` block returns `repairShopId`, `keyId`, `keyName`, and `scopes`.
- If the context looks right, move to a simple read such as `/me` or `/repairs?limit=5`.
- If it fails here, fix the key and scopes before testing any write flow.
Recommended follow-up reads
/api/public/v1/me/api/public/v1/repairs?limit=5/api/public/v1/catalog/device-models?limit=5Access and support
Conventions
Global conventions
Before wiring any client or middleware, assume these rules for authentication, context, and operation.
Authentication
Use `X-API-Key` or `Authorization: Bearer`. The current public contract is centered on one key per shop.
Per-shop context
Each key is locked to one shop and the returned data always respects that boundary.
Scopes per operation
Read and write access are separated. Adjust scopes in the dashboard and avoid granting more than you need.
Pagination
Where list endpoints support it, use `limit` and `offset` and always page on the client side.
JSON and timestamps
Examples use JSON payloads and ISO 8601 timestamps. When an endpoint does not accept a body, that is explicit in the reference.
Versioning and limits
Work against /api/public/v1 and expect 100 requests per minute per key today.
Use cases
Ready-to-ship recipes
If you need to decide where to start, these four paths cover the most obvious scenarios for a shop or partner software.
Sync the repair lifecycle
Query the backlog, read detail, follow the timeline, and change statuses from your internal system.
- List /repairs to get backlog and tracking codes.
- Read detail, messages, payments, and events per repair.
- Use /repairs/{id}/status only after you have the right write scopes in place.
/api/public/v1/repairs/api/public/v1/repairs/{id}/api/public/v1/repairs/{id}/statusCreate repairs from checkout
Quote first, create the validated repair next, and keep the technical context inside your ecommerce flow.
- Calculate prices in /repairs/quote.
- Create the repair in /repairs with customer, services, and delivery method.
- Track status, messages, and payments in the same lifecycle.
/api/public/v1/repairs/quote/api/public/v1/repairs/api/public/v1/repairs/{id}/paymentsRead customers and indicators
Cross CRM, operations, and analytics without leaving the authenticated public API.
- List customers with search and recent activity.
- Read stats and aggregated analytics for external dashboards.
- Use that data for BI, follow-up, or internal reporting.
/api/public/v1/customers/api/public/v1/stats/api/public/v1/analytics/repairsSearch parts and close orders
Search the catalog, compare offers, calculate shipping, and only then create the order.
- Search /spare-parts with brand, component, and free-text filters.
- Validate shipping in /spare-parts/shipping.
- Create the order in /spare-parts/order with `parts.read + orders.write`.
/api/public/v1/spare-parts/api/public/v1/spare-parts/shipping/api/public/v1/spare-parts/orderMap
Current API capabilities
This is the map of the current public contract without repeating the full reference. Each block points to a domain, its endpoint surface, and whether writes are available there.
Access and context
Validate the key, inspect the authenticated context, and confirm that your shop responds with the expected scope before moving into more sensitive operations.
/api/public/v1/health/api/public/v1/meTechnical catalog
Query the catalog that supports public and operational flows: brands, categories, models, fault types, statuses, and components.
/api/public/v1/catalog/brands/api/public/v1/catalog/categories/api/public/v1/catalog/component-types/api/public/v1/catalog/device-modelsRepairs and operations
The full operational repair layer: listing, creation, detail, timeline, items, services, messages, payments, and status changes.
/api/public/v1/repairs/api/public/v1/repairs/api/public/v1/repairs/quote/api/public/v1/repairs/{id}Customers and analytics
Read customer relationship data and aggregated operational indicators without leaving the public API channel.
/api/public/v1/customers/api/public/v1/customers/{id}/api/public/v1/stats/api/public/v1/analytics/repairsParts, offers and suppliers
There are two parts layers in the API: the legacy `/parts` list and the expanded `/spare-parts` catalog with shipping, ordering, and offer comparison.
/api/public/v1/parts/api/public/v1/spare-parts/api/public/v1/spare-parts/order/api/public/v1/spare-parts/shippingWooCommerce and sync
Endpoints to connect a WooCommerce installation, sync customers, orders, and products, and promote scopes without reinstalling the key.
/api/public/v1/woocommerce/capabilities/api/public/v1/woocommerce/connect/api/public/v1/woocommerce/customers/upsert/api/public/v1/woocommerce/orders/upsertTroubleshooting
Where most integrations fail
If your first attempt failed, the problem is usually not the endpoint itself: it is the key, the scopes, the plan, or the payload.
Invalid payload or query
Validate required fields, types, enums, and endpoint limits before retrying the request.
Missing or invalid key
Check the header, the key format, and whether you are using the wrong key for a different shop.
Plan or subscription required
Some flows depend on an active subscription or extra capabilities in the shop context.
Insufficient scope
Go back to the dashboard, adjust scopes, and test in /health before trying the write again.
Rate limit exceeded
Implement retries with backoff and avoid unnecessary bursts on the same key.
Internal error
Save the endpoint, payload, timestamp, and returned response so the team can investigate faster.
Before you talk to the team
- Validate /health first with the same key.
- Confirm scopes, plan, and whether the endpoint is actually public.
- Save the path, method, payload, and response body before opening a ticket.
- If the flow is WooCommerce-related, confirm capabilities and the current connection as well.
If you really need to escalate, send the endpoint, method, payload, request time, and response body. That cuts investigation time significantly.
Reference
Detailed endpoint reference
Each block below uses request and response examples aligned with the current route handlers. When an endpoint does not accept a body, that is shown explicitly.
Canonical base
https://api.revolio.io/api/public/v1
Legacy compatibility
https://www.revolio.io/api/public/v1
Current Try it out host
https://api.revolio.io/api/public/v1
You are already on the canonical API host, so Try it out runs directly against the dedicated public base.
Access and context
Validate the key, inspect the authenticated context, and confirm that your shop responds with the expected scope before moving into more sensitive operations.
GET/api/public/v1/healthValidate the API key and return the authenticated shop context.
Auth via API key
/api/public/v1/healthValidate the API key and return the authenticated shop context.
Request example
Response example
{
"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
This request uses the authentication configuration defined at the top of the explorer.
Executed URL
https://api.revolio.io/api/public/v1/health
Editable JSON body
Live response
Run the request in this card to validate the real status, timing, and response body.
GET/api/public/v1/meGet a summary of the authenticated shop profile.
Required scope: parts.readAuth via API key
/api/public/v1/meGet a summary of the authenticated shop profile.
Request example
Response example
{
"ok": true,
"data": {
"countryCode": "PT",
"country": "Portugal",
"companyName": "Loja Exemplo",
"city": "Lisboa",
"postalCode": "1000-001",
"street": "Rua da Revolio 10"
}
}Try it out
This request uses the authentication configuration defined at the top of the explorer.
Executed URL
https://api.revolio.io/api/public/v1/me
Editable JSON body
Live response
Run the request in this card to validate the real status, timing, and response body.
Technical catalog
Query the catalog that supports public and operational flows: brands, categories, models, fault types, statuses, and components.
GET/api/public/v1/catalog/brandsList active catalog brands.
Required scope: repairs.readAuth via API key
/api/public/v1/catalog/brandsList active catalog brands.
Query Parameters:
Request example
Response example
{
"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
This request uses the authentication configuration defined at the top of the explorer.
Executed URL
https://api.revolio.io/api/public/v1/catalog/brands?limit=100&offset=0
Editable JSON body
Live response
Run the request in this card to validate the real status, timing, and response body.
GET/api/public/v1/catalog/categoriesList active catalog categories.
Required scope: repairs.readAuth via API key
/api/public/v1/catalog/categoriesList active catalog categories.
Query Parameters:
Request example
Response example
{
"data": [
{
"id": "cat_phone",
"name": "Smartphones",
"description": "Telemoveis e smartphones",
"image": null
}
],
"pagination": {
"total": 1,
"limit": 20,
"offset": 0,
"hasMore": false
}
}Try it out
This request uses the authentication configuration defined at the top of the explorer.
Executed URL
https://api.revolio.io/api/public/v1/catalog/categories?limit=100&offset=0
Editable JSON body
Live response
Run the request in this card to validate the real status, timing, and response body.
GET/api/public/v1/catalog/component-typesList component types used by the parts filters.
Required scope: parts.readAuth via API key
/api/public/v1/catalog/component-typesList component types used by the parts filters.
Query Parameters:
Request example
Response example
{
"data": [
{
"id": "component_screen",
"name": "Ecra",
"icon": "monitor",
"color": "#0F766E"
}
],
"pagination": {
"total": 1,
"limit": 20,
"offset": 0,
"hasMore": false
}
}Try it out
This request uses the authentication configuration defined at the top of the explorer.
Executed URL
https://api.revolio.io/api/public/v1/catalog/component-types?limit=100&offset=0
Editable JSON body
Live response
Run the request in this card to validate the real status, timing, and response body.
GET/api/public/v1/catalog/device-modelsList device models by brand, category, or search.
Required scope: repairs.readAuth via API key
/api/public/v1/catalog/device-modelsList device models by brand, category, or search.
Query Parameters:
Request example
Response example
{
"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
This request uses the authentication configuration defined at the top of the explorer.
Executed URL
https://api.revolio.io/api/public/v1/catalog/device-models?limit=100&offset=0
Editable JSON body
Live response
Run the request in this card to validate the real status, timing, and response body.
GET/api/public/v1/catalog/problem-typesGet fault types to power quote and creation flows.
Required scope: repairs.readAuth via API key
/api/public/v1/catalog/problem-typesGet fault types to power quote and creation flows.
Query Parameters:
Request example
Response example
{
"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
This request uses the authentication configuration defined at the top of the explorer.
Executed URL
https://api.revolio.io/api/public/v1/catalog/problem-types?limit=100&offset=0
Editable JSON body
Live response
Run the request in this card to validate the real status, timing, and response body.
GET/api/public/v1/catalog/repair-statusesList all supported repair statuses.
Required scope: repairs.readAuth via API key
/api/public/v1/catalog/repair-statusesList all supported repair statuses.
Request example
Response example
{
"data": [
"PENDING_PAYMENT",
"PAYMENT_FAILED",
"PAID",
"CONFIRMED",
"IN_REPAIR",
"COMPLETED",
"DELIVERED"
]
}Try it out
This request uses the authentication configuration defined at the top of the explorer.
Executed URL
https://api.revolio.io/api/public/v1/catalog/repair-statuses
Editable JSON body
Live response
Run the request in this card to validate the real status, timing, and response body.
Repairs and operations
The full operational repair layer: listing, creation, detail, timeline, items, services, messages, payments, and status changes.
GET/api/public/v1/repairsList repairs for your shop. Supports pagination and filtering.
Required scope: repairs.readAuth via API key
/api/public/v1/repairsList repairs for your shop. Supports pagination and filtering.
Query Parameters:
Request example
Response example
{
"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
This request uses the authentication configuration defined at the top of the explorer.
Executed URL
https://api.revolio.io/api/public/v1/repairs?limit=20&offset=0
Editable JSON body
Live response
Run the request in this card to validate the real status, timing, and response body.
POST/api/public/v1/repairsCreate a repair (WooCommerce native checkout).
Required scope: repairs.writeAuth via API key
/api/public/v1/repairsCreate a repair (WooCommerce native checkout).
Request example
{
"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"
}
}Response example
{
"data": {
"repairId": "repair_123",
"trackingCode": "REP-ABC123",
"total": 129.9,
"currency": "EUR",
"status": "PENDING_PAYMENT"
}
}Try it out
This request uses the authentication configuration defined at the top of the explorer.
Executed URL
https://api.revolio.io/api/public/v1/repairs
Editable JSON body
Live response
Run the request in this card to validate the real status, timing, and response body.
POST/api/public/v1/repairs/quoteGet pricing quote for repair services.
Required scope: pricing.readAuth via API key
/api/public/v1/repairs/quoteGet pricing quote for repair services.
Request example
{
"services": [
{
"problemTypeId": "problem_screen",
"deviceModelId": "dm_iphone_14_pro"
}
]
}Response example
{
"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
This request uses the authentication configuration defined at the top of the explorer.
Executed URL
https://api.revolio.io/api/public/v1/repairs/quote
Editable JSON body
Live response
Run the request in this card to validate the real status, timing, and response body.
GET/api/public/v1/repairs/{id}Get the full detail of a repair.
Required scope: repairs.readAuth via API key
/api/public/v1/repairs/{id}Get the full detail of a repair.
Path params
Request example
Response example
{
"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
This request uses the authentication configuration defined at the top of the explorer.
Executed URL
/api/public/v1/repairs/{id}Editable JSON body
Live response
Run the request in this card to validate the real status, timing, and response body.
POST/api/public/v1/repairs/{id}/statusUpdate repair status and register operational notes.
Required scope: repairs.writeAuth via API key
/api/public/v1/repairs/{id}/statusUpdate repair status and register operational notes.
Path params
Request example
{
"status": "IN_REPAIR",
"notes": "Equipamento em bancada"
}Response example
{
"data": {
"id": "repair_123",
"status": "IN_REPAIR"
}
}Try it out
This request uses the authentication configuration defined at the top of the explorer.
Executed URL
/api/public/v1/repairs/{id}/statusEditable JSON body
Live response
Run the request in this card to validate the real status, timing, and response body.
GET/api/public/v1/repairs/{id}/itemsList items attached to a repair.
Required scope: repairs.readAuth via API key
/api/public/v1/repairs/{id}/itemsList items attached to a repair.
Path params
Request example
Response example
{
"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
This request uses the authentication configuration defined at the top of the explorer.
Executed URL
/api/public/v1/repairs/{id}/itemsEditable JSON body
Live response
Run the request in this card to validate the real status, timing, and response body.
GET/api/public/v1/repairs/{id}/servicesList services attached to a repair.
Required scope: repairs.readAuth via API key
/api/public/v1/repairs/{id}/servicesList services attached to a repair.
Path params
Request example
Response example
{
"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
This request uses the authentication configuration defined at the top of the explorer.
Executed URL
/api/public/v1/repairs/{id}/servicesEditable JSON body
Live response
Run the request in this card to validate the real status, timing, and response body.
GET/api/public/v1/repairs/{id}/messagesList messages in a repair thread.
Required scope: messages.readAuth via API key
/api/public/v1/repairs/{id}/messagesList messages in a repair thread.
Path params
Query Parameters:
Request example
Response example
{
"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
This request uses the authentication configuration defined at the top of the explorer.
Executed URL
/api/public/v1/repairs/{id}/messagesEditable JSON body
Live response
Run the request in this card to validate the real status, timing, and response body.
POST/api/public/v1/repairs/{id}/messagesSend a message on a repair thread.
Required scope: messages.writeAuth via API key
/api/public/v1/repairs/{id}/messagesSend a message on a repair thread.
Path params
Request example
{
"message": "A reparacao ja entrou em bancada."
}Response example
{
"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
This request uses the authentication configuration defined at the top of the explorer.
Executed URL
/api/public/v1/repairs/{id}/messagesEditable JSON body
Live response
Run the request in this card to validate the real status, timing, and response body.
GET/api/public/v1/repairs/{id}/paymentsList payments for a repair.
Required scope: payments.readAuth via API key
/api/public/v1/repairs/{id}/paymentsList payments for a repair.
Path params
Request example
Response example
{
"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
This request uses the authentication configuration defined at the top of the explorer.
Executed URL
/api/public/v1/repairs/{id}/paymentsEditable JSON body
Live response
Run the request in this card to validate the real status, timing, and response body.
POST/api/public/v1/repairs/{id}/paymentsRegister a payment for a repair.
Required scope: payments.writeAuth via API key
/api/public/v1/repairs/{id}/paymentsRegister a payment for a repair.
Path params
Request example
{
"amount": 129.9,
"currency": "EUR",
"status": "COMPLETED",
"method": "woocommerce",
"paymentMethodType": "card",
"details": {
"orderId": "WC-1001"
}
}Response example
{
"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
This request uses the authentication configuration defined at the top of the explorer.
Executed URL
/api/public/v1/repairs/{id}/paymentsEditable JSON body
Live response
Run the request in this card to validate the real status, timing, and response body.
GET/api/public/v1/repairs/{id}/eventsGet the timeline of events for a repair.
Required scope: repairs.readAuth via API key
/api/public/v1/repairs/{id}/eventsGet the timeline of events for a repair.
Path params
Request example
Response example
{
"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
This request uses the authentication configuration defined at the top of the explorer.
Executed URL
/api/public/v1/repairs/{id}/eventsEditable JSON body
Live response
Run the request in this card to validate the real status, timing, and response body.
Customers and analytics
Read customer relationship data and aggregated operational indicators without leaving the public API channel.
GET/api/public/v1/customersList the shop's customers with search, repair count, and last activity.
Required scope: customers.readAuth via API key
/api/public/v1/customersList the shop's customers with search, repair count, and last activity.
Query Parameters:
Request example
Response example
{
"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
This request uses the authentication configuration defined at the top of the explorer.
Executed URL
https://api.revolio.io/api/public/v1/customers?limit=20&offset=0
Editable JSON body
Live response
Run the request in this card to validate the real status, timing, and response body.
GET/api/public/v1/customers/{id}Get customer detail plus recent repairs.
Required scope: customers.readAuth via API key
/api/public/v1/customers/{id}Get customer detail plus recent repairs.
Path params
Request example
Response example
{
"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
This request uses the authentication configuration defined at the top of the explorer.
Executed URL
/api/public/v1/customers/{id}Editable JSON body
Live response
Run the request in this card to validate the real status, timing, and response body.
GET/api/public/v1/statsGet aggregated shop totals for repairs, customers, and revenue.
Required scope: repairs.readAuth via API key
/api/public/v1/statsGet aggregated shop totals for repairs, customers, and revenue.
Request example
Response example
{
"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
This request uses the authentication configuration defined at the top of the explorer.
Executed URL
https://api.revolio.io/api/public/v1/stats
Editable JSON body
Live response
Run the request in this card to validate the real status, timing, and response body.
GET/api/public/v1/analytics/repairsGet aggregated repair analytics for a date range.
Required scope: repairs.readAuth via API key
/api/public/v1/analytics/repairsGet aggregated repair analytics for a date range.
Query Parameters:
Request example
Response example
{
"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
This request uses the authentication configuration defined at the top of the explorer.
Executed URL
https://api.revolio.io/api/public/v1/analytics/repairs
Editable JSON body
Live response
Run the request in this card to validate the real status, timing, and response body.
Parts, offers and suppliers
There are two parts layers in the API: the legacy `/parts` list and the expanded `/spare-parts` catalog with shipping, ordering, and offer comparison.
GET/api/public/v1/partsList the legacy parts layer.
Required scope: parts.readAuth via API key
/api/public/v1/partsList the legacy parts layer.
Query Parameters:
Request example
Response example
{
"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
This request uses the authentication configuration defined at the top of the explorer.
Executed URL
https://api.revolio.io/api/public/v1/parts?limit=20&offset=0
Editable JSON body
Live response
Run the request in this card to validate the real status, timing, and response body.
GET/api/public/v1/spare-partsList parts with filters for brand, device, category, component, and free-text search.
Required scope: parts.readAuth via API key
/api/public/v1/spare-partsList parts with filters for brand, device, category, component, and free-text search.
Query Parameters:
Request example
Response example
{
"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
This request uses the authentication configuration defined at the top of the explorer.
Executed URL
https://api.revolio.io/api/public/v1/spare-parts?limit=20&offset=0
Editable JSON body
Live response
Run the request in this card to validate the real status, timing, and response body.
POST/api/public/v1/spare-parts/orderCreate a parts order with stock validation, tax, and final total.
Required scope: parts.read + orders.writeAuth via API key
/api/public/v1/spare-parts/orderCreate a parts order with stock validation, tax, and final total.
Request example
{
"items": [
{
"partId": "spare_part_1",
"quantity": 1
}
],
"notes": "Pedido para bancada 3"
}Response example
{
"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
This request uses the authentication configuration defined at the top of the explorer.
Executed URL
https://api.revolio.io/api/public/v1/spare-parts/order
Editable JSON body
Live response
Run the request in this card to validate the real status, timing, and response body.
POST/api/public/v1/spare-parts/shippingCalculate parts shipping cost before placing the order.
Required scope: parts.readAuth via API key
/api/public/v1/spare-parts/shippingCalculate parts shipping cost before placing the order.
Request example
{
"items": [
{
"partId": "spare_part_1",
"quantity": 1
}
]
}Response example
{
"ok": true,
"data": {
"shippingCost": 5.5,
"breakdown": [
{
"supplierId": "REVOLIO",
"cost": 5.5
}
]
}
}Try it out
This request uses the authentication configuration defined at the top of the explorer.
Executed URL
https://api.revolio.io/api/public/v1/spare-parts/shipping
Editable JSON body
Live response
Run the request in this card to validate the real status, timing, and response body.
GET/api/public/v1/suppliersList approved suppliers and filter them by search.
Required scope: suppliers.readAuth via API key
/api/public/v1/suppliersList approved suppliers and filter them by search.
Query Parameters:
Request example
Response example
{
"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
This request uses the authentication configuration defined at the top of the explorer.
Executed URL
https://api.revolio.io/api/public/v1/suppliers?limit=20&offset=0
Editable JSON body
Live response
Run the request in this card to validate the real status, timing, and response body.
WooCommerce and sync
Endpoints to connect a WooCommerce installation, sync customers, orders, and products, and promote scopes without reinstalling the key.
GET/api/public/v1/woocommerce/capabilitiesInspect what the current WooCommerce installation can sync with your current key.
Required scope: products.readAuth via API key
/api/public/v1/woocommerce/capabilitiesInspect what the current WooCommerce installation can sync with your current key.
Request example
Response example
{
"ok": true,
"data": {
"repairShopId": "shop_123",
"siteUrl": "https://lojaexemplo.pt",
"integration": {
"appId": "woocommerce",
"installationId": "install_1",
"status": "ACTIVE"
},
"apps": {
"inventoryManager": true
}
}
}Try it out
This request uses the authentication configuration defined at the top of the explorer.
Executed URL
https://api.revolio.io/api/public/v1/woocommerce/capabilities
Editable JSON body
Live response
Run the request in this card to validate the real status, timing, and response body.
POST/api/public/v1/woocommerce/connectConnect a WooCommerce installation, generate credentials, and prepare sync webhooks.
Auth via email and password
/api/public/v1/woocommerce/connectConnect a WooCommerce installation, generate credentials, and prepare sync webhooks.
Request example
{
"email": "owner@lojaexemplo.pt",
"password": "password-super-segura",
"siteUrl": "https://lojaexemplo.pt",
"installationName": "Woo principal"
}Response example
{
"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
This endpoint uses credentials in the body and does not send an API key in the header.
Executed URL
https://api.revolio.io/api/public/v1/woocommerce/connect
Editable JSON body
Live response
Run the request in this card to validate the real status, timing, and response body.
POST/api/public/v1/woocommerce/customers/upsertCreate or update customers coming from WooCommerce.
Required scope: customers.writeAuth via API key
/api/public/v1/woocommerce/customers/upsertCreate or update customers coming from WooCommerce.
Request example
{
"siteUrl": "https://lojaexemplo.pt",
"wooCustomerId": 501,
"email": "cliente@example.com",
"name": "Joao Silva",
"phone": "+351912345678",
"city": "Lisboa",
"postalCode": "1000-001",
"country": "PT"
}Response example
{
"ok": true,
"data": {
"revolioCustomerId": "customer_1"
}
}Try it out
This request uses the authentication configuration defined at the top of the explorer.
Executed URL
https://api.revolio.io/api/public/v1/woocommerce/customers/upsert
Editable JSON body
Live response
Run the request in this card to validate the real status, timing, and response body.
POST/api/public/v1/woocommerce/orders/upsertCreate or update orders coming from WooCommerce.
Required scope: orders.writeAuth via API key
/api/public/v1/woocommerce/orders/upsertCreate or update orders coming from WooCommerce.
Request example
{
"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
}
]
}Response example
{
"ok": true,
"data": {
"posOrderId": "pos_order_1",
"status": "PAID"
}
}Try it out
This request uses the authentication configuration defined at the top of the explorer.
Executed URL
https://api.revolio.io/api/public/v1/woocommerce/orders/upsert
Editable JSON body
Live response
Run the request in this card to validate the real status, timing, and response body.
POST/api/public/v1/woocommerce/products/upsertCreate or update products coming from WooCommerce.
Required scope: products.writeAuth via API key
/api/public/v1/woocommerce/products/upsertCreate or update products coming from WooCommerce.
Request example
{
"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"
]
}Response example
{
"ok": true,
"data": {
"inventoryProductId": "inventory_1",
"marketplaceProductId": "marketplace_1"
}
}Try it out
This request uses the authentication configuration defined at the top of the explorer.
Executed URL
https://api.revolio.io/api/public/v1/woocommerce/products/upsert
Editable JSON body
Live response
Run the request in this card to validate the real status, timing, and response body.
POST/api/public/v1/woocommerce/upgrade-scopesPromote an existing key with the scopes required by WooCommerce.
Auth via email and password
/api/public/v1/woocommerce/upgrade-scopesPromote an existing key with the scopes required by WooCommerce.
Request example
{
"email": "owner@lojaexemplo.pt",
"password": "password-super-segura",
"apiKey": "rvl_abcd_xxxxxxxxxxxxxxxxxxxxxx"
}Response example
{
"ok": true,
"upgraded": true,
"added": [
"orders.write",
"products.write"
],
"scopes": [
"repairs.read",
"repairs.write",
"orders.write",
"products.write"
]
}Try it out
This endpoint uses credentials in the body and does not send an API key in the header.
Executed URL
https://api.revolio.io/api/public/v1/woocommerce/upgrade-scopes
Editable JSON body
Live response
Run the request in this card to validate the real status, timing, and response body.
Governance
Access, artifacts, and support
The critical part of this API is not memorizing paths: it is controlling scopes, separating keys by system, and knowing when an integration needs technical support.
Scopes e principio do menor privilegio
Use least privilege: enable only the scopes your integration needs and keep separate keys per system or environment.
Default keys start in a more conservative operational-read profile. If you need write access or deeper sync flows, adjust the scopes in the dashboard.
Artefactos e pontos de apoio
Keys are managed in the shop dashboard. If you need to adjust scopes, validate your integration, or discuss a specific flow, use the links below.
Changelog
Recent public contract changes
If you plan to integrate write flows, do not rely only on the date at the top of the page. Use this list to understand what changed recently in the public surface.
OpenAPI and Postman generated from the current source of truth
Public artifacts are now generated from the same base that powers the reference on this page.
Need credentials or help with scopes?
Generate your key, validate `/health`, and talk to us if you need help mapping scopes, payloads, or a specific integration flow.