Stream views API
List, create, update and delete stream views (named request filters on a bucket) and read the latest requests that match one.
A stream view is a saved, named filter on a bucket’s requests, such as “Payment failures” or “Slow checkouts”. Views appear as one-click filters in the request log, and they are what starts workflows. See Stream views for using them in the app.
Plan: creating and changing views needs a plan that includes Saved stream views; the number of views an account can keep depends on the plan. Listing, reading and deleting existing views keep working if the plan changes. Permissions: any member, or a user or administrator API token.
The stream view object
-
sid (string, required): The view’s identifier (
sv_followed by 27 letters and digits). -
bucketSid (string, required): The bucket the view filters.
-
name (string, required): The view’s name.
-
criteria (string, required): The filter, in the search syntax.
-
icon (string, required):
search,star,alert,check,bolt,bookmark,flagorheart. -
createdAt (string, required): When the view was created (ISO 8601).
-
updatedAt (string | null): When it was last changed.
-
deletedAt (string | null):
nullfor an existing view.
List stream views
GET https://api.apitraffic.io/v1/accounts/{accountSid}/buckets/{bucketSid}/streamViews
Returns every view on a bucket.
Path parameters
-
accountSid (path, string, required): The account identifier.
-
bucketSid (path, string, required): The bucket identifier.
Response
-
hasMore (boolean, required): Always
false. -
records (object[], required): The views, as stream view objects.
curl https://api.apitraffic.io/v1/accounts/acc_2mXq7RbT4kPz9WvN3cHd8LsYfQa/buckets/k3m9p2x/streamViews \
-H "Authorization: Bearer $APITRAFFIC_TOKEN"
const accountSid = 'acc_2mXq7RbT4kPz9WvN3cHd8LsYfQa';
const response = await fetch(`https://api.apitraffic.io/v1/accounts/${accountSid}/buckets/k3m9p2x/streamViews`, {
headers: { Authorization: `Bearer ${process.env.APITRAFFIC_TOKEN}` },
});
const { records } = await response.json();
{
"hasMore": false,
"records": [
{
"sid": "sv_2vC8xZ1aS3dF5gH7jK9lQ2wE4rT",
"bucketSid": "k3m9p2x",
"name": "Payment failures",
"criteria": "status_code >= 500 AND url_path like \"/v1/payments/*\"",
"icon": "alert",
"createdAt": "2026-03-02T16:10:00.000Z",
"updatedAt": null,
"deletedAt": null
},
{
"sid": "sv_2wD9yA2bT4eG6hJ8kL1mR3xF5sU",
"bucketSid": "k3m9p2x",
"name": "Slow checkouts",
"criteria": "url_path == \"/v1/checkout\" AND duration >= 1000",
"icon": "bolt",
"createdAt": "2026-03-02T16:11:00.000Z",
"updatedAt": null,
"deletedAt": null
}
]
}
Get stream view
GET https://api.apitraffic.io/v1/accounts/{accountSid}/buckets/{bucketSid}/streamViews/{streamViewSid}
Returns one view.
Path parameters
-
accountSid (path, string, required): The account identifier.
-
bucketSid (path, string, required): The bucket identifier.
-
streamViewSid (path, string, required): The view’s identifier.
Response
curl https://api.apitraffic.io/v1/accounts/acc_2mXq7RbT4kPz9WvN3cHd8LsYfQa/buckets/k3m9p2x/streamViews/sv_2vC8xZ1aS3dF5gH7jK9lQ2wE4rT \
-H "Authorization: Bearer $APITRAFFIC_TOKEN"
const accountSid = 'acc_2mXq7RbT4kPz9WvN3cHd8LsYfQa';
const streamViewSid = 'sv_2vC8xZ1aS3dF5gH7jK9lQ2wE4rT';
const response = await fetch(
`https://api.apitraffic.io/v1/accounts/${accountSid}/buckets/k3m9p2x/streamViews/${streamViewSid}`,
{ headers: { Authorization: `Bearer ${process.env.APITRAFFIC_TOKEN}` } },
);
const view = await response.json();
{
"sid": "sv_2vC8xZ1aS3dF5gH7jK9lQ2wE4rT",
"bucketSid": "k3m9p2x",
"name": "Payment failures",
"criteria": "status_code >= 500 AND url_path like \"/v1/payments/*\"",
"icon": "alert",
"createdAt": "2026-03-02T16:10:00.000Z",
"updatedAt": null,
"deletedAt": null
}
Create stream view
POST https://api.apitraffic.io/v1/accounts/{accountSid}/buckets/{bucketSid}/streamViews
Saves a filter as a view.
Plan: needs Saved stream views; past the plan’s view limit, the API answers 409 with code 2213.
Path parameters
-
accountSid (path, string, required): The account identifier.
-
bucketSid (path, string, required): The bucket identifier.
Body parameters
-
name (body, string, required): The view’s name.
-
criteria (body, string, required): The filter, in the search syntax. At most 50 conditions, joined with
AND(criteria withORare refused), each value at most 1024 characters.likevalues are globs that match the whole value, sourl_path like "/v1/payments/*"matches every path under/v1/payments/. -
icon (body, string):
search,star,alert,check,bolt,bookmark,flagorheart.
Response
The new stream view object.
curl -X POST https://api.apitraffic.io/v1/accounts/acc_2mXq7RbT4kPz9WvN3cHd8LsYfQa/buckets/k3m9p2x/streamViews \
-H "Authorization: Bearer $APITRAFFIC_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "Cart validation errors",
"criteria": "url_path like \"/v1/cart/*\" AND status_code >= 400 AND status_code < 500",
"icon": "search"
}'
const accountSid = 'acc_2mXq7RbT4kPz9WvN3cHd8LsYfQa';
const response = await fetch(`https://api.apitraffic.io/v1/accounts/${accountSid}/buckets/k3m9p2x/streamViews`, {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.APITRAFFIC_TOKEN}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
name: 'Cart validation errors',
criteria: 'url_path like "/v1/cart/*" AND status_code >= 400 AND status_code < 500',
icon: 'search',
}),
});
const view = await response.json();
{
"sid": "sv_2xE1zB3cU5fH7jK9lM2nS4yG6tV",
"bucketSid": "k3m9p2x",
"name": "Cart validation errors",
"criteria": "url_path like \"/v1/cart/*\" AND status_code >= 400 AND status_code < 500",
"icon": "search",
"createdAt": "2026-10-20T11:20:00.000Z",
"updatedAt": null,
"deletedAt": null
}
Update stream view
PUT https://api.apitraffic.io/v1/accounts/{accountSid}/buckets/{bucketSid}/streamViews/{streamViewSid}
Replaces a view’s name, criteria and icon. Workflows that use the view follow its new criteria.
Plan: needs Saved stream views.
Path parameters
-
accountSid (path, string, required): The account identifier.
-
bucketSid (path, string, required): The bucket identifier.
-
streamViewSid (path, string, required): The view’s identifier.
Body parameters
-
name (body, string, required): The view’s name.
-
criteria (body, string, required): The filter, with the same limits as Create stream view.
-
icon (body, string): The icon.
Response
The updated stream view object, plus:
- warnings (object[]):
Present when the view was saved before
likemeant a whole-value glob, a workflow uses it, and you changed its criteria: each entry (code,condition,glob,message) names alikecondition whose meaning changed for those workflows. Check that they still start on the requests you expect.
curl -X PUT https://api.apitraffic.io/v1/accounts/acc_2mXq7RbT4kPz9WvN3cHd8LsYfQa/buckets/k3m9p2x/streamViews/sv_2wD9yA2bT4eG6hJ8kL1mR3xF5sU \
-H "Authorization: Bearer $APITRAFFIC_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "Slow checkouts",
"criteria": "url_path == \"/v1/checkout\" AND duration >= 2000",
"icon": "bolt"
}'
const accountSid = 'acc_2mXq7RbT4kPz9WvN3cHd8LsYfQa';
const streamViewSid = 'sv_2wD9yA2bT4eG6hJ8kL1mR3xF5sU';
const response = await fetch(
`https://api.apitraffic.io/v1/accounts/${accountSid}/buckets/k3m9p2x/streamViews/${streamViewSid}`,
{
method: 'PUT',
headers: {
Authorization: `Bearer ${process.env.APITRAFFIC_TOKEN}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
name: 'Slow checkouts',
criteria: 'url_path == "/v1/checkout" AND duration >= 2000',
icon: 'bolt',
}),
},
);
const view = await response.json();
{
"sid": "sv_2wD9yA2bT4eG6hJ8kL1mR3xF5sU",
"bucketSid": "k3m9p2x",
"name": "Slow checkouts",
"criteria": "url_path == \"/v1/checkout\" AND duration >= 2000",
"icon": "bolt",
"createdAt": "2026-03-02T16:11:00.000Z",
"updatedAt": "2026-10-20T11:25:00.000Z",
"deletedAt": null
}
Delete stream view
DELETE https://api.apitraffic.io/v1/accounts/{accountSid}/buckets/{bucketSid}/streamViews/{streamViewSid}
Deletes a view.
Path parameters
-
accountSid (path, string, required): The account identifier.
-
bucketSid (path, string, required): The bucket identifier.
-
streamViewSid (path, string, required): The view’s identifier.
Response
-
sid (string, required): The deleted view’s identifier.
-
deleted (boolean, required):
true.
curl -X DELETE https://api.apitraffic.io/v1/accounts/acc_2mXq7RbT4kPz9WvN3cHd8LsYfQa/buckets/k3m9p2x/streamViews/sv_2xE1zB3cU5fH7jK9lM2nS4yG6tV \
-H "Authorization: Bearer $APITRAFFIC_TOKEN"
const accountSid = 'acc_2mXq7RbT4kPz9WvN3cHd8LsYfQa';
const streamViewSid = 'sv_2xE1zB3cU5fH7jK9lM2nS4yG6tV';
await fetch(`https://api.apitraffic.io/v1/accounts/${accountSid}/buckets/k3m9p2x/streamViews/${streamViewSid}`, {
method: 'DELETE',
headers: { Authorization: `Bearer ${process.env.APITRAFFIC_TOKEN}` },
});
{
"sid": "sv_2xE1zB3cU5fH7jK9lM2nS4yG6tV",
"deleted": true
}
Get latest matching requests
GET https://api.apitraffic.io/v1/accounts/{accountSid}/buckets/{bucketSid}/streamViews/{streamViewSid}/requests
Returns the five most recent requests that match the view, in full, with JSON bodies parsed. This is the sample data a workflow builder shows when you design a workflow for the view.
Path parameters
-
accountSid (path, string, required): The account identifier.
-
bucketSid (path, string, required): The bucket identifier.
-
streamViewSid (path, string, required): The view’s identifier.
Response
- records (object[], required):
Up to five request objects, newest first, each with bodies and a
triggerDataobject carrying thestreamViewSid.
curl https://api.apitraffic.io/v1/accounts/acc_2mXq7RbT4kPz9WvN3cHd8LsYfQa/buckets/k3m9p2x/streamViews/sv_2vC8xZ1aS3dF5gH7jK9lQ2wE4rT/requests \
-H "Authorization: Bearer $APITRAFFIC_TOKEN"
const accountSid = 'acc_2mXq7RbT4kPz9WvN3cHd8LsYfQa';
const streamViewSid = 'sv_2vC8xZ1aS3dF5gH7jK9lQ2wE4rT';
const response = await fetch(
`https://api.apitraffic.io/v1/accounts/${accountSid}/buckets/k3m9p2x/streamViews/${streamViewSid}/requests`,
{ headers: { Authorization: `Bearer ${process.env.APITRAFFIC_TOKEN}` } },
);
const { records } = await response.json();
{
"records": [
{
"sid": "req_2nA8fK3pQ7xV1mZ5tR9wB4cL6hY",
"bucketSid": "k3m9p2x",
"environmentSid": "prd7k2",
"direction": "in",
"createdAt": "2026-10-19T14:21:07.412Z",
"endpoint": "/v1/payments/{payment_id}/capture",
"request": {
"method": "POST",
"path": "/v1/payments/pi_3f9a1c7e2b4d6a/capture",
"body": { "amount": 8450, "currency": "usd" }
},
"response": {
"statusCode": 502,
"body": { "error": "upstream_timeout" }
},
"triggerData": { "streamViewSid": "sv_2vC8xZ1aS3dF5gH7jK9lQ2wE4rT" }
}
]
}
The example shortens the request object; see Get request for every field.
Errors
| Status | Code | Meaning |
|---|---|---|
400 |
1000 |
A field is missing or invalid, for example criteria that cannot be parsed, with more than 50 conditions, or an unknown icon. |
400 |
2007 |
The view’s criteria could not be run (latest matching requests). |
403 |
2221 |
The plan does not include stream views (create and update). |
403 |
2509 |
Changing a view on the read-only sample bucket. |
404 |
4000 |
No view with that sid in this bucket. |
409 |
2213 |
The plan’s stream view limit is reached. |
Related
-
Stream views: Use views in the request log.
-
Workflows API: Run an automation when a view matches.