curl --request GET \
--url https://api.juicer.io/v1/data/profiles \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.juicer.io/v1/data/profiles"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.juicer.io/v1/data/profiles', 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.juicer.io/v1/data/profiles",
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.juicer.io/v1/data/profiles"
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.juicer.io/v1/data/profiles")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.juicer.io/v1/data/profiles")
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": [
{
"platform": "<string>",
"term": "<string>",
"exact_match": true,
"profiles": [
{
"platform": "<string>",
"metrics": {
"follower_count": 123,
"post_count": 123,
"total_view_count": 123,
"avg_views_per_post": 123,
"language": "<string>",
"location": "<string>",
"recent_post_engagement": {
"likes": 123,
"comments": 123,
"shares": 123,
"views": 123,
"sampled_post_url": "<string>",
"sampled_post_created_at": "2023-11-07T05:31:56Z"
}
},
"platform_id": "<string>",
"handle": "<string>",
"display_name": "<string>",
"url": "<string>",
"image": "<string>",
"description": "<string>",
"verified": true
}
]
}
],
"meta": {
"total_results": 123,
"platforms": [
{
"platform": "<string>",
"term": "<string>",
"success": true,
"count": 123,
"error_code": "unknown_platform",
"message": "<string>"
}
]
}
}{
"error": {
"code": "feed_limit_reached",
"message": "Your Free plan allows 1 feed(s). Upgrade to create more.",
"details": {
"name": [
"can't be blank"
]
},
"action": {
"type": "upgrade_plan",
"current_plan": "small",
"current_plan_display_name": "Free",
"required_plan": "large",
"required_plan_display_name": "Pro",
"upgrade_url": "<string>",
"expires_at": "2023-11-07T05:31:56Z"
}
}
}{
"error": {
"code": "feed_limit_reached",
"message": "Your Free plan allows 1 feed(s). Upgrade to create more.",
"details": {
"name": [
"can't be blank"
]
},
"action": {
"type": "upgrade_plan",
"current_plan": "small",
"current_plan_display_name": "Free",
"required_plan": "large",
"required_plan_display_name": "Pro",
"upgrade_url": "<string>",
"expires_at": "2023-11-07T05:31:56Z"
}
}
}Look up the canonical profile per platform for a handle
Resolves one or more handles to their canonical profile on each
requested platform. Pass several handles as a comma-separated term
list — every term is looked up on every platform independently, and
each data[] entry is a { platform, term, exact_match, profiles[] }
group. Hashtag terms (#foo) are rejected.
Every profile object includes every field and every metrics key;
any value not available for a given account is null. Do not assume a
field is always present — coverage varies by platform and account.
When a platform has an exact handle match, profiles holds that one
account (exact_match: true). Otherwise it holds best-effort candidate
matches for you to disambiguate (exact_match: false).
If one platform fails or has no result, others still return. Check
meta.platforms for per-platform status.
curl --request GET \
--url https://api.juicer.io/v1/data/profiles \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.juicer.io/v1/data/profiles"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.juicer.io/v1/data/profiles', 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.juicer.io/v1/data/profiles",
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.juicer.io/v1/data/profiles"
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.juicer.io/v1/data/profiles")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.juicer.io/v1/data/profiles")
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": [
{
"platform": "<string>",
"term": "<string>",
"exact_match": true,
"profiles": [
{
"platform": "<string>",
"metrics": {
"follower_count": 123,
"post_count": 123,
"total_view_count": 123,
"avg_views_per_post": 123,
"language": "<string>",
"location": "<string>",
"recent_post_engagement": {
"likes": 123,
"comments": 123,
"shares": 123,
"views": 123,
"sampled_post_url": "<string>",
"sampled_post_created_at": "2023-11-07T05:31:56Z"
}
},
"platform_id": "<string>",
"handle": "<string>",
"display_name": "<string>",
"url": "<string>",
"image": "<string>",
"description": "<string>",
"verified": true
}
]
}
],
"meta": {
"total_results": 123,
"platforms": [
{
"platform": "<string>",
"term": "<string>",
"success": true,
"count": 123,
"error_code": "unknown_platform",
"message": "<string>"
}
]
}
}{
"error": {
"code": "feed_limit_reached",
"message": "Your Free plan allows 1 feed(s). Upgrade to create more.",
"details": {
"name": [
"can't be blank"
]
},
"action": {
"type": "upgrade_plan",
"current_plan": "small",
"current_plan_display_name": "Free",
"required_plan": "large",
"required_plan_display_name": "Pro",
"upgrade_url": "<string>",
"expires_at": "2023-11-07T05:31:56Z"
}
}
}{
"error": {
"code": "feed_limit_reached",
"message": "Your Free plan allows 1 feed(s). Upgrade to create more.",
"details": {
"name": [
"can't be blank"
]
},
"action": {
"type": "upgrade_plan",
"current_plan": "small",
"current_plan_display_name": "Free",
"required_plan": "large",
"required_plan_display_name": "Pro",
"upgrade_url": "<string>",
"expires_at": "2023-11-07T05:31:56Z"
}
}
}Authorizations
API key prefixed with jcr_. To obtain a key programmatically
(no dashboard required), see POST /v1/authorize.
Query Parameters
One or more handles to resolve, comma-separated (no # hashtag
prefix; @ prefix allowed and stripped). Each handle is looked up
on every requested platform. Up to 5 handles per request.
"juicer,juicerio,juicer.io"
Comma-separated list of platforms. Supported: Bluesky, YouTube,
LinkedIn, Pinterest, Twitter (X), Instagram, Facebook, TikTok,
Google. Unsupported names appear in meta.platforms with
error_code = "unknown_platform".
"Bluesky,YouTube,LinkedIn"