API 레퍼런스
Seo
Management API: GET /sites/{id}/seo/search-console, POST /sites/{id}/seo/search-console/verify
Report the Google Search Console connection for a website: whether a Google account is connected, which property and sitemap Kanorio uses, whether ownership is verified and how, when the sitemap was last submitted, and whether a re-verification is pending. Connecting a Google account is a browser OAuth step the owner must do under SEO › Settings; this capability cannot connect. Use it before seo.search_console.verify_and_submit, and to explain the next step to the owner when lastFailureCode is OWNERSHIP_REQUIRED (verify the domain in Search Console), SITEMAP_NOT_REACHABLE (fix the external frontend's /sitemap.xml) or DNS_NOT_PROPAGATED (just wait). Errors: FORBIDDEN (also when the website does not exist).
Parameters
idstring · pathrequiredWebsite id. Get it from sites.list or from sites.create.
Response 200
connectedbooleanrequiredA Google account is connected (refresh token present).
emailstring | nullrequiredConnected Google account email.
propertyUrlstring | nullrequiredSearch Console property that is (or will be) used, e.g. https://www.example.com/. Follows externalStorefrontUrl for HEADLESS sites, otherwise the primary custom domain or the Kanorio subdomain.
sitemapUrlstring | nullrequiredSitemap URL that is (or will be) submitted.
verifiedbooleanrequiredOwnership verified via Kanorio at least once.
ownershipSource"meta" | "existing" | "dns" | nullrequiredHow ownership was verified: "meta" (verification tag on Kanorio-rendered pages, HOSTED), "existing" (the Google account already owned a covering property), "dns" (Kanorio wrote a TXT record to its managed DNS zone). null until verified.
sitemapSubmittedAtstring | nullrequiredISO time of the last successful sitemap submission.
needsReverifybooleanrequiredTrue when the property changed (domain or externalStorefrontUrl) or the last automatic verification failed; call seo.search_console.verify_and_submit.
lastFailureCodestring | nullrequiredClassification of the last failed verification (e.g. OWNERSHIP_REQUIRED, DNS_NOT_PROPAGATED, SITEMAP_NOT_REACHABLE); null when the last attempt succeeded.
observablebooleanrequiredThe site has a public URL to verify (HOSTED: published; HEADLESS: externalStorefrontUrl set). False means verify_and_submit would return NO_PUBLIC_URL.
Errors
FORBIDDEN403 · also when the website does not exist
MCP tool seo_search_console_status
curl -X GET "https://app.kanorio.com/api/v1/sites/{id}/seo/search-console" \
-H "Authorization: Bearer $KANORIO_TOKEN"{
"connected": true,
"email": "owner@sunnybakery.example",
"propertyUrl": "https://www.sunnybakery.example/",
"sitemapUrl": "https://www.sunnybakery.example/sitemap.xml",
"verified": true,
"ownershipSource": "meta",
"sitemapSubmittedAt": "2026-10-01T02:30:00.000Z",
"needsReverify": false,
"lastFailureCode": null,
"observable": true
}Verify and submit
/sites/{id}/seo/search-console/verifyVerify ownership of the website's current property in Google Search Console, add the property, and submit the sitemap. Same flow as the dashboard's Check again button. HOSTED sites verify with a meta tag Kanorio renders. HEADLESS sites with externalStorefrontUrl first check whether the connected Google account already owns a covering property; if not and the domain's DNS is managed by Kanorio, Kanorio writes a TXT record and verifies via DNS; otherwise the owner must verify the domain in Search Console themselves. Requires a connected Google account (owner does this in the dashboard) and a public URL. On failure the site is marked needsReverify and a background job keeps retrying transient causes (META_NOT_LIVE, DNS_NOT_PROPAGATED), but not OWNERSHIP_REQUIRED or SITEMAP_NOT_REACHABLE, which need the owner. Errors: FORBIDDEN, NO_PUBLIC_URL, SEARCH_CONSOLE_NOT_CONNECTED, META_NOT_LIVE (retry in 20-30 s), OWNERSHIP_REQUIRED, SITEMAP_NOT_REACHABLE, DNS_NOT_PROPAGATED (retry later), SEARCH_CONSOLE_AUTH_EXPIRED, SEARCH_CONSOLE_PERMISSION_DENIED, SEARCH_CONSOLE_QUOTA_EXCEEDED, SEARCH_CONSOLE_PROPERTY_NOT_FOUND, SEARCH_CONSOLE_UNAVAILABLE, SEARCH_CONSOLE_ERROR.
Parameters
idstring · pathrequiredWebsite id. Get it from sites.list or from sites.create.
Response 200
propertyUrlstringrequiredsitemapUrlstringrequiredsitemapSubmittedAtstringrequiredISO time of this submission.
ownershipSource"meta" | "existing" | "dns"required
Errors
FORBIDDEN403NO_PUBLIC_URL422SEARCH_CONSOLE_NOT_CONNECTED422META_NOT_LIVE422 · retry in 20-30 sOWNERSHIP_REQUIRED422SITEMAP_NOT_REACHABLE422DNS_NOT_PROPAGATED422 · retry laterSEARCH_CONSOLE_AUTH_EXPIRED422SEARCH_CONSOLE_PERMISSION_DENIED422SEARCH_CONSOLE_QUOTA_EXCEEDED429SEARCH_CONSOLE_PROPERTY_NOT_FOUND422SEARCH_CONSOLE_UNAVAILABLE503SEARCH_CONSOLE_ERROR502
MCP tool seo_search_console_verify_and_submit
curl -X POST "https://app.kanorio.com/api/v1/sites/{id}/seo/search-console/verify" \
-H "Authorization: Bearer $KANORIO_TOKEN" \
-H "Content-Type: application/json" \
-d '{}'{
"propertyUrl": "https://www.sunnybakery.example/",
"sitemapUrl": "https://www.sunnybakery.example/sitemap.xml",
"sitemapSubmittedAt": "2026-10-06T08:00:00.000Z",
"ownershipSource": "meta"
}