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.
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.
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.
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.
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
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)
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.