{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://artifacts.apis.io/fuxux-com/json-schema/fuxux-com-profile-response-schema.json",
  "title": "ProfileResponse",
  "x-generated": "2026-11-09",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/fuxux-com-openapi.json#/components/schemas/ProfileResponse",
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "format": "uuid"
    },
    "email": {
      "type": [
        "string",
        "null"
      ],
      "format": "email"
    },
    "full_name": {
      "type": "string"
    },
    "plan": {
      "type": "string",
      "enum": [
        "free",
        "creator",
        "growth",
        "pro"
      ]
    },
    "created_at": {
      "type": "string"
    },
    "onboarding_completed": {
      "type": "boolean"
    },
    "onboarding_step": {
      "type": "integer",
      "minimum": 0
    },
    "email_verified_at": {
      "type": [
        "string",
        "null"
      ],
      "format": "date-time"
    },
    "email_confirmed": {
      "type": "boolean",
      "description": "Whether the account's email address has completed Supabase Auth confirmation."
    },
    "has_api_access": {
      "type": "boolean",
      "description": "Whether the account can use API keys (every paid plan, or access granted by hand). An API key on an account without API access is rejected with 401, the same answer as a wrong key."
    },
    "subscription_status": {
      "type": [
        "string",
        "null"
      ],
      "description": "Live Stripe subscription status (e.g. `trialing`, `active`, `canceled`), or `null` if there is no subscription."
    },
    "trial_end": {
      "type": [
        "string",
        "null"
      ],
      "format": "date-time",
      "description": "End of the Stripe trial period, or `null` if not currently trialing."
    },
    "billing_interval": {
      "type": [
        "string",
        "null"
      ],
      "enum": [
        "month",
        "year"
      ],
      "description": "How often the subscription renews, or `null` if there is no subscription."
    },
    "cancels_at": {
      "type": [
        "string",
        "null"
      ],
      "format": "date-time",
      "description": "When a subscription set to cancel will end, or `null` if it renews."
    }
  }
}