Skip to content
API96Astro API

API reference / Tarot

Tarot

Tarot card draws and fixed spreads.

15 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 its data fields are a guide to the shape, not a contract.

Tarot Card Draw

POSTAvailable

https://api.96astro.com/v1/tarot/tarot-shuffle

Turns over the top N cards (1-78) of a shuffled deck with orientation, keywords and element; a draw can be replayed by its draw_id, or fixed for the day.

Credits
1 credit
Input
No input
Output
JSON
Delivery
Direct response
Languages
English; 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
countintegerOptional

Cards to turn over.

Default: 3

Limits: minimum 1, maximum 78

Example: 3

reversalsbooleanOptional

Default: true

draw_idstring | nullOptional

Replay a previous shuffle.

Default: null

Limits: at most 64 characters

dailybooleanOptional

The stable deck of the day instead of a new shuffle.

Default: false

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

Inferred from the example response: a guide to the shape, not a contract.

  • reading_type · string
  • draw_id · string
  • daily · boolean
  • replayable · boolean
  • day · null
  • description · string
  • cards · array of object
  • dominant_element · string
  • major_arcana_count · integer
  • total_cards_shown · integer

Try in Playground →Capability overview

Example request

Example response

200application/json
{
  "data": {
    "reading_type": "shuffle_deck",
    "draw_id": "cfbf4d7ce7f94824bb88d5b341cf7811",
    "daily": false,
    "replayable": true,
    "day": null,
    "description": "A freshly shuffled deck. Keep the draw_id to see this same deck again; shuffle without one for a new deck.",
    "cards": [
      {
        "position": 1,
        "card_id": 58,
        "card_name": "Nine of Swords",
        "arcana": "Minor",
        "suit": "Swords",
        "orientation": "upright",
        "keywords": [
          "Anxiety",
          "Worry",
          "Fear"
  …

Captured from the live engine with a sandbox key (so credits_used is 0) and trimmed: long arrays keep their first items.

Error responses

  • 400invalid_request
  • 401invalid_key, expired_key
  • 402payment_required
  • 403account_suspended
  • 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
  • 504deadline_exceeded

Errors are never charged. What each status means and what to do: errors.

Tarot: Yes / No

POSTAvailable

https://api.96astro.com/v1/tarot/tarot-yes-no

Draws cards for the Yes / No spread and returns them with a reading.

Credits
1 credit
Input
Name
Output
JSON
Delivery
Direct response
Languages
English; 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
namestringOptional

Default: ""

Limits: at most 120 characters

questionstringOptional

Default: ""

Limits: at most 500 characters

Example: What should I focus on this month?

reversalsbooleanOptional

Allow reversed cards.

Default: true

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

Inferred from the example response: a guide to the shape, not a contract.

  • reading_type · string
  • question · string
  • answer · string
  • answer_score · integer
  • cards · array of object
  • summary · string
  • hint · string
  • note · string

Try in Playground →Capability overview

Example request

Example response

200application/json
{
  "data": {
    "reading_type": "yes_no",
    "question": "What should I focus on this month?",
    "answer": "Maybe / Seek more clarity",
    "answer_score": 0,
    "cards": [
      {
        "position": 1,
        "position_name": "The Oracle",
        "position_context": "The card's energy gives a direct yes, no, or maybe answer to your question.",
        "card_id": 48,
        "card_name": "Queen of Cups",
        "arcana": "Minor",
        "suit": "Cups",
        "number": 13,
        "orientation": "upright",
        "keywords": [
          "Compassionate",
          "Caring",
  …

Captured from the live engine with a sandbox key (so credits_used is 0) and trimmed: long arrays keep their first items.

Error responses

  • 400invalid_request
  • 401invalid_key, expired_key
  • 402payment_required
  • 403account_suspended
  • 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
  • 504deadline_exceeded

Errors are never charged. What each status means and what to do: errors.

Tarot: Daily Card

POSTAvailable

https://api.96astro.com/v1/tarot/tarot-daily

Draws cards for the Daily Card spread and returns them with a reading.

Credits
1 credit
Input
Name
Output
JSON
Delivery
Direct response
Languages
English; 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
namestringOptional

Default: ""

Limits: at most 120 characters

questionstringOptional

Default: ""

Limits: at most 500 characters

Example: What should I focus on this month?

reversalsbooleanOptional

Allow reversed cards.

Default: true

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

Inferred from the example response: a guide to the shape, not a contract.

  • reading_type · string
  • reading_date · string
  • name · string
  • cards · array of object
  • summary · string
  • affirmation · string

Try in Playground →Capability overview

Example request

Example response

200application/json
{
  "data": {
    "reading_type": "daily",
    "reading_date": "2026-10-14",
    "name": "Seeker",
    "cards": [
      {
        "position": 1,
        "position_name": "Energy of the Day",
        "position_context": "This card describes the dominant theme, opportunity, or caution for your day.",
        "card_id": 1,
        "card_name": "The Magician",
        "arcana": "Major",
        "suit": null,
        "number": 1,
        "orientation": "upright",
        "keywords": [
          "Willpower",
          "Skill",
          "Manifestation"
  …

Captured from the live engine with a sandbox key (so credits_used is 0) and trimmed: long arrays keep their first items.

Error responses

  • 400invalid_request
  • 401invalid_key, expired_key
  • 402payment_required
  • 403account_suspended
  • 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
  • 504deadline_exceeded

Errors are never charged. What each status means and what to do: errors.

POSTAvailable

https://api.96astro.com/v1/tarot/tarot-fortune-cookie

Draws cards for the Fortune Cookie spread and returns them with a reading.

Credits
1 credit
Input
Name
Output
JSON
Delivery
Direct response
Languages
English; 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
namestringOptional

Default: ""

Limits: at most 120 characters

questionstringOptional

Default: ""

Limits: at most 500 characters

Example: What should I focus on this month?

reversalsbooleanOptional

Allow reversed cards.

Default: true

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

Inferred from the example response: a guide to the shape, not a contract.

  • reading_type · string
  • name · string
  • cards · array of object
  • fortune · string
  • lucky_keywords · array of string
  • element · string
  • summary · string

Try in Playground →Capability overview

Example request

Example response

200application/json
{
  "data": {
    "reading_type": "fortune_cookie",
    "name": "Seeker",
    "cards": [
      {
        "position": 1,
        "position_name": "Your Fortune",
        "position_context": "A single karmic message from the universe — reflect on its deeper meaning.",
        "card_id": 76,
        "card_name": "Queen of Pentacles",
        "arcana": "Minor",
        "suit": "Pentacles",
        "number": 13,
        "orientation": "reversed",
        "keywords": [
          "Financial independence",
          "Self-care",
          "Work/home conflict"
        ],
  …

Captured from the live engine with a sandbox key (so credits_used is 0) and trimmed: long arrays keep their first items.

Error responses

  • 400invalid_request
  • 401invalid_key, expired_key
  • 402payment_required
  • 403account_suspended
  • 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
  • 504deadline_exceeded

Errors are never charged. What each status means and what to do: errors.

Tarot: Flirt

POSTAvailable

https://api.96astro.com/v1/tarot/tarot-flirt

Draws cards for the Flirt spread and returns them with a reading.

Credits
1 credit
Input
Name
Output
JSON
Delivery
Direct response
Languages
English; 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
namestringOptional

Default: ""

Limits: at most 120 characters

questionstringOptional

Default: ""

Limits: at most 500 characters

Example: What should I focus on this month?

reversalsbooleanOptional

Allow reversed cards.

Default: true

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

Inferred from the example response: a guide to the shape, not a contract.

  • reading_type · string
  • name · string
  • question · string
  • cards · array of object
  • dominant_element · string
  • summary · string

Try in Playground →Capability overview

Example request

Example response

200application/json
{
  "data": {
    "reading_type": "flirt",
    "name": "Seeker",
    "question": "What should I focus on this month?",
    "cards": [
      {
        "position": 1,
        "position_name": "Their Interest in You",
        "position_context": "Reveals the level and nature of the other person's attraction toward you.",
        "card_id": 36,
        "card_name": "Ace of Cups",
        "arcana": "Minor",
        "suit": "Cups",
        "number": 1,
        "orientation": "reversed",
        "keywords": [
          "Blocked emotions",
          "Emotional pain",
          "Repressed feelings"
  …

Captured from the live engine with a sandbox key (so credits_used is 0) and trimmed: long arrays keep their first items.

Error responses

  • 400invalid_request
  • 401invalid_key, expired_key
  • 402payment_required
  • 403account_suspended
  • 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
  • 504deadline_exceeded

Errors are never charged. What each status means and what to do: errors.

Tarot: Love Triangle

POSTAvailable

https://api.96astro.com/v1/tarot/tarot-love-triangle

Draws cards for the Love Triangle spread and returns them with a reading.

Credits
1 credit
Input
Name
Output
JSON
Delivery
Direct response
Languages
English; 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
namestringOptional

Default: ""

Limits: at most 120 characters

questionstringOptional

Default: ""

Limits: at most 500 characters

Example: What should I focus on this month?

reversalsbooleanOptional

Allow reversed cards.

Default: true

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

Inferred from the example response: a guide to the shape, not a contract.

  • reading_type · string
  • name · string
  • question · string
  • cards · array of object
  • dominant_element · string
  • summary · string

Try in Playground →Capability overview

Example request

Example response

200application/json
{
  "data": {
    "reading_type": "love_triangle",
    "name": "Seeker",
    "question": "What should I focus on this month?",
    "cards": [
      {
        "position": 1,
        "position_name": "Your Role",
        "position_context": "Your position, feelings, and energy within this triangular dynamic.",
        "card_id": 69,
        "card_name": "Six of Pentacles",
        "arcana": "Minor",
        "suit": "Pentacles",
        "number": 6,
        "orientation": "reversed",
        "keywords": [
          "Strings-attached generosity",
          "Power dynamics",
          "Debt"
  …

Captured from the live engine with a sandbox key (so credits_used is 0) and trimmed: long arrays keep their first items.

Error responses

  • 400invalid_request
  • 401invalid_key, expired_key
  • 402payment_required
  • 403account_suspended
  • 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
  • 504deadline_exceeded

Errors are never charged. What each status means and what to do: errors.

Tarot: Career

POSTAvailable

https://api.96astro.com/v1/tarot/tarot-career

Draws cards for the Career spread and returns them with a reading.

Credits
1 credit
Input
Name
Output
JSON
Delivery
Direct response
Languages
English; 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
namestringOptional

Default: ""

Limits: at most 120 characters

questionstringOptional

Default: ""

Limits: at most 500 characters

Example: What should I focus on this month?

reversalsbooleanOptional

Allow reversed cards.

Default: true

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

Inferred from the example response: a guide to the shape, not a contract.

  • reading_type · string
  • name · string
  • question · string
  • cards · array of object
  • dominant_element · string
  • major_arcana_count · integer
  • major_arcana_note · string
  • summary · string

Try in Playground →Capability overview

Example request

Example response

200application/json
{
  "data": {
    "reading_type": "career",
    "name": "Seeker",
    "question": "What should I focus on this month?",
    "cards": [
      {
        "position": 1,
        "position_name": "Current Career Energy",
        "position_context": "Your present professional standing, feelings, and trajectory.",
        "card_id": 0,
        "card_name": "The Fool",
        "arcana": "Major",
        "suit": null,
        "number": 0,
        "orientation": "reversed",
        "keywords": [
          "Recklessness",
          "Naivety",
          "Foolishness"
  …

Captured from the live engine with a sandbox key (so credits_used is 0) and trimmed: long arrays keep their first items.

Error responses

  • 400invalid_request
  • 401invalid_key, expired_key
  • 402payment_required
  • 403account_suspended
  • 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
  • 504deadline_exceeded

Errors are never charged. What each status means and what to do: errors.

Tarot: In-Depth Love

POSTAvailable

https://api.96astro.com/v1/tarot/tarot-in-depth-love

Draws cards for the In-Depth Love spread and returns them with a reading.

Credits
1 credit
Input
Name
Output
JSON
Delivery
Direct response
Languages
English; 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
namestringOptional

Default: ""

Limits: at most 120 characters

questionstringOptional

Default: ""

Limits: at most 500 characters

Example: What should I focus on this month?

reversalsbooleanOptional

Allow reversed cards.

Default: true

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

Inferred from the example response: a guide to the shape, not a contract.

  • reading_type · string
  • name · string
  • question · string
  • cards · array of object
  • dominant_element · string
  • major_arcana_count · integer
  • summary · string

Try in Playground →Capability overview

Example request

Example response

200application/json
{
  "data": {
    "reading_type": "in_depth_love",
    "name": "Seeker",
    "question": "What should I focus on this month?",
    "cards": [
      {
        "position": 1,
        "position_name": "Your Heart",
        "position_context": "Your current emotional state and what you truly desire in love.",
        "card_id": 69,
        "card_name": "Six of Pentacles",
        "arcana": "Minor",
        "suit": "Pentacles",
        "number": 6,
        "orientation": "upright",
        "keywords": [
          "Generosity",
          "Charity",
          "Giving"
  …

Captured from the live engine with a sandbox key (so credits_used is 0) and trimmed: long arrays keep their first items.

Error responses

  • 400invalid_request
  • 401invalid_key, expired_key
  • 402payment_required
  • 403account_suspended
  • 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
  • 504deadline_exceeded

Errors are never charged. What each status means and what to do: errors.

Tarot: Erotic Love

POSTAvailable

https://api.96astro.com/v1/tarot/tarot-erotic-love

Draws cards for the Erotic Love spread and returns them with a reading.

Credits
1 credit
Input
Name
Output
JSON
Delivery
Direct response
Languages
English; 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
namestringOptional

Default: ""

Limits: at most 120 characters

questionstringOptional

Default: ""

Limits: at most 500 characters

Example: What should I focus on this month?

reversalsbooleanOptional

Allow reversed cards.

Default: true

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

Inferred from the example response: a guide to the shape, not a contract.

  • reading_type · string
  • name · string
  • question · string
  • cards · array of object
  • dominant_element · string
  • major_arcana_count · integer
  • summary · string

Try in Playground →Capability overview

Example request

Example response

200application/json
{
  "data": {
    "reading_type": "erotic_love",
    "name": "Seeker",
    "question": "What should I focus on this month?",
    "cards": [
      {
        "position": 1,
        "position_name": "Passion Flame",
        "position_context": "The raw passionate energy between you — what ignites the chemistry.",
        "card_id": 11,
        "card_name": "Justice",
        "arcana": "Major",
        "suit": null,
        "number": 11,
        "orientation": "upright",
        "keywords": [
          "Fairness",
          "Truth",
          "Cause and effect"
  …

Captured from the live engine with a sandbox key (so credits_used is 0) and trimmed: long arrays keep their first items.

Error responses

  • 400invalid_request
  • 401invalid_key, expired_key
  • 402payment_required
  • 403account_suspended
  • 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
  • 504deadline_exceeded

Errors are never charged. What each status means and what to do: errors.

Tarot: Compatibility

POSTAvailable

https://api.96astro.com/v1/tarot/tarot-compatibility

Draws cards for the Compatibility spread and returns them with a reading.

Credits
1 credit
Input
Name
Output
JSON
Delivery
Direct response
Languages
English; 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
name_1stringRequired

Limits: 1 to 120 characters

Example: Asha

name_2stringRequired

Limits: 1 to 120 characters

Example: Ravi

reversalsbooleanOptional

Default: true

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

Inferred from the example response: a guide to the shape, not a contract.

  • reading_type · string
  • person_1 · string
  • person_2 · string
  • cards · array of object
  • compatibility_score · integer
  • element_1 · string
  • element_2 · string
  • compatibility_description · string
  • score_basis · string
  • verdict · string
  • dominant_element · string
  • summary · string

Try in Playground →Capability overview

Example request

Example response

200application/json
{
  "data": {
    "reading_type": "compatibility",
    "person_1": "Asha",
    "person_2": "Ravi",
    "cards": [
      {
        "position": 1,
        "position_name": "Your Core Energy",
        "position_context": "Your fundamental nature and what you bring to a partnership.",
        "card_id": 42,
        "card_name": "Seven of Cups",
        "arcana": "Minor",
        "suit": "Cups",
        "number": 7,
        "orientation": "reversed",
        "keywords": [
          "Alignment",
          "Personal values",
          "Overwhelm"
  …

Captured from the live engine with a sandbox key (so credits_used is 0) and trimmed: long arrays keep their first items.

Error responses

  • 400invalid_request
  • 401invalid_key, expired_key
  • 402payment_required
  • 403account_suspended
  • 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
  • 504deadline_exceeded

Errors are never charged. What each status means and what to do: errors.

Tarot: Romantic Breakup

POSTAvailable

https://api.96astro.com/v1/tarot/tarot-romantic-breakup

Draws cards for the Romantic Breakup spread and returns them with a reading.

Credits
1 credit
Input
Name
Output
JSON
Delivery
Direct response
Languages
English; 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
namestringOptional

Default: ""

Limits: at most 120 characters

questionstringOptional

Default: ""

Limits: at most 500 characters

Example: What should I focus on this month?

reversalsbooleanOptional

Allow reversed cards.

Default: true

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

Inferred from the example response: a guide to the shape, not a contract.

  • reading_type · string
  • name · string
  • question · string
  • cards · array of object
  • dominant_element · string
  • major_arcana_count · integer
  • summary · string

Try in Playground →Capability overview

Example request

Example response

200application/json
{
  "data": {
    "reading_type": "romantic_breakup",
    "name": "Seeker",
    "question": "What should I focus on this month?",
    "cards": [
      {
        "position": 1,
        "position_name": "Root Cause",
        "position_context": "The underlying energy or issue that led to the breakdown of love.",
        "card_id": 57,
        "card_name": "Eight of Swords",
        "arcana": "Minor",
        "suit": "Swords",
        "number": 8,
        "orientation": "reversed",
        "keywords": [
          "Self-acceptance",
          "Release",
          "New perspective"
  …

Captured from the live engine with a sandbox key (so credits_used is 0) and trimmed: long arrays keep their first items.

Error responses

  • 400invalid_request
  • 401invalid_key, expired_key
  • 402payment_required
  • 403account_suspended
  • 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
  • 504deadline_exceeded

Errors are never charged. What each status means and what to do: errors.

Tarot: Business Breakup

POSTAvailable

https://api.96astro.com/v1/tarot/tarot-business-breakup

Draws cards for the Business Breakup spread and returns them with a reading.

Credits
1 credit
Input
Name
Output
JSON
Delivery
Direct response
Languages
English; 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
namestringOptional

Default: ""

Limits: at most 120 characters

questionstringOptional

Default: ""

Limits: at most 500 characters

Example: What should I focus on this month?

reversalsbooleanOptional

Allow reversed cards.

Default: true

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

Inferred from the example response: a guide to the shape, not a contract.

  • reading_type · string
  • name · string
  • question · string
  • cards · array of object
  • dominant_element · string
  • major_arcana_count · integer
  • summary · string

Try in Playground →Capability overview

Example request

Example response

200application/json
{
  "data": {
    "reading_type": "business_breakup",
    "name": "Seeker",
    "question": "What should I focus on this month?",
    "cards": [
      {
        "position": 1,
        "position_name": "Core Issue",
        "position_context": "The fundamental breakdown point in the business partnership.",
        "card_id": 50,
        "card_name": "Ace of Swords",
        "arcana": "Minor",
        "suit": "Swords",
        "number": 1,
        "orientation": "upright",
        "keywords": [
          "Breakthrough",
          "New idea",
          "Mental clarity"
  …

Captured from the live engine with a sandbox key (so credits_used is 0) and trimmed: long arrays keep their first items.

Error responses

  • 400invalid_request
  • 401invalid_key, expired_key
  • 402payment_required
  • 403account_suspended
  • 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
  • 504deadline_exceeded

Errors are never charged. What each status means and what to do: errors.

Tarot: Past, Present, Future

POSTAvailable

https://api.96astro.com/v1/tarot/tarot-past-present-future

Draws cards for the Past, Present, Future spread and returns them with a reading.

Credits
1 credit
Input
Name
Output
JSON
Delivery
Direct response
Languages
English; 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
namestringOptional

Default: ""

Limits: at most 120 characters

questionstringOptional

Default: ""

Limits: at most 500 characters

Example: What should I focus on this month?

reversalsbooleanOptional

Allow reversed cards.

Default: true

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

Inferred from the example response: a guide to the shape, not a contract.

  • reading_type · string
  • name · string
  • question · string
  • cards · array of object
  • dominant_element · string
  • major_arcana_count · integer
  • summary · string

Try in Playground →Capability overview

Example request

Example response

200application/json
{
  "data": {
    "reading_type": "past_present_future",
    "name": "Seeker",
    "question": "What should I focus on this month?",
    "cards": [
      {
        "position": 1,
        "position_name": "Past",
        "position_context": "The roots of the matter — past influences, patterns and karma that set the stage.",
        "card_id": 20,
        "card_name": "Judgement",
        "arcana": "Major",
        "suit": null,
        "number": 20,
        "orientation": "upright",
        "keywords": [
          "Reflection",
          "Reckoning",
          "Awakening"
  …

Captured from the live engine with a sandbox key (so credits_used is 0) and trimmed: long arrays keep their first items.

Error responses

  • 400invalid_request
  • 401invalid_key, expired_key
  • 402payment_required
  • 403account_suspended
  • 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
  • 504deadline_exceeded

Errors are never charged. What each status means and what to do: errors.

Tarot: Celtic Cross

POSTAvailable

https://api.96astro.com/v1/tarot/tarot-celtic-cross

Draws cards for the Celtic Cross spread and returns them with a reading.

Credits
1 credit
Input
Name
Output
JSON
Delivery
Direct response
Languages
English; 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
namestringOptional

Default: ""

Limits: at most 120 characters

questionstringOptional

Default: ""

Limits: at most 500 characters

Example: What should I focus on this month?

reversalsbooleanOptional

Allow reversed cards.

Default: true

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

Inferred from the example response: a guide to the shape, not a contract.

  • reading_type · string
  • name · string
  • question · string
  • cards · array of object
  • dominant_element · string
  • major_arcana_count · integer
  • summary · string

Try in Playground →Capability overview

Example request

Example response

200application/json
{
  "data": {
    "reading_type": "celtic_cross",
    "name": "Seeker",
    "question": "What should I focus on this month?",
    "cards": [
      {
        "position": 1,
        "position_name": "The Heart of the Matter",
        "position_context": "The core of your question and your present situation.",
        "card_id": 17,
        "card_name": "The Star",
        "arcana": "Major",
        "suit": null,
        "number": 17,
        "orientation": "reversed",
        "keywords": [
          "Lack of faith",
          "Despair",
          "Disconnection"
  …

Captured from the live engine with a sandbox key (so credits_used is 0) and trimmed: long arrays keep their first items.

Error responses

  • 400invalid_request
  • 401invalid_key, expired_key
  • 402payment_required
  • 403account_suspended
  • 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
  • 504deadline_exceeded

Errors are never charged. What each status means and what to do: errors.

Tarot: Year Ahead

POSTAvailable

https://api.96astro.com/v1/tarot/tarot-year-ahead

Draws cards for the Year Ahead spread and returns them with a reading.

Credits
1 credit
Input
Name
Output
JSON
Delivery
Direct response
Languages
English; 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
namestringOptional

Default: ""

Limits: at most 120 characters

questionstringOptional

Default: ""

Limits: at most 500 characters

Example: What should I focus on this month?

reversalsbooleanOptional

Allow reversed cards.

Default: true

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

Inferred from the example response: a guide to the shape, not a contract.

  • reading_type · string
  • name · string
  • question · string
  • cards · array of object
  • dominant_element · string
  • major_arcana_count · integer
  • summary · string

Try in Playground →Capability overview

Example request

Example response

200application/json
{
  "data": {
    "reading_type": "year_ahead",
    "name": "Seeker",
    "question": "What should I focus on this month?",
    "cards": [
      {
        "position": 1,
        "position_name": "Month 1",
        "position_context": "The theme, opportunity and caution of the coming first month.",
        "card_id": 57,
        "card_name": "Eight of Swords",
        "arcana": "Minor",
        "suit": "Swords",
        "number": 8,
        "orientation": "upright",
        "keywords": [
          "Imprisonment",
          "Entrapment",
          "Self-victimisation"
  …

Captured from the live engine with a sandbox key (so credits_used is 0) and trimmed: long arrays keep their first items.

Error responses

  • 400invalid_request
  • 401invalid_key, expired_key
  • 402payment_required
  • 403account_suspended
  • 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
  • 504deadline_exceeded

Errors are never charged. What each status means and what to do: errors.