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 hour86400- 24 hours172800- 2 days604800- 7 days2592000- 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_REQUESTSandRATE_LIMIT_WINDOW_MSin.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