{"openapi":"3.0.3","info":{"title":"Dripling REST API Engine","description":"Official API Documentation for Dripling Web Platform. High-performance RESTful API powering agency portfolio, services, blogs, translations, and real-time tracking.","version":"1.0.0","contact":{"name":"Dripling Tech Support","url":"https:\/\/api.hellodripling.com","email":"code@hellodripling.com"}},"servers":[{"url":"https:\/\/api.hellodripling.com","description":"Production API Server"},{"url":"http:\/\/localhost:8000","description":"Local Development Server"}],"tags":[{"name":"System & Health","description":"API Status and Server Health Checks"},{"name":"Public Data","description":"Publicly accessible endpoints for content & site data"},{"name":"i18n & Locales","description":"Multilingual translations and active locale management"},{"name":"Analytics & Tracking","description":"Visitor and social link click telemetry"},{"name":"Admin Auth & User","description":"Administrator authentication & session profile"},{"name":"Admin Content Management","description":"Protected CRUD operations for projects, services, blogs & partners"},{"name":"Admin System Settings","description":"Translation keys management and global site config"}],"paths":{"\/":{"get":{"tags":["System & Health"],"summary":"API Root & Discovery","description":"Returns interactive OpenAPI documentation (HTML) or API metadata (JSON).","responses":{"200":{"description":"Successful operation"}}}},"\/v1\/health":{"get":{"tags":["System & Health"],"summary":"Server Health Check","description":"Returns server status, current timestamp, and API version.","responses":{"200":{"description":"Server is healthy","content":{"application\/json":{"example":{"status":"ok","app":"Dripling","timestamp":"2026-08-06T13:15:00.000000Z","version":"v1"}}}}}}},"\/v1\/locales":{"get":{"tags":["i18n & Locales"],"summary":"List Active Locales","description":"Retrieves all configured languages (e.g. TR, EN) with default flags.","responses":{"200":{"description":"List of active locales"}}}},"\/v1\/i18n\/public":{"get":{"tags":["i18n & Locales"],"summary":"Get Public Translation Dictionary","description":"Returns key-value pairs of translated UI strings for the given locale.","parameters":[{"name":"locale","in":"query","description":"Locale code (e.g., tr, en)","required":false,"schema":{"type":"string","default":"tr"}}],"responses":{"200":{"description":"Dictionary of UI strings"}}}},"\/v1\/projects":{"get":{"tags":["Public Data"],"summary":"List Projects","description":"Fetch published agency projects with translations and category associations.","parameters":[{"name":"category_id","in":"query","description":"Filter by Portfolio Category ID","required":false,"schema":{"type":"integer"}},{"name":"locale","in":"query","description":"Language locale","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"List of projects"}}}},"\/v1\/projects\/{project}":{"get":{"tags":["Public Data"],"summary":"Get Single Project","description":"Retrieve details of a single project by ID or slug.","parameters":[{"name":"project","in":"path","required":true,"description":"Project ID or Slug","schema":{"type":"string"}}],"responses":{"200":{"description":"Project details"},"404":{"description":"Project not found"}}}},"\/v1\/services":{"get":{"tags":["Public Data"],"summary":"List Services","description":"Fetch all offered agency services.","responses":{"200":{"description":"List of services"}}}},"\/v1\/services\/{service}":{"get":{"tags":["Public Data"],"summary":"Get Single Service","parameters":[{"name":"service","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Service details"}}}},"\/v1\/blogs":{"get":{"tags":["Public Data"],"summary":"List Blog Posts","responses":{"200":{"description":"List of blog articles"}}}},"\/v1\/blogs\/{blog}":{"get":{"tags":["Public Data"],"summary":"Get Blog Article","parameters":[{"name":"blog","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Blog article details"}}}},"\/v1\/partners":{"get":{"tags":["Public Data"],"summary":"List Brand Partners","responses":{"200":{"description":"List of partners\/clients"}}}},"\/v1\/portfolio-categories":{"get":{"tags":["Public Data"],"summary":"List Portfolio Categories","responses":{"200":{"description":"Ordered list of portfolio categories"}}}},"\/v1\/settings":{"get":{"tags":["Public Data"],"summary":"Get Public Site Settings","parameters":[{"name":"locale","in":"query","schema":{"type":"string"}},{"name":"raw","in":"query","schema":{"type":"boolean"}}],"responses":{"200":{"description":"Key-value map of site configuration"}}}},"\/v1\/track\/visit":{"post":{"tags":["Analytics & Tracking"],"summary":"Log Page Visit","requestBody":{"required":true,"content":{"application\/json":{"schema":{"type":"object","properties":{"path":{"type":"string","example":"\/portfolio\/project-x"},"referrer":{"type":"string","example":"https:\/\/google.com"},"screen_resolution":{"type":"string","example":"1920x1080"}}}}}},"responses":{"200":{"description":"Visit logged successfully"}}}},"\/v1\/track\/social":{"post":{"tags":["Analytics & Tracking"],"summary":"Log Social Media Link Click","requestBody":{"required":true,"content":{"application\/json":{"schema":{"type":"object","properties":{"platform":{"type":"string","example":"instagram"},"target_url":{"type":"string","example":"https:\/\/www.instagram.com\/hellodripling"}}}}}},"responses":{"200":{"description":"Social click recorded"}}}},"\/v1\/admin\/login":{"post":{"tags":["Admin Auth & User"],"summary":"Admin Authentication","description":"Verifies administrator email & password and sets admin_session cookie.","requestBody":{"required":true,"content":{"application\/json":{"schema":{"type":"object","required":["email","password"],"properties":{"email":{"type":"string","format":"email","example":"code@hellodripling.com"},"password":{"type":"string","format":"password","example":"password"}}}}}},"responses":{"200":{"description":"Login successful"},"401":{"description":"Invalid credentials"}}}},"\/v1\/admin\/me":{"get":{"tags":["Admin Auth & User"],"summary":"Get Current Admin Profile","security":[{"BearerAuth":[]}],"responses":{"200":{"description":"Admin details"}}},"put":{"tags":["Admin Auth & User"],"summary":"Update Admin Profile","security":[{"BearerAuth":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"email":{"type":"string"},"password":{"type":"string"}}}}}},"responses":{"200":{"description":"Profile updated"}}}},"\/v1\/admin\/dashboard":{"get":{"tags":["Admin Auth & User"],"summary":"Admin Dashboard Metrics","security":[{"BearerAuth":[]}],"responses":{"200":{"description":"Dashboard total counts & visit statistics"}}}},"\/v1\/admin\/projects":{"get":{"tags":["Admin Content Management"],"summary":"Admin: List All Projects","security":[{"BearerAuth":[]}],"responses":{"200":{"description":"All projects"}}},"post":{"tags":["Admin Content Management"],"summary":"Admin: Create Project","security":[{"BearerAuth":[]}],"responses":{"201":{"description":"Project created"}}}},"\/v1\/admin\/services":{"get":{"tags":["Admin Content Management"],"summary":"Admin: List All Services","security":[{"BearerAuth":[]}],"responses":{"200":{"description":"All services"}}},"post":{"tags":["Admin Content Management"],"summary":"Admin: Create Service","security":[{"BearerAuth":[]}],"responses":{"201":{"description":"Service created"}}}},"\/v1\/admin\/blogs":{"get":{"tags":["Admin Content Management"],"summary":"Admin: List All Blogs","security":[{"BearerAuth":[]}],"responses":{"200":{"description":"All blog posts"}}}},"\/v1\/admin\/partners":{"get":{"tags":["Admin Content Management"],"summary":"Admin: List All Partners","security":[{"BearerAuth":[]}],"responses":{"200":{"description":"All partners"}}}},"\/v1\/admin\/upload":{"post":{"tags":["Admin Content Management"],"summary":"Admin: File Upload","description":"Upload image files (jpeg, png, webp, svg, ico, gif up to 10MB).","security":[{"BearerAuth":[]}],"requestBody":{"required":true,"content":{"multipart\/form-data":{"schema":{"type":"object","required":["file"],"properties":{"file":{"type":"string","format":"binary"},"folder":{"type":"string","example":"projects"}}}}}},"responses":{"200":{"description":"File uploaded","content":{"application\/json":{"example":{"url":"https:\/\/api.hellodripling.com\/uploads\/uuid.png","path":"uploads\/uuid.png"}}}}}}},"\/v1\/admin\/translations":{"get":{"tags":["Admin System Settings"],"summary":"Admin: List All Translations Matrix","security":[{"BearerAuth":[]}],"responses":{"200":{"description":"Matrix of translation keys & values per locale"}}}},"\/v1\/admin\/translations\/bulk":{"post":{"tags":["Admin System Settings"],"summary":"Admin: Bulk Upsert Translations","security":[{"BearerAuth":[]}],"responses":{"200":{"description":"Bulk translations saved"}}}},"\/v1\/admin\/settings":{"post":{"tags":["Admin System Settings"],"summary":"Admin: Update Site Settings","security":[{"BearerAuth":[]}],"responses":{"200":{"description":"Site settings updated"}}}}},"components":{"securitySchemes":{"BearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"JWT \/ Token","description":"POST \/v1\/admin\/login ile alinan token: Authorization: Bearer <token>"}}}}