Update a service-account project binding role
PATCH /api/v1/public/service-accounts/{serviceAccountId}/bindings/{bindingId}
PATCH /api/v1/public/service-accounts/{serviceAccountId}/bindings/{bindingId}Partially update service-accounts bindings.
Operation ID: patch_api_v1_public_service_accounts_serviceAccountId_bindings_bindingId.
Authentication
Choose a credential. Each row is an accepted alternative; access also depends on current roles, project bindings, and entitlements.
| Credential | Carrier | OAuth scopes |
|---|---|---|
OAuth2 | Authorization: Bearer | access:write |
Availability
This operation requires the public-api-mutations capability to be enabled for the deployment. Its presence in the contract does not guarantee availability. See operation availability.
Request parameters
| Name | Location | Required | Type / allowed values | Description / constraints |
|---|---|---|---|---|
bindingId | path | Yes | string | bindingId path parameter; format: uuid; Pattern constrained; see the downloadable schema. |
serviceAccountId | path | Yes | string | serviceAccountId path parameter; format: uuid; Pattern constrained; see the downloadable schema. |
idempotency-key | header | Yes | string | idempotency-key header parameter; Required canonical UUIDv4 or high-entropy base64url idempotency key; minLength: 22; maxLength: 43; Pattern constrained; see the downloadable schema. |
Request body
Body required: yes.
application/json
| Field | Type / allowed values | Required in parent | Description / constraints |
|---|---|---|---|
$ | object | Yes | additionalProperties: false |
role | "project_admin" | "project_member" | "project_viewer" | Yes | — |
Request example
Replace placeholder IDs and environment variables with values from your authorized project. Credentials are expanded into curl's stdin configuration, not its command arguments. Keep shell tracing off and do not log this configuration. For requests with a body, put a payload matching the schema in request-body.txt; form requests use URL-encoded content.
curl --fail-with-body --silent --show-error --config - <<CURL_CONFIG
request = "PATCH"
header = "Authorization: Bearer ${NEATLOGS_TOKEN}"
header = "idempotency-key: ${IDEMPOTENCY_KEY}"
header = "Content-Type: application/json"
data-binary = "@request-body.txt"
url = "https://app.neatlogs.com/api/v1/public/service-accounts/<serviceAccountId>/bindings/<bindingId>"
CURL_CONFIGResponses
| Status | Description | Content type |
|---|---|---|
200 | Service-account project binding role updated | application/json |
400 | Invalid public API request | application/problem+json |
401 | Missing or invalid public API credential | application/problem+json |
403 | Public API request is not authorized | application/problem+json |
404 | Public API resource not found | application/problem+json |
409 | Public API request conflict | application/problem+json |
413 | Public API request body too large | application/problem+json |
415 | Unsupported public API request body | application/problem+json |
429 | Public API rate limit exceeded | application/problem+json |
500 | Internal server error | application/problem+json |
503 | Public API credential, project context, or rate limiting unavailable. Backend is draining; retry after the Retry-After delay. | application/problem+json, application/json |
200 response fields
Content type: application/json.
| Field | Type / allowed values | Required in parent | Description / constraints |
|---|---|---|---|
$ | object | Yes | additionalProperties: false |
data | object | Yes | additionalProperties: false |
data.createdAt | string | Yes | format: date-time; Pattern constrained; see the downloadable schema. |
data.id | string | Yes | format: uuid; Pattern constrained; see the downloadable schema. |
data.projectId | string | Yes | format: uuid; Pattern constrained; see the downloadable schema. |
data.role | "project_admin" | "project_member" | "project_viewer" | Yes | — |
data.serviceAccountId | string | Yes | format: uuid; Pattern constrained; see the downloadable schema. |
data.status | "active" | Yes | — |
requestId | string | Yes | Pattern constrained; see the downloadable schema. |
success | true | Yes | — |
Response headers
| Header | Description / constraints |
|---|---|
RateLimit-Limit | Effective request ceiling for the current window; minimum: 1 |
RateLimit-Remaining | Requests remaining in the current window; minimum: 0 |
RateLimit-Reset | Unix timestamp in seconds when the current window resets; minimum: 0 |
X-NeatLogs-RateLimit-Degraded | Whether bounded emergency enforcement is active; — |
X-NeatLogs-RateLimit-Limit | Effective request ceiling for the current window; minimum: 1 |
X-NeatLogs-RateLimit-Policy | Applied pre-authentication or authenticated rate class; — |
X-NeatLogs-RateLimit-Remaining | Requests remaining in the current window; minimum: 0 |
X-NeatLogs-RateLimit-Reset-After | Whole seconds until the current window resets; minimum: 1 |
X-NeatLogs-RateLimit-Version | NeatLogs rate-limit contract version; — |
X-Request-Id | Server-owned request correlation identifier; Pattern constrained; see the downloadable schema. |
Failures use Problem Details. For exact validation patterns and all response schemas, download the OpenAPI specification.
