{
    "ok": true,
    "version": "3.7.3-gameplay-action-verification-live-readiness",
    "contracts": [
        {
            "endpoint": "POST /api/v1/packs/buy-safe",
            "action": "pack_buy",
            "required": [
                "idempotency_key",
                "pack_id"
            ],
            "optional": [
                "currency"
            ],
            "receipt": [
                "user_pack_id",
                "receipt",
                "ledger_ids"
            ]
        },
        {
            "endpoint": "POST /api/v1/packs/open-safe",
            "action": "pack_open",
            "required": [
                "idempotency_key",
                "user_pack_id"
            ],
            "optional": [],
            "receipt": [
                "log_id",
                "cards",
                "rng_proof_id",
                "seed_hash",
                "proof_log_id"
            ]
        },
        {
            "endpoint": "POST /api/v1/squads/save",
            "action": "squad_save",
            "required": [
                "idempotency_key"
            ],
            "optional": [
                "squad_id",
                "autofill",
                "slots",
                "tactics"
            ],
            "receipt": [
                "squad_id",
                "validation",
                "squad_rating"
            ]
        },
        {
            "endpoint": "POST /api/v1/battles/start",
            "action": "battle_start",
            "required": [
                "idempotency_key"
            ],
            "optional": [
                "mode",
                "engine",
                "squad_id",
                "allow_incomplete"
            ],
            "receipt": [
                "match",
                "card_battle",
                "won",
                "reward_once_key"
            ]
        },
        {
            "endpoint": "POST /api/v1/marketplace/list",
            "action": "marketplace_list",
            "required": [
                "idempotency_key",
                "user_card_id",
                "price_coins"
            ],
            "optional": [
                "listing_type",
                "buyout_price_coins",
                "ends_at"
            ],
            "receipt": [
                "listing_id"
            ]
        },
        {
            "endpoint": "POST /api/v1/marketplace/buy",
            "action": "marketplace_buy",
            "required": [
                "idempotency_key",
                "listing_id"
            ],
            "optional": [],
            "receipt": [
                "transaction_id",
                "listing_id"
            ]
        },
        {
            "endpoint": "POST /api/v1/marketplace/cancel",
            "action": "marketplace_cancel",
            "required": [
                "idempotency_key",
                "listing_id"
            ],
            "optional": [],
            "receipt": [
                "cancelled"
            ]
        },
        {
            "endpoint": "POST /api/v1/auctions/bid",
            "action": "auction_bid",
            "required": [
                "idempotency_key",
                "listing_id",
                "amount_coins"
            ],
            "optional": [],
            "receipt": [
                "bid_id",
                "amount_coins"
            ]
        },
        {
            "endpoint": "POST /api/v1/auctions/settle",
            "action": "auction_settle",
            "required": [
                "idempotency_key",
                "listing_id"
            ],
            "optional": [],
            "receipt": [
                "settled",
                "transaction_id",
                "reason"
            ]
        },
        {
            "endpoint": "POST /api/v1/player-actions/trade-create",
            "action": "trade_create",
            "required": [
                "idempotency_key",
                "to_user_id"
            ],
            "optional": [
                "offered_card_ids",
                "requested_card_ids",
                "offered_coins",
                "requested_coins",
                "message"
            ],
            "receipt": [
                "trade_id"
            ]
        },
        {
            "endpoint": "POST /api/v1/player-actions/trade-respond",
            "action": "trade_respond",
            "required": [
                "idempotency_key",
                "trade_id",
                "action"
            ],
            "optional": [],
            "receipt": [
                "trade_id",
                "status",
                "transaction_id"
            ]
        },
        {
            "endpoint": "POST /api/v1/player-actions/guild-create",
            "action": "guild_create",
            "required": [
                "idempotency_key",
                "name"
            ],
            "optional": [
                "visibility",
                "description"
            ],
            "receipt": [
                "guild_id"
            ]
        },
        {
            "endpoint": "POST /api/v1/player-actions/guild-join",
            "action": "guild_join",
            "required": [
                "idempotency_key",
                "guild_id"
            ],
            "optional": [
                "message"
            ],
            "receipt": [
                "join_id",
                "guild_id"
            ]
        },
        {
            "endpoint": "POST /api/v1/player-actions/guild-chat",
            "action": "guild_chat",
            "required": [
                "idempotency_key",
                "guild_id",
                "body"
            ],
            "optional": [],
            "receipt": [
                "message_id"
            ]
        },
        {
            "endpoint": "POST /api/v1/player-actions/guild-donate",
            "action": "guild_donate",
            "required": [
                "idempotency_key",
                "guild_id",
                "coins"
            ],
            "optional": [],
            "receipt": [
                "donated",
                "guild_id",
                "coins"
            ]
        },
        {
            "endpoint": "POST /api/v1/player-actions/social-post",
            "action": "social_post",
            "required": [
                "idempotency_key",
                "body"
            ],
            "optional": [
                "visibility"
            ],
            "receipt": [
                "post_id"
            ]
        },
        {
            "endpoint": "POST /api/v1/player-actions/social-comment",
            "action": "social_comment",
            "required": [
                "idempotency_key",
                "post_id",
                "body"
            ],
            "optional": [],
            "receipt": [
                "comment_id"
            ]
        },
        {
            "endpoint": "POST /api/v1/social/react",
            "action": "social_react",
            "required": [
                "idempotency_key",
                "feed_item_id"
            ],
            "optional": [
                "reaction_type"
            ],
            "receipt": [
                "reaction_id",
                "feed_item_id"
            ]
        },
        {
            "endpoint": "POST /api/v1/notifications/read",
            "action": "notification_read",
            "required": [
                "idempotency_key",
                "notification_id or notification_ids"
            ],
            "optional": [],
            "receipt": [
                "marked_read",
                "notification_ids"
            ]
        },
        {
            "endpoint": "POST /api/v1/missions/progress",
            "action": "mission_progress",
            "required": [
                "idempotency_key",
                "activity_type"
            ],
            "optional": [
                "amount",
                "meta"
            ],
            "receipt": [
                "updated"
            ]
        },
        {
            "endpoint": "POST /api/v1/missions/claim",
            "action": "mission_claim",
            "required": [
                "idempotency_key",
                "progress_id"
            ],
            "optional": [],
            "receipt": [
                "claimed",
                "reward"
            ]
        }
    ],
    "standard_errors": {
        "idempotency_key_required": "Every gameplay write action must include an idempotency_key.",
        "idempotency_payload_mismatch": "The same idempotency key was reused with a different request body.",
        "user_not_active": "The account is not allowed to perform write actions.",
        "feature_disabled": "The requested gameplay feature is disabled by feature flags or maintenance mode.",
        "wallet_insufficient_balance": "The wallet does not have enough balance for the requested action.",
        "card_not_owned": "The requested card is not owned by the acting user.",
        "card_locked": "The requested card is locked, favourited, listed, traded or otherwise protected.",
        "listing_not_available": "The marketplace listing is not active or cannot be bought.",
        "trade_expired": "The trade is no longer pending or has expired.",
        "auction_closed": "The auction is closed or unavailable for bidding.",
        "mission_already_claimed": "The mission reward has already been claimed.",
        "maintenance_mode": "Maintenance mode blocks this write action.",
        "permission_denied": "The user cannot perform this action on the selected entity.",
        "validation_failed": "The request payload failed gameplay validation.",
        "domain_action_failed": "The underlying gameplay service rejected or failed the action."
    }
}