Endpoints API

Read the endpoints ApiTraffic detected in a bucket with their traffic and latency, manage endpoint rules, and triage attention signals.

This page as Markdown

ApiTraffic groups requests into endpoints, such as /v1/orders/{order_id}, from your framework’s routes, your endpoint rules and the paths it sees. These operations list those endpoints with their metrics, manage the endpoint rules that name endpoints your framework does not, and read and triage the attention signals raised about them (error spikes, latency regressions and other things worth a look). See Endpoint handling for how endpoints are detected.

Permissions: any member, or a user or administrator API token, for every operation on this page.

List endpoints

GET https://api.apitraffic.io/v1/accounts/{accountSid}/buckets/{bucketSid}/endpoints

Returns the endpoints seen in a bucket during a time range, busiest first.

Path parameters

  • accountSid (path, string, required): The account identifier.

  • bucketSid (path, string, required): The bucket identifier.

Query parameters

  • startTime (query, string, required): Start of the range (ISO 8601, UTC, ending in Z).

  • endTime (query, string, required): End of the range.

  • environmentSid (query, string): Only this environment.

  • direction (query, string, default in): in for your API’s own endpoints, out for the calls it makes, grouped per upstream host.

  • limit (query, integer, default 100): Endpoints to return, 1 to 1000.

Response

  • endpoints (object[], required): One entry per endpoint: endpoint, host (for outbound endpoints, otherwise null), direction, requestCount, avgResponseTime (ms), errorCount (status 400 or above), errorRate (percent, 0 to 100), firstSeen and lastSeen.

  • total (number, required): The number of endpoints returned.

bash
curl -G https://api.apitraffic.io/v1/accounts/acc_2mXq7RbT4kPz9WvN3cHd8LsYfQa/buckets/k3m9p2x/endpoints \
  -H "Authorization: Bearer $APITRAFFIC_TOKEN" \
  --data-urlencode 'startTime=2026-10-19T00:00:00.000Z' \
  --data-urlencode 'endTime=2026-10-20T00:00:00.000Z' \
  --data-urlencode 'environmentSid=prd7k2'
js
const accountSid = 'acc_2mXq7RbT4kPz9WvN3cHd8LsYfQa';
const params = new URLSearchParams({
  startTime: '2026-10-19T00:00:00.000Z',
  endTime: '2026-10-20T00:00:00.000Z',
  environmentSid: 'prd7k2',
});
const response = await fetch(
  `https://api.apitraffic.io/v1/accounts/${accountSid}/buckets/k3m9p2x/endpoints?${params}`,
  { headers: { Authorization: `Bearer ${process.env.APITRAFFIC_TOKEN}` } },
);
const { endpoints } = await response.json();
json
{
  "endpoints": [
    {
      "endpoint": "/v1/products/{product_id}",
      "host": null,
      "direction": "in",
      "requestCount": 3120,
      "avgResponseTime": 48.2,
      "errorCount": 94,
      "errorRate": 3.01,
      "firstSeen": "2026-10-19T00:00:03.000Z",
      "lastSeen": "2026-10-19T23:59:58.000Z"
    },
    {
      "endpoint": "/v1/payments/{payment_id}/capture",
      "host": null,
      "direction": "in",
      "requestCount": 402,
      "avgResponseTime": 612.4,
      "errorCount": 61,
      "errorRate": 15.17,
      "firstSeen": "2026-10-19T00:04:11.000Z",
      "lastSeen": "2026-10-19T23:57:40.000Z"
    }
  ],
  "total": 2
}

Get endpoint metrics

GET https://api.apitraffic.io/v1/accounts/{accountSid}/buckets/{bucketSid}/endpoints/{endpoint}

Returns latency percentiles, error rates, status classes and a time series for one endpoint.

Path parameters

  • accountSid (path, string, required): The account identifier.

  • bucketSid (path, string, required): The bucket identifier.

  • endpoint (path, string, required): The endpoint pattern exactly as List endpoints returns it, URL-encoded. For example /v1/orders/{order_id} becomes %2Fv1%2Forders%2F%7Border_id%7D.

Query parameters

  • startTime (query, string, required): Start of the range.

  • endTime (query, string, required): End of the range.

  • environmentSid (query, string): Only this environment.

  • direction (query, string, default in): in or out.

  • host (query, string): For an outbound endpoint, the upstream host. Needed to tell apart the same path on two services.

  • resolution (query, string): Width of each period: 1min, 10min, 1hr, 2hr, 1d or 1mo. Defaults to 1min for a range of an hour or less, otherwise 10min.

Response

  • endpoint (string | null, required): The endpoint.

  • host (string | null): The upstream host for an outbound endpoint.

  • direction (string | null): in or out.

  • summary (object, required): The whole range: requestCount, avgResponseTime, minResponseTime, maxResponseTime, p50ResponseTime, p95ResponseTime, p99ResponseTime (all ms), errorCount, errorRate (percent), throughputRps, statusCodes (2xx, 3xx, 4xx, 5xx counts), firstSeen and lastSeen.

  • timeseries (object[], required): One entry per period: timestamp, requestCount, avgResponseTime, p95ResponseTime, errorCount, errorRate and throughputRps.

bash
curl -G "https://api.apitraffic.io/v1/accounts/acc_2mXq7RbT4kPz9WvN3cHd8LsYfQa/buckets/k3m9p2x/endpoints/%2Fv1%2Fpayments%2F%7Bpayment_id%7D%2Fcapture" \
  -H "Authorization: Bearer $APITRAFFIC_TOKEN" \
  --data-urlencode 'startTime=2026-10-19T13:00:00.000Z' \
  --data-urlencode 'endTime=2026-10-19T16:00:00.000Z' \
  --data-urlencode 'resolution=10min'
js
const accountSid = 'acc_2mXq7RbT4kPz9WvN3cHd8LsYfQa';
const endpoint = encodeURIComponent('/v1/payments/{payment_id}/capture');
const params = new URLSearchParams({
  startTime: '2026-10-19T13:00:00.000Z',
  endTime: '2026-10-19T16:00:00.000Z',
  resolution: '10min',
});
const response = await fetch(
  `https://api.apitraffic.io/v1/accounts/${accountSid}/buckets/k3m9p2x/endpoints/${endpoint}?${params}`,
  { headers: { Authorization: `Bearer ${process.env.APITRAFFIC_TOKEN}` } },
);
const { summary, timeseries } = await response.json();
json
{
  "endpoint": "/v1/payments/{payment_id}/capture",
  "host": null,
  "direction": "in",
  "summary": {
    "requestCount": 51,
    "avgResponseTime": 2310.5,
    "maxResponseTime": 4120,
    "minResponseTime": 180,
    "p50ResponseTime": 2600,
    "p95ResponseTime": 3980,
    "p99ResponseTime": 4060,
    "errorCount": 22,
    "errorRate": 43.14,
    "throughputRps": 0.005,
    "statusCodes": { "2xx": 29, "3xx": 0, "4xx": 0, "5xx": 22 },
    "firstSeen": "2026-10-19T13:02:10.000Z",
    "lastSeen": "2026-10-19T15:58:31.000Z"
  },
  "timeseries": [
    {
      "timestamp": "2026-10-19T14:00:00.000Z",
      "requestCount": 6,
      "avgResponseTime": 3610.2,
      "p95ResponseTime": 4010,
      "errorCount": 4,
      "errorRate": 66.67,
      "throughputRps": 0.01
    }
  ]
}

The endpoint rule object

An endpoint rule assigns an endpoint pattern to requests whose path matches, for paths your framework cannot name itself.

  • sid (string, required): The rule’s identifier (epr_ followed by 27 letters and digits).

  • accountSid (string, required): The account.

  • description (string | null): A short description.

  • matchPattern (string, required): The path to match. {*} matches one path segment, for example /v1/orders/{*}/items.

  • endpointPattern (string, required): The endpoint to assign, for example /v1/orders/{orderId}/items.

  • priority (integer, required): Lower numbers are checked first. Default 0.

  • direction (string, required): in (requests your API serves), out (calls it makes) or * (both). Default *.

  • hosts (string[], required): For outbound traffic, the upstream hosts the rule applies to, or ["*"].

  • buckets (string[]): The buckets the rule applies to, or ["*"].

  • environments (string[]): The environments the rule applies to, or ["*"].

  • enabled (boolean): Whether the rule is active. Default true.

  • stream (boolean): Whether matching requests are long-lived connections (streams, long polling). They still count as traffic but are left out of response-time metrics. Responses sent as text/event-stream are treated this way without a rule. Default false.

  • source (string, required): manual (written by someone) or learned (proposed from observed traffic).

  • observedValues (string[]): For learned rules, some of the segment values that led to the rule.

  • createdAt (string, required): When the rule was created (ISO 8601).

List endpoint rules

GET https://api.apitraffic.io/v1/accounts/{accountSid}/endpointRules

Returns every endpoint rule in the account.

Path parameters

  • accountSid (path, string, required): The account identifier.

Response

  • hasMore (boolean, required): Always false.

  • records (object[], required): The rules, as endpoint rule objects.

bash
curl https://api.apitraffic.io/v1/accounts/acc_2mXq7RbT4kPz9WvN3cHd8LsYfQa/endpointRules \
  -H "Authorization: Bearer $APITRAFFIC_TOKEN"
js
const accountSid = 'acc_2mXq7RbT4kPz9WvN3cHd8LsYfQa';
const response = await fetch(`https://api.apitraffic.io/v1/accounts/${accountSid}/endpointRules`, {
  headers: { Authorization: `Bearer ${process.env.APITRAFFIC_TOKEN}` },
});
const { records } = await response.json();
json
{
  "hasMore": false,
  "records": [
    {
      "sid": "epr_2aB4cD6eF8gH1iJ3kL5mN7oP9qR",
      "accountSid": "acc_2mXq7RbT4kPz9WvN3cHd8LsYfQa",
      "description": "Freight tracking calls",
      "matchPattern": "/v1/shipments/{*}/tracking",
      "endpointPattern": "/v1/shipments/{shipmentId}/tracking",
      "priority": 0,
      "direction": "out",
      "hosts": ["api.acme-freight.example"],
      "buckets": ["*"],
      "environments": ["*"],
      "enabled": true,
      "stream": false,
      "source": "manual",
      "observedValues": [],
      "createdAt": "2026-05-12T08:30:00.000Z"
    }
  ]
}

Get endpoint rule

GET https://api.apitraffic.io/v1/accounts/{accountSid}/endpointRules/{endpointRuleSid}

Returns one endpoint rule.

Path parameters

  • accountSid (path, string, required): The account identifier.

  • endpointRuleSid (path, string, required): The rule’s identifier (epr_…).

Response

An endpoint rule object.

bash
curl https://api.apitraffic.io/v1/accounts/acc_2mXq7RbT4kPz9WvN3cHd8LsYfQa/endpointRules/epr_2aB4cD6eF8gH1iJ3kL5mN7oP9qR \
  -H "Authorization: Bearer $APITRAFFIC_TOKEN"
js
const accountSid = 'acc_2mXq7RbT4kPz9WvN3cHd8LsYfQa';
const ruleSid = 'epr_2aB4cD6eF8gH1iJ3kL5mN7oP9qR';
const response = await fetch(`https://api.apitraffic.io/v1/accounts/${accountSid}/endpointRules/${ruleSid}`, {
  headers: { Authorization: `Bearer ${process.env.APITRAFFIC_TOKEN}` },
});
const rule = await response.json();
json
{
  "sid": "epr_2aB4cD6eF8gH1iJ3kL5mN7oP9qR",
  "accountSid": "acc_2mXq7RbT4kPz9WvN3cHd8LsYfQa",
  "description": "Freight tracking calls",
  "matchPattern": "/v1/shipments/{*}/tracking",
  "endpointPattern": "/v1/shipments/{shipmentId}/tracking",
  "priority": 0,
  "direction": "out",
  "hosts": ["api.acme-freight.example"],
  "buckets": ["*"],
  "environments": ["*"],
  "enabled": true,
  "stream": false,
  "source": "manual",
  "observedValues": [],
  "createdAt": "2026-05-12T08:30:00.000Z"
}

Create endpoint rule

POST https://api.apitraffic.io/v1/accounts/{accountSid}/endpointRules

Creates an endpoint rule. It applies to requests captured from then on.

Limit: the number of endpoint rules depends on the plan; past it, the API answers 409 with code 2213.

Path parameters

  • accountSid (path, string, required): The account identifier.

Body parameters

  • matchPattern (body, string, required): The path to match, with {*} for one segment.

  • endpointPattern (body, string, required): The endpoint to assign.

  • description (body, string | null): A short description.

  • priority (body, integer, default 0): 0 or more; lower numbers are checked first.

  • direction (body, string, default *): in, out or *.

  • hosts (body, string[], default [“*”]): Upstream hosts, for outbound traffic.

  • buckets (body, string[]): Bucket sids, or ["*"].

  • environments (body, string[]): Environment sids, or ["*"].

  • enabled (body, boolean, default true): Whether the rule is active.

  • stream (body, boolean, default false): Treat matching requests as long-lived connections.

Response

The new endpoint rule object.

bash
curl -X POST https://api.apitraffic.io/v1/accounts/acc_2mXq7RbT4kPz9WvN3cHd8LsYfQa/endpointRules \
  -H "Authorization: Bearer $APITRAFFIC_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "description": "Freight tracking calls",
    "matchPattern": "/v1/shipments/{*}/tracking",
    "endpointPattern": "/v1/shipments/{shipmentId}/tracking",
    "direction": "out",
    "hosts": ["api.acme-freight.example"]
  }'
js
const accountSid = 'acc_2mXq7RbT4kPz9WvN3cHd8LsYfQa';
const response = await fetch(`https://api.apitraffic.io/v1/accounts/${accountSid}/endpointRules`, {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.APITRAFFIC_TOKEN}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    description: 'Freight tracking calls',
    matchPattern: '/v1/shipments/{*}/tracking',
    endpointPattern: '/v1/shipments/{shipmentId}/tracking',
    direction: 'out',
    hosts: ['api.acme-freight.example'],
  }),
});
const rule = await response.json();
json
{
  "sid": "epr_2aB4cD6eF8gH1iJ3kL5mN7oP9qR",
  "accountSid": "acc_2mXq7RbT4kPz9WvN3cHd8LsYfQa",
  "description": "Freight tracking calls",
  "matchPattern": "/v1/shipments/{*}/tracking",
  "endpointPattern": "/v1/shipments/{shipmentId}/tracking",
  "priority": 0,
  "direction": "out",
  "hosts": ["api.acme-freight.example"],
  "buckets": ["*"],
  "environments": ["*"],
  "enabled": true,
  "stream": false,
  "source": "manual",
  "observedValues": [],
  "createdAt": "2026-10-20T11:40:00.000Z"
}

Update endpoint rule

PUT https://api.apitraffic.io/v1/accounts/{accountSid}/endpointRules/{endpointRuleSid}

Replaces an endpoint rule. matchPattern and endpointPattern are required; send the other fields with the values you want, as for Create endpoint rule. stream keeps its value when omitted.

Path parameters

  • accountSid (path, string, required): The account identifier.

  • endpointRuleSid (path, string, required): The rule’s identifier.

Body parameters

The same as Create endpoint rule.

Response

The updated endpoint rule object.

bash
curl -X PUT https://api.apitraffic.io/v1/accounts/acc_2mXq7RbT4kPz9WvN3cHd8LsYfQa/endpointRules/epr_2aB4cD6eF8gH1iJ3kL5mN7oP9qR \
  -H "Authorization: Bearer $APITRAFFIC_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "description": "Freight tracking calls",
    "matchPattern": "/v1/shipments/{*}/tracking",
    "endpointPattern": "/v1/shipments/{shipmentId}/tracking",
    "direction": "out",
    "hosts": ["api.acme-freight.example"],
    "enabled": false
  }'
js
const accountSid = 'acc_2mXq7RbT4kPz9WvN3cHd8LsYfQa';
const ruleSid = 'epr_2aB4cD6eF8gH1iJ3kL5mN7oP9qR';
const response = await fetch(`https://api.apitraffic.io/v1/accounts/${accountSid}/endpointRules/${ruleSid}`, {
  method: 'PUT',
  headers: {
    Authorization: `Bearer ${process.env.APITRAFFIC_TOKEN}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    description: 'Freight tracking calls',
    matchPattern: '/v1/shipments/{*}/tracking',
    endpointPattern: '/v1/shipments/{shipmentId}/tracking',
    direction: 'out',
    hosts: ['api.acme-freight.example'],
    enabled: false,
  }),
});
const rule = await response.json();
json
{
  "sid": "epr_2aB4cD6eF8gH1iJ3kL5mN7oP9qR",
  "accountSid": "acc_2mXq7RbT4kPz9WvN3cHd8LsYfQa",
  "description": "Freight tracking calls",
  "matchPattern": "/v1/shipments/{*}/tracking",
  "endpointPattern": "/v1/shipments/{shipmentId}/tracking",
  "priority": 0,
  "direction": "out",
  "hosts": ["api.acme-freight.example"],
  "buckets": ["*"],
  "environments": ["*"],
  "enabled": false,
  "stream": false,
  "source": "manual",
  "observedValues": [],
  "createdAt": "2026-10-20T11:40:00.000Z"
}

Delete endpoint rule

DELETE https://api.apitraffic.io/v1/accounts/{accountSid}/endpointRules/{endpointRuleSid}

Deletes an endpoint rule.

Path parameters

  • accountSid (path, string, required): The account identifier.

  • endpointRuleSid (path, string, required): The rule’s identifier.

Response

  • sid (string, required): The deleted rule’s identifier.

  • deleted (boolean, required): true.

bash
curl -X DELETE https://api.apitraffic.io/v1/accounts/acc_2mXq7RbT4kPz9WvN3cHd8LsYfQa/endpointRules/epr_2aB4cD6eF8gH1iJ3kL5mN7oP9qR \
  -H "Authorization: Bearer $APITRAFFIC_TOKEN"
js
const accountSid = 'acc_2mXq7RbT4kPz9WvN3cHd8LsYfQa';
const ruleSid = 'epr_2aB4cD6eF8gH1iJ3kL5mN7oP9qR';
await fetch(`https://api.apitraffic.io/v1/accounts/${accountSid}/endpointRules/${ruleSid}`, {
  method: 'DELETE',
  headers: { Authorization: `Bearer ${process.env.APITRAFFIC_TOKEN}` },
});
json
{
  "sid": "epr_2aB4cD6eF8gH1iJ3kL5mN7oP9qR",
  "deleted": true
}

The attention signal object

Attention signals are raised by a background evaluation of each bucket’s recent traffic, independent of any time range you pick in the app.

Plan: signals are raised for plans that include Attention signals. Reading and triaging existing signals keeps working if the plan changes.

  • sid (string, required): The signal’s identifier (asig_ followed by 27 letters and digits).

  • accountSid (string, required): The account.

  • bucketSid (string, required): The bucket.

  • environmentSid (string | null): The environment.

  • signalType (string, required): error_rate, error_hotspot, latency_regression, error_regression, slow_endpoint, waf_blocked, waf_would_block, drift_breaking, drift_high or drift_open.

  • subjectType (string, required): bucket or endpoint.

  • subject (string | null): The endpoint, for endpoint signals.

  • severity (string, required): critical, warning or info.

  • status (string, required): open, acknowledged, snoozed, dismissed or resolved.

  • title (string | null): A one-line summary.

  • detail (string | null): More detail.

  • metricValue (number | null): The number that raised the signal, in metricUnit (percent, ms or count).

  • context (object): Supporting counts; the shape depends on signalType.

  • occurrenceCount (number, required): How many evaluations have seen the signal firing.

  • firstSeenAt (string | null): First seen.

  • lastSeenAt (string | null): Last seen.

  • resolvedAt (string | null): When the problem stopped.

  • dismissedAt (string | null): When it was dismissed, and dismissedByUserSid by whom.

  • snoozedUntil (string | null): When a snoozed signal comes back.

  • createdAt (string | null): When the signal was first raised.

List attention signals

GET https://api.apitraffic.io/v1/accounts/{accountSid}/buckets/{bucketSid}/attentionSignals

Returns a bucket’s signals. By default only those someone should see now: firing, and not dismissed or snoozed.

Path parameters

  • accountSid (path, string, required): The account identifier.

  • bucketSid (path, string, required): The bucket identifier.

Query parameters

  • environmentSid (query, string): Only this environment.

  • status (query, string): Only this status: open, acknowledged, snoozed, dismissed or resolved.

  • signalType (query, string): Only this type.

  • severity (query, string): critical, warning or info.

  • visibleOnly (query, boolean, default true): Pass false to include dismissed, snoozed and resolved signals.

  • limit (query, integer, default 250): Signals to return, 1 to 1000.

Response

  • hasMore (boolean, required): Whether more signals match than were returned.

  • records (object[], required): The signals, as attention signal objects.

bash
curl -G https://api.apitraffic.io/v1/accounts/acc_2mXq7RbT4kPz9WvN3cHd8LsYfQa/buckets/k3m9p2x/attentionSignals \
  -H "Authorization: Bearer $APITRAFFIC_TOKEN" \
  --data-urlencode 'severity=critical'
js
const accountSid = 'acc_2mXq7RbT4kPz9WvN3cHd8LsYfQa';
const response = await fetch(
  `https://api.apitraffic.io/v1/accounts/${accountSid}/buckets/k3m9p2x/attentionSignals?severity=critical`,
  { headers: { Authorization: `Bearer ${process.env.APITRAFFIC_TOKEN}` } },
);
const { records } = await response.json();
json
{
  "hasMore": false,
  "records": [
    {
      "sid": "asig_2fG4hJ6kL8mN1pQ3rS5tU7vW9xY",
      "accountSid": "acc_2mXq7RbT4kPz9WvN3cHd8LsYfQa",
      "bucketSid": "k3m9p2x",
      "environmentSid": "prd7k2",
      "signalType": "error_hotspot",
      "subjectType": "endpoint",
      "subject": "/v1/payments/{payment_id}/capture",
      "severity": "critical",
      "status": "open",
      "title": "POST /v1/payments/{payment_id}/capture is failing",
      "detail": "43% of requests returned 5xx in the last hour.",
      "metricValue": 43.1,
      "metricUnit": "percent",
      "context": {},
      "occurrenceCount": 4,
      "firstSeenAt": "2026-10-19T14:05:00.000Z",
      "lastSeenAt": "2026-10-19T14:35:00.000Z",
      "resolvedAt": null,
      "dismissedAt": null,
      "dismissedByUserSid": null,
      "snoozedUntil": null,
      "createdAt": "2026-10-19T14:05:00.000Z"
    }
  ]
}

Update attention signal

PATCH https://api.apitraffic.io/v1/accounts/{accountSid}/buckets/{bucketSid}/attentionSignals/{signalSid}

Acknowledges, snoozes, dismisses or reopens a signal. A dismissal applies to everyone in the account and records who made it. A dismissed signal comes back on its own if it escalates in severity or its metric gets materially worse. resolved cannot be set by hand; it is set when the problem stops.

Path parameters

  • accountSid (path, string, required): The account identifier.

  • bucketSid (path, string, required): The bucket identifier.

  • signalSid (path, string, required): The signal’s identifier (asig_…).

Body parameters

  • status (body, string, required): open, acknowledged, snoozed or dismissed.

  • snoozeMinutes (body, integer): How long to hide the signal, 1 to 43200 minutes (30 days). Required with snoozed.

Response

The updated attention signal object.

bash
curl -X PATCH https://api.apitraffic.io/v1/accounts/acc_2mXq7RbT4kPz9WvN3cHd8LsYfQa/buckets/k3m9p2x/attentionSignals/asig_2fG4hJ6kL8mN1pQ3rS5tU7vW9xY \
  -H "Authorization: Bearer $APITRAFFIC_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{ "status": "snoozed", "snoozeMinutes": 120 }'
js
const accountSid = 'acc_2mXq7RbT4kPz9WvN3cHd8LsYfQa';
const signalSid = 'asig_2fG4hJ6kL8mN1pQ3rS5tU7vW9xY';
const response = await fetch(
  `https://api.apitraffic.io/v1/accounts/${accountSid}/buckets/k3m9p2x/attentionSignals/${signalSid}`,
  {
    method: 'PATCH',
    headers: {
      Authorization: `Bearer ${process.env.APITRAFFIC_TOKEN}`,
      'Content-Type': 'application/json',
    },
    body: JSON.stringify({ status: 'snoozed', snoozeMinutes: 120 }),
  },
);
const signal = await response.json();
json
{
  "sid": "asig_2fG4hJ6kL8mN1pQ3rS5tU7vW9xY",
  "accountSid": "acc_2mXq7RbT4kPz9WvN3cHd8LsYfQa",
  "bucketSid": "k3m9p2x",
  "environmentSid": "prd7k2",
  "signalType": "error_hotspot",
  "subjectType": "endpoint",
  "subject": "/v1/payments/{payment_id}/capture",
  "severity": "critical",
  "status": "snoozed",
  "title": "POST /v1/payments/{payment_id}/capture is failing",
  "detail": "43% of requests returned 5xx in the last hour.",
  "metricValue": 43.1,
  "metricUnit": "percent",
  "context": {},
  "occurrenceCount": 4,
  "firstSeenAt": "2026-10-19T14:05:00.000Z",
  "lastSeenAt": "2026-10-19T14:35:00.000Z",
  "resolvedAt": null,
  "dismissedAt": null,
  "dismissedByUserSid": null,
  "snoozedUntil": "2026-10-19T16:40:00.000Z",
  "createdAt": "2026-10-19T14:05:00.000Z"
}

Errors

Status Code Meaning
400 1000 A parameter is missing or invalid, for example snoozed without snoozeMinutes.
403 2509 Changing a rule or signal for the read-only sample bucket.
404 4000 No rule or signal with that sid.
409 2213 The plan’s endpoint rule limit is reached.
503, 504 5101 to 5104 Endpoint metrics could not be read right now. Retry after Retry-After seconds.