Connect links
A connect link is an expiring URL into the hosted connect page for one workspace. You create it from your backend, redirect the user to it, and the accounts they pick appear in the workspace. It can be opened more than once until it expires, so a user who backs out of the consent screen can simply try again. You never touch the OAuth flow yourself.
Create a link
Section titled “Create a link”POST /v1/workspaces/:id/connect-links
| Field | Type | Default | Notes |
|---|---|---|---|
networks |
string[] |
["facebook", "instagram"] |
Which networks the page offers. Both share one Meta consent; Instagram accounts come in through the Page they are linked to. |
redirect_url |
string |
none | Where the Back to button returns the user. ?connected=<n> is appended with the number of accounts connected in this session. |
expires_in |
number |
3600 |
Seconds until the link stops working. Minimum 300, maximum 604800 (7 days). The link stays usable, more than once, until then. |
curl -X POST https://social.missless.tel/v1/workspaces/ws7k2m9p4q1r8t3/connect-links \ -H "Authorization: Bearer $MISSLESS_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "networks": ["facebook", "instagram"], "redirect_url": "https://app.example.com/settings/social", "expires_in": 3600 }'Response 201:
{ "token": "ct7f3a9c1e5b2d8f4a6c0e", "url": "https://social.missless.tel/connect/ct7f3a9c1e5b2d8f4a6c0e", "expires_at": "2026-08-25T10:12:04Z"}Redirect the user to url. Create the link when the user clicks Connect, not at page load, so it is fresh and belongs to the person in front of it. A link is tied to one workspace; never reuse one across customers.
What the user sees
Section titled “What the user sees”- The connect page. A page hosted at
social.missless.tel/connect/<token>with the workspace name and one button, Continue with Facebook. Accounts already connected to this workspace are listed underneath, each with a Disconnect action. - Meta’s consent. The user signs in to Facebook if needed, sees the permissions being asked for, and picks which Pages and Instagram accounts to grant. They can pick a subset.
- Back on the connect page. The chosen Pages and their linked Instagram accounts are now listed with avatar, name and a network badge. Each one is an account in the workspace and each fires
account.connected. - Back to you. If you gave a
redirect_url, a Back to button carrying your partner name takes them there with?connected=2appended. Without one, the page tells them they can close the tab.
The page works on mobile and shows nothing of yours except the partner name. Your API key never leaves your backend.
Reconnecting and adding more
Section titled “Reconnecting and adding more”Send the user through a new connect link at any time. Accounts already connected stay connected; newly granted ones are added. To recover an expired or revoked account, the user goes through a link again and grants the same Page. The account record is updated in place and keeps its id.
Knowing when it happened
Section titled “Knowing when it happened”Use both:
- Listen for
account.connectedon your webhook. The payload carries the account object and the workspace’sexternal_id. - When the user lands on
redirect_url, callGET /v1/workspaces/:id/accountsand refresh your UI.?connected=<n>tells you whether anything changed;0means they backed out.
Under the hood
Section titled “Under the hood”The hosted page talks to three token-authenticated endpoints that need no API key: GET /v1/connect/:token, GET /v1/connect/:token/meta/start (302 to Meta) and DELETE /v1/connect/:token/accounts/:accountId. Meta returns to GET /v1/oauth/meta/callback. They are rate limited per IP and listed here so you recognise them in logs. Do not build on them; use the API and the widget.
If you would rather show the account list inside your own UI, embed the widget’s accounts surface. It has the same Connect button. See the Widget overview.