Set up a whole league
Teams, players, fields and a full home-and-away schedule from one description — in one transaction, so it can never half-build a season.
Priv Life has an API built for AI agents, so the work you would otherwise do in forms can be done by something you ask in a sentence. Six teams, these sixty girls, Saturdays from January — the sentence is the input; the league, the roster and a thirty-game schedule are the result. You stay in charge of it: an agent gets a key, a key can only do what you can do, and you can take it back whenever you like.
Your agent ran the setup document. Nothing has been written yet.
Forty-five tools today, each one a thing a volunteer organization currently does by hand. Twenty-five of them are offered over MCP, because a chat is the wrong place to assemble a league one team at a time.
Teams, players, fields and a full home-and-away schedule from one description — in one transaction, so it can never half-build a season.
Membership types, the certifications you track, your committees, whether you collect dues. Described once and done.
Hand it the roster file. It matches the people already there instead of doubling them, and anyone it cannot be sure about it brings back to you by name rather than guessing.
Enter scores, move a rained-off game, add a player who signed up late, publish the public page.
“Two EMTs overnight on weeknights, one on days at the weekend, for November.” The qualifications, the shift windows, the weekly pattern and a month of coverage, in one document. Then: where the holes are, who is qualified and free, and the email asking for cover — drafted, never sent.
The appeal, its goal, its dates, and the public page donors give on. Opening that page to the public is the part that stops and asks you.
The schedule, the standings, the roster — as much of the roster as you yourself can see, and no more.
“The second Tuesday of every month at seven” becomes twelve meetings with the standing agenda on each. Then an agenda drafted from the record — including the motions the board tabled, which is the item that gets forgotten — and minutes built from the roll, the quorum and the motions as they were actually recorded, so the only part left to write is what was said. It drafts; the board decides, and a person approves.
Every rig, its checklist built from your own area library, and the shift labels — described once instead of typed in over an evening. Then the question nobody has time to assemble: what each truck left flagged this morning, and how many checks it has been that way. Walking the check and closing a defect are on no key at all: those are a person, at the truck.
An election typed up as a draft — a slate of twelve candidates is the only clerical part of an election. Opening the ballot, closing it, certifying it and casting one stay human, always.
The real request and the real response, from the first league an agent ever set up here: you ask in a sentence, your agent sends one setup document, the plan comes back as a sentence you can approve, and only then is the same document applied for real — in one transaction. Walk through it below; nothing on this page sends anything anywhere.
No form, no field order, no idea of what a season record looks like in our database.
POST /org-api/orgs/{orgId}/agent/leagues/setup
Authorization: Bearer pl_live_…
Idempotency-Key: 9f2c…a41
{
"league": { "name": "Willow Bay Girls Basketball",
"sport": "basketball", "ageGroup": "U14" },
"fields": [ { "name": "Main Gym" }, { "name": "Annex Gym" } ],
"teams": [ { "name": "Comets" }, { "name": "Dynamo" }, … 6 ],
"players":[ { "firstName": "Ada", "lastName": "Nowak",
"team": "Comets" }, … 60 ],
"schedule": { "startsAt": "2027-01-09T09:00:00-05:00",
"intervalDays": 7, "doubleRound": true }
}Twenty-five granular calls would be twenty-five chances to fail on the nineteenth. One document cannot half-happen — and dryRun is true unless it says otherwise, so this writes nothing.
200 OK
{
"dryRun": true,
"summary": "Would create Willow Bay Girls Basketball:
6 teams, 60 players, 2 fields, 30 games,
first game 2027-01-09. Nothing was written.",
"plan": { "teams": 6, "players": { "added": 60, "skipped": [] },
"schedule": { "games": 30, "rounds": 10 } }
}The dry run is the real thing, rolled back — so the plan catches what only the database knows: a gym booked twice, a player already on another team, a roster that would cross your plan's limit. Your agent shows you the sentence. You decide.
201 Created
{
"dryRun": false,
"summary": "Created Willow Bay Girls Basketball:
6 teams, 60 players, 2 fields, 30 games,
first game 2027-01-09."
}One transaction. Every row recorded as yours and marked as an agent's, visible in the Agents app under Activity — you delegated the work, so you keep the attribution. Send the identical request twice and the Idempotency-Key returns the first answer instead of a second league.
Five rails, in the API itself rather than in a prompt. They are what make handing an agent your organization a reasonable thing to do.
A key names the person who made it. Its powers are yours and the key's grant, intersected — recomputed on every single request. Lose a permission tomorrow and the key loses it the same minute.
You cannot grant a key more than you have, even by accident: the mint refuses it. A manager's key cannot quietly become an owner's.
Setting anything up is one document and a dry run is the default. It applies in one transaction, so there is no half-built league to unpick.
Ninety days by default, because a season is about that long. Revoke a key and the next request it makes is refused — there is no cache to wait out.
Every change is recorded as yours and marked as an agent's, with the key that made it. The Agents app has the list, and so does your organization's activity log.
Each key is limited to 300 requests and 120 writes a minute. The realistic failure is not an attacker, it is a loop — and a loop only needs to be stopped.
These are refusals in the API, not advice in a prompt. An agent that tries is told no, with the reason.
Works with anything that speaks MCP, and with anything that can make an HTTP request — which is everything else.
In the Agents app: name it for the agent that will hold it, tick only the powers it needs, pick how long it lives. You see the key once.
For an MCP client, one endpoint and the key as a bearer token; it will be shown only the tools that key may actually call. For everything else, the manifest lists every path, what it needs and what it returns.
“Set the league up.” “Import this roster.” “Enter Saturday's scores.” It comes back with a plan; you say go.
The endpoint is POST /org-api/mcp — streamable HTTP, stateless, Authorization: Bearer pl_live_…. Every write takes an Idempotency-Key, every error carries a machine-readable code, and every setup document defaults to dryRun: true.
Agent access is not a tier. Every Priv Life app is free to a hundred people — a hundred players in a league, a hundred members on a roster — and an agent working inside that line costs nothing extra. Past a hundred it is $10 a month, $100 a year, or $250 once and never again, the same figure in every app, and the agent API comes with all of them.
Your agent is also subject to the same line you are: a roster import that would carry you past a hundred people is refused with a link, not silently truncated.
Mint a key in two minutes · revoke it in one · ninety days by default
No card required. Your exit stays open — full export, always.
Create your free accountThe same promise as the rest of Priv Life, restated for the case where a machine is doing the typing.
Your roster, your schedule and your minutes belong to your organization. We host them, we never mine them, and no organization ever sees another's. Letting an agent in does not create a second copy somewhere: it makes requests to the same API your screens use, under your permissions, and what it reads is what you could have read on a screen.
What your agent's provider keeps is between you and them, which is the honest shape of it — so grant a key the narrowest set of powers that does the job, and revoke it when the season ends.
Priv Life has no advertising business. No ads, no behavioral profiling, no data sales — and your records are not training data for anyone's model, ours included.
Create the account, mint a key, and tell your agent what you wanted done.