VIGGLE_API_KEY before using these examples. Replace all sample IDs with the complete IDs returned by your account.
Credits — GET /v1/credits
req, _ := http.NewRequest("GET", "https://apis.viggle.ai/v1/credits", nil)
req.Header.Set("Authorization", "Bearer "+os.Getenv("VIGGLE_API_KEY")); resp, _ := http.DefaultClient.Do(req)
const resp = await fetch("https://apis.viggle.ai/v1/credits", {headers:{Authorization:`Bearer ${process.env.VIGGLE_API_KEY}`}});
resp = requests.get("https://apis.viggle.ai/v1/credits", headers={"Authorization": f"Bearer {os.environ['VIGGLE_API_KEY']}"})
curl "https://apis.viggle.ai/v1/credits" -H "Authorization: Bearer $VIGGLE_API_KEY"
Create Character — POST /v1/characters
body := &bytes.Buffer{}; w := multipart.NewWriter(body); f, _ := w.CreateFormFile("image", "character.png"); file, _ := os.Open("character.png"); io.Copy(f, file); w.WriteField("name", "Presenter"); w.Close()
req, _ := http.NewRequest("POST", "https://apis.viggle.ai/v1/characters", body); req.Header.Set("Authorization", "Bearer "+os.Getenv("VIGGLE_API_KEY")); req.Header.Set("Content-Type", w.FormDataContentType()); resp, _ := http.DefaultClient.Do(req)
const form = new FormData(); form.append("image", imageFile); form.append("name", "Presenter");
const resp = await fetch("https://apis.viggle.ai/v1/characters", {method:"POST", headers:{Authorization:`Bearer ${process.env.VIGGLE_API_KEY}`}, body:form});
with open("character.png", "rb") as image:
resp = requests.post("https://apis.viggle.ai/v1/characters", headers={"Authorization": f"Bearer {os.environ['VIGGLE_API_KEY']}"}, files={"image": image}, data={"name": "Presenter"})
curl -X POST "https://apis.viggle.ai/v1/characters" -H "Authorization: Bearer $VIGGLE_API_KEY" -F "[email protected]" -F "name=Presenter"
List, get, and delete Characters
req, _ := http.NewRequest("GET", "https://apis.viggle.ai/v1/characters/char_550e8400-e29b-41d4-a716-446655440000", nil); req.Header.Set("Authorization", "Bearer "+os.Getenv("VIGGLE_API_KEY")); resp, _ := http.DefaultClient.Do(req)
const resp = await fetch(`https://apis.viggle.ai/v1/characters/${characterId}`, {headers:{Authorization:`Bearer ${process.env.VIGGLE_API_KEY}`}});
resp = requests.get(f"https://apis.viggle.ai/v1/characters/{character_id}", headers={"Authorization": f"Bearer {os.environ['VIGGLE_API_KEY']}"})
curl "https://apis.viggle.ai/v1/characters" -H "Authorization: Bearer $VIGGLE_API_KEY"
curl "https://apis.viggle.ai/v1/characters/char_550e8400-e29b-41d4-a716-446655440000" -H "Authorization: Bearer $VIGGLE_API_KEY"
curl -X DELETE "https://apis.viggle.ai/v1/characters/char_550e8400-e29b-41d4-a716-446655440000" -H "Authorization: Bearer $VIGGLE_API_KEY"
GET /v1/characters; for deletion, change the request method to DELETE. See Characters for every request and response field.
Create Motion — POST /v1/motions
body := &bytes.Buffer{}; w := multipart.NewWriter(body); f, _ := w.CreateFormFile("motion_video", "dance.mp4"); file, _ := os.Open("dance.mp4"); io.Copy(f, file); w.WriteField("name", "Dance"); w.Close()
req, _ := http.NewRequest("POST", "https://apis.viggle.ai/v1/motions", body); req.Header.Set("Authorization", "Bearer "+os.Getenv("VIGGLE_API_KEY")); req.Header.Set("Content-Type", w.FormDataContentType()); resp, _ := http.DefaultClient.Do(req)
const form = new FormData(); form.append("motion_video", videoFile); form.append("name", "Dance");
const resp = await fetch("https://apis.viggle.ai/v1/motions", {method:"POST", headers:{Authorization:`Bearer ${process.env.VIGGLE_API_KEY}`}, body:form});
with open("dance.mp4", "rb") as video:
resp = requests.post("https://apis.viggle.ai/v1/motions", headers={"Authorization": f"Bearer {os.environ['VIGGLE_API_KEY']}"}, files={"motion_video": video}, data={"name": "Dance"})
curl -X POST "https://apis.viggle.ai/v1/motions" -H "Authorization: Bearer $VIGGLE_API_KEY" -F "[email protected]" -F "name=Dance"
Import Motion — POST /v1/motions/import
body := strings.NewReader(`{"template_id":"YOUR_TEMPLATE_ID","name":"Campaign dance"}`); req, _ := http.NewRequest("POST", "https://apis.viggle.ai/v1/motions/import", body); req.Header.Set("Authorization", "Bearer "+os.Getenv("VIGGLE_API_KEY")); req.Header.Set("Content-Type", "application/json"); resp, _ := http.DefaultClient.Do(req)
const resp = await fetch("https://apis.viggle.ai/v1/motions/import", {method:"POST", headers:{Authorization:`Bearer ${process.env.VIGGLE_API_KEY}`, "Content-Type":"application/json"}, body:JSON.stringify({template_id:"YOUR_TEMPLATE_ID", name:"Campaign dance"})});
resp = requests.post("https://apis.viggle.ai/v1/motions/import", headers={"Authorization": f"Bearer {os.environ['VIGGLE_API_KEY']}"}, json={"template_id":"YOUR_TEMPLATE_ID", "name":"Campaign dance"})
curl -X POST "https://apis.viggle.ai/v1/motions/import" -H "Authorization: Bearer $VIGGLE_API_KEY" -H "Content-Type: application/json" -d '{"template_id":"YOUR_TEMPLATE_ID","name":"Campaign dance"}'
List, get, and delete Motions
req, _ := http.NewRequest("GET", "https://apis.viggle.ai/v1/motions/mot_550e8400-e29b-41d4-a716-446655440000", nil); req.Header.Set("Authorization", "Bearer "+os.Getenv("VIGGLE_API_KEY")); resp, _ := http.DefaultClient.Do(req)
const resp = await fetch(`https://apis.viggle.ai/v1/motions/${motionId}`, {headers:{Authorization:`Bearer ${process.env.VIGGLE_API_KEY}`}});
resp = requests.get(f"https://apis.viggle.ai/v1/motions/{motion_id}", headers={"Authorization": f"Bearer {os.environ['VIGGLE_API_KEY']}"})
curl "https://apis.viggle.ai/v1/motions" -H "Authorization: Bearer $VIGGLE_API_KEY"
curl "https://apis.viggle.ai/v1/motions/mot_550e8400-e29b-41d4-a716-446655440000" -H "Authorization: Bearer $VIGGLE_API_KEY"
curl -X DELETE "https://apis.viggle.ai/v1/motions/mot_550e8400-e29b-41d4-a716-446655440000" -H "Authorization: Bearer $VIGGLE_API_KEY"
Create, query, cancel, and download a Render
body := &bytes.Buffer{}; w := multipart.NewWriter(body); w.WriteField("character_id", "char_550e8400-e29b-41d4-a716-446655440000"); w.WriteField("motion_id", "mot_550e8400-e29b-41d4-a716-446655440000"); w.Close()
req, _ := http.NewRequest("POST", "https://apis.viggle.ai/v1/renders", body); req.Header.Set("Authorization", "Bearer "+os.Getenv("VIGGLE_API_KEY")); req.Header.Set("Content-Type", w.FormDataContentType()); resp, _ := http.DefaultClient.Do(req)
const form = new FormData(); form.append("character_id", characterId); form.append("motion_id", motionId);
const resp = await fetch("https://apis.viggle.ai/v1/renders", {method:"POST", headers:{Authorization:`Bearer ${process.env.VIGGLE_API_KEY}`}, body:form});
resp = requests.post("https://apis.viggle.ai/v1/renders", headers={"Authorization": f"Bearer {os.environ['VIGGLE_API_KEY']}"}, data={"character_id": character_id, "motion_id": motion_id})
curl -X POST "https://apis.viggle.ai/v1/renders" -H "Authorization: Bearer $VIGGLE_API_KEY" -F "character_id=char_550e8400-e29b-41d4-a716-446655440000" -F "motion_id=mot_550e8400-e29b-41d4-a716-446655440000"
curl "https://apis.viggle.ai/v1/renders/render_8f50b2c2c2b84ae0" -H "Authorization: Bearer $VIGGLE_API_KEY"
curl -X DELETE "https://apis.viggle.ai/v1/renders/render_8f50b2c2c2b84ae0" -H "Authorization: Bearer $VIGGLE_API_KEY"
curl -L "https://apis.viggle.ai/v1/renders/render_8f50b2c2c2b84ae0/download" -H "Authorization: Bearer $VIGGLE_API_KEY" -o output.mp4
GET, DELETE, or GET respectively. See Renders for parameter combinations and response fields.
Create and query 3D Conversion
body := &bytes.Buffer{}; w := multipart.NewWriter(body); field, _ := w.CreateFormFile("image", "character.png"); file, _ := os.Open("character.png"); io.Copy(field, file); w.Close()
req, _ := http.NewRequest("POST", base+"/avatars", body); req.Header.Set("Authorization", "Bearer "+apiKey); req.Header.Set("Content-Type", w.FormDataContentType()); avatar, _ := client.Do(req)
const avatarForm = new FormData(); avatarForm.append("image", imageFile);
const createdAvatar = await fetch(`${base}/avatars`, {method:"POST", headers:{Authorization:`Bearer ${apiKey}`}, body:avatarForm});
const avatar = await fetch(`https://apis.viggle.ai/v1/avatars/${avatarId}`, {headers:{Authorization:`Bearer ${process.env.VIGGLE_API_KEY}`}});
const animation = await fetch(`https://apis.viggle.ai/v1/animations/${animationId}`, {headers:{Authorization:`Bearer ${process.env.VIGGLE_API_KEY}`}});
with open("character.png", "rb") as image:
created_avatar = requests.post(f"{base}/avatars", headers=headers, files={"image": image})
avatar = requests.get(f"https://apis.viggle.ai/v1/avatars/{avatar_id}", headers={"Authorization": f"Bearer {os.environ['VIGGLE_API_KEY']}"})
animation = requests.get(f"https://apis.viggle.ai/v1/animations/{animation_id}", headers={"Authorization": f"Bearer {os.environ['VIGGLE_API_KEY']}"})
curl -X POST "https://apis.viggle.ai/v1/avatars" -H "Authorization: Bearer $VIGGLE_API_KEY" -F "[email protected]"
curl "https://apis.viggle.ai/v1/avatars/avatar_8f50b2c2c2b84ae0" -H "Authorization: Bearer $VIGGLE_API_KEY"
curl -X POST "https://apis.viggle.ai/v1/animations" -H "Authorization: Bearer $VIGGLE_API_KEY" -F "[email protected]"
curl "https://apis.viggle.ai/v1/animations/anim_8f50b2c2c2b84ae0" -H "Authorization: Bearer $VIGGLE_API_KEY"
Endpoint-by-endpoint request examples
The following compact examples show the exact HTTP method, path, and request shape for every endpoint. In the Go snippets,client is an http.Client; in JavaScript, apiKey is your API key; in Python, headers is {"Authorization": "Bearer ..."}.
GET /v1/characters
req, _ := http.NewRequest("GET", base+"/characters", nil); req.Header.Set("Authorization", "Bearer "+apiKey); resp, _ := client.Do(req)
const resp = await fetch(`${base}/characters`, {headers:{Authorization:`Bearer ${apiKey}`}});
resp = requests.get(f"{base}/characters", headers=headers)
curl "$BASE/characters" -H "Authorization: Bearer $VIGGLE_API_KEY"
GET /v1/characters/{character_id}
req, _ := http.NewRequest("GET", base+"/characters/"+characterID, nil); req.Header.Set("Authorization", "Bearer "+apiKey); resp, _ := client.Do(req)
const resp = await fetch(`${base}/characters/${characterId}`, {headers:{Authorization:`Bearer ${apiKey}`}});
resp = requests.get(f"{base}/characters/{character_id}", headers=headers)
curl "$BASE/characters/$CHARACTER_ID" -H "Authorization: Bearer $VIGGLE_API_KEY"
DELETE /v1/characters/{character_id}
req, _ := http.NewRequest("DELETE", base+"/characters/"+characterID, nil); req.Header.Set("Authorization", "Bearer "+apiKey); resp, _ := client.Do(req)
const resp = await fetch(`${base}/characters/${characterId}`, {method:"DELETE", headers:{Authorization:`Bearer ${apiKey}`}});
resp = requests.delete(f"{base}/characters/{character_id}", headers=headers)
curl -X DELETE "$BASE/characters/$CHARACTER_ID" -H "Authorization: Bearer $VIGGLE_API_KEY"
GET /v1/motions
req, _ := http.NewRequest("GET", base+"/motions", nil); req.Header.Set("Authorization", "Bearer "+apiKey); resp, _ := client.Do(req)
const resp = await fetch(`${base}/motions`, {headers:{Authorization:`Bearer ${apiKey}`}});
resp = requests.get(f"{base}/motions", headers=headers)
curl "$BASE/motions" -H "Authorization: Bearer $VIGGLE_API_KEY"
GET /v1/motions/{motion_id}
req, _ := http.NewRequest("GET", base+"/motions/"+motionID, nil); req.Header.Set("Authorization", "Bearer "+apiKey); resp, _ := client.Do(req)
const resp = await fetch(`${base}/motions/${motionId}`, {headers:{Authorization:`Bearer ${apiKey}`}});
resp = requests.get(f"{base}/motions/{motion_id}", headers=headers)
curl "$BASE/motions/$MOTION_ID" -H "Authorization: Bearer $VIGGLE_API_KEY"
DELETE /v1/motions/{motion_id}
req, _ := http.NewRequest("DELETE", base+"/motions/"+motionID, nil); req.Header.Set("Authorization", "Bearer "+apiKey); resp, _ := client.Do(req)
const resp = await fetch(`${base}/motions/${motionId}`, {method:"DELETE", headers:{Authorization:`Bearer ${apiKey}`}});
resp = requests.delete(f"{base}/motions/{motion_id}", headers=headers)
curl -X DELETE "$BASE/motions/$MOTION_ID" -H "Authorization: Bearer $VIGGLE_API_KEY"
GET /v1/renders/{render_id}
req, _ := http.NewRequest("GET", base+"/renders/"+renderID, nil); req.Header.Set("Authorization", "Bearer "+apiKey); resp, _ := client.Do(req)
const resp = await fetch(`${base}/renders/${renderId}`, {headers:{Authorization:`Bearer ${apiKey}`}});
resp = requests.get(f"{base}/renders/{render_id}", headers=headers)
curl "$BASE/renders/$RENDER_ID" -H "Authorization: Bearer $VIGGLE_API_KEY"
DELETE /v1/renders/{render_id}
req, _ := http.NewRequest("DELETE", base+"/renders/"+renderID, nil); req.Header.Set("Authorization", "Bearer "+apiKey); resp, _ := client.Do(req)
const resp = await fetch(`${base}/renders/${renderId}`, {method:"DELETE", headers:{Authorization:`Bearer ${apiKey}`}});
resp = requests.delete(f"{base}/renders/{render_id}", headers=headers)
curl -X DELETE "$BASE/renders/$RENDER_ID" -H "Authorization: Bearer $VIGGLE_API_KEY"
GET /v1/renders/{render_id}/download
req, _ := http.NewRequest("GET", base+"/renders/"+renderID+"/download", nil); req.Header.Set("Authorization", "Bearer "+apiKey); resp, _ := client.Do(req)
const resp = await fetch(`${base}/renders/${renderId}/download`, {headers:{Authorization:`Bearer ${apiKey}`}});
resp = requests.get(f"{base}/renders/{render_id}/download", headers=headers, allow_redirects=True)
curl -L "$BASE/renders/$RENDER_ID/download" -H "Authorization: Bearer $VIGGLE_API_KEY" -o output.mp4
GET /v1/avatars/{avatar_id} and GET /v1/animations/{animation_id}
req, _ := http.NewRequest("GET", base+"/avatars/"+avatarID, nil); req.Header.Set("Authorization", "Bearer "+apiKey); avatar, _ := client.Do(req)
req, _ = http.NewRequest("GET", base+"/animations/"+animationID, nil); req.Header.Set("Authorization", "Bearer "+apiKey); animation, _ := client.Do(req)
const avatar = await fetch(`${base}/avatars/${avatarId}`, {headers:{Authorization:`Bearer ${apiKey}`}});
const animation = await fetch(`${base}/animations/${animationId}`, {headers:{Authorization:`Bearer ${apiKey}`}});
avatar = requests.get(f"{base}/avatars/{avatar_id}", headers=headers)
animation = requests.get(f"{base}/animations/{animation_id}", headers=headers)
curl "$BASE/avatars/$AVATAR_ID" -H "Authorization: Bearer $VIGGLE_API_KEY"
curl "$BASE/animations/$ANIMATION_ID" -H "Authorization: Bearer $VIGGLE_API_KEY"

