Generate a chart with a rendered image
Generates a complete Human Design chart from birth date, time, and location,
and returns a svgRenderUrl for the rendered Visual Chart image alongside the
chart data. Requires the “advanced” access tier.
curl --request POST \
--url https://api.humandesignapi.nl/v2/visual-charts \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'HD-Geocode-Key: <api-key>' \
--data '
{
"birthdate": "1990-01-15",
"birthtime": "14:30",
"location": "Amsterdam, The Netherlands"
}
'import requests
url = "https://api.humandesignapi.nl/v2/visual-charts"
payload = {
"birthdate": "1990-01-15",
"birthtime": "14:30",
"location": "Amsterdam, The Netherlands"
}
headers = {
"Authorization": "Bearer <token>",
"HD-Geocode-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
Authorization: 'Bearer <token>',
'HD-Geocode-Key': '<api-key>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
birthdate: '1990-01-15',
birthtime: '14:30',
location: 'Amsterdam, The Netherlands'
})
};
fetch('https://api.humandesignapi.nl/v2/visual-charts', 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.humandesignapi.nl/v2/visual-charts",
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([
'birthdate' => '1990-01-15',
'birthtime' => '14:30',
'location' => 'Amsterdam, The Netherlands'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json",
"HD-Geocode-Key: <api-key>"
],
]);
$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.humandesignapi.nl/v2/visual-charts"
payload := strings.NewReader("{\n \"birthdate\": \"1990-01-15\",\n \"birthtime\": \"14:30\",\n \"location\": \"Amsterdam, The Netherlands\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("HD-Geocode-Key", "<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.humandesignapi.nl/v2/visual-charts")
.header("Authorization", "Bearer <token>")
.header("HD-Geocode-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"birthdate\": \"1990-01-15\",\n \"birthtime\": \"14:30\",\n \"location\": \"Amsterdam, The Netherlands\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.humandesignapi.nl/v2/visual-charts")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["HD-Geocode-Key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"birthdate\": \"1990-01-15\",\n \"birthtime\": \"14:30\",\n \"location\": \"Amsterdam, The Netherlands\"\n}"
response = http.request(request)
puts response.read_body{
"timestamp": "2026-03-24T12:00:00.000Z",
"success": true,
"message": "Chart generated",
"errorCode": "",
"type": "ChartResult",
"data": {
"type": "Generator",
"profile": "6/2",
"channelsShort": [
"20-34",
"10-57"
],
"centers": [
"G",
"Sacral",
"Spleen",
"Throat"
],
"strategy": "To Respond",
"authority": "Sacral",
"incarnationCross": "Right Angle Cross of Tension (39/38 | 51/57)",
"definition": "Split Definition",
"signature": "Satisfaction",
"notSelfTheme": "Frustration",
"cognition": "Smell",
"determination": "Calm Appetite",
"variables": "PLL DRL",
"motivation": "Hope",
"transference": "Guilt",
"perspective": "Survival",
"distraction": "Power",
"environment": "Selective Caves",
"circuitries": "Individual, Tribal",
"channelsLong": [
"The Channel of Charisma (20-34)",
"The Channel of the Brainwave (57-10)"
],
"gates": [
"20",
"34",
"10",
"57"
],
"activations": {
"design": {
"sun": "20.1",
"earth": "34.1",
"northNode": "10.3",
"southNode": "15.3",
"moon": "57.4",
"mercury": "48.2",
"venus": "18.5",
"mars": "28.1",
"jupiter": "32.6",
"saturn": "50.3",
"uranus": "44.2",
"neptune": "26.4",
"pluto": "54.1"
},
"personality": {
"sun": "20.1",
"earth": "34.1",
"northNode": "10.3",
"southNode": "15.3",
"moon": "57.4",
"mercury": "48.2",
"venus": "18.5",
"mars": "28.1",
"jupiter": "32.6",
"saturn": "50.3",
"uranus": "44.2",
"neptune": "26.4",
"pluto": "54.1"
}
},
"birthDateUtc": "1990-01-15T13:30:00.000Z"
},
"svgRenderUrl": "https://render.appdebock.nl/default.svg?t=eyJ..."
}{
"timestamp": "2026-03-24T12:00:01.000Z",
"success": false,
"message": "HD-Geocode-Key header is required",
"errorCode": "GEOCODE_KEY_MISSING",
"type": "",
"data": null
}{
"timestamp": "2026-03-24T12:00:01.000Z",
"success": false,
"message": "No Authorization header provided",
"errorCode": "API_KEY_MISSING",
"type": "",
"data": null
}{
"timestamp": "2026-03-24T12:00:01.000Z",
"success": false,
"message": "No credits remaining. Enable overage or upgrade your plan.",
"errorCode": "CREDITS_EXHAUSTED",
"type": "",
"data": null
}{
"timestamp": "2026-03-24T12:00:01.000Z",
"success": false,
"message": "Advanced access tier required",
"errorCode": "ACCESS_DENIED",
"type": "",
"data": null
}{
"timestamp": "2026-03-24T12:00:01.000Z",
"success": false,
"message": "Too many requests. Please try again later.",
"errorCode": "RATE_LIMIT_EXCEEDED",
"type": "",
"data": null
}{
"timestamp": "2026-03-24T12:00:01.000Z",
"success": false,
"message": "An unexpected error occurred",
"errorCode": "INTERNAL_ERROR",
"type": "",
"data": null
}Authorizations
API key used as Bearer token in the Authorization header
Google Geocoding API key
Body
Date of birth in YYYY-MM-DD format
^\d{4}-\d{2}-\d{2}$"1990-01-15"
Time of birth in HH:MM format (24-hour)
^\d{2}:\d{2}$"14:30"
Location of birth (city, country)
4 - 200"Amsterdam, The Netherlands"
Response
Chart and render URL generated successfully
Standard API response envelope wrapping all responses
ISO 8601 timestamp of response generation
"2026-03-24T12:00:00.000Z"
Whether the request succeeded
true
Human-readable success or error message
"Chart generated"
Machine-readable error code (empty string on success)
""
Data type name of the object in the data field
"ChartResult"
Full Human Design chart with all properties
Show child attributes
Show child attributes
Bearer link to the rendered Visual Chart SVG. Carries a signed render token (HMAC-SHA256) encoding only center/gate activations — no birth data, no account id. Non-expiring; renders the caller's active template, or the default theme when none is set.
"https://render.appdebock.nl/default.svg?t=eyJ..."
curl --request POST \
--url https://api.humandesignapi.nl/v2/visual-charts \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'HD-Geocode-Key: <api-key>' \
--data '
{
"birthdate": "1990-01-15",
"birthtime": "14:30",
"location": "Amsterdam, The Netherlands"
}
'import requests
url = "https://api.humandesignapi.nl/v2/visual-charts"
payload = {
"birthdate": "1990-01-15",
"birthtime": "14:30",
"location": "Amsterdam, The Netherlands"
}
headers = {
"Authorization": "Bearer <token>",
"HD-Geocode-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
Authorization: 'Bearer <token>',
'HD-Geocode-Key': '<api-key>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
birthdate: '1990-01-15',
birthtime: '14:30',
location: 'Amsterdam, The Netherlands'
})
};
fetch('https://api.humandesignapi.nl/v2/visual-charts', 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.humandesignapi.nl/v2/visual-charts",
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([
'birthdate' => '1990-01-15',
'birthtime' => '14:30',
'location' => 'Amsterdam, The Netherlands'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json",
"HD-Geocode-Key: <api-key>"
],
]);
$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.humandesignapi.nl/v2/visual-charts"
payload := strings.NewReader("{\n \"birthdate\": \"1990-01-15\",\n \"birthtime\": \"14:30\",\n \"location\": \"Amsterdam, The Netherlands\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("HD-Geocode-Key", "<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.humandesignapi.nl/v2/visual-charts")
.header("Authorization", "Bearer <token>")
.header("HD-Geocode-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"birthdate\": \"1990-01-15\",\n \"birthtime\": \"14:30\",\n \"location\": \"Amsterdam, The Netherlands\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.humandesignapi.nl/v2/visual-charts")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["HD-Geocode-Key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"birthdate\": \"1990-01-15\",\n \"birthtime\": \"14:30\",\n \"location\": \"Amsterdam, The Netherlands\"\n}"
response = http.request(request)
puts response.read_body{
"timestamp": "2026-03-24T12:00:00.000Z",
"success": true,
"message": "Chart generated",
"errorCode": "",
"type": "ChartResult",
"data": {
"type": "Generator",
"profile": "6/2",
"channelsShort": [
"20-34",
"10-57"
],
"centers": [
"G",
"Sacral",
"Spleen",
"Throat"
],
"strategy": "To Respond",
"authority": "Sacral",
"incarnationCross": "Right Angle Cross of Tension (39/38 | 51/57)",
"definition": "Split Definition",
"signature": "Satisfaction",
"notSelfTheme": "Frustration",
"cognition": "Smell",
"determination": "Calm Appetite",
"variables": "PLL DRL",
"motivation": "Hope",
"transference": "Guilt",
"perspective": "Survival",
"distraction": "Power",
"environment": "Selective Caves",
"circuitries": "Individual, Tribal",
"channelsLong": [
"The Channel of Charisma (20-34)",
"The Channel of the Brainwave (57-10)"
],
"gates": [
"20",
"34",
"10",
"57"
],
"activations": {
"design": {
"sun": "20.1",
"earth": "34.1",
"northNode": "10.3",
"southNode": "15.3",
"moon": "57.4",
"mercury": "48.2",
"venus": "18.5",
"mars": "28.1",
"jupiter": "32.6",
"saturn": "50.3",
"uranus": "44.2",
"neptune": "26.4",
"pluto": "54.1"
},
"personality": {
"sun": "20.1",
"earth": "34.1",
"northNode": "10.3",
"southNode": "15.3",
"moon": "57.4",
"mercury": "48.2",
"venus": "18.5",
"mars": "28.1",
"jupiter": "32.6",
"saturn": "50.3",
"uranus": "44.2",
"neptune": "26.4",
"pluto": "54.1"
}
},
"birthDateUtc": "1990-01-15T13:30:00.000Z"
},
"svgRenderUrl": "https://render.appdebock.nl/default.svg?t=eyJ..."
}{
"timestamp": "2026-03-24T12:00:01.000Z",
"success": false,
"message": "HD-Geocode-Key header is required",
"errorCode": "GEOCODE_KEY_MISSING",
"type": "",
"data": null
}{
"timestamp": "2026-03-24T12:00:01.000Z",
"success": false,
"message": "No Authorization header provided",
"errorCode": "API_KEY_MISSING",
"type": "",
"data": null
}{
"timestamp": "2026-03-24T12:00:01.000Z",
"success": false,
"message": "No credits remaining. Enable overage or upgrade your plan.",
"errorCode": "CREDITS_EXHAUSTED",
"type": "",
"data": null
}{
"timestamp": "2026-03-24T12:00:01.000Z",
"success": false,
"message": "Advanced access tier required",
"errorCode": "ACCESS_DENIED",
"type": "",
"data": null
}{
"timestamp": "2026-03-24T12:00:01.000Z",
"success": false,
"message": "Too many requests. Please try again later.",
"errorCode": "RATE_LIMIT_EXCEEDED",
"type": "",
"data": null
}{
"timestamp": "2026-03-24T12:00:01.000Z",
"success": false,
"message": "An unexpected error occurred",
"errorCode": "INTERNAL_ERROR",
"type": "",
"data": null
}
