Skip to content
GET https://app.honeybadger.io/v3/projects/{project_id}/faults/{fault_id}/notices
Required scope faults:read

Returns a list of notices for a fault.

Example request
Terminal window
curl "https://app.honeybadger.io/v3/projects/$PROJECT_ID/faults/$FAULT_ID/notices" \
-H "Authorization: Bearer $HONEYBADGER_API_TOKEN"

Parameters

6

Path parameters

FieldTypeDescription
project_id requiredstringProject ID.
fault_id requiredstringFault ID.

Query parameters

FieldTypeDescription
limitintegerMaximum items to return. Values above 100 are treated as 100. Default: 25. Min 1, max 100.
beforestringCursor for fetching older items.
afterstringCursor for fetching newer items.
unmappedbooleanReturn the backtrace as the client reported it instead of source-mapped. Accepts true/false, 1/0, yes/no, on/off. Default: false.

Responses

2

200 Success

Example payload
{
"data": [
{
"id": "1e2ba1f0-4f3c-4b1a-9c7e-6f2f5c0f1a3b",
"fault_id": "12345",
"project_id": "Xk9mZp",
"environment": "production",
"message": "undefined method 'foo' for nil:NilClass",
"created_at": "2026-01-01T00:00:00Z",
"request": {
"url": "https://shop.example.com/checkout",
"component": "CheckoutController",
"action": "create",
"params": {},
"session": {}
},
"context": {},
"backtrace": [
{
"file": "app/models/checkout.rb",
"line": 42,
"column": 8,
"method": "submit_order",
"in_app": true,
"mapping": "source_mapped",
"source": [
null
]
}
],
"backtrace_mode": "source_mapped",
"backtrace_total_frames": 25,
"backtrace_truncated": true,
"request_fields_removed": [
"params"
],
"links": {
"web": "https://app.honeybadger.io/projects/Xk9mZp"
}
}
],
"pagination": {
"limit": 25,
"has_older": true,
"has_newer": true,
"oldest_cursor": "eyJ0IjoxNzA0MDY3MjAwLCJpIjoiTm04cFF4In0",
"newest_cursor": "eyJ0IjoxNzA0MTUzNjAwLCJpIjoiWGs5bVpwIn0"
},
"links": {
"self": "/v3/projects/Xk9mZp/faults/12345/notices?limit=25",
"older": "/v3/projects/Xk9mZp/faults/12345/notices?before=eyJ0IjoxNzA0MDY3MjAwMTIzNDU2LCJpIjoiRHAyeU5rIn0&limit=25",
"newer": "/v3/projects/Xk9mZp/faults/12345/notices?after=eyJ0IjoxNzA0MTUzNjAwMTIzNDU2LCJpIjoiRHA4d1FzIn0&limit=25"
},
"meta": {
"request_id": "6f1c2b0e-8d4a-4f6e-9b2a-3c5d7e9f1a2b"
}
}
Response schema42
FieldTypeDescription
data requiredarray<object>
data[].id requireduuidThe notice's ID, a UUID that addresses it without its project or fault.
data[].fault_id requiredstringID of the fault this notice belongs to.
data[].project_id requiredstringID of the project.
data[].environmentstring | nullEnvironment name: the fault's environment, or the one the notice reported when the fault has none. Null when neither is set.
data[].message requiredstring | nullError message. Null when the notifier reported none.
data[].created_at requireddate-timeWhen the notice was received.
data[].requestobject | nullRequest details when the error occurred. Fields not reported are null.
data[].request.urlstring | nullRequest URL.
data[].request.componentstring | nullController or component name.
data[].request.actionstring | nullAction name.
data[].request.paramsobject | nullRequest parameters.
data[].request.sessionobject | nullSession data.
data[].contextobjectCustom context data sent with the notice.
data[].backtracearray<object>Stack trace frames, at most 20. Source-mapped by default; pass unmapped=true for the frames exactly as the client sent them.
data[].backtrace[].filestring | nullPath to the source file. Null when the notifier sent a backtrace entry that carried no file, or one that was not a frame at all.
data[].backtrace[].lineinteger | nullLine number within file. Null when the notifier sent a value that is not a line number, such as (eval).
data[].backtrace[].columninteger | nullColumn number. Usually present only on source-mapped frames.
data[].backtrace[].methodstring | nullName of the method or function. Null when the notifier omitted it, and routinely on source-mapped frames where the map carries no name for the position.
data[].backtrace[].in_appbooleanWhether this frame is the project's own code rather than a framework, gem or dependency. Derived from the project root the notifier reported.
data[].backtrace[].mappingstringWhether this specific frame was resolved through a source map. Mapping is applied one frame at a time and falls back to the reported frame, so a source-mapped trace can contain reported frames. Always reported when unmapped=true was requested. Allowed values: source_mapped, reported.
data[].backtrace[].sourcearray<object>Contiguous runs of source lines around the frame. Normally one block; a notifier-sent snippet with a gap produces one block per run. Empty when no source is available, when the notifier sent it in a shape other than a map of line number to content, or when no entry carried a usable line number. At most 25 lines in total.
data[].backtrace[].source[].first_line requiredintegerLine number of the first entry in lines.
data[].backtrace[].source[].lines requiredarray<string>Source lines in order. Each line is truncated to 1024 characters. Across all of a frame's blocks at most 25 lines are returned, chosen nearest the frame's own line so that line is always present when the notifier sent it.
data[].backtrace_modestringWhich representation of the trace this response carries. source_mapped when a stored mapped trace was served, reported when the frames are as the client sent them — either because unmapped=true was requested or because no different mapped trace was stored. Allowed values: source_mapped, reported.
data[].backtrace_total_framesintegerTotal frames in the selected trace before the 20-frame limit was applied.
data[].backtrace_truncatedbooleanWhether backtrace omits frames because of the 20-frame limit.
data[].request_fields_removedarray | nullNames of request fields removed at ingest because the payload exceeded the size limit. Null when nothing was removed.
data[].linksobjectLinks into the Honeybadger web UI.
data[].links.web requireduriThe resource's page in the Honeybadger web UI, as an absolute URL. Resources without a page, such as outages and deploys, don't have links. For a project provisioned through Heroku, error, notice and comment links go through Heroku's single sign-on.
paginationobjectPagination for a time-ordered collection.
pagination.limit requiredintegerMaximum items per page. Min 1, max 100.
pagination.has_older requiredbooleanWhether older items exist. When true, follow links.older.
pagination.has_newer requiredbooleanWhether newer items exist. When true, follow links.newer.
pagination.oldest_cursorstring | nullCursor for the oldest item on this page. Pass it back unchanged as before. Absent or null on collections that page on a timestamp rather than a cursor; use links.older instead.
pagination.newest_cursorstring | nullCursor for the newest item on this page. Pass it back unchanged as after. Absent or null on collections that page on a timestamp rather than a cursor, and on one-directional collections; use links.newer instead.
linksobjectNavigation links for a time-ordered collection. Each link is a root-relative path (/v3/...); resolve it against the API host.
links.self requireduri-referenceThis page.
links.olderstring | nullPage of older items, or null when none exist.
links.newerstring | nullPage of newer items, or null when none exist. Always null on one-directional collections, which are documented as such.
metaobject
meta.request_idstringUnique identifier for the request, for correlating with support.

301 This fault was merged into another fault.

Location is the same resource on the fault it was merged into: …/faults/<survivor> for the fault, or the same subresource path and query for occurrences, affected users and notices. Only reads redirect; writes get a 409 fault_merged.

Errors

5

400 Bad Request

A query parameter is malformed or outside its allowed values. error.details names the parameter.

Example payload
{
"error": {
"code": "invalid_parameter",
"message": "unmapped must be true or false",
"details": [
{
"field": "unmapped",
"message": "must be true or false"
}
]
},
"meta": {
"request_id": "abc123"
}
}
Response schema6
FieldTypeDescription
error requiredobject
error.code requiredstringMachine-readable code. Branch on this, not the message. Allowed values: unauthorized, unsupported_auth_scheme, credential_in_query, access_denied, insufficient_scope, requires_user_token, project_restricted, account_inactive, account_parked, feature_unavailable, not_found, validation_error, delete_failed, limit_reached, rate_limit_exceeded, concurrent_request, streams_provisioning, ingestion_key_not_accepted, maintenance_mode, invalid_parameter, forbidden_attributes, service_unavailable, ambiguous_account, fault_merged.
error.message requiredstringHuman-readable explanation.
error.detailsarray<object> | objectA list of {field, message} on validation_error and invalid_parameter, and on feature_unavailable or limit_reached when one field caused the refusal; {required_scope, token_scopes} on insufficient_scope; {merged_into, location} on fault_merged. Absent when there's nothing to add.
metaobject
meta.request_idstringUnique identifier for the request, for correlating with support.

401 Unauthorized

The credential is missing, invalid, expired or revoked (unauthorized), or was sent in a way v3 doesn’t accept (see the examples).

Example payload: unauthorized (Missing, malformed, expired or revoked credential)
{
"error": {
"code": "unauthorized",
"message": "Access denied"
},
"meta": {
"request_id": "abc123"
}
}
Example payload: unsupported_auth_scheme (Sent as HTTP basic, which v3 does not accept)
{
"error": {
"code": "unsupported_auth_scheme",
"message": "Send the credential as `Authorization: Bearer <token>`; v3 does not accept HTTP basic"
},
"meta": {
"request_id": "abc123"
}
}
Example payload: credential_in_query (Sent as the `auth_token` query parameter)
{
"error": {
"code": "credential_in_query",
"message": "Credentials must be sent in the Authorization header"
},
"meta": {
"request_id": "abc123"
}
}
Response schema6
FieldTypeDescription
error requiredobject
error.code requiredstringMachine-readable code. Branch on this, not the message. Allowed values: unauthorized, unsupported_auth_scheme, credential_in_query, access_denied, insufficient_scope, requires_user_token, project_restricted, account_inactive, account_parked, feature_unavailable, not_found, validation_error, delete_failed, limit_reached, rate_limit_exceeded, concurrent_request, streams_provisioning, ingestion_key_not_accepted, maintenance_mode, invalid_parameter, forbidden_attributes, service_unavailable, ambiguous_account, fault_merged.
error.message requiredstringHuman-readable explanation.
error.detailsarray<object> | objectA list of {field, message} on validation_error and invalid_parameter, and on feature_unavailable or limit_reached when one field caused the refusal; {required_scope, token_scopes} on insufficient_scope; {merged_into, location} on fault_merged. Absent when there's nothing to add.
metaobject
meta.request_idstringUnique identifier for the request, for correlating with support.

403 Forbidden

The credential isn’t allowed to do this. error.code says why. An account or project the credential doesn’t cover is 404 not_found, not 403.

Example payload: access_denied (The credential isn't allowed to do this to this record)
{
"error": {
"code": "access_denied",
"message": "Access denied"
},
"meta": {
"request_id": "abc123"
}
}
Example payload: insufficient_scope (The credential lacks the permission this endpoint requires)
{
"error": {
"code": "insufficient_scope",
"message": "Insufficient scope",
"details": {
"required_scope": "faults:write",
"token_scopes": [
"faults:read",
"insights:read"
]
}
},
"meta": {
"request_id": "abc123"
}
}
Example payload: requires_user_token (The endpoint records who acted, and an account token has nobody)
{
"error": {
"code": "requires_user_token",
"message": "This endpoint records the person who acted, so it requires a user credential rather than an account token"
},
"meta": {
"request_id": "abc123"
}
}
Example payload: project_restricted (A project-restricted credential cannot create a project)
{
"error": {
"code": "project_restricted",
"message": "Project-restricted tokens cannot create projects"
},
"meta": {
"request_id": "abc123"
}
}
Response schema6
FieldTypeDescription
error requiredobject
error.code requiredstringMachine-readable code. Branch on this, not the message. Allowed values: unauthorized, unsupported_auth_scheme, credential_in_query, access_denied, insufficient_scope, requires_user_token, project_restricted, account_inactive, account_parked, feature_unavailable, not_found, validation_error, delete_failed, limit_reached, rate_limit_exceeded, concurrent_request, streams_provisioning, ingestion_key_not_accepted, maintenance_mode, invalid_parameter, forbidden_attributes, service_unavailable, ambiguous_account, fault_merged.
error.message requiredstringHuman-readable explanation.
error.detailsarray<object> | objectA list of {field, message} on validation_error and invalid_parameter, and on feature_unavailable or limit_reached when one field caused the refusal; {required_scope, token_scopes} on insufficient_scope; {merged_into, location} on fault_merged. Absent when there's nothing to add.
metaobject
meta.request_idstringUnique identifier for the request, for correlating with support.

404 Not Found

Resource not found

Example payload
{
"error": {
"code": "not_found",
"message": "Resource not found"
},
"meta": {
"request_id": "abc123"
}
}
Response schema6
FieldTypeDescription
error requiredobject
error.code requiredstringMachine-readable code. Branch on this, not the message. Allowed values: unauthorized, unsupported_auth_scheme, credential_in_query, access_denied, insufficient_scope, requires_user_token, project_restricted, account_inactive, account_parked, feature_unavailable, not_found, validation_error, delete_failed, limit_reached, rate_limit_exceeded, concurrent_request, streams_provisioning, ingestion_key_not_accepted, maintenance_mode, invalid_parameter, forbidden_attributes, service_unavailable, ambiguous_account, fault_merged.
error.message requiredstringHuman-readable explanation.
error.detailsarray<object> | objectA list of {field, message} on validation_error and invalid_parameter, and on feature_unavailable or limit_reached when one field caused the refusal; {required_scope, token_scopes} on insufficient_scope; {merged_into, location} on fault_merged. Absent when there's nothing to add.
metaobject
meta.request_idstringUnique identifier for the request, for correlating with support.

422 Unprocessable Content

No path names the account, so the API token has to. This is returned when the token covers more than one account and the account a request applies to cannot be determined. Use a token bound to a single account.

Example payload
{
"error": {
"code": "ambiguous_account",
"message": "This credential covers more than one account, so the account a request applies to is ambiguous. Use a token bound to a single account."
},
"meta": {
"request_id": "abc123"
}
}
Response schema6
FieldTypeDescription
error requiredobject
error.code requiredstringMachine-readable code. Branch on this, not the message. Allowed values: unauthorized, unsupported_auth_scheme, credential_in_query, access_denied, insufficient_scope, requires_user_token, project_restricted, account_inactive, account_parked, feature_unavailable, not_found, validation_error, delete_failed, limit_reached, rate_limit_exceeded, concurrent_request, streams_provisioning, ingestion_key_not_accepted, maintenance_mode, invalid_parameter, forbidden_attributes, service_unavailable, ambiguous_account, fault_merged.
error.message requiredstringHuman-readable explanation.
error.detailsarray<object> | objectA list of {field, message} on validation_error and invalid_parameter, and on feature_unavailable or limit_reached when one field caused the refusal; {required_scope, token_scopes} on insufficient_scope; {merged_into, location} on fault_merged. Absent when there's nothing to add.
metaobject
meta.request_idstringUnique identifier for the request, for correlating with support.