{"openapi":"3.1.0","info":{"title":"Mapbox Studio (BYOK) API","version":"0.1.0","description":"Mapbox Studio (BYOK) lets an AI assistant read your own Mapbox Studio data through the Mapbox Studio API with a key you supply (Mapbox access token (secret token with the read and list scopes of the resources you want)). Read-only: 11 tools (list_styles, get_style, list_datasets, get_dataset, list_dataset_features, get_dataset_feature, list_tilesets, list_tileset_jobs, get_tileset_recipe,...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-mapbox-studio.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-mapbox-studio/docs"},"termsOfService":"https://connectorbay.com/byok-mapbox-studio/terms"},"servers":[{"url":"https://byok-mapbox-studio.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-mapbox-studio/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_styles":{"post":{"operationId":"list_styles","summary":"List the map styles of an account with name, id, owner, created and modified time (metadata only). Needs the styles:list","description":"List the map styles of an account with name, id, owner, created and modified time (metadata only). Needs the styles:list scope. Use for \"Which Mapbox styles does my account have\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"username":{"description":"Mapbox account username that owns the resources, for example 'myaccount' (use 'mapbox' for Mapbox's public styles).","maxLength":64,"title":"Username","type":"string"},"draft":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":false,"description":"True to list only draft styles (default false lists all).","title":"Draft"},"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"Maximum number of styles to return.","title":"Limit"},"start":{"anyOf":[{"maxLength":64,"type":"string"},{"type":"null"}],"default":null,"description":"ID of the style after which to continue listing.","title":"Start"}},"required":["username"],"title":"list_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/get_style":{"post":{"operationId":"get_style","summary":"Get one style's header information: name, owner, visibility, protection and draft flags, center, zoom, sources and sprit","description":"Get one style's header information: name, owner, visibility, protection and draft flags, center, zoom, sources and sprite. Layers are left out. Needs the styles:read scope. Use for \"Show details of Mapbox style cjikt35x83t1z2rnxpdmjs7y7\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"username":{"description":"Mapbox account username that owns the resources, for example 'myaccount' (use 'mapbox' for Mapbox's public styles).","maxLength":64,"title":"Username","type":"string"},"style_id":{"description":"Style id, for example 'cjikt35x83t1z2rnxpdmjs7y7'.","maxLength":64,"title":"Style Id","type":"string"}},"required":["username","style_id"],"title":"get_styleArguments","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_datasets":{"post":{"operationId":"list_datasets","summary":"List the datasets (editable GeoJSON collections) of an account with name, description, feature count, size and bounds. N","description":"List the datasets (editable GeoJSON collections) of an account with name, description, feature count, size and bounds. Needs the datasets:list scope. Use for \"Which Mapbox datasets do I have\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"username":{"description":"Mapbox account username that owns the resources, for example 'myaccount' (use 'mapbox' for Mapbox's public styles).","maxLength":64,"title":"Username","type":"string"},"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"Maximum number of datasets to return.","title":"Limit"},"sortby":{"anyOf":[{"enum":["modified","created"],"type":"string"},{"type":"null"}],"default":null,"description":"Sort by modified (most recent first) or created (oldest first).","title":"Sortby"},"start":{"anyOf":[{"maxLength":64,"type":"string"},{"type":"null"}],"default":null,"description":"ID of the dataset after which to continue listing.","title":"Start"}},"required":["username"],"title":"list_datasetsArguments","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_dataset":{"post":{"operationId":"get_dataset","summary":"Get one dataset's information: name, description, owner, dates, feature count, size and bounds. Needs the datasets:read ","description":"Get one dataset's information: name, description, owner, dates, feature count, size and bounds. Needs the datasets:read scope. Use for \"How many features are in Mapbox dataset ckd1abc2d0001xyz\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"username":{"description":"Mapbox account username that owns the resources, for example 'myaccount' (use 'mapbox' for Mapbox's public styles).","maxLength":64,"title":"Username","type":"string"},"dataset_id":{"description":"Dataset id, for example 'ckd1abc2d0001xyz'.","maxLength":64,"title":"Dataset Id","type":"string"}},"required":["username","dataset_id"],"title":"get_datasetArguments","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_dataset_features":{"post":{"operationId":"list_dataset_features","summary":"List the GeoJSON features of a dataset (up to 1000 per call) with ids, properties and geometry. Needs the datasets:read ","description":"List the GeoJSON features of a dataset (up to 1000 per call) with ids, properties and geometry. Needs the datasets:read scope. Use for \"Show the features in Mapbox dataset ckd1abc2d0001xyz\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"username":{"description":"Mapbox account username that owns the resources, for example 'myaccount' (use 'mapbox' for Mapbox's public styles).","maxLength":64,"title":"Username","type":"string"},"dataset_id":{"description":"Dataset id, for example 'ckd1abc2d0001xyz'.","maxLength":64,"title":"Dataset Id","type":"string"},"limit":{"anyOf":[{"maximum":1000,"minimum":1,"type":"integer"},{"type":"null"}],"default":100,"description":"Maximum number of features to return (1 to 1000, default 1000).","title":"Limit"},"start":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"ID of the feature after which to continue listing.","title":"Start"}},"required":["username","dataset_id"],"title":"list_dataset_featuresArguments","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_dataset_feature":{"post":{"operationId":"get_dataset_feature","summary":"Get one feature of a dataset by id: its geometry and properties. Needs the datasets:read scope. Use for \"Show feature pa","description":"Get one feature of a dataset by id: its geometry and properties. Needs the datasets:read scope. Use for \"Show feature park-001 of Mapbox dataset ckd1abc2d0001xyz\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"username":{"description":"Mapbox account username that owns the resources, for example 'myaccount' (use 'mapbox' for Mapbox's public styles).","maxLength":64,"title":"Username","type":"string"},"dataset_id":{"description":"Dataset id, for example 'ckd1abc2d0001xyz'.","maxLength":64,"title":"Dataset Id","type":"string"},"feature_id":{"description":"Feature id, for example 'park-001'.","maxLength":200,"title":"Feature Id","type":"string"}},"required":["username","dataset_id","feature_id"],"title":"get_dataset_featureArguments","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_tilesets":{"post":{"operationId":"list_tilesets","summary":"List the tilesets of an account with type, name, visibility, status, size and dates. Needs the tilesets:list scope. Use ","description":"List the tilesets of an account with type, name, visibility, status, size and dates. Needs the tilesets:list scope. Use for \"Which Mapbox tilesets does my account have\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"username":{"description":"Mapbox account username that owns the resources, for example 'myaccount' (use 'mapbox' for Mapbox's public styles).","maxLength":64,"title":"Username","type":"string"},"type":{"anyOf":[{"enum":["raster","rasterarray","vector"],"type":"string"},{"type":"null"}],"default":null,"description":"Only this tileset type.","title":"Type"},"visibility":{"anyOf":[{"enum":["public","private"],"type":"string"},{"type":"null"}],"default":null,"description":"Only public or private tilesets.","title":"Visibility"},"sortby":{"anyOf":[{"enum":["modified","created"],"type":"string"},{"type":"null"}],"default":null,"description":"Sort by created or modified time.","title":"Sortby"},"limit":{"anyOf":[{"maximum":500,"minimum":1,"type":"integer"},{"type":"null"}],"default":100,"description":"Maximum number of items to return (1 to 500, default 100).","title":"Limit"},"start":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"ID of the last item of the previous page to continue after; leave empty for the first page.","title":"Start"}},"required":["username"],"title":"list_tilesetsArguments","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_tileset_jobs":{"post":{"operationId":"list_tileset_jobs","summary":"List the processing jobs of one tileset (publish runs) with stage, dates, errors, warnings and file size; can filter by ","description":"List the processing jobs of one tileset (publish runs) with stage, dates, errors, warnings and file size; can filter by stage. Needs the tilesets:list scope. Use for \"Did the last publish job of tileset myaccount.parks succeed\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"tileset_id":{"description":"Tileset id in the form username.name, for example 'myaccount.parks'.","maxLength":120,"title":"Tileset Id","type":"string"},"stage":{"anyOf":[{"enum":["processing","queued","success","failed","superseded"],"type":"string"},{"type":"null"}],"default":null,"description":"Only jobs at this stage.","title":"Stage"},"limit":{"anyOf":[{"maximum":500,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"Maximum number of jobs to return (1 to 500, default 100).","title":"Limit"},"start":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"ID of the last item of the previous page to continue after; leave empty for the first page.","title":"Start"}},"required":["tileset_id"],"title":"list_tileset_jobsArguments","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_tileset_recipe":{"post":{"operationId":"get_tileset_recipe","summary":"Get the recipe (layer definitions, zoom range and source) used to build a tileset. Needs the tilesets:list scope. Use fo","description":"Get the recipe (layer definitions, zoom range and source) used to build a tileset. Needs the tilesets:list scope. Use for \"Show the recipe of tileset myaccount.parks\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"tileset_id":{"description":"Tileset id in the form username.name, for example 'myaccount.parks'.","maxLength":120,"title":"Tileset Id","type":"string"}},"required":["tileset_id"],"title":"get_tileset_recipeArguments","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_tileset_sources":{"post":{"operationId":"list_tileset_sources","summary":"List the tileset sources (uploaded GeoJSON inputs for tilesets) of an account with file count and size. Needs the tilese","description":"List the tileset sources (uploaded GeoJSON inputs for tilesets) of an account with file count and size. Needs the tilesets:list scope. Use for \"Which tileset sources have I uploaded to Mapbox\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"username":{"description":"Mapbox account username that owns the resources, for example 'myaccount' (use 'mapbox' for Mapbox's public styles).","maxLength":64,"title":"Username","type":"string"},"sortby":{"anyOf":[{"enum":["modified","created"],"type":"string"},{"type":"null"}],"default":null,"description":"Sort by created or modified time.","title":"Sortby"},"limit":{"anyOf":[{"maximum":500,"minimum":1,"type":"integer"},{"type":"null"}],"default":100,"description":"Maximum number of items to return (1 to 500, default 100).","title":"Limit"},"start":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"ID of the last item of the previous page to continue after; leave empty for the first page.","title":"Start"}},"required":["username"],"title":"list_tileset_sourcesArguments","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_tileset_activity":{"post":{"operationId":"list_tileset_activity","summary":"List 30-day request activity for the account's tilesets (request count, last modified), busiest first by default. Needs ","description":"List 30-day request activity for the account's tilesets (request count, last modified), busiest first by default. Needs the tilesets:list scope. Use for \"Which of my Mapbox tilesets got the most requests in the last 30 days\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"username":{"description":"Mapbox account username that owns the resources, for example 'myaccount' (use 'mapbox' for Mapbox's public styles).","maxLength":64,"title":"Username","type":"string"},"sortby":{"anyOf":[{"enum":["requests","modified"],"type":"string"},{"type":"null"}],"default":null,"description":"Sort by requests (default) or modified.","title":"Sortby"},"orderby":{"anyOf":[{"enum":["asc","desc"],"type":"string"},{"type":"null"}],"default":null,"description":"Sort direction: desc (default) or asc.","title":"Orderby"},"limit":{"anyOf":[{"maximum":500,"minimum":1,"type":"integer"},{"type":"null"}],"default":100,"description":"Maximum number of items to return (1 to 500, default 100).","title":"Limit"},"start":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"ID of the last item of the previous page to continue after; leave empty for the first page.","title":"Start"}},"required":["username"],"title":"list_tileset_activityArguments","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}}}}