Create API Key
Creates a new API Key to access SDP endpoints. API Key can be configured to have a granular read/write access, also API key can be restricted to the specific IP or range of the IPs.
curl --request POST \
--url https://api.example.com/api-keys \
--header 'Authorization: <api-key>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "<string>",
"permissions": [],
"distribution_wallet_ids": [
"<string>"
],
"expiry_date": "2023-11-07T05:31:56Z",
"allowed_ips": "<string>"
}
'import requests
url = "https://api.example.com/api-keys"
payload = {
"name": "<string>",
"permissions": [],
"distribution_wallet_ids": ["<string>"],
"expiry_date": "2023-11-07T05:31:56Z",
"allowed_ips": "<string>"
}
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({
name: '<string>',
permissions: [],
distribution_wallet_ids: ['<string>'],
expiry_date: '2023-11-07T05:31:56Z',
allowed_ips: '<string>'
})
};
fetch('https://api.example.com/api-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.example.com/api-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([
'name' => '<string>',
'permissions' => [
],
'distribution_wallet_ids' => [
'<string>'
],
'expiry_date' => '2023-11-07T05:31:56Z',
'allowed_ips' => '<string>'
]),
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.example.com/api-keys"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"permissions\": [],\n \"distribution_wallet_ids\": [\n \"<string>\"\n ],\n \"expiry_date\": \"2023-11-07T05:31:56Z\",\n \"allowed_ips\": \"<string>\"\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.example.com/api-keys")
.header("Authorization", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"permissions\": [],\n \"distribution_wallet_ids\": [\n \"<string>\"\n ],\n \"expiry_date\": \"2023-11-07T05:31:56Z\",\n \"allowed_ips\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/api-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 \"name\": \"<string>\",\n \"permissions\": [],\n \"distribution_wallet_ids\": [\n \"<string>\"\n ],\n \"expiry_date\": \"2023-11-07T05:31:56Z\",\n \"allowed_ips\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"id": "<string>",
"name": "<string>",
"key": "<string>",
"permissions": [
"<string>"
],
"allowed_ips": [
"<string>"
],
"distribution_wallet_ids": [
"<string>"
],
"expiry_date": "2023-11-07T05:31:56Z",
"created_at": "2023-11-07T05:31:56Z",
"created_by": "<string>",
"updated_at": "2023-11-07T05:31:56Z",
"updated_by": "<string>",
"last_used_at": "2023-11-07T05:31:56Z"
}{
"error": "<string>",
"extras": {}
}{
"error": "Not authorized",
"extras": {
"status": 401,
"message": "Not authorized"
}
}{
"error": "Forbidden"
}Authorizations
Authorization header containing an SDP JWT (ES256) or an SDP_ API key.
Body
Human-readable name for the API key
List of permissions granted to this API key
1read:all, write:all, read:disbursements, write:disbursements, read:receivers, write:receivers, read:payments, write:payments, read:organization, write:organization, read:users, write:users, read:wallets, write:wallets, read:distribution_wallets, write:distribution_wallets, read:statistics, read:exports IDs of the distribution accounts this key may act on. Omit the field to inherit the accounts its creator can reach at that moment. An empty array grants no account access. A key cannot be scoped to an account its creator cannot reach.
Optional expiration date for the API key (must be in the future)
IP restrictions for the API key. If not provided, the key can be used from any IP
Response
API key created successfully
Unique identifier for the API key
Human-readable name for the API key
The actual API key (only returned once at creation)
List of permissions granted to this API key
List of allowed IP addresses or CIDR ranges
IDs of the distribution accounts this API key may act on.
Expiration date of the API key
When the API key was created
User who created the API key
When the API key was last updated
User who last updated the API key
When the API key was last used
curl --request POST \
--url https://api.example.com/api-keys \
--header 'Authorization: <api-key>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "<string>",
"permissions": [],
"distribution_wallet_ids": [
"<string>"
],
"expiry_date": "2023-11-07T05:31:56Z",
"allowed_ips": "<string>"
}
'import requests
url = "https://api.example.com/api-keys"
payload = {
"name": "<string>",
"permissions": [],
"distribution_wallet_ids": ["<string>"],
"expiry_date": "2023-11-07T05:31:56Z",
"allowed_ips": "<string>"
}
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({
name: '<string>',
permissions: [],
distribution_wallet_ids: ['<string>'],
expiry_date: '2023-11-07T05:31:56Z',
allowed_ips: '<string>'
})
};
fetch('https://api.example.com/api-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.example.com/api-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([
'name' => '<string>',
'permissions' => [
],
'distribution_wallet_ids' => [
'<string>'
],
'expiry_date' => '2023-11-07T05:31:56Z',
'allowed_ips' => '<string>'
]),
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.example.com/api-keys"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"permissions\": [],\n \"distribution_wallet_ids\": [\n \"<string>\"\n ],\n \"expiry_date\": \"2023-11-07T05:31:56Z\",\n \"allowed_ips\": \"<string>\"\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.example.com/api-keys")
.header("Authorization", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"permissions\": [],\n \"distribution_wallet_ids\": [\n \"<string>\"\n ],\n \"expiry_date\": \"2023-11-07T05:31:56Z\",\n \"allowed_ips\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/api-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 \"name\": \"<string>\",\n \"permissions\": [],\n \"distribution_wallet_ids\": [\n \"<string>\"\n ],\n \"expiry_date\": \"2023-11-07T05:31:56Z\",\n \"allowed_ips\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"id": "<string>",
"name": "<string>",
"key": "<string>",
"permissions": [
"<string>"
],
"allowed_ips": [
"<string>"
],
"distribution_wallet_ids": [
"<string>"
],
"expiry_date": "2023-11-07T05:31:56Z",
"created_at": "2023-11-07T05:31:56Z",
"created_by": "<string>",
"updated_at": "2023-11-07T05:31:56Z",
"updated_by": "<string>",
"last_used_at": "2023-11-07T05:31:56Z"
}{
"error": "<string>",
"extras": {}
}{
"error": "Not authorized",
"extras": {
"status": 401,
"message": "Not authorized"
}
}{
"error": "Forbidden"
}