curl --request POST \
--url https://us.infisical.com/api/v2/secret-rotations/litellm-api-key \
--header 'Content-Type: application/json' \
--data '
{
"name": "<string>",
"projectId": "<string>",
"connectionId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"environment": "<string>",
"secretPath": "<string>",
"rotationInterval": 2,
"parameters": {
"name": "<string>",
"additionalOptions": "<string>",
"userId": "<string>",
"teamId": "<string>",
"models": [
"<string>"
]
},
"secretsMapping": {
"apiKey": "<string>"
},
"description": "<string>",
"isAutoRotationEnabled": true
}
'import requests
url = "https://us.infisical.com/api/v2/secret-rotations/litellm-api-key"
payload = {
"name": "<string>",
"projectId": "<string>",
"connectionId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"environment": "<string>",
"secretPath": "<string>",
"rotationInterval": 2,
"parameters": {
"name": "<string>",
"additionalOptions": "<string>",
"userId": "<string>",
"teamId": "<string>",
"models": ["<string>"]
},
"secretsMapping": { "apiKey": "<string>" },
"description": "<string>",
"isAutoRotationEnabled": True
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
name: '<string>',
projectId: '<string>',
connectionId: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
environment: '<string>',
secretPath: '<string>',
rotationInterval: 2,
parameters: {
name: '<string>',
additionalOptions: '<string>',
userId: '<string>',
teamId: '<string>',
models: ['<string>']
},
secretsMapping: {apiKey: '<string>'},
description: '<string>',
isAutoRotationEnabled: true
})
};
fetch('https://us.infisical.com/api/v2/secret-rotations/litellm-api-key', 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://us.infisical.com/api/v2/secret-rotations/litellm-api-key",
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([
'name' => '<string>',
'projectId' => '<string>',
'connectionId' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'environment' => '<string>',
'secretPath' => '<string>',
'rotationInterval' => 2,
'parameters' => [
'name' => '<string>',
'additionalOptions' => '<string>',
'userId' => '<string>',
'teamId' => '<string>',
'models' => [
'<string>'
]
],
'secretsMapping' => [
'apiKey' => '<string>'
],
'description' => '<string>',
'isAutoRotationEnabled' => true
]),
CURLOPT_HTTPHEADER => [
"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://us.infisical.com/api/v2/secret-rotations/litellm-api-key"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"projectId\": \"<string>\",\n \"connectionId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"environment\": \"<string>\",\n \"secretPath\": \"<string>\",\n \"rotationInterval\": 2,\n \"parameters\": {\n \"name\": \"<string>\",\n \"additionalOptions\": \"<string>\",\n \"userId\": \"<string>\",\n \"teamId\": \"<string>\",\n \"models\": [\n \"<string>\"\n ]\n },\n \"secretsMapping\": {\n \"apiKey\": \"<string>\"\n },\n \"description\": \"<string>\",\n \"isAutoRotationEnabled\": true\n}")
req, _ := http.NewRequest("POST", url, payload)
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://us.infisical.com/api/v2/secret-rotations/litellm-api-key")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"projectId\": \"<string>\",\n \"connectionId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"environment\": \"<string>\",\n \"secretPath\": \"<string>\",\n \"rotationInterval\": 2,\n \"parameters\": {\n \"name\": \"<string>\",\n \"additionalOptions\": \"<string>\",\n \"userId\": \"<string>\",\n \"teamId\": \"<string>\",\n \"models\": [\n \"<string>\"\n ]\n },\n \"secretsMapping\": {\n \"apiKey\": \"<string>\"\n },\n \"description\": \"<string>\",\n \"isAutoRotationEnabled\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://us.infisical.com/api/v2/secret-rotations/litellm-api-key")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"<string>\",\n \"projectId\": \"<string>\",\n \"connectionId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"environment\": \"<string>\",\n \"secretPath\": \"<string>\",\n \"rotationInterval\": 2,\n \"parameters\": {\n \"name\": \"<string>\",\n \"additionalOptions\": \"<string>\",\n \"userId\": \"<string>\",\n \"teamId\": \"<string>\",\n \"models\": [\n \"<string>\"\n ]\n },\n \"secretsMapping\": {\n \"apiKey\": \"<string>\"\n },\n \"description\": \"<string>\",\n \"isAutoRotationEnabled\": true\n}"
response = http.request(request)
puts response.read_body{
"secretRotation": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"folderId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"connectionId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"createdAt": "2023-11-07T05:31:56Z",
"updatedAt": "2023-11-07T05:31:56Z",
"rotationInterval": 123,
"rotationStatus": "<string>",
"lastRotationAttemptedAt": "2023-11-07T05:31:56Z",
"lastRotatedAt": "2023-11-07T05:31:56Z",
"connection": {
"app": "litellm",
"name": "<string>",
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
},
"environment": {
"slug": "<string>",
"name": "<string>",
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
},
"projectId": "<string>",
"folder": {
"id": "<string>",
"path": "<string>"
},
"rotateAtUtc": {
"hours": 11.5,
"minutes": 29.5
},
"type": "litellm-api-key",
"parameters": {
"name": "<string>",
"additionalOptions": "<string>",
"userId": "<string>",
"teamId": "<string>",
"models": [
"<string>"
]
},
"secretsMapping": {
"apiKey": "<string>"
},
"description": "<string>",
"isAutoRotationEnabled": true,
"activeIndex": 0,
"lastRotationJobId": "<string>",
"nextRotationAt": "2023-11-07T05:31:56Z",
"isLastRotationManual": true,
"lastRotationMessage": "<string>"
}
}{
"reqId": "<string>",
"statusCode": 400,
"message": "<string>",
"error": "<string>",
"details": "<unknown>"
}{
"reqId": "<string>",
"statusCode": 401,
"message": "<string>",
"error": "<string>"
}{
"reqId": "<string>",
"statusCode": 403,
"message": "<string>",
"error": "<string>",
"details": "<unknown>"
}{
"reqId": "<string>",
"statusCode": 404,
"message": "<string>",
"error": "<string>"
}{
"reqId": "<string>",
"statusCode": 422,
"error": "<string>",
"message": "<unknown>"
}{
"reqId": "<string>",
"statusCode": 500,
"message": "<string>",
"error": "<string>"
}Create
Create a LiteLLM API Key Rotation for the specified project.
curl --request POST \
--url https://us.infisical.com/api/v2/secret-rotations/litellm-api-key \
--header 'Content-Type: application/json' \
--data '
{
"name": "<string>",
"projectId": "<string>",
"connectionId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"environment": "<string>",
"secretPath": "<string>",
"rotationInterval": 2,
"parameters": {
"name": "<string>",
"additionalOptions": "<string>",
"userId": "<string>",
"teamId": "<string>",
"models": [
"<string>"
]
},
"secretsMapping": {
"apiKey": "<string>"
},
"description": "<string>",
"isAutoRotationEnabled": true
}
'import requests
url = "https://us.infisical.com/api/v2/secret-rotations/litellm-api-key"
payload = {
"name": "<string>",
"projectId": "<string>",
"connectionId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"environment": "<string>",
"secretPath": "<string>",
"rotationInterval": 2,
"parameters": {
"name": "<string>",
"additionalOptions": "<string>",
"userId": "<string>",
"teamId": "<string>",
"models": ["<string>"]
},
"secretsMapping": { "apiKey": "<string>" },
"description": "<string>",
"isAutoRotationEnabled": True
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
name: '<string>',
projectId: '<string>',
connectionId: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
environment: '<string>',
secretPath: '<string>',
rotationInterval: 2,
parameters: {
name: '<string>',
additionalOptions: '<string>',
userId: '<string>',
teamId: '<string>',
models: ['<string>']
},
secretsMapping: {apiKey: '<string>'},
description: '<string>',
isAutoRotationEnabled: true
})
};
fetch('https://us.infisical.com/api/v2/secret-rotations/litellm-api-key', 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://us.infisical.com/api/v2/secret-rotations/litellm-api-key",
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([
'name' => '<string>',
'projectId' => '<string>',
'connectionId' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'environment' => '<string>',
'secretPath' => '<string>',
'rotationInterval' => 2,
'parameters' => [
'name' => '<string>',
'additionalOptions' => '<string>',
'userId' => '<string>',
'teamId' => '<string>',
'models' => [
'<string>'
]
],
'secretsMapping' => [
'apiKey' => '<string>'
],
'description' => '<string>',
'isAutoRotationEnabled' => true
]),
CURLOPT_HTTPHEADER => [
"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://us.infisical.com/api/v2/secret-rotations/litellm-api-key"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"projectId\": \"<string>\",\n \"connectionId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"environment\": \"<string>\",\n \"secretPath\": \"<string>\",\n \"rotationInterval\": 2,\n \"parameters\": {\n \"name\": \"<string>\",\n \"additionalOptions\": \"<string>\",\n \"userId\": \"<string>\",\n \"teamId\": \"<string>\",\n \"models\": [\n \"<string>\"\n ]\n },\n \"secretsMapping\": {\n \"apiKey\": \"<string>\"\n },\n \"description\": \"<string>\",\n \"isAutoRotationEnabled\": true\n}")
req, _ := http.NewRequest("POST", url, payload)
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://us.infisical.com/api/v2/secret-rotations/litellm-api-key")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"projectId\": \"<string>\",\n \"connectionId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"environment\": \"<string>\",\n \"secretPath\": \"<string>\",\n \"rotationInterval\": 2,\n \"parameters\": {\n \"name\": \"<string>\",\n \"additionalOptions\": \"<string>\",\n \"userId\": \"<string>\",\n \"teamId\": \"<string>\",\n \"models\": [\n \"<string>\"\n ]\n },\n \"secretsMapping\": {\n \"apiKey\": \"<string>\"\n },\n \"description\": \"<string>\",\n \"isAutoRotationEnabled\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://us.infisical.com/api/v2/secret-rotations/litellm-api-key")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"<string>\",\n \"projectId\": \"<string>\",\n \"connectionId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"environment\": \"<string>\",\n \"secretPath\": \"<string>\",\n \"rotationInterval\": 2,\n \"parameters\": {\n \"name\": \"<string>\",\n \"additionalOptions\": \"<string>\",\n \"userId\": \"<string>\",\n \"teamId\": \"<string>\",\n \"models\": [\n \"<string>\"\n ]\n },\n \"secretsMapping\": {\n \"apiKey\": \"<string>\"\n },\n \"description\": \"<string>\",\n \"isAutoRotationEnabled\": true\n}"
response = http.request(request)
puts response.read_body{
"secretRotation": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"folderId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"connectionId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"createdAt": "2023-11-07T05:31:56Z",
"updatedAt": "2023-11-07T05:31:56Z",
"rotationInterval": 123,
"rotationStatus": "<string>",
"lastRotationAttemptedAt": "2023-11-07T05:31:56Z",
"lastRotatedAt": "2023-11-07T05:31:56Z",
"connection": {
"app": "litellm",
"name": "<string>",
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
},
"environment": {
"slug": "<string>",
"name": "<string>",
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
},
"projectId": "<string>",
"folder": {
"id": "<string>",
"path": "<string>"
},
"rotateAtUtc": {
"hours": 11.5,
"minutes": 29.5
},
"type": "litellm-api-key",
"parameters": {
"name": "<string>",
"additionalOptions": "<string>",
"userId": "<string>",
"teamId": "<string>",
"models": [
"<string>"
]
},
"secretsMapping": {
"apiKey": "<string>"
},
"description": "<string>",
"isAutoRotationEnabled": true,
"activeIndex": 0,
"lastRotationJobId": "<string>",
"nextRotationAt": "2023-11-07T05:31:56Z",
"isLastRotationManual": true,
"lastRotationMessage": "<string>"
}
}{
"reqId": "<string>",
"statusCode": 400,
"message": "<string>",
"error": "<string>",
"details": "<unknown>"
}{
"reqId": "<string>",
"statusCode": 401,
"message": "<string>",
"error": "<string>"
}{
"reqId": "<string>",
"statusCode": 403,
"message": "<string>",
"error": "<string>",
"details": "<unknown>"
}{
"reqId": "<string>",
"statusCode": 404,
"message": "<string>",
"error": "<string>"
}{
"reqId": "<string>",
"statusCode": 422,
"error": "<string>",
"message": "<unknown>"
}{
"reqId": "<string>",
"statusCode": 500,
"message": "<string>",
"error": "<string>"
}Request body
| Field | Type | Required | Description |
|---|---|---|---|
name | string | Yes | A unique name for the rotation (max 100 characters). |
projectId | string (UUID) | Yes | The project ID. |
connectionId | string (UUID) | Yes | ID of the LiteLLM app connection (management-capable API key). |
environment | string | Yes | Environment slug (e.g. dev, prod). |
secretPath | string | Yes | Path where the generated API key secret will be stored. |
isAutoRotationEnabled | boolean | Yes | Whether to rotate automatically on the schedule. |
rotationInterval | number | Yes | Days between rotations (e.g. 30). |
rotateAtUtc | object | Yes | Time of day (UTC) to run rotation: { "hours", "minutes" }. |
parameters.name | string | Yes | Name for the generated key in LiteLLM (max 100 characters). Infisical appends a timestamp to keep each key unique. |
parameters.userId | string | No | LiteLLM user ID to associate the generated key with. |
parameters.teamId | string | No | LiteLLM team ID to associate the generated key with. |
parameters.models | string[] | No | Model names the key is allowed to access. An empty list allows all models. |
parameters.additionalOptions | string (JSON) | No | A JSON object of additional /key/generate options (e.g. max_budget, tpm_limit, rpm_limit, metadata). |
secretsMapping.apiKey | string | Yes | Secret key name to store the generated API key (e.g. LITELLM_API_KEY). |
description | string | No | Optional description. |
Sample request
curl --request POST \
--url https://us.infisical.com/api/v2/secret-rotations/litellm-api-key \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer <ACCESS_TOKEN>' \
--data '{
"name": "my-litellm-rotation",
"projectId": "<project-id>",
"description": "LiteLLM API key rotation",
"connectionId": "<litellm-connection-id>",
"environment": "dev",
"secretPath": "/",
"isAutoRotationEnabled": true,
"rotationInterval": 30,
"rotateAtUtc": { "hours": 0, "minutes": 0 },
"parameters": {
"name": "my-app-key",
"userId": "<litellm-user-id>",
"teamId": "<litellm-team-id>",
"models": ["gpt-4o"],
"additionalOptions": "{\"max_budget\": 100}"
},
"secretsMapping": {
"apiKey": "LITELLM_API_KEY"
}
}'
Sample response
{
"secretRotation": {
"id": "<rotation-id>",
"name": "my-litellm-rotation",
"description": "LiteLLM API key rotation",
"secretsMapping": { "apiKey": "LITELLM_API_KEY" },
"isAutoRotationEnabled": true,
"activeIndex": 0,
"connectionId": "<litellm-connection-id>",
"rotationInterval": 30,
"rotateAtUtc": { "hours": 0, "minutes": 0 },
"type": "litellm-api-key",
"parameters": {
"name": "my-app-key",
"userId": "<litellm-user-id>",
"teamId": "<litellm-team-id>",
"models": ["gpt-4o"],
"additionalOptions": "{\"max_budget\": 100}"
}
}
}
Body
The name of the LiteLLM API Key Rotation to create. Must be slug-friendly.
1 - 64The ID of the project to create the rotation in.
1The ID of the LiteLLM Connection to use for rotation.
The slug of the project environment to create the rotation in.
1 - 64The secret path of the project to create the rotation in.
1The interval, in days, to automatically rotate secrets.
x >= 1Show child attributes
Show child attributes
Show child attributes
Show child attributes
An optional description for the LiteLLM API Key Rotation.
256Whether secrets should be automatically rotated when the specified rotation interval has elapsed.
The hours and minutes rotation should occur at in UTC. Defaults to Midnight (00:00) UTC.
Show child attributes
Show child attributes
Response
Default Response
Show child attributes
Show child attributes
Was this page helpful?