{"openapi":"3.1.0","info":{"title":"JoggAI (BYOK) API","version":"0.1.0","description":"JoggAI (BYOK) lets an AI assistant read your own JoggAI data through the JoggAI API with a key you supply (JoggAI API key). Read-only: 12 tools (get_remaining_quota, list_public_avatars, list_custom_avatars, list_voices, list_custom_voices, list_music, list_visual_styles, list_custom_templates, get_custom_template, list_product_videos, list_template_videos, get_avatar_video). The BYOK key travels...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-jogg.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-jogg/docs"},"termsOfService":"https://connectorbay.com/byok-jogg/terms"},"servers":[{"url":"https://byok-jogg.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-jogg/docs"},"security":[{"upstreamKey":[]}],"components":{"securitySchemes":{"bearer":{"type":"http","scheme":"bearer","description":"Optional. A Pro API key raises rate limits; no credentials are required."},"upstreamKey":{"type":"apiKey","in":"header","name":"X-Upstream-Key","description":"Your own key for the service this connector wraps (bring your own key). Used for that one call only; never stored, logged or cached."}},"schemas":{"Error":{"type":"object","properties":{"ok":{"const":false},"error":{"type":"object"}}}}},"paths":{"/v1/tools/get_remaining_quota":{"post":{"operationId":"get_remaining_quota","summary":"Get the credits left on the JoggAI account. Use for \"How many JoggAI credits do I have left\".","description":"Get the credits left on the JoggAI account. Use for \"How many JoggAI credits do I have left\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"get_remaining_quotaArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_public_avatars":{"post":{"operationId":"list_public_avatars","summary":"List the stock talking avatars, filtered by aspect ratio, style, gender, age, scene or ethnicity. Use for \"Which female ","description":"List the stock talking avatars, filtered by aspect ratio, style, gender, age, scene or ethnicity. Use for \"Which female business avatars does JoggAI have\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"page":{"anyOf":[{"maximum":100000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"},"page_size":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":10,"description":"Items per page (1 to 100).","title":"Page Size"},"aspect_ratio":{"anyOf":[{"enum":["portrait","landscape","square"],"type":"string"},{"type":"null"}],"default":null,"description":"Only items with this aspect ratio.","title":"Aspect Ratio"},"style":{"anyOf":[{"enum":["professional","social"],"type":"string"},{"type":"null"}],"default":null,"description":"Avatar style.","title":"Style"},"gender":{"anyOf":[{"enum":["female","male"],"type":"string"},{"type":"null"}],"default":null,"description":"Avatar gender.","title":"Gender"},"age":{"anyOf":[{"enum":["adult","senior","young_adult"],"type":"string"},{"type":"null"}],"default":null,"description":"Age group.","title":"Age"},"scene":{"anyOf":[{"enum":["lifestyle","outdoors","business","studio","health_fitness","education","news"],"type":"string"},{"type":"null"}],"default":null,"description":"Scene type.","title":"Scene"},"ethnicity":{"anyOf":[{"enum":["european","african","south_asian","east_asian","middle_eastern","south_american","north_american"],"type":"string"},{"type":"null"}],"default":null,"description":"Ethnicity.","title":"Ethnicity"}},"title":"list_public_avatarsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_custom_avatars":{"post":{"operationId":"list_custom_avatars","summary":"List your own instant avatars with their processing status. Use for \"Are my custom JoggAI avatars finished processing\".","description":"List your own instant avatars with their processing status. Use for \"Are my custom JoggAI avatars finished processing\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"page":{"anyOf":[{"maximum":100000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"},"page_size":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":10,"description":"Items per page (1 to 100).","title":"Page Size"},"name":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Search avatars by name.","title":"Name"},"status":{"anyOf":[{"enum":["processing","completed","failed"],"type":"string"},{"type":"null"}],"default":null,"description":"Only avatars in this state.","title":"Status"}},"title":"list_custom_avatarsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_voices":{"post":{"operationId":"list_voices","summary":"List the available voices (timbres) with language, gender, age, accent and use case; filter by any of them. Use for \"Whi","description":"List the available voices (timbres) with language, gender, age, accent and use case; filter by any of them. Use for \"Which young female English voices does JoggAI offer\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"page":{"anyOf":[{"maximum":100000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"},"page_size":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":10,"description":"Items per page (1 to 100).","title":"Page Size"},"gender":{"anyOf":[{"enum":["female","male"],"type":"string"},{"type":"null"}],"default":null,"description":"Voice gender.","title":"Gender"},"language":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"Language name or code.","title":"Language"},"age":{"anyOf":[{"enum":["young","middle_aged","old"],"type":"string"},{"type":"null"}],"default":null,"description":"Age group.","title":"Age"},"use_case":{"anyOf":[{"maxLength":60,"type":"string"},{"type":"null"}],"default":null,"description":"Use case, for example narration or advertising.","title":"Use Case"}},"title":"list_voicesArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_custom_voices":{"post":{"operationId":"list_custom_voices","summary":"List the voices you cloned, optionally filtered by language. Use for \"Which cloned voices do I have in JoggAI\".","description":"List the voices you cloned, optionally filtered by language. Use for \"Which cloned voices do I have in JoggAI\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"language":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"Language filter.","title":"Language"}},"title":"list_custom_voicesArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_music":{"post":{"operationId":"list_music","summary":"List the background music tracks with duration and a preview link. Use for \"What background music can I use in JoggAI vi","description":"List the background music tracks with duration and a preview link. Use for \"What background music can I use in JoggAI videos\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"page":{"anyOf":[{"maximum":100000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"},"page_size":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":10,"description":"Items per page (1 to 100).","title":"Page Size"}},"title":"list_musicArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_visual_styles":{"post":{"operationId":"list_visual_styles","summary":"List the visual styles available for product videos, optionally for one aspect ratio. Use for \"Which visual styles can J","description":"List the visual styles available for product videos, optionally for one aspect ratio. Use for \"Which visual styles can JoggAI product videos use\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"aspect_ratio":{"anyOf":[{"enum":["portrait","landscape","square"],"type":"string"},{"type":"null"}],"default":null,"description":"Only items with this aspect ratio.","title":"Aspect Ratio"}},"title":"list_visual_stylesArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_custom_templates":{"post":{"operationId":"list_custom_templates","summary":"List your own video templates, optionally for one aspect ratio. Use for \"Which custom video templates do I have in JoggA","description":"List your own video templates, optionally for one aspect ratio. Use for \"Which custom video templates do I have in JoggAI\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"aspect_ratio":{"anyOf":[{"enum":["portrait","landscape","square"],"type":"string"},{"type":"null"}],"default":null,"description":"Only items with this aspect ratio.","title":"Aspect Ratio"}},"title":"list_custom_templatesArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_custom_template":{"post":{"operationId":"get_custom_template","summary":"Get one custom template with its list of variables (text, image, video or script slots). Use for \"What variables does Jo","description":"Get one custom template with its list of variables (text, image, video or script slots). Use for \"What variables does JoggAI template 5 take\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"template_id":{"description":"Template id from list_custom_templates.","title":"Template Id","type":"integer"}},"required":["template_id"],"title":"get_custom_templateArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_product_videos":{"post":{"operationId":"list_product_videos","summary":"List videos made from products, with status, duration, cover and video links. Use for \"Which JoggAI product videos faile","description":"List videos made from products, with status, duration, cover and video links. Use for \"Which JoggAI product videos failed\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"page":{"anyOf":[{"maximum":100000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"},"page_size":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":10,"description":"Items per page (1 to 100).","title":"Page Size"},"status":{"anyOf":[{"enum":[3,4,5],"type":"integer"},{"type":"null"}],"default":null,"description":"Only items in this state: 3 processing, 4 success, 5 failed.","title":"Status"},"sort_order":{"anyOf":[{"enum":["asc","desc"],"type":"string"},{"type":"null"}],"default":null,"description":"Sort order by creation time.","title":"Sort Order"}},"title":"list_product_videosArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_template_videos":{"post":{"operationId":"list_template_videos","summary":"List videos made from templates, with status, duration, links and any error. Use for \"Which JoggAI template videos are s","description":"List videos made from templates, with status, duration, links and any error. Use for \"Which JoggAI template videos are still processing\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"page":{"anyOf":[{"maximum":100000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"},"page_size":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":10,"description":"Items per page (1 to 100).","title":"Page Size"},"status":{"anyOf":[{"enum":[3,4,5],"type":"integer"},{"type":"null"}],"default":null,"description":"Only items in this state: 3 processing, 4 success, 5 failed.","title":"Status"},"sort_order":{"anyOf":[{"enum":["asc","desc"],"type":"string"},{"type":"null"}],"default":null,"description":"Sort order by creation time.","title":"Sort Order"}},"title":"list_template_videosArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_avatar_video":{"post":{"operationId":"get_avatar_video","summary":"Get one talking-avatar video: status, video link and cover. Use for \"Is JoggAI avatar video av1 ready\".","description":"Get one talking-avatar video: status, video link and cover. Use for \"Is JoggAI avatar video av1 ready\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"video_id":{"description":"Video id returned when the video was created.","maxLength":200,"title":"Video Id","type":"string"}},"required":["video_id"],"title":"get_avatar_videoArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}}}}