Two features in this release are aimed at teams that manage accounts on behalf of others: agencies, platforms with many customers, and companies running several brands. Apps (BYOK) lets you connect accounts through your own OAuth apps. Social groups keeps those accounts organised.
Both live under Integrations in the dashboard, each on its own tab.
Apps (BYOK): your app, your brand
When someone connects a social account, the platform shows a consent screen naming the app that is asking for access. By default, that is Relaycast's app. For many teams that is fine. For others, especially when your own customers are the ones connecting their accounts, you want that screen to show your name and logo.
With bring-your-own-key (BYOK) apps, you register a developer app with the platform yourself, then add its credentials to Relaycast. Accounts connected through it see your app on the consent screen, and every token exchange, token refresh and publish for those accounts runs with your app's credentials.
Everything else stays the same: the same API, the same request format, the same validation, scheduling, retries and notifications.
Supported platforms
BYOK apps are available for every OAuth platform: X, LinkedIn, Instagram, Facebook, Threads, TikTok, YouTube, Google Business Profile and Pinterest. Bluesky does not use OAuth (it connects with an app password), so there is nothing to bring.
Setting one up
- Create an app in the platform's developer portal and configure it for the products and permissions you need. The platform guides cover what each one requires.
- In Relaycast, open Integrations → Apps (BYOK) and add an app. Choose the platform, give it a name, paste the client ID and client secret, and optionally upload an icon so you can recognise it later.
- Copy the callback URL shown for that platform and register it as a redirect URI in your developer app.
- Connect accounts. When you add an integration for that platform, you can choose which app to connect through.
Client secrets are encrypted at rest and are never shown again after you save them. Only project owners and admins can add or delete apps.
Your own app is subject to the platform's review process. Some platforms restrict what an app can do until it has been approved, for example limiting posts to private visibility. Check the platform's requirements before you move production accounts over.
Things to know
- Accounts remember their app. Each account keeps a reference to the app it was connected through. In
GET /v1/accounts, theoauthAppIdfield shows it (nullmeans Relaycast's own app). - You can mix apps. Some accounts can use your app and others ours, even on the same platform. That makes it easy to migrate gradually.
- Deleting an app means the accounts connected through it need to be reconnected, because their tokens were issued to that app. The dashboard tells you how many accounts are affected before you confirm.
- Instagram's Facebook Login option always uses Relaycast's app. BYOK Instagram apps apply to the standard Instagram Login connection.
Social groups: organise accounts by client or brand
As the number of connected accounts grows, a flat list stops being useful. Social groups let you organise accounts, for example one group per client, brand or region.
On the Social groups tab you can create groups with a name and an optional description, rename them and delete them. Accounts without a group sit in Default.
You can put an account in a group in two ways:
- When connecting: the new integration dialog lets you choose the group the account goes into.
- Afterwards: move any account to a different group from the Integrations list.
Reconnecting an account keeps it in its current group.
Groups in the API
Every account returned by GET /v1/accounts includes its groupId, and GET /v1/accounts?groupId=<id> returns only the accounts in one group. Copy a group's ID from the dashboard, then post to all of a client's accounts in two requests:
const CLIENT_GROUP_ID = "your-group-id";
const res = await fetch(`${process.env.RELAYCAST_API_URL}/v1/accounts?groupId=${CLIENT_GROUP_ID}`, {
headers: { "x-access-key": process.env.RELAYCAST_API_KEY! },
});
const { data: accounts } = await res.json();
const targets = accounts
.filter((a) => a.status === "active")
.map((a) => ({ accountId: a.id }));
await fetch(`${process.env.RELAYCAST_API_URL}/v1/posts`, {
method: "POST",
headers: { "x-access-key": process.env.RELAYCAST_API_KEY!, "Content-Type": "application/json" },
body: JSON.stringify({ content: "New season, new menu.", targets, publishNow: true }),
});import os, requests
API = os.environ["RELAYCAST_API_URL"]
HEADERS = {"x-access-key": os.environ["RELAYCAST_API_KEY"]}
CLIENT_GROUP_ID = "your-group-id"
accounts = requests.get(f"{API}/v1/accounts", headers=HEADERS, params={"groupId": CLIENT_GROUP_ID}).json()["data"]
targets = [{"accountId": a["id"]} for a in accounts if a["status"] == "active"]
requests.post(f"{API}/v1/posts", headers=HEADERS, json={
"content": "New season, new menu.",
"targets": targets,
"publishNow": True,
})Keep in mind that a single post can target up to 20 accounts. For larger groups, split the targets across several requests.
Using them together
The two features combine well for agencies. A typical setup:
- One BYOK app per platform, so every client sees your agency's name on the consent screen.
- One social group per client, chosen at connection time.
- Notification rules scoped to each client's accounts under Settings → Notifications, so the right people hear about failures.
Available now
Apps (BYOK) and social groups are available in every project. Read more in the docs:
Ready to build?
Get an access key and publish your first post in minutes.