CreateTokenAPI mints a new API token for the caller. The raw token is returned
curl --request POST \
--url https://api.erdo.ai/v1/tokens \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"expires_in_days": 123,
"name": "<string>",
"organization_id": "<string>"
}
'import requests
url = "https://api.erdo.ai/v1/tokens"
payload = {
"expires_in_days": 123,
"name": "<string>",
"organization_id": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({expires_in_days: 123, name: '<string>', organization_id: '<string>'})
};
fetch('https://api.erdo.ai/v1/tokens', 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.erdo.ai/v1/tokens",
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([
'expires_in_days' => 123,
'name' => '<string>',
'organization_id' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"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.erdo.ai/v1/tokens"
payload := strings.NewReader("{\n \"expires_in_days\": 123,\n \"name\": \"<string>\",\n \"organization_id\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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.erdo.ai/v1/tokens")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"expires_in_days\": 123,\n \"name\": \"<string>\",\n \"organization_id\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.erdo.ai/v1/tokens")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"expires_in_days\": 123,\n \"name\": \"<string>\",\n \"organization_id\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"default_org": {
"id": "<string>",
"name": "<string>"
},
"expires_at": "<string>",
"hint": "<string>",
"id": "<string>",
"token": "<string>"
}{
"code": "not_found",
"details": {},
"message": "<string>"
}API Reference
CreateTokenAPI mints a new API token for the caller. The raw token is returned
exactly once.
POST
/
v1
/
tokens
CreateTokenAPI mints a new API token for the caller. The raw token is returned
curl --request POST \
--url https://api.erdo.ai/v1/tokens \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"expires_in_days": 123,
"name": "<string>",
"organization_id": "<string>"
}
'import requests
url = "https://api.erdo.ai/v1/tokens"
payload = {
"expires_in_days": 123,
"name": "<string>",
"organization_id": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({expires_in_days: 123, name: '<string>', organization_id: '<string>'})
};
fetch('https://api.erdo.ai/v1/tokens', 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.erdo.ai/v1/tokens",
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([
'expires_in_days' => 123,
'name' => '<string>',
'organization_id' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"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.erdo.ai/v1/tokens"
payload := strings.NewReader("{\n \"expires_in_days\": 123,\n \"name\": \"<string>\",\n \"organization_id\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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.erdo.ai/v1/tokens")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"expires_in_days\": 123,\n \"name\": \"<string>\",\n \"organization_id\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.erdo.ai/v1/tokens")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"expires_in_days\": 123,\n \"name\": \"<string>\",\n \"organization_id\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"default_org": {
"id": "<string>",
"name": "<string>"
},
"expires_at": "<string>",
"hint": "<string>",
"id": "<string>",
"token": "<string>"
}{
"code": "not_found",
"details": {},
"message": "<string>"
}Authorizations
An Erdo API key (erdo_api_...) or scoped token (erdo_token_...).
Body
application/json
0 defaults to 30 days — the REST surface intentionally does not expose no-expiry tokens to prevent callers accidentally minting eternal credentials with a minimal payload like {"name": "ci"}.
to the caller's currently-active org. Must be an org the caller belongs to.
ListTokensAPI lists the caller's API tokens. It never returns the token hash or
RevokeTokenAPI revokes one of the caller's API tokens.
⌘I

