{"openapi":"3.1.0","info":{"title":"Inworld (BYOK) API","version":"0.1.0","description":"Inworld (BYOK) lets an AI assistant read your own Inworld data through the Inworld API with a key you supply (Inworld API key (the Base64 credential)). Read-only: 7 tools (list_voices, get_voice, list_tts_voices, list_llm_models, query_usage, list_videos, list_routers). The BYOK key travels with each request, is used for that one call only and is never stored, logged or cached; it is only ever...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-inworld.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-inworld/docs"},"termsOfService":"https://connectorbay.com/byok-inworld/terms"},"servers":[{"url":"https://byok-inworld.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-inworld/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/list_voices":{"post":{"operationId":"list_voices","summary":"List text-to-speech voices (system, your clones and optionally community voices) with language, gender, age group and ta","description":"List text-to-speech voices (system, your clones and optionally community voices) with language, gender, age group and tags; supports an AIP-160 filter. Use for \"Which Inworld voices are female English voices\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"filter":{"anyOf":[{"maxLength":300,"type":"string"},{"type":"null"}],"default":null,"description":"AIP-160 filter with quoted values, for example gender = \"female\" AND lang_code = \"en\". Fields: source, gender, age_group, lang_code, tags, categories, owned, community.","title":"Filter"},"order_by":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":"display_name asc","description":"Sort field with optional direction, for example 'created_at desc'. Fields: display_name, created_at, gender, age_group.","title":"Order By"},"page_size":{"anyOf":[{"maximum":2000,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"How many voices to return (at most 2000).","title":"Page Size"},"page_token":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"The nextPageToken from the previous answer, to get the next page.","title":"Page Token"}},"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/get_voice":{"post":{"operationId":"get_voice","summary":"Get one voice's language, description, source, gender, age group and tags. Use for \"Describe the Inworld voice Alex\".","description":"Get one voice's language, description, source, gender, age group and tags. Use for \"Describe the Inworld voice Alex\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"voice_id":{"description":"Voice id from list_voices, for example 'Alex'.","maxLength":200,"title":"Voice Id","type":"string"}},"required":["voice_id"],"title":"get_voiceArguments","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_tts_voices":{"post":{"operationId":"list_tts_voices","summary":"List the voices usable for speech synthesis, optionally limited to one language, and mark which are custom voices of you","description":"List the voices usable for speech synthesis, optionally limited to one language, and mark which are custom voices of your workspace. Use for \"Which Inworld speech voices exist for Spanish\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"filter":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"Only voices of one language, written as language=<ISO 639-1 code>, for example language=es.","title":"Filter"}},"title":"list_tts_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_llm_models":{"post":{"operationId":"list_llm_models","summary":"List the LLM models reachable through the Inworld Router with provider, context length, capabilities, per-token prices a","description":"List the LLM models reachable through the Inworld Router with provider, context length, capabilities, per-token prices and recent reliability. Use for \"Which models does the Inworld Router offer from Anthropic\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"provider":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only models of this provider, for example 'openai'.","title":"Provider"},"model":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only the model with this exact id.","title":"Model"},"output_modalities":{"anyOf":[{"maxLength":60,"type":"string"},{"type":"null"}],"default":null,"description":"Comma-separated output modalities (text, image, video, decisions) or 'all'.","title":"Output Modalities"}},"title":"list_llm_modelsArguments","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/query_usage":{"post":{"operationId":"query_usage","summary":"Get metered usage volume (characters, tokens, audio seconds) per UTC day or hour, optionally grouped by service, model o","description":"Get metered usage volume (characters, tokens, audio seconds) per UTC day or hour, optionally grouped by service, model or provider. Needs the Builder plan or above; covers the last 30 days. Use for \"How many characters of speech did I use on Inworld per model last week\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"start_time":{"description":"Range start, inclusive, ISO 8601 UTC, for example 2026-10-10T00:00:00Z.","maxLength":200,"title":"Start Time","type":"string"},"end_time":{"description":"Range end, exclusive, ISO 8601 UTC.","maxLength":200,"title":"End Time","type":"string"},"granularity":{"anyOf":[{"enum":["GRANULARITY_DAY","GRANULARITY_HOUR"],"type":"string"},{"type":"null"}],"default":"GRANULARITY_DAY","description":"Bucket size: day or hour (hour only for ranges up to 30 days).","title":"Granularity"},"group_by":{"anyOf":[{"enum":["USAGE_DIMENSION_SERVICE","USAGE_DIMENSION_MODEL","USAGE_DIMENSION_SERVICE_PROVIDER"],"type":"string"},{"type":"null"}],"default":null,"description":"Optional single dimension to group by.","title":"Group By"},"page_size":{"anyOf":[{"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"Maximum records per page (the server coerces values above its maximum).","title":"Page Size"},"page_token":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"The nextPageToken from the previous answer.","title":"Page Token"}},"required":["start_time","end_time"],"title":"query_usageArguments","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_videos":{"post":{"operationId":"list_videos","summary":"List video generation jobs, newest first, with model, status, length, resolution and expiry; the finished video link is ","description":"List video generation jobs, newest first, with model, status, length, resolution and expiry; the finished video link is not returned. Use for \"Which of my Inworld video jobs failed\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"How many jobs to return (1 to 100).","title":"Limit"},"after":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"A job id (usually last_id of the previous page); returns jobs created before it.","title":"After"}},"title":"list_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_routers":{"post":{"operationId":"list_routers","summary":"List the names and display names of Router configurations in the workspace. Use for \"What Inworld routers have I set up\"","description":"List the names and display names of Router configurations in the workspace. Use for \"What Inworld routers have I set up\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"page_size":{"anyOf":[{"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"Maximum routers to return.","title":"Page Size"},"page_token":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Page token from a previous list call.","title":"Page Token"}},"title":"list_routersArguments","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}}}}