curl --request POST \
--url https://api.example.com/v1/api-keys/ \
--header 'Content-Type: application/json' \
--data '
{
"name": "Development API Key",
"expirationDays": 30,
"permissions": [
"read",
"write"
]
}
'import requests
url = "https://api.example.com/v1/api-keys/"
payload = {
"name": "Development API Key",
"expirationDays": 30,
"permissions": ["read", "write"]
}
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: 'Development API Key',
expirationDays: 30,
permissions: ['read', 'write']
})
};
fetch('https://api.example.com/v1/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/v1/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' => 'Development API Key',
'expirationDays' => 30,
'permissions' => [
'read',
'write'
]
]),
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://api.example.com/v1/api-keys/"
payload := strings.NewReader("{\n \"name\": \"Development API Key\",\n \"expirationDays\": 30,\n \"permissions\": [\n \"read\",\n \"write\"\n ]\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://api.example.com/v1/api-keys/")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"Development API Key\",\n \"expirationDays\": 30,\n \"permissions\": [\n \"read\",\n \"write\"\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/v1/api-keys/")
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\": \"Development API Key\",\n \"expirationDays\": 30,\n \"permissions\": [\n \"read\",\n \"write\"\n ]\n}"
response = http.request(request)
puts response.read_body{
"_id": 1024,
"name": "Development API Key",
"permissions": [
"read",
"write"
],
"expiration_date": "2027-11-01T00:00:00Z",
"created_at": "2026-11-01T00:00:00Z",
"revoked": false,
"created_by_user_id": "user_123",
"verbex_id": "vx_123",
"user_org_id": "org_123",
"user_workspace_id": null,
"api_key": "<your new API key>"
}{
"status_code": 400,
"status": "error",
"message": "Validation Error",
"error_details": "Number of days until the API key expires, between 1 and 365 days"
}{
"status_code": 400,
"status": "error",
"message": "Validation Error",
"error_details": "Number of days until the API key expires, between 1 and 365 days"
}{
"status_code": 400,
"status": "error",
"message": "Validation Error",
"error_details": "Number of days until the API key expires, between 1 and 365 days"
}{
"status_code": 400,
"status": "error",
"message": "Validation Error",
"error_details": "Number of days until the API key expires, between 1 and 365 days"
}Create API Key
Create a new API key.
The plain-text key is returned only in this response as api_key. Store it securely, because it cannot be retrieved later.
curl --request POST \
--url https://api.example.com/v1/api-keys/ \
--header 'Content-Type: application/json' \
--data '
{
"name": "Development API Key",
"expirationDays": 30,
"permissions": [
"read",
"write"
]
}
'import requests
url = "https://api.example.com/v1/api-keys/"
payload = {
"name": "Development API Key",
"expirationDays": 30,
"permissions": ["read", "write"]
}
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: 'Development API Key',
expirationDays: 30,
permissions: ['read', 'write']
})
};
fetch('https://api.example.com/v1/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/v1/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' => 'Development API Key',
'expirationDays' => 30,
'permissions' => [
'read',
'write'
]
]),
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://api.example.com/v1/api-keys/"
payload := strings.NewReader("{\n \"name\": \"Development API Key\",\n \"expirationDays\": 30,\n \"permissions\": [\n \"read\",\n \"write\"\n ]\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://api.example.com/v1/api-keys/")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"Development API Key\",\n \"expirationDays\": 30,\n \"permissions\": [\n \"read\",\n \"write\"\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/v1/api-keys/")
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\": \"Development API Key\",\n \"expirationDays\": 30,\n \"permissions\": [\n \"read\",\n \"write\"\n ]\n}"
response = http.request(request)
puts response.read_body{
"_id": 1024,
"name": "Development API Key",
"permissions": [
"read",
"write"
],
"expiration_date": "2027-11-01T00:00:00Z",
"created_at": "2026-11-01T00:00:00Z",
"revoked": false,
"created_by_user_id": "user_123",
"verbex_id": "vx_123",
"user_org_id": "org_123",
"user_workspace_id": null,
"api_key": "<your new API key>"
}{
"status_code": 400,
"status": "error",
"message": "Validation Error",
"error_details": "Number of days until the API key expires, between 1 and 365 days"
}{
"status_code": 400,
"status": "error",
"message": "Validation Error",
"error_details": "Number of days until the API key expires, between 1 and 365 days"
}{
"status_code": 400,
"status": "error",
"message": "Validation Error",
"error_details": "Number of days until the API key expires, between 1 and 365 days"
}{
"status_code": 400,
"status": "error",
"message": "Validation Error",
"error_details": "Number of days until the API key expires, between 1 and 365 days"
}Body
Field names in this request body are camelCase (expirationDays, workspaceId).
A descriptive name for the API key to help identify its purpose and usage context
1Number of days until the API key expires, between 1 and 365.
1 <= x <= 365List of permission scopes granted to this API key
Scope the key to a workspace. Your organization must own the workspace.
Response
API key created
Unique identifier for this API key
The descriptive name given to this API key
When this API key expires and becomes invalid (UTC)
When this API key was created (UTC)
Whether this API key has been revoked
The plain-text API key. It is only returned in this response and cannot be retrieved later, so store it securely.
List of permission scopes granted to this API key
Identifier of the user who created this API key
Verbex ID of the key owner
Organization the key belongs to
Workspace the key is scoped to, if any

