Jetski Bay Content API

Content generation · public API

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.

Free trial key: 10 requests, 24 hours, no card. Or open the playground and watch one run on the wire.

# 1 — start a blog post
curl -X POST https://content.jetskibay.com/v1/posts \
  -H "x-api-key: $JETSKI_KEY" \
  -H "content-type: application/json" \
  -d '{
        "brief": "How we cut cold-start latency on the fleet",
        "research": { "webSearch": true },
        "options": { "targetWords": 900, "tone": "direct" }
      }'

# ← 202 { "requestId": "9c2f…", "status": "queued",
#        "statusUrl": "…/v1/jobs/9c2f…", "pollAfterMs": 4000 }

# 2 — poll until it reaches a terminal state. Polling is free.
curl https://content.jetskibay.com/v1/jobs/9c2f… \
  -H "x-api-key: $JETSKI_KEY"

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.