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

Returns a list of deploys for the project.

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

Parameters

6

Path parameters

FieldTypeDescription
project_id requiredstringProject 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.
environmentstringExact environment name to match. Ignored when blank.
local_usernamestringExact deploy username to match. Ignored when blank; combines with environment when both are provided.

Responses

1

200 Success

Example payload
{
"data": [
{
"id": "Dp2yNk",
"project_id": "Xk9mZp",
"environment": "production",
"revision": "a1b2c3d4",
"repository": "acme/app",
"local_username": "jane",
"created_at": "2026-01-01T00:00:00Z"
}
],
"pagination": {
"limit": 25,
"has_older": true,
"has_newer": true,
"oldest_cursor": "eyJ0IjoxNzA0MDY3MjAwLCJpIjoiTm04cFF4In0",
"newest_cursor": "eyJ0IjoxNzA0MTUzNjAwLCJpIjoiWGs5bVpwIn0"
},
"links": {
"self": "/v3/projects/Xk9mZp/deploys?limit=25",
"older": "/v3/projects/Xk9mZp/deploys?before=eyJ0IjoxNzA0MDY3MjAwMTIzNDU2LCJpIjoiRHAyeU5rIn0&limit=25",
"newer": "/v3/projects/Xk9mZp/deploys?after=eyJ0IjoxNzA0MTUzNjAwMTIzNDU2LCJpIjoiRHA4d1FzIn0&limit=25"
},
"meta": {
"request_id": "6f1c2b0e-8d4a-4f6e-9b2a-3c5d7e9f1a2b"
}
}
Response schema20
FieldTypeDescription
data requiredarray<object>
data[].id requiredstring
data[].project_id requiredstringID of the project this deploy belongs to.
data[].environment requiredstring | nullDeploy environment; null when the deploy named none.
data[].revision requiredstring | nullSource control revision.
data[].repository requiredstring | nullSource control repository.
data[].local_username requiredstring | nullUsername of the person who triggered the deploy.
data[].created_at requireddate-timeWhen the deploy was recorded.
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.

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.