Endpoints With No Requests Report
Endpoint
GET /apiops/projects/{projectName}/reports/inactive-endpoints
The Management API counterpart of the Endpoints with No Requests report on the Analytics screens. Like Clients With No Requests, it is project-scoped: the project is part of the path and is authorized before the report is built.
Every endpoint of the project's API proxies is listed with its request counts; pass maxUsage=0 for the strictly unused ones.
Authentication
Requires a Personal API Access Token whose user holds Analytics / View permission in the project named in the path. A project the caller cannot see answers 404 — the same answer as a project that does not exist, so the endpoint cannot be used to discover project names.
A platform-scoped (administration) token has no project to read and is refused with 400 malformedRequest.
Header
Authorization: Bearer YOUR_TOKEN
Request
Path Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| projectName | string | Yes | Name of the project whose endpoints are reported |
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| environmentName | string | Yes | Name of the environment whose traffic log is read |
| from | string | No | Range start, ISO-8601 or Elasticsearch date math. Default now-30d |
| to | string | No | Range end, ISO-8601 or Elasticsearch date math. Default now |
| apiProxyName | string | No | Restricts the report to one API proxy, by name |
| minUsage | integer | No | Lowest request count a row may have. Default 0 |
| maxUsage | integer | No | Highest request count a row may have. Pass 0 for the strictly unused endpoints |
| page | integer | No | Zero-based page index |
| size | integer | No | Rows per page |
| sort | string | No | field[,asc|desc] over apiProxyName, httpMethod, endpoint, total, endpointRef |
Notes
- References travel as names: the proxy as its project-unique
name, the endpoint as its path plus HTTP method. No internal identifier appears in the response, soapiProxyNamecan be fed straight back into/api-proxies/{apiProxyName}. httpMethodis what distinguishes two rows of the same path:GET /petandPOST /petare different endpoints. It isnullwhere the definition genuinely has no HTTP method — SOAP operations, and the method-less proxy kinds (reverse proxy, mirror, connector), whose single row describes the whole proxy and carriesendpoint: "/".endpointRefis the default ordering: proxy name, then HTTP method, then path. It is unique within a project, which is what makes a page walk repeatable.- An
apiProxyNameoutside the caller's project scope answers404.
Response
Success Response (200 OK)
{
"status": "SUCCESS",
"items": [
{
"apiProxyName": "PetstoreProxy",
"httpMethod": "POST",
"endpoint": "/pet/{petId}/uploadImage",
"counts": {
"successful": 0,
"blocked": 0,
"error": 0,
"total": 0
}
},
{
"apiProxyName": "LegacySoapProxy",
"endpoint": "GetCustomerBalance",
"counts": {
"successful": 12,
"blocked": 0,
"error": 1,
"total": 13
}
}
],
"page": 0,
"size": 20,
"totalElements": 2,
"totalPages": 1,
"sort": ["endpointRef,asc"],
"coverage": {
"dataAvailableFrom": "2026-06-01T00:00:00Z",
"warning": "apinizerManagerApp.inactiveEndpoints.coverageWarning",
"retentionDays": 90
}
}
Response Fields
| Field | Type | Description |
|---|---|---|
| apiProxyName | string | Name of the API proxy that owns the endpoint |
| httpMethod | string | HTTP method of the endpoint; absent for SOAP operations and method-less proxies |
| endpoint | string | Endpoint path as defined on the proxy; / for a proxy that has no methods |
| counts.successful | integer | Requests the gateway answered as SUCCESS inside the range |
| counts.blocked | integer | Requests blocked by a policy |
| counts.error | integer | Requests that ended in an error |
| counts.total | integer | Sum of the three |
| coverage.dataAvailableFrom | string | Oldest traffic-log record of this project and environment |
| coverage.warning | string | Set when the requested range is not fully covered by the traffic log |
| coverage.retentionDays | integer | Traffic-log retention in days, when the connector deletes old indices |
counts.total: 0 means no request inside the retained traffic log, not "never called". Read coverage.dataAvailableFrom before acting on it: a pipeline that retires every endpoint with a zero total would retire the ones whose traffic simply fell out of the retention window.
Error Responses
| Status | errorKey | When |
|---|---|---|
| 400 | malformedRequest | A platform-scoped token, a missing environmentName, or an unreadable page / sort value |
| 404 | resourceNotFound | Unknown project, unknown environmentName, or an apiProxyName outside the project scope |
| 503 | temporarilyUnavailable | The environment's Elasticsearch connector is disabled, unconfigured or unreachable |
Example
# Every endpoint that received nothing in the last 90 days
curl -X GET \
"https://apinizer.example.com/apiops/projects/MyProject/reports/inactive-endpoints?environmentName=Production&from=now-90d&to=now&maxUsage=0" \
-H "Authorization: Bearer YOUR_TOKEN"
# One proxy's endpoints, busiest first
curl -X GET \
"https://apinizer.example.com/apiops/projects/MyProject/reports/inactive-endpoints?environmentName=Production&apiProxyName=PetstoreProxy&sort=total,desc" \
-H "Authorization: Bearer YOUR_TOKEN"
Related Documentation
- Clients With No Requests Report - The identity-side counterpart, with the same coverage block
- Usage Reports Management API - What a subject consumed, and the per-API breakdown of one consumer or application
- Reports API - Report endpoint overview
- Authentication Guide - How to obtain and use API tokens
- Error Handling - Error response formats