A brief goes in. A finished post, page, or deck comes out.
Send a paragraph describing what you want, point it at your own source material,
and the Jetski Bay pipeline researches, writes, designs and publishes it. It is the
same pipeline our own team uses every day — the only difference is that you drive it
with an API key instead of a browser.
import os, time, requests
BASE = "https://content.jetskibay.com"
HEAD = {"x-api-key": os.environ["JETSKI_KEY"]}
started = requests.post(
f"{BASE}/v1/posts",
headers=HEAD,
json={
"brief": "How we cut cold-start latency on the fleet",
"research": {"webSearch": True},
"options": {"targetWords": 900, "tone": "direct"},
},
).json()
job = started
while job["status"] in ("queued", "running"):
time.sleep(job.get("pollAfterMs", 4000) / 1000)
job = requests.get(started["statusUrl"], headers=HEAD).json()
print(job["status"], job.get("result", {}).get("liveUrl"))
variant is the path, not a field: /v1/posts, /v1/pages,
/v1/decks. Everything else is the same body — and a
variant in the body that contradicts the path is refused, not
quietly overridden.
Three variants
One contract, three shapes of finished work.
The request body is identical across all three. What changes is the path you post to,
which options are meaningful, and where the finished thing ends up.
Blog post blog
A researched, edited article in Jetski Bay's voice, published to the blog with a
slug, a hero treatment and any figures the pipeline decided it needed.
Endpoint
POST /v1/posts
Modes
create · rewrite
Ends up at
blog.jetskibay.com/posts/<slug>
Options that matter
targetWords · tone · audience · goal
One-pager page
A single shareable web page — the thing you send someone instead of a slide.
Post mode: "update" with the entityId of a page you
already made and that same page is revised in place rather than a second one
being created.
Endpoint
POST /v1/pages
Modes
create · update
Ends up at
page.jetskibay.com/p/<id>
Options that matter
audience · goal · density
Deck deck
A presentation, laid out slide by slide, optionally with speaker notes. Decks sit
behind a passphrase gate, so there is no public link — you pull the artifact down
over the API instead.
Endpoint
POST /v1/decks
Modes
create · rewrite
Ends up at
GET /v1/decks/<id>/download
Options that matter
targetSlides · aspectRatio · speakerNotes
A deck has no liveUrl, and we will not pretend otherwise. Blogs and pages
resolve to a public address the moment they finish; a deck is only ever a download.
Modes differ too — a page updates, a post or a deck rewrites — and
GET /v1/variants publishes the list each one accepts.
The docs say exactly what each variant returns.
The shape of a call
Everything is a job. Nothing blocks.
Generation takes minutes, not milliseconds, so there is no synchronous endpoint to
misuse. Every create returns a job immediately and you poll it — for free, as often
as the response tells you to.
STEP 01
Post the brief
You get 202 back with a requestId, a statusUrl and a pollAfterMs. Your quota is charged here, at the start.
STEP 02
Poll the job
GET /v1/jobs/:id reports queued, then running with the phase it is in. Polling never costs a request.
STEP 03
Read the result
A terminal succeeded carries the finished artifact: a live URL for a blog or page, a download route for a deck.
STEP 04
Or handle the failure
failed carries a plain-language reason. If the platform itself broke, the request is put back on your allowance.
10requests on a trial key
24hbefore a trial key expires
3variants: blog, page, deck
0cost to poll a running job
A request is charged when work starts, never when it finishes, and is refunded only
when we 5xx. A malformed body of your own still costs one — validate before you send.
Get started
Have a key mailed to you.
Enter an address and we send a key good for 10
requests over 24 hours. We store a hash of it, never the key itself, so the email is
the only place it exists — and the link in that email opens the playground with the
key already filled in.
Asking again carries whatever is left of your allowance onto the new key and revokes
the old one — and revoking first changes nothing, because the allowance belongs to the
address for 24 hours rather than to any one key. Losing a key costs you nothing; asking
for a second one buys you nothing. Everything a key makes belongs to the address too,
so re-minting never orphans work you already started.