Skip to content
96Astro API

API reference

Face reading

AI readings of a face photo, from the tradition of Samudrika Shastra. Photos are not stored.

  • 24 endpoints
  • POST JSON body
  • Bearer key

24 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.

Face: Outline Traced

POSTAvailable

POSThttps://api.96astroapi.com/v1/face-reading/face-outline-image

The outline of the face and its features traced on a photo, with an SVG overlay to lay over your copy, and scores for how the face looks in that photo. It never names anyone. 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
Headers
HeaderValue and description
AuthorizationRequiredBearer YOUR_API_KEY

Your sandbox (sk_test_...) or live (sk_live_...) key. X-API-Key: <key> is accepted instead.

Content-TypeRequiredapplication/json

The 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)

Body · application/json
FieldDescription
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: iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAAAAABQyaazAAAAgklEQVR42u3bQQoAIAgEQP//6fpCBsFWs2fBEbyJNcJTgICAgIDXACspgIeAp/aouvWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgGsN0+/F4cCNgQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE7QA/QbwMzAwgICPg7cAJxuHlDZty0owAAAABJRU5ErkJggg==

mime_typestring | nullOptional

The image's type. Required unless image_base64 is a data: URI; must match the file.

Default: null

Allowed values: image/pngimage/jpegimage/webp

Example: image/png

tierstringOptional

fast (Claude Haiku) or balanced (Sonnet). Sets the price range.

Default: fast

Allowed values: fastbalanced

Example: fast

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: true

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: en

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.

  • outlines · array of object
  • overlay_svg · string
  • coordinate_space · object
  • notice · string
  • tier · string
  • expression · object
  • expression_note · string

Try in Playground →Capability overview

Example request

Example response (illustrative)

200application/json
{
  "data": {
    "outlines": [
      {
        "name": "face",
        "points": [
          [
            300,
            200
          ],
          [
            700,
            200
          ],
          [
            760,
            560
          ],
          [
            500,
  …

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 Face Reading

POSTAvailable

POSThttps://api.96astroapi.com/v1/face-reading/face-reading

Every section of a face reading from one photo, for the price of one call. It never names anyone, or infers race, religion or health conditions.

Credits
Metered, from 15 credits
Input
A photo
Output
JSON
Delivery
Direct response
Languages
26 languages; translated term names with labels
Headers
HeaderValue and description
AuthorizationRequiredBearer YOUR_API_KEY

Your sandbox (sk_test_...) or live (sk_live_...) key. X-API-Key: <key> is accepted instead.

Content-TypeRequiredapplication/json

The 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)

Body · application/json
FieldDescription
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: iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAAAAABQyaazAAAAgklEQVR42u3bQQoAIAgEQP//6fpCBsFWs2fBEbyJNcJTgICAgIDXACspgIeAp/aouvWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgGsN0+/F4cCNgQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE7QA/QbwMzAwgICPg7cAJxuHlDZty0owAAAABJRU5ErkJggg==

mime_typestring | nullOptional

The image's type. Required unless image_base64 is a data: URI; must match the file.

Default: null

Allowed values: image/pngimage/jpegimage/webp

Example: image/png

tierstringOptional

fast (Claude Haiku) or balanced (Sonnet). Sets the price range.

Default: fast

Allowed values: fastbalanced

Example: fast

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: true

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: en

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 · object
  • notice · string
  • tier · string
  • language · string

Try in Playground →Capability overview

Example request

Example response (illustrative)

200application/json
{
  "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.

Face: Face Shape

POSTAvailable

POSThttps://api.96astroapi.com/v1/face-reading/face-shape

The face shape and the balance of its zones. Read from one photo of the face 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
Headers
HeaderValue and description
AuthorizationRequiredBearer YOUR_API_KEY

Your sandbox (sk_test_...) or live (sk_live_...) key. X-API-Key: <key> is accepted instead.

Content-TypeRequiredapplication/json

The 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)

Body · application/json
FieldDescription
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: iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAAAAABQyaazAAAAgklEQVR42u3bQQoAIAgEQP//6fpCBsFWs2fBEbyJNcJTgICAgIDXACspgIeAp/aouvWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgGsN0+/F4cCNgQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE7QA/QbwMzAwgICPg7cAJxuHlDZty0owAAAABJRU5ErkJggg==

mime_typestring | nullOptional

The image's type. Required unless image_base64 is a data: URI; must match the file.

Default: null

Allowed values: image/pngimage/jpegimage/webp

Example: image/png

tierstringOptional

fast (Claude Haiku) or balanced (Sonnet). Sets the price range.

Default: fast

Allowed values: fastbalanced

Example: fast

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: true

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: en

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 · object
  • notice · string
  • tier · string
  • language · string

Try in Playground →Capability overview

Example request

Example response (illustrative)

200application/json
{
  "data": {
    "sections": {
      "shape": {
        "observed": [
          "An example observation about shape."
        ],
        "reading": "An example reading of shape, 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.

Face: Eyes

POSTAvailable

POSThttps://api.96astroapi.com/v1/face-reading/face-eyes

Eye shape, spacing and brows. Read from one photo of the face 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
Headers
HeaderValue and description
AuthorizationRequiredBearer YOUR_API_KEY

Your sandbox (sk_test_...) or live (sk_live_...) key. X-API-Key: <key> is accepted instead.

Content-TypeRequiredapplication/json

The 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)

Body · application/json
FieldDescription
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: iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAAAAABQyaazAAAAgklEQVR42u3bQQoAIAgEQP//6fpCBsFWs2fBEbyJNcJTgICAgIDXACspgIeAp/aouvWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgGsN0+/F4cCNgQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE7QA/QbwMzAwgICPg7cAJxuHlDZty0owAAAABJRU5ErkJggg==

mime_typestring | nullOptional

The image's type. Required unless image_base64 is a data: URI; must match the file.

Default: null

Allowed values: image/pngimage/jpegimage/webp

Example: image/png

tierstringOptional

fast (Claude Haiku) or balanced (Sonnet). Sets the price range.

Default: fast

Allowed values: fastbalanced

Example: fast

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: true

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: en

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 · object
  • notice · string
  • tier · string
  • language · string

Try in Playground →Capability overview

Example request

Example response (illustrative)

200application/json
{
  "data": {
    "sections": {
      "eyes": {
        "observed": [
          "An example observation about eyes."
        ],
        "reading": "An example reading of eyes, 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.

Face: Nose

POSTAvailable

POSThttps://api.96astroapi.com/v1/face-reading/face-nose

Bridge, tip and nostrils. Read from one photo of the face 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
Headers
HeaderValue and description
AuthorizationRequiredBearer YOUR_API_KEY

Your sandbox (sk_test_...) or live (sk_live_...) key. X-API-Key: <key> is accepted instead.

Content-TypeRequiredapplication/json

The 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)

Body · application/json
FieldDescription
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: iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAAAAABQyaazAAAAgklEQVR42u3bQQoAIAgEQP//6fpCBsFWs2fBEbyJNcJTgICAgIDXACspgIeAp/aouvWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgGsN0+/F4cCNgQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE7QA/QbwMzAwgICPg7cAJxuHlDZty0owAAAABJRU5ErkJggg==

mime_typestring | nullOptional

The image's type. Required unless image_base64 is a data: URI; must match the file.

Default: null

Allowed values: image/pngimage/jpegimage/webp

Example: image/png

tierstringOptional

fast (Claude Haiku) or balanced (Sonnet). Sets the price range.

Default: fast

Allowed values: fastbalanced

Example: fast

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: true

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: en

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 · object
  • notice · string
  • tier · string
  • language · string

Try in Playground →Capability overview

Example request

Example response (illustrative)

200application/json
{
  "data": {
    "sections": {
      "nose": {
        "observed": [
          "An example observation about nose."
        ],
        "reading": "An example reading of nose, 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.

Face: Cheeks

POSTAvailable

POSThttps://api.96astroapi.com/v1/face-reading/face-cheeks

Cheeks and cheekbones. Read from one photo of the face 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
Headers
HeaderValue and description
AuthorizationRequiredBearer YOUR_API_KEY

Your sandbox (sk_test_...) or live (sk_live_...) key. X-API-Key: <key> is accepted instead.

Content-TypeRequiredapplication/json

The 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)

Body · application/json
FieldDescription
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: iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAAAAABQyaazAAAAgklEQVR42u3bQQoAIAgEQP//6fpCBsFWs2fBEbyJNcJTgICAgIDXACspgIeAp/aouvWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgGsN0+/F4cCNgQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE7QA/QbwMzAwgICPg7cAJxuHlDZty0owAAAABJRU5ErkJggg==

mime_typestring | nullOptional

The image's type. Required unless image_base64 is a data: URI; must match the file.

Default: null

Allowed values: image/pngimage/jpegimage/webp

Example: image/png

tierstringOptional

fast (Claude Haiku) or balanced (Sonnet). Sets the price range.

Default: fast

Allowed values: fastbalanced

Example: fast

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: true

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: en

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 · object
  • notice · string
  • tier · string
  • language · string

Try in Playground →Capability overview

Example request

Example response (illustrative)

200application/json
{
  "data": {
    "sections": {
      "cheeks": {
        "observed": [
          "An example observation about cheeks."
        ],
        "reading": "An example reading of cheeks, 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.

Face: Mouth

POSTAvailable

POSThttps://api.96astroapi.com/v1/face-reading/face-mouth

Lips and mouth shape. Read from one photo of the face 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
Headers
HeaderValue and description
AuthorizationRequiredBearer YOUR_API_KEY

Your sandbox (sk_test_...) or live (sk_live_...) key. X-API-Key: <key> is accepted instead.

Content-TypeRequiredapplication/json

The 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)

Body · application/json
FieldDescription
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: iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAAAAABQyaazAAAAgklEQVR42u3bQQoAIAgEQP//6fpCBsFWs2fBEbyJNcJTgICAgIDXACspgIeAp/aouvWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgGsN0+/F4cCNgQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE7QA/QbwMzAwgICPg7cAJxuHlDZty0owAAAABJRU5ErkJggg==

mime_typestring | nullOptional

The image's type. Required unless image_base64 is a data: URI; must match the file.

Default: null

Allowed values: image/pngimage/jpegimage/webp

Example: image/png

tierstringOptional

fast (Claude Haiku) or balanced (Sonnet). Sets the price range.

Default: fast

Allowed values: fastbalanced

Example: fast

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: true

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: en

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 · object
  • notice · string
  • tier · string
  • language · string

Try in Playground →Capability overview

Example request

Example response (illustrative)

200application/json
{
  "data": {
    "sections": {
      "mouth": {
        "observed": [
          "An example observation about mouth."
        ],
        "reading": "An example reading of mouth, 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.

Face: Chin and Jaw

POSTAvailable

POSThttps://api.96astroapi.com/v1/face-reading/face-chin-jaw

Chin and jawline. Read from one photo of the face 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
Headers
HeaderValue and description
AuthorizationRequiredBearer YOUR_API_KEY

Your sandbox (sk_test_...) or live (sk_live_...) key. X-API-Key: <key> is accepted instead.

Content-TypeRequiredapplication/json

The 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)

Body · application/json
FieldDescription
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: iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAAAAABQyaazAAAAgklEQVR42u3bQQoAIAgEQP//6fpCBsFWs2fBEbyJNcJTgICAgIDXACspgIeAp/aouvWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgGsN0+/F4cCNgQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE7QA/QbwMzAwgICPg7cAJxuHlDZty0owAAAABJRU5ErkJggg==

mime_typestring | nullOptional

The image's type. Required unless image_base64 is a data: URI; must match the file.

Default: null

Allowed values: image/pngimage/jpegimage/webp

Example: image/png

tierstringOptional

fast (Claude Haiku) or balanced (Sonnet). Sets the price range.

Default: fast

Allowed values: fastbalanced

Example: fast

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: true

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: en

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 · object
  • notice · string
  • tier · string
  • language · string

Try in Playground →Capability overview

Example request

Example response (illustrative)

200application/json
{
  "data": {
    "sections": {
      "chin_jaw": {
        "observed": [
          "An example observation about chin jaw."
        ],
        "reading": "An example reading of chin jaw, 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.

Face: Ears

POSTAvailable

POSThttps://api.96astroapi.com/v1/face-reading/face-ears

Ears, if visible. Read from one photo of the face 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
Headers
HeaderValue and description
AuthorizationRequiredBearer YOUR_API_KEY

Your sandbox (sk_test_...) or live (sk_live_...) key. X-API-Key: <key> is accepted instead.

Content-TypeRequiredapplication/json

The 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)

Body · application/json
FieldDescription
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: iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAAAAABQyaazAAAAgklEQVR42u3bQQoAIAgEQP//6fpCBsFWs2fBEbyJNcJTgICAgIDXACspgIeAp/aouvWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgGsN0+/F4cCNgQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE7QA/QbwMzAwgICPg7cAJxuHlDZty0owAAAABJRU5ErkJggg==

mime_typestring | nullOptional

The image's type. Required unless image_base64 is a data: URI; must match the file.

Default: null

Allowed values: image/pngimage/jpegimage/webp

Example: image/png

tierstringOptional

fast (Claude Haiku) or balanced (Sonnet). Sets the price range.

Default: fast

Allowed values: fastbalanced

Example: fast

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: true

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: en

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 · object
  • notice · string
  • tier · string
  • language · string

Try in Playground →Capability overview

Example request

Example response (illustrative)

200application/json
{
  "data": {
    "sections": {
      "ears": {
        "observed": [
          "An example observation about ears."
        ],
        "reading": "An example reading of ears, 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.

Face: Skin Clarity

POSTAvailable

POSThttps://api.96astroapi.com/v1/face-reading/face-skin

Clarity and radiance, never colour. Read from one photo of the face 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
Headers
HeaderValue and description
AuthorizationRequiredBearer YOUR_API_KEY

Your sandbox (sk_test_...) or live (sk_live_...) key. X-API-Key: <key> is accepted instead.

Content-TypeRequiredapplication/json

The 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)

Body · application/json
FieldDescription
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: iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAAAAABQyaazAAAAgklEQVR42u3bQQoAIAgEQP//6fpCBsFWs2fBEbyJNcJTgICAgIDXACspgIeAp/aouvWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgGsN0+/F4cCNgQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE7QA/QbwMzAwgICPg7cAJxuHlDZty0owAAAABJRU5ErkJggg==

mime_typestring | nullOptional

The image's type. Required unless image_base64 is a data: URI; must match the file.

Default: null

Allowed values: image/pngimage/jpegimage/webp

Example: image/png

tierstringOptional

fast (Claude Haiku) or balanced (Sonnet). Sets the price range.

Default: fast

Allowed values: fastbalanced

Example: fast

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: true

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: en

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 · object
  • notice · string
  • tier · string
  • language · string

Try in Playground →Capability overview

Example request

Example response (illustrative)

200application/json
{
  "data": {
    "sections": {
      "skin": {
        "observed": [
          "An example observation about skin."
        ],
        "reading": "An example reading of skin, 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.

Face: Symmetry

POSTAvailable

POSThttps://api.96astroapi.com/v1/face-reading/face-symmetry

How symmetrical the features are. Read from one photo of the face 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
Headers
HeaderValue and description
AuthorizationRequiredBearer YOUR_API_KEY

Your sandbox (sk_test_...) or live (sk_live_...) key. X-API-Key: <key> is accepted instead.

Content-TypeRequiredapplication/json

The 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)

Body · application/json
FieldDescription
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: iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAAAAABQyaazAAAAgklEQVR42u3bQQoAIAgEQP//6fpCBsFWs2fBEbyJNcJTgICAgIDXACspgIeAp/aouvWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgGsN0+/F4cCNgQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE7QA/QbwMzAwgICPg7cAJxuHlDZty0owAAAABJRU5ErkJggg==

mime_typestring | nullOptional

The image's type. Required unless image_base64 is a data: URI; must match the file.

Default: null

Allowed values: image/pngimage/jpegimage/webp

Example: image/png

tierstringOptional

fast (Claude Haiku) or balanced (Sonnet). Sets the price range.

Default: fast

Allowed values: fastbalanced

Example: fast

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: true

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: en

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 · object
  • notice · string
  • tier · string
  • language · string

Try in Playground →Capability overview

Example request

Example response (illustrative)

200application/json
{
  "data": {
    "sections": {
      "symmetry": {
        "observed": [
          "An example observation about symmetry."
        ],
        "reading": "An example reading of symmetry, 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.

Face: Proportions

POSTAvailable

POSThttps://api.96astroapi.com/v1/face-reading/face-proportions

Forehead, nose and chin in proportion. Read from one photo of the face 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
Headers
HeaderValue and description
AuthorizationRequiredBearer YOUR_API_KEY

Your sandbox (sk_test_...) or live (sk_live_...) key. X-API-Key: <key> is accepted instead.

Content-TypeRequiredapplication/json

The 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)

Body · application/json
FieldDescription
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: iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAAAAABQyaazAAAAgklEQVR42u3bQQoAIAgEQP//6fpCBsFWs2fBEbyJNcJTgICAgIDXACspgIeAp/aouvWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgGsN0+/F4cCNgQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE7QA/QbwMzAwgICPg7cAJxuHlDZty0owAAAABJRU5ErkJggg==

mime_typestring | nullOptional

The image's type. Required unless image_base64 is a data: URI; must match the file.

Default: null

Allowed values: image/pngimage/jpegimage/webp

Example: image/png

tierstringOptional

fast (Claude Haiku) or balanced (Sonnet). Sets the price range.

Default: fast

Allowed values: fastbalanced

Example: fast

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: true

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: en

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 · object
  • notice · string
  • tier · string
  • language · string

Try in Playground →Capability overview

Example request

Example response (illustrative)

200application/json
{
  "data": {
    "sections": {
      "proportions": {
        "observed": [
          "An example observation about proportions."
        ],
        "reading": "An example reading of proportions, 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.

Face: Facial Hair

POSTAvailable

POSThttps://api.96astroapi.com/v1/face-reading/face-facial-hair

Beard or moustache, if relevant. Read from one photo of the face 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
Headers
HeaderValue and description
AuthorizationRequiredBearer YOUR_API_KEY

Your sandbox (sk_test_...) or live (sk_live_...) key. X-API-Key: <key> is accepted instead.

Content-TypeRequiredapplication/json

The 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)

Body · application/json
FieldDescription
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: iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAAAAABQyaazAAAAgklEQVR42u3bQQoAIAgEQP//6fpCBsFWs2fBEbyJNcJTgICAgIDXACspgIeAp/aouvWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgGsN0+/F4cCNgQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE7QA/QbwMzAwgICPg7cAJxuHlDZty0owAAAABJRU5ErkJggg==

mime_typestring | nullOptional

The image's type. Required unless image_base64 is a data: URI; must match the file.

Default: null

Allowed values: image/pngimage/jpegimage/webp

Example: image/png

tierstringOptional

fast (Claude Haiku) or balanced (Sonnet). Sets the price range.

Default: fast

Allowed values: fastbalanced

Example: fast

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: true

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: en

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 · object
  • notice · string
  • tier · string
  • language · string

Try in Playground →Capability overview

Example request

Example response (illustrative)

200application/json
{
  "data": {
    "sections": {
      "facial_hair": {
        "observed": [
          "An example observation about facial hair."
        ],
        "reading": "An example reading of facial hair, 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.

Face: Outline

POSTAvailable

POSThttps://api.96astroapi.com/v1/face-reading/face-outline

Forehead, hairline and outline. Read from one photo of the face 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
Headers
HeaderValue and description
AuthorizationRequiredBearer YOUR_API_KEY

Your sandbox (sk_test_...) or live (sk_live_...) key. X-API-Key: <key> is accepted instead.

Content-TypeRequiredapplication/json

The 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)

Body · application/json
FieldDescription
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: iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAAAAABQyaazAAAAgklEQVR42u3bQQoAIAgEQP//6fpCBsFWs2fBEbyJNcJTgICAgIDXACspgIeAp/aouvWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgGsN0+/F4cCNgQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE7QA/QbwMzAwgICPg7cAJxuHlDZty0owAAAABJRU5ErkJggg==

mime_typestring | nullOptional

The image's type. Required unless image_base64 is a data: URI; must match the file.

Default: null

Allowed values: image/pngimage/jpegimage/webp

Example: image/png

tierstringOptional

fast (Claude Haiku) or balanced (Sonnet). Sets the price range.

Default: fast

Allowed values: fastbalanced

Example: fast

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: true

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: en

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 · object
  • notice · string
  • tier · string
  • language · string

Try in Playground →Capability overview

Example request

Example response (illustrative)

200application/json
{
  "data": {
    "sections": {
      "outline": {
        "observed": [
          "An example observation about outline."
        ],
        "reading": "An example reading of outline, 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.

Face: Personality

POSTAvailable

POSThttps://api.96astroapi.com/v1/face-reading/face-personality

Character and temperament. Read from one photo of the face 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
Headers
HeaderValue and description
AuthorizationRequiredBearer YOUR_API_KEY

Your sandbox (sk_test_...) or live (sk_live_...) key. X-API-Key: <key> is accepted instead.

Content-TypeRequiredapplication/json

The 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)

Body · application/json
FieldDescription
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: iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAAAAABQyaazAAAAgklEQVR42u3bQQoAIAgEQP//6fpCBsFWs2fBEbyJNcJTgICAgIDXACspgIeAp/aouvWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgGsN0+/F4cCNgQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE7QA/QbwMzAwgICPg7cAJxuHlDZty0owAAAABJRU5ErkJggg==

mime_typestring | nullOptional

The image's type. Required unless image_base64 is a data: URI; must match the file.

Default: null

Allowed values: image/pngimage/jpegimage/webp

Example: image/png

tierstringOptional

fast (Claude Haiku) or balanced (Sonnet). Sets the price range.

Default: fast

Allowed values: fastbalanced

Example: fast

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: true

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: en

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 · object
  • notice · string
  • tier · string
  • language · string

Try in Playground →Capability overview

Example request

Example response (illustrative)

200application/json
{
  "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.

Face: Career

POSTAvailable

POSThttps://api.96astroapi.com/v1/face-reading/face-career

Work and calling. Read from one photo of the face 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
Headers
HeaderValue and description
AuthorizationRequiredBearer YOUR_API_KEY

Your sandbox (sk_test_...) or live (sk_live_...) key. X-API-Key: <key> is accepted instead.

Content-TypeRequiredapplication/json

The 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)

Body · application/json
FieldDescription
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: iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAAAAABQyaazAAAAgklEQVR42u3bQQoAIAgEQP//6fpCBsFWs2fBEbyJNcJTgICAgIDXACspgIeAp/aouvWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgGsN0+/F4cCNgQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE7QA/QbwMzAwgICPg7cAJxuHlDZty0owAAAABJRU5ErkJggg==

mime_typestring | nullOptional

The image's type. Required unless image_base64 is a data: URI; must match the file.

Default: null

Allowed values: image/pngimage/jpegimage/webp

Example: image/png

tierstringOptional

fast (Claude Haiku) or balanced (Sonnet). Sets the price range.

Default: fast

Allowed values: fastbalanced

Example: fast

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: true

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: en

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 · object
  • notice · string
  • tier · string
  • language · string

Try in Playground →Capability overview

Example request

Example response (illustrative)

200application/json
{
  "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.

Face: Wealth

POSTAvailable

POSThttps://api.96astroapi.com/v1/face-reading/face-wealth

Money and how it is handled. Read from one photo of the face 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
Headers
HeaderValue and description
AuthorizationRequiredBearer YOUR_API_KEY

Your sandbox (sk_test_...) or live (sk_live_...) key. X-API-Key: <key> is accepted instead.

Content-TypeRequiredapplication/json

The 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)

Body · application/json
FieldDescription
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: iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAAAAABQyaazAAAAgklEQVR42u3bQQoAIAgEQP//6fpCBsFWs2fBEbyJNcJTgICAgIDXACspgIeAp/aouvWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgGsN0+/F4cCNgQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE7QA/QbwMzAwgICPg7cAJxuHlDZty0owAAAABJRU5ErkJggg==

mime_typestring | nullOptional

The image's type. Required unless image_base64 is a data: URI; must match the file.

Default: null

Allowed values: image/pngimage/jpegimage/webp

Example: image/png

tierstringOptional

fast (Claude Haiku) or balanced (Sonnet). Sets the price range.

Default: fast

Allowed values: fastbalanced

Example: fast

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: true

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: en

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 · object
  • notice · string
  • tier · string
  • language · string

Try in Playground →Capability overview

Example request

Example response (illustrative)

200application/json
{
  "data": {
    "sections": {
      "wealth": {
        "observed": [
          "An example observation about wealth."
        ],
        "reading": "An example reading of wealth, 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.

Face: Love

POSTAvailable

POSThttps://api.96astroapi.com/v1/face-reading/face-love

Love and affection. Read from one photo of the face 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
Headers
HeaderValue and description
AuthorizationRequiredBearer YOUR_API_KEY

Your sandbox (sk_test_...) or live (sk_live_...) key. X-API-Key: <key> is accepted instead.

Content-TypeRequiredapplication/json

The 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)

Body · application/json
FieldDescription
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: iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAAAAABQyaazAAAAgklEQVR42u3bQQoAIAgEQP//6fpCBsFWs2fBEbyJNcJTgICAgIDXACspgIeAp/aouvWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgGsN0+/F4cCNgQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE7QA/QbwMzAwgICPg7cAJxuHlDZty0owAAAABJRU5ErkJggg==

mime_typestring | nullOptional

The image's type. Required unless image_base64 is a data: URI; must match the file.

Default: null

Allowed values: image/pngimage/jpegimage/webp

Example: image/png

tierstringOptional

fast (Claude Haiku) or balanced (Sonnet). Sets the price range.

Default: fast

Allowed values: fastbalanced

Example: fast

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: true

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: en

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 · object
  • notice · string
  • tier · string
  • language · string

Try in Playground →Capability overview

Example request

Example response (illustrative)

200application/json
{
  "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.

Face: Marriage

POSTAvailable

POSThttps://api.96astroapi.com/v1/face-reading/face-marriage

Marriage and long partnership. Read from one photo of the face 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
Headers
HeaderValue and description
AuthorizationRequiredBearer YOUR_API_KEY

Your sandbox (sk_test_...) or live (sk_live_...) key. X-API-Key: <key> is accepted instead.

Content-TypeRequiredapplication/json

The 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)

Body · application/json
FieldDescription
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: iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAAAAABQyaazAAAAgklEQVR42u3bQQoAIAgEQP//6fpCBsFWs2fBEbyJNcJTgICAgIDXACspgIeAp/aouvWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgGsN0+/F4cCNgQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE7QA/QbwMzAwgICPg7cAJxuHlDZty0owAAAABJRU5ErkJggg==

mime_typestring | nullOptional

The image's type. Required unless image_base64 is a data: URI; must match the file.

Default: null

Allowed values: image/pngimage/jpegimage/webp

Example: image/png

tierstringOptional

fast (Claude Haiku) or balanced (Sonnet). Sets the price range.

Default: fast

Allowed values: fastbalanced

Example: fast

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: true

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: en

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 · object
  • notice · string
  • tier · string
  • language · string

Try in Playground →Capability overview

Example request

Example response (illustrative)

200application/json
{
  "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.

Face: Family

POSTAvailable

POSThttps://api.96astroapi.com/v1/face-reading/face-family

Family life. Read from one photo of the face 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
Headers
HeaderValue and description
AuthorizationRequiredBearer YOUR_API_KEY

Your sandbox (sk_test_...) or live (sk_live_...) key. X-API-Key: <key> is accepted instead.

Content-TypeRequiredapplication/json

The 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)

Body · application/json
FieldDescription
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: iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAAAAABQyaazAAAAgklEQVR42u3bQQoAIAgEQP//6fpCBsFWs2fBEbyJNcJTgICAgIDXACspgIeAp/aouvWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgGsN0+/F4cCNgQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE7QA/QbwMzAwgICPg7cAJxuHlDZty0owAAAABJRU5ErkJggg==

mime_typestring | nullOptional

The image's type. Required unless image_base64 is a data: URI; must match the file.

Default: null

Allowed values: image/pngimage/jpegimage/webp

Example: image/png

tierstringOptional

fast (Claude Haiku) or balanced (Sonnet). Sets the price range.

Default: fast

Allowed values: fastbalanced

Example: fast

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: true

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: en

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 · object
  • notice · string
  • tier · string
  • language · string

Try in Playground →Capability overview

Example request

Example response (illustrative)

200application/json
{
  "data": {
    "sections": {
      "family": {
        "observed": [
          "An example observation about family."
        ],
        "reading": "An example reading of family, 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.

Face: Vitality

POSTAvailable

POSThttps://api.96astroapi.com/v1/face-reading/face-health

General vitality and habits, never a diagnosis. Read from one photo of the face 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
Headers
HeaderValue and description
AuthorizationRequiredBearer YOUR_API_KEY

Your sandbox (sk_test_...) or live (sk_live_...) key. X-API-Key: <key> is accepted instead.

Content-TypeRequiredapplication/json

The 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)

Body · application/json
FieldDescription
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: iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAAAAABQyaazAAAAgklEQVR42u3bQQoAIAgEQP//6fpCBsFWs2fBEbyJNcJTgICAgIDXACspgIeAp/aouvWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgGsN0+/F4cCNgQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE7QA/QbwMzAwgICPg7cAJxuHlDZty0owAAAABJRU5ErkJggg==

mime_typestring | nullOptional

The image's type. Required unless image_base64 is a data: URI; must match the file.

Default: null

Allowed values: image/pngimage/jpegimage/webp

Example: image/png

tierstringOptional

fast (Claude Haiku) or balanced (Sonnet). Sets the price range.

Default: fast

Allowed values: fastbalanced

Example: fast

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: true

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: en

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 · object
  • notice · string
  • tier · string
  • language · string

Try in Playground →Capability overview

Example request

Example response (illustrative)

200application/json
{
  "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.

Face: Wisdom

POSTAvailable

POSThttps://api.96astroapi.com/v1/face-reading/face-wisdom

Judgement and learning. Read from one photo of the face 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
Headers
HeaderValue and description
AuthorizationRequiredBearer YOUR_API_KEY

Your sandbox (sk_test_...) or live (sk_live_...) key. X-API-Key: <key> is accepted instead.

Content-TypeRequiredapplication/json

The 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)

Body · application/json
FieldDescription
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: iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAAAAABQyaazAAAAgklEQVR42u3bQQoAIAgEQP//6fpCBsFWs2fBEbyJNcJTgICAgIDXACspgIeAp/aouvWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgGsN0+/F4cCNgQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE7QA/QbwMzAwgICPg7cAJxuHlDZty0owAAAABJRU5ErkJggg==

mime_typestring | nullOptional

The image's type. Required unless image_base64 is a data: URI; must match the file.

Default: null

Allowed values: image/pngimage/jpegimage/webp

Example: image/png

tierstringOptional

fast (Claude Haiku) or balanced (Sonnet). Sets the price range.

Default: fast

Allowed values: fastbalanced

Example: fast

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: true

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: en

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 · object
  • notice · string
  • tier · string
  • language · string

Try in Playground →Capability overview

Example request

Example response (illustrative)

200application/json
{
  "data": {
    "sections": {
      "wisdom": {
        "observed": [
          "An example observation about wisdom."
        ],
        "reading": "An example reading of wisdom, 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.

Face: Luck

POSTAvailable

POSThttps://api.96astroapi.com/v1/face-reading/face-luck

Fortune and timing. Read from one photo of the face 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
Headers
HeaderValue and description
AuthorizationRequiredBearer YOUR_API_KEY

Your sandbox (sk_test_...) or live (sk_live_...) key. X-API-Key: <key> is accepted instead.

Content-TypeRequiredapplication/json

The 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)

Body · application/json
FieldDescription
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: iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAAAAABQyaazAAAAgklEQVR42u3bQQoAIAgEQP//6fpCBsFWs2fBEbyJNcJTgICAgIDXACspgIeAp/aouvWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgGsN0+/F4cCNgQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE7QA/QbwMzAwgICPg7cAJxuHlDZty0owAAAABJRU5ErkJggg==

mime_typestring | nullOptional

The image's type. Required unless image_base64 is a data: URI; must match the file.

Default: null

Allowed values: image/pngimage/jpegimage/webp

Example: image/png

tierstringOptional

fast (Claude Haiku) or balanced (Sonnet). Sets the price range.

Default: fast

Allowed values: fastbalanced

Example: fast

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: true

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: en

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 · object
  • notice · string
  • tier · string
  • language · string

Try in Playground →Capability overview

Example request

Example response (illustrative)

200application/json
{
  "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.

Face: Challenges

POSTAvailable

POSThttps://api.96astroapi.com/v1/face-reading/face-challenges

Difficulties to prepare for. Read from one photo of the face 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
Headers
HeaderValue and description
AuthorizationRequiredBearer YOUR_API_KEY

Your sandbox (sk_test_...) or live (sk_live_...) key. X-API-Key: <key> is accepted instead.

Content-TypeRequiredapplication/json

The 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)

Body · application/json
FieldDescription
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: iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAAAAABQyaazAAAAgklEQVR42u3bQQoAIAgEQP//6fpCBsFWs2fBEbyJNcJTgICAgIDXACspgIeAp/aouvWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgGsN0+/F4cCNgQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE7QA/QbwMzAwgICPg7cAJxuHlDZty0owAAAABJRU5ErkJggg==

mime_typestring | nullOptional

The image's type. Required unless image_base64 is a data: URI; must match the file.

Default: null

Allowed values: image/pngimage/jpegimage/webp

Example: image/png

tierstringOptional

fast (Claude Haiku) or balanced (Sonnet). Sets the price range.

Default: fast

Allowed values: fastbalanced

Example: fast

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: true

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: en

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 · object
  • notice · string
  • tier · string
  • language · string

Try in Playground →Capability overview

Example request

Example response (illustrative)

200application/json
{
  "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.