# API Documentation ## Frontend Setup ```javascript // Basic Axios setup import axios from 'axios'; const api = axios.create({ baseURL: 'https://api.your-domain.com', timeout: 10000, headers: { 'Content-Type': 'application/json', 'Accept': 'application/json' } }); // Error handling api.interceptors.response.use( response => response.data, error => { const errorMessage = error.response?.data?.detail || 'An error occurred'; console.error('API Error:', errorMessage); return Promise.reject(errorMessage); } ); ``` ## Caching System - All GET endpoints support `use_cache=true` parameter (default) - Cache TTL: 300 seconds (5 minutes) - Cache is automatically invalidated on data changes ## Authentication Currently no authentication is required. If implemented in the future, use JWT Bearer tokens: ```javascript const api = axios.create({ // ...other config headers: { // ...other headers 'Authorization': `Bearer ${token}` } }); ``` ## Error Codes | Code | Description | |------|-------------| | 400 | Bad Request | | 404 | Not Found | | 500 | Internal Server Error | | 503 | Service Unavailable | ## PostgreSQL Endpoints ### FAQ Endpoints #### Get FAQs List ``` GET /postgres/faq ``` Parameters: - `skip`: Number of items to skip (default: 0) - `limit`: Maximum items to return (default: 100) - `active_only`: Return only active items (default: false) - `use_cache`: Use cached data if available (default: true) Response: ```json [ { "question": "How do I book a hotel?", "answer": "You can book a hotel through our app or website.", "is_active": true, "id": 1, "created_at": "2023-01-01T00:00:00", "updated_at": "2023-01-01T00:00:00" } ] ``` Example: ```javascript async function getFAQs() { try { const data = await api.get('/postgres/faq', { params: { active_only: true, limit: 20 } }); return data; } catch (error) { console.error('Error fetching FAQs:', error); throw error; } } ``` #### Create FAQ ``` POST /postgres/faq ``` Request Body: ```json { "question": "How do I book a hotel?", "answer": "You can book a hotel through our app or website.", "is_active": true } ``` Response: Created FAQ object #### Get FAQ Detail ``` GET /postgres/faq/{faq_id} ``` Parameters: - `faq_id`: ID of FAQ (required) - `use_cache`: Use cached data if available (default: true) Response: FAQ object #### Update FAQ ``` PUT /postgres/faq/{faq_id} ``` Parameters: - `faq_id`: ID of FAQ to update (required) Request Body: Partial or complete FAQ object Response: Updated FAQ object #### Delete FAQ ``` DELETE /postgres/faq/{faq_id} ``` Parameters: - `faq_id`: ID of FAQ to delete (required) Response: ```json { "status": "success", "message": "FAQ item 1 deleted" } ``` #### Batch Operations Create multiple FAQs: ``` POST /postgres/faqs/batch ``` Update status of multiple FAQs: ``` PUT /postgres/faqs/batch-update-status ``` Delete multiple FAQs: ``` DELETE /postgres/faqs/batch ``` ### Emergency Contact Endpoints #### Get Emergency Contacts ``` GET /postgres/emergency ``` Parameters: - `skip`: Number of items to skip (default: 0) - `limit`: Maximum items to return (default: 100) - `active_only`: Return only active items (default: false) - `use_cache`: Use cached data if available (default: true) Response: Array of Emergency Contact objects #### Create Emergency Contact ``` POST /postgres/emergency ``` Request Body: ```json { "name": "Fire Department", "phone_number": "114", "description": "Fire rescue services", "address": "Da Nang", "location": "16.0544, 108.2022", "priority": 1, "is_active": true } ``` Response: Created Emergency Contact object #### Get Emergency Contact ``` GET /postgres/emergency/{emergency_id} ``` #### Update Emergency Contact ``` PUT /postgres/emergency/{emergency_id} ``` #### Delete Emergency Contact ``` DELETE /postgres/emergency/{emergency_id} ``` #### Batch Operations Create multiple Emergency Contacts: ``` POST /postgres/emergency/batch ``` Update status of multiple Emergency Contacts: ``` PUT /postgres/emergency/batch-update-status ``` Delete multiple Emergency Contacts: ``` DELETE /postgres/emergency/batch ``` ### Event Endpoints #### Get Events ``` GET /postgres/events ``` Parameters: - `skip`: Number of items to skip (default: 0) - `limit`: Maximum items to return (default: 100) - `active_only`: Return only active items (default: false) - `featured_only`: Return only featured items (default: false) - `use_cache`: Use cached data if available (default: true) Response: Array of Event objects #### Create Event ``` POST /postgres/events ``` Request Body: ```json { "name": "Da Nang Fireworks Festival", "description": "International Fireworks Festival Da Nang 2023", "address": "Dragon Bridge, Da Nang", "location": "16.0610, 108.2277", "date_start": "2023-06-01T19:00:00", "date_end": "2023-06-01T22:00:00", "price": [ {"type": "VIP", "amount": 500000}, {"type": "Standard", "amount": 300000} ], "url": "https://danangfireworks.com", "is_active": true, "featured": true } ``` Response: Created Event object #### Get Event ``` GET /postgres/events/{event_id} ``` #### Update Event ``` PUT /postgres/events/{event_id} ``` #### Delete Event ``` DELETE /postgres/events/{event_id} ``` #### Batch Operations Create multiple Events: ``` POST /postgres/events/batch ``` Update status of multiple Events: ``` PUT /postgres/events/batch-update-status ``` Delete multiple Events: ``` DELETE /postgres/events/batch ``` ### About Pixity Endpoints #### Get About Pixity ``` GET /postgres/about-pixity ``` Response: ```json { "content": "PiXity is your smart, AI-powered local companion...", "id": 1, "created_at": "2023-01-01T00:00:00", "updated_at": "2023-01-01T00:00:00" } ``` #### Update About Pixity ``` PUT /postgres/about-pixity ``` Request Body: ```json { "content": "PiXity is your smart, AI-powered local companion..." } ``` Response: Updated About Pixity object ### Da Nang Bucket List Endpoints #### Get Da Nang Bucket List ``` GET /postgres/danang-bucket-list ``` Response: Bucket List object with JSON content string #### Update Da Nang Bucket List ``` PUT /postgres/danang-bucket-list ``` ### Solana Summit Endpoints #### Get Solana Summit ``` GET /postgres/solana-summit ``` Response: Solana Summit object with JSON content string #### Update Solana Summit ``` PUT /postgres/solana-summit ``` ### Health Check ``` GET /postgres/health ``` Response: ```json { "status": "healthy", "message": "PostgreSQL connection is working", "timestamp": "2023-01-01T00:00:00" } ``` ## MongoDB Endpoints ### Session Endpoints #### Create Session ``` POST /session ``` Request Body: ```json { "user_id": "user123", "query": "How do I book a room?", "timestamp": "2023-01-01T00:00:00", "metadata": { "client_info": "web", "location": "Da Nang" } } ``` Response: Created Session object with session_id #### Update Session with Response ``` PUT /session/{session_id}/response ``` Request Body: ```json { "response": "You can book a room through our app or website.", "response_timestamp": "2023-01-01T00:00:05", "metadata": { "response_time_ms": 234, "model_version": "gpt-4" } } ``` Response: Updated Session object #### Get Session ``` GET /session/{session_id} ``` Response: Session object #### Get User History ``` GET /history ``` Parameters: - `user_id`: User ID (required) - `limit`: Maximum sessions to return (default: 10) - `skip`: Number of sessions to skip (default: 0) Response: ```json { "user_id": "user123", "sessions": [ { "session_id": "60f7a8b9c1d2e3f4a5b6c7d8", "query": "How do I book a room?", "timestamp": "2023-01-01T00:00:00", "response": "You can book a room through our app or website.", "response_timestamp": "2023-01-01T00:00:05" } ], "total_count": 1 } ``` #### Health Check ``` GET /health ``` ## RAG Endpoints ### Create Embedding ``` POST /embedding ``` Request Body: ```json { "text": "Text to embed" } ``` Response: ```json { "embedding": [0.1, 0.2, 0.3, ...], "dimensions": 1536 } ``` ### Process Chat Request ``` POST /chat ``` Request Body: ```json { "query": "Can you tell me about Pixity?", "chat_history": [ {"role": "user", "content": "Hello"}, {"role": "assistant", "content": "Hello! How can I help you?"} ] } ``` Response: ```json { "answer": "Pixity is a platform...", "sources": [ { "document_id": "doc123", "chunk_id": "chunk456", "chunk_text": "Pixity was founded in...", "relevance_score": 0.92 } ] } ``` ### Direct RAG Query ``` POST /rag ``` Request Body: ```json { "query": "Can you tell me about Pixity?", "namespace": "about_pixity", "top_k": 3 } ``` Response: Query results with relevance scores ### Health Check ``` GET /health ``` ## PDF Processing Endpoints ### Upload and Process PDF ``` POST /pdf/upload ``` Form Data: - `file`: PDF file (required) - `namespace`: Vector database namespace (default: "Default") - `index_name`: Vector database index name (default: "testbot768") - `title`: Document title (optional) - `description`: Document description (optional) - `user_id`: User ID for WebSocket updates (optional) Response: Processing results with document_id ### Delete Documents in Namespace ``` DELETE /pdf/namespace ``` Parameters: - `namespace`: Vector database namespace (default: "Default") - `index_name`: Vector database index name (default: "testbot768") - `user_id`: User ID for WebSocket updates (optional) Response: Deletion results ### Get Documents List ``` GET /pdf/documents ``` Parameters: - `namespace`: Vector database namespace (default: "Default") - `index_name`: Vector database index name (default: "testbot768") Response: List of documents in the namespace