curl \
-H "Authorization: Bearer API_KEY" \
-H 'Content-Type: application/json' \
-H 'Profile-Key: PROFILE_KEY' \
-d '{"expiresIn": 60}' \
-X POST https://api.ayrshare.com/api/profiles/link-sessions
const API_KEY = "API_KEY";
const PROFILE_KEY = "PROFILE_KEY";
fetch("https://api.ayrshare.com/api/profiles/link-sessions", {
method: "POST",
headers: {
"Content-Type": "application/json",
Authorization: `Bearer ${API_KEY}`,
"Profile-Key": PROFILE_KEY,
},
body: JSON.stringify({ expiresIn: 60 }),
})
.then((res) => res.json())
.then((json) => console.log(json))
.catch(console.error);
import requests
payload = {'expiresIn': 60}
headers = {'Content-Type': 'application/json',
'Authorization': 'Bearer API_KEY',
'Profile-Key': 'PROFILE_KEY'}
response = requests.post('https://api.ayrshare.com/api/profiles/link-sessions',
json=payload, headers=headers)
print(response.json())
<?php
require 'vendor/autoload.php'; // Composer auto-loader using Guzzle. See .../guzzlephp.org/en/stable/overview.html
$client = new GuzzleHttp\Client();
$res = $client->request(
'POST',
'https://api.ayrshare.com/api/profiles/link-sessions',
[
'headers' => [
'Content-Type' => 'application/json',
'Authorization' => 'Bearer API_KEY',
'Profile-Key' => 'PROFILE_KEY'
],
'json' => [
'expiresIn' => 60,
]
]
);
echo json_encode(json_decode($res->getBody()), JSON_PRETTY_PRINT);
using System;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;
namespace CreateLinkSession_csharp
{
class CreateLinkSession
{
static async Task Main(string[] args)
{
string API_KEY = "API_KEY";
string PROFILE_KEY = "PROFILE_KEY";
string url = "https://api.ayrshare.com/api/profiles/link-sessions";
try
{
using (var client = new HttpClient())
{
client.DefaultRequestHeaders.Add("Authorization", "Bearer " + API_KEY);
client.DefaultRequestHeaders.Add("Profile-Key", PROFILE_KEY);
var sendData = new { expiresIn = 60 };
string jsonData = JsonConvert.SerializeObject(sendData);
var content = new StringContent(jsonData, Encoding.UTF8, "application/json");
HttpResponseMessage response = await client.PostAsync(url, content);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();
Console.WriteLine(responseBody);
}
}
catch (HttpRequestException e)
{
Console.WriteLine($"HTTP request error: {e.Message}");
}
}
}
}
{
"status": "success",
"sessionId": "c7a2434e72e91bde27579efde0fd6dd0b74ceee29a471fd368407f273708c2e8", // Identifier for this link. Use it with Get and Revoke a Link Session.
"url": "https://profile.ayrshare.com?session=ayr_ls_kJ8mQ2vX9pLnR4tYwZ6aBcD1eFgH3iJkLmN0oPqRsTu&domain=YOUR_DOMAIN", // Send this to your user exactly as returned. The token exists only in here.
"expiresAt": "2026-09-02T08:03:26.838Z", // When the link stops working, as an ISO 8601 timestamp.
"emailSent": false, // Whether the connect-accounts email was sent. false means none was requested; a send failure returns code: 333 instead.
"title": "Acme Client" // The User Profile's title. Omitted when the profile has none.
}
{
"status": "success",
"sessionId": "c7a2434e72e91bde27579efde0fd6dd0b74ceee29a471fd368407f273708c2e8",
"url": "https://profile.ayrshare.com/connect?session=ayr_ls_kJ8mQ2vX9pLnR4tYwZ6aBcD1eFgH3iJkLmN0oPqRsTu", // Open this in a popup. One network, no domain parameter.
"expiresAt": "2026-09-02T08:03:26.838Z",
"emailSent": false,
"title": "Acme Client"
}
{
"status": "success",
"sessionId": "c7a2434e72e91bde27579efde0fd6dd0b74ceee29a471fd368407f273708c2e8",
"token": "ayr_ls_kJ8mQ2vX9pLnR4tYwZ6aBcD1eFgH3iJkLmN0oPqRsTu", // No url: this shape returns the bare token instead. Treat it like a password.
"expiresAt": "2026-09-02T08:03:26.838Z",
"emailSent": false, // Always false here - email needs a link to send, so it returns code: 510.
"title": "Acme Client"
}
{
"action": "link session",
"status": "error",
"code": 504,
"message": "Connect mode requires the Max Pack. Activate it on your Account page: https://app.ayrshare.com/account"
}
{
"action": "JWT",
"status": "error",
"code": 188,
"message": "Missing or incorrect privateKey, profileKey, domain, email 'to', or expiresIn fields."
}
{
"action": "JWT",
"status": "error",
"code": 189,
"message": "Error generating JWT. Check the sent parameters.",
"details": "Missing or incorrect domain."
}
{
"action": "JWT",
"status": "error",
"code": 340,
"message": "Max Pack required. Go to your dashboard to add the Max Pack."
}
Profiles
Eine Link Session erstellen
Erstellen Sie eine Social-Linking-URL für ein User Profile, ohne einen Private Key zu senden.
POST
/
profiles
/
link-sessions
curl \
-H "Authorization: Bearer API_KEY" \
-H 'Content-Type: application/json' \
-H 'Profile-Key: PROFILE_KEY' \
-d '{"expiresIn": 60}' \
-X POST https://api.ayrshare.com/api/profiles/link-sessions
const API_KEY = "API_KEY";
const PROFILE_KEY = "PROFILE_KEY";
fetch("https://api.ayrshare.com/api/profiles/link-sessions", {
method: "POST",
headers: {
"Content-Type": "application/json",
Authorization: `Bearer ${API_KEY}`,
"Profile-Key": PROFILE_KEY,
},
body: JSON.stringify({ expiresIn: 60 }),
})
.then((res) => res.json())
.then((json) => console.log(json))
.catch(console.error);
import requests
payload = {'expiresIn': 60}
headers = {'Content-Type': 'application/json',
'Authorization': 'Bearer API_KEY',
'Profile-Key': 'PROFILE_KEY'}
response = requests.post('https://api.ayrshare.com/api/profiles/link-sessions',
json=payload, headers=headers)
print(response.json())
<?php
require 'vendor/autoload.php'; // Composer auto-loader using Guzzle. See .../guzzlephp.org/en/stable/overview.html
$client = new GuzzleHttp\Client();
$res = $client->request(
'POST',
'https://api.ayrshare.com/api/profiles/link-sessions',
[
'headers' => [
'Content-Type' => 'application/json',
'Authorization' => 'Bearer API_KEY',
'Profile-Key' => 'PROFILE_KEY'
],
'json' => [
'expiresIn' => 60,
]
]
);
echo json_encode(json_decode($res->getBody()), JSON_PRETTY_PRINT);
using System;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;
namespace CreateLinkSession_csharp
{
class CreateLinkSession
{
static async Task Main(string[] args)
{
string API_KEY = "API_KEY";
string PROFILE_KEY = "PROFILE_KEY";
string url = "https://api.ayrshare.com/api/profiles/link-sessions";
try
{
using (var client = new HttpClient())
{
client.DefaultRequestHeaders.Add("Authorization", "Bearer " + API_KEY);
client.DefaultRequestHeaders.Add("Profile-Key", PROFILE_KEY);
var sendData = new { expiresIn = 60 };
string jsonData = JsonConvert.SerializeObject(sendData);
var content = new StringContent(jsonData, Encoding.UTF8, "application/json");
HttpResponseMessage response = await client.PostAsync(url, content);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();
Console.WriteLine(responseBody);
}
}
catch (HttpRequestException e)
{
Console.WriteLine($"HTTP request error: {e.Message}");
}
}
}
}
{
"status": "success",
"sessionId": "c7a2434e72e91bde27579efde0fd6dd0b74ceee29a471fd368407f273708c2e8", // Identifier for this link. Use it with Get and Revoke a Link Session.
"url": "https://profile.ayrshare.com?session=ayr_ls_kJ8mQ2vX9pLnR4tYwZ6aBcD1eFgH3iJkLmN0oPqRsTu&domain=YOUR_DOMAIN", // Send this to your user exactly as returned. The token exists only in here.
"expiresAt": "2026-09-02T08:03:26.838Z", // When the link stops working, as an ISO 8601 timestamp.
"emailSent": false, // Whether the connect-accounts email was sent. false means none was requested; a send failure returns code: 333 instead.
"title": "Acme Client" // The User Profile's title. Omitted when the profile has none.
}
{
"status": "success",
"sessionId": "c7a2434e72e91bde27579efde0fd6dd0b74ceee29a471fd368407f273708c2e8",
"url": "https://profile.ayrshare.com/connect?session=ayr_ls_kJ8mQ2vX9pLnR4tYwZ6aBcD1eFgH3iJkLmN0oPqRsTu", // Open this in a popup. One network, no domain parameter.
"expiresAt": "2026-09-02T08:03:26.838Z",
"emailSent": false,
"title": "Acme Client"
}
{
"status": "success",
"sessionId": "c7a2434e72e91bde27579efde0fd6dd0b74ceee29a471fd368407f273708c2e8",
"token": "ayr_ls_kJ8mQ2vX9pLnR4tYwZ6aBcD1eFgH3iJkLmN0oPqRsTu", // No url: this shape returns the bare token instead. Treat it like a password.
"expiresAt": "2026-09-02T08:03:26.838Z",
"emailSent": false, // Always false here - email needs a link to send, so it returns code: 510.
"title": "Acme Client"
}
{
"action": "link session",
"status": "error",
"code": 504,
"message": "Connect mode requires the Max Pack. Activate it on your Account page: https://app.ayrshare.com/account"
}
{
"action": "JWT",
"status": "error",
"code": 188,
"message": "Missing or incorrect privateKey, profileKey, domain, email 'to', or expiresIn fields."
}
{
"action": "JWT",
"status": "error",
"code": 189,
"message": "Error generating JWT. Check the sent parameters.",
"details": "Missing or incorrect domain."
}
{
"action": "JWT",
"status": "error",
"code": 340,
"message": "Max Pack required. Go to your dashboard to add the Max Pack."
}
Erstellen Sie eine Social-Linking-URL für ein User Profile. Senden Sie die zurückgegebene
Jeder oben genannte Code steht in der Referenz
Link-Session-Fehler.
url an Ihren Nutzer; er öffnet sie, um seine Social-Media-Konten zu verbinden.
Dies ist der empfohlene Weg, eine Linking-URL zu erstellen. Es werden nur Ihr API Key und
ein Profile-Key benötigt — es gibt keinen Private Key zu senden und nichts zu signieren.
Anders als eine bisher erstellte Linking-URL wird eine Link Session gespeichert, sodass
Sie prüfen können, ob sie verwendet wurde, und sie widerrufen können, bevor sie abläuft.
Die zurückgegebene url meldet Ihren Nutzer in seinem Profil an — behandeln Sie sie daher
wie ein Passwort und senden Sie jede nur an einen einzelnen Nutzer. Siehe
Die Linking-URL versenden.
Die URL ist standardmäßig 5 Minuten gültig. Verwenden Sie
expiresIn, um ein
anderes Zeitfenster festzulegen, bis zu 2880 Minuten (48 Stunden).Linking-URL erzeugen führt denselben Vorgang aus und
funktioniert unverändert weiter. Er akzeptiert die Legacy-Parameter
privateKey,
base64 und verify und ignoriert sie. domain wird auf keinem der beiden Endpunkte
ignoriert — es bleibt optional und wird weiterhin validiert. Neue Integrationen sollten
diesen Endpunkt verwenden.Ein Unterschied in der Antwort: generateJWT gibt aus Gründen der Abwärtskompatibilität
ein token auf oberster Ebene zurück, und dieser Endpunkt gibt keines neben einer
url zurück — das Token einer url steckt in ihr. Wenn Sie migrieren und Ihr Code
token liest, lesen Sie stattdessen url. (Der Connect Mode für das
eingebettete Widget ist die eine Form, die ein reines token zurückgibt, weil sie keine
URL zurückgibt, in der das Token stecken könnte.)Header-Parameter
Der
Profile-Key ist auf diesem Endpunkt ein Header — es gibt keinen Body-Parameter
profileKey. Fehlt er, erhalten Sie code: 188, dessen Meldung privateKey,
profileKey und andere Legacy-Feldnamen auflistet, weil sie mit
Linking-URL erzeugen geteilt wird. Lesen Sie sie als
„der Profile-Key-Header fehlt oder ist falsch“; keiner der anderen darin genannten Namen
ist ein Parameter dieses Endpunkts.string
Ihr X-API-Key (Consumer Key) aus dem X Developer Portal. Wenn angegeben, verwendet die
Linking-URL Ihre eigene X Developer App für die OAuth-Verknüpfung.
string
Ihr X-API-Secret (Consumer Secret) aus dem X Developer Portal. Erforderlich, wenn
X-Twitter-OAuth1-Api-Key angegeben ist.Body-Parameter
string
Standard:"grid"
Welche Verknüpfungsoberfläche diese Session bedient.
grid— die gehostete Verknüpfungsseite, die jedes von Ihnen erlaubte Netzwerk zeigt. Das ist der Standard, eine Anfrage ohnemodeerstellt also eine solche Session.connect— ein Netzwerk nach dem anderen, geöffnet aus Ihrem eigenen Dashboard. Siehe Connect Mode unten und Direct Mode.
origin oder network versetzt Sie nicht in den Connect
Mode, eine Grid-Session kann also nicht versehentlich zu einer zugangsbeschränkten werden. Jeder
andere Wert gibt code: 188 zurück, wobei details die beiden gültigen benennt.number
Standard:5
Gültigkeitsdauer des Links in Minuten. Bereich: 1 bis 2880 Minuten.Erfordert das Max Pack.Weitere Informationen finden Sie unter Link-Gültigkeit.
boolean
Standard:false
Automatisches Abmelden der aktuellen Sitzung. Wird in der Produktion nicht empfohlen,
da dies die Performance beeinflusst.Siehe Automatische Abmeldung einer Profilsitzung.
string
Eine URL, zu der weitergeleitet wird, wenn die Schaltfläche „Done“ (Fertig) oder das
Logo angeklickt wird. Fügen Sie den Query-Parameter
origin=true hinzu, um das
Öffnerfenster weiterzuleiten.array
Die auf der Verknüpfungsseite anzuzeigenden sozialen Netzwerke. Überschreibt die auf der
Seite Soziale Netzwerke
konfigurierten Netzwerke.
Only display Facebook, X/Twitter, LinkedIn, and TikTok
{
"allowedSocial": ["facebook", "twitter", "linkedin", "tiktok"]
}
string
Nur Connect Mode. Das einzelne soziale Netzwerk, das diese Session verbindet — genau das macht
sie zu einer Direct-Mode-Session. Lassen Sie es weg für eine Session, die Ihr eigenes
Dashboard über mehrere Netzwerke hinweg bedient.Eines von
bluesky, facebook, gmb, instagram, instagramApi, linkedin, pinterest,
reddit, snapchat, telegram, threads, tiktok, twitter, whatsapp, x, youtube.
Alles andere gibt code: 508 zurück — einschließlich fbg, das hier kein Verknüpfungsziel ist.Kann nicht mit allowedSocial kombiniert werden (code: 507): Eine Session für ein einzelnes
Netzwerk ist bereits ihre eigene Allowlist. Ein Netzwerk, das Ihr Account nicht aktiviert hat,
gibt code: 509 zurück — bewusst eine andere Antwort als 508, weil Sie das auf Ihrer Seite
Soziale Netzwerke selbst
beheben können.Im Grid Mode wird es ignoriert.string
Überschreibt, welcher Instagram-Verknüpfungsablauf für diesen Link verwendet wird.
Gültige Werte:
instagram: Direktes Instagram Login, keine Facebook-Seite erforderlich.facebook: Instagram über eine verbundene Facebook-Seite verknüpfen.
string
Die exakte Origin der Seite, die das Verknüpfungsfenster geöffnet hat, damit ihr
mitgeteilt werden kann, wann die Verknüpfung abgeschlossen ist.Wenn gesetzt, sendet die Verknüpfungsseite mit
window.postMessage Events an diese
Origin, während Ihr Nutzer die Konten verbindet, und Ihre Seite kann ohne Polling
reagieren. Events werden ausschließlich an genau diesen Wert gesendet — er muss also
Zeichen für Zeichen der Origin Ihrer Seite entsprechen, einschließlich Schema und
eventuellem Port.Drei Formen werden akzeptiert: eine https-Origin (https://app.example.com),
http://localhost:3000 für die lokale Entwicklung und ein natives Custom Scheme
(myapp://connected). Alles andere — eine reine http://-Origin außer localhost oder
etwas, das gar keine Origin ist — wird auf den Links, die dieser Endpunkt erstellt,
ignoriert: Der Link funktioniert weiterhin, er sendet nur keine Events. Der Parameter
ist optional, das Weglassen ist also ebenfalls kein Fehler.Von den dreien empfangen nur die ersten beiden Events. Ein Custom Scheme ist ein
Rücksprungziel für eine mobile App und kann keine empfangen, weil es kein
Browserfenster gibt, an das gesendet werden könnte; native Apps pollen stattdessen
Eine Link Session abrufen.Siehe Link-Completion-Events.Im Connect Mode ist origin erforderlich, und es wird geprüft. Die Nachsicht oben ist
Grid-Mode-Verhalten. Mit mode: "connect" gibt das Weglassen code: 505 zurück, und ein Wert,
der keiner der drei akzeptierten Formen entspricht, gibt code: 506 zurück, dessen details
die gesendete Form wiederholen.string
Optional. Ihre Linking-Domain, wenn Ihr Account mehr als eine hat. Wird die Angabe
weggelassen, wird die eigene Domain Ihres Accounts verwendet. Eine nicht für Ihren
Account registrierte Domain wird abgelehnt.
object
Senden Sie eine Connect-Accounts-E-Mail mit dem Link, damit Ihr Nutzer seine
Verknüpfungsseite direkt erreichen kann. Erfordert eine
to-Adresse.Erfordert das Max Pack. Die Antwort meldet das Ergebnis in emailSent, und ein
Sendefehler gibt code: 333 statt einer Erfolgsantwort zurück.Siehe Connect-Accounts-E-Mail.Connect Mode
mode: "connect" erstellt eine Session für eine Verknüpfungsoberfläche, die Sie selbst hosten,
statt für die gehostete Verknüpfungsseite. Welche der beiden Connect-Formen Sie erhalten, hängt von
einer Sache ab — ob Sie network übergeben:
| Sie senden | Sie erhalten zurück | Was Sie damit tun |
|---|---|---|
mode: "connect" und ein network | eine url, die auf eine Connect-Seite für ein einzelnes Netzwerk zeigt | öffnen Sie sie in einem Popup — das ist Direct Mode |
mode: "connect" und kein network | ein token und gar keine URL | reichen Sie es an Ihr eigenes Frontend weiter |
Die Antwort trägt das Geheimnis genau einmal. Eine Antwort hat entweder eine
url oder ein
token, nie beides und nie zwei URLs. Das Token einer Direct-Mode-Session steckt in der url,
genau wie im Grid Mode; eine Session ohne URL, die es tragen könnte, gibt stattdessen das reine
token zurück. Alles andere ist in allen drei Modi gleich: sessionId, expiresAt,
emailSent und title, wenn das User Profile einen hat.Was Connect Mode erfordert
Keines von beiden ist ein eigenes Body-Feld — das erste ist eine Account-Berechtigung und das zweite derorigin-Parameter oben, den der Connect Mode verpflichtend macht.
Der Max Pack. Ohne ihn gibt der Aufruf code: 504 zurück, geprüft vor
den Connect-Mode-Parametern — das Korrigieren von origin oder network ändert die Antwort also
nicht. Kontaktieren Sie den Support, wenn Sie den Connect Mode auf einem Account ohne Max Pack
aktivieren müssen.
Ein origin, auf jeder Session. Es gibt keine Allowlist und keinen Registrierungsschritt —
Sie senden ihn bei jedem Aufruf, und er wird auf der Session gespeichert, eine neue Umgebung
braucht also keine Einrichtung auf unserer Seite. Drei Formen werden akzeptiert:
- eine
https-Origin —https://app.example.com - ein natives Custom Scheme —
myapp://connected http://localhostoderhttp://localhost:3000, für die lokale Entwicklung
code: 505 zurück, und alles, was keine der drei Formen ist, gibt code: 506 zurück.
email kann nicht mit einer Session ohne network verwendet werden, weil es keinen Link gibt,
der in die E-Mail könnte — diese Form gibt ein Token für Ihr eigenes Frontend zurück. Der Aufruf
gibt code: 510 zurück. Fügen Sie ein network für eine Direct-Mode-Session hinzu, die eine URL
hat, oder lassen Sie email weg.curl \
-H "Authorization: Bearer API_KEY" \
-H 'Content-Type: application/json' \
-H 'Profile-Key: PROFILE_KEY' \
-d '{"expiresIn": 60}' \
-X POST https://api.ayrshare.com/api/profiles/link-sessions
const API_KEY = "API_KEY";
const PROFILE_KEY = "PROFILE_KEY";
fetch("https://api.ayrshare.com/api/profiles/link-sessions", {
method: "POST",
headers: {
"Content-Type": "application/json",
Authorization: `Bearer ${API_KEY}`,
"Profile-Key": PROFILE_KEY,
},
body: JSON.stringify({ expiresIn: 60 }),
})
.then((res) => res.json())
.then((json) => console.log(json))
.catch(console.error);
import requests
payload = {'expiresIn': 60}
headers = {'Content-Type': 'application/json',
'Authorization': 'Bearer API_KEY',
'Profile-Key': 'PROFILE_KEY'}
response = requests.post('https://api.ayrshare.com/api/profiles/link-sessions',
json=payload, headers=headers)
print(response.json())
<?php
require 'vendor/autoload.php'; // Composer auto-loader using Guzzle. See .../guzzlephp.org/en/stable/overview.html
$client = new GuzzleHttp\Client();
$res = $client->request(
'POST',
'https://api.ayrshare.com/api/profiles/link-sessions',
[
'headers' => [
'Content-Type' => 'application/json',
'Authorization' => 'Bearer API_KEY',
'Profile-Key' => 'PROFILE_KEY'
],
'json' => [
'expiresIn' => 60,
]
]
);
echo json_encode(json_decode($res->getBody()), JSON_PRETTY_PRINT);
using System;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;
namespace CreateLinkSession_csharp
{
class CreateLinkSession
{
static async Task Main(string[] args)
{
string API_KEY = "API_KEY";
string PROFILE_KEY = "PROFILE_KEY";
string url = "https://api.ayrshare.com/api/profiles/link-sessions";
try
{
using (var client = new HttpClient())
{
client.DefaultRequestHeaders.Add("Authorization", "Bearer " + API_KEY);
client.DefaultRequestHeaders.Add("Profile-Key", PROFILE_KEY);
var sendData = new { expiresIn = 60 };
string jsonData = JsonConvert.SerializeObject(sendData);
var content = new StringContent(jsonData, Encoding.UTF8, "application/json");
HttpResponseMessage response = await client.PostAsync(url, content);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();
Console.WriteLine(responseBody);
}
}
catch (HttpRequestException e)
{
Console.WriteLine($"HTTP request error: {e.Message}");
}
}
}
}
{
"status": "success",
"sessionId": "c7a2434e72e91bde27579efde0fd6dd0b74ceee29a471fd368407f273708c2e8", // Identifier for this link. Use it with Get and Revoke a Link Session.
"url": "https://profile.ayrshare.com?session=ayr_ls_kJ8mQ2vX9pLnR4tYwZ6aBcD1eFgH3iJkLmN0oPqRsTu&domain=YOUR_DOMAIN", // Send this to your user exactly as returned. The token exists only in here.
"expiresAt": "2026-09-02T08:03:26.838Z", // When the link stops working, as an ISO 8601 timestamp.
"emailSent": false, // Whether the connect-accounts email was sent. false means none was requested; a send failure returns code: 333 instead.
"title": "Acme Client" // The User Profile's title. Omitted when the profile has none.
}
{
"status": "success",
"sessionId": "c7a2434e72e91bde27579efde0fd6dd0b74ceee29a471fd368407f273708c2e8",
"url": "https://profile.ayrshare.com/connect?session=ayr_ls_kJ8mQ2vX9pLnR4tYwZ6aBcD1eFgH3iJkLmN0oPqRsTu", // Open this in a popup. One network, no domain parameter.
"expiresAt": "2026-09-02T08:03:26.838Z",
"emailSent": false,
"title": "Acme Client"
}
{
"status": "success",
"sessionId": "c7a2434e72e91bde27579efde0fd6dd0b74ceee29a471fd368407f273708c2e8",
"token": "ayr_ls_kJ8mQ2vX9pLnR4tYwZ6aBcD1eFgH3iJkLmN0oPqRsTu", // No url: this shape returns the bare token instead. Treat it like a password.
"expiresAt": "2026-09-02T08:03:26.838Z",
"emailSent": false, // Always false here - email needs a link to send, so it returns code: 510.
"title": "Acme Client"
}
{
"action": "link session",
"status": "error",
"code": 504,
"message": "Connect mode requires the Max Pack. Activate it on your Account page: https://app.ayrshare.com/account"
}
{
"action": "JWT",
"status": "error",
"code": 188,
"message": "Missing or incorrect privateKey, profileKey, domain, email 'to', or expiresIn fields."
}
{
"action": "JWT",
"status": "error",
"code": 189,
"message": "Error generating JWT. Check the sent parameters.",
"details": "Missing or incorrect domain."
}
{
"action": "JWT",
"status": "error",
"code": 340,
"message": "Max Pack required. Go to your dashboard to add the Max Pack."
}