curl --request POST \
--url https://api.social-api.ai/v1/accounts/connect \
--header 'Authorization: <api-key>' \
--header 'Content-Type: application/json' \
--data '
{
"brand_id": "b_01HZ9X3Q4R5M6N7P8V2K0W1J",
"metadata": {},
"platform": "instagram",
"redirect_uri": "https://app.acme.com/oauth/done",
"state": "session_abc123"
}
'import requests
url = "https://api.social-api.ai/v1/accounts/connect"
payload = {
"brand_id": "b_01HZ9X3Q4R5M6N7P8V2K0W1J",
"metadata": {},
"platform": "instagram",
"redirect_uri": "https://app.acme.com/oauth/done",
"state": "session_abc123"
}
headers = {
"Authorization": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
brand_id: 'b_01HZ9X3Q4R5M6N7P8V2K0W1J',
metadata: {},
platform: 'instagram',
redirect_uri: 'https://app.acme.com/oauth/done',
state: 'session_abc123'
})
};
fetch('https://api.social-api.ai/v1/accounts/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.social-api.ai/v1/accounts/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([
'brand_id' => 'b_01HZ9X3Q4R5M6N7P8V2K0W1J',
'metadata' => [
],
'platform' => 'instagram',
'redirect_uri' => 'https://app.acme.com/oauth/done',
'state' => 'session_abc123'
]),
CURLOPT_HTTPHEADER => [
"Authorization: <api-key>",
"Content-Type: application/json"
],
]);
$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.social-api.ai/v1/accounts/connect"
payload := strings.NewReader("{\n \"brand_id\": \"b_01HZ9X3Q4R5M6N7P8V2K0W1J\",\n \"metadata\": {},\n \"platform\": \"instagram\",\n \"redirect_uri\": \"https://app.acme.com/oauth/done\",\n \"state\": \"session_abc123\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "<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.social-api.ai/v1/accounts/connect")
.header("Authorization", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"brand_id\": \"b_01HZ9X3Q4R5M6N7P8V2K0W1J\",\n \"metadata\": {},\n \"platform\": \"instagram\",\n \"redirect_uri\": \"https://app.acme.com/oauth/done\",\n \"state\": \"session_abc123\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.social-api.ai/v1/accounts/connect")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"brand_id\": \"b_01HZ9X3Q4R5M6N7P8V2K0W1J\",\n \"metadata\": {},\n \"platform\": \"instagram\",\n \"redirect_uri\": \"https://app.acme.com/oauth/done\",\n \"state\": \"session_abc123\"\n}"
response = http.request(request)
puts response.read_body{
"account_id": "acc_01HZ9X3Q4R5M6N7P8V2K0W1J",
"display_name": "Acme Corp",
"platform": "instagram",
"username": "acmecorp"
}{
"auth_url": "https://www.instagram.com/oauth/authorize/?...",
"message": "Redirect the user to auth_url",
"metadata": {},
"state": "4a8f2c1e9b3d7f06a5c2e8b4d1f3a7e2"
}{
"error": {
"code": "resource.not_found",
"message": "Account not found",
"meta": {}
}
}{
"error": {
"code": "resource.not_found",
"message": "Account not found",
"meta": {}
}
}{
"error": {
"code": "resource.not_found",
"message": "Account not found",
"meta": {}
}
}Connect a social account
Initiates account connection. For OAuth2 platforms returns an auth_url to redirect the user to. For apikey/credentials platforms stores the credentials immediately and returns account_id.
curl --request POST \
--url https://api.social-api.ai/v1/accounts/connect \
--header 'Authorization: <api-key>' \
--header 'Content-Type: application/json' \
--data '
{
"brand_id": "b_01HZ9X3Q4R5M6N7P8V2K0W1J",
"metadata": {},
"platform": "instagram",
"redirect_uri": "https://app.acme.com/oauth/done",
"state": "session_abc123"
}
'import requests
url = "https://api.social-api.ai/v1/accounts/connect"
payload = {
"brand_id": "b_01HZ9X3Q4R5M6N7P8V2K0W1J",
"metadata": {},
"platform": "instagram",
"redirect_uri": "https://app.acme.com/oauth/done",
"state": "session_abc123"
}
headers = {
"Authorization": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
brand_id: 'b_01HZ9X3Q4R5M6N7P8V2K0W1J',
metadata: {},
platform: 'instagram',
redirect_uri: 'https://app.acme.com/oauth/done',
state: 'session_abc123'
})
};
fetch('https://api.social-api.ai/v1/accounts/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.social-api.ai/v1/accounts/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([
'brand_id' => 'b_01HZ9X3Q4R5M6N7P8V2K0W1J',
'metadata' => [
],
'platform' => 'instagram',
'redirect_uri' => 'https://app.acme.com/oauth/done',
'state' => 'session_abc123'
]),
CURLOPT_HTTPHEADER => [
"Authorization: <api-key>",
"Content-Type: application/json"
],
]);
$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.social-api.ai/v1/accounts/connect"
payload := strings.NewReader("{\n \"brand_id\": \"b_01HZ9X3Q4R5M6N7P8V2K0W1J\",\n \"metadata\": {},\n \"platform\": \"instagram\",\n \"redirect_uri\": \"https://app.acme.com/oauth/done\",\n \"state\": \"session_abc123\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "<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.social-api.ai/v1/accounts/connect")
.header("Authorization", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"brand_id\": \"b_01HZ9X3Q4R5M6N7P8V2K0W1J\",\n \"metadata\": {},\n \"platform\": \"instagram\",\n \"redirect_uri\": \"https://app.acme.com/oauth/done\",\n \"state\": \"session_abc123\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.social-api.ai/v1/accounts/connect")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"brand_id\": \"b_01HZ9X3Q4R5M6N7P8V2K0W1J\",\n \"metadata\": {},\n \"platform\": \"instagram\",\n \"redirect_uri\": \"https://app.acme.com/oauth/done\",\n \"state\": \"session_abc123\"\n}"
response = http.request(request)
puts response.read_body{
"account_id": "acc_01HZ9X3Q4R5M6N7P8V2K0W1J",
"display_name": "Acme Corp",
"platform": "instagram",
"username": "acmecorp"
}{
"auth_url": "https://www.instagram.com/oauth/authorize/?...",
"message": "Redirect the user to auth_url",
"metadata": {},
"state": "4a8f2c1e9b3d7f06a5c2e8b4d1f3a7e2"
}{
"error": {
"code": "resource.not_found",
"message": "Account not found",
"meta": {}
}
}{
"error": {
"code": "resource.not_found",
"message": "Account not found",
"meta": {}
}
}{
"error": {
"code": "resource.not_found",
"message": "Account not found",
"meta": {}
}
}Authorizations
Prefix your API key with "Bearer ". Example: Authorization: Bearer sapi_key_...
Body
Platform and metadata
BrandID optionally specifies which brand to attach the account to. If omitted, a new brand is auto-created.
"b_01HZ9X3Q4R5M6N7P8V2K0W1J"
Metadata contains platform-specific connection data
Show child attributes
Show child attributes
Platform identifies the social platform to connect (e.g. instagram, facebook, google, threads, tiktok, linkedin).
"instagram"
RedirectURI is the customer's URL to redirect the user to after OAuth completes. If you have registered redirect URIs in the dashboard, the value must match one of them. If you have none registered, any valid https URI is accepted. If omitted, the default HTML success page is shown.
"https://app.acme.com/oauth/done"
CustomerState is an opaque value echoed back to the customer's redirect URI. Max 512 chars.
"session_abc123"