Integrate Build Emotion with your tools and workflows. List projects, read project details, manage marketing activities, and manage promotional texts programmatically.
Go to your Settings page and generate an API key.
Fetch all projects for your account to get project IDs and context (focus, target customer, emotions):
curl https://buildemotion.com/api/projects/ \ -H "Authorization: Bearer sk_live_your_api_key"
The project ID is returned by GET /api/projects/ or found in your project URL:
https://buildemotion.com/user/projects/your-project-id-hereUse the project id field in all project-scoped API requests.
Include your API key in the Authorization header (recommended) or X-API-Key header:
Authorization: Bearer sk_live_your_api_key_hereX-API-Key: sk_live_your_api_key_hereCreate a marketing activity:
curl -X POST https://buildemotion.com/api/projects/{project_id}/marketing-activities/ \
-H "Authorization: Bearer sk_live_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"category": "social",
"subcategory": "Twitter/X",
"description": "Posted about new feature launch",
"date": "2026-01-15",
"time": "14:30",
"link": "https://twitter.com/yourpost"
}'All API requests require authentication using an API key. You can authenticate using any of the following methods:
Authorization: Bearer sk_live_your_api_key_hereX-API-Key: sk_live_your_api_key_here?api_key=sk_live_your_api_key_herehttps://buildemotion.comAll API endpoints are relative to this base URL.
/api/projects/List all projects for the authenticated user. Returns project metadata including emotions, focus, service description, and target customer profile.
GET https://buildemotion.com/api/projects/ Authorization: Bearer sk_live_your_api_key
{
"projects": [
{
"id": "abc123",
"name": "My SaaS",
"emotions": ["trust", "excitement"],
"focusDescription": "Help founders track marketing consistently",
"category": "Technology",
"projectUrl": "https://example.com",
"serviceDescription": "A marketing activity tracker for indie hackers.",
"faviconUrl": "https://example.com/favicon.ico",
"orderNumber": 1,
"isPublic": false,
"targetCustomer": {
"demographics": "Solo founders, indie hackers",
"painPoints": "Inconsistent marketing, no visibility",
"desires": "Stay consistent and see progress",
"behaviors": "Build in public, post on X",
"channels": "Twitter/X, directories, email",
"searchTiming": "When launching or struggling with marketing",
"currentSolution": "Spreadsheets, memory",
"purchaseBlockers": "Budget, time to set up"
},
"created": "2026-01-15T10:00:00Z",
"modified": "2026-01-15T10:00:00Z"
}
]
}/api/projects/{project_id}/Get full details for a single project, including focus description, service description, emotions, category, and target customer fields.
GET https://buildemotion.com/api/projects/abc123/ Authorization: Bearer sk_live_your_api_key
{
"project": {
"id": "abc123",
"name": "My SaaS",
"emotions": ["trust", "excitement"],
"focusDescription": "Help founders track marketing consistently",
"category": "Technology",
"projectUrl": "https://example.com",
"serviceDescription": "A marketing activity tracker for indie hackers.",
"faviconUrl": "https://example.com/favicon.ico",
"orderNumber": 1,
"isPublic": false,
"targetCustomer": {
"demographics": "Solo founders, indie hackers",
"painPoints": "Inconsistent marketing, no visibility",
"desires": "Stay consistent and see progress",
"behaviors": "Build in public, post on X",
"channels": "Twitter/X, directories, email",
"searchTiming": "When launching or struggling with marketing",
"currentSolution": "Spreadsheets, memory",
"purchaseBlockers": "Budget, time to set up"
},
"created": "2026-01-15T10:00:00Z",
"modified": "2026-01-15T10:00:00Z"
}
}/api/projects/Create a new project.
name (required) - Project nameemotions (optional) - Array of up to 3 emotion slugsfocusDescription (optional) - Short focus statement (5-10 words)category (optional) - Business categoryprojectUrl (optional) - Public URL of the projectserviceDescription (optional) - One-paragraph descriptiontargetCustomer (optional) - Object with demographics, painPoints, desires, behaviors, channels, searchTiming, currentSolution, purchaseBlockersPOST https://buildemotion.com/api/projects/
Authorization: Bearer sk_live_your_api_key
Content-Type: application/json
{
"name": "My SaaS",
"emotions": ["trust", "excitement"],
"focusDescription": "Help founders track marketing consistently",
"category": "Technology",
"projectUrl": "https://example.com",
"serviceDescription": "A marketing activity tracker for indie hackers.",
"targetCustomer": {
"demographics": "Solo founders, indie hackers",
"painPoints": "Inconsistent marketing, no visibility"
}
}{
"project": {
"id": "abc123",
"name": "My SaaS",
"emotions": ["trust", "excitement"],
"focusDescription": "Help founders track marketing consistently",
"category": "Technology",
"projectUrl": "https://example.com",
"serviceDescription": "A marketing activity tracker for indie hackers.",
"targetCustomer": { "demographics": "Solo founders, indie hackers", "painPoints": "Inconsistent marketing, no visibility" },
"created": "2026-01-15T10:00:00Z",
"modified": "2026-01-15T10:00:00Z"
}
}/api/projects/{project_id}/Update a project. PATCH supports partial updates, PUT requires all fields.
PATCH https://buildemotion.com/api/projects/abc123/
Authorization: Bearer sk_live_your_api_key
Content-Type: application/json
{
"focusDescription": "Updated focus statement",
"emotions": ["trust", "confidence"]
}{
"project": { /* updated project object */ }
}/api/projects/{project_id}/Delete a project and all of its nested data.
{
"status": "deleted"
}/api/projects/{project_id}/marketing-activities/List all marketing activities for a project. Supports optional date filtering.
from_date (optional) - Filter activities from this date (YYYY-MM-DD)to_date (optional) - Filter activities until this date (YYYY-MM-DD)GET https://buildemotion.com/api/projects/abc123/marketing-activities/?from_date=2026-01-01&to_date=2026-01-31 Authorization: Bearer sk_live_your_api_key
{
"marketingActivities": [
{
"id": "activity_123",
"projectId": "abc123",
"category": "social",
"subcategory": "Twitter/X",
"description": "Posted about new feature",
"date": "2026-01-15",
"time": "14:30",
"link": "https://twitter.com/yourpost",
"created": "2026-01-15T14:30:00Z",
"modified": "2026-01-15T14:30:00Z"
}
]
}/api/projects/{project_id}/marketing-activities/Create a new marketing activity.
category (required) - One of: email, directory, social, seo, influencers, paid, offline, othersubcategory (required) - Subcategory string (see categories below)description (required) - Description of the marketing activitydate (required) - Date in YYYY-MM-DD formattime (optional) - Time in HH:MM format (24-hour)link (optional) - URL related to the activityPOST https://buildemotion.com/api/projects/abc123/marketing-activities/
Authorization: Bearer sk_live_your_api_key
Content-Type: application/json
{
"category": "social",
"subcategory": "Twitter/X",
"description": "Posted about new feature launch",
"date": "2026-01-15",
"time": "14:30",
"link": "https://twitter.com/yourpost"
}{
"marketingActivity": {
"id": "activity_123",
"projectId": "abc123",
"category": "social",
"subcategory": "Twitter/X",
"description": "Posted about new feature launch",
"date": "2026-01-15",
"time": "14:30",
"link": "https://twitter.com/yourpost",
"created": "2026-01-15T14:30:00Z",
"modified": "2026-01-15T14:30:00Z"
}
}/api/projects/{project_id}/marketing-activities/{activity_id}/Get a specific marketing activity by ID.
{
"marketingActivity": {
"id": "activity_123",
"projectId": "abc123",
"category": "social",
"subcategory": "Twitter/X",
"description": "Posted about new feature",
"date": "2026-01-15",
"time": "14:30",
"link": "https://twitter.com/yourpost",
"created": "2026-01-15T14:30:00Z",
"modified": "2026-01-15T14:30:00Z"
}
}/api/projects/{project_id}/marketing-activities/{activity_id}/Update a marketing activity. PATCH supports partial updates, PUT requires all fields.
PATCH https://buildemotion.com/api/projects/abc123/marketing-activities/activity_123/
Authorization: Bearer sk_live_your_api_key
Content-Type: application/json
{
"description": "Updated description",
"link": "https://twitter.com/updatedpost"
}/api/projects/{project_id}/marketing-activities/{activity_id}/Delete a marketing activity.
{
"status": "deleted"
}/api/projects/{project_id}/promotional-texts/List all promotional texts for a project (headlines, content, and target platform).
GET https://buildemotion.com/api/projects/abc123/promotional-texts/ Authorization: Bearer sk_live_your_api_key
{
"promotionalTexts": [
{
"id": "text_123",
"projectId": "abc123",
"headline": "Launch on Product Hunt",
"content": "We help indie hackers track every marketing action...",
"targetPlatform": "Directory",
"created": "2026-01-15T10:00:00Z",
"modified": "2026-01-15T10:00:00Z"
}
]
}/api/projects/{project_id}/promotional-texts/Create a new promotional text for a project.
headline (required) - Short title for the promotional textcontent (required) - Full promotional copytargetPlatform (required) - Platform label (see Target Platforms below)POST https://buildemotion.com/api/projects/abc123/promotional-texts/
Authorization: Bearer sk_live_your_api_key
Content-Type: application/json
{
"headline": "Launch on Product Hunt",
"content": "We help indie hackers track every marketing action...",
"targetPlatform": "Directory"
}{
"promotionalText": {
"id": "text_123",
"projectId": "abc123",
"headline": "Launch on Product Hunt",
"content": "We help indie hackers track every marketing action...",
"targetPlatform": "Directory",
"created": "2026-01-15T10:00:00Z",
"modified": "2026-01-15T10:00:00Z"
}
}/api/projects/{project_id}/promotional-texts/{promotional_text_id}/Get a specific promotional text by ID.
{
"promotionalText": {
"id": "text_123",
"projectId": "abc123",
"headline": "Launch on Product Hunt",
"content": "We help indie hackers track every marketing action...",
"targetPlatform": "Directory",
"created": "2026-01-15T10:00:00Z",
"modified": "2026-01-15T10:00:00Z"
}
}/api/projects/{project_id}/promotional-texts/{promotional_text_id}/Update a promotional text. PATCH supports partial updates, PUT requires all fields.
headline — Short title for the promotional textcontent — Full promotional copytargetPlatform — Platform label (see Target Platforms below)PATCH https://buildemotion.com/api/projects/abc123/promotional-texts/text_123/
Authorization: Bearer sk_live_your_api_key
Content-Type: application/json
{
"headline": "Updated launch headline",
"content": "Updated promotional copy for directories."
}{
"promotionalText": {
"id": "text_123",
"projectId": "abc123",
"headline": "Updated launch headline",
"content": "Updated promotional copy for directories.",
"targetPlatform": "Directory",
"created": "2026-01-15T10:00:00Z",
"modified": "2026-01-16T09:00:00Z"
}
}/api/projects/{project_id}/promotional-texts/{promotional_text_id}/Delete a promotional text.
{
"status": "deleted"
}Use these values for targetPlatform when updating promotional texts. Custom platform names are also accepted.
Use these category and subcategory values when creating marketing activities:
The API uses standard HTTP status codes. Error responses include a message in the response body:
{
"error": "Authentication required. Provide valid API key in Authorization header (Bearer sk_live_...) or user session."
}{
"error": "Category is required"
}{
"error": "Project not found"
}const createMarketingActivity = async (projectId, activityData) => {
const response = await fetch(
`https://buildemotion.com/api/projects/${projectId}/marketing-activities/`,
{
method: 'POST',
headers: {
'Authorization': 'Bearer sk_live_your_api_key',
'Content-Type': 'application/json',
},
body: JSON.stringify({
category: 'social',
subcategory: 'Twitter/X',
description: 'Posted about new feature',
date: '2026-01-15',
time: '14:30',
link: 'https://twitter.com/yourpost'
})
}
);
return await response.json();
};import requests
API_KEY = "sk_live_your_api_key"
BASE_URL = "https://buildemotion.com"
def create_marketing_activity(project_id, activity_data):
url = f"{BASE_URL}/api/projects/{project_id}/marketing-activities/"
headers = {
"Authorization": f"Bearer {API_KEY}",
"Content-Type": "application/json"
}
response = requests.post(url, json=activity_data, headers=headers)
return response.json()
# Example usage
activity = {
"category": "social",
"subcategory": "Twitter/X",
"description": "Posted about new feature",
"date": "2026-01-15",
"time": "14:30",
"link": "https://twitter.com/yourpost"
}
result = create_marketing_activity("your-project-id", activity)curl -X POST https://buildemotion.com/api/projects/abc123/marketing-activities/ \
-H "Authorization: Bearer sk_live_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"category": "social",
"subcategory": "Twitter/X",
"description": "Posted about new feature",
"date": "2026-01-15",
"time": "14:30",
"link": "https://twitter.com/yourpost"
}'from_date and to_date parameters to reduce response size and improve performance.Get your API key and start integrating Build Emotion into your workflow.