> ## Documentation Index
> Fetch the complete documentation index at: https://docs.astrom8.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Tarot draw (no interpretation)



## OpenAPI

````yaml /openapi.public.json post /api/v3/tarot/draw
openapi: 3.1.0
info:
  title: AstroM8 Public API
  version: 1.4.0
  description: >-
    Astrology calculations, reports, customer delivery, and enterprise
    workflows. Each operation declares whether it uses an API key or a customer
    session bearer token.
servers:
  - url: https://api.astrom8.com
    description: Production
security: []
tags:
  - name: Western
    description: Natal, relationship, return, progression, and transit calculations.
  - name: Vedic
    description: Lahiri sidereal Vedic calculations, matching, timing, and remedies.
  - name: Thai Astrology
    description: Thai calendar, auspicious timing, lunar, festival, and wheel tools.
  - name: Chinese & Korean
    description: BaZi, Qi Men Dun Jia, and Saju calculations.
  - name: Horoscopes
    description: Published daily and range horoscope content.
  - name: Reports
    description: Branded report generation and asynchronous job polling.
  - name: Tarot & Numerology
    description: Tarot spreads and Pythagorean numerology.
  - name: Uranian
    description: Uranian charts, midpoints, and planetary pictures.
  - name: Developer workflow
    description: Preflight capability eligibility and credit estimates.
  - name: Visual readings
    description: >-
      Private Palm and Face Reading upload, preflight, and asynchronous job
      workflows.
  - name: Customer reports
    description: Session-authenticated report jobs and reusable brand profiles.
  - name: Customer delivery
    description: Session-authenticated webhooks and scheduled horoscope delivery.
  - name: Customer visual readings
    description: >-
      Session-authenticated visual reading jobs, economics, and delivery
      subscriptions.
  - name: Cultural Intelligence
    description: >-
      Enterprise API-key workflows for encrypted profiles, teams, and campaign
      content.
paths:
  /api/v3/tarot/draw:
    post:
      tags:
        - Tarot & Numerology
      summary: Tarot draw (no interpretation)
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TarotDrawRequest'
      responses:
        '200':
          description: Drawn cards
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TarotDrawResponse'
        '400':
          description: >-
            Invalid request (`invalid_tarot_draw`, `invalid_tarot_picks`). The
            message is fixed and the input is never echoed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/JsonError'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '402':
          $ref: '#/components/responses/PaymentRequired'
      security:
        - ApiKeyAuth: []
components:
  schemas:
    TarotDrawRequest:
      type: object
      required:
        - spread
      additionalProperties: false
      properties:
        spread:
          type: string
          enum:
            - single
            - three-card
            - celtic-cross
        draw_id:
          type: string
          minLength: 1
          maxLength: 80
          description: >-
            Opaque seed for the shuffle: send a fresh random value per reading
            (or omit it and the server generates one), never a user identifier
            or a fixed string. The same draw_id (and picks) always returns the
            same cards; a retry is charged again unless it reuses an
            Idempotency-Key. No leading or trailing spaces. The caller controls
            the seed, so this is a repeatable draw, not a provably random one.
          pattern: ^\S(?:[\s\S]*\S)?$
        picks:
          type: array
          minItems: 3
          maxItems: 3
          items:
            type: integer
            minimum: 0
            maximum: 11
          description: >-
            three-card only, and only with draw_id: three distinct positions
            picked from a fan of 12 face-down cards, in pick order (past,
            present, future). Defaults to [0, 1, 2].
        locale:
          type: string
          minLength: 2
          maxLength: 24
          description: >-
            Language by primary subtag (th or en, e.g. th-TH). Anything else
            falls back to Accept-Language, then en.
    TarotDrawResponse:
      type: object
      required:
        - draw_id
        - spread
        - locale
        - cards
        - content_origin
        - table_version
        - disclaimer
        - position_labels_version
      properties:
        draw_id:
          type: string
        spread:
          type: string
          enum:
            - single
            - three-card
            - celtic-cross
        locale:
          type: string
          enum:
            - th
            - en
        cards:
          type: array
          items:
            $ref: '#/components/schemas/TarotDrawCard'
        content_origin:
          type: string
          enum:
            - editorial
        table_version:
          type: string
        disclaimer:
          type: string
        position_labels_version:
          type: string
          description: Version of the position-label table; table_version is the deck text.
    JsonError:
      type: object
      required:
        - error
        - message
      properties:
        error:
          type: string
          description: >-
            Stable slug (e.g. unauthorized, payment_required,
            internal_server_error).
        message:
          type: string
          description: Human-readable message safe for clients.
        code:
          type: string
          description: Optional provider-specific code.
        request_id:
          type: string
          description: Correlation id when middleware sets it.
    TarotDrawCard:
      type: object
      required:
        - position
        - position_label
        - card_id
        - card_name
        - card_name_th
        - arcana
        - upright
        - orientation
        - keywords
        - keywords_th
        - meaning
        - meaning_scope
      properties:
        position:
          type: string
          description: >-
            single: card. three-card: past, present, future. celtic-cross:
            present, challenge, foundation, past, crown, future, self,
            environment, hopes_fears, outcome.
        position_label:
          type: string
        card_id:
          type: integer
          minimum: 0
          maximum: 77
        card_name:
          type: string
        card_name_th:
          type: string
        arcana:
          type: string
          enum:
            - major
            - minor
        upright:
          type: boolean
        orientation:
          type: string
          enum:
            - upright
            - reversed
        keywords:
          type: array
          items:
            type: string
        keywords_th:
          type: array
          items:
            type: string
        meaning:
          type: string
          description: >-
            The deck's upright or reversed meaning in the requested language.
            Minor arcana use suit-level text.
        meaning_scope:
          type: string
          enum:
            - card
            - suit
          description: >-
            card: a meaning written for this card (major arcana). suit: one
            shared text per suit (minor arcana); use your own knowledge for the
            specific card.
  responses:
    Unauthorized:
      description: Missing or invalid API key
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/JsonError'
          example:
            error: unauthorized
            message: Invalid API key
            code: '401'
            request_id: 01HQXYZ...
    PaymentRequired:
      description: >-
        Insufficient credits (checked before work where applicable; deduction is
        atomic)
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/JsonError'
          example:
            error: payment_required
            message: Insufficient credits for this request
            code: '402'
            request_id: 01HQXYZ...
  securitySchemes:
    ApiKeyAuth:
      type: http
      scheme: bearer
      description: Use the raw API key as the Bearer token, or send X-API-Key instead.

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.