curl --request GET \
--url https://api.superx.so/v1/contacts/{id} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.superx.so/v1/contacts/{id}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.superx.so/v1/contacts/{id}', 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.superx.so/v1/contacts/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.superx.so/v1/contacts/{id}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.superx.so/v1/contacts/{id}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.superx.so/v1/contacts/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"data": {
"id": "944883311",
"username": "founderhandle",
"name": "Founder Name",
"avatar_url": "https://pbs.twimg.com/profile_images/...",
"bio": "Bootstrapping a SaaS in public.",
"location": "Austin, TX",
"url": "https://example.com",
"followers_count": 12800,
"following_count": 640,
"is_blue_verified": true,
"verified_type": null,
"lists": [
{
"id": "k1l2m3n4o5p6q7r8s9t0u",
"name": "Founder prospects",
"member_id": "m1a2b3c4d5e6f7g8h9i0j"
}
]
}
}{
"error": {
"code": "invalid_parameter",
"message": "since must be a UTC ISO-8601 timestamp"
}
}{
"error": {
"code": "invalid_api_key",
"message": "Unknown or revoked API key"
}
}{
"error": "subscription_required: The SuperX API requires an active subscription"
}{
"error": {
"code": "contact_not_found",
"message": "No contact with that id belongs to this account. Contacts are the account's engagers, contact-list members and signal leads."
}
}{
"error": {
"code": "rate_limited",
"message": "Rate limit exceeded for the Pro plan (30 requests/min). Upgrade for higher limits.",
"retry_after": 42
}
}{
"error": {
"code": "upstream_error",
"message": "Failed to fetch scheduled posts. Try again shortly."
}
}{
"error": {
"code": "upstream_unavailable",
"message": "The scheduling service is temporarily unavailable. Retry with the same Idempotency-Key."
}
}Get one contact
One person’s stored profile (handle, name, bio, location, website,
follower counts, verified status) plus the lists you created that they
are a member of, each with the member_id the remove endpoints take.
LIMITED TO THE ACCOUNT’S KNOWN CONTACTS. The id must be someone the
selected account has a relationship with: a person who has replied to
or reposted its posts, a member of one of its contact lists (manual or
system), or a scored signal lead. Any other id returns 404
contact_not_found, even when SuperX holds a cached profile for it -
this is not a general X profile lookup.
The default read serves the stored profile and costs one read.
refresh=true refreshes a stale profile from X and therefore also
counts against the tighter live-contact-enrichment limit, the same
bucket POST /v1/contact-lists/{id}/members uses. The refresh=true
enrichment unit is charged only after the contact gate passes, so an
id outside your contacts does not spend one.
curl --request GET \
--url https://api.superx.so/v1/contacts/{id} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.superx.so/v1/contacts/{id}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.superx.so/v1/contacts/{id}', 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.superx.so/v1/contacts/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.superx.so/v1/contacts/{id}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.superx.so/v1/contacts/{id}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.superx.so/v1/contacts/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"data": {
"id": "944883311",
"username": "founderhandle",
"name": "Founder Name",
"avatar_url": "https://pbs.twimg.com/profile_images/...",
"bio": "Bootstrapping a SaaS in public.",
"location": "Austin, TX",
"url": "https://example.com",
"followers_count": 12800,
"following_count": 640,
"is_blue_verified": true,
"verified_type": null,
"lists": [
{
"id": "k1l2m3n4o5p6q7r8s9t0u",
"name": "Founder prospects",
"member_id": "m1a2b3c4d5e6f7g8h9i0j"
}
]
}
}{
"error": {
"code": "invalid_parameter",
"message": "since must be a UTC ISO-8601 timestamp"
}
}{
"error": {
"code": "invalid_api_key",
"message": "Unknown or revoked API key"
}
}{
"error": "subscription_required: The SuperX API requires an active subscription"
}{
"error": {
"code": "contact_not_found",
"message": "No contact with that id belongs to this account. Contacts are the account's engagers, contact-list members and signal leads."
}
}{
"error": {
"code": "rate_limited",
"message": "Rate limit exceeded for the Pro plan (30 requests/min). Upgrade for higher limits.",
"retry_after": 42
}
}{
"error": {
"code": "upstream_error",
"message": "Failed to fetch scheduled posts. Try again shortly."
}
}{
"error": {
"code": "upstream_unavailable",
"message": "The scheduling service is temporarily unavailable. Retry with the same Idempotency-Key."
}
}Authorizations
A SuperX API key ("sxk_..."), created in the SuperX app under Account > API / MCP / CLI. Keys are server-side secrets.
Path Parameters
The person's numeric X user id (from GET /v1/contacts, list members, or signal leads).
Query Parameters
Account to act on, from GET /v1/accounts. Defaults to your main account. An id outside your accounts returns 404 account_not_found.
Refresh the profile from X when the stored copy is stale. Costs one enrichment unit. The refresh=true enrichment unit is charged only after the contact gate passes, so an id outside your contacts does not spend one.
Response
The contact.
One person's stored profile plus the lists you created that they are in.
Show child attributes
Show child attributes