Skip to content

Complete API Reference ​

This document provides exhaustive documentation for all 32 REST endpoints exposed by the Flash Sale Gateway (backend/src/api/app.py).


Endpoint Summary Table ​

CategoryMethodPathAuthDescription
SystemGET/healthzNoneService liveness and uptime probe
ReservationsPOST/api/v1/reservationsOptionalAtomic stock hold creation
StockGET/api/v1/stock/{sku_id}NoneReal-time stock status and invariant check
CheckoutPOST/api/v1/checkoutOptionalFinalize purchase with idempotency key
DashboardGET/api/v1/dashboard/stockNoneFull inventory status feed for ops console
DashboardGET/api/v1/dashboard/ordersNoneRecent orders feed (limit 50)
DashboardGET/api/v1/dashboard/summaryNoneAggregate sell-through KPIs
DashboardGET/api/v1/dashboard/countersNoneReal-time GMV and waiting room counters
DashboardGET/api/v1/dashboard/alertsNoneLow-stock and critical stockout alerts
AuthPOST/api/v1/auth/registerNoneUser account registration
AuthPOST/api/v1/auth/loginNoneAuthentication with exponential lockout
AuthGET/api/v1/auth/meBearerSession validation and profile info
AuthPOST/api/v1/auth/rotateBearerSession token rotation
AuthPOST/api/v1/auth/logoutBearerSession revocation
LimitsGET/api/v1/users/{user_id}/limits/{sku_id}NoneCheck remaining item allowance
SalesPOST/api/v1/salesNoneCreate new flash sale campaign
SalesGET/api/v1/sales/{campaign_id}NoneGet flash sale details
SalesGET/api/v1/salesNoneList all flash sale campaigns
CatalogPOST/api/v1/productsNoneCreate product
CatalogGET/api/v1/products/{product_id}NoneGet product details
CatalogGET/api/v1/productsNoneList catalog products
InventoryPOST/api/v1/inventory/initializeNoneSeed SKU allocation
InventoryGET/api/v1/inventory/{sku_id}NoneGet SKU inventory
InventoryGET/api/v1/inventoryNoneList all SKU inventory
OrdersGET/api/v1/orders/{order_id}NoneGet order details
OrdersGET/api/v1/users/{user_id}/ordersNoneList orders for user
QueuePOST/api/v1/queue/joinNoneJoin waiting room queue
QueueGET/api/v1/queue/statusNonePoll ticket queue status
QueuePOST/api/v1/queue/admitNoneAdmit batch of shoppers
MetricsGET/metricsNonePrometheus telemetry text scrape
AuditsPOST/api/v1/incidents/auditNoneTrigger manual invariant audit scan
AuditsGET/api/v1/incidents/oversellNoneRetrieve logged oversell incidents

Detailed Endpoint Specifications ​

1. Atomic Stock Reservation ​

  • Endpoint: POST /api/v1/reservations
  • Purpose: Atomically reserves units of a specified SKU, issuing a 300-second lease hold token.
  • Request Body:
json
{
  "sku_id": "sku-shoe-cyber-01",
  "user_id": "usr_94a2",
  "quantity": 1,
  "lease_seconds": 300
}
  • Validation: quantity > 0, lease_seconds > 0, non-empty strings.
  • Success Response (200 OK):
json
{
  "success": true,
  "message": "Reservation created atomically",
  "reservation": {
    "reservation_id": "tok_b42f1a90c4",
    "sku_id": "sku-shoe-cyber-01",
    "user_id": "usr_94a2",
    "quantity": 1,
    "status": "PENDING",
    "expires_at": "2026-10-25T16:35:00Z"
  }
}
  • Error Responses:
    • 409 Conflict: {"detail": "Insufficient stock or SKU not found"}
    • 400 Bad Request: {"detail": "Quantity must be positive"}

2. Process Atomic Checkout ​

  • Endpoint: POST /api/v1/checkout
  • Purpose: Executes atomic order finalization, payment capture, and idempotency key recording.
  • Request Body:
json
{
  "user_id": "usr_94a2",
  "sku_id": "sku-shoe-cyber-01",
  "quantity": 1,
  "unit_price_cents": 12000,
  "reservation_token": "tok_b42f1a90c4",
  "idempotency_key": "idem_order_88291a",
  "max_quantity_per_user": 2
}
  • Success Response (200 OK):
json
{
  "success": true,
  "message": "Order created successfully",
  "order": {
    "order_id": "ord_77192",
    "user_id": "usr_94a2",
    "sku_id": "sku-shoe-cyber-01",
    "quantity": 1,
    "total_amount_cents": 12000,
    "status": "PAID",
    "is_replay": false
  }
}
  • Idempotent Replay (200 OK): Returns existing order with "is_replay": true.
  • Error Responses:
    • 400 Bad Request: Reservation token expired, user limit exceeded, or SKU mismatch.