Read documentation of our API that generates social media carousels & graphics
| Method | Endpoint | Description |
|---|---|---|
| POST | /render |
Submit single graphic job |
| POST | /render?tool=carousel-maker |
Submit carousel job |
| GET | /job/:jobId/status |
Check job status |
| GET | /job/:jobId/result |
Get completed result |
| GET | /queue/stats |
Get queue statistics (no auth required) |
/renderconst response = await fetch("https://generate.contentdrips.com/render", {
method: "POST",
headers: {
"Content-Type": "application/json",
"Authorization": "Bearer YOUR_TOKEN_HERE"
},
body: JSON.stringify({
template_id: "123456",
output: "png", // or "pdf"
content_update: [
{
type: "textbox",
label: "quote",
value: "Your inspiring quote goes here",
fontSize: "48",
fontColor: "#333333",
textboxMaxHeight: 300
},
{
"type":"image",
"label":"background",
"value": "https://example.com/image.jpg",
"opacity":0.8
}
| Property | Type | Required | Description | Example |
|---|---|---|---|---|
type |
String | Yes | Must be "textbox" |
"textbox" |
label |
String | Yes | Matches template element's meta_labels |
"heading" |
value |
String | Yes | Text content | "Hello World" |
fontSize |
String/Number | No | Font size in pixels | "48" or 48 |
fontColor |
String | No | Text color (CSS format) | "#FF5733", "rgb(255,87,51)" |
textboxMaxHeight |
String/Number | No | Max height: "auto" or integer |
"auto" or 250 |
| Property | Type | Required | Description | Example |
|---|---|---|---|---|
type |
String | Yes | Must be "image" |
"image" |
label |
String | Yes | Matches template element's meta_labels |
"background" |
value |
String | Yes | Image URL | "https://..." |
opacity |
Number | No | Image transparency (0–1) | 0.8 |
{
"job_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"status": "queued",
"message": "Job has been queued for processing",
"check_status_url": "/job/a1b2c3d4-e5f6-7890-abcd-ef1234567890/status"
}
/job/:jobId/status{
"job_id": "...",
"status": "completed",
"updated_at": "2024-01-15T10:35:00.000Z",
"completedAt": "2024-01-15T10:35:00.000Z"
}
{
"job_id": "...",
"status": "failed",
"error": "Template not found"
}
/job/:jobId/result{
"date": "2024-01-15T10:35:00.000Z",
"type": "normal",
"export_url": "https://your-bucket.s3.amazonaws.com/server/.../abc123-template.png"
}
{
"job_id": "...",
"status": "processing",
"message": "Job not yet completed"
}
// ... (The full JavaScript example for single graphic workflow) ...
async function generateSingleGraphic() {
// Step 1: Submit job
// ...
// Step 2: Poll status until complete
// ...
// Step 3: Get result
// ...
}
generateSingleGraphic();
/render?tool=carousel-makercarousel object must contain intro_slide, slides array, and ending_slide.
// ... headers and auth ...
body: JSON.stringify({
template_id: "126149",
output: "png",
carousel: {
intro_slide: { /* ... */ },
slides: [ /* ... */ ],
ending_slide: { /* ... */ }
}
})
// ...
| Property | Type | Description |
|---|---|---|
heading |
String | Heading text |
description |
String | Description text |
image |
String | Image URL |
carousel object must contain intro_slide, slides array, and ending_slide.
// ... headers and auth ...
body: JSON.stringify({
template_id: "126149",
output: "png",
{
"carousel": {
"intro_slide": {
"heading": {
"text": "Welcome to Our Platform",
"fontSize": "56",
"fontColor": "#2C3E50",
"textboxMaxHeight": "auto"
},
"description": {
"text": "Discover amazing features",
"fontSize": "28",
"fontColor": "#7F8C8D",
"textboxMaxHeight": 200
},
"image": {
"url": "https://example.com/intro.jpg",
"opacity": 0.85
}
},
"slides": [
{
"heading": {
"text": "Feature 1",
"fontSize": "48",
"fontColor": "#3498DB",
"textboxMaxHeight": 180
},
"description": {
"text": "Powerful features",
"fontSize": "22",
"fontColor": "#34495E",
"textboxMaxHeight": "auto"
},
"image": {
"url": "https://example.com/feature3.jpg",
"opacity": 1
}
}
],
"ending_slide": {
"heading": {
"text": "Get Started Today!",
"fontSize": "60",
"fontColor": "#E74C3C",
"textboxMaxHeight": 250
},
"description": {
"text": "Join thousands of users",
"fontSize": "24",
"fontColor": "#95A5A6"
},
"image": {
"url": "https://example.com/ending.jpg",
"opacity": 0.9
}
}
}
}
})
// ...
| Property | Type | Required | Description | Example |
|---|---|---|---|---|
text |
String | Yes | Text content | "Welcome" |
fontSize |
String/Number | No | Font size in pixels | "48" or 48 |
fontColor |
String | No | Text color (CSS format) | "#FF5733" |
textboxMaxHeight |
String/Number | No | Max height | "auto" or 250 |
| Property | Type | Required | Description | Example |
|---|---|---|---|---|
url |
String | Yes | Image URL | "https://..." |
opacity |
Number | No | Image transparency (0–1) | 0.8 |
{
"job_id": "b2c3d4e5-f6g7-8901-bcde-fg2345678901",
"status": "queued",
"message": "Job has been queued for processing"
}
/job/:jobId/status).
{
"date": "...",
"type": "carousel",
"export_url": [
"https://your-bucket.s3.amazonaws.com/.../frame-0.png",
"https://your-bucket.s3.amazonaws.com/.../frame-1.png",
// ... more URLs
]
}
{
"date": "...",
"type": "carousel",
"export_url": "https://your-bucket.s3.amazonaws.com/.../carousel-output.pdf"
}
// ... (The full JavaScript example for carousel workflow) ...
async function generateCarousel() {
// Step 1: Submit carousel job
// ...
// Step 2: Poll status until complete
// ...
// Step 3: Get result
// ...
}
generateCarousel();
"png" | "pdf".{ type, label, value } objects.?tool=carousel-maker). Contains intro_slide, slides array, and ending_slide.| Code | Description |
|---|---|
| 202 | Accepted (job queued successfully) |
| 400 | Bad Request (validation error) |
| 401 | Unauthorized (invalid/missing token) |
| 404 | Not Found (job/template not found) |
| 500 | Internal Server Error |
{
"error": "Error Type",
"message": "Detailed error description"
}
/queue/stats{
"waiting": 5,
"active": 2,
"completed": 1543,
"failed": 12
// ... other stats
}