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"]
  1. 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.
  2. 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.
  3. 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.
  4. 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.
  5. Submit for review. Package your app, declare the scopes it needs, and
    submit it for ROLLER's review and approval. See
    Submission & Review.
  6. Go live. Once approved, operators can install your app from the
    marketplace; each install triggers a venue.connect webhook 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 the client_id /
    client_secret pair 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_secret encrypted 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.


Did this page help you?