# Trade statuses · Waxpeer API

Trade status is **two independent axes**. Frontend copy and API numeric names differ slightly; the numbers below are the contract.

## A) Legacy numeric `status` (still returned)

| status | API name | Frontend copy | Meaning | State |
| --- | --- | --- | --- | --- |
| 0 | Processing | Processing trade | Funds frozen, trade session created. OLD docs said “waiting for user to buy more items” — that meaning is DEPRECATED. | current |
| 1 | Creating | Creating exchange | Pushing the Steam offer. Also treat 2/4 without `trade_id` as creating. | current |
| 2 | Seller confirm | Confirm trade / Waiting for seller | Waiting for seller Steam Guard | current |
| 3 | unused | — | Do not emit, do not document as valid | deprecated/unused |
| 4 | Buyer accept | Accept / Waiting for buyer | Trade sent, buyer can accept. If `release_date` set and `is_released=false` → TRADE HOLD (new). | current + new hold overlay |
| 5 | Completed | Confirmed | Item delivered | current |
| 6 | Declined/refunded | Cancelled / Unconfirmed | Failed; see `reason` | current |

## B) New fields

- `escrow_status`: `awaiting_unlock | sending | trade_sent | steam_hold | completed | failed | null`. `null` = ordinary instant trade (numeric axis only).
- `is_released` + `release_date` = Steam trade-hold after accept (status 4).
- `penalties` object on buyer-fault rollbacks (`rollback_fee`, `rollback_penalty`, `total_penalty`).

## Auto-cancel timings (from buy-one-p2p)

- Invalid seller → status 6 immediately
- No trade created → 6 minutes
- Confirm window → 11–15 minutes
- Lost seller connection while waiting for mobile confirm → 6 hours

Track purchases with `project_id` + GET `/v1/check-many-project-id`. Also GET `/v1/check-many-steam` and POST `/v1/force-check-trade`.
