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.