Skip to main content
POST
/
api
/
v2
/
secret-rotations
/
litellm-api-key
cURL
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>"
}
Check out the configuration docs for LiteLLM API Key Rotations to learn how to obtain the required parameters.
Creates a LiteLLM API Key secret rotation. Infisical will create and rotate API keys via your LiteLLM connection and write them to the specified secret path.

Request body

FieldTypeRequiredDescription
namestringYesA unique name for the rotation (max 100 characters).
projectIdstring (UUID)YesThe project ID.
connectionIdstring (UUID)YesID of the LiteLLM app connection (management-capable API key).
environmentstringYesEnvironment slug (e.g. dev, prod).
secretPathstringYesPath where the generated API key secret will be stored.
isAutoRotationEnabledbooleanYesWhether to rotate automatically on the schedule.
rotationIntervalnumberYesDays between rotations (e.g. 30).
rotateAtUtcobjectYesTime of day (UTC) to run rotation: { "hours", "minutes" }.
parameters.namestringYesName for the generated key in LiteLLM (max 100 characters). Infisical appends a timestamp to keep each key unique.
parameters.userIdstringNoLiteLLM user ID to associate the generated key with.
parameters.teamIdstringNoLiteLLM team ID to associate the generated key with.
parameters.modelsstring[]NoModel names the key is allowed to access. An empty list allows all models.
parameters.additionalOptionsstring (JSON)NoA JSON object of additional /key/generate options (e.g. max_budget, tpm_limit, rpm_limit, metadata).
secretsMapping.apiKeystringYesSecret key name to store the generated API key (e.g. LITELLM_API_KEY).
descriptionstringNoOptional 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

application/json
name
string
required

The name of the LiteLLM API Key Rotation to create. Must be slug-friendly.

Required string length: 1 - 64
projectId
string
required

The ID of the project to create the rotation in.

Minimum string length: 1
connectionId
string<uuid>
required

The ID of the LiteLLM Connection to use for rotation.

environment
string
required

The slug of the project environment to create the rotation in.

Required string length: 1 - 64
secretPath
string
required

The secret path of the project to create the rotation in.

Minimum string length: 1
rotationInterval
number
required

The interval, in days, to automatically rotate secrets.

Required range: x >= 1
parameters
object
required
secretsMapping
object
required
description
string | null

An optional description for the LiteLLM API Key Rotation.

Maximum string length: 256
isAutoRotationEnabled
boolean
default:true

Whether secrets should be automatically rotated when the specified rotation interval has elapsed.

rotateAtUtc
object

The hours and minutes rotation should occur at in UTC. Defaults to Midnight (00:00) UTC.

Response

Default Response

secretRotation
object
required