Rotate API key for service user
curl --request POST \
--url https://api.devin.ai/v3beta1/enterprise/service-users/{service_user_id}/api-keys/{api_key_id}/rotate \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"new_key_expires_at": 123,
"revoke_current": true
}
'import requests
url = "https://api.devin.ai/v3beta1/enterprise/service-users/{service_user_id}/api-keys/{api_key_id}/rotate"
payload = {
"new_key_expires_at": 123,
"revoke_current": True
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({new_key_expires_at: 123, revoke_current: true})
};
fetch('https://api.devin.ai/v3beta1/enterprise/service-users/{service_user_id}/api-keys/{api_key_id}/rotate', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.devin.ai/v3beta1/enterprise/service-users/{service_user_id}/api-keys/{api_key_id}/rotate",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'new_key_expires_at' => 123,
'revoke_current' => true
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.devin.ai/v3beta1/enterprise/service-users/{service_user_id}/api-keys/{api_key_id}/rotate"
payload := strings.NewReader("{\n \"new_key_expires_at\": 123,\n \"revoke_current\": true\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.devin.ai/v3beta1/enterprise/service-users/{service_user_id}/api-keys/{api_key_id}/rotate")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"new_key_expires_at\": 123,\n \"revoke_current\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.devin.ai/v3beta1/enterprise/service-users/{service_user_id}/api-keys/{api_key_id}/rotate")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"new_key_expires_at\": 123,\n \"revoke_current\": true\n}"
response = http.request(request)
puts response.read_body{
"api_key_id": "<string>",
"api_key_name": "<string>",
"token": "<string>"
}{
"status": 123,
"title": "<string>",
"detail": "<string>",
"error_code": "<string>",
"errors": [
{}
],
"instance": "<string>",
"type": "about:blank"
}{
"status": 123,
"title": "<string>",
"detail": "<string>",
"error_code": "<string>",
"errors": [
{}
],
"instance": "<string>",
"type": "about:blank"
}{
"status": 123,
"title": "<string>",
"detail": "<string>",
"error_code": "<string>",
"errors": [
{}
],
"instance": "<string>",
"type": "about:blank"
}{
"status": 123,
"title": "<string>",
"detail": "<string>",
"error_code": "<string>",
"errors": [
{}
],
"instance": "<string>",
"type": "about:blank"
}{
"status": 123,
"title": "<string>",
"detail": "<string>",
"error_code": "<string>",
"errors": [
{}
],
"instance": "<string>",
"type": "about:blank"
}{
"status": 123,
"title": "<string>",
"detail": "<string>",
"error_code": "<string>",
"errors": [
{}
],
"instance": "<string>",
"type": "about:blank"
}Service User API Keys (Enterprise) [Beta]
Rotate API key for service user
Rotate an API key for a service user.
Creates a new key. By default revokes the old key; set revoke_current=false for graceful rollover where both keys remain active temporarily. Returns 404 if the key is not found, 400 if the key is not active, and 409 while static service user keys are disabled for the enterprise, unless the service user backs SCIM or an active Outpost.
POST
/
v3beta1
/
enterprise
/
service-users
/
{service_user_id}
/
api-keys
/
{api_key_id}
/
rotate
Rotate API key for service user
curl --request POST \
--url https://api.devin.ai/v3beta1/enterprise/service-users/{service_user_id}/api-keys/{api_key_id}/rotate \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"new_key_expires_at": 123,
"revoke_current": true
}
'import requests
url = "https://api.devin.ai/v3beta1/enterprise/service-users/{service_user_id}/api-keys/{api_key_id}/rotate"
payload = {
"new_key_expires_at": 123,
"revoke_current": True
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({new_key_expires_at: 123, revoke_current: true})
};
fetch('https://api.devin.ai/v3beta1/enterprise/service-users/{service_user_id}/api-keys/{api_key_id}/rotate', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.devin.ai/v3beta1/enterprise/service-users/{service_user_id}/api-keys/{api_key_id}/rotate",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'new_key_expires_at' => 123,
'revoke_current' => true
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.devin.ai/v3beta1/enterprise/service-users/{service_user_id}/api-keys/{api_key_id}/rotate"
payload := strings.NewReader("{\n \"new_key_expires_at\": 123,\n \"revoke_current\": true\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.devin.ai/v3beta1/enterprise/service-users/{service_user_id}/api-keys/{api_key_id}/rotate")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"new_key_expires_at\": 123,\n \"revoke_current\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.devin.ai/v3beta1/enterprise/service-users/{service_user_id}/api-keys/{api_key_id}/rotate")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"new_key_expires_at\": 123,\n \"revoke_current\": true\n}"
response = http.request(request)
puts response.read_body{
"api_key_id": "<string>",
"api_key_name": "<string>",
"token": "<string>"
}{
"status": 123,
"title": "<string>",
"detail": "<string>",
"error_code": "<string>",
"errors": [
{}
],
"instance": "<string>",
"type": "about:blank"
}{
"status": 123,
"title": "<string>",
"detail": "<string>",
"error_code": "<string>",
"errors": [
{}
],
"instance": "<string>",
"type": "about:blank"
}{
"status": 123,
"title": "<string>",
"detail": "<string>",
"error_code": "<string>",
"errors": [
{}
],
"instance": "<string>",
"type": "about:blank"
}{
"status": 123,
"title": "<string>",
"detail": "<string>",
"error_code": "<string>",
"errors": [
{}
],
"instance": "<string>",
"type": "about:blank"
}{
"status": 123,
"title": "<string>",
"detail": "<string>",
"error_code": "<string>",
"errors": [
{}
],
"instance": "<string>",
"type": "about:blank"
}{
"status": 123,
"title": "<string>",
"detail": "<string>",
"error_code": "<string>",
"errors": [
{}
],
"instance": "<string>",
"type": "about:blank"
}Permissions
Requires a service user or personal access token with theManageAccountServiceUsers permission at the enterprise level.Authorizations
Service User credential (prefix: cog_)
Path Parameters
Service user ID (prefix: service-user-)
Example:
"service-user-abc123def456"
Body
application/json

