{"openapi":"3.1.0","info":{"title":"UXCam (BYOK) API","version":"0.1.0","description":"UXCam (BYOK) lets an AI assistant read your own UXCam data through the UXCam API with a key you supply (UXCam Data Access API key). Read-only: 7 tools (get_session_analytics, get_sessions_by_platform, get_sessions_by_country, get_sessions_by_app_version, get_sessions_by_day, get_user_analytics, get_event_analytics). The BYOK key travels with each request, is used for that one call only and is...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-uxcam.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-uxcam/docs"},"termsOfService":"https://connectorbay.com/byok-uxcam/terms"},"servers":[{"url":"https://byok-uxcam.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-uxcam/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_session_analytics":{"post":{"operationId":"get_session_analytics","summary":"Get aggregate session statistics for the app (session count, unique users, average duration and interactions), optionall","description":"Get aggregate session statistics for the app (session count, unique users, average duration and interactions), optionally grouped and filtered. Aggregates only; individual sessions are not returned. Use for \"How many sessions did my app have, and how long do they last\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"group_by":{"anyOf":[{"maxLength":500,"type":"string"},{"type":"null"}],"default":null,"description":"Optional JSON array that groups the numbers, for example [{\"attribute\":\"device_model\",\"max_group_number\":20}].","title":"Group By"},"filters":{"anyOf":[{"maxLength":1500,"type":"string"},{"type":"null"}],"default":null,"description":"Optional JSON array of filters, for example [{\"attribute\":\"device_country\",\"operator\":\"equal\",\"value\":\"USA\"}]. Operators include equal, not_equal, in, not_in, greater, less, between_dates (attribute date_range).","title":"Filters"},"aggregation":{"anyOf":[{"maxLength":500,"type":"string"},{"type":"null"}],"default":null,"description":"Optional JSON array choosing metrics, for example [{\"attribute\":\"session_count\"}]. Session metrics include session_count, session_unique_user_count, avg_session_duration, avg_session_gesture_count.","title":"Aggregation"},"comparison":{"anyOf":[{"const":1,"type":"integer"},{"type":"null"}],"default":null,"description":"Set to 1 to also compare with the previous period.","title":"Comparison"}},"title":"get_session_analyticsArguments","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_sessions_by_platform":{"post":{"operationId":"get_sessions_by_platform","summary":"Get session counts, unique users and average duration split by platform (iOS or Android). Use for \"How do my UXCam sessi","description":"Get session counts, unique users and average duration split by platform (iOS or Android). Use for \"How do my UXCam sessions split between iOS and Android\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"group_by":{"anyOf":[{"maxLength":500,"type":"string"},{"type":"null"}],"default":"[{\"attribute\":\"device_platform\",\"max_group_number\":20}]","description":"JSON array that groups the numbers. Default groups by device_platform.","title":"Group By"},"filters":{"anyOf":[{"maxLength":1500,"type":"string"},{"type":"null"}],"default":null,"description":"Optional JSON array of filters, for example [{\"attribute\":\"device_country\",\"operator\":\"equal\",\"value\":\"USA\"}]. Operators include equal, not_equal, in, not_in, greater, less, between_dates (attribute date_range).","title":"Filters"},"comparison":{"anyOf":[{"const":1,"type":"integer"},{"type":"null"}],"default":null,"description":"Set to 1 to also compare with the previous period.","title":"Comparison"}},"title":"get_sessions_by_platformArguments","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_sessions_by_country":{"post":{"operationId":"get_sessions_by_country","summary":"Get session counts, unique users and average duration split by country. Use for \"Which countries have the most sessions ","description":"Get session counts, unique users and average duration split by country. Use for \"Which countries have the most sessions in my UXCam app\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"group_by":{"anyOf":[{"maxLength":500,"type":"string"},{"type":"null"}],"default":"[{\"attribute\":\"device_country\",\"max_group_number\":20}]","description":"JSON array that groups the numbers. Default groups by device_country.","title":"Group By"},"filters":{"anyOf":[{"maxLength":1500,"type":"string"},{"type":"null"}],"default":null,"description":"Optional JSON array of filters, for example [{\"attribute\":\"device_country\",\"operator\":\"equal\",\"value\":\"USA\"}]. Operators include equal, not_equal, in, not_in, greater, less, between_dates (attribute date_range).","title":"Filters"},"comparison":{"anyOf":[{"const":1,"type":"integer"},{"type":"null"}],"default":null,"description":"Set to 1 to also compare with the previous period.","title":"Comparison"}},"title":"get_sessions_by_countryArguments","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_sessions_by_app_version":{"post":{"operationId":"get_sessions_by_app_version","summary":"Get session counts, unique users and average duration split by app version. Use for \"Which app versions are most used in","description":"Get session counts, unique users and average duration split by app version. Use for \"Which app versions are most used in UXCam\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"group_by":{"anyOf":[{"maxLength":500,"type":"string"},{"type":"null"}],"default":"[{\"attribute\":\"app_version\",\"max_group_number\":20}]","description":"JSON array that groups the numbers. Default groups by app_version.","title":"Group By"},"filters":{"anyOf":[{"maxLength":1500,"type":"string"},{"type":"null"}],"default":null,"description":"Optional JSON array of filters, for example [{\"attribute\":\"device_country\",\"operator\":\"equal\",\"value\":\"USA\"}]. Operators include equal, not_equal, in, not_in, greater, less, between_dates (attribute date_range).","title":"Filters"},"comparison":{"anyOf":[{"const":1,"type":"integer"},{"type":"null"}],"default":null,"description":"Set to 1 to also compare with the previous period.","title":"Comparison"}},"title":"get_sessions_by_app_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/get_sessions_by_day":{"post":{"operationId":"get_sessions_by_day","summary":"Get session counts, unique users and average duration per upload day. Use for \"How many sessions did my app have per day","description":"Get session counts, unique users and average duration per upload day. Use for \"How many sessions did my app have per day in UXCam\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"group_by":{"anyOf":[{"maxLength":500,"type":"string"},{"type":"null"}],"default":"[{\"attribute\":\"session_uploadedon_day\",\"max_group_number\":20}]","description":"JSON array that groups the numbers. Default groups by session_uploadedon_day.","title":"Group By"},"filters":{"anyOf":[{"maxLength":1500,"type":"string"},{"type":"null"}],"default":null,"description":"Optional JSON array of filters, for example [{\"attribute\":\"device_country\",\"operator\":\"equal\",\"value\":\"USA\"}]. Operators include equal, not_equal, in, not_in, greater, less, between_dates (attribute date_range).","title":"Filters"},"comparison":{"anyOf":[{"const":1,"type":"integer"},{"type":"null"}],"default":null,"description":"Set to 1 to also compare with the previous period.","title":"Comparison"}},"title":"get_sessions_by_dayArguments","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_user_analytics":{"post":{"operationId":"get_user_analytics","summary":"Get aggregate user statistics for the app (user count, new users, average sessions and time per user), optionally groupe","description":"Get aggregate user statistics for the app (user count, new users, average sessions and time per user), optionally grouped and filtered. Aggregates only. Use for \"How many users does my app have in UXCam\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"group_by":{"anyOf":[{"maxLength":500,"type":"string"},{"type":"null"}],"default":null,"description":"Optional JSON array that groups the numbers, for example [{\"attribute\":\"device_model\",\"max_group_number\":20}].","title":"Group By"},"filters":{"anyOf":[{"maxLength":1500,"type":"string"},{"type":"null"}],"default":null,"description":"Optional JSON array of filters, for example [{\"attribute\":\"device_country\",\"operator\":\"equal\",\"value\":\"USA\"}]. Operators include equal, not_equal, in, not_in, greater, less, between_dates (attribute date_range).","title":"Filters"},"comparison":{"anyOf":[{"const":1,"type":"integer"},{"type":"null"}],"default":null,"description":"Set to 1 to also compare with the previous period.","title":"Comparison"}},"title":"get_user_analyticsArguments","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_event_analytics":{"post":{"operationId":"get_event_analytics","summary":"Get aggregate counts for custom events (event count, unique users, unique sessions), optionally filtered by event name a","description":"Get aggregate counts for custom events (event count, unique users, unique sessions), optionally filtered by event name and grouped, for example per day. Use for \"How many times was the purchase event fired in my UXCam app\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"group_by":{"anyOf":[{"maxLength":500,"type":"string"},{"type":"null"}],"default":null,"description":"Optional JSON array that groups the numbers, for example [{\"attribute\":\"device_model\",\"max_group_number\":20}].","title":"Group By"},"filters":{"anyOf":[{"maxLength":1500,"type":"string"},{"type":"null"}],"default":null,"description":"Optional JSON array of filters, for example [{\"attribute\":\"device_country\",\"operator\":\"equal\",\"value\":\"USA\"}]. Operators include equal, not_equal, in, not_in, greater, less, between_dates (attribute date_range).","title":"Filters"},"comparison":{"anyOf":[{"const":1,"type":"integer"},{"type":"null"}],"default":null,"description":"Set to 1 to also compare with the previous period.","title":"Comparison"}},"title":"get_event_analyticsArguments","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}}}}