API reference
Palm reading
AI readings of a palm photo: hand type, lines, mounts, and life themes. Photos are not stored.
- 18 endpoints
- POST JSON body
- Bearer key
18 endpoints. Every endpoint is POST with a JSON body and your key in the Authorization header. Request schemas and examples come from the OpenAPI document; each example response was captured from the live engine, and each endpoint says where its data fields come from: a hand-written contract, a schema measured from several real answers, or the one example.
Palm: Lines Traced
POSTAvailable
https://api.96astroapi.com/v1/palmistry/palm-lines-imageThe life, head, heart and fate lines traced on a photo of the palm, with confidence for each, and an SVG overlay to lay over your copy. The photo is not stored or sent back.
- Credits
- Metered, from 15 credits
- Input
- A photo
- Output
- JSON
- Delivery
- Direct response
- Languages
- 26 languages; translated term names with
labels
| Header | Value and description |
|---|---|
AuthorizationRequired | Bearer YOUR_API_KEYYour sandbox (sk_test_...) or live (sk_live_...) key. X-API-Key: <key> is accepted instead. |
Content-TypeRequired | application/jsonThe body is JSON. |
Idempotency-KeyOptional | <unique string>Makes retries safe: a repeated key with the same body replays the stored response and is never charged twice. (1 to 200 characters) |
| Field | Description |
|---|---|
image_base64stringRequired | The floor-plan image file, base64-encoded (a `data:image/...;base64,` prefix is accepted). PNG, JPEG or WebP; at most 3.75 MiB decoded and 8000 px a side. Limits: 1 to 5400000 characters Example: |
mime_typestring | nullOptional | The image's type. Required unless image_base64 is a data: URI; must match the file. Default: Allowed values: image/pngimage/jpegimage/webp Example: |
tierstringOptional | fast (Claude Haiku) or balanced (Sonnet). Sets the price range. Default: Allowed values: fastbalanced Example: |
consentbooleanRequired | Must be true: the person in the photo agreed to this reading, and is an adult or has a guardian's agreement. Allowed value: true Example: |
languagestringOptional | Output language (ISO 639-1). The values listed are the ones this capability supports; any other is refused with 422 unsupported_language. Identifiers, enum values and numbers never change with language. Default: Allowed values: enasbndeesfrguhiitjaknkomlmrnenlorpaplptrusitatetrur |
labelsstringOptional | Optional. Adds `meta.labels`: translated display names for the identifiers in the answer. `data` is unchanged. Free. Any other code is refused with 422 unsupported_language. Allowed values: asbndeesfrguhiitknkomlmrnenlorpaplptrusitatetrur |
Response · fields in data
The response contract: required fields are always present.
lines· array of objectoverlay_svg· stringcoordinate_space· objectnotice· stringtier· string
Example request
curl -X POST https://api.96astroapi.com/v1/palmistry/palm-lines-image \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"image_base64": "iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAAAAABQyaazAAAAgklEQVR42u3bQQoAIAgEQP//6fpCBsFWs2fBEbyJNcJTgICAgIDXACspgIeAp/aouvWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgGsN0+/F4cCNgQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE7QA/QbwMzAwgICPg7cAJxuHlDZty0owAAAABJRU5ErkJggg==",
"mime_type": "image/png",
"consent": true,
"tier": "fast"
}'const response = await fetch("https://api.96astroapi.com/v1/palmistry/palm-lines-image", {
method: "POST",
headers: {
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({
"image_base64": "iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAAAAABQyaazAAAAgklEQVR42u3bQQoAIAgEQP//6fpCBsFWs2fBEbyJNcJTgICAgIDXACspgIeAp/aouvWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgGsN0+/F4cCNgQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE7QA/QbwMzAwgICPg7cAJxuHlDZty0owAAAABJRU5ErkJggg==",
"mime_type": "image/png",
"consent": true,
"tier": "fast"
}),
});
const { data, meta } = await response.json();
console.log(data);import { Astro96Client } from "@96astro/api";
const astro = new Astro96Client({ apiKey: "YOUR_API_KEY" });
const { data, meta } = await astro.palmistry.palmLinesImage({
"image_base64": "iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAAAAABQyaazAAAAgklEQVR42u3bQQoAIAgEQP//6fpCBsFWs2fBEbyJNcJTgICAgIDXACspgIeAp/aouvWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgGsN0+/F4cCNgQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE7QA/QbwMzAwgICPg7cAJxuHlDZty0owAAAABJRU5ErkJggg==",
"mime_type": "image/png",
"consent": true,
"tier": "fast"
});
console.log(data);import requests
response = requests.post(
"https://api.96astroapi.com/v1/palmistry/palm-lines-image",
headers={
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
json={
"image_base64": "iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAAAAABQyaazAAAAgklEQVR42u3bQQoAIAgEQP//6fpCBsFWs2fBEbyJNcJTgICAgIDXACspgIeAp/aouvWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgGsN0+/F4cCNgQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE7QA/QbwMzAwgICPg7cAJxuHlDZty0owAAAABJRU5ErkJggg==",
"mime_type": "image/png",
"consent": True,
"tier": "fast",
},
timeout=60,
)
response.raise_for_status()
data = response.json()["data"]
print(data)from astro96_api import Astro96Client
astro = Astro96Client(api_key="YOUR_API_KEY")
res = astro.palmistry.palm_lines_image({
"image_base64": "iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAAAAABQyaazAAAAgklEQVR42u3bQQoAIAgEQP//6fpCBsFWs2fBEbyJNcJTgICAgIDXACspgIeAp/aouvWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgGsN0+/F4cCNgQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE7QA/QbwMzAwgICPg7cAJxuHlDZty0owAAAABJRU5ErkJggg==",
"mime_type": "image/png",
"consent": True,
"tier": "fast",
})
print(res.data)<?php
$ch = curl_init('https://api.96astroapi.com/v1/palmistry/palm-lines-image');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer YOUR_API_KEY',
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => json_encode([
'image_base64' => 'iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAAAAABQyaazAAAAgklEQVR42u3bQQoAIAgEQP//6fpCBsFWs2fBEbyJNcJTgICAgIDXACspgIeAp/aouvWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgGsN0+/F4cCNgQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE7QA/QbwMzAwgICPg7cAJxuHlDZty0owAAAABJRU5ErkJggg==',
'mime_type' => 'image/png',
'consent' => true,
'tier' => 'fast',
]),
]);
$response = curl_exec($ch);
curl_close($ch);
$result = json_decode($response, true);
print_r($result['data']);package main
import (
"fmt"
"io"
"net/http"
"strings"
)
func main() {
body := strings.NewReader(`{
"image_base64": "iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAAAAABQyaazAAAAgklEQVR42u3bQQoAIAgEQP//6fpCBsFWs2fBEbyJNcJTgICAgIDXACspgIeAp/aouvWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgGsN0+/F4cCNgQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE7QA/QbwMzAwgICPg7cAJxuHlDZty0owAAAABJRU5ErkJggg==",
"mime_type": "image/png",
"consent": true,
"tier": "fast"
}`)
req, err := http.NewRequest("POST", "https://api.96astroapi.com/v1/palmistry/palm-lines-image", body)
if err != nil {
panic(err)
}
req.Header.Set("Authorization", "Bearer YOUR_API_KEY")
req.Header.Set("Content-Type", "application/json")
res, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer res.Body.Close()
out, _ := io.ReadAll(res.Body)
fmt.Println(res.Status, string(out))
}Example response (illustrative)
{
"data": {
"lines": [
{
"name": "life",
"points": [
[
420,
380
],
[
360,
520
],
[
380,
700
],
[
470,
…Written by hand from the documented shape: AI readings are not captured automatically. Real text, token counts and credits differ.
Error responses
- 400invalid_request
- 401invalid_key, expired_key
- 402payment_required
- 403account_suspended, plan_upgrade_required, plan_family_not_included, key_scope_denied, ip_not_allowed, origin_not_allowed, publishable_key_not_allowed
- 404not_found
- 409idempotency_conflict
- 413payload_too_large
- 422invalid_request, unsupported_language
- 429rate_limited, quota_exhausted, spend_cap_reached, project_budget_exceeded
- 500computation_failed
- 502unavailable
- 503unavailable, maintenance, temporarily_unavailable
- 504deadline_exceeded
Errors are never charged. What each status means and what to do: errors.
Whole Palm Reading
POSTAvailable
https://api.96astroapi.com/v1/palmistry/palm-readingEvery section of a palm reading from one photo, for the price of one call: hand type, fingers, lines, mounts and life themes.
- Credits
- Metered, from 15 credits
- Input
- A photo
- Output
- JSON
- Delivery
- Direct response
- Languages
- 26 languages; translated term names with
labels
| Header | Value and description |
|---|---|
AuthorizationRequired | Bearer YOUR_API_KEYYour sandbox (sk_test_...) or live (sk_live_...) key. X-API-Key: <key> is accepted instead. |
Content-TypeRequired | application/jsonThe body is JSON. |
Idempotency-KeyOptional | <unique string>Makes retries safe: a repeated key with the same body replays the stored response and is never charged twice. (1 to 200 characters) |
| Field | Description |
|---|---|
image_base64stringRequired | The floor-plan image file, base64-encoded (a `data:image/...;base64,` prefix is accepted). PNG, JPEG or WebP; at most 3.75 MiB decoded and 8000 px a side. Limits: 1 to 5400000 characters Example: |
mime_typestring | nullOptional | The image's type. Required unless image_base64 is a data: URI; must match the file. Default: Allowed values: image/pngimage/jpegimage/webp Example: |
tierstringOptional | fast (Claude Haiku) or balanced (Sonnet). Sets the price range. Default: Allowed values: fastbalanced Example: |
consentbooleanRequired | Must be true: the person in the photo agreed to this reading, and is an adult or has a guardian's agreement. Allowed value: true Example: |
languagestringOptional | Output language (ISO 639-1). The values listed are the ones this capability supports; any other is refused with 422 unsupported_language. Identifiers, enum values and numbers never change with language. Default: Allowed values: enasbndeesfrguhiitjaknkomlmrnenlorpaplptrusitatetrur |
labelsstringOptional | Optional. Adds `meta.labels`: translated display names for the identifiers in the answer. `data` is unchanged. Free. Any other code is refused with 422 unsupported_language. Allowed values: asbndeesfrguhiitknkomlmrnenlorpaplptrusitatetrur |
Response · fields in data
The response contract: required fields are always present.
sections· objectnotice· stringtier· stringlanguage· string
Example request
curl -X POST https://api.96astroapi.com/v1/palmistry/palm-reading \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"image_base64": "iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAAAAABQyaazAAAAgklEQVR42u3bQQoAIAgEQP//6fpCBsFWs2fBEbyJNcJTgICAgIDXACspgIeAp/aouvWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgGsN0+/F4cCNgQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE7QA/QbwMzAwgICPg7cAJxuHlDZty0owAAAABJRU5ErkJggg==",
"mime_type": "image/png",
"consent": true,
"tier": "fast"
}'const response = await fetch("https://api.96astroapi.com/v1/palmistry/palm-reading", {
method: "POST",
headers: {
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({
"image_base64": "iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAAAAABQyaazAAAAgklEQVR42u3bQQoAIAgEQP//6fpCBsFWs2fBEbyJNcJTgICAgIDXACspgIeAp/aouvWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgGsN0+/F4cCNgQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE7QA/QbwMzAwgICPg7cAJxuHlDZty0owAAAABJRU5ErkJggg==",
"mime_type": "image/png",
"consent": true,
"tier": "fast"
}),
});
const { data, meta } = await response.json();
console.log(data);import { Astro96Client } from "@96astro/api";
const astro = new Astro96Client({ apiKey: "YOUR_API_KEY" });
const { data, meta } = await astro.palmistry.palmReading({
"image_base64": "iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAAAAABQyaazAAAAgklEQVR42u3bQQoAIAgEQP//6fpCBsFWs2fBEbyJNcJTgICAgIDXACspgIeAp/aouvWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgGsN0+/F4cCNgQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE7QA/QbwMzAwgICPg7cAJxuHlDZty0owAAAABJRU5ErkJggg==",
"mime_type": "image/png",
"consent": true,
"tier": "fast"
});
console.log(data);import requests
response = requests.post(
"https://api.96astroapi.com/v1/palmistry/palm-reading",
headers={
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
json={
"image_base64": "iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAAAAABQyaazAAAAgklEQVR42u3bQQoAIAgEQP//6fpCBsFWs2fBEbyJNcJTgICAgIDXACspgIeAp/aouvWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgGsN0+/F4cCNgQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE7QA/QbwMzAwgICPg7cAJxuHlDZty0owAAAABJRU5ErkJggg==",
"mime_type": "image/png",
"consent": True,
"tier": "fast",
},
timeout=60,
)
response.raise_for_status()
data = response.json()["data"]
print(data)from astro96_api import Astro96Client
astro = Astro96Client(api_key="YOUR_API_KEY")
res = astro.palmistry.palm_reading({
"image_base64": "iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAAAAABQyaazAAAAgklEQVR42u3bQQoAIAgEQP//6fpCBsFWs2fBEbyJNcJTgICAgIDXACspgIeAp/aouvWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgGsN0+/F4cCNgQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE7QA/QbwMzAwgICPg7cAJxuHlDZty0owAAAABJRU5ErkJggg==",
"mime_type": "image/png",
"consent": True,
"tier": "fast",
})
print(res.data)<?php
$ch = curl_init('https://api.96astroapi.com/v1/palmistry/palm-reading');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer YOUR_API_KEY',
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => json_encode([
'image_base64' => 'iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAAAAABQyaazAAAAgklEQVR42u3bQQoAIAgEQP//6fpCBsFWs2fBEbyJNcJTgICAgIDXACspgIeAp/aouvWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgGsN0+/F4cCNgQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE7QA/QbwMzAwgICPg7cAJxuHlDZty0owAAAABJRU5ErkJggg==',
'mime_type' => 'image/png',
'consent' => true,
'tier' => 'fast',
]),
]);
$response = curl_exec($ch);
curl_close($ch);
$result = json_decode($response, true);
print_r($result['data']);package main
import (
"fmt"
"io"
"net/http"
"strings"
)
func main() {
body := strings.NewReader(`{
"image_base64": "iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAAAAABQyaazAAAAgklEQVR42u3bQQoAIAgEQP//6fpCBsFWs2fBEbyJNcJTgICAgIDXACspgIeAp/aouvWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgGsN0+/F4cCNgQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE7QA/QbwMzAwgICPg7cAJxuHlDZty0owAAAABJRU5ErkJggg==",
"mime_type": "image/png",
"consent": true,
"tier": "fast"
}`)
req, err := http.NewRequest("POST", "https://api.96astroapi.com/v1/palmistry/palm-reading", body)
if err != nil {
panic(err)
}
req.Header.Set("Authorization", "Bearer YOUR_API_KEY")
req.Header.Set("Content-Type", "application/json")
res, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer res.Body.Close()
out, _ := io.ReadAll(res.Body)
fmt.Println(res.Status, string(out))
}Example response (illustrative)
{
"data": {
"sections": {
"personality": {
"observed": [
"An example observation about personality."
],
"reading": "An example reading of personality, based on what the photo shows.",
"advice": "One practical sentence."
},
"career": {
"observed": [
"An example observation about career."
],
"reading": "An example reading of career, based on what the photo shows.",
"advice": "One practical sentence."
},
"love": {
"observed": [
"An example observation about love."
…Written by hand from the documented shape: AI readings are not captured automatically. Real text, token counts and credits differ.
Error responses
- 400invalid_request
- 401invalid_key, expired_key
- 402payment_required
- 403account_suspended, plan_upgrade_required, plan_family_not_included, key_scope_denied, ip_not_allowed, origin_not_allowed, publishable_key_not_allowed
- 404not_found
- 409idempotency_conflict
- 413payload_too_large
- 422invalid_request, unsupported_language
- 429rate_limited, quota_exhausted, spend_cap_reached, project_budget_exceeded
- 500computation_failed
- 502unavailable
- 503unavailable, maintenance, temporarily_unavailable
- 504deadline_exceeded
Errors are never charged. What each status means and what to do: errors.
Palm: Hand Type
POSTAvailable
https://api.96astroapi.com/v1/palmistry/palm-hand-typeThe hand's shape by the elements. Read from one photo of the palm by a vision model; the photo is not stored.
- Credits
- Metered, from 15 credits
- Input
- A photo
- Output
- JSON
- Delivery
- Direct response
- Languages
- 26 languages; translated term names with
labels
| Header | Value and description |
|---|---|
AuthorizationRequired | Bearer YOUR_API_KEYYour sandbox (sk_test_...) or live (sk_live_...) key. X-API-Key: <key> is accepted instead. |
Content-TypeRequired | application/jsonThe body is JSON. |
Idempotency-KeyOptional | <unique string>Makes retries safe: a repeated key with the same body replays the stored response and is never charged twice. (1 to 200 characters) |
| Field | Description |
|---|---|
image_base64stringRequired | The floor-plan image file, base64-encoded (a `data:image/...;base64,` prefix is accepted). PNG, JPEG or WebP; at most 3.75 MiB decoded and 8000 px a side. Limits: 1 to 5400000 characters Example: |
mime_typestring | nullOptional | The image's type. Required unless image_base64 is a data: URI; must match the file. Default: Allowed values: image/pngimage/jpegimage/webp Example: |
tierstringOptional | fast (Claude Haiku) or balanced (Sonnet). Sets the price range. Default: Allowed values: fastbalanced Example: |
consentbooleanRequired | Must be true: the person in the photo agreed to this reading, and is an adult or has a guardian's agreement. Allowed value: true Example: |
languagestringOptional | Output language (ISO 639-1). The values listed are the ones this capability supports; any other is refused with 422 unsupported_language. Identifiers, enum values and numbers never change with language. Default: Allowed values: enasbndeesfrguhiitjaknkomlmrnenlorpaplptrusitatetrur |
labelsstringOptional | Optional. Adds `meta.labels`: translated display names for the identifiers in the answer. `data` is unchanged. Free. Any other code is refused with 422 unsupported_language. Allowed values: asbndeesfrguhiitknkomlmrnenlorpaplptrusitatetrur |
Response · fields in data
The response contract: required fields are always present.
sections· objectnotice· stringtier· stringlanguage· string
Example request
curl -X POST https://api.96astroapi.com/v1/palmistry/palm-hand-type \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"image_base64": "iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAAAAABQyaazAAAAgklEQVR42u3bQQoAIAgEQP//6fpCBsFWs2fBEbyJNcJTgICAgIDXACspgIeAp/aouvWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgGsN0+/F4cCNgQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE7QA/QbwMzAwgICPg7cAJxuHlDZty0owAAAABJRU5ErkJggg==",
"mime_type": "image/png",
"consent": true,
"tier": "fast"
}'const response = await fetch("https://api.96astroapi.com/v1/palmistry/palm-hand-type", {
method: "POST",
headers: {
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({
"image_base64": "iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAAAAABQyaazAAAAgklEQVR42u3bQQoAIAgEQP//6fpCBsFWs2fBEbyJNcJTgICAgIDXACspgIeAp/aouvWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgGsN0+/F4cCNgQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE7QA/QbwMzAwgICPg7cAJxuHlDZty0owAAAABJRU5ErkJggg==",
"mime_type": "image/png",
"consent": true,
"tier": "fast"
}),
});
const { data, meta } = await response.json();
console.log(data);import { Astro96Client } from "@96astro/api";
const astro = new Astro96Client({ apiKey: "YOUR_API_KEY" });
const { data, meta } = await astro.palmistry.palmHandType({
"image_base64": "iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAAAAABQyaazAAAAgklEQVR42u3bQQoAIAgEQP//6fpCBsFWs2fBEbyJNcJTgICAgIDXACspgIeAp/aouvWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgGsN0+/F4cCNgQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE7QA/QbwMzAwgICPg7cAJxuHlDZty0owAAAABJRU5ErkJggg==",
"mime_type": "image/png",
"consent": true,
"tier": "fast"
});
console.log(data);import requests
response = requests.post(
"https://api.96astroapi.com/v1/palmistry/palm-hand-type",
headers={
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
json={
"image_base64": "iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAAAAABQyaazAAAAgklEQVR42u3bQQoAIAgEQP//6fpCBsFWs2fBEbyJNcJTgICAgIDXACspgIeAp/aouvWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgGsN0+/F4cCNgQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE7QA/QbwMzAwgICPg7cAJxuHlDZty0owAAAABJRU5ErkJggg==",
"mime_type": "image/png",
"consent": True,
"tier": "fast",
},
timeout=60,
)
response.raise_for_status()
data = response.json()["data"]
print(data)from astro96_api import Astro96Client
astro = Astro96Client(api_key="YOUR_API_KEY")
res = astro.palmistry.palm_hand_type({
"image_base64": "iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAAAAABQyaazAAAAgklEQVR42u3bQQoAIAgEQP//6fpCBsFWs2fBEbyJNcJTgICAgIDXACspgIeAp/aouvWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgGsN0+/F4cCNgQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE7QA/QbwMzAwgICPg7cAJxuHlDZty0owAAAABJRU5ErkJggg==",
"mime_type": "image/png",
"consent": True,
"tier": "fast",
})
print(res.data)<?php
$ch = curl_init('https://api.96astroapi.com/v1/palmistry/palm-hand-type');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer YOUR_API_KEY',
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => json_encode([
'image_base64' => 'iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAAAAABQyaazAAAAgklEQVR42u3bQQoAIAgEQP//6fpCBsFWs2fBEbyJNcJTgICAgIDXACspgIeAp/aouvWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgGsN0+/F4cCNgQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE7QA/QbwMzAwgICPg7cAJxuHlDZty0owAAAABJRU5ErkJggg==',
'mime_type' => 'image/png',
'consent' => true,
'tier' => 'fast',
]),
]);
$response = curl_exec($ch);
curl_close($ch);
$result = json_decode($response, true);
print_r($result['data']);package main
import (
"fmt"
"io"
"net/http"
"strings"
)
func main() {
body := strings.NewReader(`{
"image_base64": "iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAAAAABQyaazAAAAgklEQVR42u3bQQoAIAgEQP//6fpCBsFWs2fBEbyJNcJTgICAgIDXACspgIeAp/aouvWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgGsN0+/F4cCNgQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE7QA/QbwMzAwgICPg7cAJxuHlDZty0owAAAABJRU5ErkJggg==",
"mime_type": "image/png",
"consent": true,
"tier": "fast"
}`)
req, err := http.NewRequest("POST", "https://api.96astroapi.com/v1/palmistry/palm-hand-type", body)
if err != nil {
panic(err)
}
req.Header.Set("Authorization", "Bearer YOUR_API_KEY")
req.Header.Set("Content-Type", "application/json")
res, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer res.Body.Close()
out, _ := io.ReadAll(res.Body)
fmt.Println(res.Status, string(out))
}Example response (illustrative)
{
"data": {
"sections": {
"hand_type": {
"observed": [
"An example observation about hand type."
],
"reading": "An example reading of hand type, based on what the photo shows.",
"advice": "One practical sentence."
}
},
"notice": "For reflection, not fact. This reading is not medical, legal or financial advice.",
"tier": "fast",
"language": "en"
},
"meta": {
"request_id": "req_00000000000000000000",
"api_version": "v1",
"credits_used": 0,
"warnings": [],
…Written by hand from the documented shape: AI readings are not captured automatically. Real text, token counts and credits differ.
Error responses
- 400invalid_request
- 401invalid_key, expired_key
- 402payment_required
- 403account_suspended, plan_upgrade_required, plan_family_not_included, key_scope_denied, ip_not_allowed, origin_not_allowed, publishable_key_not_allowed
- 404not_found
- 409idempotency_conflict
- 413payload_too_large
- 422invalid_request, unsupported_language
- 429rate_limited, quota_exhausted, spend_cap_reached, project_budget_exceeded
- 500computation_failed
- 502unavailable
- 503unavailable, maintenance, temporarily_unavailable
- 504deadline_exceeded
Errors are never charged. What each status means and what to do: errors.
Palm: Fingers
POSTAvailable
https://api.96astroapi.com/v1/palmistry/palm-fingersEach finger and the thumb. Read from one photo of the palm by a vision model; the photo is not stored.
- Credits
- Metered, from 15 credits
- Input
- A photo
- Output
- JSON
- Delivery
- Direct response
- Languages
- 26 languages; translated term names with
labels
| Header | Value and description |
|---|---|
AuthorizationRequired | Bearer YOUR_API_KEYYour sandbox (sk_test_...) or live (sk_live_...) key. X-API-Key: <key> is accepted instead. |
Content-TypeRequired | application/jsonThe body is JSON. |
Idempotency-KeyOptional | <unique string>Makes retries safe: a repeated key with the same body replays the stored response and is never charged twice. (1 to 200 characters) |
| Field | Description |
|---|---|
image_base64stringRequired | The floor-plan image file, base64-encoded (a `data:image/...;base64,` prefix is accepted). PNG, JPEG or WebP; at most 3.75 MiB decoded and 8000 px a side. Limits: 1 to 5400000 characters Example: |
mime_typestring | nullOptional | The image's type. Required unless image_base64 is a data: URI; must match the file. Default: Allowed values: image/pngimage/jpegimage/webp Example: |
tierstringOptional | fast (Claude Haiku) or balanced (Sonnet). Sets the price range. Default: Allowed values: fastbalanced Example: |
consentbooleanRequired | Must be true: the person in the photo agreed to this reading, and is an adult or has a guardian's agreement. Allowed value: true Example: |
languagestringOptional | Output language (ISO 639-1). The values listed are the ones this capability supports; any other is refused with 422 unsupported_language. Identifiers, enum values and numbers never change with language. Default: Allowed values: enasbndeesfrguhiitjaknkomlmrnenlorpaplptrusitatetrur |
labelsstringOptional | Optional. Adds `meta.labels`: translated display names for the identifiers in the answer. `data` is unchanged. Free. Any other code is refused with 422 unsupported_language. Allowed values: asbndeesfrguhiitknkomlmrnenlorpaplptrusitatetrur |
Response · fields in data
The response contract: required fields are always present.
sections· objectnotice· stringtier· stringlanguage· string
Example request
curl -X POST https://api.96astroapi.com/v1/palmistry/palm-fingers \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"image_base64": "iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAAAAABQyaazAAAAgklEQVR42u3bQQoAIAgEQP//6fpCBsFWs2fBEbyJNcJTgICAgIDXACspgIeAp/aouvWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgGsN0+/F4cCNgQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE7QA/QbwMzAwgICPg7cAJxuHlDZty0owAAAABJRU5ErkJggg==",
"mime_type": "image/png",
"consent": true,
"tier": "fast"
}'const response = await fetch("https://api.96astroapi.com/v1/palmistry/palm-fingers", {
method: "POST",
headers: {
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({
"image_base64": "iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAAAAABQyaazAAAAgklEQVR42u3bQQoAIAgEQP//6fpCBsFWs2fBEbyJNcJTgICAgIDXACspgIeAp/aouvWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgGsN0+/F4cCNgQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE7QA/QbwMzAwgICPg7cAJxuHlDZty0owAAAABJRU5ErkJggg==",
"mime_type": "image/png",
"consent": true,
"tier": "fast"
}),
});
const { data, meta } = await response.json();
console.log(data);import { Astro96Client } from "@96astro/api";
const astro = new Astro96Client({ apiKey: "YOUR_API_KEY" });
const { data, meta } = await astro.palmistry.palmFingers({
"image_base64": "iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAAAAABQyaazAAAAgklEQVR42u3bQQoAIAgEQP//6fpCBsFWs2fBEbyJNcJTgICAgIDXACspgIeAp/aouvWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgGsN0+/F4cCNgQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE7QA/QbwMzAwgICPg7cAJxuHlDZty0owAAAABJRU5ErkJggg==",
"mime_type": "image/png",
"consent": true,
"tier": "fast"
});
console.log(data);import requests
response = requests.post(
"https://api.96astroapi.com/v1/palmistry/palm-fingers",
headers={
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
json={
"image_base64": "iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAAAAABQyaazAAAAgklEQVR42u3bQQoAIAgEQP//6fpCBsFWs2fBEbyJNcJTgICAgIDXACspgIeAp/aouvWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgGsN0+/F4cCNgQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE7QA/QbwMzAwgICPg7cAJxuHlDZty0owAAAABJRU5ErkJggg==",
"mime_type": "image/png",
"consent": True,
"tier": "fast",
},
timeout=60,
)
response.raise_for_status()
data = response.json()["data"]
print(data)from astro96_api import Astro96Client
astro = Astro96Client(api_key="YOUR_API_KEY")
res = astro.palmistry.palm_fingers({
"image_base64": "iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAAAAABQyaazAAAAgklEQVR42u3bQQoAIAgEQP//6fpCBsFWs2fBEbyJNcJTgICAgIDXACspgIeAp/aouvWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgGsN0+/F4cCNgQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE7QA/QbwMzAwgICPg7cAJxuHlDZty0owAAAABJRU5ErkJggg==",
"mime_type": "image/png",
"consent": True,
"tier": "fast",
})
print(res.data)<?php
$ch = curl_init('https://api.96astroapi.com/v1/palmistry/palm-fingers');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer YOUR_API_KEY',
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => json_encode([
'image_base64' => 'iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAAAAABQyaazAAAAgklEQVR42u3bQQoAIAgEQP//6fpCBsFWs2fBEbyJNcJTgICAgIDXACspgIeAp/aouvWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgGsN0+/F4cCNgQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE7QA/QbwMzAwgICPg7cAJxuHlDZty0owAAAABJRU5ErkJggg==',
'mime_type' => 'image/png',
'consent' => true,
'tier' => 'fast',
]),
]);
$response = curl_exec($ch);
curl_close($ch);
$result = json_decode($response, true);
print_r($result['data']);package main
import (
"fmt"
"io"
"net/http"
"strings"
)
func main() {
body := strings.NewReader(`{
"image_base64": "iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAAAAABQyaazAAAAgklEQVR42u3bQQoAIAgEQP//6fpCBsFWs2fBEbyJNcJTgICAgIDXACspgIeAp/aouvWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgGsN0+/F4cCNgQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE7QA/QbwMzAwgICPg7cAJxuHlDZty0owAAAABJRU5ErkJggg==",
"mime_type": "image/png",
"consent": true,
"tier": "fast"
}`)
req, err := http.NewRequest("POST", "https://api.96astroapi.com/v1/palmistry/palm-fingers", body)
if err != nil {
panic(err)
}
req.Header.Set("Authorization", "Bearer YOUR_API_KEY")
req.Header.Set("Content-Type", "application/json")
res, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer res.Body.Close()
out, _ := io.ReadAll(res.Body)
fmt.Println(res.Status, string(out))
}Example response (illustrative)
{
"data": {
"sections": {
"fingers": {
"observed": [
"An example observation about fingers."
],
"reading": "An example reading of fingers, based on what the photo shows.",
"advice": "One practical sentence."
}
},
"notice": "For reflection, not fact. This reading is not medical, legal or financial advice.",
"tier": "fast",
"language": "en"
},
"meta": {
"request_id": "req_00000000000000000000",
"api_version": "v1",
"credits_used": 0,
"warnings": [],
…Written by hand from the documented shape: AI readings are not captured automatically. Real text, token counts and credits differ.
Error responses
- 400invalid_request
- 401invalid_key, expired_key
- 402payment_required
- 403account_suspended, plan_upgrade_required, plan_family_not_included, key_scope_denied, ip_not_allowed, origin_not_allowed, publishable_key_not_allowed
- 404not_found
- 409idempotency_conflict
- 413payload_too_large
- 422invalid_request, unsupported_language
- 429rate_limited, quota_exhausted, spend_cap_reached, project_budget_exceeded
- 500computation_failed
- 502unavailable
- 503unavailable, maintenance, temporarily_unavailable
- 504deadline_exceeded
Errors are never charged. What each status means and what to do: errors.
Palm: Major Lines
POSTAvailable
https://api.96astroapi.com/v1/palmistry/palm-major-linesThe life, head, heart and fate lines. Read from one photo of the palm by a vision model; the photo is not stored.
- Credits
- Metered, from 15 credits
- Input
- A photo
- Output
- JSON
- Delivery
- Direct response
- Languages
- 26 languages; translated term names with
labels
| Header | Value and description |
|---|---|
AuthorizationRequired | Bearer YOUR_API_KEYYour sandbox (sk_test_...) or live (sk_live_...) key. X-API-Key: <key> is accepted instead. |
Content-TypeRequired | application/jsonThe body is JSON. |
Idempotency-KeyOptional | <unique string>Makes retries safe: a repeated key with the same body replays the stored response and is never charged twice. (1 to 200 characters) |
| Field | Description |
|---|---|
image_base64stringRequired | The floor-plan image file, base64-encoded (a `data:image/...;base64,` prefix is accepted). PNG, JPEG or WebP; at most 3.75 MiB decoded and 8000 px a side. Limits: 1 to 5400000 characters Example: |
mime_typestring | nullOptional | The image's type. Required unless image_base64 is a data: URI; must match the file. Default: Allowed values: image/pngimage/jpegimage/webp Example: |
tierstringOptional | fast (Claude Haiku) or balanced (Sonnet). Sets the price range. Default: Allowed values: fastbalanced Example: |
consentbooleanRequired | Must be true: the person in the photo agreed to this reading, and is an adult or has a guardian's agreement. Allowed value: true Example: |
languagestringOptional | Output language (ISO 639-1). The values listed are the ones this capability supports; any other is refused with 422 unsupported_language. Identifiers, enum values and numbers never change with language. Default: Allowed values: enasbndeesfrguhiitjaknkomlmrnenlorpaplptrusitatetrur |
labelsstringOptional | Optional. Adds `meta.labels`: translated display names for the identifiers in the answer. `data` is unchanged. Free. Any other code is refused with 422 unsupported_language. Allowed values: asbndeesfrguhiitknkomlmrnenlorpaplptrusitatetrur |
Response · fields in data
The response contract: required fields are always present.
sections· objectnotice· stringtier· stringlanguage· string
Example request
curl -X POST https://api.96astroapi.com/v1/palmistry/palm-major-lines \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"image_base64": "iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAAAAABQyaazAAAAgklEQVR42u3bQQoAIAgEQP//6fpCBsFWs2fBEbyJNcJTgICAgIDXACspgIeAp/aouvWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgGsN0+/F4cCNgQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE7QA/QbwMzAwgICPg7cAJxuHlDZty0owAAAABJRU5ErkJggg==",
"mime_type": "image/png",
"consent": true,
"tier": "fast"
}'const response = await fetch("https://api.96astroapi.com/v1/palmistry/palm-major-lines", {
method: "POST",
headers: {
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({
"image_base64": "iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAAAAABQyaazAAAAgklEQVR42u3bQQoAIAgEQP//6fpCBsFWs2fBEbyJNcJTgICAgIDXACspgIeAp/aouvWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgGsN0+/F4cCNgQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE7QA/QbwMzAwgICPg7cAJxuHlDZty0owAAAABJRU5ErkJggg==",
"mime_type": "image/png",
"consent": true,
"tier": "fast"
}),
});
const { data, meta } = await response.json();
console.log(data);import { Astro96Client } from "@96astro/api";
const astro = new Astro96Client({ apiKey: "YOUR_API_KEY" });
const { data, meta } = await astro.palmistry.palmMajorLines({
"image_base64": "iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAAAAABQyaazAAAAgklEQVR42u3bQQoAIAgEQP//6fpCBsFWs2fBEbyJNcJTgICAgIDXACspgIeAp/aouvWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgGsN0+/F4cCNgQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE7QA/QbwMzAwgICPg7cAJxuHlDZty0owAAAABJRU5ErkJggg==",
"mime_type": "image/png",
"consent": true,
"tier": "fast"
});
console.log(data);import requests
response = requests.post(
"https://api.96astroapi.com/v1/palmistry/palm-major-lines",
headers={
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
json={
"image_base64": "iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAAAAABQyaazAAAAgklEQVR42u3bQQoAIAgEQP//6fpCBsFWs2fBEbyJNcJTgICAgIDXACspgIeAp/aouvWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgGsN0+/F4cCNgQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE7QA/QbwMzAwgICPg7cAJxuHlDZty0owAAAABJRU5ErkJggg==",
"mime_type": "image/png",
"consent": True,
"tier": "fast",
},
timeout=60,
)
response.raise_for_status()
data = response.json()["data"]
print(data)from astro96_api import Astro96Client
astro = Astro96Client(api_key="YOUR_API_KEY")
res = astro.palmistry.palm_major_lines({
"image_base64": "iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAAAAABQyaazAAAAgklEQVR42u3bQQoAIAgEQP//6fpCBsFWs2fBEbyJNcJTgICAgIDXACspgIeAp/aouvWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgGsN0+/F4cCNgQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE7QA/QbwMzAwgICPg7cAJxuHlDZty0owAAAABJRU5ErkJggg==",
"mime_type": "image/png",
"consent": True,
"tier": "fast",
})
print(res.data)<?php
$ch = curl_init('https://api.96astroapi.com/v1/palmistry/palm-major-lines');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer YOUR_API_KEY',
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => json_encode([
'image_base64' => 'iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAAAAABQyaazAAAAgklEQVR42u3bQQoAIAgEQP//6fpCBsFWs2fBEbyJNcJTgICAgIDXACspgIeAp/aouvWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgGsN0+/F4cCNgQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE7QA/QbwMzAwgICPg7cAJxuHlDZty0owAAAABJRU5ErkJggg==',
'mime_type' => 'image/png',
'consent' => true,
'tier' => 'fast',
]),
]);
$response = curl_exec($ch);
curl_close($ch);
$result = json_decode($response, true);
print_r($result['data']);package main
import (
"fmt"
"io"
"net/http"
"strings"
)
func main() {
body := strings.NewReader(`{
"image_base64": "iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAAAAABQyaazAAAAgklEQVR42u3bQQoAIAgEQP//6fpCBsFWs2fBEbyJNcJTgICAgIDXACspgIeAp/aouvWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgGsN0+/F4cCNgQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE7QA/QbwMzAwgICPg7cAJxuHlDZty0owAAAABJRU5ErkJggg==",
"mime_type": "image/png",
"consent": true,
"tier": "fast"
}`)
req, err := http.NewRequest("POST", "https://api.96astroapi.com/v1/palmistry/palm-major-lines", body)
if err != nil {
panic(err)
}
req.Header.Set("Authorization", "Bearer YOUR_API_KEY")
req.Header.Set("Content-Type", "application/json")
res, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer res.Body.Close()
out, _ := io.ReadAll(res.Body)
fmt.Println(res.Status, string(out))
}Example response (illustrative)
{
"data": {
"sections": {
"major_lines": {
"observed": [
"An example observation about major lines."
],
"reading": "An example reading of major lines, based on what the photo shows.",
"advice": "One practical sentence."
}
},
"notice": "For reflection, not fact. This reading is not medical, legal or financial advice.",
"tier": "fast",
"language": "en"
},
"meta": {
"request_id": "req_00000000000000000000",
"api_version": "v1",
"credits_used": 0,
"warnings": [],
…Written by hand from the documented shape: AI readings are not captured automatically. Real text, token counts and credits differ.
Error responses
- 400invalid_request
- 401invalid_key, expired_key
- 402payment_required
- 403account_suspended, plan_upgrade_required, plan_family_not_included, key_scope_denied, ip_not_allowed, origin_not_allowed, publishable_key_not_allowed
- 404not_found
- 409idempotency_conflict
- 413payload_too_large
- 422invalid_request, unsupported_language
- 429rate_limited, quota_exhausted, spend_cap_reached, project_budget_exceeded
- 500computation_failed
- 502unavailable
- 503unavailable, maintenance, temporarily_unavailable
- 504deadline_exceeded
Errors are never charged. What each status means and what to do: errors.
Palm: Minor Lines
POSTAvailable
https://api.96astroapi.com/v1/palmistry/palm-minor-linesThe Sun, health, marriage and travel lines. Read from one photo of the palm by a vision model; the photo is not stored.
- Credits
- Metered, from 15 credits
- Input
- A photo
- Output
- JSON
- Delivery
- Direct response
- Languages
- 26 languages; translated term names with
labels
| Header | Value and description |
|---|---|
AuthorizationRequired | Bearer YOUR_API_KEYYour sandbox (sk_test_...) or live (sk_live_...) key. X-API-Key: <key> is accepted instead. |
Content-TypeRequired | application/jsonThe body is JSON. |
Idempotency-KeyOptional | <unique string>Makes retries safe: a repeated key with the same body replays the stored response and is never charged twice. (1 to 200 characters) |
| Field | Description |
|---|---|
image_base64stringRequired | The floor-plan image file, base64-encoded (a `data:image/...;base64,` prefix is accepted). PNG, JPEG or WebP; at most 3.75 MiB decoded and 8000 px a side. Limits: 1 to 5400000 characters Example: |
mime_typestring | nullOptional | The image's type. Required unless image_base64 is a data: URI; must match the file. Default: Allowed values: image/pngimage/jpegimage/webp Example: |
tierstringOptional | fast (Claude Haiku) or balanced (Sonnet). Sets the price range. Default: Allowed values: fastbalanced Example: |
consentbooleanRequired | Must be true: the person in the photo agreed to this reading, and is an adult or has a guardian's agreement. Allowed value: true Example: |
languagestringOptional | Output language (ISO 639-1). The values listed are the ones this capability supports; any other is refused with 422 unsupported_language. Identifiers, enum values and numbers never change with language. Default: Allowed values: enasbndeesfrguhiitjaknkomlmrnenlorpaplptrusitatetrur |
labelsstringOptional | Optional. Adds `meta.labels`: translated display names for the identifiers in the answer. `data` is unchanged. Free. Any other code is refused with 422 unsupported_language. Allowed values: asbndeesfrguhiitknkomlmrnenlorpaplptrusitatetrur |
Response · fields in data
The response contract: required fields are always present.
sections· objectnotice· stringtier· stringlanguage· string
Example request
curl -X POST https://api.96astroapi.com/v1/palmistry/palm-minor-lines \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"image_base64": "iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAAAAABQyaazAAAAgklEQVR42u3bQQoAIAgEQP//6fpCBsFWs2fBEbyJNcJTgICAgIDXACspgIeAp/aouvWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgGsN0+/F4cCNgQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE7QA/QbwMzAwgICPg7cAJxuHlDZty0owAAAABJRU5ErkJggg==",
"mime_type": "image/png",
"consent": true,
"tier": "fast"
}'const response = await fetch("https://api.96astroapi.com/v1/palmistry/palm-minor-lines", {
method: "POST",
headers: {
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({
"image_base64": "iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAAAAABQyaazAAAAgklEQVR42u3bQQoAIAgEQP//6fpCBsFWs2fBEbyJNcJTgICAgIDXACspgIeAp/aouvWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgGsN0+/F4cCNgQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE7QA/QbwMzAwgICPg7cAJxuHlDZty0owAAAABJRU5ErkJggg==",
"mime_type": "image/png",
"consent": true,
"tier": "fast"
}),
});
const { data, meta } = await response.json();
console.log(data);import { Astro96Client } from "@96astro/api";
const astro = new Astro96Client({ apiKey: "YOUR_API_KEY" });
const { data, meta } = await astro.palmistry.palmMinorLines({
"image_base64": "iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAAAAABQyaazAAAAgklEQVR42u3bQQoAIAgEQP//6fpCBsFWs2fBEbyJNcJTgICAgIDXACspgIeAp/aouvWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgGsN0+/F4cCNgQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE7QA/QbwMzAwgICPg7cAJxuHlDZty0owAAAABJRU5ErkJggg==",
"mime_type": "image/png",
"consent": true,
"tier": "fast"
});
console.log(data);import requests
response = requests.post(
"https://api.96astroapi.com/v1/palmistry/palm-minor-lines",
headers={
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
json={
"image_base64": "iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAAAAABQyaazAAAAgklEQVR42u3bQQoAIAgEQP//6fpCBsFWs2fBEbyJNcJTgICAgIDXACspgIeAp/aouvWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgGsN0+/F4cCNgQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE7QA/QbwMzAwgICPg7cAJxuHlDZty0owAAAABJRU5ErkJggg==",
"mime_type": "image/png",
"consent": True,
"tier": "fast",
},
timeout=60,
)
response.raise_for_status()
data = response.json()["data"]
print(data)from astro96_api import Astro96Client
astro = Astro96Client(api_key="YOUR_API_KEY")
res = astro.palmistry.palm_minor_lines({
"image_base64": "iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAAAAABQyaazAAAAgklEQVR42u3bQQoAIAgEQP//6fpCBsFWs2fBEbyJNcJTgICAgIDXACspgIeAp/aouvWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgGsN0+/F4cCNgQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE7QA/QbwMzAwgICPg7cAJxuHlDZty0owAAAABJRU5ErkJggg==",
"mime_type": "image/png",
"consent": True,
"tier": "fast",
})
print(res.data)<?php
$ch = curl_init('https://api.96astroapi.com/v1/palmistry/palm-minor-lines');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer YOUR_API_KEY',
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => json_encode([
'image_base64' => 'iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAAAAABQyaazAAAAgklEQVR42u3bQQoAIAgEQP//6fpCBsFWs2fBEbyJNcJTgICAgIDXACspgIeAp/aouvWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgGsN0+/F4cCNgQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE7QA/QbwMzAwgICPg7cAJxuHlDZty0owAAAABJRU5ErkJggg==',
'mime_type' => 'image/png',
'consent' => true,
'tier' => 'fast',
]),
]);
$response = curl_exec($ch);
curl_close($ch);
$result = json_decode($response, true);
print_r($result['data']);package main
import (
"fmt"
"io"
"net/http"
"strings"
)
func main() {
body := strings.NewReader(`{
"image_base64": "iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAAAAABQyaazAAAAgklEQVR42u3bQQoAIAgEQP//6fpCBsFWs2fBEbyJNcJTgICAgIDXACspgIeAp/aouvWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgGsN0+/F4cCNgQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE7QA/QbwMzAwgICPg7cAJxuHlDZty0owAAAABJRU5ErkJggg==",
"mime_type": "image/png",
"consent": true,
"tier": "fast"
}`)
req, err := http.NewRequest("POST", "https://api.96astroapi.com/v1/palmistry/palm-minor-lines", body)
if err != nil {
panic(err)
}
req.Header.Set("Authorization", "Bearer YOUR_API_KEY")
req.Header.Set("Content-Type", "application/json")
res, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer res.Body.Close()
out, _ := io.ReadAll(res.Body)
fmt.Println(res.Status, string(out))
}Example response (illustrative)
{
"data": {
"sections": {
"minor_lines": {
"observed": [
"An example observation about minor lines."
],
"reading": "An example reading of minor lines, based on what the photo shows.",
"advice": "One practical sentence."
}
},
"notice": "For reflection, not fact. This reading is not medical, legal or financial advice.",
"tier": "fast",
"language": "en"
},
"meta": {
"request_id": "req_00000000000000000000",
"api_version": "v1",
"credits_used": 0,
"warnings": [],
…Written by hand from the documented shape: AI readings are not captured automatically. Real text, token counts and credits differ.
Error responses
- 400invalid_request
- 401invalid_key, expired_key
- 402payment_required
- 403account_suspended, plan_upgrade_required, plan_family_not_included, key_scope_denied, ip_not_allowed, origin_not_allowed, publishable_key_not_allowed
- 404not_found
- 409idempotency_conflict
- 413payload_too_large
- 422invalid_request, unsupported_language
- 429rate_limited, quota_exhausted, spend_cap_reached, project_budget_exceeded
- 500computation_failed
- 502unavailable
- 503unavailable, maintenance, temporarily_unavailable
- 504deadline_exceeded
Errors are never charged. What each status means and what to do: errors.
Palm: Mounts
POSTAvailable
https://api.96astroapi.com/v1/palmistry/palm-mountsWhich mounts are full and which flat. Read from one photo of the palm by a vision model; the photo is not stored.
- Credits
- Metered, from 15 credits
- Input
- A photo
- Output
- JSON
- Delivery
- Direct response
- Languages
- 26 languages; translated term names with
labels
| Header | Value and description |
|---|---|
AuthorizationRequired | Bearer YOUR_API_KEYYour sandbox (sk_test_...) or live (sk_live_...) key. X-API-Key: <key> is accepted instead. |
Content-TypeRequired | application/jsonThe body is JSON. |
Idempotency-KeyOptional | <unique string>Makes retries safe: a repeated key with the same body replays the stored response and is never charged twice. (1 to 200 characters) |
| Field | Description |
|---|---|
image_base64stringRequired | The floor-plan image file, base64-encoded (a `data:image/...;base64,` prefix is accepted). PNG, JPEG or WebP; at most 3.75 MiB decoded and 8000 px a side. Limits: 1 to 5400000 characters Example: |
mime_typestring | nullOptional | The image's type. Required unless image_base64 is a data: URI; must match the file. Default: Allowed values: image/pngimage/jpegimage/webp Example: |
tierstringOptional | fast (Claude Haiku) or balanced (Sonnet). Sets the price range. Default: Allowed values: fastbalanced Example: |
consentbooleanRequired | Must be true: the person in the photo agreed to this reading, and is an adult or has a guardian's agreement. Allowed value: true Example: |
languagestringOptional | Output language (ISO 639-1). The values listed are the ones this capability supports; any other is refused with 422 unsupported_language. Identifiers, enum values and numbers never change with language. Default: Allowed values: enasbndeesfrguhiitjaknkomlmrnenlorpaplptrusitatetrur |
labelsstringOptional | Optional. Adds `meta.labels`: translated display names for the identifiers in the answer. `data` is unchanged. Free. Any other code is refused with 422 unsupported_language. Allowed values: asbndeesfrguhiitknkomlmrnenlorpaplptrusitatetrur |
Response · fields in data
The response contract: required fields are always present.
sections· objectnotice· stringtier· stringlanguage· string
Example request
curl -X POST https://api.96astroapi.com/v1/palmistry/palm-mounts \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"image_base64": "iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAAAAABQyaazAAAAgklEQVR42u3bQQoAIAgEQP//6fpCBsFWs2fBEbyJNcJTgICAgIDXACspgIeAp/aouvWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgGsN0+/F4cCNgQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE7QA/QbwMzAwgICPg7cAJxuHlDZty0owAAAABJRU5ErkJggg==",
"mime_type": "image/png",
"consent": true,
"tier": "fast"
}'const response = await fetch("https://api.96astroapi.com/v1/palmistry/palm-mounts", {
method: "POST",
headers: {
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({
"image_base64": "iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAAAAABQyaazAAAAgklEQVR42u3bQQoAIAgEQP//6fpCBsFWs2fBEbyJNcJTgICAgIDXACspgIeAp/aouvWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgGsN0+/F4cCNgQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE7QA/QbwMzAwgICPg7cAJxuHlDZty0owAAAABJRU5ErkJggg==",
"mime_type": "image/png",
"consent": true,
"tier": "fast"
}),
});
const { data, meta } = await response.json();
console.log(data);import { Astro96Client } from "@96astro/api";
const astro = new Astro96Client({ apiKey: "YOUR_API_KEY" });
const { data, meta } = await astro.palmistry.palmMounts({
"image_base64": "iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAAAAABQyaazAAAAgklEQVR42u3bQQoAIAgEQP//6fpCBsFWs2fBEbyJNcJTgICAgIDXACspgIeAp/aouvWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgGsN0+/F4cCNgQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE7QA/QbwMzAwgICPg7cAJxuHlDZty0owAAAABJRU5ErkJggg==",
"mime_type": "image/png",
"consent": true,
"tier": "fast"
});
console.log(data);import requests
response = requests.post(
"https://api.96astroapi.com/v1/palmistry/palm-mounts",
headers={
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
json={
"image_base64": "iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAAAAABQyaazAAAAgklEQVR42u3bQQoAIAgEQP//6fpCBsFWs2fBEbyJNcJTgICAgIDXACspgIeAp/aouvWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgGsN0+/F4cCNgQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE7QA/QbwMzAwgICPg7cAJxuHlDZty0owAAAABJRU5ErkJggg==",
"mime_type": "image/png",
"consent": True,
"tier": "fast",
},
timeout=60,
)
response.raise_for_status()
data = response.json()["data"]
print(data)from astro96_api import Astro96Client
astro = Astro96Client(api_key="YOUR_API_KEY")
res = astro.palmistry.palm_mounts({
"image_base64": "iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAAAAABQyaazAAAAgklEQVR42u3bQQoAIAgEQP//6fpCBsFWs2fBEbyJNcJTgICAgIDXACspgIeAp/aouvWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgGsN0+/F4cCNgQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE7QA/QbwMzAwgICPg7cAJxuHlDZty0owAAAABJRU5ErkJggg==",
"mime_type": "image/png",
"consent": True,
"tier": "fast",
})
print(res.data)<?php
$ch = curl_init('https://api.96astroapi.com/v1/palmistry/palm-mounts');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer YOUR_API_KEY',
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => json_encode([
'image_base64' => 'iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAAAAABQyaazAAAAgklEQVR42u3bQQoAIAgEQP//6fpCBsFWs2fBEbyJNcJTgICAgIDXACspgIeAp/aouvWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgGsN0+/F4cCNgQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE7QA/QbwMzAwgICPg7cAJxuHlDZty0owAAAABJRU5ErkJggg==',
'mime_type' => 'image/png',
'consent' => true,
'tier' => 'fast',
]),
]);
$response = curl_exec($ch);
curl_close($ch);
$result = json_decode($response, true);
print_r($result['data']);package main
import (
"fmt"
"io"
"net/http"
"strings"
)
func main() {
body := strings.NewReader(`{
"image_base64": "iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAAAAABQyaazAAAAgklEQVR42u3bQQoAIAgEQP//6fpCBsFWs2fBEbyJNcJTgICAgIDXACspgIeAp/aouvWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgGsN0+/F4cCNgQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE7QA/QbwMzAwgICPg7cAJxuHlDZty0owAAAABJRU5ErkJggg==",
"mime_type": "image/png",
"consent": true,
"tier": "fast"
}`)
req, err := http.NewRequest("POST", "https://api.96astroapi.com/v1/palmistry/palm-mounts", body)
if err != nil {
panic(err)
}
req.Header.Set("Authorization", "Bearer YOUR_API_KEY")
req.Header.Set("Content-Type", "application/json")
res, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer res.Body.Close()
out, _ := io.ReadAll(res.Body)
fmt.Println(res.Status, string(out))
}Example response (illustrative)
{
"data": {
"sections": {
"mounts": {
"observed": [
"An example observation about mounts."
],
"reading": "An example reading of mounts, based on what the photo shows.",
"advice": "One practical sentence."
}
},
"notice": "For reflection, not fact. This reading is not medical, legal or financial advice.",
"tier": "fast",
"language": "en"
},
"meta": {
"request_id": "req_00000000000000000000",
"api_version": "v1",
"credits_used": 0,
"warnings": [],
…Written by hand from the documented shape: AI readings are not captured automatically. Real text, token counts and credits differ.
Error responses
- 400invalid_request
- 401invalid_key, expired_key
- 402payment_required
- 403account_suspended, plan_upgrade_required, plan_family_not_included, key_scope_denied, ip_not_allowed, origin_not_allowed, publishable_key_not_allowed
- 404not_found
- 409idempotency_conflict
- 413payload_too_large
- 422invalid_request, unsupported_language
- 429rate_limited, quota_exhausted, spend_cap_reached, project_budget_exceeded
- 500computation_failed
- 502unavailable
- 503unavailable, maintenance, temporarily_unavailable
- 504deadline_exceeded
Errors are never charged. What each status means and what to do: errors.
Palm: Special Marks
POSTAvailable
https://api.96astroapi.com/v1/palmistry/palm-special-featuresStars, crosses, islands and other marks, if visible. Read from one photo of the palm by a vision model; the photo is not stored.
- Credits
- Metered, from 15 credits
- Input
- A photo
- Output
- JSON
- Delivery
- Direct response
- Languages
- 26 languages; translated term names with
labels
| Header | Value and description |
|---|---|
AuthorizationRequired | Bearer YOUR_API_KEYYour sandbox (sk_test_...) or live (sk_live_...) key. X-API-Key: <key> is accepted instead. |
Content-TypeRequired | application/jsonThe body is JSON. |
Idempotency-KeyOptional | <unique string>Makes retries safe: a repeated key with the same body replays the stored response and is never charged twice. (1 to 200 characters) |
| Field | Description |
|---|---|
image_base64stringRequired | The floor-plan image file, base64-encoded (a `data:image/...;base64,` prefix is accepted). PNG, JPEG or WebP; at most 3.75 MiB decoded and 8000 px a side. Limits: 1 to 5400000 characters Example: |
mime_typestring | nullOptional | The image's type. Required unless image_base64 is a data: URI; must match the file. Default: Allowed values: image/pngimage/jpegimage/webp Example: |
tierstringOptional | fast (Claude Haiku) or balanced (Sonnet). Sets the price range. Default: Allowed values: fastbalanced Example: |
consentbooleanRequired | Must be true: the person in the photo agreed to this reading, and is an adult or has a guardian's agreement. Allowed value: true Example: |
languagestringOptional | Output language (ISO 639-1). The values listed are the ones this capability supports; any other is refused with 422 unsupported_language. Identifiers, enum values and numbers never change with language. Default: Allowed values: enasbndeesfrguhiitjaknkomlmrnenlorpaplptrusitatetrur |
labelsstringOptional | Optional. Adds `meta.labels`: translated display names for the identifiers in the answer. `data` is unchanged. Free. Any other code is refused with 422 unsupported_language. Allowed values: asbndeesfrguhiitknkomlmrnenlorpaplptrusitatetrur |
Response · fields in data
The response contract: required fields are always present.
sections· objectnotice· stringtier· stringlanguage· string
Example request
curl -X POST https://api.96astroapi.com/v1/palmistry/palm-special-features \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"image_base64": "iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAAAAABQyaazAAAAgklEQVR42u3bQQoAIAgEQP//6fpCBsFWs2fBEbyJNcJTgICAgIDXACspgIeAp/aouvWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgGsN0+/F4cCNgQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE7QA/QbwMzAwgICPg7cAJxuHlDZty0owAAAABJRU5ErkJggg==",
"mime_type": "image/png",
"consent": true,
"tier": "fast"
}'const response = await fetch("https://api.96astroapi.com/v1/palmistry/palm-special-features", {
method: "POST",
headers: {
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({
"image_base64": "iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAAAAABQyaazAAAAgklEQVR42u3bQQoAIAgEQP//6fpCBsFWs2fBEbyJNcJTgICAgIDXACspgIeAp/aouvWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgGsN0+/F4cCNgQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE7QA/QbwMzAwgICPg7cAJxuHlDZty0owAAAABJRU5ErkJggg==",
"mime_type": "image/png",
"consent": true,
"tier": "fast"
}),
});
const { data, meta } = await response.json();
console.log(data);import { Astro96Client } from "@96astro/api";
const astro = new Astro96Client({ apiKey: "YOUR_API_KEY" });
const { data, meta } = await astro.palmistry.palmSpecialFeatures({
"image_base64": "iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAAAAABQyaazAAAAgklEQVR42u3bQQoAIAgEQP//6fpCBsFWs2fBEbyJNcJTgICAgIDXACspgIeAp/aouvWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgGsN0+/F4cCNgQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE7QA/QbwMzAwgICPg7cAJxuHlDZty0owAAAABJRU5ErkJggg==",
"mime_type": "image/png",
"consent": true,
"tier": "fast"
});
console.log(data);import requests
response = requests.post(
"https://api.96astroapi.com/v1/palmistry/palm-special-features",
headers={
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
json={
"image_base64": "iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAAAAABQyaazAAAAgklEQVR42u3bQQoAIAgEQP//6fpCBsFWs2fBEbyJNcJTgICAgIDXACspgIeAp/aouvWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgGsN0+/F4cCNgQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE7QA/QbwMzAwgICPg7cAJxuHlDZty0owAAAABJRU5ErkJggg==",
"mime_type": "image/png",
"consent": True,
"tier": "fast",
},
timeout=60,
)
response.raise_for_status()
data = response.json()["data"]
print(data)from astro96_api import Astro96Client
astro = Astro96Client(api_key="YOUR_API_KEY")
res = astro.palmistry.palm_special_features({
"image_base64": "iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAAAAABQyaazAAAAgklEQVR42u3bQQoAIAgEQP//6fpCBsFWs2fBEbyJNcJTgICAgIDXACspgIeAp/aouvWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgGsN0+/F4cCNgQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE7QA/QbwMzAwgICPg7cAJxuHlDZty0owAAAABJRU5ErkJggg==",
"mime_type": "image/png",
"consent": True,
"tier": "fast",
})
print(res.data)<?php
$ch = curl_init('https://api.96astroapi.com/v1/palmistry/palm-special-features');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer YOUR_API_KEY',
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => json_encode([
'image_base64' => 'iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAAAAABQyaazAAAAgklEQVR42u3bQQoAIAgEQP//6fpCBsFWs2fBEbyJNcJTgICAgIDXACspgIeAp/aouvWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgGsN0+/F4cCNgQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE7QA/QbwMzAwgICPg7cAJxuHlDZty0owAAAABJRU5ErkJggg==',
'mime_type' => 'image/png',
'consent' => true,
'tier' => 'fast',
]),
]);
$response = curl_exec($ch);
curl_close($ch);
$result = json_decode($response, true);
print_r($result['data']);package main
import (
"fmt"
"io"
"net/http"
"strings"
)
func main() {
body := strings.NewReader(`{
"image_base64": "iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAAAAABQyaazAAAAgklEQVR42u3bQQoAIAgEQP//6fpCBsFWs2fBEbyJNcJTgICAgIDXACspgIeAp/aouvWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgGsN0+/F4cCNgQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE7QA/QbwMzAwgICPg7cAJxuHlDZty0owAAAABJRU5ErkJggg==",
"mime_type": "image/png",
"consent": true,
"tier": "fast"
}`)
req, err := http.NewRequest("POST", "https://api.96astroapi.com/v1/palmistry/palm-special-features", body)
if err != nil {
panic(err)
}
req.Header.Set("Authorization", "Bearer YOUR_API_KEY")
req.Header.Set("Content-Type", "application/json")
res, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer res.Body.Close()
out, _ := io.ReadAll(res.Body)
fmt.Println(res.Status, string(out))
}Example response (illustrative)
{
"data": {
"sections": {
"special_features": {
"observed": [
"An example observation about special features."
],
"reading": "An example reading of special features, based on what the photo shows.",
"advice": "One practical sentence."
}
},
"notice": "For reflection, not fact. This reading is not medical, legal or financial advice.",
"tier": "fast",
"language": "en"
},
"meta": {
"request_id": "req_00000000000000000000",
"api_version": "v1",
"credits_used": 0,
"warnings": [],
…Written by hand from the documented shape: AI readings are not captured automatically. Real text, token counts and credits differ.
Error responses
- 400invalid_request
- 401invalid_key, expired_key
- 402payment_required
- 403account_suspended, plan_upgrade_required, plan_family_not_included, key_scope_denied, ip_not_allowed, origin_not_allowed, publishable_key_not_allowed
- 404not_found
- 409idempotency_conflict
- 413payload_too_large
- 422invalid_request, unsupported_language
- 429rate_limited, quota_exhausted, spend_cap_reached, project_budget_exceeded
- 500computation_failed
- 502unavailable
- 503unavailable, maintenance, temporarily_unavailable
- 504deadline_exceeded
Errors are never charged. What each status means and what to do: errors.
Palm: Personality
POSTAvailable
https://api.96astroapi.com/v1/palmistry/palm-personalityCharacter and temperament. Read from one photo of the palm by a vision model; the photo is not stored.
- Credits
- Metered, from 15 credits
- Input
- A photo
- Output
- JSON
- Delivery
- Direct response
- Languages
- 26 languages; translated term names with
labels
| Header | Value and description |
|---|---|
AuthorizationRequired | Bearer YOUR_API_KEYYour sandbox (sk_test_...) or live (sk_live_...) key. X-API-Key: <key> is accepted instead. |
Content-TypeRequired | application/jsonThe body is JSON. |
Idempotency-KeyOptional | <unique string>Makes retries safe: a repeated key with the same body replays the stored response and is never charged twice. (1 to 200 characters) |
| Field | Description |
|---|---|
image_base64stringRequired | The floor-plan image file, base64-encoded (a `data:image/...;base64,` prefix is accepted). PNG, JPEG or WebP; at most 3.75 MiB decoded and 8000 px a side. Limits: 1 to 5400000 characters Example: |
mime_typestring | nullOptional | The image's type. Required unless image_base64 is a data: URI; must match the file. Default: Allowed values: image/pngimage/jpegimage/webp Example: |
tierstringOptional | fast (Claude Haiku) or balanced (Sonnet). Sets the price range. Default: Allowed values: fastbalanced Example: |
consentbooleanRequired | Must be true: the person in the photo agreed to this reading, and is an adult or has a guardian's agreement. Allowed value: true Example: |
languagestringOptional | Output language (ISO 639-1). The values listed are the ones this capability supports; any other is refused with 422 unsupported_language. Identifiers, enum values and numbers never change with language. Default: Allowed values: enasbndeesfrguhiitjaknkomlmrnenlorpaplptrusitatetrur |
labelsstringOptional | Optional. Adds `meta.labels`: translated display names for the identifiers in the answer. `data` is unchanged. Free. Any other code is refused with 422 unsupported_language. Allowed values: asbndeesfrguhiitknkomlmrnenlorpaplptrusitatetrur |
Response · fields in data
The response contract: required fields are always present.
sections· objectnotice· stringtier· stringlanguage· string
Example request
curl -X POST https://api.96astroapi.com/v1/palmistry/palm-personality \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"image_base64": "iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAAAAABQyaazAAAAgklEQVR42u3bQQoAIAgEQP//6fpCBsFWs2fBEbyJNcJTgICAgIDXACspgIeAp/aouvWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgGsN0+/F4cCNgQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE7QA/QbwMzAwgICPg7cAJxuHlDZty0owAAAABJRU5ErkJggg==",
"mime_type": "image/png",
"consent": true,
"tier": "fast"
}'const response = await fetch("https://api.96astroapi.com/v1/palmistry/palm-personality", {
method: "POST",
headers: {
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({
"image_base64": "iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAAAAABQyaazAAAAgklEQVR42u3bQQoAIAgEQP//6fpCBsFWs2fBEbyJNcJTgICAgIDXACspgIeAp/aouvWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgGsN0+/F4cCNgQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE7QA/QbwMzAwgICPg7cAJxuHlDZty0owAAAABJRU5ErkJggg==",
"mime_type": "image/png",
"consent": true,
"tier": "fast"
}),
});
const { data, meta } = await response.json();
console.log(data);import { Astro96Client } from "@96astro/api";
const astro = new Astro96Client({ apiKey: "YOUR_API_KEY" });
const { data, meta } = await astro.palmistry.palmPersonality({
"image_base64": "iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAAAAABQyaazAAAAgklEQVR42u3bQQoAIAgEQP//6fpCBsFWs2fBEbyJNcJTgICAgIDXACspgIeAp/aouvWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgGsN0+/F4cCNgQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE7QA/QbwMzAwgICPg7cAJxuHlDZty0owAAAABJRU5ErkJggg==",
"mime_type": "image/png",
"consent": true,
"tier": "fast"
});
console.log(data);import requests
response = requests.post(
"https://api.96astroapi.com/v1/palmistry/palm-personality",
headers={
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
json={
"image_base64": "iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAAAAABQyaazAAAAgklEQVR42u3bQQoAIAgEQP//6fpCBsFWs2fBEbyJNcJTgICAgIDXACspgIeAp/aouvWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgGsN0+/F4cCNgQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE7QA/QbwMzAwgICPg7cAJxuHlDZty0owAAAABJRU5ErkJggg==",
"mime_type": "image/png",
"consent": True,
"tier": "fast",
},
timeout=60,
)
response.raise_for_status()
data = response.json()["data"]
print(data)from astro96_api import Astro96Client
astro = Astro96Client(api_key="YOUR_API_KEY")
res = astro.palmistry.palm_personality({
"image_base64": "iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAAAAABQyaazAAAAgklEQVR42u3bQQoAIAgEQP//6fpCBsFWs2fBEbyJNcJTgICAgIDXACspgIeAp/aouvWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgGsN0+/F4cCNgQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE7QA/QbwMzAwgICPg7cAJxuHlDZty0owAAAABJRU5ErkJggg==",
"mime_type": "image/png",
"consent": True,
"tier": "fast",
})
print(res.data)<?php
$ch = curl_init('https://api.96astroapi.com/v1/palmistry/palm-personality');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer YOUR_API_KEY',
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => json_encode([
'image_base64' => 'iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAAAAABQyaazAAAAgklEQVR42u3bQQoAIAgEQP//6fpCBsFWs2fBEbyJNcJTgICAgIDXACspgIeAp/aouvWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgGsN0+/F4cCNgQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE7QA/QbwMzAwgICPg7cAJxuHlDZty0owAAAABJRU5ErkJggg==',
'mime_type' => 'image/png',
'consent' => true,
'tier' => 'fast',
]),
]);
$response = curl_exec($ch);
curl_close($ch);
$result = json_decode($response, true);
print_r($result['data']);package main
import (
"fmt"
"io"
"net/http"
"strings"
)
func main() {
body := strings.NewReader(`{
"image_base64": "iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAAAAABQyaazAAAAgklEQVR42u3bQQoAIAgEQP//6fpCBsFWs2fBEbyJNcJTgICAgIDXACspgIeAp/aouvWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgGsN0+/F4cCNgQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE7QA/QbwMzAwgICPg7cAJxuHlDZty0owAAAABJRU5ErkJggg==",
"mime_type": "image/png",
"consent": true,
"tier": "fast"
}`)
req, err := http.NewRequest("POST", "https://api.96astroapi.com/v1/palmistry/palm-personality", body)
if err != nil {
panic(err)
}
req.Header.Set("Authorization", "Bearer YOUR_API_KEY")
req.Header.Set("Content-Type", "application/json")
res, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer res.Body.Close()
out, _ := io.ReadAll(res.Body)
fmt.Println(res.Status, string(out))
}Example response (illustrative)
{
"data": {
"sections": {
"personality": {
"observed": [
"An example observation about personality."
],
"reading": "An example reading of personality, based on what the photo shows.",
"advice": "One practical sentence."
}
},
"notice": "For reflection, not fact. This reading is not medical, legal or financial advice.",
"tier": "fast",
"language": "en"
},
"meta": {
"request_id": "req_00000000000000000000",
"api_version": "v1",
"credits_used": 0,
"warnings": [],
…Written by hand from the documented shape: AI readings are not captured automatically. Real text, token counts and credits differ.
Error responses
- 400invalid_request
- 401invalid_key, expired_key
- 402payment_required
- 403account_suspended, plan_upgrade_required, plan_family_not_included, key_scope_denied, ip_not_allowed, origin_not_allowed, publishable_key_not_allowed
- 404not_found
- 409idempotency_conflict
- 413payload_too_large
- 422invalid_request, unsupported_language
- 429rate_limited, quota_exhausted, spend_cap_reached, project_budget_exceeded
- 500computation_failed
- 502unavailable
- 503unavailable, maintenance, temporarily_unavailable
- 504deadline_exceeded
Errors are never charged. What each status means and what to do: errors.
Palm: Career
POSTAvailable
https://api.96astroapi.com/v1/palmistry/palm-careerWork and calling. Read from one photo of the palm by a vision model; the photo is not stored.
- Credits
- Metered, from 15 credits
- Input
- A photo
- Output
- JSON
- Delivery
- Direct response
- Languages
- 26 languages; translated term names with
labels
| Header | Value and description |
|---|---|
AuthorizationRequired | Bearer YOUR_API_KEYYour sandbox (sk_test_...) or live (sk_live_...) key. X-API-Key: <key> is accepted instead. |
Content-TypeRequired | application/jsonThe body is JSON. |
Idempotency-KeyOptional | <unique string>Makes retries safe: a repeated key with the same body replays the stored response and is never charged twice. (1 to 200 characters) |
| Field | Description |
|---|---|
image_base64stringRequired | The floor-plan image file, base64-encoded (a `data:image/...;base64,` prefix is accepted). PNG, JPEG or WebP; at most 3.75 MiB decoded and 8000 px a side. Limits: 1 to 5400000 characters Example: |
mime_typestring | nullOptional | The image's type. Required unless image_base64 is a data: URI; must match the file. Default: Allowed values: image/pngimage/jpegimage/webp Example: |
tierstringOptional | fast (Claude Haiku) or balanced (Sonnet). Sets the price range. Default: Allowed values: fastbalanced Example: |
consentbooleanRequired | Must be true: the person in the photo agreed to this reading, and is an adult or has a guardian's agreement. Allowed value: true Example: |
languagestringOptional | Output language (ISO 639-1). The values listed are the ones this capability supports; any other is refused with 422 unsupported_language. Identifiers, enum values and numbers never change with language. Default: Allowed values: enasbndeesfrguhiitjaknkomlmrnenlorpaplptrusitatetrur |
labelsstringOptional | Optional. Adds `meta.labels`: translated display names for the identifiers in the answer. `data` is unchanged. Free. Any other code is refused with 422 unsupported_language. Allowed values: asbndeesfrguhiitknkomlmrnenlorpaplptrusitatetrur |
Response · fields in data
The response contract: required fields are always present.
sections· objectnotice· stringtier· stringlanguage· string
Example request
curl -X POST https://api.96astroapi.com/v1/palmistry/palm-career \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"image_base64": "iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAAAAABQyaazAAAAgklEQVR42u3bQQoAIAgEQP//6fpCBsFWs2fBEbyJNcJTgICAgIDXACspgIeAp/aouvWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgGsN0+/F4cCNgQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE7QA/QbwMzAwgICPg7cAJxuHlDZty0owAAAABJRU5ErkJggg==",
"mime_type": "image/png",
"consent": true,
"tier": "fast"
}'const response = await fetch("https://api.96astroapi.com/v1/palmistry/palm-career", {
method: "POST",
headers: {
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({
"image_base64": "iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAAAAABQyaazAAAAgklEQVR42u3bQQoAIAgEQP//6fpCBsFWs2fBEbyJNcJTgICAgIDXACspgIeAp/aouvWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgGsN0+/F4cCNgQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE7QA/QbwMzAwgICPg7cAJxuHlDZty0owAAAABJRU5ErkJggg==",
"mime_type": "image/png",
"consent": true,
"tier": "fast"
}),
});
const { data, meta } = await response.json();
console.log(data);import { Astro96Client } from "@96astro/api";
const astro = new Astro96Client({ apiKey: "YOUR_API_KEY" });
const { data, meta } = await astro.palmistry.palmCareer({
"image_base64": "iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAAAAABQyaazAAAAgklEQVR42u3bQQoAIAgEQP//6fpCBsFWs2fBEbyJNcJTgICAgIDXACspgIeAp/aouvWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgGsN0+/F4cCNgQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE7QA/QbwMzAwgICPg7cAJxuHlDZty0owAAAABJRU5ErkJggg==",
"mime_type": "image/png",
"consent": true,
"tier": "fast"
});
console.log(data);import requests
response = requests.post(
"https://api.96astroapi.com/v1/palmistry/palm-career",
headers={
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
json={
"image_base64": "iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAAAAABQyaazAAAAgklEQVR42u3bQQoAIAgEQP//6fpCBsFWs2fBEbyJNcJTgICAgIDXACspgIeAp/aouvWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgGsN0+/F4cCNgQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE7QA/QbwMzAwgICPg7cAJxuHlDZty0owAAAABJRU5ErkJggg==",
"mime_type": "image/png",
"consent": True,
"tier": "fast",
},
timeout=60,
)
response.raise_for_status()
data = response.json()["data"]
print(data)from astro96_api import Astro96Client
astro = Astro96Client(api_key="YOUR_API_KEY")
res = astro.palmistry.palm_career({
"image_base64": "iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAAAAABQyaazAAAAgklEQVR42u3bQQoAIAgEQP//6fpCBsFWs2fBEbyJNcJTgICAgIDXACspgIeAp/aouvWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgGsN0+/F4cCNgQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE7QA/QbwMzAwgICPg7cAJxuHlDZty0owAAAABJRU5ErkJggg==",
"mime_type": "image/png",
"consent": True,
"tier": "fast",
})
print(res.data)<?php
$ch = curl_init('https://api.96astroapi.com/v1/palmistry/palm-career');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer YOUR_API_KEY',
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => json_encode([
'image_base64' => 'iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAAAAABQyaazAAAAgklEQVR42u3bQQoAIAgEQP//6fpCBsFWs2fBEbyJNcJTgICAgIDXACspgIeAp/aouvWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgGsN0+/F4cCNgQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE7QA/QbwMzAwgICPg7cAJxuHlDZty0owAAAABJRU5ErkJggg==',
'mime_type' => 'image/png',
'consent' => true,
'tier' => 'fast',
]),
]);
$response = curl_exec($ch);
curl_close($ch);
$result = json_decode($response, true);
print_r($result['data']);package main
import (
"fmt"
"io"
"net/http"
"strings"
)
func main() {
body := strings.NewReader(`{
"image_base64": "iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAAAAABQyaazAAAAgklEQVR42u3bQQoAIAgEQP//6fpCBsFWs2fBEbyJNcJTgICAgIDXACspgIeAp/aouvWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgGsN0+/F4cCNgQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE7QA/QbwMzAwgICPg7cAJxuHlDZty0owAAAABJRU5ErkJggg==",
"mime_type": "image/png",
"consent": true,
"tier": "fast"
}`)
req, err := http.NewRequest("POST", "https://api.96astroapi.com/v1/palmistry/palm-career", body)
if err != nil {
panic(err)
}
req.Header.Set("Authorization", "Bearer YOUR_API_KEY")
req.Header.Set("Content-Type", "application/json")
res, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer res.Body.Close()
out, _ := io.ReadAll(res.Body)
fmt.Println(res.Status, string(out))
}Example response (illustrative)
{
"data": {
"sections": {
"career": {
"observed": [
"An example observation about career."
],
"reading": "An example reading of career, based on what the photo shows.",
"advice": "One practical sentence."
}
},
"notice": "For reflection, not fact. This reading is not medical, legal or financial advice.",
"tier": "fast",
"language": "en"
},
"meta": {
"request_id": "req_00000000000000000000",
"api_version": "v1",
"credits_used": 0,
"warnings": [],
…Written by hand from the documented shape: AI readings are not captured automatically. Real text, token counts and credits differ.
Error responses
- 400invalid_request
- 401invalid_key, expired_key
- 402payment_required
- 403account_suspended, plan_upgrade_required, plan_family_not_included, key_scope_denied, ip_not_allowed, origin_not_allowed, publishable_key_not_allowed
- 404not_found
- 409idempotency_conflict
- 413payload_too_large
- 422invalid_request, unsupported_language
- 429rate_limited, quota_exhausted, spend_cap_reached, project_budget_exceeded
- 500computation_failed
- 502unavailable
- 503unavailable, maintenance, temporarily_unavailable
- 504deadline_exceeded
Errors are never charged. What each status means and what to do: errors.
Palm: Money
POSTAvailable
https://api.96astroapi.com/v1/palmistry/palm-moneyMoney and how it is handled. Read from one photo of the palm by a vision model; the photo is not stored.
- Credits
- Metered, from 15 credits
- Input
- A photo
- Output
- JSON
- Delivery
- Direct response
- Languages
- 26 languages; translated term names with
labels
| Header | Value and description |
|---|---|
AuthorizationRequired | Bearer YOUR_API_KEYYour sandbox (sk_test_...) or live (sk_live_...) key. X-API-Key: <key> is accepted instead. |
Content-TypeRequired | application/jsonThe body is JSON. |
Idempotency-KeyOptional | <unique string>Makes retries safe: a repeated key with the same body replays the stored response and is never charged twice. (1 to 200 characters) |
| Field | Description |
|---|---|
image_base64stringRequired | The floor-plan image file, base64-encoded (a `data:image/...;base64,` prefix is accepted). PNG, JPEG or WebP; at most 3.75 MiB decoded and 8000 px a side. Limits: 1 to 5400000 characters Example: |
mime_typestring | nullOptional | The image's type. Required unless image_base64 is a data: URI; must match the file. Default: Allowed values: image/pngimage/jpegimage/webp Example: |
tierstringOptional | fast (Claude Haiku) or balanced (Sonnet). Sets the price range. Default: Allowed values: fastbalanced Example: |
consentbooleanRequired | Must be true: the person in the photo agreed to this reading, and is an adult or has a guardian's agreement. Allowed value: true Example: |
languagestringOptional | Output language (ISO 639-1). The values listed are the ones this capability supports; any other is refused with 422 unsupported_language. Identifiers, enum values and numbers never change with language. Default: Allowed values: enasbndeesfrguhiitjaknkomlmrnenlorpaplptrusitatetrur |
labelsstringOptional | Optional. Adds `meta.labels`: translated display names for the identifiers in the answer. `data` is unchanged. Free. Any other code is refused with 422 unsupported_language. Allowed values: asbndeesfrguhiitknkomlmrnenlorpaplptrusitatetrur |
Response · fields in data
The response contract: required fields are always present.
sections· objectnotice· stringtier· stringlanguage· string
Example request
curl -X POST https://api.96astroapi.com/v1/palmistry/palm-money \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"image_base64": "iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAAAAABQyaazAAAAgklEQVR42u3bQQoAIAgEQP//6fpCBsFWs2fBEbyJNcJTgICAgIDXACspgIeAp/aouvWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgGsN0+/F4cCNgQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE7QA/QbwMzAwgICPg7cAJxuHlDZty0owAAAABJRU5ErkJggg==",
"mime_type": "image/png",
"consent": true,
"tier": "fast"
}'const response = await fetch("https://api.96astroapi.com/v1/palmistry/palm-money", {
method: "POST",
headers: {
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({
"image_base64": "iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAAAAABQyaazAAAAgklEQVR42u3bQQoAIAgEQP//6fpCBsFWs2fBEbyJNcJTgICAgIDXACspgIeAp/aouvWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgGsN0+/F4cCNgQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE7QA/QbwMzAwgICPg7cAJxuHlDZty0owAAAABJRU5ErkJggg==",
"mime_type": "image/png",
"consent": true,
"tier": "fast"
}),
});
const { data, meta } = await response.json();
console.log(data);import { Astro96Client } from "@96astro/api";
const astro = new Astro96Client({ apiKey: "YOUR_API_KEY" });
const { data, meta } = await astro.palmistry.palmMoney({
"image_base64": "iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAAAAABQyaazAAAAgklEQVR42u3bQQoAIAgEQP//6fpCBsFWs2fBEbyJNcJTgICAgIDXACspgIeAp/aouvWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgGsN0+/F4cCNgQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE7QA/QbwMzAwgICPg7cAJxuHlDZty0owAAAABJRU5ErkJggg==",
"mime_type": "image/png",
"consent": true,
"tier": "fast"
});
console.log(data);import requests
response = requests.post(
"https://api.96astroapi.com/v1/palmistry/palm-money",
headers={
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
json={
"image_base64": "iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAAAAABQyaazAAAAgklEQVR42u3bQQoAIAgEQP//6fpCBsFWs2fBEbyJNcJTgICAgIDXACspgIeAp/aouvWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgGsN0+/F4cCNgQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE7QA/QbwMzAwgICPg7cAJxuHlDZty0owAAAABJRU5ErkJggg==",
"mime_type": "image/png",
"consent": True,
"tier": "fast",
},
timeout=60,
)
response.raise_for_status()
data = response.json()["data"]
print(data)from astro96_api import Astro96Client
astro = Astro96Client(api_key="YOUR_API_KEY")
res = astro.palmistry.palm_money({
"image_base64": "iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAAAAABQyaazAAAAgklEQVR42u3bQQoAIAgEQP//6fpCBsFWs2fBEbyJNcJTgICAgIDXACspgIeAp/aouvWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgGsN0+/F4cCNgQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE7QA/QbwMzAwgICPg7cAJxuHlDZty0owAAAABJRU5ErkJggg==",
"mime_type": "image/png",
"consent": True,
"tier": "fast",
})
print(res.data)<?php
$ch = curl_init('https://api.96astroapi.com/v1/palmistry/palm-money');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer YOUR_API_KEY',
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => json_encode([
'image_base64' => 'iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAAAAABQyaazAAAAgklEQVR42u3bQQoAIAgEQP//6fpCBsFWs2fBEbyJNcJTgICAgIDXACspgIeAp/aouvWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgGsN0+/F4cCNgQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE7QA/QbwMzAwgICPg7cAJxuHlDZty0owAAAABJRU5ErkJggg==',
'mime_type' => 'image/png',
'consent' => true,
'tier' => 'fast',
]),
]);
$response = curl_exec($ch);
curl_close($ch);
$result = json_decode($response, true);
print_r($result['data']);package main
import (
"fmt"
"io"
"net/http"
"strings"
)
func main() {
body := strings.NewReader(`{
"image_base64": "iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAAAAABQyaazAAAAgklEQVR42u3bQQoAIAgEQP//6fpCBsFWs2fBEbyJNcJTgICAgIDXACspgIeAp/aouvWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgGsN0+/F4cCNgQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE7QA/QbwMzAwgICPg7cAJxuHlDZty0owAAAABJRU5ErkJggg==",
"mime_type": "image/png",
"consent": true,
"tier": "fast"
}`)
req, err := http.NewRequest("POST", "https://api.96astroapi.com/v1/palmistry/palm-money", body)
if err != nil {
panic(err)
}
req.Header.Set("Authorization", "Bearer YOUR_API_KEY")
req.Header.Set("Content-Type", "application/json")
res, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer res.Body.Close()
out, _ := io.ReadAll(res.Body)
fmt.Println(res.Status, string(out))
}Example response (illustrative)
{
"data": {
"sections": {
"money": {
"observed": [
"An example observation about money."
],
"reading": "An example reading of money, based on what the photo shows.",
"advice": "One practical sentence."
}
},
"notice": "For reflection, not fact. This reading is not medical, legal or financial advice.",
"tier": "fast",
"language": "en"
},
"meta": {
"request_id": "req_00000000000000000000",
"api_version": "v1",
"credits_used": 0,
"warnings": [],
…Written by hand from the documented shape: AI readings are not captured automatically. Real text, token counts and credits differ.
Error responses
- 400invalid_request
- 401invalid_key, expired_key
- 402payment_required
- 403account_suspended, plan_upgrade_required, plan_family_not_included, key_scope_denied, ip_not_allowed, origin_not_allowed, publishable_key_not_allowed
- 404not_found
- 409idempotency_conflict
- 413payload_too_large
- 422invalid_request, unsupported_language
- 429rate_limited, quota_exhausted, spend_cap_reached, project_budget_exceeded
- 500computation_failed
- 502unavailable
- 503unavailable, maintenance, temporarily_unavailable
- 504deadline_exceeded
Errors are never charged. What each status means and what to do: errors.
Palm: Love
POSTAvailable
https://api.96astroapi.com/v1/palmistry/palm-loveLove and affection. Read from one photo of the palm by a vision model; the photo is not stored.
- Credits
- Metered, from 15 credits
- Input
- A photo
- Output
- JSON
- Delivery
- Direct response
- Languages
- 26 languages; translated term names with
labels
| Header | Value and description |
|---|---|
AuthorizationRequired | Bearer YOUR_API_KEYYour sandbox (sk_test_...) or live (sk_live_...) key. X-API-Key: <key> is accepted instead. |
Content-TypeRequired | application/jsonThe body is JSON. |
Idempotency-KeyOptional | <unique string>Makes retries safe: a repeated key with the same body replays the stored response and is never charged twice. (1 to 200 characters) |
| Field | Description |
|---|---|
image_base64stringRequired | The floor-plan image file, base64-encoded (a `data:image/...;base64,` prefix is accepted). PNG, JPEG or WebP; at most 3.75 MiB decoded and 8000 px a side. Limits: 1 to 5400000 characters Example: |
mime_typestring | nullOptional | The image's type. Required unless image_base64 is a data: URI; must match the file. Default: Allowed values: image/pngimage/jpegimage/webp Example: |
tierstringOptional | fast (Claude Haiku) or balanced (Sonnet). Sets the price range. Default: Allowed values: fastbalanced Example: |
consentbooleanRequired | Must be true: the person in the photo agreed to this reading, and is an adult or has a guardian's agreement. Allowed value: true Example: |
languagestringOptional | Output language (ISO 639-1). The values listed are the ones this capability supports; any other is refused with 422 unsupported_language. Identifiers, enum values and numbers never change with language. Default: Allowed values: enasbndeesfrguhiitjaknkomlmrnenlorpaplptrusitatetrur |
labelsstringOptional | Optional. Adds `meta.labels`: translated display names for the identifiers in the answer. `data` is unchanged. Free. Any other code is refused with 422 unsupported_language. Allowed values: asbndeesfrguhiitknkomlmrnenlorpaplptrusitatetrur |
Response · fields in data
The response contract: required fields are always present.
sections· objectnotice· stringtier· stringlanguage· string
Example request
curl -X POST https://api.96astroapi.com/v1/palmistry/palm-love \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"image_base64": "iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAAAAABQyaazAAAAgklEQVR42u3bQQoAIAgEQP//6fpCBsFWs2fBEbyJNcJTgICAgIDXACspgIeAp/aouvWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgGsN0+/F4cCNgQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE7QA/QbwMzAwgICPg7cAJxuHlDZty0owAAAABJRU5ErkJggg==",
"mime_type": "image/png",
"consent": true,
"tier": "fast"
}'const response = await fetch("https://api.96astroapi.com/v1/palmistry/palm-love", {
method: "POST",
headers: {
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({
"image_base64": "iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAAAAABQyaazAAAAgklEQVR42u3bQQoAIAgEQP//6fpCBsFWs2fBEbyJNcJTgICAgIDXACspgIeAp/aouvWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgGsN0+/F4cCNgQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE7QA/QbwMzAwgICPg7cAJxuHlDZty0owAAAABJRU5ErkJggg==",
"mime_type": "image/png",
"consent": true,
"tier": "fast"
}),
});
const { data, meta } = await response.json();
console.log(data);import { Astro96Client } from "@96astro/api";
const astro = new Astro96Client({ apiKey: "YOUR_API_KEY" });
const { data, meta } = await astro.palmistry.palmLove({
"image_base64": "iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAAAAABQyaazAAAAgklEQVR42u3bQQoAIAgEQP//6fpCBsFWs2fBEbyJNcJTgICAgIDXACspgIeAp/aouvWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgGsN0+/F4cCNgQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE7QA/QbwMzAwgICPg7cAJxuHlDZty0owAAAABJRU5ErkJggg==",
"mime_type": "image/png",
"consent": true,
"tier": "fast"
});
console.log(data);import requests
response = requests.post(
"https://api.96astroapi.com/v1/palmistry/palm-love",
headers={
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
json={
"image_base64": "iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAAAAABQyaazAAAAgklEQVR42u3bQQoAIAgEQP//6fpCBsFWs2fBEbyJNcJTgICAgIDXACspgIeAp/aouvWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgGsN0+/F4cCNgQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE7QA/QbwMzAwgICPg7cAJxuHlDZty0owAAAABJRU5ErkJggg==",
"mime_type": "image/png",
"consent": True,
"tier": "fast",
},
timeout=60,
)
response.raise_for_status()
data = response.json()["data"]
print(data)from astro96_api import Astro96Client
astro = Astro96Client(api_key="YOUR_API_KEY")
res = astro.palmistry.palm_love({
"image_base64": "iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAAAAABQyaazAAAAgklEQVR42u3bQQoAIAgEQP//6fpCBsFWs2fBEbyJNcJTgICAgIDXACspgIeAp/aouvWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgGsN0+/F4cCNgQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE7QA/QbwMzAwgICPg7cAJxuHlDZty0owAAAABJRU5ErkJggg==",
"mime_type": "image/png",
"consent": True,
"tier": "fast",
})
print(res.data)<?php
$ch = curl_init('https://api.96astroapi.com/v1/palmistry/palm-love');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer YOUR_API_KEY',
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => json_encode([
'image_base64' => 'iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAAAAABQyaazAAAAgklEQVR42u3bQQoAIAgEQP//6fpCBsFWs2fBEbyJNcJTgICAgIDXACspgIeAp/aouvWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgGsN0+/F4cCNgQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE7QA/QbwMzAwgICPg7cAJxuHlDZty0owAAAABJRU5ErkJggg==',
'mime_type' => 'image/png',
'consent' => true,
'tier' => 'fast',
]),
]);
$response = curl_exec($ch);
curl_close($ch);
$result = json_decode($response, true);
print_r($result['data']);package main
import (
"fmt"
"io"
"net/http"
"strings"
)
func main() {
body := strings.NewReader(`{
"image_base64": "iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAAAAABQyaazAAAAgklEQVR42u3bQQoAIAgEQP//6fpCBsFWs2fBEbyJNcJTgICAgIDXACspgIeAp/aouvWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgGsN0+/F4cCNgQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE7QA/QbwMzAwgICPg7cAJxuHlDZty0owAAAABJRU5ErkJggg==",
"mime_type": "image/png",
"consent": true,
"tier": "fast"
}`)
req, err := http.NewRequest("POST", "https://api.96astroapi.com/v1/palmistry/palm-love", body)
if err != nil {
panic(err)
}
req.Header.Set("Authorization", "Bearer YOUR_API_KEY")
req.Header.Set("Content-Type", "application/json")
res, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer res.Body.Close()
out, _ := io.ReadAll(res.Body)
fmt.Println(res.Status, string(out))
}Example response (illustrative)
{
"data": {
"sections": {
"love": {
"observed": [
"An example observation about love."
],
"reading": "An example reading of love, based on what the photo shows.",
"advice": "One practical sentence."
}
},
"notice": "For reflection, not fact. This reading is not medical, legal or financial advice.",
"tier": "fast",
"language": "en"
},
"meta": {
"request_id": "req_00000000000000000000",
"api_version": "v1",
"credits_used": 0,
"warnings": [],
…Written by hand from the documented shape: AI readings are not captured automatically. Real text, token counts and credits differ.
Error responses
- 400invalid_request
- 401invalid_key, expired_key
- 402payment_required
- 403account_suspended, plan_upgrade_required, plan_family_not_included, key_scope_denied, ip_not_allowed, origin_not_allowed, publishable_key_not_allowed
- 404not_found
- 409idempotency_conflict
- 413payload_too_large
- 422invalid_request, unsupported_language
- 429rate_limited, quota_exhausted, spend_cap_reached, project_budget_exceeded
- 500computation_failed
- 502unavailable
- 503unavailable, maintenance, temporarily_unavailable
- 504deadline_exceeded
Errors are never charged. What each status means and what to do: errors.
Palm: Marriage
POSTAvailable
https://api.96astroapi.com/v1/palmistry/palm-marriageMarriage and long partnership. Read from one photo of the palm by a vision model; the photo is not stored.
- Credits
- Metered, from 15 credits
- Input
- A photo
- Output
- JSON
- Delivery
- Direct response
- Languages
- 26 languages; translated term names with
labels
| Header | Value and description |
|---|---|
AuthorizationRequired | Bearer YOUR_API_KEYYour sandbox (sk_test_...) or live (sk_live_...) key. X-API-Key: <key> is accepted instead. |
Content-TypeRequired | application/jsonThe body is JSON. |
Idempotency-KeyOptional | <unique string>Makes retries safe: a repeated key with the same body replays the stored response and is never charged twice. (1 to 200 characters) |
| Field | Description |
|---|---|
image_base64stringRequired | The floor-plan image file, base64-encoded (a `data:image/...;base64,` prefix is accepted). PNG, JPEG or WebP; at most 3.75 MiB decoded and 8000 px a side. Limits: 1 to 5400000 characters Example: |
mime_typestring | nullOptional | The image's type. Required unless image_base64 is a data: URI; must match the file. Default: Allowed values: image/pngimage/jpegimage/webp Example: |
tierstringOptional | fast (Claude Haiku) or balanced (Sonnet). Sets the price range. Default: Allowed values: fastbalanced Example: |
consentbooleanRequired | Must be true: the person in the photo agreed to this reading, and is an adult or has a guardian's agreement. Allowed value: true Example: |
languagestringOptional | Output language (ISO 639-1). The values listed are the ones this capability supports; any other is refused with 422 unsupported_language. Identifiers, enum values and numbers never change with language. Default: Allowed values: enasbndeesfrguhiitjaknkomlmrnenlorpaplptrusitatetrur |
labelsstringOptional | Optional. Adds `meta.labels`: translated display names for the identifiers in the answer. `data` is unchanged. Free. Any other code is refused with 422 unsupported_language. Allowed values: asbndeesfrguhiitknkomlmrnenlorpaplptrusitatetrur |
Response · fields in data
The response contract: required fields are always present.
sections· objectnotice· stringtier· stringlanguage· string
Example request
curl -X POST https://api.96astroapi.com/v1/palmistry/palm-marriage \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"image_base64": "iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAAAAABQyaazAAAAgklEQVR42u3bQQoAIAgEQP//6fpCBsFWs2fBEbyJNcJTgICAgIDXACspgIeAp/aouvWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgGsN0+/F4cCNgQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE7QA/QbwMzAwgICPg7cAJxuHlDZty0owAAAABJRU5ErkJggg==",
"mime_type": "image/png",
"consent": true,
"tier": "fast"
}'const response = await fetch("https://api.96astroapi.com/v1/palmistry/palm-marriage", {
method: "POST",
headers: {
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({
"image_base64": "iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAAAAABQyaazAAAAgklEQVR42u3bQQoAIAgEQP//6fpCBsFWs2fBEbyJNcJTgICAgIDXACspgIeAp/aouvWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgGsN0+/F4cCNgQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE7QA/QbwMzAwgICPg7cAJxuHlDZty0owAAAABJRU5ErkJggg==",
"mime_type": "image/png",
"consent": true,
"tier": "fast"
}),
});
const { data, meta } = await response.json();
console.log(data);import { Astro96Client } from "@96astro/api";
const astro = new Astro96Client({ apiKey: "YOUR_API_KEY" });
const { data, meta } = await astro.palmistry.palmMarriage({
"image_base64": "iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAAAAABQyaazAAAAgklEQVR42u3bQQoAIAgEQP//6fpCBsFWs2fBEbyJNcJTgICAgIDXACspgIeAp/aouvWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgGsN0+/F4cCNgQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE7QA/QbwMzAwgICPg7cAJxuHlDZty0owAAAABJRU5ErkJggg==",
"mime_type": "image/png",
"consent": true,
"tier": "fast"
});
console.log(data);import requests
response = requests.post(
"https://api.96astroapi.com/v1/palmistry/palm-marriage",
headers={
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
json={
"image_base64": "iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAAAAABQyaazAAAAgklEQVR42u3bQQoAIAgEQP//6fpCBsFWs2fBEbyJNcJTgICAgIDXACspgIeAp/aouvWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgGsN0+/F4cCNgQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE7QA/QbwMzAwgICPg7cAJxuHlDZty0owAAAABJRU5ErkJggg==",
"mime_type": "image/png",
"consent": True,
"tier": "fast",
},
timeout=60,
)
response.raise_for_status()
data = response.json()["data"]
print(data)from astro96_api import Astro96Client
astro = Astro96Client(api_key="YOUR_API_KEY")
res = astro.palmistry.palm_marriage({
"image_base64": "iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAAAAABQyaazAAAAgklEQVR42u3bQQoAIAgEQP//6fpCBsFWs2fBEbyJNcJTgICAgIDXACspgIeAp/aouvWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgGsN0+/F4cCNgQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE7QA/QbwMzAwgICPg7cAJxuHlDZty0owAAAABJRU5ErkJggg==",
"mime_type": "image/png",
"consent": True,
"tier": "fast",
})
print(res.data)<?php
$ch = curl_init('https://api.96astroapi.com/v1/palmistry/palm-marriage');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer YOUR_API_KEY',
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => json_encode([
'image_base64' => 'iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAAAAABQyaazAAAAgklEQVR42u3bQQoAIAgEQP//6fpCBsFWs2fBEbyJNcJTgICAgIDXACspgIeAp/aouvWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgGsN0+/F4cCNgQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE7QA/QbwMzAwgICPg7cAJxuHlDZty0owAAAABJRU5ErkJggg==',
'mime_type' => 'image/png',
'consent' => true,
'tier' => 'fast',
]),
]);
$response = curl_exec($ch);
curl_close($ch);
$result = json_decode($response, true);
print_r($result['data']);package main
import (
"fmt"
"io"
"net/http"
"strings"
)
func main() {
body := strings.NewReader(`{
"image_base64": "iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAAAAABQyaazAAAAgklEQVR42u3bQQoAIAgEQP//6fpCBsFWs2fBEbyJNcJTgICAgIDXACspgIeAp/aouvWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgGsN0+/F4cCNgQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE7QA/QbwMzAwgICPg7cAJxuHlDZty0owAAAABJRU5ErkJggg==",
"mime_type": "image/png",
"consent": true,
"tier": "fast"
}`)
req, err := http.NewRequest("POST", "https://api.96astroapi.com/v1/palmistry/palm-marriage", body)
if err != nil {
panic(err)
}
req.Header.Set("Authorization", "Bearer YOUR_API_KEY")
req.Header.Set("Content-Type", "application/json")
res, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer res.Body.Close()
out, _ := io.ReadAll(res.Body)
fmt.Println(res.Status, string(out))
}Example response (illustrative)
{
"data": {
"sections": {
"marriage": {
"observed": [
"An example observation about marriage."
],
"reading": "An example reading of marriage, based on what the photo shows.",
"advice": "One practical sentence."
}
},
"notice": "For reflection, not fact. This reading is not medical, legal or financial advice.",
"tier": "fast",
"language": "en"
},
"meta": {
"request_id": "req_00000000000000000000",
"api_version": "v1",
"credits_used": 0,
"warnings": [],
…Written by hand from the documented shape: AI readings are not captured automatically. Real text, token counts and credits differ.
Error responses
- 400invalid_request
- 401invalid_key, expired_key
- 402payment_required
- 403account_suspended, plan_upgrade_required, plan_family_not_included, key_scope_denied, ip_not_allowed, origin_not_allowed, publishable_key_not_allowed
- 404not_found
- 409idempotency_conflict
- 413payload_too_large
- 422invalid_request, unsupported_language
- 429rate_limited, quota_exhausted, spend_cap_reached, project_budget_exceeded
- 500computation_failed
- 502unavailable
- 503unavailable, maintenance, temporarily_unavailable
- 504deadline_exceeded
Errors are never charged. What each status means and what to do: errors.
Palm: Vitality
POSTAvailable
https://api.96astroapi.com/v1/palmistry/palm-healthGeneral vitality and habits, never a diagnosis. Read from one photo of the palm by a vision model; the photo is not stored.
- Credits
- Metered, from 15 credits
- Input
- A photo
- Output
- JSON
- Delivery
- Direct response
- Languages
- 26 languages; translated term names with
labels
| Header | Value and description |
|---|---|
AuthorizationRequired | Bearer YOUR_API_KEYYour sandbox (sk_test_...) or live (sk_live_...) key. X-API-Key: <key> is accepted instead. |
Content-TypeRequired | application/jsonThe body is JSON. |
Idempotency-KeyOptional | <unique string>Makes retries safe: a repeated key with the same body replays the stored response and is never charged twice. (1 to 200 characters) |
| Field | Description |
|---|---|
image_base64stringRequired | The floor-plan image file, base64-encoded (a `data:image/...;base64,` prefix is accepted). PNG, JPEG or WebP; at most 3.75 MiB decoded and 8000 px a side. Limits: 1 to 5400000 characters Example: |
mime_typestring | nullOptional | The image's type. Required unless image_base64 is a data: URI; must match the file. Default: Allowed values: image/pngimage/jpegimage/webp Example: |
tierstringOptional | fast (Claude Haiku) or balanced (Sonnet). Sets the price range. Default: Allowed values: fastbalanced Example: |
consentbooleanRequired | Must be true: the person in the photo agreed to this reading, and is an adult or has a guardian's agreement. Allowed value: true Example: |
languagestringOptional | Output language (ISO 639-1). The values listed are the ones this capability supports; any other is refused with 422 unsupported_language. Identifiers, enum values and numbers never change with language. Default: Allowed values: enasbndeesfrguhiitjaknkomlmrnenlorpaplptrusitatetrur |
labelsstringOptional | Optional. Adds `meta.labels`: translated display names for the identifiers in the answer. `data` is unchanged. Free. Any other code is refused with 422 unsupported_language. Allowed values: asbndeesfrguhiitknkomlmrnenlorpaplptrusitatetrur |
Response · fields in data
The response contract: required fields are always present.
sections· objectnotice· stringtier· stringlanguage· string
Example request
curl -X POST https://api.96astroapi.com/v1/palmistry/palm-health \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"image_base64": "iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAAAAABQyaazAAAAgklEQVR42u3bQQoAIAgEQP//6fpCBsFWs2fBEbyJNcJTgICAgIDXACspgIeAp/aouvWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgGsN0+/F4cCNgQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE7QA/QbwMzAwgICPg7cAJxuHlDZty0owAAAABJRU5ErkJggg==",
"mime_type": "image/png",
"consent": true,
"tier": "fast"
}'const response = await fetch("https://api.96astroapi.com/v1/palmistry/palm-health", {
method: "POST",
headers: {
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({
"image_base64": "iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAAAAABQyaazAAAAgklEQVR42u3bQQoAIAgEQP//6fpCBsFWs2fBEbyJNcJTgICAgIDXACspgIeAp/aouvWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgGsN0+/F4cCNgQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE7QA/QbwMzAwgICPg7cAJxuHlDZty0owAAAABJRU5ErkJggg==",
"mime_type": "image/png",
"consent": true,
"tier": "fast"
}),
});
const { data, meta } = await response.json();
console.log(data);import { Astro96Client } from "@96astro/api";
const astro = new Astro96Client({ apiKey: "YOUR_API_KEY" });
const { data, meta } = await astro.palmistry.palmHealth({
"image_base64": "iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAAAAABQyaazAAAAgklEQVR42u3bQQoAIAgEQP//6fpCBsFWs2fBEbyJNcJTgICAgIDXACspgIeAp/aouvWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgGsN0+/F4cCNgQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE7QA/QbwMzAwgICPg7cAJxuHlDZty0owAAAABJRU5ErkJggg==",
"mime_type": "image/png",
"consent": true,
"tier": "fast"
});
console.log(data);import requests
response = requests.post(
"https://api.96astroapi.com/v1/palmistry/palm-health",
headers={
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
json={
"image_base64": "iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAAAAABQyaazAAAAgklEQVR42u3bQQoAIAgEQP//6fpCBsFWs2fBEbyJNcJTgICAgIDXACspgIeAp/aouvWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgGsN0+/F4cCNgQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE7QA/QbwMzAwgICPg7cAJxuHlDZty0owAAAABJRU5ErkJggg==",
"mime_type": "image/png",
"consent": True,
"tier": "fast",
},
timeout=60,
)
response.raise_for_status()
data = response.json()["data"]
print(data)from astro96_api import Astro96Client
astro = Astro96Client(api_key="YOUR_API_KEY")
res = astro.palmistry.palm_health({
"image_base64": "iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAAAAABQyaazAAAAgklEQVR42u3bQQoAIAgEQP//6fpCBsFWs2fBEbyJNcJTgICAgIDXACspgIeAp/aouvWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgGsN0+/F4cCNgQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE7QA/QbwMzAwgICPg7cAJxuHlDZty0owAAAABJRU5ErkJggg==",
"mime_type": "image/png",
"consent": True,
"tier": "fast",
})
print(res.data)<?php
$ch = curl_init('https://api.96astroapi.com/v1/palmistry/palm-health');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer YOUR_API_KEY',
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => json_encode([
'image_base64' => 'iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAAAAABQyaazAAAAgklEQVR42u3bQQoAIAgEQP//6fpCBsFWs2fBEbyJNcJTgICAgIDXACspgIeAp/aouvWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgGsN0+/F4cCNgQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE7QA/QbwMzAwgICPg7cAJxuHlDZty0owAAAABJRU5ErkJggg==',
'mime_type' => 'image/png',
'consent' => true,
'tier' => 'fast',
]),
]);
$response = curl_exec($ch);
curl_close($ch);
$result = json_decode($response, true);
print_r($result['data']);package main
import (
"fmt"
"io"
"net/http"
"strings"
)
func main() {
body := strings.NewReader(`{
"image_base64": "iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAAAAABQyaazAAAAgklEQVR42u3bQQoAIAgEQP//6fpCBsFWs2fBEbyJNcJTgICAgIDXACspgIeAp/aouvWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgGsN0+/F4cCNgQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE7QA/QbwMzAwgICPg7cAJxuHlDZty0owAAAABJRU5ErkJggg==",
"mime_type": "image/png",
"consent": true,
"tier": "fast"
}`)
req, err := http.NewRequest("POST", "https://api.96astroapi.com/v1/palmistry/palm-health", body)
if err != nil {
panic(err)
}
req.Header.Set("Authorization", "Bearer YOUR_API_KEY")
req.Header.Set("Content-Type", "application/json")
res, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer res.Body.Close()
out, _ := io.ReadAll(res.Body)
fmt.Println(res.Status, string(out))
}Example response (illustrative)
{
"data": {
"sections": {
"health": {
"observed": [
"An example observation about health."
],
"reading": "An example reading of health, based on what the photo shows.",
"advice": "One practical sentence."
}
},
"notice": "For reflection, not fact. This reading is not medical, legal or financial advice.",
"tier": "fast",
"language": "en"
},
"meta": {
"request_id": "req_00000000000000000000",
"api_version": "v1",
"credits_used": 0,
"warnings": [],
…Written by hand from the documented shape: AI readings are not captured automatically. Real text, token counts and credits differ.
Error responses
- 400invalid_request
- 401invalid_key, expired_key
- 402payment_required
- 403account_suspended, plan_upgrade_required, plan_family_not_included, key_scope_denied, ip_not_allowed, origin_not_allowed, publishable_key_not_allowed
- 404not_found
- 409idempotency_conflict
- 413payload_too_large
- 422invalid_request, unsupported_language
- 429rate_limited, quota_exhausted, spend_cap_reached, project_budget_exceeded
- 500computation_failed
- 502unavailable
- 503unavailable, maintenance, temporarily_unavailable
- 504deadline_exceeded
Errors are never charged. What each status means and what to do: errors.
Palm: Challenges
POSTAvailable
https://api.96astroapi.com/v1/palmistry/palm-challengesDifficulties to prepare for. Read from one photo of the palm by a vision model; the photo is not stored.
- Credits
- Metered, from 15 credits
- Input
- A photo
- Output
- JSON
- Delivery
- Direct response
- Languages
- 26 languages; translated term names with
labels
| Header | Value and description |
|---|---|
AuthorizationRequired | Bearer YOUR_API_KEYYour sandbox (sk_test_...) or live (sk_live_...) key. X-API-Key: <key> is accepted instead. |
Content-TypeRequired | application/jsonThe body is JSON. |
Idempotency-KeyOptional | <unique string>Makes retries safe: a repeated key with the same body replays the stored response and is never charged twice. (1 to 200 characters) |
| Field | Description |
|---|---|
image_base64stringRequired | The floor-plan image file, base64-encoded (a `data:image/...;base64,` prefix is accepted). PNG, JPEG or WebP; at most 3.75 MiB decoded and 8000 px a side. Limits: 1 to 5400000 characters Example: |
mime_typestring | nullOptional | The image's type. Required unless image_base64 is a data: URI; must match the file. Default: Allowed values: image/pngimage/jpegimage/webp Example: |
tierstringOptional | fast (Claude Haiku) or balanced (Sonnet). Sets the price range. Default: Allowed values: fastbalanced Example: |
consentbooleanRequired | Must be true: the person in the photo agreed to this reading, and is an adult or has a guardian's agreement. Allowed value: true Example: |
languagestringOptional | Output language (ISO 639-1). The values listed are the ones this capability supports; any other is refused with 422 unsupported_language. Identifiers, enum values and numbers never change with language. Default: Allowed values: enasbndeesfrguhiitjaknkomlmrnenlorpaplptrusitatetrur |
labelsstringOptional | Optional. Adds `meta.labels`: translated display names for the identifiers in the answer. `data` is unchanged. Free. Any other code is refused with 422 unsupported_language. Allowed values: asbndeesfrguhiitknkomlmrnenlorpaplptrusitatetrur |
Response · fields in data
The response contract: required fields are always present.
sections· objectnotice· stringtier· stringlanguage· string
Example request
curl -X POST https://api.96astroapi.com/v1/palmistry/palm-challenges \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"image_base64": "iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAAAAABQyaazAAAAgklEQVR42u3bQQoAIAgEQP//6fpCBsFWs2fBEbyJNcJTgICAgIDXACspgIeAp/aouvWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgGsN0+/F4cCNgQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE7QA/QbwMzAwgICPg7cAJxuHlDZty0owAAAABJRU5ErkJggg==",
"mime_type": "image/png",
"consent": true,
"tier": "fast"
}'const response = await fetch("https://api.96astroapi.com/v1/palmistry/palm-challenges", {
method: "POST",
headers: {
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({
"image_base64": "iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAAAAABQyaazAAAAgklEQVR42u3bQQoAIAgEQP//6fpCBsFWs2fBEbyJNcJTgICAgIDXACspgIeAp/aouvWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgGsN0+/F4cCNgQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE7QA/QbwMzAwgICPg7cAJxuHlDZty0owAAAABJRU5ErkJggg==",
"mime_type": "image/png",
"consent": true,
"tier": "fast"
}),
});
const { data, meta } = await response.json();
console.log(data);import { Astro96Client } from "@96astro/api";
const astro = new Astro96Client({ apiKey: "YOUR_API_KEY" });
const { data, meta } = await astro.palmistry.palmChallenges({
"image_base64": "iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAAAAABQyaazAAAAgklEQVR42u3bQQoAIAgEQP//6fpCBsFWs2fBEbyJNcJTgICAgIDXACspgIeAp/aouvWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgGsN0+/F4cCNgQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE7QA/QbwMzAwgICPg7cAJxuHlDZty0owAAAABJRU5ErkJggg==",
"mime_type": "image/png",
"consent": true,
"tier": "fast"
});
console.log(data);import requests
response = requests.post(
"https://api.96astroapi.com/v1/palmistry/palm-challenges",
headers={
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
json={
"image_base64": "iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAAAAABQyaazAAAAgklEQVR42u3bQQoAIAgEQP//6fpCBsFWs2fBEbyJNcJTgICAgIDXACspgIeAp/aouvWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgGsN0+/F4cCNgQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE7QA/QbwMzAwgICPg7cAJxuHlDZty0owAAAABJRU5ErkJggg==",
"mime_type": "image/png",
"consent": True,
"tier": "fast",
},
timeout=60,
)
response.raise_for_status()
data = response.json()["data"]
print(data)from astro96_api import Astro96Client
astro = Astro96Client(api_key="YOUR_API_KEY")
res = astro.palmistry.palm_challenges({
"image_base64": "iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAAAAABQyaazAAAAgklEQVR42u3bQQoAIAgEQP//6fpCBsFWs2fBEbyJNcJTgICAgIDXACspgIeAp/aouvWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgGsN0+/F4cCNgQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE7QA/QbwMzAwgICPg7cAJxuHlDZty0owAAAABJRU5ErkJggg==",
"mime_type": "image/png",
"consent": True,
"tier": "fast",
})
print(res.data)<?php
$ch = curl_init('https://api.96astroapi.com/v1/palmistry/palm-challenges');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer YOUR_API_KEY',
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => json_encode([
'image_base64' => 'iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAAAAABQyaazAAAAgklEQVR42u3bQQoAIAgEQP//6fpCBsFWs2fBEbyJNcJTgICAgIDXACspgIeAp/aouvWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgGsN0+/F4cCNgQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE7QA/QbwMzAwgICPg7cAJxuHlDZty0owAAAABJRU5ErkJggg==',
'mime_type' => 'image/png',
'consent' => true,
'tier' => 'fast',
]),
]);
$response = curl_exec($ch);
curl_close($ch);
$result = json_decode($response, true);
print_r($result['data']);package main
import (
"fmt"
"io"
"net/http"
"strings"
)
func main() {
body := strings.NewReader(`{
"image_base64": "iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAAAAABQyaazAAAAgklEQVR42u3bQQoAIAgEQP//6fpCBsFWs2fBEbyJNcJTgICAgIDXACspgIeAp/aouvWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgGsN0+/F4cCNgQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE7QA/QbwMzAwgICPg7cAJxuHlDZty0owAAAABJRU5ErkJggg==",
"mime_type": "image/png",
"consent": true,
"tier": "fast"
}`)
req, err := http.NewRequest("POST", "https://api.96astroapi.com/v1/palmistry/palm-challenges", body)
if err != nil {
panic(err)
}
req.Header.Set("Authorization", "Bearer YOUR_API_KEY")
req.Header.Set("Content-Type", "application/json")
res, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer res.Body.Close()
out, _ := io.ReadAll(res.Body)
fmt.Println(res.Status, string(out))
}Example response (illustrative)
{
"data": {
"sections": {
"challenges": {
"observed": [
"An example observation about challenges."
],
"reading": "An example reading of challenges, based on what the photo shows.",
"advice": "One practical sentence."
}
},
"notice": "For reflection, not fact. This reading is not medical, legal or financial advice.",
"tier": "fast",
"language": "en"
},
"meta": {
"request_id": "req_00000000000000000000",
"api_version": "v1",
"credits_used": 0,
"warnings": [],
…Written by hand from the documented shape: AI readings are not captured automatically. Real text, token counts and credits differ.
Error responses
- 400invalid_request
- 401invalid_key, expired_key
- 402payment_required
- 403account_suspended, plan_upgrade_required, plan_family_not_included, key_scope_denied, ip_not_allowed, origin_not_allowed, publishable_key_not_allowed
- 404not_found
- 409idempotency_conflict
- 413payload_too_large
- 422invalid_request, unsupported_language
- 429rate_limited, quota_exhausted, spend_cap_reached, project_budget_exceeded
- 500computation_failed
- 502unavailable
- 503unavailable, maintenance, temporarily_unavailable
- 504deadline_exceeded
Errors are never charged. What each status means and what to do: errors.
Palm: Luck
POSTAvailable
https://api.96astroapi.com/v1/palmistry/palm-luckFortune and timing. Read from one photo of the palm by a vision model; the photo is not stored.
- Credits
- Metered, from 15 credits
- Input
- A photo
- Output
- JSON
- Delivery
- Direct response
- Languages
- 26 languages; translated term names with
labels
| Header | Value and description |
|---|---|
AuthorizationRequired | Bearer YOUR_API_KEYYour sandbox (sk_test_...) or live (sk_live_...) key. X-API-Key: <key> is accepted instead. |
Content-TypeRequired | application/jsonThe body is JSON. |
Idempotency-KeyOptional | <unique string>Makes retries safe: a repeated key with the same body replays the stored response and is never charged twice. (1 to 200 characters) |
| Field | Description |
|---|---|
image_base64stringRequired | The floor-plan image file, base64-encoded (a `data:image/...;base64,` prefix is accepted). PNG, JPEG or WebP; at most 3.75 MiB decoded and 8000 px a side. Limits: 1 to 5400000 characters Example: |
mime_typestring | nullOptional | The image's type. Required unless image_base64 is a data: URI; must match the file. Default: Allowed values: image/pngimage/jpegimage/webp Example: |
tierstringOptional | fast (Claude Haiku) or balanced (Sonnet). Sets the price range. Default: Allowed values: fastbalanced Example: |
consentbooleanRequired | Must be true: the person in the photo agreed to this reading, and is an adult or has a guardian's agreement. Allowed value: true Example: |
languagestringOptional | Output language (ISO 639-1). The values listed are the ones this capability supports; any other is refused with 422 unsupported_language. Identifiers, enum values and numbers never change with language. Default: Allowed values: enasbndeesfrguhiitjaknkomlmrnenlorpaplptrusitatetrur |
labelsstringOptional | Optional. Adds `meta.labels`: translated display names for the identifiers in the answer. `data` is unchanged. Free. Any other code is refused with 422 unsupported_language. Allowed values: asbndeesfrguhiitknkomlmrnenlorpaplptrusitatetrur |
Response · fields in data
The response contract: required fields are always present.
sections· objectnotice· stringtier· stringlanguage· string
Example request
curl -X POST https://api.96astroapi.com/v1/palmistry/palm-luck \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"image_base64": "iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAAAAABQyaazAAAAgklEQVR42u3bQQoAIAgEQP//6fpCBsFWs2fBEbyJNcJTgICAgIDXACspgIeAp/aouvWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgGsN0+/F4cCNgQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE7QA/QbwMzAwgICPg7cAJxuHlDZty0owAAAABJRU5ErkJggg==",
"mime_type": "image/png",
"consent": true,
"tier": "fast"
}'const response = await fetch("https://api.96astroapi.com/v1/palmistry/palm-luck", {
method: "POST",
headers: {
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({
"image_base64": "iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAAAAABQyaazAAAAgklEQVR42u3bQQoAIAgEQP//6fpCBsFWs2fBEbyJNcJTgICAgIDXACspgIeAp/aouvWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgGsN0+/F4cCNgQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE7QA/QbwMzAwgICPg7cAJxuHlDZty0owAAAABJRU5ErkJggg==",
"mime_type": "image/png",
"consent": true,
"tier": "fast"
}),
});
const { data, meta } = await response.json();
console.log(data);import { Astro96Client } from "@96astro/api";
const astro = new Astro96Client({ apiKey: "YOUR_API_KEY" });
const { data, meta } = await astro.palmistry.palmLuck({
"image_base64": "iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAAAAABQyaazAAAAgklEQVR42u3bQQoAIAgEQP//6fpCBsFWs2fBEbyJNcJTgICAgIDXACspgIeAp/aouvWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgGsN0+/F4cCNgQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE7QA/QbwMzAwgICPg7cAJxuHlDZty0owAAAABJRU5ErkJggg==",
"mime_type": "image/png",
"consent": true,
"tier": "fast"
});
console.log(data);import requests
response = requests.post(
"https://api.96astroapi.com/v1/palmistry/palm-luck",
headers={
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
json={
"image_base64": "iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAAAAABQyaazAAAAgklEQVR42u3bQQoAIAgEQP//6fpCBsFWs2fBEbyJNcJTgICAgIDXACspgIeAp/aouvWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgGsN0+/F4cCNgQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE7QA/QbwMzAwgICPg7cAJxuHlDZty0owAAAABJRU5ErkJggg==",
"mime_type": "image/png",
"consent": True,
"tier": "fast",
},
timeout=60,
)
response.raise_for_status()
data = response.json()["data"]
print(data)from astro96_api import Astro96Client
astro = Astro96Client(api_key="YOUR_API_KEY")
res = astro.palmistry.palm_luck({
"image_base64": "iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAAAAABQyaazAAAAgklEQVR42u3bQQoAIAgEQP//6fpCBsFWs2fBEbyJNcJTgICAgIDXACspgIeAp/aouvWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgGsN0+/F4cCNgQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE7QA/QbwMzAwgICPg7cAJxuHlDZty0owAAAABJRU5ErkJggg==",
"mime_type": "image/png",
"consent": True,
"tier": "fast",
})
print(res.data)<?php
$ch = curl_init('https://api.96astroapi.com/v1/palmistry/palm-luck');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer YOUR_API_KEY',
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => json_encode([
'image_base64' => 'iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAAAAABQyaazAAAAgklEQVR42u3bQQoAIAgEQP//6fpCBsFWs2fBEbyJNcJTgICAgIDXACspgIeAp/aouvWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgGsN0+/F4cCNgQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE7QA/QbwMzAwgICPg7cAJxuHlDZty0owAAAABJRU5ErkJggg==',
'mime_type' => 'image/png',
'consent' => true,
'tier' => 'fast',
]),
]);
$response = curl_exec($ch);
curl_close($ch);
$result = json_decode($response, true);
print_r($result['data']);package main
import (
"fmt"
"io"
"net/http"
"strings"
)
func main() {
body := strings.NewReader(`{
"image_base64": "iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAAAAABQyaazAAAAgklEQVR42u3bQQoAIAgEQP//6fpCBsFWs2fBEbyJNcJTgICAgIDXACspgIeAp/aouvWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgGsN0+/F4cCNgQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE7QA/QbwMzAwgICPg7cAJxuHlDZty0owAAAABJRU5ErkJggg==",
"mime_type": "image/png",
"consent": true,
"tier": "fast"
}`)
req, err := http.NewRequest("POST", "https://api.96astroapi.com/v1/palmistry/palm-luck", body)
if err != nil {
panic(err)
}
req.Header.Set("Authorization", "Bearer YOUR_API_KEY")
req.Header.Set("Content-Type", "application/json")
res, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer res.Body.Close()
out, _ := io.ReadAll(res.Body)
fmt.Println(res.Status, string(out))
}Example response (illustrative)
{
"data": {
"sections": {
"luck": {
"observed": [
"An example observation about luck."
],
"reading": "An example reading of luck, based on what the photo shows.",
"advice": "One practical sentence."
}
},
"notice": "For reflection, not fact. This reading is not medical, legal or financial advice.",
"tier": "fast",
"language": "en"
},
"meta": {
"request_id": "req_00000000000000000000",
"api_version": "v1",
"credits_used": 0,
"warnings": [],
…Written by hand from the documented shape: AI readings are not captured automatically. Real text, token counts and credits differ.
Error responses
- 400invalid_request
- 401invalid_key, expired_key
- 402payment_required
- 403account_suspended, plan_upgrade_required, plan_family_not_included, key_scope_denied, ip_not_allowed, origin_not_allowed, publishable_key_not_allowed
- 404not_found
- 409idempotency_conflict
- 413payload_too_large
- 422invalid_request, unsupported_language
- 429rate_limited, quota_exhausted, spend_cap_reached, project_budget_exceeded
- 500computation_failed
- 502unavailable
- 503unavailable, maintenance, temporarily_unavailable
- 504deadline_exceeded
Errors are never charged. What each status means and what to do: errors.
Palm: Ask a Question
POSTAvailable
https://api.96astroapi.com/v1/palmistry/palm-questionOne question of your own, up to 300 characters, answered from a photo of the palm, with the full reading it draws on.
- Credits
- Metered, from 15 credits
- Input
- A photo
- Output
- JSON
- Delivery
- Direct response
- Languages
- 26 languages; translated term names with
labels
| Header | Value and description |
|---|---|
AuthorizationRequired | Bearer YOUR_API_KEYYour sandbox (sk_test_...) or live (sk_live_...) key. X-API-Key: <key> is accepted instead. |
Content-TypeRequired | application/jsonThe body is JSON. |
Idempotency-KeyOptional | <unique string>Makes retries safe: a repeated key with the same body replays the stored response and is never charged twice. (1 to 200 characters) |
| Field | Description |
|---|---|
image_base64stringRequired | The floor-plan image file, base64-encoded (a `data:image/...;base64,` prefix is accepted). PNG, JPEG or WebP; at most 3.75 MiB decoded and 8000 px a side. Limits: 1 to 5400000 characters Example: |
mime_typestring | nullOptional | The image's type. Required unless image_base64 is a data: URI; must match the file. Default: Allowed values: image/pngimage/jpegimage/webp Example: |
tierstringOptional | fast (Claude Haiku) or balanced (Sonnet). Sets the price range. Default: Allowed values: fastbalanced Example: |
consentbooleanRequired | Must be true: the person in the photo agreed to this reading, and is an adult or has a guardian's agreement. Allowed value: true Example: |
languagestringOptional | Output language (ISO 639-1). The values listed are the ones this capability supports; any other is refused with 422 unsupported_language. Identifiers, enum values and numbers never change with language. Default: Allowed values: enasbndeesfrguhiitjaknkomlmrnenlorpaplptrusitatetrur |
questionstringRequired | One question to answer from the palm. Limits: 3 to 300 characters Example: |
labelsstringOptional | Optional. Adds `meta.labels`: translated display names for the identifiers in the answer. `data` is unchanged. Free. Any other code is refused with 422 unsupported_language. Allowed values: asbndeesfrguhiitknkomlmrnenlorpaplptrusitatetrur |
Response · fields in data
The response contract: required fields are always present.
sections· objectnotice· stringtier· stringlanguage· stringquestion· stringanswer· string
Example request
curl -X POST https://api.96astroapi.com/v1/palmistry/palm-question \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"image_base64": "iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAAAAABQyaazAAAAgklEQVR42u3bQQoAIAgEQP//6fpCBsFWs2fBEbyJNcJTgICAgIDXACspgIeAp/aouvWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgGsN0+/F4cCNgQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE7QA/QbwMzAwgICPg7cAJxuHlDZty0owAAAABJRU5ErkJggg==",
"mime_type": "image/png",
"consent": true,
"tier": "fast",
"question": "What does my head line say about how I make decisions?"
}'const response = await fetch("https://api.96astroapi.com/v1/palmistry/palm-question", {
method: "POST",
headers: {
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({
"image_base64": "iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAAAAABQyaazAAAAgklEQVR42u3bQQoAIAgEQP//6fpCBsFWs2fBEbyJNcJTgICAgIDXACspgIeAp/aouvWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgGsN0+/F4cCNgQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE7QA/QbwMzAwgICPg7cAJxuHlDZty0owAAAABJRU5ErkJggg==",
"mime_type": "image/png",
"consent": true,
"tier": "fast",
"question": "What does my head line say about how I make decisions?"
}),
});
const { data, meta } = await response.json();
console.log(data);import { Astro96Client } from "@96astro/api";
const astro = new Astro96Client({ apiKey: "YOUR_API_KEY" });
const { data, meta } = await astro.palmistry.palmQuestion({
"image_base64": "iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAAAAABQyaazAAAAgklEQVR42u3bQQoAIAgEQP//6fpCBsFWs2fBEbyJNcJTgICAgIDXACspgIeAp/aouvWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgGsN0+/F4cCNgQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE7QA/QbwMzAwgICPg7cAJxuHlDZty0owAAAABJRU5ErkJggg==",
"mime_type": "image/png",
"consent": true,
"tier": "fast",
"question": "What does my head line say about how I make decisions?"
});
console.log(data);import requests
response = requests.post(
"https://api.96astroapi.com/v1/palmistry/palm-question",
headers={
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
json={
"image_base64": "iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAAAAABQyaazAAAAgklEQVR42u3bQQoAIAgEQP//6fpCBsFWs2fBEbyJNcJTgICAgIDXACspgIeAp/aouvWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgGsN0+/F4cCNgQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE7QA/QbwMzAwgICPg7cAJxuHlDZty0owAAAABJRU5ErkJggg==",
"mime_type": "image/png",
"consent": True,
"tier": "fast",
"question": "What does my head line say about how I make decisions?",
},
timeout=60,
)
response.raise_for_status()
data = response.json()["data"]
print(data)from astro96_api import Astro96Client
astro = Astro96Client(api_key="YOUR_API_KEY")
res = astro.palmistry.palm_question({
"image_base64": "iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAAAAABQyaazAAAAgklEQVR42u3bQQoAIAgEQP//6fpCBsFWs2fBEbyJNcJTgICAgIDXACspgIeAp/aouvWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgGsN0+/F4cCNgQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE7QA/QbwMzAwgICPg7cAJxuHlDZty0owAAAABJRU5ErkJggg==",
"mime_type": "image/png",
"consent": True,
"tier": "fast",
"question": "What does my head line say about how I make decisions?",
})
print(res.data)<?php
$ch = curl_init('https://api.96astroapi.com/v1/palmistry/palm-question');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer YOUR_API_KEY',
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => json_encode([
'image_base64' => 'iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAAAAABQyaazAAAAgklEQVR42u3bQQoAIAgEQP//6fpCBsFWs2fBEbyJNcJTgICAgIDXACspgIeAp/aouvWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgGsN0+/F4cCNgQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE7QA/QbwMzAwgICPg7cAJxuHlDZty0owAAAABJRU5ErkJggg==',
'mime_type' => 'image/png',
'consent' => true,
'tier' => 'fast',
'question' => 'What does my head line say about how I make decisions?',
]),
]);
$response = curl_exec($ch);
curl_close($ch);
$result = json_decode($response, true);
print_r($result['data']);package main
import (
"fmt"
"io"
"net/http"
"strings"
)
func main() {
body := strings.NewReader(`{
"image_base64": "iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAAAAABQyaazAAAAgklEQVR42u3bQQoAIAgEQP//6fpCBsFWs2fBEbyJNcJTgICAgIDXACspgIeAp/aouvWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgGsN0+/F4cCNgQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE7QA/QbwMzAwgICPg7cAJxuHlDZty0owAAAABJRU5ErkJggg==",
"mime_type": "image/png",
"consent": true,
"tier": "fast",
"question": "What does my head line say about how I make decisions?"
}`)
req, err := http.NewRequest("POST", "https://api.96astroapi.com/v1/palmistry/palm-question", body)
if err != nil {
panic(err)
}
req.Header.Set("Authorization", "Bearer YOUR_API_KEY")
req.Header.Set("Content-Type", "application/json")
res, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer res.Body.Close()
out, _ := io.ReadAll(res.Body)
fmt.Println(res.Status, string(out))
}Example response (illustrative)
{
"data": {
"sections": {
"personality": {
"observed": [
"An example observation about personality."
],
"reading": "An example reading of personality, based on what the photo shows.",
"advice": "One practical sentence."
}
},
"question": "What does my head line say about how I make decisions?",
"answer": "An example answer based on what the photo shows.",
"notice": "For reflection, not fact. This reading is not medical, legal or financial advice.",
"tier": "fast",
"language": "en"
},
"meta": {
"request_id": "req_00000000000000000000",
"api_version": "v1",
…Written by hand from the documented shape: AI readings are not captured automatically. Real text, token counts and credits differ.
Error responses
- 400invalid_request
- 401invalid_key, expired_key
- 402payment_required
- 403account_suspended, plan_upgrade_required, plan_family_not_included, key_scope_denied, ip_not_allowed, origin_not_allowed, publishable_key_not_allowed
- 404not_found
- 409idempotency_conflict
- 413payload_too_large
- 422invalid_request, unsupported_language
- 429rate_limited, quota_exhausted, spend_cap_reached, project_budget_exceeded
- 500computation_failed
- 502unavailable
- 503unavailable, maintenance, temporarily_unavailable
- 504deadline_exceeded
Errors are never charged. What each status means and what to do: errors.
Palm Compatibility
POSTAvailable
https://api.96astroapi.com/v1/palmistry/palm-compatibilityHow two people connect, how their lives fit and what guidance follows, from a photo of each palm.
- Credits
- Metered, from 15 credits
- Input
- A photo
- Output
- JSON
- Delivery
- Direct response
- Languages
- 26 languages; translated term names with
labels
| Header | Value and description |
|---|---|
AuthorizationRequired | Bearer YOUR_API_KEYYour sandbox (sk_test_...) or live (sk_live_...) key. X-API-Key: <key> is accepted instead. |
Content-TypeRequired | application/jsonThe body is JSON. |
Idempotency-KeyOptional | <unique string>Makes retries safe: a repeated key with the same body replays the stored response and is never charged twice. (1 to 200 characters) |
| Field | Description |
|---|---|
image_base64stringRequired | The floor-plan image file, base64-encoded (a `data:image/...;base64,` prefix is accepted). PNG, JPEG or WebP; at most 3.75 MiB decoded and 8000 px a side. Limits: 1 to 5400000 characters Example: |
mime_typestring | nullOptional | The image's type. Required unless image_base64 is a data: URI; must match the file. Default: Allowed values: image/pngimage/jpegimage/webp Example: |
tierstringOptional | fast (Claude Haiku) or balanced (Sonnet). Sets the price range. Default: Allowed values: fastbalanced Example: |
consentbooleanRequired | Must be true: the person in the photo agreed to this reading, and is an adult or has a guardian's agreement. Allowed value: true Example: |
languagestringOptional | Output language (ISO 639-1). The values listed are the ones this capability supports; any other is refused with 422 unsupported_language. Identifiers, enum values and numbers never change with language. Default: Allowed values: enasbndeesfrguhiitjaknkomlmrnenlorpaplptrusitatetrur |
second_image_base64stringRequired | The second person's palm, as image_base64. Limits: at least 1 characters Example: |
second_mime_typestring | nullOptional | The second photo's type, if it cannot be told from the data. Default: Allowed values: image/pngimage/jpegimage/webp Example: |
labelsstringOptional | Optional. Adds `meta.labels`: translated display names for the identifiers in the answer. `data` is unchanged. Free. Any other code is refused with 422 unsupported_language. Allowed values: asbndeesfrguhiitknkomlmrnenlorpaplptrusitatetrur |
Response · fields in data
The response contract: required fields are always present.
sections· objectnotice· stringtier· stringlanguage· stringcompatibility· object
Example request
curl -X POST https://api.96astroapi.com/v1/palmistry/palm-compatibility \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"image_base64": "iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAAAAABQyaazAAAAgklEQVR42u3bQQoAIAgEQP//6fpCBsFWs2fBEbyJNcJTgICAgIDXACspgIeAp/aouvWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgGsN0+/F4cCNgQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE7QA/QbwMzAwgICPg7cAJxuHlDZty0owAAAABJRU5ErkJggg==",
"mime_type": "image/png",
"consent": true,
"tier": "fast",
"second_image_base64": "iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAAAAABQyaazAAAAgklEQVR42u3bQQoAIAgEQP//6fpCBsFWs2fBEbyJNcJTgICAgIDXACspgIeAp/aouvWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgGsN0+/F4cCNgQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE7QA/QbwMzAwgICPg7cAJxuHlDZty0owAAAABJRU5ErkJggg==",
"second_mime_type": "image/png"
}'const response = await fetch("https://api.96astroapi.com/v1/palmistry/palm-compatibility", {
method: "POST",
headers: {
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({
"image_base64": "iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAAAAABQyaazAAAAgklEQVR42u3bQQoAIAgEQP//6fpCBsFWs2fBEbyJNcJTgICAgIDXACspgIeAp/aouvWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgGsN0+/F4cCNgQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE7QA/QbwMzAwgICPg7cAJxuHlDZty0owAAAABJRU5ErkJggg==",
"mime_type": "image/png",
"consent": true,
"tier": "fast",
"second_image_base64": "iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAAAAABQyaazAAAAgklEQVR42u3bQQoAIAgEQP//6fpCBsFWs2fBEbyJNcJTgICAgIDXACspgIeAp/aouvWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgGsN0+/F4cCNgQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE7QA/QbwMzAwgICPg7cAJxuHlDZty0owAAAABJRU5ErkJggg==",
"second_mime_type": "image/png"
}),
});
const { data, meta } = await response.json();
console.log(data);import { Astro96Client } from "@96astro/api";
const astro = new Astro96Client({ apiKey: "YOUR_API_KEY" });
const { data, meta } = await astro.palmistry.palmCompatibility({
"image_base64": "iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAAAAABQyaazAAAAgklEQVR42u3bQQoAIAgEQP//6fpCBsFWs2fBEbyJNcJTgICAgIDXACspgIeAp/aouvWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgGsN0+/F4cCNgQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE7QA/QbwMzAwgICPg7cAJxuHlDZty0owAAAABJRU5ErkJggg==",
"mime_type": "image/png",
"consent": true,
"tier": "fast",
"second_image_base64": "iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAAAAABQyaazAAAAgklEQVR42u3bQQoAIAgEQP//6fpCBsFWs2fBEbyJNcJTgICAgIDXACspgIeAp/aouvWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgGsN0+/F4cCNgQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE7QA/QbwMzAwgICPg7cAJxuHlDZty0owAAAABJRU5ErkJggg==",
"second_mime_type": "image/png"
});
console.log(data);import requests
response = requests.post(
"https://api.96astroapi.com/v1/palmistry/palm-compatibility",
headers={
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
json={
"image_base64": "iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAAAAABQyaazAAAAgklEQVR42u3bQQoAIAgEQP//6fpCBsFWs2fBEbyJNcJTgICAgIDXACspgIeAp/aouvWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgGsN0+/F4cCNgQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE7QA/QbwMzAwgICPg7cAJxuHlDZty0owAAAABJRU5ErkJggg==",
"mime_type": "image/png",
"consent": True,
"tier": "fast",
"second_image_base64": "iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAAAAABQyaazAAAAgklEQVR42u3bQQoAIAgEQP//6fpCBsFWs2fBEbyJNcJTgICAgIDXACspgIeAp/aouvWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgGsN0+/F4cCNgQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE7QA/QbwMzAwgICPg7cAJxuHlDZty0owAAAABJRU5ErkJggg==",
"second_mime_type": "image/png",
},
timeout=60,
)
response.raise_for_status()
data = response.json()["data"]
print(data)from astro96_api import Astro96Client
astro = Astro96Client(api_key="YOUR_API_KEY")
res = astro.palmistry.palm_compatibility({
"image_base64": "iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAAAAABQyaazAAAAgklEQVR42u3bQQoAIAgEQP//6fpCBsFWs2fBEbyJNcJTgICAgIDXACspgIeAp/aouvWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgGsN0+/F4cCNgQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE7QA/QbwMzAwgICPg7cAJxuHlDZty0owAAAABJRU5ErkJggg==",
"mime_type": "image/png",
"consent": True,
"tier": "fast",
"second_image_base64": "iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAAAAABQyaazAAAAgklEQVR42u3bQQoAIAgEQP//6fpCBsFWs2fBEbyJNcJTgICAgIDXACspgIeAp/aouvWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgGsN0+/F4cCNgQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE7QA/QbwMzAwgICPg7cAJxuHlDZty0owAAAABJRU5ErkJggg==",
"second_mime_type": "image/png",
})
print(res.data)<?php
$ch = curl_init('https://api.96astroapi.com/v1/palmistry/palm-compatibility');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer YOUR_API_KEY',
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => json_encode([
'image_base64' => 'iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAAAAABQyaazAAAAgklEQVR42u3bQQoAIAgEQP//6fpCBsFWs2fBEbyJNcJTgICAgIDXACspgIeAp/aouvWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgGsN0+/F4cCNgQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE7QA/QbwMzAwgICPg7cAJxuHlDZty0owAAAABJRU5ErkJggg==',
'mime_type' => 'image/png',
'consent' => true,
'tier' => 'fast',
'second_image_base64' => 'iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAAAAABQyaazAAAAgklEQVR42u3bQQoAIAgEQP//6fpCBsFWs2fBEbyJNcJTgICAgIDXACspgIeAp/aouvWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgGsN0+/F4cCNgQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE7QA/QbwMzAwgICPg7cAJxuHlDZty0owAAAABJRU5ErkJggg==',
'second_mime_type' => 'image/png',
]),
]);
$response = curl_exec($ch);
curl_close($ch);
$result = json_decode($response, true);
print_r($result['data']);package main
import (
"fmt"
"io"
"net/http"
"strings"
)
func main() {
body := strings.NewReader(`{
"image_base64": "iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAAAAABQyaazAAAAgklEQVR42u3bQQoAIAgEQP//6fpCBsFWs2fBEbyJNcJTgICAgIDXACspgIeAp/aouvWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgGsN0+/F4cCNgQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE7QA/QbwMzAwgICPg7cAJxuHlDZty0owAAAABJRU5ErkJggg==",
"mime_type": "image/png",
"consent": true,
"tier": "fast",
"second_image_base64": "iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAAAAABQyaazAAAAgklEQVR42u3bQQoAIAgEQP//6fpCBsFWs2fBEbyJNcJTgICAgIDXACspgIeAp/aouvWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgGsN0+/F4cCNgQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE7QA/QbwMzAwgICPg7cAJxuHlDZty0owAAAABJRU5ErkJggg==",
"second_mime_type": "image/png"
}`)
req, err := http.NewRequest("POST", "https://api.96astroapi.com/v1/palmistry/palm-compatibility", body)
if err != nil {
panic(err)
}
req.Header.Set("Authorization", "Bearer YOUR_API_KEY")
req.Header.Set("Content-Type", "application/json")
res, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer res.Body.Close()
out, _ := io.ReadAll(res.Body)
fmt.Println(res.Status, string(out))
}Example response (illustrative)
{
"data": {
"sections": {
"connection": {
"observed": [
"An example observation about connection."
],
"reading": "An example reading of connection, based on what the photo shows.",
"advice": "One practical sentence."
},
"life": {
"observed": [
"An example observation about life."
],
"reading": "An example reading of life, based on what the photo shows.",
"advice": "One practical sentence."
},
"guidance": {
"observed": [
"An example observation about guidance."
…Written by hand from the documented shape: AI readings are not captured automatically. Real text, token counts and credits differ.
Error responses
- 400invalid_request
- 401invalid_key, expired_key
- 402payment_required
- 403account_suspended, plan_upgrade_required, plan_family_not_included, key_scope_denied, ip_not_allowed, origin_not_allowed, publishable_key_not_allowed
- 404not_found
- 409idempotency_conflict
- 413payload_too_large
- 422invalid_request, unsupported_language
- 429rate_limited, quota_exhausted, spend_cap_reached, project_budget_exceeded
- 500computation_failed
- 502unavailable
- 503unavailable, maintenance, temporarily_unavailable
- 504deadline_exceeded
Errors are never charged. What each status means and what to do: errors.


