Understand the interfaces

The platform's interfaces, in one map

REST, webhooks, bulk import/export, punchout and SFTP — five interfaces, five jobs. Which one your integrator should reach for, and where this Help Center hands over to the Developer Portal.

Your ERP integrator wants orders out and stock in. Your BI team wants a nightly extract. Your customer's procurement lead wants a punchout. All three will ask you the same question — "what's the API?" — and the honest answer is that there are five interfaces and the API is only one of them.

Five interfaces, five jobs

InterfaceWhat it isReach for it whenNot for
REST APIHTTP + JSON at https://api.revenexx.com/v1Your system asks a question or makes a change, nowMoving a million rows
WebhooksThe platform calls you when something happensYou need to know about an order the moment it is placedGetting the current state of everything
Bulk import / exportFile-shaped jobs for large data setsNightly catalog, price list, or a BI extractAnything a person is waiting for
PunchoutYour catalog rendered inside a customer's procurement systemA large customer buys through SAP Ariba, Coupa, Onventis or JAGGAERAny of your own systems
SFTPA managed folder your systems drop files intoThe ERP only speaks CSV and nobody will build an APIAnything needing an immediate answer

Two of the five are covered elsewhere and this area does not repeat them: punchout is a commercial project per customer, and the workflow engine that schedules and maps file jobs lives in Integration Studio.

The single most common mistake is reaching for the REST API to move bulk data — a loop that fetches 60,000 products one page at a time, nightly. It will work in your sandbox, hit the rate limit in production, and take four hours when the bulk endpoint would have taken four minutes. See Rate limits, quotas and fair use.

Sync or async: who waits for whom

Everything above is one of two shapes, and the shape decides your failure modes.

Synchronous — you call, you waitAsynchronous — you are told, or you poll
ExamplesREST reads and writesWebhooks, bulk jobs, SFTP
LatencyImmediate, and you own the timeoutSeconds to hours
What failure looks likeAn error code you can react toA delivery that has not arrived yet
Who carries the loadThe caller, in the momentA queue
NeedsBackoff, a timeout, a retry ruleDeduplication, an event log, reconciliation

The rule of thumb: pull when you need an answer, be pushed when you need to react. A system that polls /orders every thirty seconds to see whether anything is new is doing the platform's job badly. Subscribe to the event and poll once an hour as a safety net instead.

That safety net is not optional. A webhook is a delivery attempt, not a guarantee — see Events and webhooks.

One API, many apps

The platform is a set of installed apps — Products, Prices, Orders, Carts, Customers, Inventories and whatever else your tenant runs. They do not each get their own hostname. There is one gateway, at api.revenexx.com, and every path is versioned under /v1:

https://api.revenexx.com/v1/orders
https://api.revenexx.com/v1/products
https://api.revenexx.com/v1/inventories/stock
https://api.revenexx.com/v1/customers/organizations

Three consequences your integrator should know on day one:

Which resources exist depends on which apps are installed. A tenant without the Inventories app has no /inventories. This is why the reference is generated per tenant rather than published as one static document — see below.

Everything is scoped to a tenant by a header, never by the URL. There is no /acme-eu/orders. The tenant is X-Revenexx-Tenant, and it is required on every call.

Resources follow one predictable shape, so once your integrator has learned one, they have learned all of them:

PatternMethodMeans
/v1/{resource}GETList, with limit, offset and order
/v1/{resource}POSTCreate one
/v1/{resource}/{id}GETRead one
/v1/{resource}/{id}PUT / PATCHUpdate one
/v1/{resource}/{id}DELETERemove one
/v1/{resource}/searchPOSTList, when the filter is too big for a query string
/v1/{resource}/{id}/{action}POSTDo something to it — orders/{id}/cancel

The reference your integrator should actually use

Your tenant publishes its own OpenAPI document, listing exactly the resources and fields your installed apps expose:

https://api.revenexx.com/v1/openapi.json

That, not any prose page, is the authority on what exists. Point your integrator at it in the first conversation and it removes a week of guessing.

What a call looks like

GET /v1/orders?limit=50&order=created_at.desc HTTP/1.1
Host: api.revenexx.com
X-Revenexx-Tenant: acme-eu
X-Revenexx-Api-Key: rvxk_…

A list answers in a consistent envelope:

{ "items": [ ... ], "total": 248, "limit": 50, "offset": 0 }

and an error in a consistent one too:

{ "error": true, "message": "missing X-Revenexx-Tenant header" }
Examples in this area are illustrative. The header names, the base URL, the paging parameters and the error shape are real and stable. The field names inside a data or items object depend on your installed apps and their versions — take those from your tenant's openapi.json, not from an example here.

Every response also carries an X-Request-ID. Have your integrator log it. It is the one thing that turns "the API was returning errors on Tuesday" into a support case somebody can answer.

Versioning, and what "stable" means for you

There is one current version, /v1, and it evolves additively: new resources, new optional fields, new optional parameters. Additive means an integration that ignores what it does not recognise keeps working — which is why the first rule you give any integrator is ignore unknown fields, do not fail on them.

Breaking changes do not appear inside /v1 unannounced. They are announced ahead of time on the changelog, with a migration path and a deprecation window. See Handling API changes.

Where the Developer Portal takes over

This area stops where writing an app begins. The boundary is worth being clear about, because it is the difference between something your own IT can do this week and something that needs a development project.

This Help CenterThe Developer Portal at revenexx.dev
Getting an API key, and scoping it safelySDKs, the CLI, and code
What the interfaces are and which to chooseThe full endpoint reference and API explorer
Setting up webhooks and reading the delivery logWriting the receiver
Bulk import and export from the CockpitThe bulk data API and file streaming
Sandbox, go-live checklist, monitoringBuilding an app, a theme, or a storefront

Neither audience is wrong; they are different jobs. Your ERP integrator connecting two existing systems lives here. A partner building a new app on the platform lives there.

Next