Public – no key neededRead onlySearch the Pirate Skills knowledge: the Growth Codex, the Builder Codex and Captain's Insights. Returns the best matching chapters with a short excerpt and a link. Cite the url of every chapter you use in your answer.
- querystringrequired · 2–200 characters
- limitintegeroptional, default 5 · 1–20
curl -X POST https://pirateskills.com/api/public/agent/tools/search_knowledge \
-H "content-type: application/json" \
-d '{ "query": "<query>" }'
Public – no key neededRead onlyUpcoming Pirate Skills events (Pirate Lab, AI Compass, Vibe Coding Cologne, the Vibe Hackathon, Forge sessions), soonest first, with a link to each event page (a Forge session links the Forge page, where the seat is sold) and, for a signed-in person, whether they are registered.
- typestringoptional
- Filter by event type label, e.g. "Pirate Lab" or "Vibe Coding Cologne". Omit for all.
- limitintegeroptional, default 10 · 1–50
curl -X POST https://pirateskills.com/api/public/agent/tools/list_events \
-H "content-type: application/json" \
-d '{}'
Public – no key neededRead onlyWhat Pirate Skills sells right now, with prices, read live (only what is on sale appears, and only what create_checkout sells): the Pirate Pass and the Forge Pass (monthly, prices before VAT, three-month minimum), which replace the Pirate Forge tiers (those are listed only until the passes are on sale), and a Captain on Deck session with Ben (the price is per session; up to 10 in one checkout) while it is on sale – each bought with create_checkout. `priceText` is the price to quote: euros, plus US dollars once a dollar price is set (both in one string, "€ / $"), with the person's likely currency first. An offer marked purchasable false carries a note saying why (a Pirate Pass holder cannot buy the Forge Pass on top). Event tickets (the Vibe Hackathon) are not listed here: a ticket is bought on the event page from list_events, where the price depends on the date and tier. Free events are registered with register_for_event, and the free Codex is read with search_knowledge. Every purchase is paid by the person on Stripe's own page; no agent takes a card or charges anyone.
No inputs.
curl -X POST https://pirateskills.com/api/public/agent/tools/get_offers \
-H "content-type: application/json" \
-d '{}'
Needs sign-inChanges something – ask firstRegister the signed-in person for a free upcoming event by its id (from list_events). Paid events are not registered here: the answer carries the event page where a ticket is bought.
- eventIdstringrequired · 1–128 characters
curl -X POST https://pirateskills.com/api/public/agent/tools/register_for_event \
-H "Authorization: Bearer $PIRATESKILLS_API_KEY" \
-H "content-type: application/json" \
-d '{ "eventId": "<eventId>" }'
Needs sign-inChanges something – ask first, takes something awayCancel the signed-in person's own registration for an event by its id.
- eventIdstringrequired · 1–128 characters
curl -X POST https://pirateskills.com/api/public/agent/tools/cancel_registration \
-H "Authorization: Bearer $PIRATESKILLS_API_KEY" \
-H "content-type: application/json" \
-d '{ "eventId": "<eventId>" }'
What the signed-in person has access to on Pirate Skills: the Codex, event series, the Forge, tools — with when and how each was unlocked.
No inputs.
curl -X POST https://pirateskills.com/api/public/agent/tools/my_access \
-H "Authorization: Bearer $PIRATESKILLS_API_KEY" \
-H "content-type: application/json" \
-d '{}'
Needs sign-inChanges something – ask firstStart a purchase for the signed-in person and get back a Stripe checkout link, for an offer key from get_offers: the Pirate Pass or the Forge Pass, Captain on Deck sessions while they are on sale, or a Pirate Forge tier while one is still listed. `quantity` (1–10, default 1) is only for Captain on Deck sessions (`captain_on_deck_session`): one checkout buys that many sessions, one diamond each; any other offer with a quantity is refused. `currency` (`eur` or `usd`) is what Stripe charges in; leave it out and the checkout follows the caller's country when the request carries one – euros in Europe, dollars elsewhere – else euros. An offer without a dollar price is charged in euros either way. Event tickets are not sold here: send the person to the event page from list_events. Give the person the link; they pay on Stripe's page themselves. No agent ever charges a card, and nothing is charged until the person completes that page. The sale is credited to the agent that started it.
- offerKeystringrequired · 1–64 characters
- quantityintegeroptional · 1–10
- How many Captain on Deck sessions to buy, 1–10. Only for captain_on_deck_session; omit for every other offer.
- currency"eur" | "usd"optional
- The currency Stripe charges in. Omit to follow the caller's country (Europe: eur, elsewhere: usd), or eur when it is unknown.
curl -X POST https://pirateskills.com/api/public/agent/tools/create_checkout \
-H "Authorization: Bearer $PIRATESKILLS_API_KEY" \
-H "content-type: application/json" \
-d '{ "offerKey": "<offerKey>" }'
The signed-in person's wallet: `gold.balance` and `diamonds` are counts; `emerald` is the pass they hold, in words ("Pirate Pass until 17 Oct 2026", "Forge Pass until …" or "no pass") – emerald is never a number, so never give it as one. Also how much of this month's gold drip is left and what they earned, the next refill date, when earned gold expires next (earned gold keeps twelve months, oldest first; `gold.expiresNext` is the amount and day within 60 days, or null), and the recent history. What gold is and buys, for the person: https://pirateskills.com/gold.
- limitintegeroptional, default 10 · 1–50
curl -X POST https://pirateskills.com/api/public/agent/tools/my_wallet \
-H "Authorization: Bearer $PIRATESKILLS_API_KEY" \
-H "content-type: application/json" \
-d '{}'
The signed-in person's referral link, the people who signed up through it (first name and initial), and what each brought: gold or a diamond already paid, rewards pending with their pay date, and rewards not paid with the reason. Referrals pay nothing on signup; they pay when someone brought shows up to their first event, buys, or joins the Forge, after a wait and not at all if the purchase is refunded in that time. What each outcome pays right now and the wait in days are in `terms`, read from the live rules; `terms.on` false means rewards are paused.
No inputs.
curl -X POST https://pirateskills.com/api/public/agent/tools/my_referrals \
-H "Authorization: Bearer $PIRATESKILLS_API_KEY" \
-H "content-type: application/json" \
-d '{}'
The signed-in person's name and email as Pirate Skills knows them.
No inputs.
curl -X POST https://pirateskills.com/api/public/agent/tools/my_profile \
-H "Authorization: Bearer $PIRATESKILLS_API_KEY" \
-H "content-type: application/json" \
-d '{}'
The Pirate Forge live sessions the signed-in person can still join: each upcoming quarter's Build phase (weeks 1–6) and Grow phase (weeks 7–12), sessions left, and whether they are in. Empty with hasAccess false when they hold no active Forge access.
No inputs.
curl -X POST https://pirateskills.com/api/public/agent/tools/my_forge_sessions \
-H "Authorization: Bearer $PIRATESKILLS_API_KEY" \
-H "content-type: application/json" \
-d '{}'
Needs sign-inChanges something – ask firstJoin the signed-in person to Pirate Forge live sessions: a whole cohort from now on (phase "all") or one phase ("build" or "grow"), by quarter key from my_forge_sessions. Only sessions still ahead are added; needs active Forge access. The answer says whether the calendar invite went out or Ben adds it by hand.
- quarterKeystringrequired
- The quarter, e.g. "2026_q4" (from my_forge_sessions).
- phase"build" | "grow" | "all"required
- "build" (weeks 1–6), "grow" (weeks 7–12), or "all" for the whole cohort from now on.
curl -X POST https://pirateskills.com/api/public/agent/tools/join_forge_cohort \
-H "Authorization: Bearer $PIRATESKILLS_API_KEY" \
-H "content-type: application/json" \
-d '{ "quarterKey": "<quarterKey>", "phase": "build" }'
The signed-in person's hours with Ben: how many diamonds they hold (one diamond = one hour, one to one), their bookings with status (held, confirmed, cancelled) and join link, and the open hours in the next three weeks they can book with book_hour_with_ben. Pass their time zone to get the open hours in it.
- timeZonestringoptional · at most 64 characters
- The person's time zone, e.g. "Europe/Berlin".
- limitintegeroptional, default 20 · 1–40
- How many open hours to list.
curl -X POST https://pirateskills.com/api/public/agent/tools/my_bookings \
-H "Authorization: Bearer $PIRATESKILLS_API_KEY" \
-H "content-type: application/json" \
-d '{}'
Needs sign-inChanges something – ask firstSpend one of the signed-in person's diamonds on a one-to-one hour with Ben, at an open hour from my_bookings (pass its start exactly as listed). The diamond is held at once and spent when Ben's calendar confirms, usually within a minute; if the hour is not booked it comes back. The person can cancel on the booking page before the hour starts and get the diamond back.
- startstring (date-time)required
- The start of an open hour exactly as my_bookings lists it, e.g. "2026-09-17T13:30:00.000+02:00".
- timeZonestringoptional · at most 64 characters
- The person's time zone, e.g. "Europe/Berlin". Defaults to Berlin.
- topicstringoptional · at most 500 characters
- What the person wants to work on in the hour, in a sentence or two.
curl -X POST https://pirateskills.com/api/public/agent/tools/book_hour_with_ben \
-H "Authorization: Bearer $PIRATESKILLS_API_KEY" \
-H "content-type: application/json" \
-d '{ "start": "<start>" }'