curl --request POST \
--url https://us.infisical.com/api/v2/secret-rotations/supabase-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": {
"projectRef": "<string>"
},
"secretsMapping": {
"apiKey": "<string>"
},
"description": "<string>",
"isAutoRotationEnabled": true
}
'import requests
url = "https://us.infisical.com/api/v2/secret-rotations/supabase-api-key"
payload = {
"name": "<string>",
"projectId": "<string>",
"connectionId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"environment": "<string>",
"secretPath": "<string>",
"rotationInterval": 2,
"parameters": { "projectRef": "<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: {projectRef: '<string>'},
secretsMapping: {apiKey: '<string>'},
description: '<string>',
isAutoRotationEnabled: true
})
};
fetch('https://us.infisical.com/api/v2/secret-rotations/supabase-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/supabase-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' => [
'projectRef' => '<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/supabase-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 \"projectRef\": \"<string>\"\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/supabase-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 \"projectRef\": \"<string>\"\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/supabase-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 \"projectRef\": \"<string>\"\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": "supabase",
"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": "supabase-api-key",
"parameters": {
"projectRef": "<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 Supabase API Key Rotation for the specified project.
curl --request POST \
--url https://us.infisical.com/api/v2/secret-rotations/supabase-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": {
"projectRef": "<string>"
},
"secretsMapping": {
"apiKey": "<string>"
},
"description": "<string>",
"isAutoRotationEnabled": true
}
'import requests
url = "https://us.infisical.com/api/v2/secret-rotations/supabase-api-key"
payload = {
"name": "<string>",
"projectId": "<string>",
"connectionId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"environment": "<string>",
"secretPath": "<string>",
"rotationInterval": 2,
"parameters": { "projectRef": "<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: {projectRef: '<string>'},
secretsMapping: {apiKey: '<string>'},
description: '<string>',
isAutoRotationEnabled: true
})
};
fetch('https://us.infisical.com/api/v2/secret-rotations/supabase-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/supabase-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' => [
'projectRef' => '<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/supabase-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 \"projectRef\": \"<string>\"\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/supabase-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 \"projectRef\": \"<string>\"\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/supabase-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 \"projectRef\": \"<string>\"\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": "supabase",
"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": "supabase-api-key",
"parameters": {
"projectRef": "<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 Supabase app connection. |
environment | string | Yes | Environment slug (e.g. dev, prod). |
secretPath | string | Yes | Path where the generated API key secret will be stored. |
isAutoRotationEnabled | boolean | No | Whether to rotate automatically on the schedule. Defaults to true. |
rotationInterval | number | Yes | Days between rotations (minimum 1). |
rotateAtUtc | object | No | Time of day (UTC) to run rotation: { "hours", "minutes" }. Defaults to { "hours": 0, "minutes": 0 }. |
parameters.projectRef | string | Yes | The reference ID of the Supabase project to rotate the API key for. |
parameters.keyType | string | Yes | The type of the API key to rotate: "publishable" or "secret". |
secretsMapping.apiKey | string | Yes | Secret key name to store the generated API key (e.g. SUPABASE_SECRET_API_KEY). |
description | string | No | Optional description. |
Sample request
curl --request POST \
--url https://us.infisical.com/api/v2/secret-rotations/supabase-api-key \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer <ACCESS_TOKEN>' \
--data '{
"name": "my-supabase-rotation",
"projectId": "<project-id>",
"description": "Supabase API key rotation",
"connectionId": "<supabase-connection-id>",
"environment": "dev",
"secretPath": "/",
"isAutoRotationEnabled": true,
"rotationInterval": 30,
"rotateAtUtc": { "hours": 0, "minutes": 0 },
"parameters": {
"projectRef": "<supabase-project-ref>",
"keyType": "secret"
},
"secretsMapping": {
"apiKey": "SUPABASE_SECRET_API_KEY"
}
}'
Sample response
{
"secretRotation": {
"id": "<rotation-id>",
"name": "my-supabase-rotation",
"description": "Supabase API key rotation",
"secretsMapping": { "apiKey": "SUPABASE_SECRET_API_KEY" },
"isAutoRotationEnabled": true,
"activeIndex": 0,
"connectionId": "<supabase-connection-id>",
"rotationInterval": 30,
"rotateAtUtc": { "hours": 0, "minutes": 0 },
"type": "supabase-api-key",
"parameters": {
"projectRef": "<supabase-project-ref>",
"keyType": "secret"
}
}
}
Body
The name of the Supabase API Key Rotation to create. Must be slug-friendly.
1 - 64The ID of the project to create the rotation in.
1The ID of the Supabase 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 Supabase 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?