{"openapi":"3.1.0","info":{"title":"Edge Impulse (BYOK) API","version":"0.1.0","description":"Edge Impulse (BYOK) lets an AI assistant read your own Edge Impulse data through the Edge Impulse API with a key you supply (Edge Impulse project API key (starts with ei_; a project key only sees its own project)). Read-only: 10 tools (get_api_key_info, list_projects, list_devices, list_samples, count_samples, get_dataset_ratio, list_impulses, list_active_jobs, list_finished_jobs,...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-edgeimpulse.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-edgeimpulse/docs"},"termsOfService":"https://connectorbay.com/byok-edgeimpulse/terms"},"servers":[{"url":"https://byok-edgeimpulse.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-edgeimpulse/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_api_key_info":{"post":{"operationId":"get_api_key_info","summary":"Show which project the API key belongs to, its role (admin, readonly, ingestion) and its expiry date. Use for \"Which Edg","description":"Show which project the API key belongs to, its role (admin, readonly, ingestion) and its expiry date. Use for \"Which Edge Impulse project is my API key for and when does it expire\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"get_api_key_infoArguments","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 active projects the key can see, with name, owner, labeling method, category, tier and last modified time. A pr","description":"List the active projects the key can see, with name, owner, labeling method, category, tier and last modified time. A project key lists only its own project. Use for \"Which Edge Impulse projects do I have\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"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/list_devices":{"post":{"operationId":"list_devices","summary":"List the devices registered with a project: name, type, last seen time and remote management connection state. Use for \"","description":"List the devices registered with a project: name, type, last seen time and remote management connection state. Use for \"Which devices are connected to my Edge Impulse project\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"project_id":{"description":"Edge Impulse project id (a number) from list_projects or get_api_key_info.","minimum":1,"title":"Project Id","type":"integer"}},"required":["project_id"],"title":"list_devicesArguments","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_samples":{"post":{"operationId":"list_samples","summary":"List dataset samples in a project by category with label, length, frequency, source device and whether the sample is dis","description":"List dataset samples in a project by category with label, length, frequency, source device and whether the sample is disabled. Sample data points are not returned. Use for \"What training samples are in my Edge Impulse project\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"project_id":{"description":"Edge Impulse project id (a number) from list_projects or get_api_key_info.","minimum":1,"title":"Project Id","type":"integer"},"category":{"description":"Which part of the dataset: training, testing, validation, post-processing or all.","enum":["training","testing","validation","post-processing","all"],"title":"Category","type":"string"},"limit":{"anyOf":[{"maximum":500,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"How many results to return.","title":"Limit"},"offset":{"anyOf":[{"maximum":1000000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"How many results to skip, for paging.","title":"Offset"},"labels":{"anyOf":[{"maxLength":500,"type":"string"},{"type":"null"}],"default":null,"description":"Only samples whose label is in this JSON list, for example '[\"idle\",\"snake\"]'.","title":"Labels"},"filename":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only samples whose file name matches this text.","title":"Filename"},"include_disabled":{"anyOf":[{"enum":["both","enabled","disabled"],"type":"string"},{"type":"null"}],"default":null,"description":"Whether to include disabled samples.","title":"Include Disabled"},"sort_by":{"anyOf":[{"enum":["id-desc","random"],"type":"string"},{"type":"null"}],"default":null,"description":"Sort order: newest first (id-desc) or random.","title":"Sort By"}},"required":["project_id","category"],"title":"list_samplesArguments","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/count_samples":{"post":{"operationId":"count_samples","summary":"Count the samples in a project, for one dataset category or for all of them. Use for \"How many samples does my Edge Impu","description":"Count the samples in a project, for one dataset category or for all of them. Use for \"How many samples does my Edge Impulse project have\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"project_id":{"description":"Edge Impulse project id (a number) from list_projects or get_api_key_info.","minimum":1,"title":"Project Id","type":"integer"},"category":{"description":"Which part of the dataset: training, testing, validation, post-processing or all.","enum":["training","testing","validation","post-processing","all"],"title":"Category","type":"string"},"labels":{"anyOf":[{"maxLength":500,"type":"string"},{"type":"null"}],"default":null,"description":"Only count samples whose label is in this JSON list.","title":"Labels"},"include_disabled":{"anyOf":[{"enum":["both","enabled","disabled"],"type":"string"},{"type":"null"}],"default":null,"description":"Whether to include disabled samples.","title":"Include Disabled"}},"required":["project_id","category"],"title":"count_samplesArguments","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_ratio":{"post":{"operationId":"get_dataset_ratio","summary":"Show how the dataset is split between training, validation and testing. Use for \"What is my Edge Impulse train and test ","description":"Show how the dataset is split between training, validation and testing. Use for \"What is my Edge Impulse train and test split\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"project_id":{"description":"Edge Impulse project id (a number) from list_projects or get_api_key_info.","minimum":1,"title":"Project Id","type":"integer"}},"required":["project_id"],"title":"get_dataset_ratioArguments","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_impulses":{"post":{"operationId":"list_impulses","summary":"List the impulses (the signal-processing and learning pipelines) in a project with id and name, plus the maximum your pl","description":"List the impulses (the signal-processing and learning pipelines) in a project with id and name, plus the maximum your plan allows. Use for \"What impulses are in my Edge Impulse project\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"project_id":{"description":"Edge Impulse project id (a number) from list_projects or get_api_key_info.","minimum":1,"title":"Project Id","type":"integer"}},"required":["project_id"],"title":"list_impulsesArguments","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_active_jobs":{"post":{"operationId":"list_active_jobs","summary":"List jobs that are running or queued in a project (training, feature generation, builds) with category, start time and c","description":"List jobs that are running or queued in a project (training, feature generation, builds) with category, start time and compute time. Use for \"Is anything running in my Edge Impulse project right now\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"project_id":{"description":"Edge Impulse project id (a number) from list_projects or get_api_key_info.","minimum":1,"title":"Project Id","type":"integer"},"root_only":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"True to leave out jobs started as part of another job.","title":"Root Only"}},"required":["project_id"],"title":"list_active_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/list_finished_jobs":{"post":{"operationId":"list_finished_jobs","summary":"List finished jobs with category, start and finish time, success flag and compute time, optionally within a date range. ","description":"List finished jobs with category, start and finish time, success flag and compute time, optionally within a date range. Use for \"Which training jobs finished in my Edge Impulse project and did they succeed\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"project_id":{"description":"Edge Impulse project id (a number) from list_projects or get_api_key_info.","minimum":1,"title":"Project Id","type":"integer"},"start_date":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"Only jobs from this date and time on (ISO 8601).","title":"Start Date"},"end_date":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"Only jobs up to this date and time (ISO 8601).","title":"End Date"},"root_only":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"True to leave out jobs started as part of another job.","title":"Root Only"},"limit":{"anyOf":[{"maximum":500,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"How many results to return.","title":"Limit"},"offset":{"anyOf":[{"maximum":1000000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"How many results to skip, for paging.","title":"Offset"}},"required":["project_id"],"title":"list_finished_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/list_deployment_history":{"post":{"operationId":"list_deployment_history","summary":"List the model builds deployed from a project: version, format, engine, model type, impulse and time. Use for \"What depl","description":"List the model builds deployed from a project: version, format, engine, model type, impulse and time. Use for \"What deployments have I built in my Edge Impulse project\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"project_id":{"description":"Edge Impulse project id (a number) from list_projects or get_api_key_info.","minimum":1,"title":"Project Id","type":"integer"},"impulse_id":{"anyOf":[{"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"Only deployments of this impulse id.","title":"Impulse Id"},"deployment_format":{"anyOf":[{"maxLength":60,"type":"string"},{"type":"null"}],"default":null,"description":"Only this deployment format (for example zip or arduino).","title":"Deployment Format"},"limit":{"anyOf":[{"maximum":500,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"How many results to return.","title":"Limit"},"offset":{"anyOf":[{"maximum":1000000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"How many results to skip, for paging.","title":"Offset"}},"required":["project_id"],"title":"list_deployment_historyArguments","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}}}}