curl --request PATCH \
--url https://api.social-api.ai/v1/users/me \
--header 'Authorization: <api-key>' \
--header 'Content-Type: application/json' \
--data @- <<EOF
{
"job_role": "Founder / CEO",
"lock_accounts_to_brand": true,
"onboarding": false,
"referral": "Google search",
"use_case": "Managing my own brand's social accounts"
}
EOFconst options = {
method: 'PATCH',
headers: {Authorization: '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
job_role: 'Founder / CEO',
lock_accounts_to_brand: true,
onboarding: false,
referral: 'Google search',
use_case: 'Managing my own brand\'s social accounts'
})
};
fetch('https://api.social-api.ai/v1/users/me', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.social-api.ai/v1/users/me"
payload = {
"job_role": "Founder / CEO",
"lock_accounts_to_brand": True,
"onboarding": False,
"referral": "Google search",
"use_case": "Managing my own brand's social accounts"
}
headers = {
"Authorization": "<api-key>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text){
"allowed_platforms": [
"instagram",
"facebook"
],
"avatar_url": "https://example.com/avatar.jpg",
"beta_tester": false,
"billing_block_reason": "past_due",
"billing_blocked": false,
"billing_blocked_at": "<string>",
"email": "user@example.com",
"experiment_enrolled": false,
"experiment_variant": "control",
"facebook_page_selection": false,
"id": "550e8400-e29b-41d4-a716-446655440000",
"job_role": "Founder / CEO",
"lock_accounts_to_brand": false,
"onboarding": true,
"plan": "free",
"role": "admin",
"use_case": "Managing clients' accounts (agency)"
}{
"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": {}
}
}Update current user
Updates the authenticated user’s profile. Supports setting onboarding=false to mark onboarding as complete, and optionally recording use_case, referral and job_role. The response reflects the current billing_blocked state, unaffected by this update. The response includes the caller’s team role: “admin”, “developer”, or "" for the account owner.
curl --request PATCH \
--url https://api.social-api.ai/v1/users/me \
--header 'Authorization: <api-key>' \
--header 'Content-Type: application/json' \
--data @- <<EOF
{
"job_role": "Founder / CEO",
"lock_accounts_to_brand": true,
"onboarding": false,
"referral": "Google search",
"use_case": "Managing my own brand's social accounts"
}
EOFconst options = {
method: 'PATCH',
headers: {Authorization: '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
job_role: 'Founder / CEO',
lock_accounts_to_brand: true,
onboarding: false,
referral: 'Google search',
use_case: 'Managing my own brand\'s social accounts'
})
};
fetch('https://api.social-api.ai/v1/users/me', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.social-api.ai/v1/users/me"
payload = {
"job_role": "Founder / CEO",
"lock_accounts_to_brand": True,
"onboarding": False,
"referral": "Google search",
"use_case": "Managing my own brand's social accounts"
}
headers = {
"Authorization": "<api-key>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text){
"allowed_platforms": [
"instagram",
"facebook"
],
"avatar_url": "https://example.com/avatar.jpg",
"beta_tester": false,
"billing_block_reason": "past_due",
"billing_blocked": false,
"billing_blocked_at": "<string>",
"email": "user@example.com",
"experiment_enrolled": false,
"experiment_variant": "control",
"facebook_page_selection": false,
"id": "550e8400-e29b-41d4-a716-446655440000",
"job_role": "Founder / CEO",
"lock_accounts_to_brand": false,
"onboarding": true,
"plan": "free",
"role": "admin",
"use_case": "Managing clients' accounts (agency)"
}{
"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
Fields to update
JobRole records what best describes the user. Surrounding whitespace is trimmed, an empty value leaves the current one unchanged, and values longer than 120 characters are truncated.
"Founder / CEO"
LockAccountsToBrand toggles whether a social account already connected to one brand may be re-connected (moved) to a different brand. When true, such a connect attempt is rejected with 409 account.already_linked.
true
false
"Google search"
"Managing my own brand's social accounts"
Response
Updated user profile
["instagram", "facebook"]
"https://example.com/avatar.jpg"
false
BillingBlockReason is why access is paused, empty when it is not. "past_due": a payment failed, and settling it restores access. "ban": the account was suspended for a Terms of Service violation. Paying does not lift it, and every route except this one returns 403 auth.suspended. Contact support to appeal.
"past_due"
BillingBlocked is true when API access and webhook delivery are paused. Read BillingBlockReason to tell why and whether paying lifts it.
false
BillingBlockedAt is when the block began, or null when not blocked.
"user@example.com"
ExperimentEnrolled is true only when ExperimentVariant was assigned by the experiment itself. False means the "control" above is a fallback (not enrolled, flag off, or evaluation failed) and must not be recorded as the caller's arm.
false
ExperimentVariant is the caller's variant for staged feature rollouts: "control" or "treatment". "control" unless the caller is enrolled.
"control"
FacebookPageSelection, when true, enables the Facebook Page selection connect flow in the dashboard. Read-only here.
false
"550e8400-e29b-41d4-a716-446655440000"
JobRole is what best describes the user, as answered during onboarding. Null until answered.
"Founder / CEO"
LockAccountsToBrand, when true, rejects connecting a social account that is already connected to another of your brands (409 account.already_linked) instead of moving it. Default false.
false
true
"free"
Role is the caller's team role: "admin", "developer", or "" for the account Owner, who holds no Role. An API key and an OAuth token both read "".
"admin"
"Managing clients' accounts (agency)"