Pick a crate of lager, shandy or cider and we will knock 50% off a box of crisps. Take the crate
The integration layer

Six things cross. Four things never do.

The integration layer between this platform and the game is deliberately narrow, explicitly versioned, and defined by its refusals rather than by its capabilities. Most integration failures are failures of appetite: two systems that could share everything eventually do.

The integration layer

The whole contract, in two columns.

What crosses

  • An SSO token, so that a member does not have two accounts
  • A membership tier — Loitering, Mucking In, Ploughing On, Landlording — as a single enumerated value
  • An age-verified boolean. True or false, and nothing about how it was established
  • Achievement events, one way, from the game to the platform
  • A commerce bridge for non-alcohol products only, which passes a basket and never a customer
  • Shared parish membership, as a parish identifier and nothing else

What must never cross

  • A raw date of birth. Ever, in either direction, for any reason
  • Payment-card data of any kind, tokenised or otherwise
  • Alcohol purchase history, or any signal derived from it
  • A child’s precise location, at any resolution finer than a parish
  • A child’s behavioural profile, play pattern, session record or engagement score
  • Free text written by any user, in either direction
  • Anything that could reconstruct one of the above by joining two permitted fields
Six fields

The six fields, specified.

Identity and entitlement

SSO token
Short-lived, scoped, single-purposeEstablishes that this is the same person. Carries no attributes beyond a subject identifier.
Membership tier
An enumerated value, four possibilitiesNot a spend figure, not a join date, not a history. One word.
Age-verified boolean
True or falseThe game learns that the person is over the threshold. It never learns the birth date, the method, or the margin.

Events and commerce

Achievement events
Game to platform, one wayA stable event name and a timestamp. No score, no rank, no play pattern.
Commerce bridge
Non-alcohol products onlyThe game hands a basket to the shop. The shop never hands a customer to the game.
Parish membership
A parish identifierTwelve possible values. Not a postcode, not a coordinate, not a distance.

How it is versioned

Version in the path
/v1/, /v2/Not a header, not a query parameter, and not negotiated. A version is a different URL.
Breaking changes
A new version onlyThe old one runs for a minimum of twelve months alongside it.
Adding a field
Requires a named approver and a DPIA reviewBecause the failure mode of an integration layer is that it grows one convenient field at a time.
Removing a field
Allowed at any timeDeliberately asymmetric. Taking things out is easy and putting things in is hard.

Every one of the six is the narrowest possible representation of the thing it carries. An age-verified boolean instead of a birth date. A parish instead of a postcode. A tier instead of a spend history.

The refusals

Why each of the four refusals is absolute.

  1. A raw date of birth.

    The game needs to know whether somebody is over an age threshold. It does not need to know their birthday, and the difference between those two statements is the difference between a boolean and a permanent piece of identifying personal data about, in many cases, a child.

    Under the Children’s Code, data minimisation is a design requirement rather than a policy aspiration. Passing a birth date where a boolean would do is the clearest possible failure of it.

    A boolean answers the question. A birth date answers a question nobody asked.

  2. Payment-card data.

    There is no version of this integration where card data needs to move between a game and a farm shop. The commerce bridge hands a basket to a checkout that already exists and already handles payment, and the game never sees a card.

    This is also a scope decision about PCI DSS. A game that never touches card data has a dramatically smaller compliance surface than one that touches it once, and there is no benefit on the other side of that trade.

    The game hands over a basket. It never handles a card.

  3. Alcohol purchase history.

    If the game knew that a player had bought beer, the game would eventually use it — to segment, to target, to personalise. And the moment a game likely to be accessed by children personalises anything on the basis of alcohol purchase, CAP rule 18.15 stops being a question about creative and starts being a question about the product.

    So the field does not exist. Not restricted, not gated, not available to authorised callers. Absent.

    A field that does not exist cannot be misused by somebody in a hurry.

  4. A child’s location or behavioural profile.

    A parish is twelve possible values covering the whole country. That is enough for the social layer and it is not enough to find anybody. Nothing finer crosses in either direction, at any resolution, for any purpose.

    The behavioural half is the less obvious one and the more important. Session lengths, play patterns, response to prompts and engagement scores about a child are exactly the data the Children’s Code was written about, and the correct amount of it to move between two systems is none.

    A parish is not a location. An engagement score about a child is not a metric.

Six requests, six refusals

What happens when somebody asks for a seventh field.

RequestAnswerWhy
"Can we pass the player’s email for the newsletter?" No The platform already has it. The game does not need it, and consent given in one place is not consent given in the other
"Can we pass lifetime spend so we can thank big spenders?" No That is a segmentation field wearing a compliment
"Can we pass session frequency so the shop can time an email?" No That is a behavioural profile, and a meaningful share of the profiles would be children’s
"Can we pass the postcode for delivery?" No The checkout collects it at the point of delivery. The game never holds it
"Can we pass an alcohol-eligible flag?" No It is the alcohol history in one bit, and one bit is enough to segment on
"Can we add a field just for internal analytics?" No Internal analytics is where every integration layer goes to become a data lake
Wondering

The contract, questioned.

Because two systems that can share everything eventually do, one convenient field at a time, and the end state is a behavioural profile of a child sitting in a game database because somebody needed it for a dashboard.

It does not, from the game. The commerce bridge hands a basket to a checkout the customer completes themselves, with their own account, on the platform that already has their details.

It goes through a named approver and a DPIA review, and the answer is usually no. Removing a field needs no approval at all, which is the asymmetry the whole contract is built on.

And the reason there is no beer in any of it.

CAP rule 18.15, the twenty-five per cent threshold, and why a zero per cent version does not help.

Across the estate

Elsewhere on the estate.

/estate/the-money/

/estate/recording/

/estate/sitemap/

Next along the route

No beer in it

Carry on
Basket Book the pub Plot a field Join the list Bother us

Snooping, briefly.

We use a small number of cookies to keep your basket upright and to work out which pages people actually read. We do not sell anything about you to anyone, because that would be a rotten way to behave.

Read the detail