What each channel accepts
platforms is validated against this table before anything is sent. Asking a blog for a video, or YouTube for a text post, returns 400 invalid_request naming the offending channel — it does not half-publish and then fail.
Use the
platform value exactly as written — x (not twitter), google_business (with an underscore), devto (no dot).Two ways to connect
OAuth channels
Most channels connect by signing in on the connect page: you send the customer a link, they authorise MADIAD Hub on the platform’s own screen, and nothing sensitive passes through you. See Profiles for the connect-link flow.Manual-credential channels
Slack, Mastodon, Nostr, Lemmy, dev.to, Hashnode, WordPress, Whop, listmonk, Telegram and Discord have no OAuth consent screen. Instead, the customer supplies a credential — a webhook URL, an API key, or an application password — which is validated against the platform and stored encrypted. Link one withPOST /v1/connections/{platform}. Every request takes profile_id and an optional name, plus the platform’s own fields:
instance_url and site_url must be https:// URLs.
Every field is required except where marked optional — omit an optional field and the platform’s own default applies (Nostr falls back to a default relay list). Sending it as an empty string is not the same as omitting it.
WordPress needs an application password, not your login password. Create one under Users → Profile → Application Passwords. The same applies in spirit to Lemmy and listmonk, which do take an account password: give them an account that exists only for publishing.
Choosing an endpoint
The three publish endpoints map onto the columns above:POST /v1/posts/text— every channel with a ✅ in TextPOST /v1/posts/photos— every channel with a ✅ in PhotoPOST /v1/posts/video— every channel with a ✅ in Video
Analytics coverage
Analytics covers ten channels: TikTok, Instagram, YouTube, Facebook, LinkedIn, X, Threads, Pinterest, Reddit and Bluesky. Google Business Profile and every manual-credential channel report no follower, reach or engagement metrics — a Discord webhook or a mailing list has no follower graph to read. Leave them out of theplatforms list when requesting analytics.
