{"openapi":"3.1.0","info":{"title":"Felt (BYOK) API","version":"0.1.0","description":"Felt (BYOK) lets an AI assistant read your own Felt data through the Felt API with a key you supply (Felt personal access token (starts with felt_pat_)). Read-only: 11 tools (get_current_user, list_projects, get_project, get_map, list_map_layers, get_map_layer, list_map_layer_groups, list_map_elements, list_sources, get_source, list_library_layers). The BYOK key travels with each request, is used...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-felt.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-felt/docs"},"termsOfService":"https://connectorbay.com/byok-felt/terms"},"servers":[{"url":"https://byok-felt.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-felt/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_current_user":{"post":{"operationId":"get_current_user","summary":"Show the Felt account the token belongs to: user id and name. Use for \"Which Felt account is my token connected to\".","description":"Show the Felt account the token belongs to: user id and name. Use for \"Which Felt account is my token connected to\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"get_current_userArguments","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_projects":{"post":{"operationId":"list_projects","summary":"List the projects (folders for maps) in the workspace with name, visibility and the maximum inherited permission. Use fo","description":"List the projects (folders for maps) in the workspace with name, visibility and the maximum inherited permission. Use for \"Which Felt projects do I have\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"workspace_id":{"anyOf":[{"maxLength":64,"type":"string"},{"type":"null"}],"default":null,"description":"Workspace id to list from; leave empty for the token's own workspace.","title":"Workspace Id"}},"title":"list_projectsArguments","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_project":{"post":{"operationId":"get_project","summary":"Get one project with its maps (id, title, link, dates). Use for \"Which maps are in Felt project prjAb12Cd34Ef56Gh78Ij\".","description":"Get one project with its maps (id, title, link, dates). Use for \"Which maps are in Felt project prjAb12Cd34Ef56Gh78Ij\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"project_id":{"description":"Project id, for example 'prjAb12Cd34Ef56Gh78Ij'.","maxLength":64,"title":"Project Id","type":"string"}},"required":["project_id"],"title":"get_projectArguments","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_map":{"post":{"operationId":"get_map","summary":"Get one map's metadata: title, URL, basemap, project, public access level, thumbnail and dates. Use list_map_layers for ","description":"Get one map's metadata: title, URL, basemap, project, public access level, thumbnail and dates. Use list_map_layers for its layers. Use for \"What are the details of Felt map mCjGDq6nQz2xSp1kT3wLvA\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"map_id":{"description":"Felt map id (the id in the map URL or returned by get_project), for example 'mCjGDq6nQz2xSp1kT3wLvA'.","maxLength":64,"title":"Map Id","type":"string"}},"required":["map_id"],"title":"get_mapArguments","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_map_layers":{"post":{"operationId":"list_map_layers","summary":"List the layers of a map with name, geometry type, processing status, refresh schedule and source attribution. Use for \"","description":"List the layers of a map with name, geometry type, processing status, refresh schedule and source attribution. Use for \"What layers does Felt map mCjGDq6nQz2xSp1kT3wLvA have\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"map_id":{"description":"Felt map id (the id in the map URL or returned by get_project), for example 'mCjGDq6nQz2xSp1kT3wLvA'.","maxLength":64,"title":"Map Id","type":"string"},"include_uploading":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":false,"description":"True to include layers that are still uploading (default false).","title":"Include Uploading"}},"required":["map_id"],"title":"list_map_layersArguments","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_map_layer":{"post":{"operationId":"get_map_layer","summary":"Get one layer of a map: name, caption, geometry type, status, refresh settings and source attribution. Use for \"Show det","description":"Get one layer of a map: name, caption, geometry type, status, refresh settings and source attribution. Use for \"Show details of layer lyrAb12Cd34Ef56Gh78Ij90 on Felt map mCjGDq6nQz2xSp1kT3wLvA\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"map_id":{"description":"Felt map id (the id in the map URL or returned by get_project), for example 'mCjGDq6nQz2xSp1kT3wLvA'.","maxLength":64,"title":"Map Id","type":"string"},"layer_id":{"description":"Layer id from list_map_layers, for example 'lyrAb12Cd34Ef56Gh78Ij90'.","maxLength":64,"title":"Layer Id","type":"string"}},"required":["map_id","layer_id"],"title":"get_map_layerArguments","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_map_layer_groups":{"post":{"operationId":"list_map_layer_groups","summary":"List the layer groups of a map (named sets of layers shown together in the legend) with the layers in each. Use for \"How","description":"List the layer groups of a map (named sets of layers shown together in the legend) with the layers in each. Use for \"How are the layers of Felt map mCjGDq6nQz2xSp1kT3wLvA grouped\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"map_id":{"description":"Felt map id (the id in the map URL or returned by get_project), for example 'mCjGDq6nQz2xSp1kT3wLvA'.","maxLength":64,"title":"Map Id","type":"string"},"include_uploading":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":false,"description":"True to include layers that are still uploading (default false).","title":"Include Uploading"}},"required":["map_id"],"title":"list_map_layer_groupsArguments","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_map_elements":{"post":{"operationId":"list_map_elements","summary":"List the drawn annotations (markers, lines, polygons, notes) on a map as a GeoJSON feature collection. Use for \"What ann","description":"List the drawn annotations (markers, lines, polygons, notes) on a map as a GeoJSON feature collection. Use for \"What annotations are drawn on Felt map mCjGDq6nQz2xSp1kT3wLvA\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"map_id":{"description":"Felt map id (the id in the map URL or returned by get_project), for example 'mCjGDq6nQz2xSp1kT3wLvA'.","maxLength":64,"title":"Map Id","type":"string"}},"required":["map_id"],"title":"list_map_elementsArguments","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_sources":{"post":{"operationId":"list_sources","summary":"List the data sources (databases, buckets, services) connected to the workspace with type, sync status and dates. Connec","description":"List the data sources (databases, buckets, services) connected to the workspace with type, sync status and dates. Connection details are not returned. Use for \"Which data sources are connected to my Felt workspace\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"workspace_id":{"anyOf":[{"maxLength":64,"type":"string"},{"type":"null"}],"default":null,"description":"Workspace id to list from; leave empty for the token's own workspace.","title":"Workspace Id"}},"title":"list_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/get_source":{"post":{"operationId":"get_source","summary":"Get one connected data source with its sync status and the datasets it exposes. Connection details are not returned. Use","description":"Get one connected data source with its sync status and the datasets it exposes. Connection details are not returned. Use for \"Show Felt data source srcAb12Cd34Ef56Gh78Ij90 and its datasets\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"source_id":{"description":"Source id from list_sources, for example 'srcAb12Cd34Ef56Gh78Ij90'.","maxLength":64,"title":"Source Id","type":"string"}},"required":["source_id"],"title":"get_sourceArguments","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_library_layers":{"post":{"operationId":"list_library_layers","summary":"List the layers published in the workspace layer library or Felt's global library, with attribution and geometry type. U","description":"List the layers published in the workspace layer library or Felt's global library, with attribution and geometry type. Use for \"What layers are in my Felt layer library\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"source":{"anyOf":[{"enum":["workspace","felt","all"],"type":"string"},{"type":"null"}],"default":"all","description":"Which library: workspace, felt or all (default all).","title":"Source"}},"title":"list_library_layersArguments","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}}}}