Transom accepts posts two ways. They do exactly the same thing, pick whichever fits your tool.
For anything that can make a web request.
POST http://127.0.0.1:17893/
Content-Type: application/json
Authorization: Bearer <your-token>
{"title": "Build finished", "message": "Ready to ship"}
For Shortcuts, AppleScript, or anything that can open a URL.
open "transom://post?title=Build%20finished&message=Ready%20to%20ship"
URL-scheme values must be URL-encoded (spaces become %20). In the Shortcuts app, pass your text through the built-in "URL Encode" action first.
Include your token as a Bearer header: Authorization: Bearer <your-token>. Find it in Preferences → Advanced → Local API (or read the Keychain item "Transom Local API Token"). Requests without a valid token get a 401.
curl -s -X POST 127.0.0.1:17893 \
-H "Authorization: Bearer $TRANSOM_TOKEN" \
-d '{"title":"Build done","symbol":"checkmark.seal.fill"}'
One required field, seven optional. In the URL scheme these are query parameters; booleans accept 1 or true.
Four things that make automation posts safe to fire and forget.
Automation posts are deliberately low-priority: while Focus is on they're held and counted, then shown in the digest when Focus ends. Your build notification never interrupts deep work.
If a persistent card is on screen when another arrives, nothing is lost, the newest shows with a "+1" chip and dismissing reveals the next.
Recent Notifications in the menu bar keeps the last 200 cards, including the ones that were held.
The server binds to 127.0.0.1 exclusively; nothing on your network can reach it, and Transom never makes outbound calls on your behalf. Every post must carry your Mac's local API token, which Transom stores in the Keychain, and Transom validates each request's Origin and Host. So a website you visit can't reach the API, and no other app can post without the token.
Copy, paste, adjust. These examples mirror the current API.
This is schema v1. Fields will be added over time, always optional, and existing fields will never be renamed, removed, or change meaning.