API Reference
Base URL: https://api.social2llm.com
Authentication
Monitor endpoints (/v2/monitors) use the X-API-Key header with a key from your dashboard. Account endpoints (/me, /me/keys) use a Bearer JWT from Kinde — these are intended for the dashboard, not for API clients.
POST /v2/monitors
Start monitoring a social media page or account. Returns immediately; watching starts in the background.
Body
platform(string, required) — one of"facebook"or"x".page_url(string, required) — the public page or account URL to watch. For Facebook usehttps://www.facebook.com/<page>; for X (Twitter) usehttps://x.com/<handle>.callback_url(string, optional) — webhook target; each new post is POSTed here as it's found. Validated against SSRF; an unsafe URL is rejected with400.
Response (201) — example for Facebook
{"id":"mon_abc123","platform":"facebook","page_url":"https://www.facebook.com/<page>","status":"active","callback_url":null,"created_at":"..."}Response (201) — example for X
{"id":"mon_xyz789","platform":"x","page_url":"https://x.com/<handle>","status":"active","callback_url":null,"created_at":"..."}GET /v2/monitors/{id}
Fetch a monitor owned by the calling API key. Other tenants' ids return 404 (so existence isn't leaked).
Response (200) — example for Facebook
{"id":"mon_abc123","platform":"facebook","page_url":"https://www.facebook.com/<page>","status":"active","callback_url":"https://your-app.example/webhook","created_at":"..."}Response (200) — example for X
{"id":"mon_xyz789","platform":"x","page_url":"https://x.com/<handle>","status":"active","callback_url":"https://your-app.example/webhook","created_at":"..."}POST /v2/monitors/{id}/reactivate
Resume a stopped monitor. It picks back up watching the page for new posts.
{"id":"mon_abc123","status":"active"}DELETE /v2/monitors/{id}
Stop monitoring (soft-delete). Posts already delivered are unaffected.
Webhook payload
When a monitor has a callback_url, each new post is POSTed to it as it's found. The payload includes the event type, monitor ID, platform, and full post metadata for LLM processing.
Example: post.created event (Facebook)
{
"event": "post.created",
"monitor_id": "mon_abc123",
"platform": "facebook",
"post": {
"platform_post_id": "123456_789",
"permalink": "https://www.facebook.com/...",
"page": {
"page_id": "100064682681350",
"page_name": "RMF24.pl",
"page_url": "https://www.facebook.com/rmf24"
},
"text": "Post text content here...",
"media_type": "photo",
"thumbnail_url": "https://...",
"media": {
"image_url": "https://...",
"video_url": null,
"video_duration_seconds": null
},
"published_at": "2026-08-25T14:30:00Z",
"metrics": {
"reactions": 128,
"comments": 34,
"shares": 12,
"metrics_at": "2026-08-25T14:35:00Z"
},
"reaction_breakdown": {"like": 100, "love": 28},
"resolved_link": {
"url": "https://example.com/article",
"og_title": "Article title",
"og_description": "Article description",
"og_image": "https://example.com/image.jpg"
}
}
}Example: post.created event (X)
{
"event": "post.created",
"monitor_id": "mon_xyz789",
"platform": "x",
"post": {
"platform_post_id": "1234567890",
"permalink": "https://x.com/tvn24/status/1234567890",
"page": {
"page_id": "tvn24",
"page_name": "TVN24",
"page_url": "https://x.com/tvn24"
},
"text": "Tweet text content here...",
"media_type": "photo",
"thumbnail_url": "https://...",
"media": {
"image_url": "https://...",
"video_url": null,
"video_duration_seconds": null
},
"published_at": "2026-08-25T14:30:00Z",
"metrics": {
"reactions": 256,
"comments": 45,
"shares": 89,
"metrics_at": "2026-08-25T14:35:00Z"
},
"reaction_breakdown": {"like": 256, "quote": 12, "view": 15300},
"resolved_link": {
"url": "https://example.com/article",
"og_title": "Article title",
"og_description": "Article description",
"og_image": "https://example.com/image.jpg"
}
}
}GET /me
(Bearer JWT) Current user + list of active (non-revoked) API keys.
POST /me/keys
(Bearer JWT) Create a new API key. The raw key is shown once.
# Request
{"label":"Production"}
# Response (201) — raw key shown ONCE
{"id":"...","label":"Production","key_prefix":"soc_a1b2c3d4","key":"soc_...","created_at":"..."}DELETE /me/keys/{id}
(Bearer JWT) Soft-delete a key. Subsequent requests with that key return 401.
Errors
400— unsupported platform, or unsafe callback URL.401— missing/invalid/revoked key, or bad JWT.403— account pending approval (key creation blocked).404— unknown monitor, or one owned by another key.422— malformed request body.