Spaces:
Configuration error
Configuration error
| # Castor Price Forecasting API | |
| A REST API for accessing ARIMA and LSTM forecasting models for Castor oil prices. | |
| ## Getting Started | |
| ### 1. Generate an API Key | |
| ```bash | |
| curl -X POST http://localhost:5000/api/keys/generate \ | |
| -H "Content-Type: application/json" \ | |
| -d '{"name": "my-app"}' | |
| ``` | |
| **Response:** | |
| ```json | |
| { | |
| "status": "success", | |
| "api_key": "castor_api_a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6", | |
| "message": "API key generated: castor_api_a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6" | |
| } | |
| ``` | |
| ### 2. Use Your API Key | |
| Include the API key in the `X-API-Key` header for all requests: | |
| ```bash | |
| curl -X POST http://localhost:5000/api/forecast/arima \ | |
| -H "X-API-Key: castor_api_a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6" \ | |
| -H "Content-Type: application/json" \ | |
| -d '{ | |
| "product": "Castor", | |
| "start_date": "2025-12-01", | |
| "end_date": "2026-12-31" | |
| }' | |
| ``` | |
| ## API Endpoints | |
| ### Health Check | |
| ``` | |
| GET /api/health | |
| ``` | |
| Check if the API is running. | |
| ### Key Management | |
| #### Generate API Key | |
| ``` | |
| POST /api/keys/generate | |
| Body: {"name": "my-app"} | |
| ``` | |
| #### List All Keys | |
| ``` | |
| GET /api/keys/list | |
| ``` | |
| #### Revoke API Key | |
| ``` | |
| POST /api/keys/revoke | |
| Body: {"api_key": "castor_api_..."} | |
| ``` | |
| ### Forecasting | |
| #### ARIMA Forecast | |
| ``` | |
| POST /api/forecast/arima | |
| Headers: X-API-Key: YOUR_KEY | |
| Body: { | |
| "product": "Castor", | |
| "start_date": "2025-12-01", | |
| "end_date": "2026-12-31" | |
| } | |
| ``` | |
| #### LSTM Forecast | |
| ``` | |
| POST /api/forecast/lstm | |
| Headers: X-API-Key: YOUR_KEY | |
| Body: { | |
| "product": "Castor", | |
| "start_date": "2025-12-01", | |
| "end_date": "2026-12-31" | |
| } | |
| ``` | |
| #### Compare Models | |
| ``` | |
| POST /api/forecast/compare | |
| Headers: X-API-Key: YOUR_KEY | |
| Body: { | |
| "product": "Castor", | |
| "start_date": "2025-12-01", | |
| "end_date": "2026-12-31" | |
| } | |
| ``` | |
| ## Example Usage (Python) | |
| ```python | |
| import requests | |
| # Generate API Key | |
| response = requests.post('http://localhost:5000/api/keys/generate', | |
| json={'name': 'my-app'}) | |
| api_key = response.json()['api_key'] | |
| # Get forecast | |
| headers = {'X-API-Key': api_key} | |
| payload = { | |
| 'product': 'Castor', | |
| 'start_date': '2025-12-01', | |
| 'end_date': '2026-12-31' | |
| } | |
| forecast = requests.post('http://localhost:5000/api/forecast/arima', | |
| json=payload, headers=headers) | |
| print(forecast.json()) | |
| ``` | |
| ## Running the API Server | |
| ```bash | |
| # Using the virtual environment | |
| D:\models\arima\venv_short\Scripts\python.exe api_server.py | |
| ``` | |
| The server will start at `http://localhost:5000` | |
| ## API Response Format | |
| ### Success Response | |
| ```json | |
| { | |
| "status": "success", | |
| "product": "Castor", | |
| "model": "ARIMA", | |
| "forecast": { | |
| "2025-12-01": 3500.5, | |
| "2025-12-02": 3502.3, | |
| ... | |
| }, | |
| "start_date": "2025-12-01", | |
| "end_date": "2026-12-31" | |
| } | |
| ``` | |
| ### Error Response | |
| ```json | |
| { | |
| "status": "error", | |
| "message": "Invalid or missing API key" | |
| } | |
| ``` | |
| ## API Key Security | |
| - Each API key is tracked with: | |
| - Creation timestamp | |
| - Last used timestamp | |
| - Request count | |
| - Custom name/identifier | |
| - Keys are stored in `api_keys.json` | |
| - In production, use a proper database with encryption | |
| - Revoke keys when no longer needed | |
| ## Features | |
| β API Key-based authentication | |
| β ARIMA forecasting | |
| β LSTM forecasting | |
| β Model comparison | |
| β Request tracking | |
| β Multiple products support | |
| β Flexible date ranges | |
| β Cross-Origin Resource Sharing (CORS) | |
| ## Troubleshooting | |
| **"Invalid or missing API key"**: Ensure you're including the correct API key in the `X-API-Key` header. | |
| **"Product not found"**: Check that the product name matches the data in your CSV file. | |
| **Server not responding**: Make sure the Flask server is running: `python api_server.py` | |