{"openapi":"3.1.0","info":{"title":"Skape Public API","description":"Public REST API for the Skape AI Marketplace. All endpoints return JSON. Authenticated endpoints require a Bearer JWT token issued at product purchase.","version":"1.0.0","contact":{"name":"Skape","url":"https://agentskape.up.railway.app"}},"servers":[{"url":"https://agentskape.up.railway.app","description":"Production / Staging"}],"paths":{"/api/health":{"get":{"operationId":"getHealth","summary":"Platform health check","description":"Returns platform health status including database and Redis connectivity. No authentication required.","tags":["Health"],"security":[],"responses":{"200":{"description":"Platform is healthy or degraded","content":{"application/json":{"schema":{"type":"object","required":["status","timestamp"],"properties":{"status":{"type":"string","enum":["healthy","degraded","unhealthy"]},"timestamp":{"type":"string","format":"date-time"},"version":{"type":"string"},"uptime":{"type":"number"},"checks":{"type":"object","properties":{"database":{"type":"string","enum":["connected","disconnected","not_configured"]},"redis":{"type":"string","enum":["connected","disconnected","not_configured"]},"meilisearch":{"type":"string","enum":["connected","disconnected","not_configured"]}}}}}}}},"503":{"description":"Service unavailable"}}}},"/api/v1/license/validate":{"get":{"operationId":"validateLicense","summary":"Validate a license key","description":"Validates a product license key. Accepts JWT Bearer token. The X-License-Key header is deprecated and will be removed in a future version.","tags":["License"],"security":[{"bearerAuth":[]}],"parameters":[{"name":"X-License-Key","in":"header","required":false,"deprecated":true,"description":"Deprecated. Use Authorization: Bearer <token> instead.","schema":{"type":"string"}}],"responses":{"200":{"description":"License validation result","headers":{"X-RateLimit-Limit":{"description":"Maximum requests allowed per window","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in current window","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the window resets","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"valid":{"type":"boolean"},"status":{"type":"string"},"product":{"type":"string"},"tier":{"type":"string"},"expiresAt":{"type":"string","format":"date-time","nullable":true},"format":{"type":"string","enum":["jwt","legacy"]}}}}}},"403":{"description":"Invalid or expired license"},"429":{"description":"Rate limit exceeded"}}}},"/api/v1/license/activate":{"post":{"operationId":"activateLicense","summary":"Activate a license on a device","description":"Activates a license for a specific device. Requires JWT Bearer authentication.","tags":["License"],"security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["deviceFingerprint"],"properties":{"deviceFingerprint":{"type":"string","minLength":1,"maxLength":255},"deviceLabel":{"type":"string","maxLength":100}}}}}},"responses":{"200":{"description":"Activation successful","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean"},"activationId":{"type":"string","format":"uuid"},"activatedAt":{"type":"string","format":"date-time"}}}}}},"400":{"description":"Invalid or missing request body fields"},"403":{"description":"Invalid license or device activation limit reached"},"429":{"description":"Rate limit exceeded"}}}}},"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"JWT","description":"License JWT token issued at product purchase. Pass as: Authorization: Bearer <token>"}}}}