Base URL: https://mangaposer.cc/api/v1
· All endpoints return JSON · CORS enabled
Create an account at mangaposer.cc/register
Go to Account → API Keys → Generate New Key
Pass your key as Authorization: Bearer mp_...
Authorization: Bearer mp_your_api_key_here
/api/v1/poses Auth required Query Parameters
q string Full-text search against pose slug and tags tag string Filter by exact tag label (e.g. `combat`) sort string `quality` (default) | `community` | `newest` | `most_used` limit integer Results per page (default 50, max 200) offset integer Pagination offset (default 0) Example
curl "https://mangaposer.cc/api/v1/poses?tag=combat&sort=quality&limit=10" \ -H "Authorization: Bearer mp_your_token"
Response
{
"poses": [
{
"pose_slug": "combat_punch_r",
"title": "Combat Punch R",
"thumbnail_url": "/thumbnails/combat_punch_r.webp",
"tags": ["combat", "attack", "punch"],
"quality_score": 4,
"community_score": 1.5,
"feedback_count": 12,
"license_type": "CC0",
"submitted_by": 3,
"submitted_by_name": "Alice"
}
],
"total": 51,
"limit": 50,
"offset": 0,
"has_more": true
} /api/v1/poses Auth required Request Body (JSON)
pose_slug string required Unique identifier. Lowercase, alphanumeric, `_` or `-` bone_data_url string required URL to bone data JSON (glTF Humanoid quaternions) thumbnail_url string optional URL to WebP thumbnail (default: `/thumbnails/{slug}.webp`) source_url string optional Original source reference URL license_type string optional License identifier (default `CC0`) quality_score integer optional Expert quality rating 1–5 (default 3) tags string[] optional Array of tag labels to attach Example
curl -X POST "https://mangaposer.cc/api/v1/poses" \
-H "Authorization: Bearer mp_your_token" \
-H "Content-Type: application/json" \
-d '{
"pose_slug": "my_custom_pose",
"bone_data_url": "https://example.com/bones/my_custom_pose.json",
"quality_score": 3,
"tags": ["standing", "gesture"]
}' Response
{
"ok": true,
"pose": { /* PoseDetail object */ }
} /api/v1/poses/{slug} Auth required Example
curl "https://mangaposer.cc/api/v1/poses/sword_slash" \ -H "Authorization: Bearer mp_your_token"
Response
{
"pose_slug": "sword_slash",
"title": "Sword Slash",
"thumbnail_url": "/thumbnails/sword_slash.webp",
"bone_data_url": "/poses/bones/sword_slash.json",
"tags": ["combat", "sword", "attack", "dynamic"],
"quality_score": 3,
"community_score": 0.0,
"feedback_count": 0,
"license_type": "CC0",
"source_url": "https://github.com/una-dinosauria/cmu-mocap",
"submitted_by": 3,
"submitted_by_name": "Alice"
} /api/v1/poses/{slug} Auth required Request Body (JSON)
bone_data_url string optional New bone data URL thumbnail_url string optional New thumbnail URL quality_score integer optional 1–5 tags string[] optional Replaces all existing tags Example
curl -X PATCH "https://mangaposer.cc/api/v1/poses/my_custom_pose" \
-H "Authorization: Bearer mp_your_token" \
-H "Content-Type: application/json" \
-d '{"quality_score": 4, "tags": ["standing", "gesture", "emotion"]}' Response
{ "ok": true, "pose": { /* PoseDetail */ } } /api/v1/poses/{slug} Auth required Example
curl -X DELETE "https://mangaposer.cc/api/v1/poses/my_custom_pose" \ -H "Authorization: Bearer mp_your_token"
Response
{ "ok": true } /api/v1/recommend Auth required Request Body (JSON)
description string required Natural language scene description. Keywords are matched against tags. Example
curl -X POST "https://mangaposer.cc/api/v1/recommend" \
-H "Authorization: Bearer mp_your_token" \
-H "Content-Type: application/json" \
-d '{"description": "character lunging forward sword raised"}' Response
{
"recommendations": [
{
"pose_slug": "sword_slash",
"thumbnail_url": "/thumbnails/sword_slash.webp",
"quality_score": 3,
"community_score": 0.0,
"matched_tags": ["combat", "sword"],
"match_score": 2
}
]
} /api/v1/feedback No auth Request Body (JSON)
pose_slug string required Target pose slug rating string required `great` | `good` | `bad` | `terrible` | `fix_needed` comment string optional Required when `rating = fix_needed` turnstile_token string required Cloudflare Turnstile challenge token session_token string required Client session identifier (16–32 hex chars). One rating per session per pose. Example
curl -X POST "https://mangaposer.cc/api/v1/feedback" \
-H "Content-Type: application/json" \
-d '{
"pose_slug": "combat_punch_r",
"rating": "great",
"turnstile_token": "<challenge_token>",
"session_token": "abc123def456..."
}' Response
{ "ok": true } 400 Bad Request Missing or invalid parameters 401 Unauthorized Missing, invalid, or revoked API key 404 Not Found The requested resource does not exist 409 Conflict A resource with that slug already exists 500 Server Error Unexpected server-side error error string field:{ "error": "Description of the problem" } Rate limits are keyed per API key (not IP). Exceeded limits return HTTP 429.
Bone data is stored as glTF Humanoid rotation quaternions per bone, relative to bind pose. 55 standard bones: Hips, Spine, Chest, UpperChest, Neck, Head, plus Left/Right Shoulder/UpperArm/LowerArm/Hand/Fingers/UpperLeg/LowerLeg/Foot/Toes.
{
"hips": { "x": 0.0, "y": 0.0, "z": 0.0, "w": 1.0 },
"spine": { "x": 0.052, "y": 0.0, "z": 0.0, "w": 0.999 },
"chest": { "x": 0.035, "y": 0.0, "z": 0.0, "w": 0.999 },
"leftUpperArm": { "x": 0.0, "y": 0.0, "z": 0.383, "w": 0.924 },
"rightUpperArm":{ "x": 0.0, "y": 0.0, "z": -0.383, "w": 0.924 },
...
}