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.
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.
{
"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"
}
}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
One language, not fifty
A shared, cleaner whole
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.
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
Protocol is not storage
Portability is the point
Neutral by design
Easy to extend, hard to break
Self-contained payloads
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.
Value
the moatBenchmarks, guidance and inspiration. Knowing what to do with the data.
Activation
differentiatedSegmentation, campaigns, prediction. These read OAP; they never define it.
Operation
commodityAn open runtime that ingests, resolves identity, stores and exports. Self-host or hosted.
Protocol
commodityThe wire contract, the transport bindings, the connector commons and the registry.
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.
Profile
Organization
Place
Event
Offer
Order
Ticket
Signal
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:
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.
{
"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" } }
]
}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
REST pull
Webhook push
Bulk export
Streaming
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.
Declarative mapping
Connector SDK
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.
{
"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" }
}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.
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
signals you will see
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
signals you will see
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
signals you will see
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
signals you will see
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 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.
The company orchestrates
Partners deliver
Incumbents come along
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.
Certified platform
Certified partner
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.
- 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.
- 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.
- 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.
- 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.