Now in beta with our first partners
One API for Facebook & Instagram. Zero Meta paperwork.
Give your users publishing, scheduling, a unified inbox and insights, right inside your product. It all runs under one Meta app that MissLess owns, so your company never registers with Meta at all.
- Base URL
- social.missless.tel/v1
- Auth
- Bearer mls_live_…
- Data
- EU, Netherlands
Example: a POST to /v1/posts with a caption, one media item, two target accounts and a schedule_at returns status scheduled. At the scheduled time the post is published to Instagram and Facebook and a post.published webhook is delivered to your server.
Built by MissLess, the AI phone receptionist trusted by Dutch SMBs
- Facebook Pages
- Messenger
- Comments
- Insights
- Webhooks
- MCP
How it works
Three calls from zero to a scheduled post
Your backend talks to /v1 with a partner key. Your users never see Meta beyond a single consent screen.
- 1
Create a workspace
One per user of your product. Idempotent on external_id, so you can simply call it on every login.
POST /v1/workspaces{ "external_id": "user_8213", "name": "Downtown Phlebotomy", "timezone": "America/New_York" } → 201 { "id": "ws_4k2…", "status": "active" } - 2
Send your user to the hosted connect page
Mint a connect link and redirect. They click Continue with Facebook, pick their Pages and Instagram accounts, and land back in your product.
POST /v1/workspaces/:id/connect-links{ "networks": ["facebook", "instagram"], "redirect_url": "https://app.yourproduct.com/social" } → 201 { "url": "https://social.missless.tel/connect/…" } send the user there; account.connected fires for every Page they pick - 3
Publish, schedule, reply
Through the API, the embeddable widget, or an AI assistant over MCP. Results and inbox traffic come back as signed webhooks.
POST /v1/posts{ "workspace": "ws_4k2…", "caption": "Walk-in draws, Fri 8-12", "media": ["med_9ab…"], "targets": ["acc_ig…", "acc_fb…"], "schedule_at": "2026-09-04T09:00:00Z" } → 201 { "status": "scheduled" } post.published arrives by webhook
Everything in the box
The whole social stack, one contract
Built in-house on the Meta Graph API. Other networks are added behind the same endpoints later, so nothing you write today changes.
Publishing
Single image, carousel, Reels, and text or link posts. Facebook Pages and Instagram in one call, with a caption override per network when you need it.
Scheduling
Queue posts with schedule_at. Clear statuses: draft, scheduled, publishing, published, partial, failed. Retries, and one honest error per target.
Unified inbox
Messenger DMs, Instagram DMs and comments become conversations. Reply, private-reply to a comment, close. The 24-hour DM window is tracked for you.
Insights
Followers, follows and media counts per account, plus permalinks and per-target results the moment Meta reports them.
Hosted connect
One Meta app, one consent screen. Tokens are encrypted at rest, exchanged for long-lived ones and refreshed; an expiry fires an event instead of a silent failure.
Webhooks
post.published, message.received, account.expired and more. HMAC-SHA256 signed and timestamped, retried up to 6 times over 15 hours. Or poll /v1/events.
Embeddable widget
Composer, calendar, inbox and accounts as a drop-in iframe. Your accent and radius, English or Dutch, resizes itself and posts events to your page.
MCP server
Claude, Cursor or any MCP client can list accounts, upload media, create and publish posts and answer conversations with a workspace key.
Code
Schedule a post in one request
Plain JSON over HTTPS. The same call from curl, Node, Python or your Next.js integration.
- Base URL
- social.missless.tel/v1
- Auth
- Authorization: Bearer mls_live_…
- Limits
- 300 requests / min per key
- Errors
- { error: { code, message, field } }
- Sync option
- ?wait=true blocks up to 25 s
curl https://social.missless.tel/v1/posts \
-H "Authorization: Bearer mls_live_…" \
-H "Content-Type: application/json" \
-d '{
"workspace": "WORKSPACE_ID",
"caption": "Walk-in blood draws this Friday, 8 to 12",
"media": ["MEDIA_ID"],
"targets": ["IG_ACCOUNT_ID", "FB_ACCOUNT_ID"],
"schedule_at": "2026-09-04T09:00:00Z"
}'
# 201 { "id": "…", "status": "scheduled", "targets": [ … ] }const res = await fetch('https://social.missless.tel/v1/posts', {
method: 'POST',
headers: {
Authorization: 'Bearer mls_live_…',
'Content-Type': 'application/json',
},
body: JSON.stringify({
workspace: 'WORKSPACE_ID',
caption: 'Walk-in blood draws this Friday, 8 to 12',
media: ['MEDIA_ID'],
targets: ['IG_ACCOUNT_ID', 'FB_ACCOUNT_ID'],
schedule_at: '2026-09-04T09:00:00Z',
}),
});
const post = await res.json();
console.log(post.status); // "scheduled"import requests
r = requests.post(
"https://social.missless.tel/v1/posts",
headers={"Authorization": "Bearer mls_live_…"},
json={
"workspace": "WORKSPACE_ID",
"caption": "Walk-in blood draws this Friday, 8 to 12",
"media": ["MEDIA_ID"],
"targets": ["IG_ACCOUNT_ID", "FB_ACCOUNT_ID"],
"schedule_at": "2026-09-04T09:00:00Z",
},
)
r.raise_for_status()
post = r.json()
print(post["status"]) # "scheduled"// Server-only. The partner key never reaches the browser.
const BASE = 'https://social.missless.tel/v1';
const headers = {
Authorization: 'Bearer ' + process.env.MISSLESS_SOCIAL_KEY,
'Content-Type': 'application/json',
};
const call = (path: string, body: unknown) =>
fetch(BASE + path, { method: 'POST', headers, body: JSON.stringify(body) })
.then((r) => r.json());
export class MissLessPublisher {
// One workspace per user of your product; idempotent on external_id.
workspaceFor = (user: { id: string; name: string }) =>
call('/workspaces', { external_id: user.id, name: user.name });
// Send the user to the returned url; they click "Continue with Facebook".
connectLink = (workspace: string, redirect_url: string) =>
call('/workspaces/' + workspace + '/connect-links', { redirect_url });
// Returns { id, status: 'scheduled', ... }; post.published arrives by webhook.
schedule = (post: { workspace: string; caption: string; media: string[]; targets: string[]; schedule_at: string; external_ref?: string }) =>
call('/posts', post);
}Embeddable widget
Or drop in the UI we already built
Composer, calendar, inbox and accounts as an iframe that takes on your colours. Mint a session server-side, paste two lines.
Walk-in blood draws this Friday, 8 to 12. No appointment needed, bring your lab order and a photo ID.
<div data-missless-social
data-session="mle_…"
data-surface="composer"></div>
<script src="https://social.missless.tel/widget.js" async></script>// Server-side: mint a short-lived session with your partner key.
const { token } = await fetch('https://social.missless.tel/v1/embed-sessions', {
method: 'POST',
headers: { Authorization: 'Bearer mls_live_…', 'Content-Type': 'application/json' },
body: JSON.stringify({
workspace: 'WORKSPACE_ID',
surfaces: ['composer', 'calendar', 'inbox', 'accounts'],
theme: { mode: 'dark', accent: '#6d5efc', radius: '12px' },
locale: 'en',
}),
}).then((r) => r.json());
// token starts with "mle_" and goes into data-session- data-surface="composer"write, attach media, pick accounts, schedule
- data-surface="calendar"the queue by week, drag to reschedule
- data-surface="inbox"DMs and comments, reply in place
- data-surface="accounts"connect, reconnect, disconnect
The iframe posts ready, resize, post.created, account.connected and conversation.replied messages to your page. widget.js keeps the height in sync for you.
MCP server
Let your users' AI assistant run their social
Claude, Cursor or any MCP client connects with a workspace key and gets the same capabilities as the API: accounts, media, posts and conversations.
- “Schedule this photo to Instagram and Facebook for Friday at 9 with the caption: Walk-in blood draws, 8 to 12.”
- “Any unanswered DMs or comments since yesterday? Draft replies and send the ones that ask about opening hours.”
- “How many followers did each account gain this month, and which three posts did best?”
claude mcp add --transport http missless-social https://social.missless.tel/v1/mcp \
--header "Authorization: Bearer mls_live_…"Tools
- whoami
- list_accounts
- get_account_stats
- create_connect_link
- upload_media_from_url
- create_post
- list_posts
- get_post
- publish_post
- delete_post
- list_conversations
- get_conversation
- reply_conversation
Streamable HTTP, JSON-RPC 2.0. A partner key works too with an X-MissLess-Workspace header. Every action an assistant takes is recorded with sent_by: "mcp", so your audit trail stays honest.
Why one Meta app
What you skip by building on ours
Meta calls it the tech-provider model: one verified app acting for many businesses, each of which only grants consent. It is how every scheduling tool you have heard of works. We did the registration, review and verification once; you inherit it.
Doing it yourself
- Register a Meta developer app and add the Facebook Login and Webhooks products
- Pass App Review for every permission you need (publishing, messaging, comments, insights), screencasts included
- Complete Business Verification for your company and keep it current
- Host and maintain webhook, deauthorize and data-deletion endpoints
- Exchange short-lived tokens for long-lived ones, refresh them, and handle revocation and expiry
- Track Graph API versions, rate limits and the 24-hour messaging rule
With MissLess Social
- Your users click Continue with Facebook on our hosted connect page
- Accounts, tokens, webhooks and refresh are handled inside MissLess
- You call one REST API, or drop in the widget, or let your AI use MCP
Your users see a consent screen from MissLess today. A white-label name for your product is on the roadmap for Scale partners.
Pricing
Simple while we are in beta
Pay for the customers who actually use it. Nothing is billed until we have confirmed your plan in writing.
Beta pricing, indicative
Pilot
Free
while in beta
For a proof of concept with your first customers.
- Up to 5 workspaces
- All features: publishing, inbox, insights
- Hosted connect, widget and MCP
- Webhooks
- Email support
Growth
from €4
per active workspace / month
For products rolling social out to their whole customer base.
- Unlimited workspaces
- Everything in Pilot
- 300 requests per minute per key
- Priority support in a shared channel
- Data processing agreement
Scale
Custom
volume pricing
For platforms that need commitments in writing.
- Everything in Growth
- SLA with uptime and response targets
- Dedicated onboarding
- White-label consent screen name (later)
- Invoicing on your terms
An active workspace has at least one connected account during the month. Prices exclude VAT. Usage is metered from day one; invoicing is manual during the beta.
FAQ
Questions partners ask first
Give your users social publishing this month
A partner key, a sandbox workspace and a walkthrough of your first connect and post. Most partners are live within a week.