endpoints: - code_examples: curl: "curl -X POST https://api.prixe.io/api/last_sold \\\n -H \"Authorization:\ \ Bearer YOUR_API_KEY\" \\\n -H \"Content-Type: application/json\" \\\n -d\ \ '{\"ticker\": \"TSLA\"}'" javascript: "fetch('https://api.prixe.io/api/last_sold', {\n method: 'POST',\n\ \ headers: {\n 'Authorization': 'Bearer YOUR_API_KEY',\n 'Content-Type':\ \ 'application/json'\n },\n body: JSON.stringify({\n ticker: 'TSLA'\n \ \ })\n})\n.then(response => response.json())\n.then(data => console.log(data))\n\ .catch(error => console.error('Error:', error));" python: "import requests\n\nurl = \"https://api.prixe.io/api/last_sold\"\nheaders\ \ = {\n \"Authorization\": \"Bearer YOUR_API_KEY\",\n \"Content-Type\"\ : \"application/json\"\n}\npayload = {\n \"ticker\": \"TSLA\"\n}\n\nresponse\ \ = requests.post(url, headers=headers, json=payload)\ndata = response.json()\n\ print(data)" description: Get the last sold price data for a specified stock ticker including bid/ask prices, volume, and other market data errors: - description: The ticker parameter is missing from the request message: 'Missing required parameter: ticker' status: 400 - description: Invalid API key or API key not provided message: Authentication failed status: 401 - description: You have exceeded the allowed number of requests message: Rate limit exceeded status: 429 - description: An error occurred on the server message: Internal server error status: 500 example_request: ticker: TSLA example_response: lastSalePrice: $58.79 lastTradeTimestamp: Jul 10, 2025 6:48 PM ET ticker: W method: POST name: Last Sold Price path: /api/last_sold request_fields: callback_url: description: Optional URL to which the API response will be forwarded as a webhook example: https://your-server.com/webhooks/price-callback required: false type: string ticker: description: The stock ticker symbol (e.g., AAPL, MSFT, GOOGL) example: W required: true type: string response_fields: lastSalePrice: description: Price of the last executed trade with currency symbol type: string lastTradeTimestamp: description: Timestamp of the last trade type: string ticker: description: Stock ticker symbol type: string - code_examples: curl: "curl -X POST https://api.prixe.io/api/price \\\n -H \"Authorization: Bearer\ \ YOUR_API_KEY\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\"ticker\"\ : \"MSFT\", \"start_date\": 1735828200, \"end_date\": 1745328600, \"interval\"\ : \"1d\"}'" javascript: "fetch('https://api.prixe.io/api/price', {\n method: 'POST',\n headers:\ \ {\n 'Authorization': 'Bearer YOUR_API_KEY',\n 'Content-Type': 'application/json'\n\ \ },\n body: JSON.stringify({\n ticker: 'MSFT',\n start_date: 1735828200,\n\ \ end_date: 1745328600,\n interval: '1d'\n })\n})\n.then(response =>\ \ response.json())\n.then(data => console.log(data))\n.catch(error => console.error('Error:',\ \ error));" python: "import requests\n\nurl = \"https://api.prixe.io/api/price\"\nheaders\ \ = {\n \"Authorization\": \"Bearer YOUR_API_KEY\",\n \"Content-Type\"\ : \"application/json\"\n}\npayload = {\n \"ticker\": \"MSFT\",\n \"start_date\"\ : 1735828200,\n \"end_date\": 1745328600,\n \"interval\": \"1d\"\n}\n\n\ response = requests.post(url, headers=headers, json=payload)\ndata = response.json()\n\ print(data)" description: Get historical price data for a specified stock ticker and time range errors: - description: A required parameter is missing from the request message: Missing required parameter status: 400 - description: Invalid API key or API key not provided message: Authentication failed status: 401 - description: You have exceeded the allowed number of requests message: Rate limit exceeded status: 429 - description: An error occurred on the server message: Internal server error status: 500 example_request: end_date: 1752186964 interval: 1d start_date: 1752108881 ticker: W example_response: data: close: - 56.62 - 56.62 - 56.57 - 56.99 - 56.99 - 57.459999084472656 - 58.5099983215332 - 58.849998474121094 - 59.154998779296875 - 59.34000015258789 - 59.255001068115234 - 58.83000183105469 - 58.83 - 58.95 - 58.79 - 58.85 high: - 56.62 - 56.62 - 56.78 - 57.3852 - 56.99 - 57.630001068115234 - 58.959999084472656 - 58.90999984741211 - 59.31999969482422 - 59.47999954223633 - 59.5099983215332 - 59.400001525878906 - 59.0 - 59.0 - 58.83 - 58.85 low: - 56.62 - 56.62 - 56.57 - 55.77 - 56.99 - 56.525001525878906 - 57.40999984741211 - 58.23809814453125 - 58.650001525878906 - 58.9900016784668 - 58.86000061035156 - 58.77000045776367 - 58.5001 - 58.57 - 58.79 - 58.85 open: - 56.62 - 56.62 - 56.75 - 56.79 - 56.99 - 56.959999084472656 - 57.45000076293945 - 58.5099983215332 - 58.849998474121094 - 59.18000030517578 - 59.34000015258789 - 59.27000045776367 - 58.83 - 58.57 - 58.83 - 58.85 price: 58.83 ticker: W timestamp: - 1752134400 - 1752138000 - 1752145200 - 1752148800 - 1752152400 - 1752154200 - 1752157800 - 1752161400 - 1752165000 - 1752168600 - 1752172200 - 1752175800 - 1752177600 - 1752181200 - 1752184800 - 1752185539 volume: - 0 - 0 - 0 - 0 - 0 - 505383 - 1556023 - 357222 - 336612 - 437100 - 798095 - 1142203 - 365533 - 0 - 0 - 0 success: true method: POST name: Historical Price path: /api/price request_fields: callback_url: description: Optional URL to which the API response will be forwarded as a webhook example: https://your-server.com/webhooks/price-callback required: false type: string end_date: description: Unix timestamp for the end date example: 1745328600 required: true type: integer interval: allowed_values: - 1m - 5m - 15m - 30m - 1h - 1d - 1wk - 1mo description: Time interval for the data points example: 1d required: true type: string start_date: description: Unix timestamp for the start date example: 1735828200 required: true type: integer ticker: description: The stock ticker symbol (e.g., AAPL, MSFT, GOOGL) example: MSFT required: true type: string response_fields: data: description: Container for the filtered price data fields: close: description: Array of closing prices for each time period type: array high: description: Array of highest prices for each time period type: array low: description: Array of lowest prices for each time period type: array open: description: Array of opening prices for each time period type: array price: description: Current/regular market price of the stock type: number ticker: description: Stock ticker symbol type: string timestamp: description: Array of Unix timestamps for each data point type: array volume: description: Array of trading volumes for each time period type: array type: object success: description: Indicates if the request was successful type: boolean - code_examples: curl: "curl -X POST https://api.prixe.io/api/search \\\n -H \"Authorization:\ \ Bearer YOUR_API_KEY\" \\\n -H \"Content-Type: application/json\" \\\n -d\ \ '{\"query\": \"Tesla\"}'" javascript: "fetch('https://api.prixe.io/api/search', {\n method: 'POST',\n \ \ headers: {\n 'Authorization': 'Bearer YOUR_API_KEY',\n 'Content-Type':\ \ 'application/json'\n },\n body: JSON.stringify({\n query: 'Tesla'\n \ \ })\n})\n.then(response => response.json())\n.then(data => console.log(data))\n\ .catch(error => console.error('Error:', error));" python: "import requests\n\nurl = \"https://api.prixe.io/api/search\"\nheaders\ \ = {\n \"Authorization\": \"Bearer YOUR_API_KEY\",\n \"Content-Type\"\ : \"application/json\"\n}\npayload = {\n \"query\": \"Tesla\"\n}\n\nresponse\ \ = requests.post(url, headers=headers, json=payload)\ndata = response.json()\n\ print(data)" description: Search for tickers, company names, or CUSIPs errors: - description: The request was not properly formatted message: Invalid request format status: 400 - description: Invalid API key or API key not provided message: Authentication failed status: 401 - description: You have exceeded the allowed number of requests message: Rate limit exceeded status: 429 - description: An error occurred on the server message: Internal server error status: 500 example_request: query: Tesla example_response: - cusip: 88160R101 stockName: Tesla, Inc. ticker: TSLA method: POST name: Search path: /api/search request_fields: callback_url: description: Optional URL to which the API response will be forwarded as a webhook example: https://your-server.com/webhooks/search-callback required: false type: string cik: description: Search by specific CIK number example: '884394' required: false type: string cusip: description: Search by specific CUSIP number example: 88160R101 required: false type: string query: description: General search term for stock names, tickers, etc. example: Tesla required: false type: string ticker: description: Search by specific ticker symbol example: TSLA required: false type: string response_fields: description: Array of matching securities items: fields: cik: description: The CIK identifier type: string cusip: description: The CUSIP identifier type: string stockName: description: The name of the stock/company type: string ticker: description: The ticker symbol type: string type: object type: array - code_examples: javascript: "// Connect to the WebSocket\nconst socket = new WebSocket('wss://api.prixe.io/ws?api_key=YOUR_API_KEY');\n\ \n// Handle connection open\nsocket.onopen = function(e) {\n console.log('Connection\ \ established');\n \n // Subscribe to a ticker\n socket.send(JSON.stringify({\n\ \ 'event': 'subscribe',\n 'data': {\n 'ticker': 'AAPL'\n }\n \ \ }));\n};\n\n// Handle incoming messages\nsocket.onmessage = function(event)\ \ {\n const data = JSON.parse(event.data);\n \n // Handle different event\ \ types\n switch(data.event) {\n case 'connect_status':\n console.log('Connected\ \ with ID:', data.data.connection_id);\n break;\n case 'subscription_status':\n\ \ console.log('Subscription status:', data.data.status);\n break;\n\ \ case 'price_update':\n console.log(`Price update for ${data.data.ticker}:`,\ \ data.data.data.currentPrice);\n break;\n case 'error':\n console.error('Error:',\ \ data.data.message);\n break;\n }\n};\n\n// Handle errors\nsocket.onerror\ \ = function(error) {\n console.error('WebSocket Error:', error);\n};\n\n//\ \ Handle connection close\nsocket.onclose = function(event) {\n console.log('Connection\ \ closed:', event.code, event.reason);\n};\n\n// To unsubscribe\nfunction unsubscribe()\ \ {\n socket.send(JSON.stringify({\n 'event': 'unsubscribe'\n }));\n}\n\ \n// To disconnect\nfunction disconnect() {\n socket.close();\n}" python: "import websocket\nimport json\nimport threading\nimport time\n\n# Define\ \ WebSocket callback functions\ndef on_message(ws, message):\n data = json.loads(message)\n\ \ event_type = data.get('event')\n \n if event_type == 'connect_status':\n\ \ print(f\"Connected with ID: {data['data']['connection_id']}\")\n \ \ elif event_type == 'subscription_status':\n print(f\"Subscription\ \ status: {data['data']['status']}\")\n elif event_type == 'price_update':\n\ \ print(f\"Price update for {data['data']['ticker']}: {data['data']['data']['currentPrice']}\"\ )\n elif event_type == 'error':\n print(f\"Error: {data['data']['message']}\"\ )\n\ndef on_error(ws, error):\n print(f\"Error: {error}\")\n\ndef on_close(ws,\ \ close_status_code, close_msg):\n print(f\"Connection closed: {close_status_code},\ \ {close_msg}\")\n\ndef on_open(ws):\n print(\"Connection established\")\n\ \ \n # Subscribe to a ticker\n ws.send(json.dumps({\n 'event':\ \ 'subscribe',\n 'data': {\n 'ticker': 'AAPL'\n }\n\ \ }))\n\n# Connect to WebSocket\nws_url = \"wss://api.prixe.io/ws?api_key=YOUR_API_KEY\"\ \nws = websocket.WebSocketApp(ws_url,\n on_open=on_open,\n\ \ on_message=on_message,\n \ \ on_error=on_error,\n on_close=on_close)\n\n# Start\ \ WebSocket connection in a separate thread\nwst = threading.Thread(target=ws.run_forever)\n\ wst.daemon = True\nwst.start()\n\n# Keep the main thread running\ntry:\n \ \ while True:\n time.sleep(1)\nexcept KeyboardInterrupt:\n # To unsubscribe\ \ before disconnecting\n ws.send(json.dumps({\n 'event': 'unsubscribe'\n\ \ }))\n \n # Close the connection\n ws.close()" connection: description: Connect to this WebSocket URL with your API key as a query parameter. Alternative path /live is also supported. url: wss://api.prixe.io/ws?api_key=YOUR_API_KEY description: WebSocket connection for receiving real-time price updates for a specified stock ticker events: client_to_server: - data: ticker: description: The stock ticker symbol to subscribe to (e.g., AAPL, MSFT) example: AAPL required: true type: string description: Subscribe to real-time updates for a ticker name: subscribe - data: null description: Unsubscribe from the current ticker updates name: unsubscribe server_to_client: - data: connection_id: description: Unique identifier for this connection example: abcd1234 type: string status: description: Connection status example: connected type: string description: Sent when a connection is established name: connect_status - data: status: description: Subscription status example: subscribed type: string ticker: description: The ticker symbol that was subscribed to example: AAPL type: string description: Sent in response to subscribe/unsubscribe events name: subscription_status - data: data: description: The price stock pricedata example: currentPrice: 182.43 message: Successfully fetched current stock price statusCode: 200 type: object ticker: description: The ticker symbol example: AAPL type: string timestamp: description: Unix timestamp of when the update was sent example: 1747060800 type: integer update_count: description: Running count of updates sent for this subscription example: 5 type: integer description: Real-time price update sent every second name: price_update - data: message: description: Error message example: 'Error fetching price data: Connection timeout' type: string description: Sent when an error occurs name: error method: WEBSOCKET name: Live Price Data (WebSocket) path: wss://api.prixe.io/ws - available_endpoints: - description: Access to stock last sold price data via x402 payment maps_to: /system/req_for_agent path: /x402/last_sold price: $0.0002 request_method: GET request_parameters: ticker: description: Stock ticker symbol example: AAPL required: true type: string response_schema: properties: lastSalePrice: description: Price of the last executed trade with currency symbol type: string lastTradeTimestamp: description: Timestamp of the last trade type: string ticker: description: Stock ticker symbol type: string type: object - description: Search for tickers, company names, or CUSIPs via x402 payment maps_to: /system/search_for_agent path: /x402/search price: $0.0002 request_method: GET request_parameters: cusip: description: Search by specific CUSIP number example: 88160R101 required: false type: string query: description: General search term for stock names, tickers, etc. example: Tesla required: false type: string ticker: description: Search by specific ticker symbol example: TSLA required: false type: string response_schema: description: Array of matching securities items: properties: cusip: description: The CUSIP identifier type: string stockName: description: The name of the stock/company type: string ticker: description: The ticker symbol type: string type: object type: array - description: Historical price data for specified stock ticker and time range via x402 payment maps_to: /system/price_for_agent path: /x402/price price: $0.0002 request_method: GET request_parameters: end_date: description: Unix timestamp for the end date example: 1745328600 required: true type: integer interval: allowed_values: - 1m - 5m - 15m - 30m - 1h - 1d - 1wk - 1mo description: Time interval for the data points example: 1d required: true type: string start_date: description: Unix timestamp for the start date example: 1735828200 required: true type: integer ticker: description: Stock ticker symbol example: MSFT required: true type: string response_schema: description: Filtered price data response properties: data: description: Container for the filtered price data properties: close: description: Array of closing prices for each time period type: array high: description: Array of highest prices for each time period type: array low: description: Array of lowest prices for each time period type: array open: description: Array of opening prices for each time period type: array price: description: Current/regular market price of the stock type: number ticker: description: Stock ticker symbol type: string timestamp: description: Array of Unix timestamps for each data point type: array volume: description: Array of trading volumes for each time period type: array type: object success: description: Indicates if the request was successful type: boolean type: object benefits: - No API key management required - Pay-per-use model with micro-payments - Autonomous operation for AI agents - Decentralized payment verification - Automatic payment handling via x402-fetch code_examples: curl_with_payment: '# Note: Direct curl requests cannot handle x402 payments # Use the x402-fetch library or implement the x402 protocol manually ' javascript_complete_example: "import { config } from \"dotenv\";\nimport { createWalletClient,\ \ http } from \"viem\";\nimport { privateKeyToAccount } from \"viem/accounts\"\ ;\nimport { wrapFetchWithPayment } from \"x402-fetch\";\nimport { baseSepolia\ \ } from \"viem/chains\";\n\nconfig();\n\nconst { PRIVATE_KEY, API_URL } = process.env;\n\ \nconst account = privateKeyToAccount(PRIVATE_KEY as `0x${string}`);\nconst\ \ client = createWalletClient({\n account,\n transport: http(),\n chain:\ \ baseSepolia,\n});\n\nconst fetchWithPay = wrapFetchWithPayment(fetch, client);\n\ \n// Example: Get last sold data\nfetchWithPay(`${API_URL}/x402/last_sold?ticker=TSLA`,\ \ {\n method: \"GET\",\n})\n .then(async response => {\n if (response.ok)\ \ {\n const data = await response.json();\n console.log('Tesla last\ \ sold data:', data);\n }\n })\n .catch(error => console.error('Error:',\ \ error));\n\n// Example: Search for stocks\nfetchWithPay(`${API_URL}/x402/search?query=Apple`,\ \ {\n method: \"GET\",\n})\n .then(async response => {\n if (response.ok)\ \ {\n const results = await response.json();\n console.log('Search\ \ results:', results);\n }\n })\n .catch(error => console.error('Error:',\ \ error));\n\n// Example: Get historical price data\nconst startDate = Math.floor(Date.now()\ \ / 1000) - (30 * 24 * 60 * 60); // 30 days ago\nconst endDate = Math.floor(Date.now()\ \ / 1000); // now\n\nfetchWithPay(`${API_URL}/x402/price?ticker=AAPL&start_date=${startDate}&end_date=${endDate}&interval=1d`,\ \ {\n method: \"GET\",\n})\n .then(async response => {\n if (response.ok)\ \ {\n const priceData = await response.json();\n console.log('AAPL\ \ price data:', priceData);\n }\n })\n .catch(error => console.error('Error:',\ \ error));" python_x402_requests: "from eth_account import Account\nfrom x402.clients.requests\ \ import x402_requests\n\n# Initialize account with your private key\nprivate_key\ \ = \"YOUR_PRIVATE_KEY_HERE\" # Replace with your actual private key\naccount\ \ = Account.from_key(private_key)\nprint(f\"Initialized account: {account.address}\"\ )\n\n# Create x402 session\nsession = x402_requests(account)\n\n# Example: Get\ \ last sold data for Tesla\nresponse = session.get('https://api.prixe.io/x402/last_sold?ticker=TSLA')\n\ if response.status_code == 200:\n data = response.json()\n print('Tesla\ \ last sold data:', data)\n # Output: {'askPrice': '$339.97', 'bidPrice':\ \ '$339.76', ...}\nelse:\n print(f'Error: {response.status_code} - {response.text}')\n\ \n# Example: Search for stocks\nresponse = session.get('https://api.prixe.io/x402/search?query=Apple')\n\ if response.status_code == 200:\n search_results = response.json()\n print('Search\ \ results:', search_results)\n # Output: [{'stockName': 'Apple Inc.', 'ticker':\ \ 'AAPL', 'cusip': '037833100'}]\nelse:\n print(f'Error: {response.status_code}\ \ - {response.text}')\n\n# Example: Get historical price data (last 30 days)\n\ import time\nstart_date = int(time.time()) - (30 * 24 * 60 * 60) # 30 days\ \ ago\nend_date = int(time.time()) # now\n\nresponse = session.get(f'https://api.prixe.io/x402/price?ticker=AAPL&start_date={start_date}&end_date={end_date}&interval=1d')\n\ if response.status_code == 200:\n price_data = response.json()\n print('AAPL\ \ historical price data received')\n # Contains OHLCV data in Yahoo Finance\ \ chart format\nelse:\n print(f'Error: {response.status_code} - {response.text}')" typescript_setup: "import { config } from \"dotenv\";\nimport { createWalletClient,\ \ http } from \"viem\";\nimport { privateKeyToAccount } from \"viem/accounts\"\ ;\nimport { wrapFetchWithPayment } from \"x402-fetch\";\nimport { baseSepolia\ \ } from \"viem/chains\";\n\n// Load environment variables\nconfig();\n\nconst\ \ { PRIVATE_KEY } = process.env;\n\n// Create wallet client\nconst account =\ \ privateKeyToAccount(PRIVATE_KEY as `0x${string}`);\nconst client = createWalletClient({\n\ \ account,\n transport: http(),\n chain: baseSepolia,\n});\n\n// Wrap fetch\ \ with payment handling\nconst fetchWithPay = wrapFetchWithPayment(fetch, client);" typescript_usage: "// Make a paid request to get stock last sold data\nconst lastSoldResponse\ \ = await fetchWithPay(\n 'https://api.prixe.io/x402/last_sold?ticker=AAPL',\n\ \ { method: 'GET' }\n);\n\nif (lastSoldResponse.ok) {\n const data = await\ \ lastSoldResponse.json();\n console.log('Stock data:', data);\n // Output:\ \ { askPrice: '$182.50', bidPrice: '$182.45', ... }\n}\n\n// Search for stocks\n\ const searchResponse = await fetchWithPay(\n 'https://api.prixe.io/x402/search?query=Tesla',\n\ \ { method: 'GET' }\n);\n\nif (searchResponse.ok) {\n const searchResults\ \ = await searchResponse.json();\n console.log('Search results:', searchResults);\n\ \ // Output: [{ stockName: 'Tesla, Inc.', ticker: 'TSLA', cusip: '88160R101'\ \ }]\n}\n\n// Get historical price data\nconst priceResponse = await fetchWithPay(\n\ \ 'https://api.prixe.io/x402/price?ticker=MSFT&start_date=1735828200&end_date=1745328600&interval=1d',\n\ \ { method: 'GET' }\n);\n\nif (priceResponse.ok) {\n const priceData = await\ \ priceResponse.json();\n console.log('Price data:', priceData);\n}" description: AI agents can use the x402 payment protocol to pay for API access without requiring traditional API keys. This enables autonomous systems to make paid API calls using cryptocurrency payments on the Base Sepolia network. errors: - description: Initial response requiring payment - handled automatically by x402-fetch message: Payment Required status: 402 - description: Payment verification failed or insufficient payment amount message: Invalid payment status: 400 - description: The requested /x402/ endpoint does not exist message: Endpoint not found status: 404 - description: An error occurred processing the request message: Internal server error status: 500 method: X402_PAYMENT name: X402 Payment Integration for AI Agents overview: Other_Documentation: https://x402.gitbook.io/x402/getting-started/quickstart-for-buyers currency: USDC facilitator_url: https://x402.org/facilitator network: base protocol: x402 Payment Protocol wallet_address: '0x15457430b10c46a28aF91c9b07a447CCB2576f8c' path: /x402/* payment_flow: step_1: AI agent makes request to /x402/ endpoint step_2: Server responds with 402 Payment Required and payment requirements step_3: x402-fetch automatically creates payment transaction on Base Sepolia step_4: Payment header is generated and added to retry request step_5: Server validates payment and returns requested data requirements: - Wallet with USDC on Base Sepolia network - Private key for transaction signing - x402-fetch library or custom x402 implementation - viem library for wallet client creation setup_instructions: step_1: Follow instructions at https://x402.gitbook.io/x402/getting-started/quickstart-for-buyers step_2: Set up a wallet client using viem with your private key step_3: Wrap the native fetch function with x402 payment handling step_4: Make requests to /x402/ endpoints - payments will be handled automatically overview: ai_agent_support: Autonomous payment capability via x402 protocol on Base Mainnet authentication: traditional: Bearer token required in Authorization header for /api/* endpoints x402_payments: Cryptocurrency payments via x402 protocol for /x402/* endpoints - no API key required base_url: https://api.prixe.io description: Real-time and historical stock market data API with support for traditional API key authentication and x402 cryptocurrency payments for AI agents title: Stock Data API version: 1.0.0 websocket: Real-time data streaming available via WebSocket connections privacy_and_data_logging: data_retention: API logs are retained for 90 days for security and debugging purposes. description: Our API logs certain information for security, debugging, and analytics purposes logged_data: - description: We log the IP address of each API request for security and rate limiting purposes. We support proxy headers (X-Forwarded-For, X-Real-IP, CF-Connecting-IP, True-Client-IP) to capture the real client IP when behind proxies or load balancers. type: IP Addresses - description: We log the endpoint accessed, HTTP method, request body, response status code, and response time for each API call. type: Request/Response Details - description: We track which API key was used for each request to enforce rate limits and monitor usage patterns. type: API Key Usage - description: We record the exact time of each API request for audit trails and debugging. type: Timestamps privacy_notice: By using this API, you acknowledge that the above data will be collected and stored as described. rate_limiting: description: Rate limits are enforced both per-user and per-IP address to ensure fair usage ip_limits: daily: Rate limited per subscription plan description: To prevent abuse through multiple accounts, we also enforce IP-based rate limits hourly: Rate limited per subscription plan monthly: Rate limited per subscription plan note: These IP limits apply regardless of how many accounts are using the same IP address user_limits: Each user's rate limits are determined by their subscription plan (Free, Pro, or Enterprise)