# CTRify > CTRify is a hosted AI SEO action platform. Customers can use it from Cursor, ChatGPT and compatible AI agents through MCP, or from their own software through an OAuth REST API. ## Developer interfaces - [CTRify MCP and REST documentation](https://www.ctrify.com/developers): Human-readable canonical setup, authentication, billing, permissions, security, errors and examples. - [CTRify developer documentation in Markdown](https://www.ctrify.com/developers.md): Low-noise machine-readable version of the complete developer guide. - [CTRify OpenAPI 3.0 contract](https://www.ctrify.com/api/ctrify/v1/openapi.json): Live REST route and schema contract. - [OAuth protected-resource metadata](https://www.ctrify.com/.well-known/oauth-protected-resource/mcp): MCP resource, authorization server, supported scopes and CTRify permission profiles. - [OAuth authorization-server metadata](https://www.ctrify.com/.well-known/oauth-authorization-server): Authorization, token, registration and revocation discovery. ## Canonical endpoints - MCP: `https://www.ctrify.com/mcp` - REST base: `https://www.ctrify.com/api/ctrify/v1` Configure the MCP URL in a Streamable HTTP MCP client. Do not open it as a webpage: `GET /mcp` intentionally returns HTTP 405 because the protocol uses JSON-RPC over `POST` and standalone SSE is not enabled. The REST base is a namespace, not a resource. `GET /api/ctrify/v1` intentionally returns HTTP 404. Append a documented path or read `/api/ctrify/v1/openapi.json`. ## Required agent behavior 1. For each new goal, call `ctrify_capabilities_search` with the actual desired outcome in `intent` (10–500 characters), concise function keywords in `query`, and retain the returned `intent_ref`. Keep `intent` unchanged when reformulating the query. 2. Use `ctrify_capability_get` for one exact `operation_id`, passing the same `intent_ref`. 3. Inspect the contract, permissions, cost behavior, side effects and execution mode. 4. Use `ctrify_action_execute` only with contract-valid arguments and the same `intent_ref`. 5. Supply a unique stable `idempotency_key` for every mutation. 6. Never send or infer `customer_id`; CTRify derives the customer from OAuth. 7. Preserve native immediate or asynchronous behavior and never infer that a queued action has finished. 8. If the intent is blocked, fails, is partial, confusing or produces an incorrect result, call `ctrify_feedback_submit` with the original intent and completion state. CTRify retains the bounded intent supplied to catalog search, the operations offered and the linked execution outcome so product gaps can be identified. Obvious accidentally supplied credentials are redacted; normal product intent is retained. Continue passing explicit intent references. Omitted references can be inferred for audit only from recent unambiguous same-customer/token/client searches that offered the selected operation; ambiguous associations are not guessed. Cached get/execute calls accept a separate optional `intent`. REST uses an `intent` query parameter for search/contract lookup and a `CTRify-Intent` execution header. An empty search is a review signal, not a confirmed missing feature. Execution success, async acceptance and agent-reported goal completion are separate evidence. CTRify cannot see unsent conversations or goals. CTRify exposes 513 reviewed operations across 25 product modules. It does not expose arbitrary PHP methods, SQL, cron controls, credentials, filesystem paths or unrestricted object storage. ## Viral Organic Boost - Quote: `ux_signals.viral.campaign.quote` - Create: `ux_signals.viral.campaign.create` - Optional Search Console discovery: `ux_signals.viral.search_console.sites.list`, then `ux_signals.viral.targets.list` - Viral creation accepts manual URLs and does not require site verification or Search Console. At least one URL must be on `site_domain`; additional backlink URLs may be external. - Preserve the native per-URL price, asynchronous preparation, delayed native charge and existing scheduler. ## Local Grid GMB Signals - Discover owned completed run sources: `local_grid.gmb_signals.sources.get` - Quote: `local_grid.gmb_signals.campaign.quote` - Create: `local_grid.gmb_signals.campaign.create` - Monitor aggregate state: `local_grid.gmb_signals.campaign.get` - Never submit or request external pins, coordinates, route instructions, route links or individual assignments. CTRify selects execution locations internally from compatible completed Local Grid evidence. ## Authentication and cost summary Both MCP and REST use authorization code OAuth with PKCE `S256`, public-client registration and rotating refresh tokens. The first approved external connection activates MCP and REST for one CTRify account and charges 100 CTRify credits once. Each customer then has 100 included external-access points per UTC day; one CTRify credit purchases 1,000 reusable points after that allowance. Existing native operation prices remain authoritative. ## Main product documentation - [CTRify home](https://www.ctrify.com/): Product overview and account access. - [CTRify blog and knowledge base](https://www.ctrify.com/blog/): Product guides and SEO documentation.