curl --request POST \
--url https://api.extole.io/v2/settings/security/keys \
--header 'Authorization: <api-key>' \
--header 'Content-Type: application/json' \
--data '
{
"algorithm": "A128KW",
"component_ids": [
"component_id"
],
"component_references": [
{
"component_id": "component_id",
"socket_names": [
"socket_name"
]
}
],
"description": "description",
"key": "key",
"name": "name",
"partner_key_id": "partner_key_id",
"tags": [
"tag"
],
"type": "JWT"
}
'import requests
url = "https://api.extole.io/v2/settings/security/keys"
payload = {
"algorithm": "A128KW",
"component_ids": ["component_id"],
"component_references": [
{
"component_id": "component_id",
"socket_names": ["socket_name"]
}
],
"description": "description",
"key": "key",
"name": "name",
"partner_key_id": "partner_key_id",
"tags": ["tag"],
"type": "JWT"
}
headers = {
"Authorization": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
algorithm: 'A128KW',
component_ids: ['component_id'],
component_references: [{component_id: 'component_id', socket_names: ['socket_name']}],
description: 'description',
key: 'key',
name: 'name',
partner_key_id: 'partner_key_id',
tags: ['tag'],
type: 'JWT'
})
};
fetch('https://api.extole.io/v2/settings/security/keys', 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.extole.io/v2/settings/security/keys",
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([
'algorithm' => 'A128KW',
'component_ids' => [
'component_id'
],
'component_references' => [
[
'component_id' => 'component_id',
'socket_names' => [
'socket_name'
]
]
],
'description' => 'description',
'key' => 'key',
'name' => 'name',
'partner_key_id' => 'partner_key_id',
'tags' => [
'tag'
],
'type' => 'JWT'
]),
CURLOPT_HTTPHEADER => [
"Authorization: <api-key>",
"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.extole.io/v2/settings/security/keys"
payload := strings.NewReader("{\n \"algorithm\": \"A128KW\",\n \"component_ids\": [\n \"component_id\"\n ],\n \"component_references\": [\n {\n \"component_id\": \"component_id\",\n \"socket_names\": [\n \"socket_name\"\n ]\n }\n ],\n \"description\": \"description\",\n \"key\": \"key\",\n \"name\": \"name\",\n \"partner_key_id\": \"partner_key_id\",\n \"tags\": [\n \"tag\"\n ],\n \"type\": \"JWT\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "<api-key>")
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.extole.io/v2/settings/security/keys")
.header("Authorization", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"algorithm\": \"A128KW\",\n \"component_ids\": [\n \"component_id\"\n ],\n \"component_references\": [\n {\n \"component_id\": \"component_id\",\n \"socket_names\": [\n \"socket_name\"\n ]\n }\n ],\n \"description\": \"description\",\n \"key\": \"key\",\n \"name\": \"name\",\n \"partner_key_id\": \"partner_key_id\",\n \"tags\": [\n \"tag\"\n ],\n \"type\": \"JWT\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.extole.io/v2/settings/security/keys")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"algorithm\": \"A128KW\",\n \"component_ids\": [\n \"component_id\"\n ],\n \"component_references\": [\n {\n \"component_id\": \"component_id\",\n \"socket_names\": [\n \"socket_name\"\n ]\n }\n ],\n \"description\": \"description\",\n \"key\": \"key\",\n \"name\": \"name\",\n \"partner_key_id\": \"partner_key_id\",\n \"tags\": [\n \"tag\"\n ],\n \"type\": \"JWT\"\n}"
response = http.request(request)
puts response.read_body{
"algorithm": "A128KW",
"component_ids": [
"<string>"
],
"component_references": [
{
"component_id": "<string>",
"socket_names": [
"<string>"
]
}
],
"created_at": "2025-10-24T02:00:00-07:00",
"description": "<string>",
"id": "<string>",
"key": "<string>",
"name": "<string>",
"partner_key_id": "<string>",
"tags": [
"<string>"
],
"type": "JWT",
"updated_at": "2025-10-24T02:00:00-07:00"
}Create client key
Creates a client key from a JSON request body. Supported variants include OAuth integrations, inline PGP or SSH key material, JWT signing keys, webhook secrets, and generic password or HTTP basic credentials. Set algorithm to select the polymorphic request and response schema. Set type to classify what the key is used for. To upload a PKCS#12 keystore file, use POST /v2/settings/security/keys/upload.
curl --request POST \
--url https://api.extole.io/v2/settings/security/keys \
--header 'Authorization: <api-key>' \
--header 'Content-Type: application/json' \
--data '
{
"algorithm": "A128KW",
"component_ids": [
"component_id"
],
"component_references": [
{
"component_id": "component_id",
"socket_names": [
"socket_name"
]
}
],
"description": "description",
"key": "key",
"name": "name",
"partner_key_id": "partner_key_id",
"tags": [
"tag"
],
"type": "JWT"
}
'import requests
url = "https://api.extole.io/v2/settings/security/keys"
payload = {
"algorithm": "A128KW",
"component_ids": ["component_id"],
"component_references": [
{
"component_id": "component_id",
"socket_names": ["socket_name"]
}
],
"description": "description",
"key": "key",
"name": "name",
"partner_key_id": "partner_key_id",
"tags": ["tag"],
"type": "JWT"
}
headers = {
"Authorization": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
algorithm: 'A128KW',
component_ids: ['component_id'],
component_references: [{component_id: 'component_id', socket_names: ['socket_name']}],
description: 'description',
key: 'key',
name: 'name',
partner_key_id: 'partner_key_id',
tags: ['tag'],
type: 'JWT'
})
};
fetch('https://api.extole.io/v2/settings/security/keys', 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.extole.io/v2/settings/security/keys",
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([
'algorithm' => 'A128KW',
'component_ids' => [
'component_id'
],
'component_references' => [
[
'component_id' => 'component_id',
'socket_names' => [
'socket_name'
]
]
],
'description' => 'description',
'key' => 'key',
'name' => 'name',
'partner_key_id' => 'partner_key_id',
'tags' => [
'tag'
],
'type' => 'JWT'
]),
CURLOPT_HTTPHEADER => [
"Authorization: <api-key>",
"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.extole.io/v2/settings/security/keys"
payload := strings.NewReader("{\n \"algorithm\": \"A128KW\",\n \"component_ids\": [\n \"component_id\"\n ],\n \"component_references\": [\n {\n \"component_id\": \"component_id\",\n \"socket_names\": [\n \"socket_name\"\n ]\n }\n ],\n \"description\": \"description\",\n \"key\": \"key\",\n \"name\": \"name\",\n \"partner_key_id\": \"partner_key_id\",\n \"tags\": [\n \"tag\"\n ],\n \"type\": \"JWT\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "<api-key>")
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.extole.io/v2/settings/security/keys")
.header("Authorization", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"algorithm\": \"A128KW\",\n \"component_ids\": [\n \"component_id\"\n ],\n \"component_references\": [\n {\n \"component_id\": \"component_id\",\n \"socket_names\": [\n \"socket_name\"\n ]\n }\n ],\n \"description\": \"description\",\n \"key\": \"key\",\n \"name\": \"name\",\n \"partner_key_id\": \"partner_key_id\",\n \"tags\": [\n \"tag\"\n ],\n \"type\": \"JWT\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.extole.io/v2/settings/security/keys")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"algorithm\": \"A128KW\",\n \"component_ids\": [\n \"component_id\"\n ],\n \"component_references\": [\n {\n \"component_id\": \"component_id\",\n \"socket_names\": [\n \"socket_name\"\n ]\n }\n ],\n \"description\": \"description\",\n \"key\": \"key\",\n \"name\": \"name\",\n \"partner_key_id\": \"partner_key_id\",\n \"tags\": [\n \"tag\"\n ],\n \"type\": \"JWT\"\n}"
response = http.request(request)
puts response.read_body{
"algorithm": "A128KW",
"component_ids": [
"<string>"
],
"component_references": [
{
"component_id": "<string>",
"socket_names": [
"<string>"
]
}
],
"created_at": "2025-10-24T02:00:00-07:00",
"description": "<string>",
"id": "<string>",
"key": "<string>",
"name": "<string>",
"partner_key_id": "<string>",
"tags": [
"<string>"
],
"type": "JWT",
"updated_at": "2025-10-24T02:00:00-07:00"
}Authorizations
Body
- Option 1
- Option 2
- Option 3
- Option 4
- Option 5
- Option 6
- Option 7
- Option 8
- Option 9
Body of a POST /v2/settings/security/keys request.
Cryptographic or integration algorithm. Discriminator for polymorphic create, update, and response schemas.
A128KW, A192KW, A256KW, ES256_PRIVATE, ES256_PUBLIC, ES384_PRIVATE, ES384_PUBLIC, ES512_PRIVATE, ES512_PUBLIC, HS256, HS384, HS512, HTTP_BASIC, PASSWORD, PS256_PRIVATE, PS256_PUBLIC, PS384_PRIVATE, PS384_PUBLIC, PS512_PRIVATE, PS512_PUBLIC, RS256_PRIVATE, RS256_PUBLIC, RS384_PRIVATE, RS384_PUBLIC, RS512_PRIVATE, RS512_PUBLIC, RSA, RSA_OAEP_256_PRIVATE, RSA_OAEP_256_PUBLIC, RSA_OAEP_384_PRIVATE, RSA_OAEP_384_PUBLIC, RSA_OAEP_512_PRIVATE, RSA_OAEP_512_PUBLIC Optional build-time expression that resolves to a human-readable description. Buildtime expressions use ClientKeyBuildtimeContext.
Key material as a string (encoded as ISO-8859-1 bytes). Required format depends on algorithm: symmetric (HS256, HS384, HS512, A128KW, A192KW, A256KW) — shared secret string; RSA/PS *_PUBLIC — PEM BEGIN PUBLIC KEY or DER-encoded X.509 SPKI; RSA/PS *_PRIVATE — PEM BEGIN PRIVATE KEY or PKCS#8 DER; EC *_PRIVATE — PEM EC private key; PASSWORD — plain password; HTTP_BASIC — username:password; OAUTH* — OAuth client secret string.
Build-time expression that resolves to the display name for the key. Buildtime expressions use ClientKeyBuildtimeContext.
Usage category that determines how the key is consumed at runtime.
JWT, PASSWORD, PGP, PGP_EXTOLE, SSH, WEBHOOK Show child attributes
Show child attributes
External key identifier used to match tokens or credentials to this key (for example the JWT kid header).
Free-form tags used to filter active keys on list.
Response
Successful response
- Option 1
- Option 2
- Option 3
- Option 4
- Option 5
- Option 6
- Option 7
- Option 8
- Option 9
- Option 10
Stored generic client key definition. Fields name and description are unevaluated and appear in buildtime-evaluatable form.
Cryptographic or integration algorithm. Discriminator for polymorphic create, update, and response schemas.
A128KW, A192KW, A256KW, ES256_PRIVATE, ES256_PUBLIC, ES384_PRIVATE, ES384_PUBLIC, ES512_PRIVATE, ES512_PUBLIC, HS256, HS384, HS512, HTTP_BASIC, PASSWORD, PS256_PRIVATE, PS256_PUBLIC, PS384_PRIVATE, PS384_PUBLIC, PS512_PRIVATE, PS512_PUBLIC, RS256_PRIVATE, RS256_PUBLIC, RS384_PRIVATE, RS384_PUBLIC, RS512_PRIVATE, RS512_PUBLIC, RSA, RSA_OAEP_256_PRIVATE, RSA_OAEP_256_PUBLIC, RSA_OAEP_384_PRIVATE, RSA_OAEP_384_PUBLIC, RSA_OAEP_512_PRIVATE, RSA_OAEP_512_PUBLIC Show child attributes
Show child attributes
RFC 3339 or RFC 9557 date-time with a numeric UTC offset and an optional IANA time-zone suffix in square brackets. Precision up to milliseconds.
^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d{1,3})?(Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9])(\[[^\]]+\])?$"2025-10-24T02:00:00-07:00"
Optional build-time expression that resolves to a human-readable description. Buildtime expressions use ClientKeyBuildtimeContext.
Stable Extole identifier for the client key.
Key material in the same encoding accepted on create. Symmetric secrets and private keys are partially masked in API responses; public keys are returned in full PEM form.
Display name for the key, in the same build-time evaluatable form that was supplied on create or update. Buildtime expressions use ClientKeyBuildtimeContext.
External key identifier used to match tokens or credentials to this key (for example the JWT kid header).
Free-form tags applied to the client key.
Usage category that determines how the key is consumed at runtime.
JWT, PASSWORD, PGP, PGP_EXTOLE, SSH, WEBHOOK RFC 3339 or RFC 9557 date-time with a numeric UTC offset and an optional IANA time-zone suffix in square brackets. Precision up to milliseconds.
^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d{1,3})?(Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9])(\[[^\]]+\])?$"2025-10-24T02:00:00-07:00"
