{"openapi":"3.1.0","info":{"title":"Domain Brand Profile API","summary":"Return public brand facts from a domain.","description":"Fetch public homepage metadata for a domain and return a small brand profile: normalized domain, reachability, title, description, OpenGraph fields, icon hints, social links, and a concise brand summary.","contact":{"name":"LinkRidge API Tools","url":"https://domain-brand-profile-api.linkridge.net/","email":"api-support@makersridge.com"},"version":"0.1.0"},"servers":[{"url":"https://domain-brand-profile-api.linkridge.net","description":"Production"},{"url":"https://dev.domain-brand-profile-api.mfsoho.linkridge.net","description":"Development"}],"paths":{"/health":{"get":{"tags":["system"],"summary":"Health check","operationId":"health_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":{"type":"string"},"type":"object","title":"Response Health Health Get"}}}}}}},"/admin/metrics":{"get":{"tags":["admin"],"summary":"Early validation metrics","description":"Returns in-memory aggregate counters when an admin key is configured.","operationId":"metrics_admin_metrics_get","parameters":[{"name":"X-Admin-Key","in":"header","required":false,"schema":{"type":"string","default":"","title":"X-Admin-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Metrics Admin Metrics Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/domain/profile":{"post":{"tags":["domain-profile"],"summary":"Profile public brand facts for a domain","description":"Submit a public domain or URL. The API normalizes the hostname, blocks private network targets, fetches public homepage metadata, and returns practical brand facts for onboarding, listings, and lightweight enrichment.","operationId":"build_domain_profile_v1_domain_profile_post","parameters":[{"name":"X-API-Key","in":"header","required":false,"schema":{"type":"string","default":"","title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainProfileRequest"},"examples":{"domain":{"summary":"Profile a public domain","value":{"domain":"example.com","timeout_seconds":3.0}}}}}},"responses":{"200":{"description":"Domain profile generated.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Build Domain Profile V1 Domain Profile Post"}}}},"400":{"description":"Invalid, unresolvable, or unsafe domain."},"401":{"description":"Missing or invalid API key."},"429":{"description":"Monthly quota exceeded."},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"DomainProfileRequest":{"properties":{"domain":{"type":"string","title":"Domain","description":"Domain or URL to profile. URLs are normalized to their hostname.","examples":["example.com","https://www.example.com/about"]},"timeout_seconds":{"type":"number","maximum":10.0,"minimum":1.0,"title":"Timeout Seconds","description":"Fetch timeout for each homepage attempt.","default":5.0}},"type":"object","required":["domain"],"title":"DomainProfileRequest"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}