Skip to main content

GET /v1/plans

List all active plans. Response (200):
{
  "success": true,
  "data": [
    {
      "id": 1,
      "name": "Basic",
      "description": "Great for casual users",
      "bandwidth_limit_gb": 50,
      "speed_limit_mbps": 10,
      "trial_days": 7
    },
    {
      "id": 2,
      "name": "Premium",
      "description": "Unlimited speed, 100 GB",
      "bandwidth_limit_gb": 100,
      "speed_limit_mbps": null,
      "trial_days": 0
    }
  ]
}

GET /v1/plans/

Get details of a specific plan. Path parameter: plan — plan ID

GET /v1/plans//cycles

Get billing cycles available for a plan. Response (200):
{
  "success": true,
  "data": [
    {
      "id": 1,
      "name": "Monthly",
      "duration_days": 30,
      "price": "9.99",
      "currency": "USD"
    },
    {
      "id": 2,
      "name": "Yearly",
      "duration_days": 365,
      "price": "79.99",
      "currency": "USD"
    }
  ]
}

GET /v1/plan/cycles/

Get a specific billing cycle by ID.

POST /v1/promos/validate

Validate a promo code against a plan and cycle. Request:
{
  "code": "WELCOME20",
  "plan_id": 1,
  "cycle_id": 2
}
Response (200):
{
  "success": true,
  "data": {
    "code": "WELCOME20",
    "type": "percentage",
    "value": 20,
    "original_price": "79.99",
    "discounted_price": "63.99",
    "currency": "USD"
  }
}
Invalid code (422):
{
  "success": false,
  "message": "Invalid or expired promo code."
}
Rate limit: 10 requests / minute