curl --request POST \
--url https://api.bundle.social/api/v1/social-account/connect \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"teamId": "<string>",
"redirectUrl": "<string>",
"serverUrl": "<string>",
"disableAutoLogin": false,
"tiktokForceLogin": false,
"forceBrowserOAuth": false,
"withBusinessScope": false,
"withMessagingScope": false,
"reconnect": false
}
'import requests
url = "https://api.bundle.social/api/v1/social-account/connect"
payload = {
"teamId": "<string>",
"redirectUrl": "<string>",
"serverUrl": "<string>",
"disableAutoLogin": False,
"tiktokForceLogin": False,
"forceBrowserOAuth": False,
"withBusinessScope": False,
"withMessagingScope": False,
"reconnect": False
}
headers = {
"x-api-key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'x-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
teamId: '<string>',
redirectUrl: '<string>',
serverUrl: '<string>',
disableAutoLogin: false,
tiktokForceLogin: false,
forceBrowserOAuth: false,
withBusinessScope: false,
withMessagingScope: false,
reconnect: false
})
};
fetch('https://api.bundle.social/api/v1/social-account/connect', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.bundle.social/api/v1/social-account/connect",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'teamId' => '<string>',
'redirectUrl' => '<string>',
'serverUrl' => '<string>',
'disableAutoLogin' => false,
'tiktokForceLogin' => false,
'forceBrowserOAuth' => false,
'withBusinessScope' => false,
'withMessagingScope' => false,
'reconnect' => false
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.bundle.social/api/v1/social-account/connect"
payload := strings.NewReader("{\n \"teamId\": \"<string>\",\n \"redirectUrl\": \"<string>\",\n \"serverUrl\": \"<string>\",\n \"disableAutoLogin\": false,\n \"tiktokForceLogin\": false,\n \"forceBrowserOAuth\": false,\n \"withBusinessScope\": false,\n \"withMessagingScope\": false,\n \"reconnect\": false\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-api-key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.bundle.social/api/v1/social-account/connect")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"teamId\": \"<string>\",\n \"redirectUrl\": \"<string>\",\n \"serverUrl\": \"<string>\",\n \"disableAutoLogin\": false,\n \"tiktokForceLogin\": false,\n \"forceBrowserOAuth\": false,\n \"withBusinessScope\": false,\n \"withMessagingScope\": false,\n \"reconnect\": false\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.bundle.social/api/v1/social-account/connect")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-api-key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"teamId\": \"<string>\",\n \"redirectUrl\": \"<string>\",\n \"serverUrl\": \"<string>\",\n \"disableAutoLogin\": false,\n \"tiktokForceLogin\": false,\n \"forceBrowserOAuth\": false,\n \"withBusinessScope\": false,\n \"withMessagingScope\": false,\n \"reconnect\": false\n}"
response = http.request(request)
puts response.read_body{
"url": "<string>"
}{
"message": "<string>",
"statusCode": 123,
"issues": [
{
"message": "<string>",
"code": "invalid_type",
"path": [
"<string>"
]
}
]
}{
"message": "<string>",
"statusCode": 123
}{
"message": "<string>",
"statusCode": 123
}{
"message": "<string>",
"statusCode": 123
}{
"message": "<string>",
"statusCode": 123
}{
"message": "<string>",
"statusCode": 123
}{
"message": "<string>",
"statusCode": 123
}Connect social account for team
Generate OAuth URL for social account connection. Redirect user to this URL to connect social account. For Mastodon and Bluesky an unusable serverUrl returns 400 with the reason, while a reachable-but-failing instance returns 502.
curl --request POST \
--url https://api.bundle.social/api/v1/social-account/connect \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"teamId": "<string>",
"redirectUrl": "<string>",
"serverUrl": "<string>",
"disableAutoLogin": false,
"tiktokForceLogin": false,
"forceBrowserOAuth": false,
"withBusinessScope": false,
"withMessagingScope": false,
"reconnect": false
}
'import requests
url = "https://api.bundle.social/api/v1/social-account/connect"
payload = {
"teamId": "<string>",
"redirectUrl": "<string>",
"serverUrl": "<string>",
"disableAutoLogin": False,
"tiktokForceLogin": False,
"forceBrowserOAuth": False,
"withBusinessScope": False,
"withMessagingScope": False,
"reconnect": False
}
headers = {
"x-api-key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'x-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
teamId: '<string>',
redirectUrl: '<string>',
serverUrl: '<string>',
disableAutoLogin: false,
tiktokForceLogin: false,
forceBrowserOAuth: false,
withBusinessScope: false,
withMessagingScope: false,
reconnect: false
})
};
fetch('https://api.bundle.social/api/v1/social-account/connect', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.bundle.social/api/v1/social-account/connect",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'teamId' => '<string>',
'redirectUrl' => '<string>',
'serverUrl' => '<string>',
'disableAutoLogin' => false,
'tiktokForceLogin' => false,
'forceBrowserOAuth' => false,
'withBusinessScope' => false,
'withMessagingScope' => false,
'reconnect' => false
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.bundle.social/api/v1/social-account/connect"
payload := strings.NewReader("{\n \"teamId\": \"<string>\",\n \"redirectUrl\": \"<string>\",\n \"serverUrl\": \"<string>\",\n \"disableAutoLogin\": false,\n \"tiktokForceLogin\": false,\n \"forceBrowserOAuth\": false,\n \"withBusinessScope\": false,\n \"withMessagingScope\": false,\n \"reconnect\": false\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-api-key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.bundle.social/api/v1/social-account/connect")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"teamId\": \"<string>\",\n \"redirectUrl\": \"<string>\",\n \"serverUrl\": \"<string>\",\n \"disableAutoLogin\": false,\n \"tiktokForceLogin\": false,\n \"forceBrowserOAuth\": false,\n \"withBusinessScope\": false,\n \"withMessagingScope\": false,\n \"reconnect\": false\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.bundle.social/api/v1/social-account/connect")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-api-key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"teamId\": \"<string>\",\n \"redirectUrl\": \"<string>\",\n \"serverUrl\": \"<string>\",\n \"disableAutoLogin\": false,\n \"tiktokForceLogin\": false,\n \"forceBrowserOAuth\": false,\n \"withBusinessScope\": false,\n \"withMessagingScope\": false,\n \"reconnect\": false\n}"
response = http.request(request)
puts response.read_body{
"url": "<string>"
}{
"message": "<string>",
"statusCode": 123,
"issues": [
{
"message": "<string>",
"code": "invalid_type",
"path": [
"<string>"
]
}
]
}{
"message": "<string>",
"statusCode": 123
}{
"message": "<string>",
"statusCode": 123
}{
"message": "<string>",
"statusCode": 123
}{
"message": "<string>",
"statusCode": 123
}{
"message": "<string>",
"statusCode": 123
}{
"message": "<string>",
"statusCode": 123
}Authorizations
Body
Body
TIKTOK, YOUTUBE, INSTAGRAM, FACEBOOK, TWITTER, THREADS, LINKEDIN, PINTEREST, REDDIT, MASTODON, DISCORD, SLACK, BLUESKY, GOOGLE_BUSINESS, SNAPCHAT Client-provided return URL. After the OAuth flow completes (success or error), the user will be redirected here with success/error query params appended. Must be a well-formed http/https URL.
Mastodon or Bluesky only. Required for Mastodon (the user's instance, e.g. https://mastodon.social). Optional for Bluesky - omit it to use the default issuer https://bsky.social, or pass a custom PDS/entryway issuer.
Optional. When true, adds provider-specific flags to avoid automatic login/auto-approval where supported.
Optional and experimental. TikTok only. When true, routes authorization through TikTok logout to request a fresh login session.
Optional. Instagram direct OAuth only. When true, Instagram asks for a fresh login instead of reusing the account logged in on that browser. In the hosted portal it applies only on iPhone/iPad. Staying in the browser on iOS is the default for every connection and needs no flag.
Instagram only - connection method
FACEBOOK, INSTAGRAM Facebook and Instagram: include business_management, ads_management, ads_read scopes. YouTube: include the monetary analytics scope (enables revenue/monetization data).
Facebook and Instagram: include the Meta messaging (DM) scopes. Ignored unless messaging is enabled for your organization.
Re-authorize the account already connected to this team in place: tokens and permissions are refreshed while the account, its posts and scheduled destinations stay. The user must log in with the same account. Currently supported for Instagram connected with instagramConnectionMethod INSTAGRAM.
Response
200
OAuth URL - Redirect user to this URL to connect social account
Was this page helpful?