{"openapi":"3.0.0","info":{"title":"Fatin Tsani Portfolio Public API","description":"Comprehensive, rate-limited public RESTful API for Fatin Muflihuts Tsani portfolio, projects, skills, certificates, and system stats.","version":"1.0.0","contact":{"name":"Fatin Muflihuts Tsani","url":"https:\/\/fatintsani.my.id","email":"muflihtsani9@gmail.com"},"license":{"name":"MIT License","url":"https:\/\/opensource.org\/licenses\/MIT"}},"servers":[{"url":"https:\/\/fatintsani.my.id\/api\/v1","description":"Production API Server"}],"paths":{"\/health":{"get":{"tags":["System"],"summary":"Health & Server Telemetry","description":"Returns operational server health, database connectivity, and environment versions.","responses":{"200":{"description":"Server is healthy"}}}},"\/profile":{"get":{"tags":["Core"],"summary":"Developer Profile & Services","description":"Fetch developer biography, avatar, contact links, and available professional services.","responses":{"200":{"description":"Profile retrieved successfully"}}}},"\/skills":{"get":{"tags":["Core"],"summary":"Technical Skills & Proficiency","description":"Returns active technical skill stack and proficiency metrics.","responses":{"200":{"description":"Skills retrieved successfully"}}}},"\/stats":{"get":{"tags":["Core"],"summary":"Aggregated Portfolio Stats","description":"Returns counts of portfolios, offers, reviews, certifications, and visitor stats.","responses":{"200":{"description":"Stats retrieved successfully"}}}},"\/portfolios":{"get":{"tags":["Projects"],"summary":"List Portfolios","description":"Retrieve published projects with pagination and category\/keyword filtering.","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":10}},{"name":"search","in":"query","required":false,"schema":{"type":"string"}},{"name":"category","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Portfolios retrieved successfully"}}}},"\/offers":{"get":{"tags":["Services"],"summary":"List Project Offers & Packages","description":"Retrieve active project packages, pricing tiers, deliverables, and addons.","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":10}},{"name":"search","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Offers retrieved successfully"}}}},"\/blogs":{"get":{"tags":["Content"],"summary":"List Blog Articles","description":"Retrieve published technical blogs and tutorials.","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":10}},{"name":"search","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Blog articles retrieved successfully"}}}},"\/certificates":{"get":{"tags":["Credentials"],"summary":"List Verified Certificates","description":"Retrieve published verified certificates from Huawei, Dicoding, and other institutions.","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":12}},{"name":"search","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Certificates retrieved successfully"}}}},"\/changelogs":{"get":{"tags":["System"],"summary":"System Changelogs","description":"Retrieve release notes and platform update history.","responses":{"200":{"description":"Changelogs retrieved successfully"}}}},"\/{type}\/{slug}":{"get":{"tags":["Resources"],"summary":"Get Single Resource Detail","description":"Fetch complete detail for a specific resource by type and slug\/ID.","parameters":[{"name":"type","in":"path","required":true,"schema":{"type":"string","enum":["portfolio","offer","blog","certificate"]}},{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Resource detail retrieved successfully"},"404":{"description":"Resource not found"}}}},"\/search":{"post":{"tags":["Discovery"],"summary":"Multi-Resource Global Search","description":"Query across portfolios, offers, blogs, and certificates simultaneously.","requestBody":{"required":true,"content":{"application\/json":{"schema":{"type":"object","properties":{"q":{"type":"string","example":"laravel"}}}}}},"responses":{"200":{"description":"Search results retrieved"}}}}}}