API Reference
The IntentEmoji API provides four endpoints for emoji placement, analysis, repositioning, and suggestion. All endpoints accept JSON and return JSON. Base URL: https://api.intentemoji.com
Authentication
All API requests require an API key passed in the Authorization header.
Authorization: Bearer ie_live_abc123def456
API keys are available in your dashboard. Keys are prefixed with ie_live_ for production and ie_test_ for development.
Rate Limits
| Plan | Requests/month | Requests/minute | Max text length |
|---|---|---|---|
| Free | 500 | 10 | 2,000 characters |
| Pro | 10,000 | 60 | 10,000 characters |
| Enterprise | Unlimited | 300 | 50,000 characters |
Rate limit headers are included in every response:
X-RateLimit-Limit: 10000
X-RateLimit-Remaining: 9847
X-RateLimit-Reset: 1711929600
POST /v1/enhance
POST/v1/enhance
Takes plain text and returns enhanced text with intentional emoji placement based on the selected style profile.
Request Body
| Field | Type | Required | Description |
|---|---|---|---|
text |
string | Yes | The plain text to enhance. Max length depends on plan. |
profile |
string | No | Style profile. One of: casual, professional, technical, marketing, educational, ai_output. Defaults to professional. |
density |
string | No | Override density. One of: low, moderate, high. Defaults to profile setting. |
preserve_existing |
boolean | No | If true, keeps any emoji already in the text and only adds/repositions. Defaults to true. |
Request Example
curl -X POST https://api.intentemoji.com/v1/enhance \
-H "Authorization: Bearer ie_live_abc123def456" \
-H "Content-Type: application/json" \
-d '{
"text": "We shipped the new billing system today. Invoices now generate in under 2 seconds. The old system took 15 seconds on average.",
"profile": "professional",
"density": "moderate"
}'
Response
{
"text": "š We shipped the new billing system today.\n\nā” Invoices now generate in under 2 seconds. The old system took 15 seconds on average.",
"emoji_count": 2,
"positions": [
{
"emoji": "š",
"position": "preload",
"index": 0,
"context": "We shipped the new billing system today."
},
{
"emoji": "ā”",
"position": "preload",
"index": 44,
"context": "Invoices now generate in under 2 seconds."
}
],
"profile": "professional",
"density": "moderate",
"preload_ratio": 1.0,
"usage": {
"characters_in": 124,
"characters_out": 132
}
}
POST /v1/analyze
POST/v1/analyze
Analyzes existing text and returns a breakdown of emoji placement, density, preload ratio, and suggestions for improvement.
Request Body
| Field | Type | Required | Description |
|---|---|---|---|
text |
string | Yes | The text to analyze. Can contain emoji or be plain text. |
target_profile |
string | No | Compare against a profile's ideal metrics. Defaults to professional. |
Request Example
curl -X POST https://api.intentemoji.com/v1/analyze \
-H "Authorization: Bearer ie_live_abc123def456" \
-H "Content-Type: application/json" \
-d '{
"text": "Just deployed the update š Everything looks good so far š Will monitor overnight š",
"target_profile": "professional"
}'
Response
{
"emoji_count": 3,
"sentence_count": 3,
"density": "high",
"density_ratio": 1.0,
"positions": [
{ "emoji": "š", "position": "postload", "index": 28 },
{ "emoji": "š", "position": "postload", "index": 57 },
{ "emoji": "š", "position": "postload", "index": 82 }
],
"preload_count": 0,
"postload_count": 3,
"inline_count": 0,
"preload_ratio": 0.0,
"target_profile": "professional",
"score": 32,
"suggestions": [
"All emoji is postloaded. Consider repositioning to preload for cognitive priming.",
"Density is higher than the professional profile target. Consider reducing to 1 emoji per 2-4 sentences.",
"š is informal for professional context. Consider ā
or removing."
]
}
POST /v1/reposition
POST/v1/reposition
Takes text with existing emoji and repositions them according to IntentEmoji placement rules. Does not add or remove emoji. Only moves them.
Request Body
| Field | Type | Required | Description |
|---|---|---|---|
text |
string | Yes | Text with emoji to reposition. |
profile |
string | No | Style profile to guide repositioning. Defaults to professional. |
target_preload_ratio |
number | No | Override the profile's preload ratio. Float between 0.0 and 1.0. |
Request Example
curl -X POST https://api.intentemoji.com/v1/reposition \
-H "Authorization: Bearer ie_live_abc123def456" \
-H "Content-Type: application/json" \
-d '{
"text": "The server crashed at 3am š„ We lost 2 hours of data š¬ Root cause was a memory leak š",
"profile": "professional"
}'
Response
{
"text": "š„ The server crashed at 3am. We lost 2 hours of data. š Root cause was a memory leak.",
"repositioned": [
{
"emoji": "š„",
"from": "postload",
"to": "preload",
"reason": "Moved to preload position to prime reader for severity of the incident."
},
{
"emoji": "š¬",
"action": "removed",
"reason": "Informal for professional profile. Not repositioned."
},
{
"emoji": "š",
"from": "postload",
"to": "preload",
"reason": "Moved to preload position to signal technical root cause."
}
],
"preload_ratio": 1.0,
"emoji_removed": 1,
"emoji_moved": 2
}
GET /v1/suggest
GET/v1/suggest
Given a text snippet, suggests the best emoji and placement. Returns multiple options ranked by semantic congruence. Does not modify the text.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
text |
string | Yes | The text to get suggestions for. URL-encoded. |
profile |
string | No | Style profile for context. Defaults to professional. |
limit |
integer | No | Max number of suggestions. Defaults to 5, max 20. |
Request Example
curl "https://api.intentemoji.com/v1/suggest?text=Deployment%20complete.%20All%20tests%20passing.&profile=technical&limit=3" \
-H "Authorization: Bearer ie_live_abc123def456"
Response
{
"suggestions": [
{
"emoji": "ā
",
"position": "preload",
"confidence": 0.94,
"reason": "Strong semantic match for completion and success. High congruence with 'complete' and 'passing'."
},
{
"emoji": "š",
"position": "preload",
"confidence": 0.87,
"reason": "Common deployment indicator. Slightly less precise than ā
but widely recognized in technical contexts."
},
{
"emoji": "š¢",
"position": "preload",
"confidence": 0.82,
"reason": "Status indicator. Maps well to 'all tests passing' as a green/success signal."
}
],
"profile": "technical",
"text": "Deployment complete. All tests passing."
}
Error Codes
The API returns standard HTTP status codes with a JSON error body.
{
"error": {
"code": "rate_limit_exceeded",
"message": "You have exceeded your rate limit of 10 requests per minute.",
"status": 429
}
}
| Status | Code | Description |
|---|---|---|
| 400 | invalid_request |
Missing required field or invalid parameter value. |
| 401 | unauthorized |
Missing or invalid API key. |
| 403 | forbidden |
API key does not have access to this endpoint or feature. |
| 404 | not_found |
Endpoint does not exist. |
| 413 | text_too_long |
Text exceeds the maximum length for your plan. |
| 429 | rate_limit_exceeded |
Too many requests. Check rate limit headers. |
| 500 | internal_error |
Something went wrong on our end. Retry with exponential backoff. |
Versioning
The API is versioned in the URL path (/v1/). Breaking changes will be introduced in new versions. Non-breaking additions (new fields in responses, new optional parameters) may be added to existing versions without notice.