PALICE.AITUBE · API · gate

PUBLISHING ON PALICE

Substack has no API. We ARE one. This platform exists for writing done openly with AI — so of course you can publish straight from the AI session where the writing happened.

0 · Get invited

Palice is invite-only, and that's the product: every author is a verified human, and a human reads every story before it goes live. No invite = no account. Know someone here? Ask them.

1 · Register (once)

curl -X POST https://palice.ai/api/v1/register \
  -H 'Content-Type: application/json' \
  -d '{"invite_code":"YOUR-INVITE","handle":"yourname",
       "display_name":"Your Name","bio":"one line about you"}'

The response contains your api_token — shown exactly once. Save it.

2 · Publish

curl -X POST https://palice.ai/api/v1/stories \
  -H 'Authorization: Bearer plc_YOURTOKEN' \
  -H 'Content-Type: application/json' \
  -d '{
    "title": "The Night the Modem Sang",
    "subtitle": "a true memory, written with a machine",
    "markdown": "It started with a screech...\n\nSecond paragraph...",
    "matrix": {"ai": "Claude (Anthropic)", "human_pct": 70,
               "kind": "true memory / essay",
               "note": "The memory and voice are mine; the machine tightened it."}
  }'

The matrix is mandatory. Declaring which AI helped and how much isn't a confession here — it's the point. It gets printed on your piece.

Your story lands in the review queue. A human reads it. If it's a real human story that used AI honestly, it publishes at palice.ai/@yourhandle/your-slug. Slop bounces.

3 · Manage

GET    /api/v1/me              # who am I
GET    /api/v1/stories         # your stories + status (pending/published/rejected)
GET    /api/v1/stories/{id}    # one story, full markdown + matrix
PUT    /api/v1/stories/{id}    # edit — goes back through review before republishing
DELETE /api/v1/stories/{id}    # unpublish

4 · TUBE — video

Same soul, moving pictures: palice.ai/tube is human-verified video. No algorithm, newest first, and every video wears its matrix. Publishing is two steps — declare, then upload:

# step 1: metadata + matrix (mandatory, same as stories)
curl -X POST https://palice.ai/api/v1/videos \
  -H 'Authorization: Bearer plc_YOURTOKEN' \
  -H 'Content-Type: application/json' \
  -d '{
    "title": "The Outlet, on camera",
    "description": "Where this was filmed and why.\n\nSecond paragraph...",
    "matrix": {"ai": "none (edit: Claude picked the cut points)", "human_pct": 95,
               "kind": "filmed by a human",
               "note": "Real lens, real place. AI never generated a frame."}
  }'
# -> returns {"id": N}

# step 2: the file itself (mp4 or webm, max 500MB)
curl -X PUT https://palice.ai/api/v1/videos/N/file \
  -H 'Authorization: Bearer plc_YOURTOKEN' \
  --data-binary @yourvideo.mp4

It lands in the review queue — a human watches every video before it goes live. Then it plays at palice.ai/tube/@yourhandle/your-slug.

GET    /api/v1/videos          # your videos + status
GET    /api/v1/videos/{id}     # one video, full metadata + matrix
PUT    /api/v1/videos/{id}     # edit metadata — republish goes back through review
DELETE /api/v1/videos/{id}     # unpublish (file goes back behind the gate)

Publishing from your AI session

Writing your memory with Claude/Kimi/Grok in a terminal? Paste this into your project notes (e.g. CLAUDE.md) and your AI can publish for you:

## Publishing to Palice
When I say "publish to palice": POST the story to
https://palice.ai/api/v1/stories with my token from ~/.palice-token.
Fill the transparency matrix HONESTLY — name yourself as the AI and
estimate the real human/AI ratio of this piece. Never inflate my share.

That last line is the house style: the machine fills in the disclosure about itself. Radical transparency, automated.