From an anonymous request to a named consumer
Part D's policies kept counting per key, per subscription — and quietly assumed something this part now delivers: that the gateway can tell one consumer from another. Without that, "100 calls a minute per consumer" collapses into "100 calls a minute total, shared by everyone," and every surgical thing you want to do — throttle one partner, bill one team, revoke one leaked credential — becomes impossible. The machinery that turns an anonymous HTTP request into a named, accountable identity is three interlocking nouns: products, subscriptions, and the developer portal. Get these and the whole partner story clicks into place; miss them and you have a gateway that can only treat the world as one undifferentiated caller.
The vocabulary is small and interlocking, and interviews check whether you can walk it without notes:
- API & operations
- What you have: the modelled backend from 38c — a set of operations at paths. An API is raw capability; on its own it is not something a consumer signs up for.
- Product
- What you offer: a published bundle of one or more APIs with terms attached — which operations, what limits, whether approval is required, published or not. "Partner — Catalog, read-only, 100 calls/minute, approval required" is a product.
- Subscription
- A consumer's enrolment in a product, carrying a pair of keys. The key identifies the consumer — which is what makes revoking one partner, throttling one team, and reading one column of the usage chart possible.
- Developer portal
- The self-service site APIM generates: documentation, an interactive console, and sign-up for products. It replaces the onboarding meeting — a stranger can discover, subscribe, and make a first successful call without anyone at your company attending.
Products — what you have vs what you offer
The distinction that enables the design is APIs are what you have; products are what you offer. You may have one sprawling catalog API with fifty operations, read and write. Partners should never see that surface. Instead you publish a product — say Partner — that exposes only the read-only operations, attaches a 100-per-minute limit and a daily quota, and requires approval to subscribe. The same catalog API might also back an Internal product with no limits and all operations, for your own teams. One API, two products, two completely different deals — and the consumer only ever meets the product.
Terms live on the product, which is why this is the right altitude for policy in 38d: a rate limit set on the Partner product governs every partner at once, while the Internal product carries none. Approval on the product is the gate that turns "anyone can sign up" into "anyone can request, and a human says yes" — the difference between a public API and a partner one. Products are how you sell the same capability as different offers, and how you keep the raw API's full surface out of a stranger's hands.
Subscriptions — the unit of consumer identity
A subscription is one consumer's enrolment in one product, and it carries a pair of keys (primary and secondary, so a caller can rotate one while the other still works — the same zero-downtime rotation pattern from Class Thirty-One). The key travels in a request header, and when the gateway sees it, the request stops being anonymous: it is this partner's call, which is the hinge everything surgical swings on. Because each consumer holds their own subscription, you can suspend one partner tonight without touching the others, throttle one team, meter one customer's usage for a bill, and revoke one leaked key by rotating it — each an operation on a single subscription, invisible to everyone else.
The subscription is the smallest thing you can revoke.
This is why per-consumer credentials are issued on day one, not retrofitted on day ninety. The day you discover you cannot act on one consumer is always an incident — a partner's key has leaked, or their integration has gone feral, and you find that the only lever you have shuts off everyone. Subscriptions are the design decision that makes sure that lever exists before you need it, and 38f is where the key gives way to stronger proofs of identity for the cases that warrant them.
The developer portal — onboarding without a meeting
The last noun is the one that turns all this from an internal control into a product strangers can adopt. The developer portal is a website APIM generates from your APIs and products: it carries the documentation (generated from the OpenAPI spec of 38a), an interactive console where a developer can try a call in the browser, and a sign-up flow. A partner arrives, reads the docs, requests the Partner product, gets approved, receives their keys, and makes a first successful call — and nobody at your company sat in a meeting for any of it. The onboarding that used to be an email thread, a shared secret, and a week of back-and-forth becomes minutes of self-service.
That is not a cosmetic nicety; it is the difference between an integration that scales and one that consumes an engineer per partner. Every manual onboarding is a person's afternoon and a chance to paste a secret into a wiki; the portal replaces both with a repeatable flow that also happens to be more secure, because the keys are minted by the system and never travel through a human's inbox. When sales closes the fourth partner, the portal onboards them while you are asleep.
Three partners, three keys, one product
Campux publishes a single Partner product over the catalog API: read-only catalog and stock operations, 100 calls a minute, a daily quota, subscription approval required. The two marketplaces and the regional chain each find the developer portal, read the generated docs, and request the product. Approval is one click each; their keys are theirs in minutes. Onboarding the third partner takes eleven minutes and zero meetings — a number the sales team repeats loudly, because it means the next signed contract is live the same day.
The payoff is legible the first time anything goes wrong. Each partner holds their own subscription, so when one marketplace's sync misbehaves, that one key throttles alone (38d's 429) and can be suspended for an afternoon without the others noticing. When a key is accidentally committed to a public repo, Campux rotates that one subscription's primary key and the partner fails over to the secondary — a five-minute fix affecting one partner, not a coordinated scramble across three. The shared-password email thread that almost shipped is pinned above the whiteboard, annotated in red pen: this is what the subscription replaced.
A consumer the gateway can name
The front desk is now complete in its logic: it models an API (38c), runs behaviour on it (38d), and knows who every request belongs to (this part). The rate limits that counted per subscription finally mean something, because a subscription is now a real, revocable, billable thing. What remains is to make the identity strong enough to trust and the network around it tight enough to enforce. A subscription key is a good identifier and a weak secret — Part F upgrades it to real authentication where it matters, and Part G makes sure the only road to the backend is through this desk.
Cutting off one partner without a war room
A partner accidentally pushed their subscription key to a public repository. Because each partner has their own subscription, this is a five-minute job, not an incident: you rotate that one subscription's primary key, the partner's client falls over to its secondary, and you tell them to update at leisure. No other partner is touched, no shared secret has to be re-coordinated across three companies, and the usage chart confirms nobody abused the exposed key in the interim. The design decision that made this small — one subscription per consumer — was made on day one, precisely so this day would be boring.
Examination
Four drills, then two situations. The situations have no marking scheme — write your answer before you reveal the reasoning, or the exercise is worthless. Nothing is stored; this is between you and the page.
B — the subscription is the unit of consumer identity, and everything surgical flows from it. Because each partner enrolled with their own keys, one subscription suspends tonight and reactivates after their fix, while the other partners never learn anything happened. Now price the alternatives, because each is a real thing tired teams do. A fights an identity problem with a network tool: IP ranges shift, NATs and CDNs share them, and the block either misses the partner or catches innocents — and the backend should not be reachable except via the gateway anyway. C is the nuclear option that converts one consumer's bug into every consumer's outage — the exact outcome the gateway exists to prevent. D confuses the brochure with the door; documentation access stops nobody's curl. The habit underneath: any time you cannot act on one consumer, you discover it during an incident, which is why per-consumer credentials are issued on day one.
B — APIs are what you have; products are what you offer. One catalog API can back two products that expose different operations under different terms, so partners meet a read-only, rate-limited offer and internal teams meet the full one — without a second copy of anything. A duplicates the API and its maintenance for no reason; now two models can drift (38c's whole warning). C is not a control at all — "please don't call it" is a suggestion, and a partner's code will call whatever the product exposes. D misplaces the mechanism: a subscription is a consumer's enrolment, not a way to reshape which operations exist — the operations and limits belong to the product, and the subscription just enrols a consumer in it. The product is the altitude where "what you offer" is decided.
Revoke one, bill one, rotate one. Each is an operation on a single subscription that a shared key makes impossible: with one key for everyone, revocation means revoking everyone, usage cannot be attributed, and a leak forces a coordinated rotation across all consumers at once. The two rejects are things a subscription does not do. It does not change what an operation computes — that is backend business logic, on the wrong side of the track's boundary line. And it does not route a consumer to a faster backend; performance tiers, if you built them, would be a product-and-routing decision, not a property of holding a key. The subscription's power is identity and accountability, not application behaviour — keep that line clean.
# partner onboarding plan
1. Publish a Partner product: read-only ops, 100/min,
a daily quota, approval required.
2. Issue one shared partner key to all partners —
simpler than managing three subscriptions.
3. Partners self-serve via the developer portal:
request the product, we approve, keys issued.
4. Each partner's usage shows on the per-subscription
chart for billing and abuse detection.
Line two — and notice it contradicts the very next two lines. A shared key means the gateway sees one anonymous consumer, which makes the per-subscription chart on line four impossible (there are no per-subscription rows), the self-service portal on line three pointless (everyone gets the same key, so why approve individually), and revocation all-or-nothing. "Simpler than managing three subscriptions" is false economy: the portal manages the subscriptions for you, so the shared key saves no real work and destroys throttling, billing, and revocation in one stroke. Run the tape — one partner's key leaks, and now all three must rotate simultaneously, mid-integration, for one company's mistake. The distractors are the plan working: approval is exactly right for a partner product (A), self-service via the portal is more secure than manual key-pasting, not less (C), and per-subscription usage data is precisely what 38h's analytics provide (D).
Concede the pain before defending the keys. The PM is reacting to something real — if onboarding feels like paperwork, that is a legitimate bug — so agree to fix the friction before explaining why the fix cannot be key-sharing. Then run the one bad night, because it converts the abstraction into a story: partner B ships a buggy sync that hammers the API at 2am. With per-partner keys, the machinery handles it in its sleep — B throttles at B's limit, A and C never notice, the usage chart names B, and Monday's email goes to one inbox. With a shared key, the gateway sees one anonymous consumer: the limit throttles all three at once, the chart cannot say who did it, and Monday is three denials and an argument. Same bug, same night — one design produces a line item, the other an incident with diplomacy attached.
Then price the parts the night didn't show. Revocation: keys leak (Class 31's whole curriculum), and a shared key that leaks must be rotated for everyone simultaneously — three coordinated partner deployments for one partner's mistake, which in practice means the leaked key stays valid for weeks. Commercial flexibility: the moment sales wants tiers — the regional chain at 100 a minute, the big marketplace paying for 1,000 — per-partner subscriptions make it a product setting; a shared key makes it impossible. And accountability is Class 32's lesson in partner clothes: an unattributable call is an unattributable cost, and "which partner is worth what" becomes unanswerable at renewal time.
Close by solving the actual complaint. The paperwork is not the keys' fault — it is the process's, and the developer portal already fixes it: partner signs up, requests the product, approval is one click, keys are theirs in minutes — eleven minutes and zero meetings for the case file's third partner. Offer the PM that: "same-day onboarding, and we keep the ability to throttle, bill, and revoke one partner at a time." The sentence that ends the meeting: the keys aren't the paperwork — they're the reason one partner's bad night stays one partner's problem.
Design it as product, subscription, portal, in that order. "First I decide what to offer, not just what I have: I publish a product exposing only the operations external developers should see, with a rate limit, a quota, and approval required — the raw API's full surface never reaches them. Then each developer becomes a subscription: they enrol in the product and get their own key pair, which is what lets me throttle, meter, or revoke any one of them alone. And discovery and sign-up happen in the developer portal — generated docs, an interactive console, and a request-and-approve flow — so they onboard themselves without a meeting." That is the whole design in three nouns, and saying them in order shows you understand the dependency.
Then name what you would refuse: a shared key. "The one thing I won't do is issue a single shared credential to save onboarding effort. It feels simpler and it destroys everything the rest of the design buys — I couldn't attribute usage, couldn't revoke one bad actor without cutting everyone off, and a single leak would force every developer to rotate at once. The portal manages per-developer subscriptions for me, so the shared key saves no real work and forfeits all the accountability." Naming the anti-pattern, and why it is seductive, is what separates someone who has run a public API from someone who has only drawn one.
Close on the property that makes it safe to open at all. "The reason I can open this to strangers without fear is that every one of them is a named, limited, revocable identity from their first call — not a retrofit after the first incident. The accountability is built in on day one, which is exactly what makes 'open it to the public' a calm decision instead of a risky one." That final point — that per-consumer identity is a precondition, not a cleanup — is the senior insight the question is fishing for.
Five things worth carrying out of this part
- Three interlocking nouns turn an anonymous request into a named consumer: products (what you offer), subscriptions (who enrolled, with keys), and the developer portal (self-service sign-up).
- APIs are what you have; products are what you offer. One API can back a limited, read-only Partner product and an unlimited Internal one — the consumer only ever meets the product.
- The subscription is the unit of consumer identity and the smallest thing you can revoke. It carries a key pair for zero-downtime rotation, and it is what makes throttling, billing, and revoking one consumer at a time possible.
- The developer portal replaces the onboarding meeting: docs, an interactive console, and request-and-approve sign-up, with keys minted by the system rather than pasted through an inbox.
- Per-consumer credentials are issued on day one, not retrofitted on day ninety — because the day you find you can only act on everyone is always an incident.
- Subscription scope has a subtlety worth knowing: a subscription can be scoped to a single product, to all APIs, or to one API, and products can be published with an open (no-subscription) option for truly public read APIs. The Partner-product-with-approval shape in this part is the common external-partner case; a fully public, no-key API is a deliberate and rarer choice, and even then you usually want a subscription for attribution. ↩
- The developer portal is itself customisable and, in the managed version, has had security advisories over its history — it is a real website you are publishing, so it belongs in the same review posture as any public surface (Class 31). Treat "turn on the portal" as "publish a site," not "flip a toggle," especially if you self-host or heavily customise it. ↩