API Keys
Update API Key
Update an existing API key's name, enabled state, or expiry.
POST /api/auth/api-key/updateThis endpoint uses POST, not PUT or PATCH.
Updates mutable fields on an existing API key. The key is identified by its keyId.
This endpoint authenticates with your logged-in dashboard session, not an API key. Send your session cookie with the request.
Request Body
Prop
Type
Response
Returns the updated API key object (without the secret key value).
Prop
Type
Note: Additional fields may be present in the response object.
curl -X POST "https://app.rybbit.io/api/auth/api-key/update" \
-H "Cookie: better-auth.session_token=YOUR_SESSION_TOKEN" \
-H "Content-Type: application/json" \
-d '{"keyId": "key_8f3a1b2c4d5e6f7g", "name": "CI pipeline (rotated)", "enabled": true}'const response = await fetch(
'https://app.rybbit.io/api/auth/api-key/update',
{
method: 'POST',
credentials: 'include',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({
keyId: 'key_8f3a1b2c4d5e6f7g',
name: 'CI pipeline (rotated)',
enabled: true
})
}
);
const data = await response.json();import requests
response = requests.post(
'https://app.rybbit.io/api/auth/api-key/update',
json={
'keyId': 'key_8f3a1b2c4d5e6f7g',
'name': 'CI pipeline (rotated)',
'enabled': True
},
headers={
'Cookie': 'better-auth.session_token=YOUR_SESSION_TOKEN'
}
)
data = response.json()$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://app.rybbit.io/api/auth/api-key/update");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode([
'keyId' => 'key_8f3a1b2c4d5e6f7g',
'name' => 'CI pipeline (rotated)',
'enabled' => true
]));
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Cookie: better-auth.session_token=YOUR_SESSION_TOKEN',
'Content-Type: application/json'
]);
$response = curl_exec($ch);
curl_close($ch);
$data = json_decode($response, true);require 'net/http'
require 'json'
uri = URI("https://app.rybbit.io/api/auth/api-key/update")
req = Net::HTTP::Post.new(uri)
req['Cookie'] = 'better-auth.session_token=YOUR_SESSION_TOKEN'
req['Content-Type'] = 'application/json'
req.body = {
keyId: 'key_8f3a1b2c4d5e6f7g',
name: 'CI pipeline (rotated)',
enabled: true
}.to_json
res = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) { |http| http.request(req) }
data = JSON.parse(res.body)body := bytes.NewBuffer([]byte(`{
"keyId": "key_8f3a1b2c4d5e6f7g",
"name": "CI pipeline (rotated)",
"enabled": true
}`))
req, _ := http.NewRequest("POST", "https://app.rybbit.io/api/auth/api-key/update", body)
req.Header.Set("Cookie", "better-auth.session_token=YOUR_SESSION_TOKEN")
req.Header.Set("Content-Type", "application/json")
client := &http.Client{}
resp, _ := client.Do(req)
defer resp.Body.Close()
var data map[string]interface{}
json.NewDecoder(resp.Body).Decode(&data)let client = reqwest::Client::new();
let res = client
.post("https://app.rybbit.io/api/auth/api-key/update")
.header("Cookie", "better-auth.session_token=YOUR_SESSION_TOKEN")
.json(&serde_json::json!({
"keyId": "key_8f3a1b2c4d5e6f7g",
"name": "CI pipeline (rotated)",
"enabled": true
}))
.send()
.await?;
let data: serde_json::Value = res.json().await?;HttpClient client = HttpClient.newHttpClient();
String json = "{\"keyId\": \"key_8f3a1b2c4d5e6f7g\", \"name\": \"CI pipeline (rotated)\", \"enabled\": true}";
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://app.rybbit.io/api/auth/api-key/update"))
.header("Cookie", "better-auth.session_token=YOUR_SESSION_TOKEN")
.header("Content-Type", "application/json")
.POST(HttpRequest.BodyPublishers.ofString(json))
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());using var client = new HttpClient();
client.DefaultRequestHeaders.Add("Cookie", "better-auth.session_token=YOUR_SESSION_TOKEN");
var content = new StringContent(
"{\"keyId\": \"key_8f3a1b2c4d5e6f7g\", \"name\": \"CI pipeline (rotated)\", \"enabled\": true}",
Encoding.UTF8,
"application/json"
);
var response = await client.PostAsync("https://app.rybbit.io/api/auth/api-key/update", content);
var data = await response.Content.ReadAsStringAsync();{
"id": "key_8f3a1b2c4d5e6f7g",
"name": "CI pipeline (rotated)",
"start": "rybbit_sk_live_xxxx",
"prefix": "rybbit_sk_live_",
"userId": "user_2a9b8c7d6e5f4g3h",
"enabled": true,
"expiresAt": "2026-07-25T12:00:00.000Z",
"createdAt": "2026-06-25T12:00:00.000Z",
"updatedAt": "2026-06-26T12:00:00.000Z",
"rateLimitEnabled": true,
"rateLimitMax": 200,
"rateLimitTimeWindow": 60000
}