SlotEmoji API Documentation

Base URL

https://yourdomain.com

Slot Endpoints

GET /api/slots

Get all available slots with optional filtering and pagination

Query Parameters:

limit - Number of results (default: 50, max: 1000)
offset - Skip N results for pagination
provider - Filter by provider name
minRtp - Minimum RTP percentage
volatility - Filter by volatility (low, medium, high, extreme)
hasBonusBuy - Filter bonus buy slots (true/false)

Examples:

GET /api/slots?limit=10
GET /api/slots?provider=Pragmatic Play&minRtp=96
GET /api/slots?volatility=high&hasBonusBuy=true

Response:

{
  "slots": [...],
  "count": 10,
  "total": 169
}

GET /api/slots/[id]

Get a specific slot by ID or slug

GET /api/slots/cmfcts4we001ddoumjxzez8pj// By ID
GET /api/slots/wild-swarm// By slug

Response includes full slot details:

{
  "id": "...",
  "name": "Wild Swarm",
  "slug": "wild-swarm",
  "provider": "Push Gaming",
  "rtp": 97.03,
  "volatility": "High",
  "maxWin": 4569,
  "emojiTags": ["đŸ”Ĩ", "🌋", "🌊"],
  "theme": ["adventure"],
  "features": ["free spins"],
  "shuffleUrl": "https://...",
  "stakeUrl": "https://...",
  "description": "...",
  "review": "...",
  "rating": 4.5,
  "pros": [...],
  "cons": [...]
}

Play API - GET /api/play/[emojis]

Redirects to a slot matching the emoji(s)

Examples:

GET /api/play/🎰// Single emoji
GET /api/play/🎰💎🍒// Multiple emojis

Note: This endpoint performs a 302 redirect to the matching slot page

Match API - POST /api/match

Find slots matching specific emoji combinations

Request Body:

{
  "emojis": ["🎰", "💎", "🍒"]
}

Response:

{
  "slots": [
    {
      "id": 1,
      "name": "Diamond Cherries",
      "url": "https://example.com/slot/1",
      "emojis": ["💎", "🍒"],
      "rtp": 96.5
    }
  ]
}

Emoji Endpoints

GET /api/emojis

Get emoji usage statistics across all slots

Query Parameters:

format=aggregated (default) - Returns emoji usage counts
format=raw - Returns raw emoji mappings from database

Aggregated Response (default):

GET /api/emojis
{
  "emojis": [
    {
      "emoji": "🎲",
      "count": 48,
      "category": "Uncategorized"
    },
    {
      "emoji": "🃏",
      "count": 45,
      "category": "Uncategorized"
    }
  ],
  "total": 131,
  "totalUsage": 1205
}

GET /api/emojis/categories

Get emojis grouped by category

GET /api/emojis/categories
{
  "categories": {
    "luck": ["🍀", "🎲", "🎰"],
    "wealth": ["💎", "💰", "đŸ’ĩ"],
    "energy": ["đŸ”Ĩ", "⚡", "â˜„ī¸"]
  }
}

GET /api/emojis/stats

Get detailed emoji statistics and analytics

GET /api/emojis/stats
{
  "totalEmojis": 131,
  "totalUsage": 1205,
  "averagePerSlot": 7.1,
  "mostUsed": {
    "emoji": "🎲",
    "count": 48
  },
  "leastUsed": {
    "emoji": "â›Šī¸",
    "count": 1
  }
}

V1 Legacy Endpoints

GET /api/v1/redirect

Legacy redirect endpoint with query parameters

Query Parameters:

emoji - Single emoji or emoji string
casino - Optional casino preference (shuffle, stake)

Examples:

GET /api/v1/redirect?emoji=🎰
GET /api/v1/redirect?emoji=🎰💰&casino=shuffle

Info: This is a legacy endpoint. Use /api/play/[emojis] for new implementations.

GET /api/v1/spin

Lucky spin - redirects to a random slot matching criteria

Query Parameters (all optional):

emoji - Filter by emoji
provider - Filter by provider name
volatility - Filter by volatility level
minRtp - Minimum RTP percentage

Examples:

GET /api/v1/spin// Random slot
GET /api/v1/spin?volatility=high&minRtp=96

Note: Returns 302 redirect to a random matching slot

Response Codes

200Success - Request completed successfully
302Redirect - Redirecting to slot page
400Bad Request - Invalid parameters
404Not Found - Resource not found
429Rate Limit Exceeded - Too many requests
500Server Error - Internal server error

⚡ Rate Limiting

All public API endpoints are rate limited to prevent abuse. Rate limits apply per IP address.

Current Limits:

  • 100 requests per minute per IP address
  • 1,000 requests per hour per IP address
  • 10,000 requests per day per IP address

Rate limit headers are included in all API responses:

X-RateLimit-Limit: 100
X-RateLimit-Remaining: 95
X-RateLimit-Reset: 1735689600
X-RateLimit-Window: minute
X-Response-Time: 12ms

429 Rate Limit Response:

When you exceed the rate limit, you'll receive:

{
  "error": "Rate limit exceeded",
  "message": "Too many requests. Limit: 100 per minute",
  "retryAfter": 1735689600
}

Note: Rate limiting does not apply to admin endpoints (requires authentication).

🌐 CORS Support

All public API endpoints support Cross-Origin Resource Sharing (CORS) for easy integration from web applications.

✓ CORS is Enabled

The following headers are sent with all API responses:

Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS
Access-Control-Allow-Headers: Content-Type, Authorization

This means you can:

  • Make requests from any domain
  • Use the API in browser-based JavaScript applications
  • Fetch data from React, Vue, Angular, or vanilla JS
  • No server-side proxy required

Example fetch from browser:

fetch('https://reelagio.com/api/slots?limit=5')
  .then(res => res.json())
  .then(data => console.log(data.slots));

Example Integration

JavaScript/TypeScript example:

// Find slots with specific emojis
async function findSlots(emojis) {
  const response = await fetch('/api/match', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
    },
    body: JSON.stringify({ emojis })
  });
  
  return response.json();
}

// Redirect to a slot game
function playSlot(emoji) {
  window.location.href = `/api/play/${emoji}`;
}

// Usage
findSlots(['🎰', '💎']).then(data => {
  console.log('Matching slots:', data.slots);
});

playSlot('🎰'); // Redirects to a random slot with 🎰