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

# Create a new proposal draft for the calling wallet.

> Drafts are wallet-private; the API key's `ownerAddress` is used as `user_address`. Every field is optional — drafts can be partially filled at any point.



## OpenAPI

````yaml /api-reference/openapi.json post /v1/proposals/drafts
openapi: 3.1.0
info:
  title: Aura API
  description: >-
    Public REST API for Aura — prediction markets on Alephium.


    This API exposes everything a user can see or do in the app:

    markets, prices, orderbook, trades, vault state, oracle and

    governance, plus build-tx endpoints that return unsigned

    transactions for the client to sign with its own wallet.


    Interactive reference: https://docs.aurabets.io/api-reference/introduction


    ## Discovery


    Built for integrators, not for lazy implementers:


    - **Faceted lists** — every list endpoint accepts `?facets=true`
      and returns category / tag / status counts in the same response,
      so a UI can render filter chips without a second request.
    - **Cursor pagination** — stable across inserts and fast at depth.
      Offset paging via `?page=` is still supported for compat.
    - **Rich filters** — `?q=`, `?category=`, `?tags=`, `?status=`,
      `?creator=`, `?minVolume=` on `/v1/markets`. Tag matching is
      AND (all listed tags must be present).
    - **Sortable** — `?sort=created-at|volume|best-bid-yes|recently-traded`
      with `?order=asc|desc`. Use `/v1/trending` for the composite-score sort.
    - **Field projection** — `?fields=id,question,bestBidYes` trims the
      wire weight for thin clients.
    - **Unified search** — `/v1/search?q=` runs a strict tsquery first
      with a fuzzy trigram fallback when nothing matches; result type is
      a discriminated union so adding events / users later is non-breaking.
    - **Transparent trending** — `/v1/trending` returns the full
      algorithm + per-market component scores so the ranking is auditable.
    - **Categories + tags as first-class** — `/v1/categories` and
      `/v1/tags` enumerate the taxonomy with market counts.

    ## Authentication


    Most endpoints accept (and many require) an API key:


    ```

    Authorization: Bearer aura_live_<your-key>

    ```


    Mint a key by signing a one-time challenge with your Alephium wallet:


    ```

    POST /v1/auth/challenge   { "address": "..." }

    POST /v1/auth/keys        { "address": "...", "publicKey": "...",
    "signature": "..." }

    ```


    Reads are accessible anonymously with low IP-based rate limits;

    write endpoints (`/v1/tx/*`) always require a key.


    ## Rate limits


    | Tier      | Reads (req/min) | Writes (req/min) |

    |-----------|----------------:|-----------------:|

    | Anonymous | 100000 per IP | 100000 per IP |

    | API key   | 100000 per key | 100000 per key |


    Standard `RateLimit-*` response headers are returned on every

    request (IETF `draft-ietf-httpapi-ratelimit-headers`).


    ## Write endpoints


    Aura is non-custodial — the API never holds private keys.

    Endpoints under `/v1/tx/*` return an *unsigned* transaction

    that the caller must sign with its own wallet (passkey, mobile

    wallet, hardware wallet, etc.) and submit to an Alephium node.


    A typical "place order" flow:


    1. `POST /v1/tx/markets/{address}/orders` → server returns
       `{ unsignedTx, gasEstimate, ... }`.
    2. Wallet signs `unsignedTx`.

    3. Wallet submits the signed tx to any Alephium node.
  version: 0.1.0
  license:
    name: MIT
  contact:
    name: Aura
    url: https://docs.aurabets.io
servers:
  - url: /
    description: this server
security:
  - ApiKey: []
  - {}
tags:
  - name: Health
    description: Liveness + version info.
  - name: Auth
    description: Mint, list, and revoke API keys (wallet-signed).
  - name: Markets
    description: Browse and look up prediction markets.
  - name: Categories
    description: Top-level market taxonomy with counts.
  - name: Tags
    description: Free-form market tags with counts.
  - name: Events
    description: Linked-market groups (multi-leg events).
  - name: Search
    description: Full-text + fuzzy search across markets.
  - name: Orderbook
    description: Live order book + recent fills.
  - name: Prices
    description: Latest prices and historical price series.
  - name: Orders
    description: Build unsigned tx to place / cancel orders.
  - name: Vault
    description: AURA token vault — build unsigned deposit / unlock / withdraw txs.
  - name: Disputes
    description: Optimistic oracle disputes — read-side state and votes.
  - name: Oracle votes
    description: Build unsigned oracle txs (submit / dispute / commit / reveal).
  - name: Voting
    description: Governance proposals + voting period state.
  - name: Vote
    description: Build unsigned governance vote tx.
  - name: Proposals
    description: Validate + build market-proposal txs (single-leg, linked, parlay).
  - name: Drafts
    description: Wallet-private market-proposal drafts (never on chain).
  - name: Users
    description: Wallet-scoped reads — profile, positions, orders, parlays.
  - name: Account actions
    description: Aggregated "what does this wallet need to do" views.
  - name: Leaderboard
    description: Top traders by composite score.
  - name: Faucet
    description: Testnet faucet (proxied to indexer).
externalDocs:
  description: Full Aura documentation (guides + interactive API reference)
  url: https://docs.aurabets.io
paths:
  /v1/proposals/drafts:
    post:
      tags:
        - Drafts
      summary: Create a new proposal draft for the calling wallet.
      description: >-
        Drafts are wallet-private; the API key's `ownerAddress` is used as
        `user_address`. Every field is optional — drafts can be partially filled
        at any point.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                marketType:
                  type: string
                  enum:
                    - binary
                    - categorical
                    - ''
                category:
                  type: string
                  maxLength: 80
                question:
                  type: string
                  maxLength: 300
                resolutionDate:
                  description: ISO-8601.
                  type: string
                  format: date-time
                  pattern: >-
                    ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$
                isTestResolution:
                  type: boolean
                resolutionRules:
                  type: string
                  maxLength: 1000
                resolutionSources:
                  maxItems: 20
                  type: array
                  items:
                    type: string
                    maxLength: 500
                marketOptions:
                  maxItems: 60
                  type: array
                  items:
                    type: string
                    maxLength: 300
                imageUrl:
                  type: string
                  maxLength: 500
                optionImageUrls:
                  maxItems: 60
                  type: array
                  items:
                    type: string
                    maxLength: 500
      responses:
        '201':
          description: Default Response
          content:
            application/json:
              schema:
                type: object
                properties:
                  id:
                    type: integer
                    minimum: -9007199254740991
                    maximum: 9007199254740991
                  userAddress:
                    type: string
                    minLength: 30
                    maxLength: 80
                    pattern: >-
                      ^[123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz:]+$
                    description: Alephium address (base58, optional `:N` group suffix).
                  marketType:
                    anyOf:
                      - type: string
                        enum:
                          - binary
                          - categorical
                          - ''
                      - type: 'null'
                  category:
                    anyOf:
                      - type: string
                      - type: 'null'
                  question:
                    anyOf:
                      - type: string
                      - type: 'null'
                  resolutionDate:
                    anyOf:
                      - type: string
                      - type: 'null'
                  isTestResolution:
                    type: boolean
                  resolutionRules:
                    anyOf:
                      - type: string
                      - type: 'null'
                  resolutionSources:
                    type: array
                    items:
                      type: string
                  marketOptions:
                    type: array
                    items:
                      type: string
                    description: Per-leg questions for categorical / linked markets.
                  imageUrl:
                    anyOf:
                      - type: string
                      - type: 'null'
                  optionImageUrls:
                    type: array
                    items:
                      type: string
                  createdAt:
                    type: string
                  updatedAt:
                    type: string
                required:
                  - id
                  - userAddress
                  - marketType
                  - category
                  - question
                  - resolutionDate
                  - isTestResolution
                  - resolutionRules
                  - resolutionSources
                  - marketOptions
                  - imageUrl
                  - optionImageUrls
                  - createdAt
                  - updatedAt
                additionalProperties: false
        '400':
          description: Default Response
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: object
                    properties:
                      code:
                        type: string
                        description: Machine-readable error code (snake_case).
                      message:
                        type: string
                        description: Human-readable error message.
                      details: {}
                    required:
                      - code
                      - message
                    additionalProperties: false
                required:
                  - error
                additionalProperties: false
        '401':
          description: Default Response
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: object
                    properties:
                      code:
                        type: string
                        description: Machine-readable error code (snake_case).
                      message:
                        type: string
                        description: Human-readable error message.
                      details: {}
                    required:
                      - code
                      - message
                    additionalProperties: false
                required:
                  - error
                additionalProperties: false
        '500':
          description: Default Response
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: object
                    properties:
                      code:
                        type: string
                        description: Machine-readable error code (snake_case).
                      message:
                        type: string
                        description: Human-readable error message.
                      details: {}
                    required:
                      - code
                      - message
                    additionalProperties: false
                required:
                  - error
                additionalProperties: false
      security:
        - ApiKey: []
components:
  securitySchemes:
    ApiKey:
      type: http
      scheme: bearer
      bearerFormat: aura_live_<32 char secret>
      description: API key obtained from POST /v1/auth/keys.

````