Access the Memelord API with managed authentication. Generate AI-powered memes and video memes with customizable text overlays.
Reference
Generate Meme
Generate AI-powered memes with text overlays. Returns signed download URLs.
Cost: 1 credit per request
POST /memelord/api/v1/ai-meme
Content-Type: application/json
{
"prompt": "when the code finally compiles",
"count": 3,
"category": "trending",
"include_nsfw": false
}Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
prompt | string | Yes | Text prompt for meme generation |
count | integer | No | Number of memes to generate (1-10, default: 1) |
category | string | No | Category filter: "trending" or "classic" |
include_nsfw | boolean | No | Include NSFW templates (default: true) |
Response:
{
"success": true,
"prompt": "when the code finally compiles",
"total_generated": 3,
"total_requested": 3,
"results": [
{
"success": true,
"url": "https://example.supabase.co/storage/v1/object/sign/user-assets/.../ai-memes/abc123.webp?token=...",
"expires_in": 86400,
"template_url": "https://example.supabase.co/storage/v1/object/public/public-assets/.../main.webp",
"template_name": "Iceberg",
"template_id": "282bf941-2f34-478f-abf4-fd26a399a652",
"template_data": {
"render_mode": "template",
"width": 500,
"height": 759,
"template": [
{
"id": "text1",
"text": "Code compiled",
"font": "sans",
"color": "white",
"fontSize": "m"
},
{
"id": "text2",
"text": "All the logical bugs",
"font": "sans",
"color": "white",
"fontSize": "m"
}
]
}
}
]
}Edit Meme
Edit text on an existing meme using AI instructions.
Cost: 1 credit per request
POST /memelord/api/v1/ai-meme/edit
Content-Type: application/json
{
"instruction": "make it about debugging instead",
"template_id": "success-kid-001",
"template_data": {
"top_text": "When the code compiles",
"bottom_text": "On the first try"
},
"target_index": 0
}Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
instruction | string | Yes | AI instruction for editing the meme text |
template_id | string | Yes | Template ID from original generation |
template_data | object | Yes | Current template data with text fields |
target_index | integer | No | Specific text element to edit |
Response:
{
"success": true,
"url": "https://example.supabase.co/storage/v1/object/sign/user-assets/.../ai-memes/edited123.webp?token=...",
"expires_in": 86400,
"template_id": "282bf941-2f34-478f-abf4-fd26a399a652",
"template_data": {
"render_mode": "template",
"width": 500,
"height": 759,
"template": [
{
"id": "text1",
"text": "Debugging for hours",
"font": "sans",
"color": "white"
},
{
"id": "text2",
"text": "It was a typo",
"font": "sans",
"color": "white"
}
]
},
"edit_summary": "Updated template text"
}Generate Video Meme
Generate captioned video memes with asynchronous rendering.
Cost: 5 credits per request (multiplied by count)
POST /memelord/api/v1/ai-video-meme
Content-Type: application/json
{
"prompt": "explaining my code to a rubber duck",
"count": 2,
"category": "trending",
"webhookUrl": "https://your-server.com/webhook",
"webhookSecret": "your-secret-key"
}Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
prompt | string | Yes | Text prompt for video meme generation |
count | integer | No | Number of videos to generate (1-5, default: 1) |
category | string | No | Category filter: "trending" or "classic" |
template_id | string | No | Specific template to use |
webhookUrl | string | No | URL for completion notification |
webhookSecret | string | No | Secret for webhook signature verification |
Response:
{
"success": true,
"prompt": "when the code works on the first try",
"total_requested": 2,
"jobs": [
{
"job_id": "render-1740524400000-abc12",
"template_name": "Surprised Pikachu Video",
"template_id": "abc-123",
"caption": "When the code works on the first try"
}
],
"message": "Render jobs started. Results will be POSTed to webhookUrl."
}Edit Video Meme
Modify captions on an existing video meme.
Cost: 5 credits per request
POST /memelord/api/v1/ai-video-meme/edit
Content-Type: application/json
{
"instruction": "make it more dramatic",
"template_id": "confused-travolta",
"caption": "When the tests pass locally",
"audio_overlay_url": "https://example.com/audio.mp3",
"webhookUrl": "https://your-server.com/webhook"
}Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
instruction | string | Yes | AI instruction for editing captions |
template_id | string | Yes | Template ID from original generation |
caption | string | Yes | Current caption text |
audio_overlay_url | string | No | URL to audio file for overlay |
webhookUrl | string | No | URL for completion notification |
Response:
{
"success": true,
"job_id": "render-1740524400000-xyz99",
"template_name": "Surprised Pikachu Video",
"template_id": "abc-123",
"original_caption": "When the tests pass locally",
"edited_caption": "When the tests pass locally but fail in CI",
"edit_summary": "Updated caption text",
"message": "Render job started. Poll GET /api/video/render/remote?jobId=... for status."
}Check Video Render Status
Poll the status of an asynchronous video render job.
GET /memelord/api/video/render/remote?jobId={job_id}Response (Rendering):
{
"success": true,
"job": {
"id": "render-1740524400000-abc12",
"status": "rendering",
"mp4Url": null,
"storagePath": null,
"error": null,
"renderTimeMs": null,
"createdAt": "2026-03-31T01:30:26.361825+00:00",
"completedAt": null
}
}Response (Completed):
{
"success": true,
"job": {
"id": "render-1740524400000-abc12",
"status": "completed",
"mp4Url": "https://example.supabase.co/storage/v1/object/sign/user-assets/.../exports/ai-video-meme-1740524400000.mp4?token=...",
"storagePath": "user-id/exports/ai-video-meme-1740524400000.mp4",
"error": null,
"renderTimeMs": 12664,
"createdAt": "2026-03-31T01:30:26.361825+00:00",
"completedAt": "2026-03-31T01:30:47.814+00:00"
}
}Response (Failed):
{
"success": true,
"job": {
"id": "render-1740524400000-abc12",
"status": "failed",
"mp4Url": null,
"storagePath": null,
"error": "Render timed out",
"renderTimeMs": null,
"createdAt": "2026-03-31T01:30:26.361825+00:00",
"completedAt": null
}
}