Work with this as data
Every API here is available over the APIs.io API and to AI agents over MCP.
MCP server
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
Tools for apis
7 MCP tools reach this
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.
Call it yourself
curl for this page
This API
curl "https://apis.io/api/v1/apis/apptentive-metrics-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Get an API key
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
OpenAPI Specification
openapi: 3.2.0
info:
description: Public API Service
version: 2.0.0
title: public-api-service experimental Metrics API
termsOfService: https://www.apptentive.com/terms/
servers:
- url: https://data.apptentive.com/
- url: http://data.apptentive.com/
tags:
- name: metrics
description: metrics data endpoints
paths:
/metrics/v2/apps:
get:
tags:
- metrics
summary: Get All Available Apps
description: Expose All Apps Assosiated with the JWT Token
operationId: getAllApps
security:
- ApiKeyAuth: []
parameters:
- name: start_date
in: query
description: start date in format of YYYY-MM-DD
required: false
schema:
type: string
- name: end_date
in: query
description: end date in format of YYYY-MM-DD
required: false
schema:
type: string
- name: api_key
in: query
description: (optional) you can provide the X-API-KEY as 'api_key' query parameter
required: false
schema:
type: string
- name: accept
in: query
description: (optional) you can provide the accept header as 'accept' query parameter
required: false
schema:
type: string
responses:
'200':
description: the list of available apps
content:
application/json:
schema:
$ref: '#/components/schemas/RollupResponseArray'
application/xml:
schema:
$ref: '#/components/schemas/RollupResponseArray'
'400':
description: bad request
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorBadRequestResponse'
application/xml:
schema:
$ref: '#/components/schemas/ErrorBadRequestResponse'
'401':
description: not authorized
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorUnauthorizedResponse'
application/xml:
schema:
$ref: '#/components/schemas/ErrorUnauthorizedResponse'
'500':
description: internal server error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorInternalErrorResponse'
application/xml:
schema:
$ref: '#/components/schemas/ErrorInternalErrorResponse'
/metrics/v2/apps/{app_id}/app-health/active-users:
get:
tags:
- metrics
summary: Active Users Data
description: Active Users Data
operationId: getActiveUsersData
security:
- ApiKeyAuth: []
parameters:
- name: app_id
in: path
description: the application id in mongo id format (ex. 5e22085d5379215be800002b)
required: true
schema:
type: string
- name: start_date
in: query
description: start date in format of YYYY-MM-DD
required: true
schema:
type: string
- name: end_date
in: query
description: end date in format of YYYY-MM-DD
required: true
schema:
type: string
- name: period
in: query
description: 'granularity period: [ day | week | month | quarter | year | all ]'
required: false
schema:
type: string
- name: api_key
in: query
description: (optional) you can provide the X-API-KEY as 'api_key' query parameter
required: false
schema:
type: string
- name: accept
in: query
description: (optional) you can provide the accept header as 'accept' query parameter
required: false
schema:
type: string
responses:
'200':
description: active users data
content:
application/json:
schema:
$ref: '#/components/schemas/ActiveUserResponse'
application/xml:
schema:
$ref: '#/components/schemas/ActiveUserResponse'
'400':
description: bad request
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorBadRequestResponse'
application/xml:
schema:
$ref: '#/components/schemas/ErrorBadRequestResponse'
'401':
description: not authorized
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorUnauthorizedResponse'
application/xml:
schema:
$ref: '#/components/schemas/ErrorUnauthorizedResponse'
'500':
description: internal server error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorInternalErrorResponse'
application/xml:
schema:
$ref: '#/components/schemas/ErrorInternalErrorResponse'
/metrics/v2/apps/{app_id}/app-health/interactions/notes:
get:
tags:
- metrics
summary: Get Notes Timeseries
description: Get Notes Timeseries
operationId: getNotes
security:
- ApiKeyAuth: []
parameters:
- name: app_id
in: path
description: the application id in mongo id format (ex. 5e22085d5379215be800002b)
required: true
schema:
type: string
- name: start_date
in: query
description: start date in format of YYYY-MM-DD
required: true
schema:
type: string
- name: end_date
in: query
description: end date in format of YYYY-MM-DD
required: true
schema:
type: string
- name: api_key
in: query
description: (optional) you can provide the X-API-KEY as 'api_key' query parameter
required: false
schema:
type: string
- name: accept
in: query
description: (optional) you can provide the accept header as 'accept' query parameter
required: false
schema:
type: string
responses:
'200':
description: notes timeseries data
content:
application/json:
schema:
$ref: '#/components/schemas/NotesDataResponse'
application/xml:
schema:
$ref: '#/components/schemas/NotesDataResponse'
'400':
description: bad request
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorBadRequestResponse'
application/xml:
schema:
$ref: '#/components/schemas/ErrorBadRequestResponse'
'401':
description: not authorized
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorUnauthorizedResponse'
application/xml:
schema:
$ref: '#/components/schemas/ErrorUnauthorizedResponse'
'500':
description: internal server error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorInternalErrorResponse'
application/xml:
schema:
$ref: '#/components/schemas/ErrorInternalErrorResponse'
/metrics/v2/apps/{app_id}/app-health/interactions/surveys:
get:
tags:
- metrics
summary: Get Surveys Timeseries
description: Get Surveys Timeseries
operationId: getSurveys
security:
- ApiKeyAuth: []
parameters:
- name: app_id
in: path
description: the application id in mongo id format (ex. 5e22085d5379215be800002b)
required: true
schema:
type: string
- name: start_date
in: query
description: start date in format of YYYY-MM-DD
required: true
schema:
type: string
- name: end_date
in: query
description: end date in format of YYYY-MM-DD
required: true
schema:
type: string
- name: api_key
in: query
description: (optional) you can provide the X-API-KEY as 'api_key' query parameter
required: false
schema:
type: string
- name: accept
in: query
description: (optional) you can provide the accept header as 'accept' query parameter
required: false
schema:
type: string
responses:
'200':
description: surveys timeseries data
content:
application/json:
schema:
$ref: '#/components/schemas/SurveyDataResponse'
application/xml:
schema:
$ref: '#/components/schemas/SurveyDataResponse'
'400':
description: bad request
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorBadRequestResponse'
application/xml:
schema:
$ref: '#/components/schemas/ErrorBadRequestResponse'
'401':
description: not authorized
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorUnauthorizedResponse'
application/xml:
schema:
$ref: '#/components/schemas/ErrorUnauthorizedResponse'
'500':
description: internal server error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorInternalErrorResponse'
application/xml:
schema:
$ref: '#/components/schemas/ErrorInternalErrorResponse'
/metrics/v2/apps/{app_id}/app-health/love-percent:
get:
tags:
- metrics
summary: Love Percent Data
description: Love Percent Data
operationId: getLovePercentData
security:
- ApiKeyAuth: []
parameters:
- name: app_id
in: path
description: the application id in mongo id format (ex. 5e22085d5379215be800002b)
required: true
schema:
type: string
- name: start_date
in: query
description: start date in format of YYYY-MM-DD
required: true
schema:
type: string
- name: end_date
in: query
description: end date in format of YYYY-MM-DD
required: true
schema:
type: string
- name: api_key
in: query
description: (optional) you can provide the X-API-KEY as 'api_key' query parameter
required: false
schema:
type: string
- name: accept
in: query
description: (optional) you can provide the accept header as 'accept' query parameter
required: false
schema:
type: string
responses:
'200':
description: love percent timeseries data
content:
application/json:
schema:
$ref: '#/components/schemas/LovePercentResponse'
application/xml:
schema:
$ref: '#/components/schemas/LovePercentResponse'
'400':
description: bad request
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorBadRequestResponse'
application/xml:
schema:
$ref: '#/components/schemas/ErrorBadRequestResponse'
'401':
description: not authorized
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorUnauthorizedResponse'
application/xml:
schema:
$ref: '#/components/schemas/ErrorUnauthorizedResponse'
'500':
description: internal server error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorInternalErrorResponse'
application/xml:
schema:
$ref: '#/components/schemas/ErrorInternalErrorResponse'
/metrics/v2/apps/{app_id}/app-health/ratings:
get:
tags:
- metrics
summary: Star Ratings Data
description: Star Ratings Data
operationId: getRatings
security:
- ApiKeyAuth: []
parameters:
- name: app_id
in: path
description: the application id in mongo id format (ex. 5e22085d5379215be800002b)
required: true
schema:
type: string
- name: start_date
in: query
description: start date in format of YYYY-MM-DD
required: true
schema:
type: string
- name: end_date
in: query
description: end date in format of YYYY-MM-DD
required: true
schema:
type: string
- name: api_key
in: query
description: (optional) you can provide the X-API-KEY as 'api_key' query parameter
required: false
schema:
type: string
- name: accept
in: query
description: (optional) you can provide the accept header as 'accept' query parameter
required: false
schema:
type: string
responses:
'200':
description: star ratings data
content:
application/json:
schema:
$ref: '#/components/schemas/RatingsDataResponse'
application/xml:
schema:
$ref: '#/components/schemas/RatingsDataResponse'
text/csv:
schema:
$ref: '#/components/schemas/RatingsDataResponse'
'400':
description: bad request
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorBadRequestResponse'
application/xml:
schema:
$ref: '#/components/schemas/ErrorBadRequestResponse'
text/csv:
schema:
$ref: '#/components/schemas/ErrorBadRequestResponse'
'401':
description: not authorized
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorUnauthorizedResponse'
application/xml:
schema:
$ref: '#/components/schemas/ErrorUnauthorizedResponse'
text/csv:
schema:
$ref: '#/components/schemas/ErrorUnauthorizedResponse'
'500':
description: internal server error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorInternalErrorResponse'
application/xml:
schema:
$ref: '#/components/schemas/ErrorInternalErrorResponse'
text/csv:
schema:
$ref: '#/components/schemas/ErrorInternalErrorResponse'
/metrics/v2/apps/{app_id}/app-health/retention:
get:
tags:
- metrics
summary: Retention Data
description: Retention Data
operationId: getRetention
security:
- ApiKeyAuth: []
parameters:
- name: app_id
in: path
description: the application id in mongo id format (ex. 5e22085d5379215be800002b)
required: true
schema:
type: string
- name: start_date
in: query
description: start date in format of YYYY-MM-DD
required: true
schema:
type: string
- name: end_date
in: query
description: end date in format of YYYY-MM-DD
required: true
schema:
type: string
- name: period
in: query
description: retention period, should be 'monthly' or 'daily'
required: true
schema:
type: string
- name: api_key
in: query
description: (optional) you can provide the X-API-KEY as 'api_key' query parameter
required: false
schema:
type: string
- name: accept
in: query
description: (optional) you can provide the accept header as 'accept' query parameter
required: false
schema:
type: string
responses:
'200':
description: retention data
content:
application/json:
schema:
$ref: '#/components/schemas/RetentionResponse'
application/xml:
schema:
$ref: '#/components/schemas/RetentionResponse'
'400':
description: bad request
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorBadRequestResponse'
application/xml:
schema:
$ref: '#/components/schemas/ErrorBadRequestResponse'
'401':
description: not authorized
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorUnauthorizedResponse'
application/xml:
schema:
$ref: '#/components/schemas/ErrorUnauthorizedResponse'
'500':
description: internal server error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorInternalErrorResponse'
application/xml:
schema:
$ref: '#/components/schemas/ErrorInternalErrorResponse'
/metrics/v2/apps/{app_id}/fan-signals/counts:
get:
tags:
- metrics
summary: Fan Signals Counts Data
description: Fan Signals Counts Data
operationId: getFSCounts
security:
- ApiKeyAuth: []
parameters:
- name: app_id
in: path
description: the application id in mongo id format (ex. 5e22085d5379215be800002b)
required: true
schema:
type: string
- name: start_date
in: query
description: start date in format of YYYY-MM-DD
required: true
schema:
type: string
- name: end_date
in: query
description: end date in format of YYYY-MM-DD
required: true
schema:
type: string
- name: api_key
in: query
description: (optional) you can provide the X-API-KEY as 'api_key' query parameter
required: false
schema:
type: string
- name: accept
in: query
description: (optional) you can provide the accept header as 'accept' query parameter
required: false
schema:
type: string
responses:
'200':
description: fs counts data
content:
application/json:
schema:
$ref: '#/components/schemas/FanSignalsCountsArray'
application/xml:
schema:
$ref: '#/components/schemas/FanSignalsCountsArray'
'400':
description: bad request
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorBadRequestResponse'
application/xml:
schema:
$ref: '#/components/schemas/ErrorBadRequestResponse'
'401':
description: not authorized
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorUnauthorizedResponse'
application/xml:
schema:
$ref: '#/components/schemas/ErrorUnauthorizedResponse'
'500':
description: internal server error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorInternalErrorResponse'
application/xml:
schema:
$ref: '#/components/schemas/ErrorInternalErrorResponse'
/metrics/v2/apps/{app_id}/fan-signals/net-fan-score:
get:
tags:
- metrics
summary: Net Fan Score Data
description: Net Fan Score Data
operationId: getNFSData
security:
- ApiKeyAuth: []
parameters:
- name: app_id
in: path
description: the application id in mongo id format (ex. 5e22085d5379215be800002b)
required: true
schema:
type: string
- name: start_date
in: query
description: start date in format of YYYY-MM-DD
required: true
schema:
type: string
- name: end_date
in: query
description: end date in format of YYYY-MM-DD
required: true
schema:
type: string
- name: api_key
in: query
description: (optional) you can provide the X-API-KEY as 'api_key' query parameter
required: false
schema:
type: string
- name: accept
in: query
description: (optional) you can provide the accept header as 'accept' query parameter
required: false
schema:
type: string
responses:
'200':
description: net fan score data
content:
application/json:
schema:
$ref: '#/components/schemas/NetFanScoreResponse'
application/xml:
schema:
$ref: '#/components/schemas/NetFanScoreResponse'
'400':
description: bad request
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorBadRequestResponse'
application/xml:
schema:
$ref: '#/components/schemas/ErrorBadRequestResponse'
'401':
description: not authorized
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorUnauthorizedResponse'
application/xml:
schema:
$ref: '#/components/schemas/ErrorUnauthorizedResponse'
'500':
description: internal server error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorInternalErrorResponse'
application/xml:
schema:
$ref: '#/components/schemas/ErrorInternalErrorResponse'
/metrics/v2/apps/{app_id}/reviews:
get:
tags:
- metrics
summary: fetch app reviews
description: fetch app reviews
operationId: fetchReviews
security:
- ApiKeyAuth: []
parameters:
- name: app_id
in: path
description: the application id in mongo id format (ex. 5e22085d5379215be800002b)
required: true
schema:
type: string
- name: start_date
in: query
description: start date in format of YYYY-MM-DD
required: false
schema:
type: string
- name: end_date
in: query
description: end date in format of YYYY-MM-DD
required: false
schema:
type: string
- name: page_size
in: query
description: the page size number
required: false
schema:
type: string
default: 100
- name: starts_after
in: query
description: the non-inclusive offset in in mongo id format (ex. 5e22085d5379215be800002b)
required: false
schema:
type: string
- name: regions
in: query
description: 'regions filter, can be comma-separated like US,CA,.. '
required: false
schema:
type: string
- name: api_key
in: query
description: (optional) you can provide the X-API-KEY as 'api_key' query parameter
required: false
schema:
type: string
- name: accept
in: query
description: (optional) you can provide the accept header as 'accept' query parameter
required: false
schema:
type: string
responses:
'200':
description: the reviews response
content:
application/json:
schema:
$ref: '#/components/schemas/ReviewResponse'
application/xml:
schema:
$ref: '#/components/schemas/ReviewResponse'
text/csv:
schema:
$ref: '#/components/schemas/ReviewResponse'
'400':
description: bad request
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorBadRequestResponse'
application/xml:
schema:
$ref: '#/components/schemas/ErrorBadRequestResponse'
text/csv:
schema:
$ref: '#/components/schemas/ErrorBadRequestResponse'
'401':
description: not authorized
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorUnauthorizedResponse'
application/xml:
schema:
$ref: '#/components/schemas/ErrorUnauthorizedResponse'
text/csv:
schema:
$ref: '#/components/schemas/ErrorUnauthorizedResponse'
'500':
description: internal server error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorInternalErrorResponse'
application/xml:
schema:
$ref: '#/components/schemas/ErrorInternalErrorResponse'
text/csv:
schema:
$ref: '#/components/schemas/ErrorInternalErrorResponse'
/metrics/v2/apps/{app_id}/stats/events:
get:
tags:
- metrics
summary: Event Stats
description: Events Stats
operationId: getEventStats
security:
- ApiKeyAuth: []
parameters:
- name: app_id
in: path
description: the application id in mongo id format (ex. 5e22085d5379215be800002b)
required: true
schema:
type: string
- name: start_date
in: query
description: start date in format of YYYY-MM-DD
required: true
schema:
type: string
- name: end_date
in: query
description: end date in format of YYYY-MM-DD
required: true
schema:
type: string
- name: include_all
in: query
description: include apptentive events
required: false
schema:
type: boolean
- name: api_key
in: query
description: (optional) you can provide the X-API-KEY as 'api_key' query parameter
required: false
schema:
type: string
- name: accept
in: query
description: (optional) you can provide the accept header as 'accept' query parameter
required: false
schema:
type: string
responses:
'200':
description: event stats data
content:
application/json:
schema:
$ref: '#/components/schemas/EventStatsArray'
application/xml:
schema:
$ref: '#/components/schemas/EventStatsArray'
'400':
description: bad request
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorBadRequestResponse'
application/xml:
schema:
$ref: '#/components/schemas/ErrorBadRequestResponse'
'401':
description: not authorized
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorUnauthorizedResponse'
application/xml:
schema:
$ref: '#/components/schemas/ErrorUnauthorizedResponse'
'500':
description: internal server error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorInternalErrorResponse'
application/xml:
schema:
$ref: '#/components/schemas/ErrorInternalErrorResponse'
/metrics/v2/apps/{app_id}/stats/event-trend:
get:
tags:
- metrics
summary: Event Trend Stats
description: Events Trend Stats
operationId: getEventTrendStats
security:
- ApiKeyAuth: []
parameters:
- name: app_id
in: path
description: the application id in mongo id format (ex. 5e22085d5379215be800002b)
required: true
schema:
type: string
- name: start_date
in: query
description: start date in format of YYYY-MM-DD
required: true
schema:
type: string
- name: end_date
in: query
description: end date in format of YYYY-MM-DD
required: true
schema:
type: string
- name: label
in: query
description: event label
required: true
schema:
type: string
- name: api_key
in: query
description: (optional) you can provide the X-API-KEY as 'api_key' query parameter
required: false
schema:
type: string
- name: accept
in: query
description: (optional) you can provide the accept header as 'accept' query parameter
required: false
schema:
type: string
responses:
'200':
description: event stats trend data
content:
application/json:
schema:
$ref: '#/components/schemas/EventStatsTrend'
application/xml:
schema:
$ref: '#/components/schemas/EventStatsTrend'
'400':
description: bad request
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorBadRequestResponse'
application/xml:
schema:
$ref: '#/components/schemas/ErrorBadRequestResponse'
'401':
description: not authorized
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorUnauthorizedResponse'
application/xml:
schema:
$ref: '#/components/schemas/ErrorUnauthorizedResponse'
'500':
description: internal server error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorInternalErrorResponse'
application/xml:
schema:
$ref: '#/components/schemas/ErrorInternalErrorResponse'
/metrics/v2/apps/{app_id}/stats/notes:
get:
tags:
- metrics
summary: Notes Stats
description: Notes Stats
operationId: getNotesStats
security:
- ApiKeyAuth: []
parameters:
- name: app_id
in: path
description: the application id in mongo id format (ex. 5e22085d5379215be800002b)
required: true
schema:
type: string
- name: api_key
in: query
description: (optional) you can provide the X-API-KEY as 'api_key' query parameter
required: false
schema:
type: string
- name: accept
in: query
description: (optional) you can provide the accept header as 'accept' query parameter
required: false
schema:
type: string
responses:
'200':
description: notes stats data
content:
application/json:
schema:
$ref: '#/components/schemas/NotesStatsArray'
application/xml:
schema:
$ref: '#/components/schemas/NotesStatsArray'
'400':
description: bad request
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorBadRequestResponse'
application/xml:
schema:
$ref: '#/components/schemas/ErrorBadRequestResponse'
# --- truncated at 32 KB (83 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/apptentive/refs/heads/main/openapi/apptentive-metrics-api-openapi.yml