{"openapi":"3.1.0","info":{"title":"Reflyma API","version":"1.0.0","description":"Enterprise REST API for Reflyma's website SEO and AI visibility analysis. Authenticate with `Authorization: Bearer <api key>` or the `X-Reflyma-Key` header. All responses are scoped to the organization that owns the key."},"servers":[{"url":"https://reflyma.com"}],"tags":[{"name":"Projects"},{"name":"Crawling"},{"name":"Analysis"},{"name":"Visibility"},{"name":"Monitoring"},{"name":"Account"}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"http","scheme":"bearer","description":"Reflyma API key (rfk_live_…)."}}},"security":[{"ApiKeyAuth":[]}],"paths":{"/api/public/v1/projects":{"get":{"summary":"List projects visible to the key's organization.","description":"Soft-deleted projects are excluded.","tags":["Projects"],"security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"limit","in":"query","required":false,"description":"Max rows, 1–200 (default 50).","schema":{"type":"integer"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"description":"Result payload."},"meta":{"type":"object","properties":{"request_id":{"type":"string"},"api_version":{"type":"string"}}}}}}}},"401":{"description":"Missing or invalid API key"},"403":{"description":"Key lacks the required scope, IP or domain not allowed"},"404":{"description":"Resource not found in this organization"},"429":{"description":"Rate limit exceeded"}}}},"/api/public/v1/projects/{projectId}":{"get":{"summary":"Get a single project.","tags":["Projects"],"security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"projectId","in":"path","required":true,"description":"Project UUID.","schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"description":"Result payload."},"meta":{"type":"object","properties":{"request_id":{"type":"string"},"api_version":{"type":"string"}}}}}}}},"401":{"description":"Missing or invalid API key"},"403":{"description":"Key lacks the required scope, IP or domain not allowed"},"404":{"description":"Resource not found in this organization"},"429":{"description":"Rate limit exceeded"}}}},"/api/public/v1/projects/{projectId}/crawls":{"get":{"summary":"List crawl snapshots.","tags":["Crawling"],"security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"projectId","in":"path","required":true,"description":"Project UUID.","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Max rows, 1–200 (default 50).","schema":{"type":"integer"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"description":"Result payload."},"meta":{"type":"object","properties":{"request_id":{"type":"string"},"api_version":{"type":"string"}}}}}}}},"401":{"description":"Missing or invalid API key"},"403":{"description":"Key lacks the required scope, IP or domain not allowed"},"404":{"description":"Resource not found in this organization"},"429":{"description":"Rate limit exceeded"}}},"post":{"summary":"Queue a new crawl snapshot.","description":"The crawl starts on the next worker tick. No request body is required — the project's website URL is used as the start URL.","tags":["Crawling"],"security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"projectId","in":"path","required":true,"description":"Project UUID.","schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"description":"Result payload."},"meta":{"type":"object","properties":{"request_id":{"type":"string"},"api_version":{"type":"string"}}}}}}}},"401":{"description":"Missing or invalid API key"},"403":{"description":"Key lacks the required scope, IP or domain not allowed"},"404":{"description":"Resource not found in this organization"},"429":{"description":"Rate limit exceeded"}}}},"/api/public/v1/projects/{projectId}/seo-audits":{"get":{"summary":"List technical SEO audits.","tags":["Analysis"],"security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"projectId","in":"path","required":true,"description":"Project UUID.","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Max rows, 1–200 (default 50).","schema":{"type":"integer"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"description":"Result payload."},"meta":{"type":"object","properties":{"request_id":{"type":"string"},"api_version":{"type":"string"}}}}}}}},"401":{"description":"Missing or invalid API key"},"403":{"description":"Key lacks the required scope, IP or domain not allowed"},"404":{"description":"Resource not found in this organization"},"429":{"description":"Rate limit exceeded"}}}},"/api/public/v1/projects/{projectId}/performance":{"get":{"summary":"List performance audits and scores.","tags":["Analysis"],"security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"projectId","in":"path","required":true,"description":"Project UUID.","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Max rows, 1–200 (default 50).","schema":{"type":"integer"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"description":"Result payload."},"meta":{"type":"object","properties":{"request_id":{"type":"string"},"api_version":{"type":"string"}}}}}}}},"401":{"description":"Missing or invalid API key"},"403":{"description":"Key lacks the required scope, IP or domain not allowed"},"404":{"description":"Resource not found in this organization"},"429":{"description":"Rate limit exceeded"}}}},"/api/public/v1/projects/{projectId}/ai-seo":{"get":{"summary":"List AI readiness analyses.","tags":["Analysis"],"security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"projectId","in":"path","required":true,"description":"Project UUID.","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Max rows, 1–200 (default 50).","schema":{"type":"integer"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"description":"Result payload."},"meta":{"type":"object","properties":{"request_id":{"type":"string"},"api_version":{"type":"string"}}}}}}}},"401":{"description":"Missing or invalid API key"},"403":{"description":"Key lacks the required scope, IP or domain not allowed"},"404":{"description":"Resource not found in this organization"},"429":{"description":"Rate limit exceeded"}}}},"/api/public/v1/projects/{projectId}/content":{"get":{"summary":"List content intelligence runs.","tags":["Analysis"],"security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"projectId","in":"path","required":true,"description":"Project UUID.","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Max rows, 1–200 (default 50).","schema":{"type":"integer"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"description":"Result payload."},"meta":{"type":"object","properties":{"request_id":{"type":"string"},"api_version":{"type":"string"}}}}}}}},"401":{"description":"Missing or invalid API key"},"403":{"description":"Key lacks the required scope, IP or domain not allowed"},"404":{"description":"Resource not found in this organization"},"429":{"description":"Rate limit exceeded"}}}},"/api/public/v1/projects/{projectId}/competitors":{"get":{"summary":"List competitor scores.","tags":["Analysis"],"security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"projectId","in":"path","required":true,"description":"Project UUID.","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Max rows, 1–200 (default 50).","schema":{"type":"integer"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"description":"Result payload."},"meta":{"type":"object","properties":{"request_id":{"type":"string"},"api_version":{"type":"string"}}}}}}}},"401":{"description":"Missing or invalid API key"},"403":{"description":"Key lacks the required scope, IP or domain not allowed"},"404":{"description":"Resource not found in this organization"},"429":{"description":"Rate limit exceeded"}}}},"/api/public/v1/projects/{projectId}/reports":{"get":{"summary":"List report runs.","tags":["Visibility"],"security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"projectId","in":"path","required":true,"description":"Project UUID.","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Max rows, 1–200 (default 50).","schema":{"type":"integer"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"description":"Result payload."},"meta":{"type":"object","properties":{"request_id":{"type":"string"},"api_version":{"type":"string"}}}}}}}},"401":{"description":"Missing or invalid API key"},"403":{"description":"Key lacks the required scope, IP or domain not allowed"},"404":{"description":"Resource not found in this organization"},"429":{"description":"Rate limit exceeded"}}}},"/api/public/v1/projects/{projectId}/ai-presence":{"get":{"summary":"Latest AI presence metrics.","tags":["Visibility"],"security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"projectId","in":"path","required":true,"description":"Project UUID.","schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"description":"Result payload."},"meta":{"type":"object","properties":{"request_id":{"type":"string"},"api_version":{"type":"string"}}}}}}}},"401":{"description":"Missing or invalid API key"},"403":{"description":"Key lacks the required scope, IP or domain not allowed"},"404":{"description":"Resource not found in this organization"},"429":{"description":"Rate limit exceeded"}}}},"/api/public/v1/projects/{projectId}/alerts":{"get":{"summary":"List alert events.","tags":["Monitoring"],"security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"projectId","in":"path","required":true,"description":"Project UUID.","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Max rows, 1–200 (default 50).","schema":{"type":"integer"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"description":"Result payload."},"meta":{"type":"object","properties":{"request_id":{"type":"string"},"api_version":{"type":"string"}}}}}}}},"401":{"description":"Missing or invalid API key"},"403":{"description":"Key lacks the required scope, IP or domain not allowed"},"404":{"description":"Resource not found in this organization"},"429":{"description":"Rate limit exceeded"}}}},"/api/public/v1/projects/{projectId}/monitoring":{"get":{"summary":"List detected change events.","tags":["Monitoring"],"security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"projectId","in":"path","required":true,"description":"Project UUID.","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Max rows, 1–200 (default 50).","schema":{"type":"integer"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"description":"Result payload."},"meta":{"type":"object","properties":{"request_id":{"type":"string"},"api_version":{"type":"string"}}}}}}}},"401":{"description":"Missing or invalid API key"},"403":{"description":"Key lacks the required scope, IP or domain not allowed"},"404":{"description":"Resource not found in this organization"},"429":{"description":"Rate limit exceeded"}}}},"/api/public/v1/projects/{projectId}/recommendations":{"get":{"summary":"List SEO fix recommendations.","tags":["Monitoring"],"security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"projectId","in":"path","required":true,"description":"Project UUID.","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Max rows, 1–200 (default 50).","schema":{"type":"integer"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"description":"Result payload."},"meta":{"type":"object","properties":{"request_id":{"type":"string"},"api_version":{"type":"string"}}}}}}}},"401":{"description":"Missing or invalid API key"},"403":{"description":"Key lacks the required scope, IP or domain not allowed"},"404":{"description":"Resource not found in this organization"},"429":{"description":"Rate limit exceeded"}}}},"/api/public/v1/search":{"get":{"summary":"Search across projects, automations and API keys.","tags":["Account"],"security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"q","in":"query","required":true,"description":"Search term.","schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"description":"Result payload."},"meta":{"type":"object","properties":{"request_id":{"type":"string"},"api_version":{"type":"string"}}}}}}}},"401":{"description":"Missing or invalid API key"},"403":{"description":"Key lacks the required scope, IP or domain not allowed"},"404":{"description":"Resource not found in this organization"},"429":{"description":"Rate limit exceeded"}}}},"/api/public/v1/exports":{"get":{"summary":"List generated report exports.","tags":["Account"],"security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"limit","in":"query","required":false,"description":"Max rows, 1–200 (default 50).","schema":{"type":"integer"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"description":"Result payload."},"meta":{"type":"object","properties":{"request_id":{"type":"string"},"api_version":{"type":"string"}}}}}}}},"401":{"description":"Missing or invalid API key"},"403":{"description":"Key lacks the required scope, IP or domain not allowed"},"404":{"description":"Resource not found in this organization"},"429":{"description":"Rate limit exceeded"}}}},"/api/public/v1/usage":{"get":{"summary":"Current billing-period usage for the organization.","tags":["Account"],"security":[{"ApiKeyAuth":[]}],"parameters":[],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"description":"Result payload."},"meta":{"type":"object","properties":{"request_id":{"type":"string"},"api_version":{"type":"string"}}}}}}}},"401":{"description":"Missing or invalid API key"},"403":{"description":"Key lacks the required scope, IP or domain not allowed"},"404":{"description":"Resource not found in this organization"},"429":{"description":"Rate limit exceeded"}}}},"/api/public/v1/openapi.json":{"get":{"summary":"This OpenAPI 3.1 document.","description":"Public — no API key required.","tags":["Account"],"security":[{"ApiKeyAuth":[]}],"parameters":[],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"description":"Result payload."},"meta":{"type":"object","properties":{"request_id":{"type":"string"},"api_version":{"type":"string"}}}}}}}},"401":{"description":"Missing or invalid API key"},"403":{"description":"Key lacks the required scope, IP or domain not allowed"},"404":{"description":"Resource not found in this organization"},"429":{"description":"Rate limit exceeded"}}}}}}