Marketplace Vendor Onboarding
Your end-to-end path to becoming a ROLLER Marketplace vendor — from building an integration app against the Platform API to submitting it for review and going live for operators to install.
The ROLLER Marketplace is where venue operators discover and install
third-party apps that extend their venue with the ROLLER Platform API. This guide
is the starting point for vendors building those apps: it lays out the whole
journey so you know what to build, in what order, and what ROLLER expects before
your app is listed.
If you only read one page first, read this one — then follow the links into each
stage.
Who this is for
You are a vendor if you build software that connects to a ROLLER venue on an
operator's behalf: a checkout integration, an availability sync, a reporting
connector, a loyalty add-on, and so on. Every such app is an integration app
— it links a ROLLER venue to your external system. There is no separate "public
key you generate yourself" model for a live marketplace app: ROLLER delivers a
scoped credential to your app when an operator installs it.
The vendor journey at a glance
%%{init: {'theme': 'base', 'themeVariables': {'primaryColor': '#0052FF', 'primaryTextColor': '#ffffff', 'primaryBorderColor': '#0A1128', 'lineColor': '#0052FF', 'secondaryColor': '#E8F0FE', 'tertiaryColor': '#E8F0FE', 'mainBkg': '#0052FF', 'clusterBkg': '#E8F0FE', 'edgeLabelBackground': '#0A1128', 'fontFamily': 'Montserrat, sans-serif', 'fontSize': '14px', 'actorBkg': '#0A1128', 'actorBorder': '#0052FF', 'actorTextColor': '#ffffff', 'actorLineColor': '#0A1128', 'signalColor': '#0052FF', 'signalTextColor': '#0052FF', 'labelBoxBkgColor': '#E8F0FE', 'labelTextColor': '#0A1128', 'loopTextColor': '#0052FF', 'noteBkgColor': '#E8F0FE', 'noteTextColor': '#0A1128', 'noteBorderColor': '#0052FF', 'activationBorderColor': '#FF3B30', 'activationBkgColor': '#E8F0FE'}, 'themeCSS': '.node rect, .cluster rect, rect.actor { rx: 10px; ry: 10px; } .labelBox, .note { rx: 8px; ry: 8px; } .edgeLabel rect, .activation0, .activation1, .activation2 { rx: 4px; ry: 4px; } .nodeLabel, .edgeLabel, .label, .cluster-label, text, tspan, span, p { font-family: Montserrat, sans-serif; }'}}%%
flowchart TD
A["1. Build<br/>Integration app +<br/>connect webhook"] --> B["2. Authenticate<br/>OAuth2 client credentials<br/>+ scoped key"]
B --> C["3. Test in sandbox<br/>Playground / non-prod tenant<br/>+ webhook mock"]
C --> D["4. Submit<br/>Package + submit app"]
D --> E["5. Review & approval<br/>ROLLER reviews scopes + security"]
E --> F["6. Go live<br/>Operators install"]
- Build your integration app. Implement the connect/disconnect webhook
contract every app must honour — how your app receives its per-venue ROLLER
client credentials (client_id+client_secret) on install and cleans up on
removal. See
Integration Apps. - Authenticate. Exchange your credentials for a bearer token and understand
the scoped-permission model that governs which endpoints your key may call.
See Vendor App Auth & Credentials. - Know your API surface and the support policy. Learn which parts of the
Platform API are available to marketplace vendors, which are restricted, and
the versioning / breaking-change commitments you can rely on. See
API Surface & Support Policy. - Test in a sandbox. Build and verify against a non-prod (Playground) tenant
before touching live data, including the connect/disconnect webhook mock. See
Sandbox & Non-Prod Testing. - Submit for review. Package your app, declare the scopes it needs, and
submit it for ROLLER's review and approval. See
Submission & Review. - Go live. Once approved, operators can install your app from the
marketplace; each install triggers avenue.connectwebhook carrying that
venue's scoped client credentials (client_id+client_secret).
What ROLLER handles for you
- Credential issuance and rotation. You never mint or rotate the live
per-venue credential yourself — ROLLER generates theclient_id/
client_secretpair on install, scoped to what your app declared and was
approved for, and rotates it on reconnect. See
Getting API Access. - Consent and scope display. When an operator installs your app, they see and
approve exactly the scopes your app requested. - Delivery and retries of the connect/disconnect lifecycle webhooks.
What you are responsible for
- Hosting a secure
https://connect webhook endpoint and validating its shared
secret on every request. - Storing each venue's delivered
client_secretencrypted at rest and
treating it as a live credential. - Requesting only the scopes your integration needs (least privilege).
- Tolerating additive API changes (unknown fields/enums) so your app keeps working
across non-breaking updates — see the support policy.
Next
Start with Integration Apps to implement the
connect/disconnect contract, then move through auth, sandbox, and submission.
Updated 23 days ago
