curl https://api.bouncy.ai/v1/analytics/links/link_abc123xyz \
-H "Authorization: Bearer bcy_live_pk_YOUR_API_KEY"
curl "https://api.bouncy.ai/v1/analytics/links/link_abc123xyz?timeframe=last_30_days" \
-H "Authorization: Bearer bcy_live_pk_YOUR_API_KEY"
curl "https://api.bouncy.ai/v1/analytics/links/link_abc123xyz?from=2026-01-01&to=2026-01-31" \
-H "Authorization: Bearer bcy_live_pk_YOUR_API_KEY"
curl "https://api.bouncy.ai/v1/analytics/links/my-bio-page?timeframe=last_30_days" \
-H "Authorization: Bearer bcy_live_pk_YOUR_API_KEY"
const response = await fetch(
'https://api.bouncy.ai/v1/analytics/links/my-bio-page?timeframe=last_30_days',
{
headers: {
'Authorization': 'Bearer bcy_live_pk_YOUR_API_KEY'
}
}
);
const analytics = await response.json();
console.log(`Total views: ${analytics.totalViews}`);
console.log(`Total clicks: ${analytics.totalClicks}`);
console.log(analytics.clicksByLink.map(button => ({
id: button.id,
title: button.title,
totalClicks: button.totalClicks,
dailyClicks: button.dailyClicks
})));
import requests
response = requests.get(
'https://api.bouncy.ai/v1/analytics/links/link_abc123xyz',
headers={'Authorization': 'Bearer bcy_live_pk_YOUR_API_KEY'},
params={
'from': '2026-01-01',
'to': '2026-01-31'
}
)
analytics = response.json()
print(f"Total views: {analytics['totalViews']}")
print(f"Adult confirmations: {(analytics.get('adultConfirmation') or {}).get('clicks', 0)}")
{
"id": "my-bio-page",
"identifier": "my-bio-page",
"type": "Website",
"resolvedBy": "customSlug",
"totalViews": 190,
"dailyViews": [
{
"date": "2026-01-15",
"views": 74,
"clicks": 78,
"adultClicks": 46,
"countries": {
"us": 41,
"gb": 18
},
"devices": {
"mobile": 69,
"desktop": 5
},
"platforms": {
"ios": 43,
"android": 26,
"windows": 5
},
"referrers": {
"instagram.com": 38,
"direct": 22
}
}
],
"deviceStats": {
"mobile": 176,
"desktop": 14
},
"countryStats": [
{ "name": "United States", "views": 112 },
{ "name": "United Kingdom", "views": 49 }
],
"topCountry": "United States",
"topCountryViews": 112,
"lastViewed": "2026-01-31T19:22:10.000Z",
"platformStats": {
"ios": 104,
"android": 72,
"windows": 14
},
"referrerStats": [
{ "domain": "instagram.com", "views": 89 },
{ "domain": "direct", "views": 54 }
],
"totalClicks": 211,
"clicksByLink": [
{
"id": "shop_0_lx8abc",
"count": 88,
"totalClicks": 88,
"title": "Shop Now",
"url": "https://example.com/shop",
"type": "standard",
"dailyClicks": [
{ "date": "2026-01-15", "clicks": 32 },
{ "date": "2026-01-16", "clicks": 56 }
]
},
{
"id": "adult-18plus-btn",
"count": 123,
"totalClicks": 123,
"title": "Yes, I'm 18+",
"url": "https://example.com/adult-destination",
"type": "adult-confirmation",
"dailyClicks": [
{ "date": "2026-01-15", "clicks": 46 },
{ "date": "2026-01-16", "clicks": 77 }
]
}
],
"adultConfirmation": {
"clicks": 123,
"rate": 64.74
}
}
{
"error": "Link or website not found"
}
Analytics
Get Link or Website Analytics
Retrieve detailed analytics for a short link or bio website
GET
/
v1
/
analytics
/
links
/
{identifier}
curl https://api.bouncy.ai/v1/analytics/links/link_abc123xyz \
-H "Authorization: Bearer bcy_live_pk_YOUR_API_KEY"
curl "https://api.bouncy.ai/v1/analytics/links/link_abc123xyz?timeframe=last_30_days" \
-H "Authorization: Bearer bcy_live_pk_YOUR_API_KEY"
curl "https://api.bouncy.ai/v1/analytics/links/link_abc123xyz?from=2026-01-01&to=2026-01-31" \
-H "Authorization: Bearer bcy_live_pk_YOUR_API_KEY"
curl "https://api.bouncy.ai/v1/analytics/links/my-bio-page?timeframe=last_30_days" \
-H "Authorization: Bearer bcy_live_pk_YOUR_API_KEY"
const response = await fetch(
'https://api.bouncy.ai/v1/analytics/links/my-bio-page?timeframe=last_30_days',
{
headers: {
'Authorization': 'Bearer bcy_live_pk_YOUR_API_KEY'
}
}
);
const analytics = await response.json();
console.log(`Total views: ${analytics.totalViews}`);
console.log(`Total clicks: ${analytics.totalClicks}`);
console.log(analytics.clicksByLink.map(button => ({
id: button.id,
title: button.title,
totalClicks: button.totalClicks,
dailyClicks: button.dailyClicks
})));
import requests
response = requests.get(
'https://api.bouncy.ai/v1/analytics/links/link_abc123xyz',
headers={'Authorization': 'Bearer bcy_live_pk_YOUR_API_KEY'},
params={
'from': '2026-01-01',
'to': '2026-01-31'
}
)
analytics = response.json()
print(f"Total views: {analytics['totalViews']}")
print(f"Adult confirmations: {(analytics.get('adultConfirmation') or {}).get('clicks', 0)}")
{
"id": "my-bio-page",
"identifier": "my-bio-page",
"type": "Website",
"resolvedBy": "customSlug",
"totalViews": 190,
"dailyViews": [
{
"date": "2026-01-15",
"views": 74,
"clicks": 78,
"adultClicks": 46,
"countries": {
"us": 41,
"gb": 18
},
"devices": {
"mobile": 69,
"desktop": 5
},
"platforms": {
"ios": 43,
"android": 26,
"windows": 5
},
"referrers": {
"instagram.com": 38,
"direct": 22
}
}
],
"deviceStats": {
"mobile": 176,
"desktop": 14
},
"countryStats": [
{ "name": "United States", "views": 112 },
{ "name": "United Kingdom", "views": 49 }
],
"topCountry": "United States",
"topCountryViews": 112,
"lastViewed": "2026-01-31T19:22:10.000Z",
"platformStats": {
"ios": 104,
"android": 72,
"windows": 14
},
"referrerStats": [
{ "domain": "instagram.com", "views": 89 },
{ "domain": "direct", "views": 54 }
],
"totalClicks": 211,
"clicksByLink": [
{
"id": "shop_0_lx8abc",
"count": 88,
"totalClicks": 88,
"title": "Shop Now",
"url": "https://example.com/shop",
"type": "standard",
"dailyClicks": [
{ "date": "2026-01-15", "clicks": 32 },
{ "date": "2026-01-16", "clicks": 56 }
]
},
{
"id": "adult-18plus-btn",
"count": 123,
"totalClicks": 123,
"title": "Yes, I'm 18+",
"url": "https://example.com/adult-destination",
"type": "adult-confirmation",
"dailyClicks": [
{ "date": "2026-01-15", "clicks": 46 },
{ "date": "2026-01-16", "clicks": 77 }
]
}
],
"adultConfirmation": {
"clicks": 123,
"rate": 64.74
}
}
{
"error": "Link or website not found"
}
Request
Headers
Path Parameters
string
required
The link or website identifier, resolved like GET /v1/links/: the link
id, the slug, or the short URL (URL-encoded). For websites, the custom domain also works. For an active, non-viewer team member, the team owner’s links resolve too.Examples: my-bio-page, tapmy.social__my-link, https%3A%2F%2Ftapmy.social%2Fmy-link, example.comQuery Parameters
string
Preset date range. Supported values are
last_7_days, last_30_days, last_90_days, this_month, last_month, and all_time.Example: last_30_daysstring
Custom range start date in
YYYY-MM-DD format. Must be used with to.Example: 2026-01-01string
Custom range end date in
YYYY-MM-DD format. Must be used with from.Example: 2026-01-31Bio website button clicks are returned in
clicksByLink. Each tracked button includes the link ID, title, URL, total clicks, and daily clicks for the selected range.Response
string
Resolved Firestore document ID used for analytics lookup.
string
Identifier from the request path.
string
Resource type, such as
Website or Deeplink.string
How the identifier was matched, such as
documentId, customSlug, or customDomain.number
Total views in the selected range.
array
object
View breakdown by device type.
string
Highest-view country in the selected range, excluding unknown values.
number
View count for
topCountry.string | null
Timestamp of the latest view, or
null when no view has been recorded.object
View breakdown by platform or operating system.
array
number
Total tracked clicks in the selected range. For bio websites, this is the total clicks across tracked buttons.
array
Click breakdown by tracked link or button.
Show properties
Show properties
string
Tracked link/button ID. Adult confirmation clicks use
adult-18plus-btn.number
Number of clicks for this link/button. This is kept for backwards compatibility.
number
Total clicks for this link/button in the selected range.
string
Tracked link/button title.
string
Tracked destination URL.
string
Tracked link/button type. Adult confirmation clicks use
adult-confirmation.object | null
curl https://api.bouncy.ai/v1/analytics/links/link_abc123xyz \
-H "Authorization: Bearer bcy_live_pk_YOUR_API_KEY"
curl "https://api.bouncy.ai/v1/analytics/links/link_abc123xyz?timeframe=last_30_days" \
-H "Authorization: Bearer bcy_live_pk_YOUR_API_KEY"
curl "https://api.bouncy.ai/v1/analytics/links/link_abc123xyz?from=2026-01-01&to=2026-01-31" \
-H "Authorization: Bearer bcy_live_pk_YOUR_API_KEY"
curl "https://api.bouncy.ai/v1/analytics/links/my-bio-page?timeframe=last_30_days" \
-H "Authorization: Bearer bcy_live_pk_YOUR_API_KEY"
const response = await fetch(
'https://api.bouncy.ai/v1/analytics/links/my-bio-page?timeframe=last_30_days',
{
headers: {
'Authorization': 'Bearer bcy_live_pk_YOUR_API_KEY'
}
}
);
const analytics = await response.json();
console.log(`Total views: ${analytics.totalViews}`);
console.log(`Total clicks: ${analytics.totalClicks}`);
console.log(analytics.clicksByLink.map(button => ({
id: button.id,
title: button.title,
totalClicks: button.totalClicks,
dailyClicks: button.dailyClicks
})));
import requests
response = requests.get(
'https://api.bouncy.ai/v1/analytics/links/link_abc123xyz',
headers={'Authorization': 'Bearer bcy_live_pk_YOUR_API_KEY'},
params={
'from': '2026-01-01',
'to': '2026-01-31'
}
)
analytics = response.json()
print(f"Total views: {analytics['totalViews']}")
print(f"Adult confirmations: {(analytics.get('adultConfirmation') or {}).get('clicks', 0)}")
{
"id": "my-bio-page",
"identifier": "my-bio-page",
"type": "Website",
"resolvedBy": "customSlug",
"totalViews": 190,
"dailyViews": [
{
"date": "2026-01-15",
"views": 74,
"clicks": 78,
"adultClicks": 46,
"countries": {
"us": 41,
"gb": 18
},
"devices": {
"mobile": 69,
"desktop": 5
},
"platforms": {
"ios": 43,
"android": 26,
"windows": 5
},
"referrers": {
"instagram.com": 38,
"direct": 22
}
}
],
"deviceStats": {
"mobile": 176,
"desktop": 14
},
"countryStats": [
{ "name": "United States", "views": 112 },
{ "name": "United Kingdom", "views": 49 }
],
"topCountry": "United States",
"topCountryViews": 112,
"lastViewed": "2026-01-31T19:22:10.000Z",
"platformStats": {
"ios": 104,
"android": 72,
"windows": 14
},
"referrerStats": [
{ "domain": "instagram.com", "views": 89 },
{ "domain": "direct", "views": 54 }
],
"totalClicks": 211,
"clicksByLink": [
{
"id": "shop_0_lx8abc",
"count": 88,
"totalClicks": 88,
"title": "Shop Now",
"url": "https://example.com/shop",
"type": "standard",
"dailyClicks": [
{ "date": "2026-01-15", "clicks": 32 },
{ "date": "2026-01-16", "clicks": 56 }
]
},
{
"id": "adult-18plus-btn",
"count": 123,
"totalClicks": 123,
"title": "Yes, I'm 18+",
"url": "https://example.com/adult-destination",
"type": "adult-confirmation",
"dailyClicks": [
{ "date": "2026-01-15", "clicks": 46 },
{ "date": "2026-01-16", "clicks": 77 }
]
}
],
"adultConfirmation": {
"clicks": 123,
"rate": 64.74
}
}
{
"error": "Link or website not found"
}