{"openapi":"3.0.3","info":{"title":"CTRify API","version":"2026-09-30","description":"Customer API for the same allowlisted CTRify operations, ownership checks, native pricing, idempotency and usage metering used by CTRify MCP."},"servers":[{"url":"https://www.ctrify.com/api/ctrify/v1"}],"paths":{"/account":{"get":{"summary":"Get account snapshot","security":[{"ctrifyOAuth":[]},{"bearerToken":[]}],"responses":{"200":{"description":"Successful CTRify API response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Success"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/CreditsRequired"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/InvalidRequest"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/usage":{"get":{"summary":"Get external automation usage","security":[{"ctrifyOAuth":[]},{"bearerToken":[]}],"responses":{"200":{"description":"Successful CTRify API response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Success"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/CreditsRequired"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/InvalidRequest"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/websites":{"get":{"summary":"List owned websites","security":[{"ctrifyOAuth":[]},{"bearerToken":[]}],"parameters":[{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":50}},{"name":"before_site_id","in":"query","schema":{"type":"string","minLength":5,"maxLength":9,"pattern":"^[A-Za-z0-9]{5,9}$"}}],"responses":{"200":{"description":"Successful CTRify API response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Success"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/CreditsRequired"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/InvalidRequest"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/websites/{site_id}":{"get":{"summary":"Get one owned website","security":[{"ctrifyOAuth":[]},{"bearerToken":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","minLength":5,"maxLength":9,"pattern":"^[A-Za-z0-9]{5,9}$"}}],"responses":{"200":{"description":"Successful CTRify API response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Success"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/CreditsRequired"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/InvalidRequest"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/seo/audits":{"post":{"summary":"Run a read-only SEO opportunity audit","security":[{"ctrifyOAuth":[]},{"bearerToken":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"responses":{"200":{"description":"Successful CTRify API response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Success"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/CreditsRequired"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/InvalidRequest"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/feedback":{"post":{"summary":"Report an intent outcome or external-access problem","description":"Record what the authenticated customer intended to accomplish and whether it was completed. Normal feedback submission is not charged external-access points and is rate limited against abuse.","security":[{"ctrifyOAuth":[]},{"bearerToken":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FeedbackRequest"}}}},"responses":{"200":{"description":"Successful CTRify API response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Success"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/CreditsRequired"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/InvalidRequest"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/capabilities":{"get":{"summary":"Search the bounded operation catalog","security":[{"ctrifyOAuth":[]},{"bearerToken":[]}],"parameters":[{"name":"query","in":"query","schema":{"type":"string","minLength":3,"maxLength":160}},{"name":"intent","in":"query","description":"Actual user goal. Preserve this text when reformulating query.","schema":{"type":"string","minLength":10,"maxLength":500}},{"name":"module","in":"query","schema":{"type":"string","maxLength":64}},{"name":"kind","in":"query","schema":{"type":"string","enum":["read","write","job","destructive"]}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":20}}],"responses":{"200":{"description":"Successful CTRify API response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Success"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/CreditsRequired"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/InvalidRequest"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/capabilities/{operation_id}":{"get":{"summary":"Get one exact operation contract","security":[{"ctrifyOAuth":[]},{"bearerToken":[]}],"parameters":[{"name":"operation_id","in":"path","required":true,"schema":{"type":"string","maxLength":128}},{"name":"intent","in":"query","required":false,"schema":{"type":"string","minLength":10,"maxLength":500}},{"name":"intent_ref","in":"query","required":false,"schema":{"type":"string","minLength":16,"maxLength":64,"pattern":"^[0-9a-f]+$"}}],"responses":{"200":{"description":"Successful CTRify API response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Success"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/CreditsRequired"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/InvalidRequest"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/operations/{operation_id}":{"post":{"summary":"Execute one allowlisted CTRify operation","description":"Send the operation arguments as the JSON body. Mutations require an Idempotency-Key header.","security":[{"ctrifyOAuth":[]},{"bearerToken":[]}],"parameters":[{"name":"operation_id","in":"path","required":true,"schema":{"type":"string","maxLength":128}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","minLength":8,"maxLength":200}},{"name":"CTRify-Intent","in":"header","description":"Optional actual user goal for a cached operation; not a native operation argument.","required":false,"schema":{"type":"string","minLength":10,"maxLength":500}},{"name":"CTRify-Intent-Ref","in":"header","required":false,"schema":{"type":"string","minLength":16,"maxLength":64,"pattern":"^[0-9a-f]+$"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"responses":{"200":{"description":"Successful CTRify API response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Success"}}}},"409":{"$ref":"#/components/responses/Conflict"},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/CreditsRequired"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/InvalidRequest"},"429":{"$ref":"#/components/responses/RateLimited"}}}}},"components":{"securitySchemes":{"ctrifyOAuth":{"type":"oauth2","flows":{"authorizationCode":{"authorizationUrl":"https://www.ctrify.com/oauth/authorize","tokenUrl":"https://www.ctrify.com/oauth/token","scopes":{"account:read":"Read account state","websites:read":"Read websites","seo:audit":"Run read-only audits","assets:read":"Read product assets","assets:write":"Change product assets","seo:analyze":"Run SEO analysis","seo:execute":"Run SEO actions","connections:manage":"Manage connections","billing:read":"Read billing state","billing:manage":"Manage supported billing operations","domains:manage":"Manage domains","outreach:send":"Send outreach","destructive:execute":"Run explicit destructive operations"}}}},"bearerToken":{"type":"http","scheme":"bearer"}},"schemas":{"Success":{"type":"object","properties":{"data":{"type":"object","additionalProperties":true},"meta":{"type":"object","additionalProperties":true}},"required":["data","meta"]},"FeedbackRequest":{"type":"object","additionalProperties":false,"properties":{"category":{"type":"string","enum":["missing_capability","bug","confusing_contract","incorrect_result","documentation"]},"completion_state":{"type":"string","enum":["not_attempted","blocked","failed","partial","completed"]},"intent":{"type":"string","minLength":10,"maxLength":500},"details":{"type":"string","maxLength":1000},"attempted_operation_id":{"type":"string","maxLength":128},"intent_ref":{"type":"string","minLength":16,"maxLength":64,"pattern":"^[0-9a-f]+$"}},"required":["category","completion_state","intent"]},"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"]},"request_id":{"type":"string"}},"required":["error","request_id"]}},"responses":{"Unauthorized":{"description":"Authentication is required.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"CreditsRequired":{"description":"Additional CTRify credits are required.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"Forbidden":{"description":"The token does not permit this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"InvalidRequest":{"description":"The request or operation arguments are invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"RateLimited":{"description":"The request rate limit was reached.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"Conflict":{"description":"The idempotency key conflicts with an earlier request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}