Open Audience Protocol
Coming soon

Get started

An open standard for the audience data behind culture and sport

The Open Audience Protocol is a shared way to describe the people who come to concerts, festivals, matches and exhibitions, along with the events themselves, the tickets and memberships that grant access, and the signals people leave behind. Any source can hand that data to any destination without someone writing a one-off integration first.

The point is ownership. A venue, a festival, an artist or a club builds the relationship with its audience, so it should hold the record of that audience and decide where it goes. OAP turns the plumbing into a common standard that belongs to no single vendor. Sharing data gets simpler. The data itself gets more transparent and more consistent, because everyone describes the same things the same way.

data in motionone schema, many connections
TicketingAccess controlWebshopMembershipsCDPData warehouseAgenciesAI agentsOAPcanonical schemasourcesdestinations

One shared payload

OAP describes data in motion, not data sitting in a database. A payload is self-describing: you can read it without joining it against some other system to understand what it means. The smallest unit is a Signal, one thing that happened, stamped with when, where it came from, and who it belongs to.

signal.json
{
  "id": "sig_8f2a14",
  "type": "ticket_purchased",
  "timestamp": "2026-05-12T19:04:00Z",
  "source": "box_office",
  "profile_id": "p_24815",
  "context": {
    "event_id": "ev_spring_nights",
    "offer_id": "of_weekend",
    "value": 89.0,
    "currency": "EUR",
    "channel": "web"
  }
}
A single purchase, described once, readable by any destination.

What changes with a standard

Today most of the audience record lives inside platforms the organisation rents but does not control. Moving it, combining it, or acting on it means paying someone else to translate between systems that were never meant to agree. A shared standard changes the footing: the data becomes portable by default, and a venue can take it elsewhere whenever it wants to.

You own the record

The organisation that built the audience holds its data and decides where it goes. The standard writes portability in, so no vendor has to grant it as a favour.

One language, not fifty

Sources and destinations agree on the same entities and the same vocabulary, so a connection is a lookup rather than a project.

A shared, cleaner whole

When everyone describes data the same way, it gets easier to compare and trust. The record becomes a common asset for the sector, not a private silo.

About the protocol

Audience data is stuck, and moving it is slow work

The organisations that build an audience rarely hold the plumbing underneath it. So the data is hard to move or combine, and acting on it means paying someone to translate between systems that were never built to agree.

A venue, a festival, an artist or a club creates the relationship with its audience. Yet the record of that audience tends to live across ticketing platforms, access-control vendors, webshops and membership tools, each holding a slice in its own shape. None of them was designed to hand that slice to the next system cleanly.

The friction is not really about the schema. It is about the connectors: the code that reads one platform's API and reshapes it for another. APIs change every quarter, and a connector has to be kept alive forever. That is where the time and the money go.

Without a standardM × N connectors
each pair maintained forever
With OAPM + N connectors
OAPwrite to the standard once

Where the work piles up

Picture ten customer-data platforms each building and maintaining their own connector to the same ticketing source. That is the same work, done ten times, kept alive ten times. A shared protocol on its own does not fix this. It moves the seam.

The work only drops when a connector is written once and the whole sector keeps it current. The saving is real, but the larger prize is what you get alongside it: data that is portable by default and consistent across sources, because everyone is mapping to the same target.

Why it persists

This is an incentive problem more than a technical one. The parties that own the integrations tend to benefit when data stays hard to move. The friction is their advantage, so they are not the ones who will ask for a standard.

A standard takes hold when the side of the market that feels the pain asks for it. Here that is the demand side: the venues, festivals, clubs and museums that want to own their audience and are tired of renting access to it.

About the protocol

What OAP is, and what it is not

OAP draws a narrow boundary on purpose. It is the shared contract for the data, and almost nothing else, which is what lets it stay stable while products around it move fast.

OAP is

  • A protocol: data in motion between parties that do not share internals.
  • A small, stable core plus an open extension mechanism.
  • Transport-agnostic: JSON over HTTPS, with bindings for pull, webhooks and streams.
  • Self-describing: a payload makes sense on its own, without a database to join against.

OAP is not

  • A database schema. That describes data at rest; OAP describes data in motion.
  • A transport or description language. It fills OpenAPI and AsyncAPI with meaning rather than replacing them.
  • A blockchain ticketing standard. Those standardise the ticket as an asset; OAP standardises audience data and its portability.
  • A product. A CDP consumes OAP; in this design that product is a commodity too.

Design principles

A handful of rules keep the protocol honest. Most of them point in the same direction: push growth out to the edges and keep the middle small enough to trust.

Small in the middle

A tiny frozen core that everyone shares. All variation lives in namespaced extensions at the edges.

Protocol is not storage

Keep the wire format minimal and stable. Let products be as complex as they like inside.

Portability is the point

Every choice is judged by whether it makes the data easier to take elsewhere.

Neutral by design

A portability standard owned by one vendor is not believable, so the standard is kept separate from any company.

Easy to extend, hard to break

Adding an extension or a signal type is easy. Changing the core is rare and deliberate.

Self-contained payloads

A little denormalisation in transit is a feature, so a message can be read without a lookup.

About the protocol

Open at the bottom, so value can grow on top

OAP defines only the bottom layer. The layers above it are where strategy lives, and the design follows from one choice: give away the foundation so the work on top becomes possible.

Think of it as four layers. The protocol and the runtime underneath are meant to be shared infrastructure, open and free to anyone. The activation tools and the value work on top are where products and businesses differentiate.

4

Value

the moat

Benchmarks, guidance and inspiration. Knowing what to do with the data.

paid
3

Activation

differentiated

Segmentation, campaigns, prediction. These read OAP; they never define it.

some paid
2

Operation

commodity

An open runtime that ingests, resolves identity, stores and exports. Self-host or hosted.

free / hosted
1

Protocol

commodity

The wire contract, the transport bindings, the connector commons and the registry.

free, neutral

The four layers

Layer one is the protocol in this document: the wire contract, the transport bindings, the shared connectors and the registry. Public, free and neutral.

Layer two is the operation, an open runtime an organisation can run on its own infrastructure or take hosted. It is deliberately plain, fully OAP in and OAP out, so it stays a real "own it yourself" option rather than a trap.

Layers three and four are where differentiation lives: activation tools that read OAP, and the value work of knowing what to do with the data. That top layer is the one thing that cannot be made common, because it rests on scale and on consent.

About the protocol

Eight entities, one vocabulary

The whole domain fits into eight core entities and one list of signal types. Most of them reuse schema.org names, so a payload can double as JSON-LD. The behavioural layer is OAP's own.

Eight core entities

Four of the entities describe the setup, an organisation putting on events at a place, with offers people can buy. Three describe a purchase and the access it grants: an order, the tickets inside it, and the profile who holds them. The eighth, the Signal, records what people actually did.

organizerplacehas offersissuesheld bycontextactorgrouped inOrganizationschema.org/OrganizationPlaceschema.org/PlaceEventschema.org/EventOfferschema.org/OfferTicketschema.org/TicketOrdertransaction headerProfilePerson + identitySignalOAP-native event fact
Person

Profile

A person, with the typed identifiers and consent records that make identity resolution and lawful sharing possible.
Organization

Organization

The rights-holder the audience belongs to: a venue operator, a festival, a club, a museum.
Place

Place

Where things happen. A room, a stadium, a theatre, a museum, with an address and coordinates.
Event

Event

The happening: a concert, a match, an exhibition, or a whole season that parents its individual dates.
Offer

Offer

What can be bought: a ticket type, a season ticket, a membership, or an add-on.
OAP-native

Order

A purchase: the basket of tickets and items bought together, with its fees, payment, and refunds kept in one place.
Ticket

Ticket

The entitlement that grants access, linked to an event and held by a profile, who need not be the buyer.
OAP-native

Signal

The behavioural fact. One thing that happened, the unit everything else normalises to.

Signals

One controlled list of signal types is the part that forces every connector to speak the same language. It grows on purpose, never ad hoc. This is the core set in v0.5:

page_viewedevent_viewedaccount_createdaccount_signed_incheckout_startedcheckout_abandonedticket_purchasedticket_scannedticket_refundedticket_transferredmerch_purchasedmerch_refundedfood_beverage_purchaseddonation_mademembership_startedmembership_renewedmembership_lapsedmembership_cancelledemail_sentemail_openedemail_clickedsubscription_changedprofile_mergedprofile_anonymized

Example payload

Here is a small but complete message: a venue, a place, one audience member who bought a weekend pass and later walked through the gate. Notice that the second signal arrives from a different source and still lines up by id.

payload.json
{
  "protocol_version": "0.5",
  "source": "ticketing_platform",
  "sent_at": "2026-05-12T10:00:00Z",
  "organizations": [
    { "@type": "Organization", "organization_id": "org_1",
      "name": "Riverside Hall", "type": "venue_operator" }
  ],
  "places": [
    { "@type": "MusicVenue", "place_id": "pl_1", "name": "Riverside Hall",
      "geo": { "latitude": 52.08, "longitude": 5.12 } }
  ],
  "profiles": [
    { "@type": "Person", "profile_id": "p_24815",
      "identifiers": {
        "email": [{ "value": "[email protected]", "type": "email",
                    "primary": true, "verified": true, "source": "ticketing_platform" }],
        "external_id": [{ "value": "cust_55", "type": "external_id",
                          "source": "ticketing_platform" }]
      },
      "consent": [{ "purpose": "marketing", "status": "granted", "channel": "email",
                    "legal_basis": "consent", "timestamp": "2026-05-01T12:00:00Z",
                    "source": "ticketing_platform" }],
      "traits": { "city": "Brightford", "language": "en" } }
  ],
  "events": [
    { "@type": "MusicEvent", "event_id": "ev_spring_nights",
      "name": "Spring Nights 2026", "startDate": "2026-08-15T18:00:00Z",
      "eventStatus": "EventScheduled", "place_id": "pl_1", "organizer_id": "org_1" }
  ],
  "offers": [
    { "@type": "Offer", "offer_id": "of_weekend", "event_id": "ev_spring_nights",
      "name": "Weekend pass", "price": 89.0, "priceCurrency": "EUR",
      "category": "general_admission", "availability": "InStock" }
  ],
  "orders": [
    { "order_id": "ord_1", "profile_id": "p_24815", "event_id": "ev_spring_nights",
      "organization_id": "org_1", "status": "paid", "channel": "web",
      "payment_method": "card", "total": 89.0, "currency": "EUR",
      "ticket_ids": ["tk_1"], "created_at": "2026-05-12T09:59:00Z" }
  ],
  "tickets": [
    { "@type": "Ticket", "ticket_id": "tk_1", "offer_id": "of_weekend",
      "event_id": "ev_spring_nights", "profile_id": "p_24815", "order_id": "ord_1",
      "status": "valid", "totalPrice": 89.0, "priceCurrency": "EUR" }
  ],
  "signals": [
    { "id": "ticketing_platform:ord_1:purchase", "type": "ticket_purchased",
      "timestamp": "2026-05-12T09:59:00Z", "source": "ticketing_platform",
      "profile_id": "p_24815",
      "context": { "event_id": "ev_spring_nights", "offer_id": "of_weekend",
                   "ticket_id": "tk_1", "order_id": "ord_1", "value": 89.0,
                   "currency": "EUR", "channel": "web", "payment_method": "card" } },
    { "id": "access_control:tk_1:in", "type": "ticket_scanned",
      "timestamp": "2026-08-15T18:42:00Z", "source": "access_control",
      "profile_id": "p_24815",
      "context": { "event_id": "ev_spring_nights", "ticket_id": "tk_1",
                   "channel": "gate", "direction": "in" } }
  ]
}
One purchase and one scan, from two systems, in one shared shape.

Build with OAP

One meaning, many ways to move it

OAP defines what the data means once, independent of how it travels. Around that core it defines optional bindings: profiles for how the same canonical data moves over different transports.

At heart OAP is event-native. The Signal is the unifying shape, so whether data arrives by a poll or by a push, everything normalises to the same entities. Pull is simply how you source events from a platform that does not push; push is events arriving directly.

The bindings

pull

REST pull

A consumer polls and fetches, with pagination and an incremental sync watermark on updated_at. The old-school path that always works.
push

Webhook push

The platform posts the envelope on change, with signing, retries and ordering. The idempotency key turns a retry into a dedupe, not a double purchase.
backfill

Bulk export

The portability export is also the initial backfill. Load once, then stay live by webhook or polling, the way an ELT tool connects a source.
stream

Streaming

An optional queue binding for the largest sources, such as festivals with millions of scans. An edge, not the core.

OAP does not invent its own description language. Its entities are JSON Schema, which drops straight into an OpenAPI document, and its pull and webhook contracts live in that same document. For streaming, the equivalent is AsyncAPI. OAP supplies the industry meaning; those standards describe the envelope. Nothing in OAP may contradict how they would describe it.

Build with OAP

Connectors, built once and shared

This is where the real work has always lived, so it sits at the centre of the design. A source connects either natively, already speaking OAP, or through a connector that maps its API to canonical OAP.

The shift is that connectors are built and kept current once, in a shared, governed commons, instead of being rebuilt by every consumer that needs the same source. Write to the standard one time, and the whole sector reuses it.

Ticketing platformBox officeAccess controlMembership systemWebshopStreaming gateConnectorcommonsgovernedAI-assistedmaintained onceOAPcanonicalnative or mapped sources
the easy 80%

Declarative mapping

A config format, not code, for well-behaved sources. Most platforms map cleanly, so most connections never need a developer.
the messy 20%

Connector SDK

A code escape hatch for the awkward sources: tricky auth, rate limits, schemas that drift. The long tail that always needs a human touch.

Why this is now feasible

Connectors were expensive because a person wrote and repaired each one every time an API changed. With OAP as a fixed target language, an AI agent can propose most of a mapping against an unfamiliar source and flag drift when it appears, because there is finally a stable, meaningful thing to map toward.

Shared connectors have rotted before, elsewhere, when no one owned them. Two things keep them alive: governance, with connectors in one validated repository, and funded maintenance, paid for by the business around the standard. OAP's narrow scope makes this tractable. A few dozen platforms cover most of the market, and community mappings handle only the long tail.

Build with OAP

Your data is yours, and there is a test for it

Portability is one mechanical guarantee, and the rest of the model is built to keep it.

On request from the organisation that owns the data, an OAP-compliant system must produce a complete export: every profile, event, offer, ticket and signal it holds for that organisation, in canonical OAP, including consent and any known extensions. It must also be able to import an export in the same shape.

That one guarantee is the mechanical meaning of "your data is yours." It is also the clean-onboarding path, since the same export doubles as the initial backfill: load it once, then stay live.

Build with OAP

A live, machine-readable registry

Documentation is prose for humans. A registry is a machine-readable index for developers and agents, and the docs are generated from it so the two never drift apart.

Each certified platform has one record carrying everything a developer or an agent needs to set up a connection in a single lookup: the endpoints, the auth method, the OAP version spoken, the bindings supported, the entities and signals supplied, the mapping used, and a live certified status.

registry-record.json
{
  "platform": "northgate_ticketing",
  "oap_version": "0.5",
  "endpoints": { "pull": "https://api.example.com/oap", "webhook": true },
  "auth": "oauth2",
  "bindings": ["pull", "webhook"],
  "entities": ["Organization", "Event", "Offer", "Order", "Ticket", "Profile", "Signal"],
  "mapping": "declarative",
  "certified": { "status": "green", "last_verified": "2026-06-20T04:00:00Z" }
}
One lookup tells you how to connect, and whether it currently works.

The registry and certification are one mechanism. A platform enters the registry only once it is certified, and it stays certified only while automated conformance checks against its live endpoint keep passing: current OAP, valid required entities over the mandatory bindings, and a working portability export.

Build with OAP

What an agent needs to use a source on its own

OAP is built so that software agents, not just people, can connect to a source and pull standardised data. That takes four things, and the protocol supplies the ones that were missing.

Agentself-serveAccesshow to reach a sourceMeaningthe canonical schemaTranslationthe connector or mappingDiscoverythe registry

Access tells an agent how to reach a source. Meaning is the canonical schema, so it learns the concept of a ticket once rather than per platform. Translation is the connector or mapping. Discovery is the registry, which is the corner that was missing and the one that makes the rest operational.

Standardised meaning is the precondition for self-service. And because OAP is a stable target language, an agent can go a step further and generate or repair the connector itself, which is the mechanism that finally collapses the cost of integration.

Examples

The same eight entities, four very different shapes

A single venue, a multi-part event, a repeating season, continuous access: four different shapes, one core. The differences are entirely vocabulary and extensions, never new core entities. That is the test that the core is the right size.

Each archetype below reuses the same model. Watch how little has to change to move from a single room with a ticket calendar to continuous access with no dated performance at all. Whatever you run, it almost certainly maps to one of these four shapes.

Single venue

A single space running a calendar of dated events. The simplest case, and the one the core was shaped around. Think music venues, theaters, comedy clubs.

Organization
the venue operator
Place
the room
Event
each concert, a MusicEvent
Offer
the ticket types on sale
Order
each checkout, grouping the tickets and items bought together

extensions

food_and_beverageparticipants

signals you will see

ticket_purchasedticket_scannedfood_beverage_purchasedmerch_purchased

Multi-part event

One event made of many. Sub-events hang off the parent as children, and access is often timed. A festival, a multi-day conference, a weekend fair.

Event
the festival, with stages and days as children
Offer
day and weekend tickets, camping as an add-on
Place
the site and its stages

extensions

timed_entrypersonalizationparticipants

signals you will see

ticket_scannedcheckout_startedmerch_purchased

Season and membership

A repeating season with assigned seats and members who renew. Membership and seating do most of the extra work here. Sports clubs, but also opera and symphony seasons or theater subscriptions.

Organization
the club
Place
the stadium
Event
each match, with the season as its parent
Offer
season tickets, memberships, single-match tickets

extensions

seatingmembershiployaltyparticipants

signals you will see

membership_renewedmembership_cancelledticket_scanned

Continuous access

No single dated performance, yet the same eight entities still fit. Open-run access modelled as one continuous event. Museums, galleries, attractions, the things you walk into on the day.

Organization
the institution
Event
the permanent collection as a continuous event, plus temporary shows
Offer
day admission, timed slots, annual membership
Ticket
the admission, linked to the continuous event

extensions

timed_entry

signals you will see

ticket_purchasedticket_scannedmembership_started

Ecosystem

Where the value actually is

The money is not in the protocol or the runtime. Both are meant to be common infrastructure. It is in helping organisations use them well, through benchmarks and concrete guidance.

When everyone has the same protocol and the same runtime, having them is no advantage. Using them well becomes the only difference that lasts. Organisations in culture and sport are often short on data skill but rich in shared problems, so the scarce thing moves from the technology to the know-how. Technology gets cheaper every year; domain know-how does not.

the flywheelfree feeds paidOpen OAP spreadsBenchmarks deepenGuidance improvesAdoption grows

The benchmark layer is the part a competitor cannot copy. Anyone can fork the runtime or clone a module, but no one can recreate the aggregated, consent-covered picture of hundreds of organisations, because it only exists at scale. Opening up the lower layers is what produces that scale. More organisations on open OAP means richer benchmarks, which makes the guidance more useful, which draws more organisations in.

platform

The company orchestrates

It stewards the standard, runs the certified registry and the connector commons, and holds the benchmark data layer.
people

Partners deliver

Certified agencies bring strategy, guidance and execution to organisations, so the human work scales across many hands.
distribution

Incumbents come along

The agencies that build custom connectors today are freed from that chore and lifted into the higher-value work the standard unlocks.

Ecosystem

Neutral by design, and kept that way

A portability standard owned by the company that profits from it is not believable. So the standard is held apart from the business, from day one.

Two entities exist from the start. A neutral steward, an open project that becomes a foundation in time, owns the specification, the reference schema and the reference runtime under a permissive licence. A separate company owns the value layer, the certification marks and any proprietary modules.

Neutrality is not rushed. A standard is donated to a foundation once it is already the default, not before. The moment to press that button is when a large adopter's participation depends on it.

about systems

Certified platform

A source or runtime that passes live conformance checks: current OAP, valid entities over the mandatory bindings, a working export.
about people

Certified partner

An agency qualified to deliver the value layer. One weak partner can erode trust in the whole network, so partner quality matters as much as platform conformance.

Ecosystem

Roadmap

Four phases, in order: prove the spec, open the reference and commons, turn on the registry and partners, then hand governance to a neutral home.

  1. Phase 0now

    Spec and lighthouse

    Freeze the v0.x core. Recruit one mid-market platform and one demand-side group as design partners. Publish the canonical OpenAPI and AsyncAPI documents alongside the schema.

  2. Phase 1

    Reference and commons

    Open the reference runtime and the data-model templates under Apache 2.0. Stand up the first connectors in a governed commons, AI-assisted. Offer a hosted runtime for those who want no upkeep.

  3. Phase 2

    Registry and partners

    Launch the machine-readable certified registry with live conformance checks. Promote the first official extensions once several adopters use them. Start the certified partner program and the benchmark layer beneath it.

  4. Phase 3

    Neutralise and scale

    Move spec and registry governance toward a neutral foundation once OAP is the default. Grow the partner ecosystem, and let the benchmark layer become the durable advantage.

A standard is worth more when it is shared

OAP is an early, open draft. If you run a venue, a festival, a club or a museum, or you build the systems behind one, the most useful thing you can do is read it, argue with it, and tell us where it breaks.

Read the data modelComing soon