{"openapi":"3.1.0","info":{"title":"Luciq (BYOK) API","version":"0.1.0","description":"Luciq (BYOK) lets an AI assistant read your own Luciq data through the Luciq API with a key you supply (Luciq Query API key (starts with lq_)). Read-only: 7 tools (list_entities, get_rate_limit, query_crash_free_sessions, query_sessions_by_os_version, query_top_failing_endpoints, query_top_crash_groups, query_entity_metric). The BYOK key travels with each request, is used for that one call only...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-luciq.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-luciq/docs"},"termsOfService":"https://connectorbay.com/byok-luciq/terms"},"servers":[{"url":"https://byok-luciq.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-luciq/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_entities":{"post":{"operationId":"list_entities","summary":"List the entities your key can query (crashes, sessions, bugs, networks, launches, screen loading, screen rendering, flo","description":"List the entities your key can query (crashes, sessions, bugs, networks, launches, screen loading, screen rendering, flows) with their columns, operators, metrics and plan limits. Use it to find valid metric and column names. Use for \"Which Luciq data and metrics can my key query\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_entitiesArguments","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_rate_limit":{"post":{"operationId":"get_rate_limit","summary":"Show how many Luciq Query API requests remain in the current per-minute and per-hour windows. Reads the counters without","description":"Show how many Luciq Query API requests remain in the current per-minute and per-hour windows. Reads the counters without using them. Use for \"How many Luciq API requests do I have left this minute\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"get_rate_limitArguments","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_crash_free_sessions":{"post":{"operationId":"query_crash_free_sessions","summary":"Crash-free session rate (or session count) per time bucket for one app and environment. Returns columns and rows, where ","description":"Crash-free session rate (or session count) per time bucket for one app and environment. Returns columns and rows, where the first column is the bucket start in epoch milliseconds. Each call counts against the plan's monthly query quota. Use for \"What was our crash-free session rate each day last week\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"application":{"description":"Application slug as shown in the Luciq dashboard URL (for example 'react-native-demo-app'). An app token is not accepted here.","maxLength":200,"title":"Application","type":"string"},"environment":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":"production","description":"App environment to query, for example production.","title":"Environment"},"last":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":"7d","description":"Relative time window: a number plus m, h, d or w (for example 7d or 24h). Maximum 3 years.","title":"Last"},"metric":{"anyOf":[{"enum":["crash_free_sessions","count"],"type":"string"},{"type":"null"}],"default":"crash_free_sessions","description":"Sessions metric: crash_free_sessions or count.","title":"Metric"},"bucket":{"anyOf":[{"enum":["hour","day","week","month"],"type":"string"},{"type":"null"}],"default":"day","description":"Time bucket size.","title":"Bucket"}},"required":["application"],"title":"query_crash_free_sessionsArguments","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_sessions_by_os_version":{"post":{"operationId":"query_sessions_by_os_version","summary":"Session counts for the top N app versions (as ranked by Luciq), split by operating system version, for one app and envir","description":"Session counts for the top N app versions (as ranked by Luciq), split by operating system version, for one app and environment. Each call counts against the plan's monthly query quota. Use for \"Which OS versions run our newest app release\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"application":{"description":"Application slug as shown in the Luciq dashboard URL (for example 'react-native-demo-app'). An app token is not accepted here.","maxLength":200,"title":"Application","type":"string"},"environment":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":"production","description":"App environment to query, for example production.","title":"Environment"},"last":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":"7d","description":"Relative time window: a number plus m, h, d or w (for example 7d or 24h). Maximum 3 years.","title":"Last"},"top_versions":{"anyOf":[{"maximum":20,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"How many top app versions to include (1 to 20).","title":"Top Versions"}},"required":["application"],"title":"query_sessions_by_os_versionArguments","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_top_failing_endpoints":{"post":{"operationId":"query_top_failing_endpoints","summary":"Network endpoints with the highest request counts or failure rates per time bucket, with failure rate and request count,","description":"Network endpoints with the highest request counts or failure rates per time bucket, with failure rate and request count, for one app and environment. Each call counts against the plan's monthly query quota. Use for \"Which API endpoints fail most in our mobile app\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"application":{"description":"Application slug as shown in the Luciq dashboard URL (for example 'react-native-demo-app'). An app token is not accepted here.","maxLength":200,"title":"Application","type":"string"},"environment":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":"production","description":"App environment to query, for example production.","title":"Environment"},"last":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":"24h","description":"Relative time window: a number plus m, h, d or w (for example 24h).","title":"Last"},"n":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":10,"description":"How many endpoints to keep per time bucket (1 to 100).","title":"N"},"rank_by":{"anyOf":[{"enum":["count","failure_rate"],"type":"string"},{"type":"null"}],"default":"failure_rate","description":"Rank endpoints by count or failure_rate.","title":"Rank By"},"bucket":{"anyOf":[{"enum":["hour","day"],"type":"string"},{"type":"null"}],"default":"hour","description":"Time bucket size.","title":"Bucket"}},"required":["application"],"title":"query_top_failing_endpointsArguments","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_top_crash_groups":{"post":{"operationId":"query_top_crash_groups","summary":"Crash groups ranked by number of occurrences in a time window, one row per crash number, for one app and environment. Ea","description":"Crash groups ranked by number of occurrences in a time window, one row per crash number, for one app and environment. Each call counts against the plan's monthly query quota. Use for \"Which crashes happened most in the last 30 days\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"application":{"description":"Application slug as shown in the Luciq dashboard URL (for example 'react-native-demo-app'). An app token is not accepted here.","maxLength":200,"title":"Application","type":"string"},"environment":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":"production","description":"App environment to query, for example production.","title":"Environment"},"last":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":"30d","description":"Relative time window: a number plus m, h, d or w (for example 30d).","title":"Last"},"limit":{"anyOf":[{"maximum":1000,"minimum":1,"type":"integer"},{"type":"null"}],"default":100,"description":"How many crash groups to return (1 to 1000).","title":"Limit"},"offset":{"anyOf":[{"maximum":10000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"Rows to skip, for paging.","title":"Offset"}},"required":["application"],"title":"query_top_crash_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/query_entity_metric":{"post":{"operationId":"query_entity_metric","summary":"Run one aggregated metric of any entity per time bucket (for example launches, screen_loading, bugs). Metric names per e","description":"Run one aggregated metric of any entity per time bucket (for example launches, screen_loading, bugs). Metric names per entity come from list_entities; count works for the entities shown in the docs. Each call counts against the plan's monthly query quota. Use for \"Show the daily count of bug reports for the last two weeks\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"application":{"description":"Application slug as shown in the Luciq dashboard URL (for example 'react-native-demo-app'). An app token is not accepted here.","maxLength":200,"title":"Application","type":"string"},"entity":{"description":"Entity to query.","enum":["crashes","sessions","bugs","networks","launches","screen_loading","screen_rendering","flows"],"title":"Entity","type":"string"},"environment":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":"production","description":"App environment to query, for example production.","title":"Environment"},"last":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":"7d","description":"Relative time window: a number plus m, h, d or w (for example 7d or 24h). Maximum 3 years.","title":"Last"},"metric":{"anyOf":[{"maxLength":60,"type":"string"},{"type":"null"}],"default":"count","description":"Catalog metric name for that entity (see list_entities), for example count.","title":"Metric"},"bucket":{"anyOf":[{"enum":["hour","day","week","month"],"type":"string"},{"type":"null"}],"default":"day","description":"Time bucket size.","title":"Bucket"}},"required":["application","entity"],"title":"query_entity_metricArguments","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}}}}