{"swagger": "2.0", "info": {"title": "MobileAPI", "description": "Test description", "termsOfService": "https://www.google.com/policies/terms/", "contact": {"email": "info@visiansystems.com"}, "license": {"name": "BSD License"}, "version": "v1"}, "host": "mobileapi.dev", "schemes": ["http"], "basePath": "/", "consumes": ["application/json"], "produces": ["application/json"], "securityDefinitions": {"Basic": {"type": "basic"}}, "security": [{"Basic": []}], "paths": {"/api-token-auth/": {"post": {"operationId": "api-token-auth_create", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/AuthToken"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/AuthToken"}}}, "tags": ["api-token-auth"]}, "parameters": []}, "/api/firewall/": {"get": {"operationId": "api_firewall_list", "summary": "A viewset for viewing firewall log entries.", "description": "This is a read-only viewset that allows authenticated admin users\nto view the firewall logs via REST API.", "parameters": [], "responses": {"200": {"description": "", "schema": {"type": "array", "items": {"$ref": "#/definitions/FirewallAPILog"}}}}, "tags": ["api"]}, "parameters": []}, "/api/firewall/{id}/": {"get": {"operationId": "api_firewall_read", "summary": "A viewset for viewing firewall log entries.", "description": "This is a read-only viewset that allows authenticated admin users\nto view the firewall logs via REST API.", "parameters": [], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/FirewallAPILog"}}}, "tags": ["api"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this Firewall API Log.", "required": true, "type": "integer"}]}, "/demo-sz2ZKOvBxfTXFArUQOVJvt5WTeZ7Vd/devices/": {"get": {"operationId": "demo-sz2ZKOvBxfTXFArUQOVJvt5WTeZ7Vd_devices_list", "summary": "List all devices", "description": "Retrieve a list of all devices. Results are paginated. **Note**: `image_b64` returns a 100x100 thumbnail. For full-resolution images, use the `/devices/{id}/images` endpoint.", "parameters": [{"name": "Authorization", "in": "header", "description": "Recommended: 'Token YOUR_API_KEY' or 'Bearer YOUR_API_KEY'", "required": false, "type": "string"}, {"name": "key", "in": "query", "description": "Fallback: API key as query parameter (optional for demo)", "required": false, "type": "string"}, {"name": "page", "in": "query", "description": "Page number (default: 1). Each page contains 10 devices by default (max 50 via limit).", "required": false, "type": "integer"}], "responses": {"200": {"description": "Paginated list of devices with metadata", "schema": {"type": "array", "items": {"$ref": "#/definitions/DeviceList"}}}, "400": {"description": "Bad request, invalid page parameter"}, "401": {"description": "Unauthorized - Authentication required"}}, "tags": ["demo-sz2ZKOvBxfTXFArUQOVJvt5WTeZ7Vd"]}, "parameters": []}, "/demo-sz2ZKOvBxfTXFArUQOVJvt5WTeZ7Vd/devices/ai-query/": {"get": {"operationId": "demo-sz2ZKOvBxfTXFArUQOVJvt5WTeZ7Vd_devices_ai_query", "summary": "Natural language device query (AI-powered) - Paid Users Only", "description": "Query devices using natural language. Examples: 'Get top 5 devices with the most RAM', 'Show me phones with best camera', 'Find cheapest 5G phones'. Powered by AI to understand and execute your query. **Note: This endpoint requires a paid subscription plan (Pro or Enterprise).**", "parameters": [{"name": "query", "in": "query", "description": "Natural language query (e.g., 'top 5 devices with most RAM', 'phones with best battery')", "required": true, "type": "string"}, {"name": "Authorization", "in": "header", "description": "Recommended: 'Token YOUR_API_KEY' or 'Bearer YOUR_API_KEY' (requires paid plan)", "required": false, "type": "string"}, {"name": "key", "in": "query", "description": "Fallback: API key as query parameter (requires paid plan)", "required": false, "type": "string"}], "responses": {"200": {"description": "Query results with explanation", "schema": {"type": "array", "items": {"$ref": "#/definitions/DeviceList"}}}, "400": {"description": "Bad request - missing query parameter or invalid query"}, "401": {"description": "Unauthorized - invalid API key"}, "403": {"description": "Forbidden - paid plan required"}, "429": {"description": "Rate limit exceeded"}, "503": {"description": "LLM service unavailable (OpenAI API key not configured)"}}, "tags": ["demo-sz2ZKOvBxfTXFArUQOVJvt5WTeZ7Vd"]}, "parameters": []}, "/demo-sz2ZKOvBxfTXFArUQOVJvt5WTeZ7Vd/devices/autocomplete/": {"get": {"operationId": "demo-sz2ZKOvBxfTXFArUQOVJvt5WTeZ7Vd_devices_autocomplete", "summary": "Autocomplete device names", "description": "Get autocomplete suggestions for device names. Returns simplified device data for typeahead/autocomplete features. Requires authentication.", "parameters": [{"name": "Authorization", "in": "header", "description": "Recommended: 'Token YOUR_API_KEY' or 'Bearer YOUR_API_KEY'", "required": false, "type": "string"}, {"name": "key", "in": "query", "description": "Fallback: API key as query parameter (optional for demo)", "required": false, "type": "string"}, {"name": "q", "in": "query", "description": "Query string (minimum 5 characters)", "required": true, "type": "string"}, {"name": "limit", "in": "query", "description": "Maximum number of suggestions to return (default: 10, max: 50).", "required": false, "type": "integer"}], "responses": {"200": {"description": "Array of autocomplete suggestions"}, "400": {"description": "Bad request, invalid limit parameter"}, "401": {"description": "Unauthorized - Invalid API key"}}, "tags": ["demo-sz2ZKOvBxfTXFArUQOVJvt5WTeZ7Vd"]}, "parameters": []}, "/demo-sz2ZKOvBxfTXFArUQOVJvt5WTeZ7Vd/devices/by-brand/": {"get": {"operationId": "demo-sz2ZKOvBxfTXFArUQOVJvt5WTeZ7Vd_devices_by_brand", "summary": "[DEPRECATED] List devices by brand - Use /by-manufacturer/ instead", "description": "DEPRECATED: This endpoint is deprecated. Please use /devices/by-manufacturer/ instead. Retrieve all devices from a specific brand/manufacturer. Requires authentication.", "parameters": [{"name": "brand", "in": "query", "description": "Brand/Manufacturer name to filter devices (e.g., 'Apple', 'Samsung'). DEPRECATED: Use 'manufacturer' parameter with /by-manufacturer/ endpoint instead.", "required": true, "type": "string"}, {"name": "limit", "in": "query", "description": "Maximum number of results to return (default: 10, max: 50).", "required": false, "type": "integer"}, {"name": "Authorization", "in": "header", "description": "Recommended: 'Token YOUR_API_KEY' or 'Bearer YOUR_API_KEY'", "required": false, "type": "string"}, {"name": "key", "in": "query", "description": "Fallback: API key as query parameter (less secure)", "required": false, "type": "string"}], "responses": {"200": {"description": "List of devices", "schema": {"type": "array", "items": {"$ref": "#/definitions/Device"}}}, "400": {"description": "Bad request, missing parameter 'brand' or invalid limit"}, "404": {"description": "Brand not found"}, "401": {"description": "Unauthorized - Invalid API key"}}, "tags": ["demo-sz2ZKOvBxfTXFArUQOVJvt5WTeZ7Vd"], "deprecated": true}, "parameters": []}, "/demo-sz2ZKOvBxfTXFArUQOVJvt5WTeZ7Vd/devices/by-manufacturer/": {"get": {"operationId": "demo-sz2ZKOvBxfTXFArUQOVJvt5WTeZ7Vd_devices_by_manufacturer", "summary": "List devices by manufacturer", "description": "Retrieve all devices from a specific manufacturer. Results are paginated with 10 devices per page (max 50 via limit). **Note**: `image_b64` returns a 100x100 thumbnail.", "parameters": [{"name": "manufacturer", "in": "query", "description": "Manufacturer name to filter devices (e.g., 'Apple', 'Samsung').", "required": true, "type": "string"}, {"name": "page", "in": "query", "description": "Page number (default: 1). Each page contains 10 devices by default (max 50 via limit).", "required": false, "type": "integer"}, {"name": "Authorization", "in": "header", "description": "Recommended: 'Token YOUR_API_KEY' or 'Bearer YOUR_API_KEY'", "required": false, "type": "string"}, {"name": "key", "in": "query", "description": "Fallback: API key as query parameter (less secure)", "required": false, "type": "string"}], "responses": {"200": {"description": "Paginated list of devices with metadata", "schema": {"type": "array", "items": {"$ref": "#/definitions/Device"}}}, "400": {"description": "Bad request, missing parameter 'manufacturer' or invalid page"}, "404": {"description": "Manufacturer not found"}, "401": {"description": "Unauthorized - Invalid API key"}}, "tags": ["demo-sz2ZKOvBxfTXFArUQOVJvt5WTeZ7Vd"]}, "parameters": []}, "/demo-sz2ZKOvBxfTXFArUQOVJvt5WTeZ7Vd/devices/by-type/": {"get": {"operationId": "demo-sz2ZKOvBxfTXFArUQOVJvt5WTeZ7Vd_devices_by_type", "summary": "List devices by type", "description": "Get all devices of a specific type (phone, tablet, laptop, wearable, or other). Results are paginated with 10 devices per page (max 50 via limit). **Note**: `image_b64` returns a 100x100 thumbnail.", "parameters": [{"name": "type", "in": "query", "description": "Device type: phone, tablet, laptop, wearable, or other", "required": true, "type": "string", "enum": ["phone", "tablet", "laptop", "wearable", "other"]}, {"name": "page", "in": "query", "description": "Page number (default: 1). Each page contains 10 devices by default (max 50 via limit).", "required": false, "type": "integer"}, {"name": "Authorization", "in": "header", "description": "Recommended: 'Token YOUR_API_KEY' or 'Bearer YOUR_API_KEY'", "required": false, "type": "string"}, {"name": "key", "in": "query", "description": "Fallback: API key as query parameter (less secure)", "required": false, "type": "string"}], "responses": {"200": {"description": "Paginated list of devices for the specified type with metadata", "schema": {"type": "array", "items": {"$ref": "#/definitions/DeviceList"}}}, "400": {"description": "Bad request, missing or invalid type/page parameter"}, "204": {"description": "No devices found for the specified type"}, "401": {"description": "Unauthorized - Invalid API key"}}, "tags": ["demo-sz2ZKOvBxfTXFArUQOVJvt5WTeZ7Vd"]}, "parameters": []}, "/demo-sz2ZKOvBxfTXFArUQOVJvt5WTeZ7Vd/devices/by-year/": {"get": {"operationId": "demo-sz2ZKOvBxfTXFArUQOVJvt5WTeZ7Vd_devices_by_year", "summary": "List devices by launch year", "description": "Get all devices released in a specific year. The year parameter should be a 4-digit year (e.g., 2023). Results are paginated with 10 items per page (max 50 via limit). **Note**: `image_b64` returns a 100x100 thumbnail.", "parameters": [{"name": "year", "in": "query", "description": "Launch year (4-digit format, e.g., 2023)", "required": true, "type": "integer"}, {"name": "page", "in": "query", "description": "Page number (default: 1). Each page contains 10 items by default (max 50 via limit).", "required": false, "type": "integer"}, {"name": "Authorization", "in": "header", "description": "Recommended: 'Token YOUR_API_KEY' or 'Bearer YOUR_API_KEY'", "required": false, "type": "string"}, {"name": "key", "in": "query", "description": "Fallback: API key as query parameter (less secure)", "required": false, "type": "string"}], "responses": {"200": {"description": "Paginated list of devices for the specified year with metadata", "schema": {"type": "array", "items": {"$ref": "#/definitions/Device"}}}, "400": {"description": "Bad request, missing or invalid year/page parameter"}, "204": {"description": "No devices found for the specified year"}, "401": {"description": "Unauthorized - Invalid API key"}}, "tags": ["demo-sz2ZKOvBxfTXFArUQOVJvt5WTeZ7Vd"]}, "parameters": []}, "/demo-sz2ZKOvBxfTXFArUQOVJvt5WTeZ7Vd/devices/search/": {"get": {"operationId": "demo-sz2ZKOvBxfTXFArUQOVJvt5WTeZ7Vd_devices_search", "summary": "Search device by name or model number", "description": "Retrieve device details by providing either a device name (e.g., 'iPhone 15 Pro') or a model number (e.g., 'A3520'), but not both. At least one parameter is required. Results are paginated (default: 10 per page, customizable via 'limit' parameter up to 50). Optionally filter by manufacturer. Exact model number matches are prioritized over name matches. **Note**: `image_b64` returns a 100x100 thumbnail.", "parameters": [{"name": "Authorization", "in": "header", "description": "Recommended: 'Token YOUR_API_KEY' or 'Bearer YOUR_API_KEY'", "required": false, "type": "string"}, {"name": "key", "in": "query", "description": "Fallback: API key as query parameter (optional for demo)", "required": false, "type": "string"}, {"name": "name", "in": "query", "description": "Name of the device to search for (e.g., 'iPhone 15 Pro'). Mutually exclusive with 'model_number'.", "required": false, "type": "string"}, {"name": "model_number", "in": "query", "description": "Model number of the device to search for (e.g., 'A3520'). Mutually exclusive with 'name'.", "required": false, "type": "string"}, {"name": "manufacturer", "in": "query", "description": "Optional. Filter search results to devices from this manufacturer only. If no devices match the manufacturer, returns empty results.", "required": false, "type": "string"}, {"name": "limit", "in": "query", "description": "Optional. Number of results to return per page (default: 10, max: 50). Use this to control how many devices are returned in the response. For example, limit=1 returns only the best match.", "required": false, "type": "integer"}, {"name": "page", "in": "query", "description": "Page number (default: 1). Each page contains 10 devices by default (max 50 via limit).", "required": false, "type": "integer"}, {"name": "exact", "in": "query", "description": "Set to true for exact matching (default: false). When true, only returns devices with 100% match certainty (exact name or exact model number match).", "required": false, "type": "boolean"}], "responses": {"200": {"description": "Paginated list of matching devices with metadata. Each device includes a 'match_type' field indicating whether it matched by 'name', 'exact_model', or 'partial_model'.", "schema": {"$ref": "#/definitions/Device"}}, "404": {"description": "Device not found"}, "400": {"description": "Bad request: must provide either 'name' or 'model_number' (but not both), or invalid page"}}, "tags": ["demo-sz2ZKOvBxfTXFArUQOVJvt5WTeZ7Vd"]}, "parameters": []}, "/demo-sz2ZKOvBxfTXFArUQOVJvt5WTeZ7Vd/devices/{id}/": {"get": {"operationId": "demo-sz2ZKOvBxfTXFArUQOVJvt5WTeZ7Vd_devices_read", "summary": "Get device by ID", "description": "Retrieve detailed device information by providing its ID. **Note**: `image_b64` returns a 100x100 thumbnail. For full-resolution images, use `/devices/{id}/images` endpoint.", "parameters": [{"name": "Authorization", "in": "header", "description": "Recommended: 'Token YOUR_API_KEY' or 'Bearer YOUR_API_KEY'", "required": false, "type": "string"}, {"name": "key", "in": "query", "description": "Fallback: API key as query parameter (optional for demo)", "required": false, "type": "string"}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/Device"}}, "400": {"description": "Bad Request - Insufficient credits"}, "401": {"description": "Unauthorized - Authentication required"}, "404": {"description": "Not Found - Device with given ID does not exist"}}, "tags": ["demo-sz2ZKOvBxfTXFArUQOVJvt5WTeZ7Vd"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this device.", "required": true, "type": "integer"}]}, "/demo-sz2ZKOvBxfTXFArUQOVJvt5WTeZ7Vd/devices/{id}/battery/": {"get": {"operationId": "demo-sz2ZKOvBxfTXFArUQOVJvt5WTeZ7Vd_devices_battery", "summary": "Get device battery specifications", "description": "Get battery specifications for a specific device.", "parameters": [], "responses": {"200": {"description": "Battery specifications", "schema": {"$ref": "#/definitions/Battery"}}, "404": {"description": "Device or battery specifications not found"}}, "tags": ["demo-sz2ZKOvBxfTXFArUQOVJvt5WTeZ7Vd"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this device.", "required": true, "type": "integer"}]}, "/demo-sz2ZKOvBxfTXFArUQOVJvt5WTeZ7Vd/devices/{id}/body/": {"get": {"operationId": "demo-sz2ZKOvBxfTXFArUQOVJvt5WTeZ7Vd_devices_body", "summary": "Get device body specifications", "description": "Get body specifications for a specific device.", "parameters": [], "responses": {"200": {"description": "Body specifications", "schema": {"$ref": "#/definitions/Body"}}, "404": {"description": "Device or body specifications not found"}}, "tags": ["demo-sz2ZKOvBxfTXFArUQOVJvt5WTeZ7Vd"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this device.", "required": true, "type": "integer"}]}, "/demo-sz2ZKOvBxfTXFArUQOVJvt5WTeZ7Vd/devices/{id}/comms/": {"get": {"operationId": "demo-sz2ZKOvBxfTXFArUQOVJvt5WTeZ7Vd_devices_comms", "summary": "Get device communications specifications", "description": "Get communications specifications for a specific device.", "parameters": [], "responses": {"200": {"description": "Communications specifications", "schema": {"$ref": "#/definitions/Comms"}}, "404": {"description": "Device or communications specifications not found"}}, "tags": ["demo-sz2ZKOvBxfTXFArUQOVJvt5WTeZ7Vd"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this device.", "required": true, "type": "integer"}]}, "/demo-sz2ZKOvBxfTXFArUQOVJvt5WTeZ7Vd/devices/{id}/display/": {"get": {"operationId": "demo-sz2ZKOvBxfTXFArUQOVJvt5WTeZ7Vd_devices_display", "summary": "Get device display specifications", "description": "Get display specifications for a specific device.", "parameters": [], "responses": {"200": {"description": "Display specifications", "schema": {"$ref": "#/definitions/Display"}}, "404": {"description": "Device or display specifications not found"}}, "tags": ["demo-sz2ZKOvBxfTXFArUQOVJvt5WTeZ7Vd"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this device.", "required": true, "type": "integer"}]}, "/demo-sz2ZKOvBxfTXFArUQOVJvt5WTeZ7Vd/devices/{id}/features/": {"get": {"operationId": "demo-sz2ZKOvBxfTXFArUQOVJvt5WTeZ7Vd_devices_features", "summary": "Get device features specifications", "description": "Get features specifications for a specific device.", "parameters": [], "responses": {"200": {"description": "Features specifications", "schema": {"$ref": "#/definitions/Features"}}, "404": {"description": "Device or features specifications not found"}}, "tags": ["demo-sz2ZKOvBxfTXFArUQOVJvt5WTeZ7Vd"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this device.", "required": true, "type": "integer"}]}, "/demo-sz2ZKOvBxfTXFArUQOVJvt5WTeZ7Vd/devices/{id}/image/": {"get": {"operationId": "demo-sz2ZKOvBxfTXFArUQOVJvt5WTeZ7Vd_devices_image_list", "description": "Serve full-resolution device main image for demo purposes.\nAccessed through hidden demo URL path.\nAuthentication/throttling is enforced at the demo proxy layer.\nOnly accessible via hidden demo URL path.", "parameters": [], "responses": {"200": {"description": ""}}, "tags": ["demo-sz2ZKOvBxfTXFArUQOVJvt5WTeZ7Vd"]}, "parameters": [{"name": "id", "in": "path", "required": true, "type": "string"}]}, "/demo-sz2ZKOvBxfTXFArUQOVJvt5WTeZ7Vd/devices/{id}/images/": {"get": {"operationId": "demo-sz2ZKOvBxfTXFArUQOVJvt5WTeZ7Vd_devices_images", "summary": "Get device images", "description": "Get all images for a specific device. Returns image URLs for full-resolution access (accessing image URLs consumes 1 credit per request). Main device image is included as the first entry with URL /devices/{id}/image/.", "parameters": [{"name": "limit", "in": "query", "description": "Maximum number of images to return (default: 10, max: 50).", "required": false, "type": "integer"}], "responses": {"200": {"description": "Device images with URLs", "schema": {"type": "array", "items": {"$ref": "#/definitions/Image"}}}, "404": {"description": "Device not found"}, "400": {"description": "Bad request, invalid limit parameter"}}, "tags": ["demo-sz2ZKOvBxfTXFArUQOVJvt5WTeZ7Vd"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this device.", "required": true, "type": "integer"}]}, "/demo-sz2ZKOvBxfTXFArUQOVJvt5WTeZ7Vd/devices/{id}/main-camera/": {"get": {"operationId": "demo-sz2ZKOvBxfTXFArUQOVJvt5WTeZ7Vd_devices_main_camera", "summary": "Get device main camera specifications", "description": "Get main camera specifications for a specific device.", "parameters": [], "responses": {"200": {"description": "Main camera specifications", "schema": {"$ref": "#/definitions/MainCamera"}}, "404": {"description": "Device or main camera specifications not found"}}, "tags": ["demo-sz2ZKOvBxfTXFArUQOVJvt5WTeZ7Vd"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this device.", "required": true, "type": "integer"}]}, "/demo-sz2ZKOvBxfTXFArUQOVJvt5WTeZ7Vd/devices/{id}/memory/": {"get": {"operationId": "demo-sz2ZKOvBxfTXFArUQOVJvt5WTeZ7Vd_devices_memory", "summary": "Get device memory specifications", "description": "Get memory specifications for a specific device.", "parameters": [], "responses": {"200": {"description": "Memory specifications", "schema": {"$ref": "#/definitions/Memory"}}, "404": {"description": "Device or memory specifications not found"}}, "tags": ["demo-sz2ZKOvBxfTXFArUQOVJvt5WTeZ7Vd"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this device.", "required": true, "type": "integer"}]}, "/demo-sz2ZKOvBxfTXFArUQOVJvt5WTeZ7Vd/devices/{id}/misc/": {"get": {"operationId": "demo-sz2ZKOvBxfTXFArUQOVJvt5WTeZ7Vd_devices_misc", "summary": "Get device miscellaneous specifications", "description": "Get miscellaneous specifications for a specific device.", "parameters": [], "responses": {"200": {"description": "Miscellaneous specifications", "schema": {"$ref": "#/definitions/Misc"}}, "404": {"description": "Device or miscellaneous specifications not found"}}, "tags": ["demo-sz2ZKOvBxfTXFArUQOVJvt5WTeZ7Vd"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this device.", "required": true, "type": "integer"}]}, "/demo-sz2ZKOvBxfTXFArUQOVJvt5WTeZ7Vd/devices/{id}/network/": {"get": {"operationId": "demo-sz2ZKOvBxfTXFArUQOVJvt5WTeZ7Vd_devices_network", "summary": "Get device network specifications", "description": "Get network specifications for a specific device.", "parameters": [], "responses": {"200": {"description": "Network specifications", "schema": {"$ref": "#/definitions/Network"}}, "404": {"description": "Device or network specifications not found"}}, "tags": ["demo-sz2ZKOvBxfTXFArUQOVJvt5WTeZ7Vd"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this device.", "required": true, "type": "integer"}]}, "/demo-sz2ZKOvBxfTXFArUQOVJvt5WTeZ7Vd/devices/{id}/platform/": {"get": {"operationId": "demo-sz2ZKOvBxfTXFArUQOVJvt5WTeZ7Vd_devices_platform", "summary": "Get device platform specifications", "description": "Get platform specifications for a specific device.", "parameters": [], "responses": {"200": {"description": "Platform specifications", "schema": {"$ref": "#/definitions/Platform"}}, "404": {"description": "Device or platform specifications not found"}}, "tags": ["demo-sz2ZKOvBxfTXFArUQOVJvt5WTeZ7Vd"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this device.", "required": true, "type": "integer"}]}, "/demo-sz2ZKOvBxfTXFArUQOVJvt5WTeZ7Vd/devices/{id}/selfie-camera/": {"get": {"operationId": "demo-sz2ZKOvBxfTXFArUQOVJvt5WTeZ7Vd_devices_selfie_camera", "summary": "Get device selfie camera specifications", "description": "Get selfie camera specifications for a specific device.", "parameters": [], "responses": {"200": {"description": "Selfie camera specifications", "schema": {"$ref": "#/definitions/SelfieCamera"}}, "404": {"description": "Device or selfie camera specifications not found"}}, "tags": ["demo-sz2ZKOvBxfTXFArUQOVJvt5WTeZ7Vd"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this device.", "required": true, "type": "integer"}]}, "/demo-sz2ZKOvBxfTXFArUQOVJvt5WTeZ7Vd/devices/{id}/sound/": {"get": {"operationId": "demo-sz2ZKOvBxfTXFArUQOVJvt5WTeZ7Vd_devices_sound", "summary": "Get device sound specifications", "description": "Get sound specifications for a specific device.", "parameters": [], "responses": {"200": {"description": "Sound specifications", "schema": {"$ref": "#/definitions/Sound"}}, "404": {"description": "Device or sound specifications not found"}}, "tags": ["demo-sz2ZKOvBxfTXFArUQOVJvt5WTeZ7Vd"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this device.", "required": true, "type": "integer"}]}, "/devices/": {"get": {"operationId": "devices_list", "summary": "List all devices", "description": "Retrieve a list of all devices. Results are paginated. **Note**: `image_b64` returns a 100x100 thumbnail. For full-resolution images, use the `/devices/{id}/images` endpoint.", "parameters": [{"name": "Authorization", "in": "header", "description": "Recommended: 'Token YOUR_API_KEY' or 'Bearer YOUR_API_KEY'", "required": false, "type": "string"}, {"name": "key", "in": "query", "description": "Fallback: API key as query parameter (optional for demo)", "required": false, "type": "string"}, {"name": "page", "in": "query", "description": "Page number (default: 1). Each page contains 10 devices by default (max 50 via limit).", "required": false, "type": "integer"}], "responses": {"200": {"description": "Paginated list of devices with metadata", "schema": {"type": "array", "items": {"$ref": "#/definitions/DeviceList"}}}, "400": {"description": "Bad request, invalid page parameter"}, "401": {"description": "Unauthorized - Authentication required"}}, "tags": ["devices"]}, "parameters": []}, "/devices/ai-query/": {"get": {"operationId": "devices_ai_query", "summary": "Natural language device query (AI-powered) - Paid Users Only", "description": "Query devices using natural language. Examples: 'Get top 5 devices with the most RAM', 'Show me phones with best camera', 'Find cheapest 5G phones'. Powered by AI to understand and execute your query. **Note: This endpoint requires a paid subscription plan (Pro or Enterprise).**", "parameters": [{"name": "query", "in": "query", "description": "Natural language query (e.g., 'top 5 devices with most RAM', 'phones with best battery')", "required": true, "type": "string"}, {"name": "Authorization", "in": "header", "description": "Recommended: 'Token YOUR_API_KEY' or 'Bearer YOUR_API_KEY' (requires paid plan)", "required": false, "type": "string"}, {"name": "key", "in": "query", "description": "Fallback: API key as query parameter (requires paid plan)", "required": false, "type": "string"}], "responses": {"200": {"description": "Query results with explanation", "schema": {"type": "array", "items": {"$ref": "#/definitions/DeviceList"}}}, "400": {"description": "Bad request - missing query parameter or invalid query"}, "401": {"description": "Unauthorized - invalid API key"}, "403": {"description": "Forbidden - paid plan required"}, "429": {"description": "Rate limit exceeded"}, "503": {"description": "LLM service unavailable (OpenAI API key not configured)"}}, "tags": ["devices"]}, "parameters": []}, "/devices/autocomplete/": {"get": {"operationId": "devices_autocomplete", "summary": "Autocomplete device names", "description": "Get autocomplete suggestions for device names. Returns simplified device data for typeahead/autocomplete features. Requires authentication.", "parameters": [{"name": "Authorization", "in": "header", "description": "Recommended: 'Token YOUR_API_KEY' or 'Bearer YOUR_API_KEY'", "required": false, "type": "string"}, {"name": "key", "in": "query", "description": "Fallback: API key as query parameter (optional for demo)", "required": false, "type": "string"}, {"name": "q", "in": "query", "description": "Query string (minimum 5 characters)", "required": true, "type": "string"}, {"name": "limit", "in": "query", "description": "Maximum number of suggestions to return (default: 10, max: 50).", "required": false, "type": "integer"}], "responses": {"200": {"description": "Array of autocomplete suggestions"}, "400": {"description": "Bad request, invalid limit parameter"}, "401": {"description": "Unauthorized - Invalid API key"}}, "tags": ["devices"]}, "parameters": []}, "/devices/by-brand/": {"get": {"operationId": "devices_by_brand", "summary": "[DEPRECATED] List devices by brand - Use /by-manufacturer/ instead", "description": "DEPRECATED: This endpoint is deprecated. Please use /devices/by-manufacturer/ instead. Retrieve all devices from a specific brand/manufacturer. Requires authentication.", "parameters": [{"name": "brand", "in": "query", "description": "Brand/Manufacturer name to filter devices (e.g., 'Apple', 'Samsung'). DEPRECATED: Use 'manufacturer' parameter with /by-manufacturer/ endpoint instead.", "required": true, "type": "string"}, {"name": "limit", "in": "query", "description": "Maximum number of results to return (default: 10, max: 50).", "required": false, "type": "integer"}, {"name": "Authorization", "in": "header", "description": "Recommended: 'Token YOUR_API_KEY' or 'Bearer YOUR_API_KEY'", "required": false, "type": "string"}, {"name": "key", "in": "query", "description": "Fallback: API key as query parameter (less secure)", "required": false, "type": "string"}], "responses": {"200": {"description": "List of devices", "schema": {"type": "array", "items": {"$ref": "#/definitions/Device"}}}, "400": {"description": "Bad request, missing parameter 'brand' or invalid limit"}, "404": {"description": "Brand not found"}, "401": {"description": "Unauthorized - Invalid API key"}}, "tags": ["devices"], "deprecated": true}, "parameters": []}, "/devices/by-manufacturer/": {"get": {"operationId": "devices_by_manufacturer", "summary": "List devices by manufacturer", "description": "Retrieve all devices from a specific manufacturer. Results are paginated with 10 devices per page (max 50 via limit). **Note**: `image_b64` returns a 100x100 thumbnail.", "parameters": [{"name": "manufacturer", "in": "query", "description": "Manufacturer name to filter devices (e.g., 'Apple', 'Samsung').", "required": true, "type": "string"}, {"name": "page", "in": "query", "description": "Page number (default: 1). Each page contains 10 devices by default (max 50 via limit).", "required": false, "type": "integer"}, {"name": "Authorization", "in": "header", "description": "Recommended: 'Token YOUR_API_KEY' or 'Bearer YOUR_API_KEY'", "required": false, "type": "string"}, {"name": "key", "in": "query", "description": "Fallback: API key as query parameter (less secure)", "required": false, "type": "string"}], "responses": {"200": {"description": "Paginated list of devices with metadata", "schema": {"type": "array", "items": {"$ref": "#/definitions/Device"}}}, "400": {"description": "Bad request, missing parameter 'manufacturer' or invalid page"}, "404": {"description": "Manufacturer not found"}, "401": {"description": "Unauthorized - Invalid API key"}}, "tags": ["devices"]}, "parameters": []}, "/devices/by-type/": {"get": {"operationId": "devices_by_type", "summary": "List devices by type", "description": "Get all devices of a specific type (phone, tablet, laptop, wearable, or other). Results are paginated with 10 devices per page (max 50 via limit). **Note**: `image_b64` returns a 100x100 thumbnail.", "parameters": [{"name": "type", "in": "query", "description": "Device type: phone, tablet, laptop, wearable, or other", "required": true, "type": "string", "enum": ["phone", "tablet", "laptop", "wearable", "other"]}, {"name": "page", "in": "query", "description": "Page number (default: 1). Each page contains 10 devices by default (max 50 via limit).", "required": false, "type": "integer"}, {"name": "Authorization", "in": "header", "description": "Recommended: 'Token YOUR_API_KEY' or 'Bearer YOUR_API_KEY'", "required": false, "type": "string"}, {"name": "key", "in": "query", "description": "Fallback: API key as query parameter (less secure)", "required": false, "type": "string"}], "responses": {"200": {"description": "Paginated list of devices for the specified type with metadata", "schema": {"type": "array", "items": {"$ref": "#/definitions/DeviceList"}}}, "400": {"description": "Bad request, missing or invalid type/page parameter"}, "204": {"description": "No devices found for the specified type"}, "401": {"description": "Unauthorized - Invalid API key"}}, "tags": ["devices"]}, "parameters": []}, "/devices/by-year/": {"get": {"operationId": "devices_by_year", "summary": "List devices by launch year", "description": "Get all devices released in a specific year. The year parameter should be a 4-digit year (e.g., 2023). Results are paginated with 10 items per page (max 50 via limit). **Note**: `image_b64` returns a 100x100 thumbnail.", "parameters": [{"name": "year", "in": "query", "description": "Launch year (4-digit format, e.g., 2023)", "required": true, "type": "integer"}, {"name": "page", "in": "query", "description": "Page number (default: 1). Each page contains 10 items by default (max 50 via limit).", "required": false, "type": "integer"}, {"name": "Authorization", "in": "header", "description": "Recommended: 'Token YOUR_API_KEY' or 'Bearer YOUR_API_KEY'", "required": false, "type": "string"}, {"name": "key", "in": "query", "description": "Fallback: API key as query parameter (less secure)", "required": false, "type": "string"}], "responses": {"200": {"description": "Paginated list of devices for the specified year with metadata", "schema": {"type": "array", "items": {"$ref": "#/definitions/Device"}}}, "400": {"description": "Bad request, missing or invalid year/page parameter"}, "204": {"description": "No devices found for the specified year"}, "401": {"description": "Unauthorized - Invalid API key"}}, "tags": ["devices"]}, "parameters": []}, "/devices/search/": {"get": {"operationId": "devices_search", "summary": "Search device by name or model number", "description": "Retrieve device details by providing either a device name (e.g., 'iPhone 15 Pro') or a model number (e.g., 'A3520'), but not both. At least one parameter is required. Results are paginated (default: 10 per page, customizable via 'limit' parameter up to 50). Optionally filter by manufacturer. Exact model number matches are prioritized over name matches. **Note**: `image_b64` returns a 100x100 thumbnail.", "parameters": [{"name": "Authorization", "in": "header", "description": "Recommended: 'Token YOUR_API_KEY' or 'Bearer YOUR_API_KEY'", "required": false, "type": "string"}, {"name": "key", "in": "query", "description": "Fallback: API key as query parameter (optional for demo)", "required": false, "type": "string"}, {"name": "name", "in": "query", "description": "Name of the device to search for (e.g., 'iPhone 15 Pro'). Mutually exclusive with 'model_number'.", "required": false, "type": "string"}, {"name": "model_number", "in": "query", "description": "Model number of the device to search for (e.g., 'A3520'). Mutually exclusive with 'name'.", "required": false, "type": "string"}, {"name": "manufacturer", "in": "query", "description": "Optional. Filter search results to devices from this manufacturer only. If no devices match the manufacturer, returns empty results.", "required": false, "type": "string"}, {"name": "limit", "in": "query", "description": "Optional. Number of results to return per page (default: 10, max: 50). Use this to control how many devices are returned in the response. For example, limit=1 returns only the best match.", "required": false, "type": "integer"}, {"name": "page", "in": "query", "description": "Page number (default: 1). Each page contains 10 devices by default (max 50 via limit).", "required": false, "type": "integer"}, {"name": "exact", "in": "query", "description": "Set to true for exact matching (default: false). When true, only returns devices with 100% match certainty (exact name or exact model number match).", "required": false, "type": "boolean"}], "responses": {"200": {"description": "Paginated list of matching devices with metadata. Each device includes a 'match_type' field indicating whether it matched by 'name', 'exact_model', or 'partial_model'.", "schema": {"$ref": "#/definitions/Device"}}, "404": {"description": "Device not found"}, "400": {"description": "Bad request: must provide either 'name' or 'model_number' (but not both), or invalid page"}}, "tags": ["devices"]}, "parameters": []}, "/devices/{id}/": {"get": {"operationId": "devices_read", "summary": "Get device by ID", "description": "Retrieve detailed device information by providing its ID. **Note**: `image_b64` returns a 100x100 thumbnail. For full-resolution images, use `/devices/{id}/images` endpoint.", "parameters": [{"name": "Authorization", "in": "header", "description": "Recommended: 'Token YOUR_API_KEY' or 'Bearer YOUR_API_KEY'", "required": false, "type": "string"}, {"name": "key", "in": "query", "description": "Fallback: API key as query parameter (optional for demo)", "required": false, "type": "string"}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/Device"}}, "400": {"description": "Bad Request - Insufficient credits"}, "401": {"description": "Unauthorized - Authentication required"}, "404": {"description": "Not Found - Device with given ID does not exist"}}, "tags": ["devices"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this device.", "required": true, "type": "integer"}]}, "/devices/{id}/battery/": {"get": {"operationId": "devices_battery", "summary": "Get device battery specifications", "description": "Get battery specifications for a specific device.", "parameters": [], "responses": {"200": {"description": "Battery specifications", "schema": {"$ref": "#/definitions/Battery"}}, "404": {"description": "Device or battery specifications not found"}}, "tags": ["devices"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this device.", "required": true, "type": "integer"}]}, "/devices/{id}/body/": {"get": {"operationId": "devices_body", "summary": "Get device body specifications", "description": "Get body specifications for a specific device.", "parameters": [], "responses": {"200": {"description": "Body specifications", "schema": {"$ref": "#/definitions/Body"}}, "404": {"description": "Device or body specifications not found"}}, "tags": ["devices"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this device.", "required": true, "type": "integer"}]}, "/devices/{id}/comms/": {"get": {"operationId": "devices_comms", "summary": "Get device communications specifications", "description": "Get communications specifications for a specific device.", "parameters": [], "responses": {"200": {"description": "Communications specifications", "schema": {"$ref": "#/definitions/Comms"}}, "404": {"description": "Device or communications specifications not found"}}, "tags": ["devices"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this device.", "required": true, "type": "integer"}]}, "/devices/{id}/display/": {"get": {"operationId": "devices_display", "summary": "Get device display specifications", "description": "Get display specifications for a specific device.", "parameters": [], "responses": {"200": {"description": "Display specifications", "schema": {"$ref": "#/definitions/Display"}}, "404": {"description": "Device or display specifications not found"}}, "tags": ["devices"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this device.", "required": true, "type": "integer"}]}, "/devices/{id}/features/": {"get": {"operationId": "devices_features", "summary": "Get device features specifications", "description": "Get features specifications for a specific device.", "parameters": [], "responses": {"200": {"description": "Features specifications", "schema": {"$ref": "#/definitions/Features"}}, "404": {"description": "Device or features specifications not found"}}, "tags": ["devices"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this device.", "required": true, "type": "integer"}]}, "/devices/{id}/image/": {"get": {"operationId": "devices_image_list", "summary": "Serve full-resolution device main image", "description": "Returns the full-resolution main image of a device as binary data. Consumes 1 API credit per request. Requires authentication via API key (header recommended, query param for backwards compatibility).", "parameters": [{"name": "Authorization", "in": "header", "description": "Recommended: 'Token YOUR_API_KEY' or 'Bearer YOUR_API_KEY'", "required": false, "type": "string"}, {"name": "key", "in": "query", "description": "Fallback: API key as query parameter (less secure, visible in logs)", "required": false, "type": "string"}], "responses": {"200": {"description": "Binary image data", "schema": {"type": "file"}}, "401": {"description": "Unauthorized - API key required"}, "404": {"description": "Device or image not found"}, "429": {"description": "Rate limit exceeded - monthly credits exhausted"}}, "tags": ["devices"]}, "parameters": [{"name": "id", "in": "path", "required": true, "type": "string"}]}, "/devices/{id}/images/": {"get": {"operationId": "devices_images", "summary": "Get device images", "description": "Get all images for a specific device. Returns image URLs for full-resolution access (accessing image URLs consumes 1 credit per request). Main device image is included as the first entry with URL /devices/{id}/image/.", "parameters": [{"name": "limit", "in": "query", "description": "Maximum number of images to return (default: 10, max: 50).", "required": false, "type": "integer"}], "responses": {"200": {"description": "Device images with URLs", "schema": {"type": "array", "items": {"$ref": "#/definitions/Image"}}}, "404": {"description": "Device not found"}, "400": {"description": "Bad request, invalid limit parameter"}}, "tags": ["devices"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this device.", "required": true, "type": "integer"}]}, "/devices/{id}/main-camera/": {"get": {"operationId": "devices_main_camera", "summary": "Get device main camera specifications", "description": "Get main camera specifications for a specific device.", "parameters": [], "responses": {"200": {"description": "Main camera specifications", "schema": {"$ref": "#/definitions/MainCamera"}}, "404": {"description": "Device or main camera specifications not found"}}, "tags": ["devices"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this device.", "required": true, "type": "integer"}]}, "/devices/{id}/memory/": {"get": {"operationId": "devices_memory", "summary": "Get device memory specifications", "description": "Get memory specifications for a specific device.", "parameters": [], "responses": {"200": {"description": "Memory specifications", "schema": {"$ref": "#/definitions/Memory"}}, "404": {"description": "Device or memory specifications not found"}}, "tags": ["devices"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this device.", "required": true, "type": "integer"}]}, "/devices/{id}/misc/": {"get": {"operationId": "devices_misc", "summary": "Get device miscellaneous specifications", "description": "Get miscellaneous specifications for a specific device.", "parameters": [], "responses": {"200": {"description": "Miscellaneous specifications", "schema": {"$ref": "#/definitions/Misc"}}, "404": {"description": "Device or miscellaneous specifications not found"}}, "tags": ["devices"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this device.", "required": true, "type": "integer"}]}, "/devices/{id}/network/": {"get": {"operationId": "devices_network", "summary": "Get device network specifications", "description": "Get network specifications for a specific device.", "parameters": [], "responses": {"200": {"description": "Network specifications", "schema": {"$ref": "#/definitions/Network"}}, "404": {"description": "Device or network specifications not found"}}, "tags": ["devices"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this device.", "required": true, "type": "integer"}]}, "/devices/{id}/platform/": {"get": {"operationId": "devices_platform", "summary": "Get device platform specifications", "description": "Get platform specifications for a specific device.", "parameters": [], "responses": {"200": {"description": "Platform specifications", "schema": {"$ref": "#/definitions/Platform"}}, "404": {"description": "Device or platform specifications not found"}}, "tags": ["devices"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this device.", "required": true, "type": "integer"}]}, "/devices/{id}/selfie-camera/": {"get": {"operationId": "devices_selfie_camera", "summary": "Get device selfie camera specifications", "description": "Get selfie camera specifications for a specific device.", "parameters": [], "responses": {"200": {"description": "Selfie camera specifications", "schema": {"$ref": "#/definitions/SelfieCamera"}}, "404": {"description": "Device or selfie camera specifications not found"}}, "tags": ["devices"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this device.", "required": true, "type": "integer"}]}, "/devices/{id}/sound/": {"get": {"operationId": "devices_sound", "summary": "Get device sound specifications", "description": "Get sound specifications for a specific device.", "parameters": [], "responses": {"200": {"description": "Sound specifications", "schema": {"$ref": "#/definitions/Sound"}}, "404": {"description": "Device or sound specifications not found"}}, "tags": ["devices"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this device.", "required": true, "type": "integer"}]}, "/devices/{id}/thumb.png/": {"get": {"operationId": "devices_thumb.png_list", "summary": "Serve device thumbnail image (100x100)", "description": "Returns the 100x100 thumbnail image as PNG binary data. **Does NOT consume credits** - free to access.", "parameters": [], "responses": {"200": {"description": "Binary PNG image data", "schema": {"type": "file"}}, "404": {"description": "Device or thumbnail not found"}}, "tags": ["devices"]}, "parameters": [{"name": "id", "in": "path", "required": true, "type": "string"}]}, "/images/{id}/": {"get": {"operationId": "images_read", "summary": "Serve full-resolution gallery image", "description": "Returns the full-resolution image as binary data. Consumes 1 API credit per request. Requires authentication via API key (header recommended, query param for backwards compatibility).", "parameters": [{"name": "Authorization", "in": "header", "description": "Recommended: 'Token YOUR_API_KEY' or 'Bearer YOUR_API_KEY'", "required": false, "type": "string"}, {"name": "key", "in": "query", "description": "Fallback: API key as query parameter (less secure, visible in logs)", "required": false, "type": "string"}], "responses": {"200": {"description": "Binary image data", "schema": {"type": "file"}}, "401": {"description": "Unauthorized - API key required"}, "404": {"description": "Image not found"}, "429": {"description": "Rate limit exceeded - monthly credits exhausted"}}, "tags": ["images"]}, "parameters": [{"name": "id", "in": "path", "required": true, "type": "string"}]}, "/manufacturers/": {"get": {"operationId": "manufacturers_list", "summary": "List all device manufacturers", "description": "Retrieve a list of all device manufacturers with their names and website URLs. Results are paginated with 10 manufacturers per page (max 50 via limit). Requires authentication.", "parameters": [{"name": "Authorization", "in": "header", "description": "Recommended: 'Token YOUR_API_KEY' or 'Bearer YOUR_API_KEY'", "required": false, "type": "string"}, {"name": "key", "in": "query", "description": "Fallback: API key as query parameter (optional for demo)", "required": false, "type": "string"}, {"name": "page", "in": "query", "description": "Page number (default: 1). Each page contains 10 manufacturers by default (max 50 via limit).", "required": false, "type": "integer"}], "responses": {"200": {"description": "Paginated list of manufacturers with metadata", "schema": {"type": "array", "items": {"$ref": "#/definitions/ManufacturerList"}}}, "400": {"description": "Bad request, invalid page parameter"}, "401": {"description": "Unauthorized - API key required"}}, "tags": ["manufacturers"]}, "parameters": []}, "/manufacturers/{id}/": {"get": {"operationId": "manufacturers_read", "summary": "Get manufacturer by ID", "description": "Retrieve detailed manufacturer information by providing its ID. Returns manufacturer name, website URL, and logo.", "parameters": [{"name": "Authorization", "in": "header", "description": "Recommended: 'Token YOUR_API_KEY' or 'Bearer YOUR_API_KEY'", "required": false, "type": "string"}, {"name": "key", "in": "query", "description": "Fallback: API key as query parameter (optional for demo)", "required": false, "type": "string"}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/ManufacturerList"}}, "401": {"description": "Unauthorized - Authentication required"}, "404": {"description": "Not Found - Manufacturer with given ID does not exist"}}, "tags": ["manufacturers"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this manufacturer.", "required": true, "type": "integer"}]}, "/me/": {"get": {"operationId": "me_list", "description": "", "parameters": [], "responses": {"200": {"description": ""}}, "tags": ["me"]}, "parameters": []}, "/payment_successful": {"get": {"operationId": "payment_successful_list", "description": "", "parameters": [], "responses": {"200": {"description": ""}}, "tags": ["payment_successful"]}, "parameters": []}, "/payment_successful/": {"get": {"operationId": "payment_successful_list", "description": "", "parameters": [], "responses": {"200": {"description": ""}}, "tags": ["payment_successful"]}, "parameters": []}, "/status/": {"get": {"operationId": "status_list", "description": "Retrieve the server status", "parameters": [], "responses": {"200": {"description": ""}}, "tags": ["status"]}, "parameters": []}}, "definitions": {"AuthToken": {"required": ["username", "password"], "type": "object", "properties": {"username": {"title": "Username", "type": "string", "minLength": 1}, "password": {"title": "Password", "type": "string", "minLength": 1}, "token": {"title": "Token", "type": "string", "readOnly": true, "minLength": 1}}}, "FirewallAPILog": {"required": ["remote_address", "server_hostname", "url"], "type": "object", "properties": {"id": {"title": "ID", "type": "integer", "readOnly": true}, "remote_address": {"title": "Remote Address", "description": "The IP address of the client making the request.", "type": "string", "minLength": 1}, "server_hostname": {"title": "Server Hostname", "description": "The hostname of the server that received the request.", "type": "string", "maxLength": 255, "minLength": 1}, "url": {"title": "Request URL", "description": "The URL path that was requested.", "type": "string", "minLength": 1}, "blocked": {"title": "Blocked", "description": "Whether this IP is currently blocked.", "type": "boolean"}, "created_at": {"title": "Created At", "description": "When this log entry was first created.", "type": "string", "format": "date-time", "readOnly": true}, "updated_at": {"title": "Updated At", "description": "When this log entry was last updated.", "type": "string", "format": "date-time", "readOnly": true}}}, "DeviceList": {"required": ["name"], "type": "object", "properties": {"id": {"title": "Id", "type": "integer", "readOnly": true}, "name": {"title": "Name", "type": "string", "maxLength": 255, "minLength": 1}, "manufacturer_name": {"title": "Manufacturer name", "type": "string", "readOnly": true, "minLength": 1}, "device_type": {"title": "Device type", "description": "Type of device (phone, tablet, laptop, wearable, other)", "type": "string", "enum": ["phone", "tablet", "laptop", "wearable", "other"]}, "description": {"title": "Description", "type": "string"}, "colors": {"title": "Colors", "description": "Available colors", "type": "string", "maxLength": 255}, "storage": {"title": "Storage", "description": "Storage options (e.g., 256GB, 512GB, 2TB)", "type": "string", "maxLength": 255}, "storage_options": {"title": "Storage options", "description": "[{\"size_gb\": float}, ...]", "type": "object", "x-nullable": true}, "screen_resolution": {"title": "Screen resolution", "description": "Screen size and resolution (e.g., 6.9\", 1320 x 2868 pixels)", "type": "string", "maxLength": 255}, "weight": {"title": "Weight", "description": "Device weight (e.g., 233g)", "type": "string", "maxLength": 50}, "weight_grams": {"title": "Weight grams", "description": "Parsed from weight field, normalized to grams", "type": "number", "x-nullable": true}, "thickness": {"title": "Thickness", "description": "Device thickness (e.g., 8.8mm)", "type": "string", "maxLength": 50}, "release_date": {"title": "Release date", "description": "Release date", "type": "string", "maxLength": 100}, "camera": {"title": "Camera", "description": "Main camera resolution (e.g., 48MP)", "type": "string", "maxLength": 50}, "battery_capacity": {"title": "Battery capacity", "description": "Battery capacity (e.g., 4823 mAh)", "type": "string", "maxLength": 50}, "hardware": {"title": "Hardware", "description": "RAM and chipset (e.g., 12GB RAM, Apple A19 Pro)", "type": "string", "maxLength": 255}, "hardware_parsed": {"title": "Hardware parsed", "description": "{\"ram_gb\": float|null, \"chipset\": str|null}", "type": "object", "x-nullable": true}, "image_b64": {"title": "Image b64", "type": "string", "readOnly": true}, "image_url": {"title": "Image url", "type": "string", "readOnly": true}}}, "Manufacturer": {"required": ["name"], "type": "object", "properties": {"id": {"title": "ID", "type": "integer", "readOnly": true}, "name": {"title": "Name", "type": "string", "maxLength": 255, "minLength": 1}, "logo_b64": {"title": "Logo b64", "type": "string", "readOnly": true}, "website_url": {"title": "Website url", "description": "Manufacturer official website URL", "type": "string", "format": "uri", "maxLength": 500, "x-nullable": true}}}, "Network": {"type": "object", "properties": {"id": {"title": "ID", "type": "integer", "readOnly": true}, "technology": {"title": "Technology", "description": "Network technologies (e.g., GSM / CDMA / HSPA / LTE / 5G)", "type": "string"}, "bands_2g": {"title": "Bands 2g", "description": "2G bands", "type": "string"}, "bands_3g": {"title": "Bands 3g", "description": "3G bands", "type": "string"}, "bands_4g": {"title": "Bands 4g", "description": "4G/LTE bands", "type": "string"}, "bands_5g": {"title": "Bands 5g", "description": "5G bands", "type": "string"}, "speed": {"title": "Speed", "description": "Network speed information", "type": "string"}}}, "Body": {"type": "object", "properties": {"id": {"title": "ID", "type": "integer", "readOnly": true}, "dimensions": {"title": "Dimensions", "description": "Device dimensions", "type": "string", "maxLength": 255}, "dimensions_parsed": {"title": "Dimensions parsed", "description": "{\"height_mm\": float, \"width_mm\": float, \"thickness_mm\": float}", "type": "object", "x-nullable": true}, "weight": {"title": "Weight", "description": "Device weight", "type": "string", "maxLength": 100}, "weight_grams": {"title": "Weight grams", "description": "Parsed from weight field, normalized to grams", "type": "number", "x-nullable": true}, "build": {"title": "Build", "description": "Build materials and construction", "type": "string"}, "sim": {"title": "Sim", "description": "SIM card information", "type": "string"}, "other": {"title": "Other", "description": "Other body specifications (IP rating, features, etc.)", "type": "string"}}}, "Display": {"type": "object", "properties": {"id": {"title": "ID", "type": "integer", "readOnly": true}, "type": {"title": "Type", "description": "Display type (OLED, LCD, etc.) and features", "type": "string"}, "size": {"title": "Size", "description": "Screen size", "type": "string", "maxLength": 255}, "size_inches": {"title": "Size inches", "description": "Parsed from size field, e.g. 6.7", "type": "number", "x-nullable": true}, "resolution": {"title": "Resolution", "description": "Screen resolution", "type": "string", "maxLength": 255}, "protection": {"title": "Protection", "description": "Screen protection (Gorilla Glass, etc.)", "type": "string", "maxLength": 255}, "other": {"title": "Other", "description": "Other display features", "type": "string"}}}, "Platform": {"type": "object", "properties": {"id": {"title": "ID", "type": "integer", "readOnly": true}, "os": {"title": "Os", "description": "Operating system", "type": "string", "maxLength": 255}, "chipset": {"title": "Chipset", "description": "Chipset/SoC", "type": "string", "maxLength": 255}, "cpu": {"title": "Cpu", "description": "CPU specifications", "type": "string", "maxLength": 255}, "gpu": {"title": "Gpu", "description": "GPU specifications", "type": "string", "maxLength": 255}}}, "Memory": {"type": "object", "properties": {"id": {"title": "ID", "type": "integer", "readOnly": true}, "card_slot": {"title": "Card slot", "description": "Memory card slot information", "type": "string", "maxLength": 255}, "internal": {"title": "Internal", "description": "Internal storage and RAM options", "type": "string"}, "internal_parsed": {"title": "Internal parsed", "description": "[{\"storage_gb\": float, \"ram_gb\": float}, ...]", "type": "object", "x-nullable": true}, "other": {"title": "Other", "description": "Other memory specifications (NVMe, UFS, etc.)", "type": "string"}}}, "MainCamera": {"type": "object", "properties": {"id": {"title": "ID", "type": "integer", "readOnly": true}, "modules": {"title": "Modules", "description": "Camera modules/sensors (Single, Dual, Triple, Quad, etc.)", "type": "string"}, "modules_parsed": {"title": "Modules parsed", "description": "[{\"mp\": float|null, \"aperture\": float|null, \"focal_mm\": float|null, \"type\": str|null}, ...]", "type": "object", "x-nullable": true}, "features": {"title": "Features", "description": "Camera features (LED flash, HDR, panorama, etc.)", "type": "string"}, "video": {"title": "Video", "description": "Video recording capabilities", "type": "string"}}}, "SelfieCamera": {"type": "object", "properties": {"id": {"title": "ID", "type": "integer", "readOnly": true}, "modules": {"title": "Modules", "description": "Front camera modules/sensors (Single, Dual, etc.)", "type": "string"}, "features": {"title": "Features", "description": "Front camera features (HDR, face unlock, etc.)", "type": "string"}, "video": {"title": "Video", "description": "Front camera video recording capabilities", "type": "string"}}}, "Sound": {"type": "object", "properties": {"id": {"title": "ID", "type": "integer", "readOnly": true}, "loudspeaker": {"title": "Loudspeaker", "description": "Loudspeaker information", "type": "string", "maxLength": 255}, "audio_jack": {"title": "Audio jack", "description": "3.5mm audio jack availability", "type": "string", "maxLength": 100}}}, "Comms": {"type": "object", "properties": {"id": {"title": "ID", "type": "integer", "readOnly": true}, "wlan": {"title": "Wlan", "description": "Wi-Fi specifications", "type": "string", "maxLength": 255}, "bluetooth": {"title": "Bluetooth", "description": "Bluetooth version and features", "type": "string", "maxLength": 255}, "positioning": {"title": "Positioning", "description": "GPS and positioning systems", "type": "string", "maxLength": 255}, "nfc": {"title": "Nfc", "description": "NFC availability", "type": "string", "maxLength": 100}, "radio": {"title": "Radio", "description": "FM radio availability", "type": "string", "maxLength": 100}, "usb": {"title": "Usb", "description": "USB specifications", "type": "string", "maxLength": 255}}}, "Features": {"type": "object", "properties": {"id": {"title": "ID", "type": "integer", "readOnly": true}, "sensors": {"title": "Sensors", "description": "Device sensors (accelerometer, gyro, fingerprint, etc.)", "type": "string"}, "other": {"title": "Other", "description": "Other features (UWB, emergency SOS, satellite, etc.)", "type": "string"}}}, "Battery": {"type": "object", "properties": {"id": {"title": "ID", "type": "integer", "readOnly": true}, "type": {"title": "Type", "description": "Battery type and capacity (Li-Ion, Li-Po, mAh)", "type": "string", "maxLength": 255}, "capacity_mah": {"title": "Capacity mah", "description": "Parsed from type field, e.g. 3000", "type": "number", "x-nullable": true}, "type_parsed": {"title": "Type parsed", "description": "{\"chemistry\": str, \"capacity_mah\": float, \"removable\": bool|null}", "type": "object", "x-nullable": true}, "charging": {"title": "Charging", "description": "Charging capabilities (wired, wireless, fast charging, etc.)", "type": "string"}}}, "Misc": {"type": "object", "properties": {"id": {"title": "ID", "type": "integer", "readOnly": true}, "model_numbers": {"title": "Model numbers", "description": "Model numbers/variants", "type": "string", "maxLength": 255}, "sar_us": {"title": "Sar us", "description": "SAR value (US)", "type": "string", "maxLength": 255}, "sar_eu": {"title": "Sar eu", "description": "SAR value (EU)", "type": "string", "maxLength": 255}, "price": {"title": "Price", "description": "Price information", "type": "string", "maxLength": 255}}}, "Device": {"required": ["name"], "type": "object", "properties": {"id": {"title": "Id", "type": "integer", "readOnly": true}, "name": {"title": "Name", "type": "string", "maxLength": 255, "minLength": 1}, "manufacturer": {"$ref": "#/definitions/Manufacturer"}, "manufacturer_name": {"title": "Manufacturer name", "type": "string", "readOnly": true, "minLength": 1}, "device_type": {"title": "Device type", "description": "Type of device (phone, tablet, laptop, wearable, other)", "type": "string", "enum": ["phone", "tablet", "laptop", "wearable", "other"]}, "description": {"title": "Description", "type": "string"}, "colors": {"title": "Colors", "description": "Available colors", "type": "string", "maxLength": 255}, "storage": {"title": "Storage", "description": "Storage options (e.g., 256GB, 512GB, 2TB)", "type": "string", "maxLength": 255}, "storage_options": {"title": "Storage options", "description": "[{\"size_gb\": float}, ...]", "type": "object", "x-nullable": true}, "screen_resolution": {"title": "Screen resolution", "description": "Screen size and resolution (e.g., 6.9\", 1320 x 2868 pixels)", "type": "string", "maxLength": 255}, "weight": {"title": "Weight", "description": "Device weight (e.g., 233g)", "type": "string", "maxLength": 50}, "weight_grams": {"title": "Weight grams", "description": "Parsed from weight field, normalized to grams", "type": "number", "x-nullable": true}, "thickness": {"title": "Thickness", "description": "Device thickness (e.g., 8.8mm)", "type": "string", "maxLength": 50}, "release_date": {"title": "Release date", "description": "Release date", "type": "string", "maxLength": 100}, "camera": {"title": "Camera", "description": "Main camera resolution (e.g., 48MP)", "type": "string", "maxLength": 50}, "battery_capacity": {"title": "Battery capacity", "description": "Battery capacity (e.g., 4823 mAh)", "type": "string", "maxLength": 50}, "hardware": {"title": "Hardware", "description": "RAM and chipset (e.g., 12GB RAM, Apple A19 Pro)", "type": "string", "maxLength": 255}, "hardware_parsed": {"title": "Hardware parsed", "description": "{\"ram_gb\": float|null, \"chipset\": str|null}", "type": "object", "x-nullable": true}, "image_b64": {"title": "Image b64", "type": "string", "readOnly": true}, "image_url": {"title": "Image url", "type": "string", "readOnly": true}, "network": {"$ref": "#/definitions/Network"}, "body": {"$ref": "#/definitions/Body"}, "display": {"$ref": "#/definitions/Display"}, "platform": {"$ref": "#/definitions/Platform"}, "memory": {"$ref": "#/definitions/Memory"}, "main_camera": {"$ref": "#/definitions/MainCamera"}, "selfie_camera": {"$ref": "#/definitions/SelfieCamera"}, "sound": {"$ref": "#/definitions/Sound"}, "comms": {"$ref": "#/definitions/Comms"}, "features": {"$ref": "#/definitions/Features"}, "battery": {"$ref": "#/definitions/Battery"}, "misc": {"$ref": "#/definitions/Misc"}}}, "Image": {"type": "object", "properties": {"id": {"title": "ID", "type": "integer", "readOnly": true}, "image_url": {"title": "Image url", "type": "string", "readOnly": true}, "caption": {"title": "Caption", "description": "Image caption/description", "type": "string", "maxLength": 255}, "is_official": {"title": "Is official", "description": "Is this an official product image?", "type": "boolean"}, "order": {"title": "Order", "description": "Display order", "type": "integer", "maximum": 2147483647, "minimum": -2147483648}}}, "ManufacturerList": {"required": ["name"], "type": "object", "properties": {"id": {"title": "ID", "type": "integer", "readOnly": true}, "name": {"title": "Name", "type": "string", "maxLength": 255, "minLength": 1}, "website_url": {"title": "Website url", "description": "Manufacturer official website URL", "type": "string", "format": "uri", "maxLength": 500, "x-nullable": true}}}}}