- Overview
- Authentication
- Error Handling
- Rate Limiting
- API Endpoints
- Data Models
- Examples
- SDKs and Libraries
The ICY API provides programmatic access to influencer discovery, brand alignment analysis, campaign management, and analytics features. The API follows REST principles and returns JSON responses.
https://api.icy-platform.com/api
Current version: v1
All requests should include:
Content-Type: application/json
ICY uses JWT (JSON Web Tokens) for authentication. Include the token in the Authorization header for all authenticated requests.
POST /auth/signup
Content-Type: application/json
{
"email": "user@example.com",
"password": "securepassword123",
"confirmPassword": "securepassword123"
}POST /auth/login
Content-Type: application/json
{
"email": "user@example.com",
"password": "securepassword123"
}Response:
{
"success": true,
"data": {
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"user": {
"id": "64f1234567890abcdef12345",
"email": "user@example.com",
"createdAt": "2024-01-15T10:30:00Z"
}
}
}Include the token in the Authorization header:
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...GET /auth/session
Authorization: Bearer {token}The API uses standard HTTP status codes and returns consistent error responses.
{
"success": false,
"error": {
"code": "ERROR_CODE",
"message": "Human-readable error message",
"details": {
"field": "Additional error context"
}
}
}200- Success201- Created400- Bad Request401- Unauthorized403- Forbidden404- Not Found429- Too Many Requests500- Internal Server Error
VALIDATION_ERROR- Request validation failedAUTHENTICATION_REQUIRED- Missing or invalid authenticationRESOURCE_NOT_FOUND- Requested resource doesn't existRATE_LIMIT_EXCEEDED- Too many requestsINFLUENCER_NOT_FOUND- Specific influencer not foundCAMPAIGN_NOT_FOUND- Specific campaign not foundTEMPLATE_NOT_FOUND- Specific template not found
API requests are rate-limited to ensure fair usage:
- Standard endpoints: 100 requests per 15 minutes
- AI endpoints: 20 requests per hour
- Search endpoints: 200 requests per hour
Rate limit headers are included in responses:
X-RateLimit-Limit: 100
X-RateLimit-Remaining: 95
X-RateLimit-Reset: 1640995200Create a new user account.
Request Body:
{
"email": "string (required)",
"password": "string (required, min 8 chars)",
"confirmPassword": "string (required)"
}Authenticate user and receive token.
Request Body:
{
"email": "string (required)",
"password": "string (required)"
}Validate current session token.
Headers: Authorization: Bearer {token}
Invalidate current session token.
Headers: Authorization: Bearer {token}
Create or update brand profile.
Headers: Authorization: Bearer {token}
Request Body:
{
"productDetails": {
"name": "string (required)",
"category": "string (required)",
"description": "string"
},
"targetAudience": {
"demographics": ["string"],
"interests": ["string"],
"location": ["string"]
},
"brandTone": "professional|casual|friendly",
"campaignGoals": ["awareness", "sales", "ugc", "partnerships"],
"platformPreferences": ["instagram", "youtube"],
"budgetRange": "micro|mid-tier|macro|mixed"
}Retrieve current brand profile.
Headers: Authorization: Bearer {token}
Update existing brand profile.
Headers: Authorization: Bearer {token}
Request Body: Same as POST /brand/setup (partial updates allowed)
Delete brand profile.
Headers: Authorization: Bearer {token}
Search for influencers based on criteria.
Query Parameters:
niche(string) - Filter by niche categoryminFollowers(number) - Minimum follower countmaxFollowers(number) - Maximum follower countminEngagement(number) - Minimum engagement rate (0-1)maxEngagement(number) - Maximum engagement rate (0-1)location(string) - Filter by locationhasEmail(boolean) - Only influencers with emailverified(boolean) - Only verified accountsbusinessAccount(boolean) - Only business accountsfollowerTier(string) - micro|mid-tier|macrosortBy(string) - followers|engagement|relevancesortOrder(string) - asc|desclimit(number) - Results per page (max 50)offset(number) - Pagination offset
Response:
{
"success": true,
"data": {
"influencers": [
{
"id": "string",
"username": "string",
"fullName": "string",
"followerCount": "number",
"engagementRate": "number",
"niche": "string",
"location": "string",
"verified": "boolean",
"businessAccount": "boolean",
"hasContactInfo": "boolean",
"followerTier": "string"
}
],
"total": "number",
"filters": "object"
}
}Get dataset statistics.
Response:
{
"success": true,
"data": {
"totalInfluencers": "number",
"withEmail": "number",
"verified": "number",
"businessAccounts": "number",
"followerTiers": {
"micro": "number",
"mid-tier": "number",
"macro": "number"
},
"niches": {
"category": "count"
},
"countries": {
"country": "count"
}
}
}Get specific influencer details.
Parameters:
id(string) - Influencer ID
Response:
{
"success": true,
"data": {
"id": "string",
"username": "string",
"fullName": "string",
"bio": "string",
"followerCount": "number",
"followingCount": "number",
"postCount": "number",
"engagementRate": "number",
"avgLikes": "number",
"avgComments": "number",
"niche": "string",
"location": "string",
"verified": "boolean",
"businessAccount": "boolean",
"contactInfo": {
"email": "string",
"website": "string"
}
}
}Analyze influencer for brand alignment.
Request Body:
{
"influencerId": "string (required)",
"brandCriteria": {
"niche": "string",
"targetAudience": ["string"],
"keywords": ["string"]
}
}Validate influencer data structure.
Request Body:
{
"id": "string",
"username": "string",
"followerCount": "number",
"engagementRate": "number"
}Create a new campaign.
Headers: Authorization: Bearer {token}
Request Body:
{
"name": "string (required)",
"description": "string",
"targetInfluencers": ["string"],
"messageTemplateId": "string",
"campaignGoals": ["string"],
"budget": "number",
"startDate": "ISO date string",
"endDate": "ISO date string"
}List user's campaigns.
Headers: Authorization: Bearer {token}
Query Parameters:
status(string) - Filter by statuslimit(number) - Results per pageoffset(number) - Pagination offset
Get specific campaign details.
Headers: Authorization: Bearer {token}
Parameters:
id(string) - Campaign ID
Update campaign.
Headers: Authorization: Bearer {token}
Parameters:
id(string) - Campaign ID
Request Body: Partial campaign object
Send campaign messages.
Headers: Authorization: Bearer {token}
Parameters:
id(string) - Campaign ID
Request Body:
{
"customMessage": "string (optional)",
"sendImmediately": "boolean"
}Delete campaign.
Headers: Authorization: Bearer {token}
Parameters:
id(string) - Campaign ID
Create message template.
Headers: Authorization: Bearer {token}
Request Body:
{
"name": "string (required)",
"subject": "string (required)",
"content": "string (required)",
"type": "collaboration|partnership|event|follow_up",
"brandTone": "professional|casual|friendly"
}List user's templates.
Headers: Authorization: Bearer {token}
Get specific template.
Headers: Authorization: Bearer {token}
Update template.
Headers: Authorization: Bearer {token}
Personalize template for specific influencer.
Headers: Authorization: Bearer {token}
Request Body:
{
"influencerId": "string (required)",
"customData": {
"brandName": "string",
"senderName": "string",
"recentPostTopic": "string"
}
}Delete template.
Headers: Authorization: Bearer {token}
Get dashboard analytics.
Headers: Authorization: Bearer {token}
Response:
{
"success": true,
"data": {
"totalCampaigns": "number",
"activeCampaigns": "number",
"totalInfluencersContacted": "number",
"overallMetrics": {
"messagesSent": "number",
"deliveryRate": "number",
"responseRate": "number",
"engagementRate": "number"
},
"recentActivity": ["object"]
}
}Get campaign-specific analytics.
Headers: Authorization: Bearer {token}
Export campaign data as CSV.
Headers: Authorization: Bearer {token}
Get performance trends.
Headers: Authorization: Bearer {token}
Query Parameters:
period(string) - 7days|30days|90days|1year
Analyze influencer content authenticity.
Request Body:
{
"influencerId": "string (required)",
"analysisType": "content_authenticity"
}Analyze brand alignment using AI.
Request Body:
{
"influencerId": "string (required)",
"brandCriteria": {
"niche": "string",
"targetAudience": ["string"],
"keywords": ["string"]
}
}Generate AI-powered outreach message.
Request Body:
{
"influencerId": "string (required)",
"brandInfo": {
"name": "string (required)",
"description": "string",
"tone": "professional|casual|friendly"
},
"messageType": "initial_outreach|follow_up|partnership",
"campaignType": "string"
}Get AI-powered influencer recommendations.
Request Body:
{
"brandCriteria": {
"niche": "string",
"targetAudience": ["string"],
"keywords": ["string"]
},
"campaignType": "string",
"budget": "string",
"maxResults": "number"
}{
"_id": "ObjectId",
"email": "string",
"password": "string (hashed)",
"createdAt": "Date",
"lastLogin": "Date"
}{
"_id": "ObjectId",
"userId": "ObjectId",
"productDetails": {
"name": "string",
"category": "string",
"description": "string"
},
"targetAudience": {
"demographics": ["string"],
"interests": ["string"],
"location": ["string"]
},
"brandTone": "string",
"campaignGoals": ["string"],
"platformPreferences": ["string"],
"budgetRange": "string",
"createdAt": "Date",
"updatedAt": "Date"
}{
"id": "string",
"username": "string",
"fullName": "string",
"bio": "string",
"followerCount": "number",
"followingCount": "number",
"postCount": "number",
"engagementRate": "number",
"avgLikes": "number",
"avgComments": "number",
"niche": "string",
"location": "string",
"verified": "boolean",
"businessAccount": "boolean",
"contactInfo": {
"email": "string",
"website": "string"
},
"followerTier": "string",
"hasContactInfo": "boolean"
}{
"_id": "ObjectId",
"userId": "ObjectId",
"brandId": "ObjectId",
"name": "string",
"description": "string",
"targetInfluencers": ["string"],
"messageTemplateId": "ObjectId",
"personalizedMessages": [{
"influencerId": "string",
"message": "string",
"status": "string",
"sentAt": "Date",
"deliveredAt": "Date"
}],
"campaignGoals": ["string"],
"budget": "number",
"status": "string",
"startDate": "Date",
"endDate": "Date",
"createdAt": "Date",
"updatedAt": "Date"
}{
"_id": "ObjectId",
"userId": "ObjectId",
"name": "string",
"subject": "string",
"content": "string",
"type": "string",
"brandTone": "string",
"placeholders": ["string"],
"createdAt": "Date",
"updatedAt": "Date"
}// Sign up
const signupResponse = await fetch('/api/auth/signup', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
email: 'brand@example.com',
password: 'securepass123',
confirmPassword: 'securepass123'
})
});
const { token } = (await signupResponse.json()).data;const brandResponse = await fetch('/api/brand/setup', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${token}`
},
body: JSON.stringify({
productDetails: {
name: 'EcoFashion Brand',
category: 'Fashion',
description: 'Sustainable fashion for conscious consumers'
},
targetAudience: {
demographics: ['25-35', 'Female'],
interests: ['Fashion', 'Sustainability', 'Lifestyle'],
location: ['United States', 'Canada']
},
brandTone: 'professional',
campaignGoals: ['awareness', 'sales'],
platformPreferences: ['instagram'],
budgetRange: 'mid-tier'
})
});const searchResponse = await fetch(
'/api/influencers/search?niche=fashion&minFollowers=50000&maxFollowers=500000&hasEmail=true&limit=10'
);
const { influencers } = (await searchResponse.json()).data;const analysisResponse = await fetch('/api/influencers/analyze', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${token}`
},
body: JSON.stringify({
influencerId: influencers[0].id,
brandCriteria: {
niche: 'fashion',
targetAudience: ['25-35', 'Female'],
keywords: ['sustainable', 'fashion', 'eco-friendly']
}
})
});const messageResponse = await fetch('/api/ai/generate-message', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
influencerId: influencers[0].id,
brandInfo: {
name: 'EcoFashion Brand',
description: 'Sustainable fashion for conscious consumers',
tone: 'professional'
},
messageType: 'initial_outreach'
})
});const campaignResponse = await fetch('/api/campaigns', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${token}`
},
body: JSON.stringify({
name: 'Spring Sustainability Campaign',
description: 'Promoting our new eco-friendly spring collection',
targetInfluencers: [influencers[0].id],
campaignGoals: ['awareness', 'sales'],
budget: 5000
})
});
const { campaign } = (await campaignResponse.json()).data;const sendResponse = await fetch(`/api/campaigns/${campaign._id}/send`, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${token}`
},
body: JSON.stringify({
sendImmediately: true
})
});const analyticsResponse = await fetch(`/api/analytics/campaigns/${campaign._id}`, {
headers: { 'Authorization': `Bearer ${token}` }
});
const metrics = (await analyticsResponse.json()).data.metrics;
console.log('Campaign Performance:', metrics);npm install icy-api-sdkconst ICY = require('icy-api-sdk');
const client = new ICY({
apiKey: 'your-api-key',
baseURL: 'https://api.icy-platform.com/api'
});
// Search influencers
const influencers = await client.influencers.search({
niche: 'fashion',
minFollowers: 10000
});
// Create campaign
const campaign = await client.campaigns.create({
name: 'My Campaign',
targetInfluencers: ['influencer-id']
});pip install icy-python-sdkfrom icy_sdk import ICYClient
client = ICYClient(api_key='your-api-key')
# Search influencers
influencers = client.influencers.search(
niche='fashion',
min_followers=10000
)
# Analyze brand alignment
analysis = client.influencers.analyze(
influencer_id='influencer-id',
brand_criteria={
'niche': 'fashion',
'keywords': ['sustainable', 'eco-friendly']
}
)curl -X GET "https://api.icy-platform.com/api/influencers/search?niche=fashion&limit=5" \
-H "Content-Type: application/json"curl -X POST "https://api.icy-platform.com/api/campaigns" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_TOKEN" \
-d '{
"name": "Test Campaign",
"targetInfluencers": ["influencer-id"],
"campaignGoals": ["awareness"]
}'For more examples and detailed integration guides, visit our Developer Portal.