curl --request GET \
--url https://test.deribit.com/api/v2/private/create_api_key \
--header 'Content-Type: application/json' \
--data '
{
"jsonrpc": "2.0",
"id": 8974,
"method": "private/create_api_key",
"params": {
"name": "Public key 1",
"max_scope": "account:read trade:read block_trade:read_write wallet:none",
"public_key": "-----BEGIN PUBLIC KEY-----\nMCowBQYDK2VwAyEAM7FWhKquNqLmTOV4hfYT5r3AjrYiORTT6Tn5HIfFNV8=\n-----END PUBLIC KEY-----"
}
}
'import requests
url = "https://test.deribit.com/api/v2/private/create_api_key"
payload = {
"jsonrpc": "2.0",
"id": 8974,
"method": "private/create_api_key",
"params": {
"name": "Public key 1",
"max_scope": "account:read trade:read block_trade:read_write wallet:none",
"public_key": "-----BEGIN PUBLIC KEY-----
MCowBQYDK2VwAyEAM7FWhKquNqLmTOV4hfYT5r3AjrYiORTT6Tn5HIfFNV8=
-----END PUBLIC KEY-----"
}
}
headers = {"Content-Type": "application/json"}
response = requests.get(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'GET',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
jsonrpc: '2.0',
id: 8974,
method: 'private/create_api_key',
params: {
name: 'Public key 1',
max_scope: 'account:read trade:read block_trade:read_write wallet:none',
public_key: '-----BEGIN PUBLIC KEY-----\nMCowBQYDK2VwAyEAM7FWhKquNqLmTOV4hfYT5r3AjrYiORTT6Tn5HIfFNV8=\n-----END PUBLIC KEY-----'
}
})
};
fetch('https://test.deribit.com/api/v2/private/create_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://test.deribit.com/api/v2/private/create_api_key",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_POSTFIELDS => json_encode([
'jsonrpc' => '2.0',
'id' => 8974,
'method' => 'private/create_api_key',
'params' => [
'name' => 'Public key 1',
'max_scope' => 'account:read trade:read block_trade:read_write wallet:none',
'public_key' => '-----BEGIN PUBLIC KEY-----
MCowBQYDK2VwAyEAM7FWhKquNqLmTOV4hfYT5r3AjrYiORTT6Tn5HIfFNV8=
-----END PUBLIC KEY-----'
]
]),
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://test.deribit.com/api/v2/private/create_api_key"
payload := strings.NewReader("{\n \"jsonrpc\": \"2.0\",\n \"id\": 8974,\n \"method\": \"private/create_api_key\",\n \"params\": {\n \"name\": \"Public key 1\",\n \"max_scope\": \"account:read trade:read block_trade:read_write wallet:none\",\n \"public_key\": \"-----BEGIN PUBLIC KEY-----\\nMCowBQYDK2VwAyEAM7FWhKquNqLmTOV4hfYT5r3AjrYiORTT6Tn5HIfFNV8=\\n-----END PUBLIC KEY-----\"\n }\n}")
req, _ := http.NewRequest("GET", 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.get("https://test.deribit.com/api/v2/private/create_api_key")
.header("Content-Type", "application/json")
.body("{\n \"jsonrpc\": \"2.0\",\n \"id\": 8974,\n \"method\": \"private/create_api_key\",\n \"params\": {\n \"name\": \"Public key 1\",\n \"max_scope\": \"account:read trade:read block_trade:read_write wallet:none\",\n \"public_key\": \"-----BEGIN PUBLIC KEY-----\\nMCowBQYDK2VwAyEAM7FWhKquNqLmTOV4hfYT5r3AjrYiORTT6Tn5HIfFNV8=\\n-----END PUBLIC KEY-----\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://test.deribit.com/api/v2/private/create_api_key")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"jsonrpc\": \"2.0\",\n \"id\": 8974,\n \"method\": \"private/create_api_key\",\n \"params\": {\n \"name\": \"Public key 1\",\n \"max_scope\": \"account:read trade:read block_trade:read_write wallet:none\",\n \"public_key\": \"-----BEGIN PUBLIC KEY-----\\nMCowBQYDK2VwAyEAM7FWhKquNqLmTOV4hfYT5r3AjrYiORTT6Tn5HIfFNV8=\\n-----END PUBLIC KEY-----\"\n }\n}"
response = http.request(request)
puts response.read_body{
"jsonrpc": "2.0",
"id": 2453,
"result": {
"timestamp": 1560242482758,
"max_scope": "account:read_write block_trade:read trade:read_write wallet:read_write",
"id": 3,
"enabled": true,
"default": false,
"client_secret": "B6RsF9rrLY5ezEGBQkyLlV-UC7whyPJ34BMA-kKYpes",
"client_id": "1sXMQBhM",
"name": "NewKeyName"
}
}private/create_api_key
Creates a new API key with the specified scope and permissions. API keys are used for programmatic access to the Deribit API and can be restricted to specific operations and IP addresses.
The response includes both the API key ID and the secret key. Store the secret securely as it will not be displayed again. You can view the API key details (without the secret) using the list_api_keys method.
Note: The new API key cannot be granted higher scopes than the API key used for authentication. Attempting to assign a scope that exceeds the authenticating keyโs permissions will result in an error.
๐ Related Articles:
Scope: account:read_write
curl --request GET \
--url https://test.deribit.com/api/v2/private/create_api_key \
--header 'Content-Type: application/json' \
--data '
{
"jsonrpc": "2.0",
"id": 8974,
"method": "private/create_api_key",
"params": {
"name": "Public key 1",
"max_scope": "account:read trade:read block_trade:read_write wallet:none",
"public_key": "-----BEGIN PUBLIC KEY-----\nMCowBQYDK2VwAyEAM7FWhKquNqLmTOV4hfYT5r3AjrYiORTT6Tn5HIfFNV8=\n-----END PUBLIC KEY-----"
}
}
'import requests
url = "https://test.deribit.com/api/v2/private/create_api_key"
payload = {
"jsonrpc": "2.0",
"id": 8974,
"method": "private/create_api_key",
"params": {
"name": "Public key 1",
"max_scope": "account:read trade:read block_trade:read_write wallet:none",
"public_key": "-----BEGIN PUBLIC KEY-----
MCowBQYDK2VwAyEAM7FWhKquNqLmTOV4hfYT5r3AjrYiORTT6Tn5HIfFNV8=
-----END PUBLIC KEY-----"
}
}
headers = {"Content-Type": "application/json"}
response = requests.get(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'GET',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
jsonrpc: '2.0',
id: 8974,
method: 'private/create_api_key',
params: {
name: 'Public key 1',
max_scope: 'account:read trade:read block_trade:read_write wallet:none',
public_key: '-----BEGIN PUBLIC KEY-----\nMCowBQYDK2VwAyEAM7FWhKquNqLmTOV4hfYT5r3AjrYiORTT6Tn5HIfFNV8=\n-----END PUBLIC KEY-----'
}
})
};
fetch('https://test.deribit.com/api/v2/private/create_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://test.deribit.com/api/v2/private/create_api_key",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_POSTFIELDS => json_encode([
'jsonrpc' => '2.0',
'id' => 8974,
'method' => 'private/create_api_key',
'params' => [
'name' => 'Public key 1',
'max_scope' => 'account:read trade:read block_trade:read_write wallet:none',
'public_key' => '-----BEGIN PUBLIC KEY-----
MCowBQYDK2VwAyEAM7FWhKquNqLmTOV4hfYT5r3AjrYiORTT6Tn5HIfFNV8=
-----END PUBLIC KEY-----'
]
]),
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://test.deribit.com/api/v2/private/create_api_key"
payload := strings.NewReader("{\n \"jsonrpc\": \"2.0\",\n \"id\": 8974,\n \"method\": \"private/create_api_key\",\n \"params\": {\n \"name\": \"Public key 1\",\n \"max_scope\": \"account:read trade:read block_trade:read_write wallet:none\",\n \"public_key\": \"-----BEGIN PUBLIC KEY-----\\nMCowBQYDK2VwAyEAM7FWhKquNqLmTOV4hfYT5r3AjrYiORTT6Tn5HIfFNV8=\\n-----END PUBLIC KEY-----\"\n }\n}")
req, _ := http.NewRequest("GET", 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.get("https://test.deribit.com/api/v2/private/create_api_key")
.header("Content-Type", "application/json")
.body("{\n \"jsonrpc\": \"2.0\",\n \"id\": 8974,\n \"method\": \"private/create_api_key\",\n \"params\": {\n \"name\": \"Public key 1\",\n \"max_scope\": \"account:read trade:read block_trade:read_write wallet:none\",\n \"public_key\": \"-----BEGIN PUBLIC KEY-----\\nMCowBQYDK2VwAyEAM7FWhKquNqLmTOV4hfYT5r3AjrYiORTT6Tn5HIfFNV8=\\n-----END PUBLIC KEY-----\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://test.deribit.com/api/v2/private/create_api_key")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"jsonrpc\": \"2.0\",\n \"id\": 8974,\n \"method\": \"private/create_api_key\",\n \"params\": {\n \"name\": \"Public key 1\",\n \"max_scope\": \"account:read trade:read block_trade:read_write wallet:none\",\n \"public_key\": \"-----BEGIN PUBLIC KEY-----\\nMCowBQYDK2VwAyEAM7FWhKquNqLmTOV4hfYT5r3AjrYiORTT6Tn5HIfFNV8=\\n-----END PUBLIC KEY-----\"\n }\n}"
response = http.request(request)
puts response.read_body{
"jsonrpc": "2.0",
"id": 2453,
"result": {
"timestamp": 1560242482758,
"max_scope": "account:read_write block_trade:read trade:read_write wallet:read_write",
"id": 3,
"enabled": true,
"default": false,
"client_secret": "B6RsF9rrLY5ezEGBQkyLlV-UC7whyPJ34BMA-kKYpes",
"client_id": "1sXMQBhM",
"name": "NewKeyName"
}
}Query Parameters
Describes maximal access for tokens generated with given key. If scope is not provided, its value is set as none.
๐ Related Article: Access Scope
[
"account:read",
"trade:read",
"block_trade:read_write",
"wallet:none"
]
Name of key (only letters, numbers and underscores allowed; maximum length - 16 characters)
"TestName"
ED25519 or RSA PEM Encoded public key that should be used to create asymmetric API Key for signing requests/authentication requests with user's private key.
๐ Related Article: Asymmetric API keys
"-----BEGIN PUBLIC KEY-----\nMCowBQYDK2VwAyEAM7FWhKquNqLmTOV4hfYT5r3AjrYiORTT6Tn5HIfFNV8=\n-----END PUBLIC KEY-----"
List of enabled advanced on-key features. Available options:
- restricted_block_trades: Limit the block_trade read the scope of the API key to block trades that have been made using this specific API key
- block_trade_approval: Block trades created using this API key require additional user approval. Methods that use block_rfq scope are not affected by Block Trade approval feature
restricted_block_trades, block_trade_approval Response
Success response
The JSON-RPC version (2.0)
2.0 Hide child attributes
Hide child attributes
Key identifier
1
The timestamp (milliseconds since the Unix epoch)
1536569522277
Client identifier used for authentication
"IY2D68DS"
Client secret or MD5 fingerprint of public key used for authentication
"P9Z_c73KaBPwpoTVfsXzehAhjhdJn5kM7Zlz_hhDhE8"
Describes maximal access for tokens generated with given key. If scope is not provided, its value is set as none.
๐ Related Article: Access Scope
[
"account:read",
"trade:read",
"block_trade:read_write",
"wallet:none"
]
Informs whether this api key is default (field is deprecated and will be removed in the future)
false
PEM encoded public key (Ed25519/RSA) used for asymmetric signatures (optional)
"-----BEGIN PUBLIC KEY----- MCowBQYDK2VwAyEApajFN0CSwIaaiIRPiFbiYYvpsLQLSccSLLsKPe984sc= -----END PUBLIC KEY-----"
Informs whether api key is enabled and can be used for authentication
true
Api key name that can be displayed in transaction log
"TestName"
List of enabled advanced on-key features.
Available options:
- restricted_block_trades: Limit the block_trade read the scope of the API key to block trades that have been made using this specific API key
- block_trade_approval: Block trades created using this API key require additional user approval. Methods that use block_rfq scope are not affected by Block Trade approval feature
List of IP addresses whitelisted for a selected key
The id that was sent in the request
Related topics
Creating new API keyAsymmetric API KeysStarbase Connectivity QuickstartManaging Transfersprivate/remove_api_keyWas this page helpful?