Euphoria Paste

API Documentation

Integrate Euphoria Paste into your applications

Authentication

API access is controlled via the API_ENABLED environment variable. Rate limits apply: 10 requests per minute by default.

Create Paste

POST /api/paste

Create a new paste programmatically.

Request Body (JSON):

{
  "content": "Your paste content here",
  "expiresIn": 3600,           // Optional: Expiration in seconds
  "maxViews": 100,             // Optional: Maximum view count (1-1000000)
  "password": "secret123"      // Optional: Password protection
}

Response:

{
  "success": true,
  "id": "abc123-def456-...",
  "url": "https://yoursite.com/paste/abc123-def456-...",
  "requiresPassword": true
}

Example (cURL):

curl -X POST https://yoursite.com/api/paste \
  -H "Content-Type: application/json" \
  -d '{
    "content": "Hello, World!",
    "expiresIn": 3600,
    "maxViews": 50
  }'

Example (JavaScript):

const response = await fetch('https://yoursite.com/api/paste', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    content: 'console.log("Hello, World!");',
    expiresIn: 86400,  // 24 hours
    maxViews: 100
  })
});

const data = await response.json();
console.log('Paste URL:', data.url);

Example (Python):

import requests

response = requests.post('https://yoursite.com/api/paste', json={
    'content': 'print("Hello, World!")',
    'expiresIn': 86400,  # 24 hours
    'maxViews': 100
})

data = response.json()
print(f"Paste URL: {data['url']}")

Get Paste

GET /api/paste/:id

Retrieve paste content by ID.

Query Parameters:

  • password - Optional: Password for protected pastes

Headers (Alternative):

  • X-Paste-Password - Optional: Password as header instead of query param

Response:

{
  "id": "abc123-def456-...",
  "content": "Your paste content",
  "language": "javascript",
  "createdAt": 1702345678000,
  "expiresAt": 1702432078000,
  "views": 5,
  "maxViews": 100,
  "requiresPassword": false
}

Example (cURL):

curl https://yoursite.com/api/paste/abc123-def456-...

Example with Password (cURL):

curl "https://yoursite.com/api/paste/abc123-def456-...?password=secret123"

# OR using header:
curl -H "X-Paste-Password: secret123" \
  https://yoursite.com/api/paste/abc123-def456-...

Example (JavaScript):

const response = await fetch('https://yoursite.com/api/paste/abc123-def456-...');
const paste = await response.json();
console.log(paste.content);

Example (Python):

import requests

# Without password
response = requests.get('https://yoursite.com/api/paste/abc123-def456-...')

# With password (query param)
response = requests.get('https://yoursite.com/api/paste/abc123-def456-...', 
                       params={'password': 'secret123'})

# With password (header)
response = requests.get('https://yoursite.com/api/paste/abc123-def456-...',
                       headers={'X-Paste-Password': 'secret123'})

paste = response.json()
print(paste['content'])

Expiration Values

When creating pastes, use these standard expiration times (in seconds):

  • 3600 - 1 hour
  • 86400 - 24 hours
  • 172800 - 2 days
  • 604800 - 7 days
  • 2592000 - 30 days
  • Omit field - Never expires

Error Responses

Status Code Meaning Example Response
400 Bad Request {"error": "Content is required"}
401 Unauthorized {"requiresPassword": true, "message": "Password required"}
404 Not Found {"error": "Paste not found"}
429 Rate Limited {"error": "Too many requests, please try again later."}
500 Server Error {"error": "Failed to create paste"}

Rate Limits

  • Default: 10 requests per 60 seconds
  • Configurable via: RATE_LIMIT_MAX_REQUESTS and RATE_LIMIT_WINDOW_MS in .env
  • Headers: Rate limit info included in RateLimit-* headers

Configuration

To enable API access, set in your .env file:

API_ENABLED=true
RATE_LIMIT_MAX_REQUESTS=10
RATE_LIMIT_WINDOW_MS=60000