Classify part of a cited domain: every citation under scope (a subdomain or a path, like business.linkedin.com or linkedin.com/help, or a URL) takes citationType; a competitor rule also names competitorId. With withinDomain, a scope outside that domain is refused with 400 host_outside_domain. Other refusals: 400 invalid_scope, invalid_citation_type, missing_competitor, unknown_competitor; 409 duplicate_scope, rule_limit. Requires the source:classify capability, and your own project role must allow managing the project (otherwise 403 forbidden). A pitch project that is not currently active refuses with 409 INACTIVE_PITCH_PROMPT_MUTATION. Numbers refresh within a few minutes: the answer carries status.applying: true, so poll GET /projects/{projectId}/sources/rules until status.applying is false. Use POST .../sources/rules/preview first to see what the rule would change. Supports Idempotency-Key replay; a reused key with a different body returns 409 idempotency_conflict.
A Searchable API key, created under Manage Account → Integrations → API Keys. Send as Authorization: Bearer sea_xxxxx. Every key carries one or more scopes (read, write, admin) and may optionally be bound to a single project — see Getting started.
Optional client-generated key (e.g. a UUID). Retrying with the same key within 24h replays the original stored response (X-Idempotent-Replay: true) instead of repeating the side effect. See Idempotency.
Always true — injected on every success response by this endpoint family's response wrapper.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Searchable Docs","colors":{"primary":"#1D1D1D","light":"#F2F1EF","dark":"#1D1D1D"},"logo":{"light":"https://mintcdn.com/searchable/TzsnAlCNC5gn2VwJ/logo/searchable-dark.svg?fit=max\u0026auto=format\u0026n=TzsnAlCNC5gn2VwJ\u0026q=85\u0026s=86c5c7f4da2552e78ae27782245c8844","dark":"https://mintcdn.com/searchable/TzsnAlCNC5gn2VwJ/logo/searchable-white.svg?fit=max\u0026auto=format\u0026n=TzsnAlCNC5gn2VwJ\u0026q=85\u0026s=27fac3de2574f51a9683169f951c67cf","href":"https://searchable.com"},"favicon":"https://mintcdn.com/searchable/TzsnAlCNC5gn2VwJ/logo/searchable-frame.png?fit=max\u0026auto=format\u0026n=TzsnAlCNC5gn2VwJ\u0026q=85\u0026s=cfea8e388eae5ad28a8c5e70087e7bff","background":{"color":{"light":"#FFFFFF","dark":"#121212"}},"navbar":{"links":[{"href":"mailto:support@searchable.com","label":"Support"}],"primary":{"type":"button","label":"Dashboard","href":"https://searchable.com"}},"footer":{"socials":{"linkedin":"https://www.linkedin.com/company/trysearchable"}},"contextual":{"options":["copy","view","chatgpt","claude"],"display":"header"},"styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"searchable","hasAudioNarration":false,"actualSubdomain":"searchable","customDomains":["docs.searchable.com"],"gitSource":{"type":"github","owner":"searchable-inc","repo":"searchable","deployBranch":"staging","contentDirectory":"apps/docs","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6ae8d3f0d54ead70d6ecb5bc","collectionId":"5ce1e900-de9c-4ab1-bca0-efc234f7d789","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6ae8d3f0d54ead70d6ecb5bc"},"entitlements":{},"buildId":"6ae92994d3062fb9e7e0a0b8","clientVersion":"0.0.4045","searchFilterCounts":[{"language":"default","tag":"API Reference","count":97},{"language":"default","tag":"Endpoints","count":95},{"language":"default","tag":"Documentation","count":44},{"language":"default","tag":"LLM Analytics Setup","count":15},{"language":"default","tag":"Prompts","count":11},{"language":"default","tag":"Sources","count":11},{"language":"default","tag":"Traffic","count":9},{"language":"default","tag":"GSC","count":8},{"language":"default","tag":"Visibility","count":7},{"language":"default","tag":"Getting Started","count":6}]},"assistantConfig":{},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"api-reference/sources/create-a-source-classification-rule","slug":"/api-reference/sources/create-a-source-classification-rule","pageMetadata":{"title":"Create a source classification rule","description":"Classify part of a cited domain: every citation under `scope` (a subdomain or a path, like `business.linkedin.com` or `linkedin.com/help`, or a URL) takes `citationType`; a `competitor` rule also names `competitorId`. With `withinDomain`, a scope outside that domain is refused with 400 `host_outside_domain`. Other refusals: 400 `invalid_scope`, `invalid_citation_type`, `missing_competitor`, `unknown_competitor`; 409 `duplicate_scope`, `rule_limit`. Requires the `source:classify` capability, and your own project role must allow managing the project (otherwise 403 `forbidden`). A pitch project that is not currently active refuses with 409 `INACTIVE_PITCH_PROMPT_MUTATION`. Numbers refresh within a few minutes: the answer carries `status.applying: true`, so poll `GET /projects/{projectId}/sources/rules` until `status.applying` is `false`. Use `POST .../sources/rules/preview` first to see what the rule would change. Supports `Idempotency-Key` replay; a reused key with a different body returns 409 `idempotency_conflict`.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /api/mcp/projects/{projectId}/sources/rules","href":"/api-reference/sources/create-a-source-classification-rule","autogeneratedByOpenApi":true},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx, jsxs: _jsxs} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n code: \"code\",\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsxs(_components.p, {\n children: [\"Classify part of a cited domain: every citation under \", _jsx(_components.code, {\n children: \"scope\"\n }), \" (a subdomain or a path, like \", _jsx(_components.code, {\n children: \"business.linkedin.com\"\n }), \" or \", _jsx(_components.code, {\n children: \"linkedin.com/help\"\n }), \", or a URL) takes \", _jsx(_components.code, {\n children: \"citationType\"\n }), \"; a \", _jsx(_components.code, {\n children: \"competitor\"\n }), \" rule also names \", _jsx(_components.code, {\n children: \"competitorId\"\n }), \". With \", _jsx(_components.code, {\n children: \"withinDomain\"\n }), \", a scope outside that domain is refused with 400 \", _jsx(_components.code, {\n children: \"host_outside_domain\"\n }), \". Other refusals: 400 \", _jsx(_components.code, {\n children: \"invalid_scope\"\n }), \", \", _jsx(_components.code, {\n children: \"invalid_citation_type\"\n }), \", \", _jsx(_components.code, {\n children: \"missing_competitor\"\n }), \", \", _jsx(_components.code, {\n children: \"unknown_competitor\"\n }), \"; 409 \", _jsx(_components.code, {\n children: \"duplicate_scope\"\n }), \", \", _jsx(_components.code, {\n children: \"rule_limit\"\n }), \". Requires the \", _jsx(_components.code, {\n children: \"source:classify\"\n }), \" capability, and your own project role must allow managing the project (otherwise 403 \", _jsx(_components.code, {\n children: \"forbidden\"\n }), \"). A pitch project that is not currently active refuses with 409 \", _jsx(_components.code, {\n children: \"INACTIVE_PITCH_PROMPT_MUTATION\"\n }), \". Numbers refresh within a few minutes: the answer carries \", _jsx(_components.code, {\n children: \"status.applying: true\"\n }), \", so poll \", _jsx(_components.code, {\n children: \"GET /projects/{projectId}/sources/rules\"\n }), \" until \", _jsx(_components.code, {\n children: \"status.applying\"\n }), \" is \", _jsx(_components.code, {\n children: \"false\"\n }), \". Use \", _jsx(_components.code, {\n children: \"POST .../sources/rules/preview\"\n }), \" first to see what the rule would change. Supports \", _jsx(_components.code, {\n children: \"Idempotency-Key\"\n }), \" replay; a reused key with a different body returns 409 \", _jsx(_components.code, {\n children: \"idempotency_conflict\"\n }), \".\"]\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){return _jsx(_Fragment,{})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Create a source classification rule","description":"Classify part of a cited domain: every citation under `scope` (a subdomain or a path, like `business.linkedin.com` or `linkedin.com/help`, or a URL) takes `citationType`; a `competitor` rule also names `competitorId`. With `withinDomain`, a scope outside that domain is refused with 400 `host_outside_domain`. Other refusals: 400 `invalid_scope`, `invalid_citation_type`, `missing_competitor`, `unknown_competitor`; 409 `duplicate_scope`, `rule_limit`. Requires the `source:classify` capability, and your own project role must allow managing the project (otherwise 403 `forbidden`). A pitch project that is not currently active refuses with 409 `INACTIVE_PITCH_PROMPT_MUTATION`. Numbers refresh within a few minutes: the answer carries `status.applying: true`, so poll `GET /projects/{projectId}/sources/rules` until `status.applying` is `false`. Use `POST .../sources/rules/preview` first to see what the rule would change. Supports `Idempotency-Key` replay; a reused key with a different body returns 409 `idempotency_conflict`.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /api/mcp/projects/{projectId}/sources/rules","href":"/api-reference/sources/create-a-source-classification-rule","autogeneratedByOpenApi":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"operationId":"createSourceClassificationRule","summary":"Create a source classification rule","tags":["Sources"],"description":"Classify part of a cited domain: every citation under `scope` (a subdomain or a path, like `business.linkedin.com` or `linkedin.com/help`, or a URL) takes `citationType`; a `competitor` rule also names `competitorId`. With `withinDomain`, a scope outside that domain is refused with 400 `host_outside_domain`. Other refusals: 400 `invalid_scope`, `invalid_citation_type`, `missing_competitor`, `unknown_competitor`; 409 `duplicate_scope`, `rule_limit`. Requires the `source:classify` capability, and your own project role must allow managing the project (otherwise 403 `forbidden`). A pitch project that is not currently active refuses with 409 `INACTIVE_PITCH_PROMPT_MUTATION`. Numbers refresh within a few minutes: the answer carries `status.applying: true`, so poll `GET /projects/{projectId}/sources/rules` until `status.applying` is `false`. Use `POST .../sources/rules/preview` first to see what the rule would change. Supports `Idempotency-Key` replay; a reused key with a different body returns 409 `idempotency_conflict`.","parameters":["faac2402-8a0b-4736-a9e3-cb67b5d8dad3","a752227f-fc85-4017-8fef-80bb7d17cc8d"],"requestBody":"a9dc3379-edd3-468f-a201-72ad0f5fd73a","responses":{"200":"766b2a89-74ce-42fc-a761-61738aaf57a1","400":"7ba57c27-3526-4f89-a9eb-d177179b66df","401":"c7acf9d4-94bb-4108-8712-3f6aa0f75746","403":"50561fb5-6a47-4400-9e59-db4adfd17544","404":"9d4eb718-7556-4d86-9782-c9e0f05e970b","409":"5e714af0-42ed-491d-b55a-01b3a4a07d28","429":"c2c4a390-9058-458d-9e3f-9006b2846a19"},"method":"post","type":"path","servers":["5219daa3-c42a-41c1-9d62-7f518153ca38"],"security":["1120a0de-3b3e-4930-be11-7a42c5b5ad55"],"path":"/api/mcp/projects/{projectId}/sources/rules","baseUrlOptions":["https://app.searchable.com"],"title":"Create a source classification rule","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{"faac2402-8a0b-4736-a9e3-cb67b5d8dad3":{"name":"projectId","in":"path","required":true,"schema":{"type":"string","format":"uuid","isRequired":true,"description":"The project id.","uniqueKey":"","typeLabel":"string\u003cuuid>"},"description":"The project id."},"a752227f-fc85-4017-8fef-80bb7d17cc8d":{"name":"Idempotency-Key","in":"header","schema":{"type":"string","description":"Optional client-generated key (e.g. a UUID). Retrying with the same key within 24h replays the original stored response (`X-Idempotent-Replay: true`) instead of repeating the side effect. See [Idempotency](/api-reference/introduction#idempotency).","uniqueKey":"","typeLabel":"string"},"description":"Optional client-generated key (e.g. a UUID). Retrying with the same key within 24h replays the original stored response (`X-Idempotent-Replay: true`) instead of repeating the side effect. See [Idempotency](/api-reference/introduction#idempotency)."}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"scope":{"type":"string","minLength":1,"maxLength":2048,"description":"A subdomain or a path of a domain, like `business.linkedin.com` or `linkedin.com/help`, or a URL.","isRequired":true,"uniqueKey":"scope","typeLabel":"string"},"citationType":{"type":"string","enum":["brand","competitor","editorial","social","forum","review","institutional","third_party","other"],"description":"A Source Type. `brand` is the app's Owned.","isRequired":true,"uniqueKey":"citationType","typeLabel":"enum\u003cstring>"},"withinDomain":{"type":"string","maxLength":253,"description":"The domain the scope belongs to; a scope outside it is refused.","uniqueKey":"withinDomain","typeLabel":"string"},"competitorId":{"oneOf":[{"type":"string","maxLength":64,"description":"Required for a `competitor` rule; ignored for any other type.","uniqueKey":"competitorId.oneOf.0","typeLabel":"string"},{"type":"null","maxLength":64,"description":"Required for a `competitor` rule; ignored for any other type.","uniqueKey":"competitorId.oneOf.1","typeLabel":"null"}],"uniqueKey":"competitorId","typeLabel":"string | null"}},"required":["scope","citationType"],"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"scope":"\u003cstring>","withinDomain":"\u003cstring>","competitorId":"\u003cstring>"}}},"exampleType":"generated"}},"exampleType":"generated"},"responses":{"766b2a89-74ce-42fc-a761-61738aaf57a1":{"description":"The rule was saved.","headers":{"X-Request-Id":{"description":"This request's id. Include it when contacting support.","schema":{"type":"string","format":"uuid"}},"RateLimit":{"description":"IETF draft rate-limit header: `\"default\";r=\u003cremaining>;t=\u003cseconds-until-reset>`. Omitted on responses where the limiter did not run (e.g. a pre-auth validation error, or a degraded limiter failing open).","schema":{"type":"string"}},"RateLimit-Policy":{"description":"IETF draft rate-limit policy: `\"default\";q=\u003cquota>;w=\u003cwindow-seconds>`. Currently `q=600;w=60`.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Requests allowed per window (600/minute per key).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current window.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Absolute Unix-epoch second the current window resets.","schema":{"type":"integer"}},"X-Idempotent-Replay":{"description":"`true` when this response is a replay of a previously stored successful response for the same `Idempotency-Key`.","schema":{"type":"string","enum":["true"]}},"X-Idempotent-Skipped":{"description":"`body-too-large` when a successful response exceeded the 100KB idempotency-store cap and was not cached (the request still ran normally).","schema":{"type":"string","enum":["body-too-large"]}}},"content":{"application/json":{"schema":{"type":"object","description":"A saved rule change.","properties":{"rule":{"oneOf":[{"type":"object","description":"The rule created or changed; null for a removal.","required":["id","scope","rootDomain","host","pathPrefix","citationType","competitorId","competitorName","createdBy","createdAt","updatedAt"],"properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"rule.oneOf.0.id","typeLabel":"string"},"scope":{"type":"string","description":"The rule's scope as people read it, like `linkedin.com/help`.","isRequired":true,"uniqueKey":"rule.oneOf.0.scope","typeLabel":"string"},"rootDomain":{"type":"string","isRequired":true,"uniqueKey":"rule.oneOf.0.rootDomain","typeLabel":"string"},"host":{"oneOf":[{"type":"string","description":"The subdomain the rule covers; null for every host under `rootDomain`.","isRequired":true,"uniqueKey":"rule.oneOf.0.host.oneOf.0","typeLabel":"string"},{"type":"null","description":"The subdomain the rule covers; null for every host under `rootDomain`.","isRequired":true,"uniqueKey":"rule.oneOf.0.host.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"rule.oneOf.0.host","typeLabel":"string | null"},"pathPrefix":{"oneOf":[{"type":"string","description":"The path the rule covers; null for every path.","isRequired":true,"uniqueKey":"rule.oneOf.0.pathPrefix.oneOf.0","typeLabel":"string"},{"type":"null","description":"The path the rule covers; null for every path.","isRequired":true,"uniqueKey":"rule.oneOf.0.pathPrefix.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"rule.oneOf.0.pathPrefix","typeLabel":"string | null"},"citationType":{"type":"string","enum":["brand","competitor","editorial","social","forum","review","institutional","third_party","other"],"description":"A Source Type. `brand` is the app's Owned.","isRequired":true,"uniqueKey":"rule.oneOf.0.citationType","typeLabel":"enum\u003cstring>"},"competitorId":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"rule.oneOf.0.competitorId.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"rule.oneOf.0.competitorId.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"rule.oneOf.0.competitorId","typeLabel":"string | null"},"competitorName":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"rule.oneOf.0.competitorName.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"rule.oneOf.0.competitorName.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"rule.oneOf.0.competitorName","typeLabel":"string | null"},"createdBy":{"oneOf":[{"type":"object","description":"A person named in the rules or their log.","required":["id","name"],"properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"rule.oneOf.0.createdBy.oneOf.0.id","typeLabel":"string"},"name":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"rule.oneOf.0.createdBy.oneOf.0.name.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"rule.oneOf.0.createdBy.oneOf.0.name.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"rule.oneOf.0.createdBy.oneOf.0.name","typeLabel":"string | null"}},"isRequired":true,"uniqueKey":"rule.oneOf.0.createdBy.oneOf.0","typeLabel":"object"},{"type":"null","isRequired":true,"uniqueKey":"rule.oneOf.0.createdBy.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"rule.oneOf.0.createdBy","typeLabel":"object | null"},"createdAt":{"type":"string","format":"date-time","isRequired":true,"uniqueKey":"rule.oneOf.0.createdAt","typeLabel":"string\u003cdate-time>"},"updatedAt":{"type":"string","format":"date-time","isRequired":true,"uniqueKey":"rule.oneOf.0.updatedAt","typeLabel":"string\u003cdate-time>"}},"isRequired":true,"uniqueKey":"rule.oneOf.0","typeLabel":"object"},{"type":"null","description":"The rule created or changed; null for a removal.","isRequired":true,"uniqueKey":"rule.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"rule","typeLabel":"object | null"},"removed":{"type":"integer","description":"Rules a removal deleted.","isRequired":true,"uniqueKey":"removed","typeLabel":"integer"},"impact":{"type":"object","description":"What a rule change does to the citations already stored.","properties":{"rowsChanged":{"type":"integer","description":"Stored citations whose Source Type (or competitor) would change.","isRequired":true,"uniqueKey":"impact.rowsChanged","typeLabel":"integer"},"answersChanged":{"type":"integer","description":"AI answers those citations belong to.","isRequired":true,"uniqueKey":"impact.answersChanged","typeLabel":"integer"},"transitions":{"type":"array","description":"The moves from type to type, most citations first.","items":{"type":"object","properties":{"from":{"type":"string","enum":["brand","competitor","editorial","social","forum","review","institutional","third_party","other"],"description":"A Source Type. `brand` is the app's Owned.","isRequired":true,"uniqueKey":"impact.transitions.items.[INDEX].from","typeLabel":"enum\u003cstring>"},"to":{"type":"string","enum":["brand","competitor","editorial","social","forum","review","institutional","third_party","other"],"description":"A Source Type. `brand` is the app's Owned.","isRequired":true,"uniqueKey":"impact.transitions.items.[INDEX].to","typeLabel":"enum\u003cstring>"},"rows":{"type":"integer","isRequired":true,"uniqueKey":"impact.transitions.items.[INDEX].rows","typeLabel":"integer"}},"required":["from","to","rows"],"uniqueKey":"impact.transitions.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"impact.transitions","typeLabel":"object[]"}},"required":["rowsChanged","answersChanged","transitions"],"isRequired":true,"uniqueKey":"impact","typeLabel":"object"},"status":{"type":"object","properties":{"rulesVersion":{"type":"integer","isRequired":true,"uniqueKey":"status.rulesVersion","typeLabel":"integer"},"applying":{"type":"boolean","description":"True until the numbers have refreshed; poll `GET .../sources/rules` until it is false.","isRequired":true,"uniqueKey":"status.applying","typeLabel":"boolean"}},"required":["rulesVersion","applying"],"isRequired":true,"uniqueKey":"status","typeLabel":"object"},"success":{"type":"boolean","description":"Always `true` — injected on every success response by this endpoint family's response wrapper.","isRequired":true,"uniqueKey":"success","typeLabel":"boolean"}},"required":["rule","removed","impact","status","success"],"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"rule":{"id":"\u003cstring>","scope":"\u003cstring>","rootDomain":"\u003cstring>","host":"\u003cstring>","pathPrefix":"\u003cstring>","citationType":"brand","competitorId":"\u003cstring>","competitorName":"\u003cstring>","createdBy":{"id":"\u003cstring>","name":"\u003cstring>"},"createdAt":"2023-11-07T05:31:56Z","updatedAt":"2023-11-07T05:31:56Z"},"removed":123,"impact":{"rowsChanged":123,"answersChanged":123,"transitions":[{"from":"brand","to":"brand","rows":123}]},"status":{"rulesVersion":123,"applying":true},"success":true}}},"exampleType":"generated"}},"exampleType":"generated"},"7ba57c27-3526-4f89-a9eb-d177179b66df":{"description":"Error response. `code` is the machine-readable reason — see the [error reference](/api/errors) for the full catalog and remediation per code.","headers":{"X-Request-Id":{"description":"This request's id. Include it when contacting support.","schema":{"type":"string","format":"uuid"}},"RateLimit":{"description":"IETF draft rate-limit header: `\"default\";r=\u003cremaining>;t=\u003cseconds-until-reset>`. Omitted on responses where the limiter did not run (e.g. a pre-auth validation error, or a degraded limiter failing open).","schema":{"type":"string"}},"RateLimit-Policy":{"description":"IETF draft rate-limit policy: `\"default\";q=\u003cquota>;w=\u003cwindow-seconds>`. Currently `q=600;w=60`.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Requests allowed per window (600/minute per key).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current window.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Absolute Unix-epoch second the current window resets.","schema":{"type":"integer"}}},"content":{"application/problem+json":{"schema":{"type":"object","description":"RFC 9457 `application/problem+json` error body. `error` is retained verbatim as a legacy compat key equal to `message`. Some codes carry additional fields beyond the base shape (documented per-code in the [error reference](/api/errors)) — always additive, never replacing these.","properties":{"type":{"type":"string","format":"uri","description":"A URL identifying the error kind — the error reference page, anchored to `code`.","isRequired":true,"uniqueKey":"type","typeLabel":"string\u003curi>"},"title":{"type":"string","description":"Human-readable summary of `code`.","isRequired":true,"uniqueKey":"title","typeLabel":"string"},"status":{"type":"integer","description":"The HTTP status code (matches the response status).","isRequired":true,"uniqueKey":"status","typeLabel":"integer"},"code":{"type":"string","description":"Machine-readable, stable error code — safe to branch on. See the [error reference](/api/errors) for the full catalog.","enum":["unauthorized","forbidden","missing_scope","plan_upgrade_required","security_policy_denied","not_found","invalid_argument","invalid_country","no_domain","no_workspace","no_pages","bulk_limit_exceeded","quota_exceeded","project_not_runnable","pitch_not_supported","rate_limited","idempotency_in_flight","idempotency_conflict","query_timeout","gsc_not_connected","gsc_site_not_linked","gsc_access_denied","ga4_not_connected","traffic_not_connected","invalid_scope","host_outside_domain","invalid_citation_type","missing_competitor","unknown_competitor","duplicate_scope","rule_limit","internal_error"],"isRequired":true,"uniqueKey":"code","typeLabel":"enum\u003cstring>"},"error":{"type":"string","description":"Legacy compat key. Always equal to `message`.","isRequired":true,"uniqueKey":"error","typeLabel":"string"},"message":{"type":"string","description":"Human-readable error message (identical to `error`).","isRequired":true,"uniqueKey":"message","typeLabel":"string"},"howToFix":{"type":"string","description":"Present on actionable errors — a concrete next step.","uniqueKey":"howToFix","typeLabel":"string"},"requestId":{"type":"string","format":"uuid","description":"This request's id. Include it when contacting support.","uniqueKey":"requestId","typeLabel":"string\u003cuuid>"},"requiresUpgrade":{"type":"boolean","description":"Present on `plan_upgrade_required` (403).","uniqueKey":"requiresUpgrade","typeLabel":"boolean"},"retryable":{"type":"boolean","description":"Present on `rate_limited`, `idempotency_in_flight`, and `query_timeout`.","uniqueKey":"retryable","typeLabel":"boolean"},"timeout":{"type":"boolean","description":"Present on `query_timeout` (504).","uniqueKey":"timeout","typeLabel":"boolean"},"quotaExceeded":{"type":"boolean","description":"Present on `quota_exceeded` (403).","uniqueKey":"quotaExceeded","typeLabel":"boolean"},"current":{"type":"integer","description":"Present on `quota_exceeded` — current usage.","uniqueKey":"current","typeLabel":"integer"},"limit":{"type":"integer","description":"Present on `quota_exceeded` — the plan's limit.","uniqueKey":"limit","typeLabel":"integer"},"bulkLimitExceeded":{"type":"boolean","description":"Present on `bulk_limit_exceeded` (400, `POST /audits`).","uniqueKey":"bulkLimitExceeded","typeLabel":"boolean"},"requested":{"type":"integer","description":"Present on `bulk_limit_exceeded` / `quota_exceeded` — the count requested.","uniqueKey":"requested","typeLabel":"integer"},"maxAllowed":{"type":"integer","description":"Present on `bulk_limit_exceeded` — the plan's per-request cap.","uniqueKey":"maxAllowed","typeLabel":"integer"},"details":{"description":"Present on some `invalid_argument` (400) responses — a Zod `.flatten()` validation breakdown.","type":"object","properties":{"formErrors":{"type":"array","items":{"type":"string","uniqueKey":"details.formErrors.items.[INDEX]","typeLabel":"string"},"uniqueKey":"details.formErrors","typeLabel":"string[]"},"fieldErrors":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string","uniqueKey":"details.fieldErrors.additionalProperties.items.[INDEX]","typeLabel":"string"},"uniqueKey":"details.fieldErrors.additionalProperties","typeLabel":"string[]"},"uniqueKey":"details.fieldErrors","typeLabel":"object"}},"uniqueKey":"details","typeLabel":"object"}},"required":["type","title","status","code","error","message"],"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"type":"\u003cstring>","title":"\u003cstring>","status":123,"code":"unauthorized","error":"\u003cstring>","message":"\u003cstring>","howToFix":"\u003cstring>","requestId":"3c90c3cc-0d44-4b50-8888-8dd25736052a","requiresUpgrade":true,"retryable":true,"timeout":true,"quotaExceeded":true,"current":123,"limit":123,"bulkLimitExceeded":true,"requested":123,"maxAllowed":123,"details":{"formErrors":["\u003cstring>"],"fieldErrors":{}}}}},"exampleType":"generated"}},"exampleType":"generated"},"c7acf9d4-94bb-4108-8712-3f6aa0f75746":{"description":"Error response. `code` is the machine-readable reason — see the [error reference](/api/errors) for the full catalog and remediation per code.","headers":{"X-Request-Id":{"description":"This request's id. Include it when contacting support.","schema":{"type":"string","format":"uuid"}},"RateLimit":{"description":"IETF draft rate-limit header: `\"default\";r=\u003cremaining>;t=\u003cseconds-until-reset>`. Omitted on responses where the limiter did not run (e.g. a pre-auth validation error, or a degraded limiter failing open).","schema":{"type":"string"}},"RateLimit-Policy":{"description":"IETF draft rate-limit policy: `\"default\";q=\u003cquota>;w=\u003cwindow-seconds>`. Currently `q=600;w=60`.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Requests allowed per window (600/minute per key).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current window.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Absolute Unix-epoch second the current window resets.","schema":{"type":"integer"}}},"content":{"application/problem+json":{"schema":{"type":"object","description":"RFC 9457 `application/problem+json` error body. `error` is retained verbatim as a legacy compat key equal to `message`. Some codes carry additional fields beyond the base shape (documented per-code in the [error reference](/api/errors)) — always additive, never replacing these.","properties":{"type":{"type":"string","format":"uri","description":"A URL identifying the error kind — the error reference page, anchored to `code`.","isRequired":true,"uniqueKey":"type","typeLabel":"string\u003curi>"},"title":{"type":"string","description":"Human-readable summary of `code`.","isRequired":true,"uniqueKey":"title","typeLabel":"string"},"status":{"type":"integer","description":"The HTTP status code (matches the response status).","isRequired":true,"uniqueKey":"status","typeLabel":"integer"},"code":{"type":"string","description":"Machine-readable, stable error code — safe to branch on. See the [error reference](/api/errors) for the full catalog.","enum":["unauthorized","forbidden","missing_scope","plan_upgrade_required","security_policy_denied","not_found","invalid_argument","invalid_country","no_domain","no_workspace","no_pages","bulk_limit_exceeded","quota_exceeded","project_not_runnable","pitch_not_supported","rate_limited","idempotency_in_flight","idempotency_conflict","query_timeout","gsc_not_connected","gsc_site_not_linked","gsc_access_denied","ga4_not_connected","traffic_not_connected","invalid_scope","host_outside_domain","invalid_citation_type","missing_competitor","unknown_competitor","duplicate_scope","rule_limit","internal_error"],"isRequired":true,"uniqueKey":"code","typeLabel":"enum\u003cstring>"},"error":{"type":"string","description":"Legacy compat key. Always equal to `message`.","isRequired":true,"uniqueKey":"error","typeLabel":"string"},"message":{"type":"string","description":"Human-readable error message (identical to `error`).","isRequired":true,"uniqueKey":"message","typeLabel":"string"},"howToFix":{"type":"string","description":"Present on actionable errors — a concrete next step.","uniqueKey":"howToFix","typeLabel":"string"},"requestId":{"type":"string","format":"uuid","description":"This request's id. Include it when contacting support.","uniqueKey":"requestId","typeLabel":"string\u003cuuid>"},"requiresUpgrade":{"type":"boolean","description":"Present on `plan_upgrade_required` (403).","uniqueKey":"requiresUpgrade","typeLabel":"boolean"},"retryable":{"type":"boolean","description":"Present on `rate_limited`, `idempotency_in_flight`, and `query_timeout`.","uniqueKey":"retryable","typeLabel":"boolean"},"timeout":{"type":"boolean","description":"Present on `query_timeout` (504).","uniqueKey":"timeout","typeLabel":"boolean"},"quotaExceeded":{"type":"boolean","description":"Present on `quota_exceeded` (403).","uniqueKey":"quotaExceeded","typeLabel":"boolean"},"current":{"type":"integer","description":"Present on `quota_exceeded` — current usage.","uniqueKey":"current","typeLabel":"integer"},"limit":{"type":"integer","description":"Present on `quota_exceeded` — the plan's limit.","uniqueKey":"limit","typeLabel":"integer"},"bulkLimitExceeded":{"type":"boolean","description":"Present on `bulk_limit_exceeded` (400, `POST /audits`).","uniqueKey":"bulkLimitExceeded","typeLabel":"boolean"},"requested":{"type":"integer","description":"Present on `bulk_limit_exceeded` / `quota_exceeded` — the count requested.","uniqueKey":"requested","typeLabel":"integer"},"maxAllowed":{"type":"integer","description":"Present on `bulk_limit_exceeded` — the plan's per-request cap.","uniqueKey":"maxAllowed","typeLabel":"integer"},"details":{"description":"Present on some `invalid_argument` (400) responses — a Zod `.flatten()` validation breakdown.","type":"object","properties":{"formErrors":{"type":"array","items":{"type":"string","uniqueKey":"details.formErrors.items.[INDEX]","typeLabel":"string"},"uniqueKey":"details.formErrors","typeLabel":"string[]"},"fieldErrors":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string","uniqueKey":"details.fieldErrors.additionalProperties.items.[INDEX]","typeLabel":"string"},"uniqueKey":"details.fieldErrors.additionalProperties","typeLabel":"string[]"},"uniqueKey":"details.fieldErrors","typeLabel":"object"}},"uniqueKey":"details","typeLabel":"object"}},"required":["type","title","status","code","error","message"],"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"type":"\u003cstring>","title":"\u003cstring>","status":123,"code":"unauthorized","error":"\u003cstring>","message":"\u003cstring>","howToFix":"\u003cstring>","requestId":"3c90c3cc-0d44-4b50-8888-8dd25736052a","requiresUpgrade":true,"retryable":true,"timeout":true,"quotaExceeded":true,"current":123,"limit":123,"bulkLimitExceeded":true,"requested":123,"maxAllowed":123,"details":{"formErrors":["\u003cstring>"],"fieldErrors":{}}}}},"exampleType":"generated"}},"exampleType":"generated"},"50561fb5-6a47-4400-9e59-db4adfd17544":{"description":"Error response. `code` is the machine-readable reason — see the [error reference](/api/errors) for the full catalog and remediation per code.","headers":{"X-Request-Id":{"description":"This request's id. Include it when contacting support.","schema":{"type":"string","format":"uuid"}},"RateLimit":{"description":"IETF draft rate-limit header: `\"default\";r=\u003cremaining>;t=\u003cseconds-until-reset>`. Omitted on responses where the limiter did not run (e.g. a pre-auth validation error, or a degraded limiter failing open).","schema":{"type":"string"}},"RateLimit-Policy":{"description":"IETF draft rate-limit policy: `\"default\";q=\u003cquota>;w=\u003cwindow-seconds>`. Currently `q=600;w=60`.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Requests allowed per window (600/minute per key).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current window.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Absolute Unix-epoch second the current window resets.","schema":{"type":"integer"}}},"content":{"application/problem+json":{"schema":{"type":"object","description":"RFC 9457 `application/problem+json` error body. `error` is retained verbatim as a legacy compat key equal to `message`. Some codes carry additional fields beyond the base shape (documented per-code in the [error reference](/api/errors)) — always additive, never replacing these.","properties":{"type":{"type":"string","format":"uri","description":"A URL identifying the error kind — the error reference page, anchored to `code`.","isRequired":true,"uniqueKey":"type","typeLabel":"string\u003curi>"},"title":{"type":"string","description":"Human-readable summary of `code`.","isRequired":true,"uniqueKey":"title","typeLabel":"string"},"status":{"type":"integer","description":"The HTTP status code (matches the response status).","isRequired":true,"uniqueKey":"status","typeLabel":"integer"},"code":{"type":"string","description":"Machine-readable, stable error code — safe to branch on. See the [error reference](/api/errors) for the full catalog.","enum":["unauthorized","forbidden","missing_scope","plan_upgrade_required","security_policy_denied","not_found","invalid_argument","invalid_country","no_domain","no_workspace","no_pages","bulk_limit_exceeded","quota_exceeded","project_not_runnable","pitch_not_supported","rate_limited","idempotency_in_flight","idempotency_conflict","query_timeout","gsc_not_connected","gsc_site_not_linked","gsc_access_denied","ga4_not_connected","traffic_not_connected","invalid_scope","host_outside_domain","invalid_citation_type","missing_competitor","unknown_competitor","duplicate_scope","rule_limit","internal_error"],"isRequired":true,"uniqueKey":"code","typeLabel":"enum\u003cstring>"},"error":{"type":"string","description":"Legacy compat key. Always equal to `message`.","isRequired":true,"uniqueKey":"error","typeLabel":"string"},"message":{"type":"string","description":"Human-readable error message (identical to `error`).","isRequired":true,"uniqueKey":"message","typeLabel":"string"},"howToFix":{"type":"string","description":"Present on actionable errors — a concrete next step.","uniqueKey":"howToFix","typeLabel":"string"},"requestId":{"type":"string","format":"uuid","description":"This request's id. Include it when contacting support.","uniqueKey":"requestId","typeLabel":"string\u003cuuid>"},"requiresUpgrade":{"type":"boolean","description":"Present on `plan_upgrade_required` (403).","uniqueKey":"requiresUpgrade","typeLabel":"boolean"},"retryable":{"type":"boolean","description":"Present on `rate_limited`, `idempotency_in_flight`, and `query_timeout`.","uniqueKey":"retryable","typeLabel":"boolean"},"timeout":{"type":"boolean","description":"Present on `query_timeout` (504).","uniqueKey":"timeout","typeLabel":"boolean"},"quotaExceeded":{"type":"boolean","description":"Present on `quota_exceeded` (403).","uniqueKey":"quotaExceeded","typeLabel":"boolean"},"current":{"type":"integer","description":"Present on `quota_exceeded` — current usage.","uniqueKey":"current","typeLabel":"integer"},"limit":{"type":"integer","description":"Present on `quota_exceeded` — the plan's limit.","uniqueKey":"limit","typeLabel":"integer"},"bulkLimitExceeded":{"type":"boolean","description":"Present on `bulk_limit_exceeded` (400, `POST /audits`).","uniqueKey":"bulkLimitExceeded","typeLabel":"boolean"},"requested":{"type":"integer","description":"Present on `bulk_limit_exceeded` / `quota_exceeded` — the count requested.","uniqueKey":"requested","typeLabel":"integer"},"maxAllowed":{"type":"integer","description":"Present on `bulk_limit_exceeded` — the plan's per-request cap.","uniqueKey":"maxAllowed","typeLabel":"integer"},"details":{"description":"Present on some `invalid_argument` (400) responses — a Zod `.flatten()` validation breakdown.","type":"object","properties":{"formErrors":{"type":"array","items":{"type":"string","uniqueKey":"details.formErrors.items.[INDEX]","typeLabel":"string"},"uniqueKey":"details.formErrors","typeLabel":"string[]"},"fieldErrors":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string","uniqueKey":"details.fieldErrors.additionalProperties.items.[INDEX]","typeLabel":"string"},"uniqueKey":"details.fieldErrors.additionalProperties","typeLabel":"string[]"},"uniqueKey":"details.fieldErrors","typeLabel":"object"}},"uniqueKey":"details","typeLabel":"object"}},"required":["type","title","status","code","error","message"],"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"type":"\u003cstring>","title":"\u003cstring>","status":123,"code":"unauthorized","error":"\u003cstring>","message":"\u003cstring>","howToFix":"\u003cstring>","requestId":"3c90c3cc-0d44-4b50-8888-8dd25736052a","requiresUpgrade":true,"retryable":true,"timeout":true,"quotaExceeded":true,"current":123,"limit":123,"bulkLimitExceeded":true,"requested":123,"maxAllowed":123,"details":{"formErrors":["\u003cstring>"],"fieldErrors":{}}}}},"exampleType":"generated"}},"exampleType":"generated"},"9d4eb718-7556-4d86-9782-c9e0f05e970b":{"description":"Error response. `code` is the machine-readable reason — see the [error reference](/api/errors) for the full catalog and remediation per code.","headers":{"X-Request-Id":{"description":"This request's id. Include it when contacting support.","schema":{"type":"string","format":"uuid"}},"RateLimit":{"description":"IETF draft rate-limit header: `\"default\";r=\u003cremaining>;t=\u003cseconds-until-reset>`. Omitted on responses where the limiter did not run (e.g. a pre-auth validation error, or a degraded limiter failing open).","schema":{"type":"string"}},"RateLimit-Policy":{"description":"IETF draft rate-limit policy: `\"default\";q=\u003cquota>;w=\u003cwindow-seconds>`. Currently `q=600;w=60`.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Requests allowed per window (600/minute per key).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current window.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Absolute Unix-epoch second the current window resets.","schema":{"type":"integer"}}},"content":{"application/problem+json":{"schema":{"type":"object","description":"RFC 9457 `application/problem+json` error body. `error` is retained verbatim as a legacy compat key equal to `message`. Some codes carry additional fields beyond the base shape (documented per-code in the [error reference](/api/errors)) — always additive, never replacing these.","properties":{"type":{"type":"string","format":"uri","description":"A URL identifying the error kind — the error reference page, anchored to `code`.","isRequired":true,"uniqueKey":"type","typeLabel":"string\u003curi>"},"title":{"type":"string","description":"Human-readable summary of `code`.","isRequired":true,"uniqueKey":"title","typeLabel":"string"},"status":{"type":"integer","description":"The HTTP status code (matches the response status).","isRequired":true,"uniqueKey":"status","typeLabel":"integer"},"code":{"type":"string","description":"Machine-readable, stable error code — safe to branch on. See the [error reference](/api/errors) for the full catalog.","enum":["unauthorized","forbidden","missing_scope","plan_upgrade_required","security_policy_denied","not_found","invalid_argument","invalid_country","no_domain","no_workspace","no_pages","bulk_limit_exceeded","quota_exceeded","project_not_runnable","pitch_not_supported","rate_limited","idempotency_in_flight","idempotency_conflict","query_timeout","gsc_not_connected","gsc_site_not_linked","gsc_access_denied","ga4_not_connected","traffic_not_connected","invalid_scope","host_outside_domain","invalid_citation_type","missing_competitor","unknown_competitor","duplicate_scope","rule_limit","internal_error"],"isRequired":true,"uniqueKey":"code","typeLabel":"enum\u003cstring>"},"error":{"type":"string","description":"Legacy compat key. Always equal to `message`.","isRequired":true,"uniqueKey":"error","typeLabel":"string"},"message":{"type":"string","description":"Human-readable error message (identical to `error`).","isRequired":true,"uniqueKey":"message","typeLabel":"string"},"howToFix":{"type":"string","description":"Present on actionable errors — a concrete next step.","uniqueKey":"howToFix","typeLabel":"string"},"requestId":{"type":"string","format":"uuid","description":"This request's id. Include it when contacting support.","uniqueKey":"requestId","typeLabel":"string\u003cuuid>"},"requiresUpgrade":{"type":"boolean","description":"Present on `plan_upgrade_required` (403).","uniqueKey":"requiresUpgrade","typeLabel":"boolean"},"retryable":{"type":"boolean","description":"Present on `rate_limited`, `idempotency_in_flight`, and `query_timeout`.","uniqueKey":"retryable","typeLabel":"boolean"},"timeout":{"type":"boolean","description":"Present on `query_timeout` (504).","uniqueKey":"timeout","typeLabel":"boolean"},"quotaExceeded":{"type":"boolean","description":"Present on `quota_exceeded` (403).","uniqueKey":"quotaExceeded","typeLabel":"boolean"},"current":{"type":"integer","description":"Present on `quota_exceeded` — current usage.","uniqueKey":"current","typeLabel":"integer"},"limit":{"type":"integer","description":"Present on `quota_exceeded` — the plan's limit.","uniqueKey":"limit","typeLabel":"integer"},"bulkLimitExceeded":{"type":"boolean","description":"Present on `bulk_limit_exceeded` (400, `POST /audits`).","uniqueKey":"bulkLimitExceeded","typeLabel":"boolean"},"requested":{"type":"integer","description":"Present on `bulk_limit_exceeded` / `quota_exceeded` — the count requested.","uniqueKey":"requested","typeLabel":"integer"},"maxAllowed":{"type":"integer","description":"Present on `bulk_limit_exceeded` — the plan's per-request cap.","uniqueKey":"maxAllowed","typeLabel":"integer"},"details":{"description":"Present on some `invalid_argument` (400) responses — a Zod `.flatten()` validation breakdown.","type":"object","properties":{"formErrors":{"type":"array","items":{"type":"string","uniqueKey":"details.formErrors.items.[INDEX]","typeLabel":"string"},"uniqueKey":"details.formErrors","typeLabel":"string[]"},"fieldErrors":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string","uniqueKey":"details.fieldErrors.additionalProperties.items.[INDEX]","typeLabel":"string"},"uniqueKey":"details.fieldErrors.additionalProperties","typeLabel":"string[]"},"uniqueKey":"details.fieldErrors","typeLabel":"object"}},"uniqueKey":"details","typeLabel":"object"}},"required":["type","title","status","code","error","message"],"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"type":"\u003cstring>","title":"\u003cstring>","status":123,"code":"unauthorized","error":"\u003cstring>","message":"\u003cstring>","howToFix":"\u003cstring>","requestId":"3c90c3cc-0d44-4b50-8888-8dd25736052a","requiresUpgrade":true,"retryable":true,"timeout":true,"quotaExceeded":true,"current":123,"limit":123,"bulkLimitExceeded":true,"requested":123,"maxAllowed":123,"details":{"formErrors":["\u003cstring>"],"fieldErrors":{}}}}},"exampleType":"generated"}},"exampleType":"generated"},"5e714af0-42ed-491d-b55a-01b3a4a07d28":{"description":"Another request with the same `Idempotency-Key` is still executing. `Retry-After` (5 seconds) is always present — retry with the SAME key once it elapses.","headers":{"X-Request-Id":{"description":"This request's id. Include it when contacting support.","schema":{"type":"string","format":"uuid"}},"RateLimit":{"description":"IETF draft rate-limit header: `\"default\";r=\u003cremaining>;t=\u003cseconds-until-reset>`. Omitted on responses where the limiter did not run (e.g. a pre-auth validation error, or a degraded limiter failing open).","schema":{"type":"string"}},"RateLimit-Policy":{"description":"IETF draft rate-limit policy: `\"default\";q=\u003cquota>;w=\u003cwindow-seconds>`. Currently `q=600;w=60`.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Requests allowed per window (600/minute per key).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current window.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Absolute Unix-epoch second the current window resets.","schema":{"type":"integer"}},"Retry-After":{"description":"Seconds to wait before retrying. Set on 429s issued by Searchable's own rate limiter and on `409 idempotency_in_flight`; may be absent when an upstream provider (e.g. Google) rate-limits.","schema":{"type":"integer"}}},"content":{"application/problem+json":{"schema":{"type":"object","description":"RFC 9457 `application/problem+json` error body. `error` is retained verbatim as a legacy compat key equal to `message`. Some codes carry additional fields beyond the base shape (documented per-code in the [error reference](/api/errors)) — always additive, never replacing these.","properties":{"type":{"type":"string","format":"uri","description":"A URL identifying the error kind — the error reference page, anchored to `code`.","isRequired":true,"uniqueKey":"type","typeLabel":"string\u003curi>"},"title":{"type":"string","description":"Human-readable summary of `code`.","isRequired":true,"uniqueKey":"title","typeLabel":"string"},"status":{"type":"integer","description":"The HTTP status code (matches the response status).","isRequired":true,"uniqueKey":"status","typeLabel":"integer"},"code":{"type":"string","description":"Machine-readable, stable error code — safe to branch on. See the [error reference](/api/errors) for the full catalog.","enum":["unauthorized","forbidden","missing_scope","plan_upgrade_required","security_policy_denied","not_found","invalid_argument","invalid_country","no_domain","no_workspace","no_pages","bulk_limit_exceeded","quota_exceeded","project_not_runnable","pitch_not_supported","rate_limited","idempotency_in_flight","idempotency_conflict","query_timeout","gsc_not_connected","gsc_site_not_linked","gsc_access_denied","ga4_not_connected","traffic_not_connected","invalid_scope","host_outside_domain","invalid_citation_type","missing_competitor","unknown_competitor","duplicate_scope","rule_limit","internal_error"],"isRequired":true,"uniqueKey":"code","typeLabel":"enum\u003cstring>"},"error":{"type":"string","description":"Legacy compat key. Always equal to `message`.","isRequired":true,"uniqueKey":"error","typeLabel":"string"},"message":{"type":"string","description":"Human-readable error message (identical to `error`).","isRequired":true,"uniqueKey":"message","typeLabel":"string"},"howToFix":{"type":"string","description":"Present on actionable errors — a concrete next step.","uniqueKey":"howToFix","typeLabel":"string"},"requestId":{"type":"string","format":"uuid","description":"This request's id. Include it when contacting support.","uniqueKey":"requestId","typeLabel":"string\u003cuuid>"},"requiresUpgrade":{"type":"boolean","description":"Present on `plan_upgrade_required` (403).","uniqueKey":"requiresUpgrade","typeLabel":"boolean"},"retryable":{"type":"boolean","description":"Present on `rate_limited`, `idempotency_in_flight`, and `query_timeout`.","uniqueKey":"retryable","typeLabel":"boolean"},"timeout":{"type":"boolean","description":"Present on `query_timeout` (504).","uniqueKey":"timeout","typeLabel":"boolean"},"quotaExceeded":{"type":"boolean","description":"Present on `quota_exceeded` (403).","uniqueKey":"quotaExceeded","typeLabel":"boolean"},"current":{"type":"integer","description":"Present on `quota_exceeded` — current usage.","uniqueKey":"current","typeLabel":"integer"},"limit":{"type":"integer","description":"Present on `quota_exceeded` — the plan's limit.","uniqueKey":"limit","typeLabel":"integer"},"bulkLimitExceeded":{"type":"boolean","description":"Present on `bulk_limit_exceeded` (400, `POST /audits`).","uniqueKey":"bulkLimitExceeded","typeLabel":"boolean"},"requested":{"type":"integer","description":"Present on `bulk_limit_exceeded` / `quota_exceeded` — the count requested.","uniqueKey":"requested","typeLabel":"integer"},"maxAllowed":{"type":"integer","description":"Present on `bulk_limit_exceeded` — the plan's per-request cap.","uniqueKey":"maxAllowed","typeLabel":"integer"},"details":{"description":"Present on some `invalid_argument` (400) responses — a Zod `.flatten()` validation breakdown.","type":"object","properties":{"formErrors":{"type":"array","items":{"type":"string","uniqueKey":"details.formErrors.items.[INDEX]","typeLabel":"string"},"uniqueKey":"details.formErrors","typeLabel":"string[]"},"fieldErrors":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string","uniqueKey":"details.fieldErrors.additionalProperties.items.[INDEX]","typeLabel":"string"},"uniqueKey":"details.fieldErrors.additionalProperties","typeLabel":"string[]"},"uniqueKey":"details.fieldErrors","typeLabel":"object"}},"uniqueKey":"details","typeLabel":"object"}},"required":["type","title","status","code","error","message"],"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"type":"\u003cstring>","title":"\u003cstring>","status":123,"code":"unauthorized","error":"\u003cstring>","message":"\u003cstring>","howToFix":"\u003cstring>","requestId":"3c90c3cc-0d44-4b50-8888-8dd25736052a","requiresUpgrade":true,"retryable":true,"timeout":true,"quotaExceeded":true,"current":123,"limit":123,"bulkLimitExceeded":true,"requested":123,"maxAllowed":123,"details":{"formErrors":["\u003cstring>"],"fieldErrors":{}}}}},"exampleType":"generated"}},"exampleType":"generated"},"c2c4a390-9058-458d-9e3f-9006b2846a19":{"description":"Rate limited. Usually the per-API-key REST limit (600 requests/minute); on Google-backed endpoints it can also relay an upstream Google rate limit. `Retry-After` (seconds) is present when the limit was applied by Searchable's own rate limiter; it may be absent when an upstream provider rate-limits.","headers":{"X-Request-Id":{"description":"This request's id. Include it when contacting support.","schema":{"type":"string","format":"uuid"}},"RateLimit":{"description":"IETF draft rate-limit header: `\"default\";r=\u003cremaining>;t=\u003cseconds-until-reset>`. Omitted on responses where the limiter did not run (e.g. a pre-auth validation error, or a degraded limiter failing open).","schema":{"type":"string"}},"RateLimit-Policy":{"description":"IETF draft rate-limit policy: `\"default\";q=\u003cquota>;w=\u003cwindow-seconds>`. Currently `q=600;w=60`.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Requests allowed per window (600/minute per key).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current window.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Absolute Unix-epoch second the current window resets.","schema":{"type":"integer"}},"Retry-After":{"description":"Seconds to wait before retrying. Set on 429s issued by Searchable's own rate limiter and on `409 idempotency_in_flight`; may be absent when an upstream provider (e.g. Google) rate-limits.","schema":{"type":"integer"}}},"content":{"application/problem+json":{"schema":{"type":"object","description":"RFC 9457 `application/problem+json` error body. `error` is retained verbatim as a legacy compat key equal to `message`. Some codes carry additional fields beyond the base shape (documented per-code in the [error reference](/api/errors)) — always additive, never replacing these.","properties":{"type":{"type":"string","format":"uri","description":"A URL identifying the error kind — the error reference page, anchored to `code`.","isRequired":true,"uniqueKey":"type","typeLabel":"string\u003curi>"},"title":{"type":"string","description":"Human-readable summary of `code`.","isRequired":true,"uniqueKey":"title","typeLabel":"string"},"status":{"type":"integer","description":"The HTTP status code (matches the response status).","isRequired":true,"uniqueKey":"status","typeLabel":"integer"},"code":{"type":"string","description":"Machine-readable, stable error code — safe to branch on. See the [error reference](/api/errors) for the full catalog.","enum":["unauthorized","forbidden","missing_scope","plan_upgrade_required","security_policy_denied","not_found","invalid_argument","invalid_country","no_domain","no_workspace","no_pages","bulk_limit_exceeded","quota_exceeded","project_not_runnable","pitch_not_supported","rate_limited","idempotency_in_flight","idempotency_conflict","query_timeout","gsc_not_connected","gsc_site_not_linked","gsc_access_denied","ga4_not_connected","traffic_not_connected","invalid_scope","host_outside_domain","invalid_citation_type","missing_competitor","unknown_competitor","duplicate_scope","rule_limit","internal_error"],"isRequired":true,"uniqueKey":"code","typeLabel":"enum\u003cstring>"},"error":{"type":"string","description":"Legacy compat key. Always equal to `message`.","isRequired":true,"uniqueKey":"error","typeLabel":"string"},"message":{"type":"string","description":"Human-readable error message (identical to `error`).","isRequired":true,"uniqueKey":"message","typeLabel":"string"},"howToFix":{"type":"string","description":"Present on actionable errors — a concrete next step.","uniqueKey":"howToFix","typeLabel":"string"},"requestId":{"type":"string","format":"uuid","description":"This request's id. Include it when contacting support.","uniqueKey":"requestId","typeLabel":"string\u003cuuid>"},"requiresUpgrade":{"type":"boolean","description":"Present on `plan_upgrade_required` (403).","uniqueKey":"requiresUpgrade","typeLabel":"boolean"},"retryable":{"type":"boolean","description":"Present on `rate_limited`, `idempotency_in_flight`, and `query_timeout`.","uniqueKey":"retryable","typeLabel":"boolean"},"timeout":{"type":"boolean","description":"Present on `query_timeout` (504).","uniqueKey":"timeout","typeLabel":"boolean"},"quotaExceeded":{"type":"boolean","description":"Present on `quota_exceeded` (403).","uniqueKey":"quotaExceeded","typeLabel":"boolean"},"current":{"type":"integer","description":"Present on `quota_exceeded` — current usage.","uniqueKey":"current","typeLabel":"integer"},"limit":{"type":"integer","description":"Present on `quota_exceeded` — the plan's limit.","uniqueKey":"limit","typeLabel":"integer"},"bulkLimitExceeded":{"type":"boolean","description":"Present on `bulk_limit_exceeded` (400, `POST /audits`).","uniqueKey":"bulkLimitExceeded","typeLabel":"boolean"},"requested":{"type":"integer","description":"Present on `bulk_limit_exceeded` / `quota_exceeded` — the count requested.","uniqueKey":"requested","typeLabel":"integer"},"maxAllowed":{"type":"integer","description":"Present on `bulk_limit_exceeded` — the plan's per-request cap.","uniqueKey":"maxAllowed","typeLabel":"integer"},"details":{"description":"Present on some `invalid_argument` (400) responses — a Zod `.flatten()` validation breakdown.","type":"object","properties":{"formErrors":{"type":"array","items":{"type":"string","uniqueKey":"details.formErrors.items.[INDEX]","typeLabel":"string"},"uniqueKey":"details.formErrors","typeLabel":"string[]"},"fieldErrors":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string","uniqueKey":"details.fieldErrors.additionalProperties.items.[INDEX]","typeLabel":"string"},"uniqueKey":"details.fieldErrors.additionalProperties","typeLabel":"string[]"},"uniqueKey":"details.fieldErrors","typeLabel":"object"}},"uniqueKey":"details","typeLabel":"object"}},"required":["type","title","status","code","error","message"],"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"type":"\u003cstring>","title":"\u003cstring>","status":123,"code":"unauthorized","error":"\u003cstring>","message":"\u003cstring>","howToFix":"\u003cstring>","requestId":"3c90c3cc-0d44-4b50-8888-8dd25736052a","requiresUpgrade":true,"retryable":true,"timeout":true,"quotaExceeded":true,"current":123,"limit":123,"bulkLimitExceeded":true,"requested":123,"maxAllowed":123,"details":{"formErrors":["\u003cstring>"],"fieldErrors":{}}}}},"exampleType":"generated"}},"exampleType":"generated"}},"security":{"1120a0de-3b3e-4930-be11-7a42c5b5ad55":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"sea_xxxxx","description":"A Searchable API key, created under **Manage Account → Integrations → API Keys**. Send as `Authorization: Bearer sea_xxxxx`. Every key carries one or more scopes (`read`, `write`, `admin`) and may optionally be bound to a single project — see [Getting started](/api-reference/introduction#authentication).","scopes":[],"schemeName":"bearerAuth"}}},"servers":{"5219daa3-c42a-41c1-9d62-7f518153ca38":{"url":"https://app.searchable.com","description":"Production"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"http","scheme":"bearer","bearerFormat":"sea_xxxxx","description":"A Searchable API key, created under **Manage Account → Integrations → API Keys**. Send as `Authorization: Bearer sea_xxxxx`. Every key carries one or more scopes (`read`, `write`, `admin`) and may optionally be bound to a single project — see [Getting started](/api-reference/introduction#authentication).","scopes":[],"schemeName":"bearerAuth"},"schema":{"title":"Bearer Auth","type":"string","isRequired":true,"description":"A Searchable API key, created under **Manage Account → Integrations → API Keys**. Send as `Authorization: Bearer sea_xxxxx`. Every key carries one or more scopes (`read`, `write`, `admin`) and may optionally be bound to a single project — see [Getting started](/api-reference/introduction#authentication).","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"bearerAuth","name":"Authorization"}],"title":"bearerAuth"}]},"originalFileLocation":"api-reference/openapi.json"},"subdomain":"searchable","siteName":"Searchable Docs","title":"Create a source classification rule - Searchable Docs","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-11-03T00:24:22.455Z","originalFileLocation":"api-reference/sources/create-a-source-classification-rule.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Classify part of a cited domain: every citation under scope (a subdomain or a path, like business.linkedin.com or linkedin.com/help, or a URL) takes citationType; a competitor rule also names competitorId. With withinDomain, a scope outside that domain is refused with 400 host_outside_domain. Other refusals: 400 invalid_scope, invalid_citation_type, missing_competitor, unknown_competitor; 409 duplicate_scope, rule_limit. Requires the source:classify capability, and your own project role must allow managing the project (otherwise 403 forbidden). A pitch project that is not currently active refuses with 409 INACTIVE_PITCH_PROMPT_MUTATION. Numbers refresh within a few minutes: the answer carries status.applying: true, so poll GET /projects/{projectId}/sources/rules until status.applying is false. Use POST .../sources/rules/preview first to see what the rule would change. Supports Idempotency-Key replay; a reused key with a different body returns 409 idempotency_conflict.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Searchable Docs\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/searchable/z3qc3CVKdfXW6BXG/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/searchable/z3qc3CVKdfXW6BXG/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/searchable/z3qc3CVKdfXW6BXG/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/searchable/z3qc3CVKdfXW6BXG/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/searchable/z3qc3CVKdfXW6BXG/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/searchable/z3qc3CVKdfXW6BXG/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/searchable/z3qc3CVKdfXW6BXG/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/searchable/z3qc3CVKdfXW6BXG/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/searchable/z3qc3CVKdfXW6BXG/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Create a source classification rule - Searchable Docs\">\u003cmeta data-mint-head property=\"og:description\" content=\"Classify part of a cited domain: every citation under scope (a subdomain or a path, like business.linkedin.com or linkedin.com/help, or a URL) takes citationType; a competitor rule also names competitorId. With withinDomain, a scope outside that domain is refused with 400 host_outside_domain. Other refusals: 400 invalid_scope, invalid_citation_type, missing_competitor, unknown_competitor; 409 duplicate_scope, rule_limit. Requires the source:classify capability, and your own project role must allow managing the project (otherwise 403 forbidden). A pitch project that is not currently active refuses with 409 INACTIVE_PITCH_PROMPT_MUTATION. Numbers refresh within a few minutes: the answer carries status.applying: true, so poll GET /projects/{projectId}/sources/rules until status.applying is false. Use POST .../sources/rules/preview first to see what the rule would change. Supports Idempotency-Key replay; a reused key with a different body returns 409 idempotency_conflict.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Searchable Docs\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.searchable.com/api-reference/sources/create-a-source-classification-rule\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://searchable.mintlify.app/_mintlify/api/og/v2?division=Sources\u0026amp;title=Create+a+source+classification+rule\u0026amp;description=Classify+part+of+a+cited+domain%3A+every+citation+under+%60scope%60+%28a+subdomain+or+a+path%2C+like+%60business.linkedin.com%60+or+%60linkedin.com%2Fhelp%60%2C+or+a+URL%29+takes+%60cita\u0026amp;theme=91b25642f0e81448488f2869\u0026amp;signature=5b8bdc12d3df50b340a8ceab25c9e9947895088e07a50e24af8fc4dd0039f649\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Create a source classification rule - Searchable Docs\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Classify part of a cited domain: every citation under scope (a subdomain or a path, like business.linkedin.com or linkedin.com/help, or a URL) takes citationType; a competitor rule also names competitorId. With withinDomain, a scope outside that domain is refused with 400 host_outside_domain. Other refusals: 400 invalid_scope, invalid_citation_type, missing_competitor, unknown_competitor; 409 duplicate_scope, rule_limit. Requires the source:classify capability, and your own project role must allow managing the project (otherwise 403 forbidden). A pitch project that is not currently active refuses with 409 INACTIVE_PITCH_PROMPT_MUTATION. Numbers refresh within a few minutes: the answer carries status.applying: true, so poll GET /projects/{projectId}/sources/rules until status.applying is false. Use POST .../sources/rules/preview first to see what the rule would change. Supports Idempotency-Key replay; a reused key with a different body returns 409 idempotency_conflict.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://searchable.mintlify.app/_mintlify/api/og/v2?division=Sources\u0026amp;title=Create+a+source+classification+rule\u0026amp;description=Classify+part+of+a+cited+domain%3A+every+citation+under+%60scope%60+%28a+subdomain+or+a+path%2C+like+%60business.linkedin.com%60+or+%60linkedin.com%2Fhelp%60%2C+or+a+URL%29+takes+%60cita\u0026amp;theme=91b25642f0e81448488f2869\u0026amp;signature=5b8bdc12d3df50b340a8ceab25c9e9947895088e07a50e24af8fc4dd0039f649\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/searchable/z3qc3CVKdfXW6BXG/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Searchable Docs\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#1D1D1D\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.searchable.com/api-reference/sources/create-a-source-classification-rule\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/sources/create-a-source-classification-rule.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.searchable.com/#organization\",\"name\":\"Searchable Docs\",\"url\":\"https://docs.searchable.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/searchable/TzsnAlCNC5gn2VwJ/logo/searchable-dark.svg?fit=max\u0026auto=format\u0026n=TzsnAlCNC5gn2VwJ\u0026q=85\u0026s=86c5c7f4da2552e78ae27782245c8844\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.searchable.com#website\",\"name\":\"Searchable Docs\",\"url\":\"https://docs.searchable.com\",\"publisher\":{\"@id\":\"https://docs.searchable.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.searchable.com/api-reference/sources/create-a-source-classification-rule#webpage\",\"url\":\"https://docs.searchable.com/api-reference/sources/create-a-source-classification-rule\",\"name\":\"Create a source classification rule\",\"description\":\"Classify part of a cited domain: every citation under scope (a subdomain or a path, like business.linkedin.com or linkedin.com/help, or a URL) takes citationType; a competitor rule also names competitorId. With withinDomain, a scope outside that domain is refused with 400 host_outside_domain. Other refusals: 400 invalid_scope, invalid_citation_type, missing_competitor, unknown_competitor; 409 duplicate_scope, rule_limit. Requires the source:classify capability, and your own project role must allow managing the project (otherwise 403 forbidden). A pitch project that is not currently active refuses with 409 INACTIVE_PITCH_PROMPT_MUTATION. Numbers refresh within a few minutes: the answer carries status.applying: true, so poll GET /projects/{projectId}/sources/rules until status.applying is false. Use POST .../sources/rules/preview first to see what the rule would change. Supports Idempotency-Key replay; a reused key with a different body returns 409 idempotency_conflict.\",\"dateModified\":\"2026-11-03T00:24:22.455Z\",\"isPartOf\":{\"@id\":\"https://docs.searchable.com#website\"},\"breadcrumb\":{\"@id\":\"https://docs.searchable.com/api-reference/sources/create-a-source-classification-rule#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.searchable.com/api-reference/sources/create-a-source-classification-rule#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Endpoints\",\"item\":\"https://docs.searchable.com/api-reference/projects/list-workspaces\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Sources\",\"item\":\"https://docs.searchable.com/api-reference/sources/list-cited-source-domains\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Create a source classification rule\",\"item\":\"https://docs.searchable.com/api-reference/sources/create-a-source-classification-rule\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.searchable.com/api-reference/sources/create-a-source-classification-rule#apireference\",\"headline\":\"Create a source classification rule\",\"name\":\"Create a source classification rule\",\"description\":\"Classify part of a cited domain: every citation under scope (a subdomain or a path, like business.linkedin.com or linkedin.com/help, or a URL) takes citationType; a competitor rule also names competitorId. With withinDomain, a scope outside that domain is refused with 400 host_outside_domain. Other refusals: 400 invalid_scope, invalid_citation_type, missing_competitor, unknown_competitor; 409 duplicate_scope, rule_limit. Requires the source:classify capability, and your own project role must allow managing the project (otherwise 403 forbidden). A pitch project that is not currently active refuses with 409 INACTIVE_PITCH_PROMPT_MUTATION. Numbers refresh within a few minutes: the answer carries status.applying: true, so poll GET /projects/{projectId}/sources/rules until status.applying is false. Use POST .../sources/rules/preview first to see what the rule would change. Supports Idempotency-Key replay; a reused key with a different body returns 409 idempotency_conflict.\",\"url\":\"https://docs.searchable.com/api-reference/sources/create-a-source-classification-rule\",\"mainEntityOfPage\":{\"@id\":\"https://docs.searchable.com/api-reference/sources/create-a-source-classification-rule#webpage\"},\"dateModified\":\"2026-11-03T00:24:22.455Z\",\"publisher\":{\"@id\":\"https://docs.searchable.com/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.searchable.com#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Searchable Docs\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Searchable Docs","nav":{"global":null,"tabs":[{"tab":"Documentation","pages":[{"title":"Documentation","href":"/introduction"}]},{"tab":"API Reference","groups":[{"group":"Get Started","pages":[{"title":"Getting Started","icon":"rocket","sidebarTitle":"Introduction","href":"/api-reference/introduction"},{"title":"Agent API","icon":"message-bot","sidebarTitle":"Agent API","href":"/api-reference/agent-api"}]},{"group":"Endpoints","pages":[{"group":"Projects","pages":[{"title":"List workspaces","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/mcp/workspaces","href":"/api-reference/projects/list-workspaces"},{"title":"List projects","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/mcp/projects","href":"/api-reference/projects/list-projects"},{"title":"Create a project","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /api/mcp/projects","href":"/api-reference/projects/create-a-project"},{"title":"Get a project","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/mcp/projects/{projectId}","href":"/api-reference/projects/get-a-project"},{"title":"Archive or reactivate a project","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /api/mcp/projects/{projectId}/lifecycle","href":"/api-reference/projects/archive-or-reactivate-a-project"}]},{"group":"Brand","pages":[{"title":"Get brand profile","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/mcp/projects/{projectId}/brand-profile","href":"/api-reference/brand/get-brand-profile"},{"title":"Update brand profile","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json patch /api/mcp/projects/{projectId}/brand-profile","href":"/api-reference/brand/update-brand-profile"},{"title":"Update alternative names","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json patch /api/mcp/projects/{projectId}/brand-profile/alternative-names","href":"/api-reference/brand/update-alternative-names"},{"title":"Update brand fact status","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json patch /api/mcp/projects/{projectId}/brand-profile/facts/{factId}","href":"/api-reference/brand/update-brand-fact-status"},{"title":"Set the default location","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json put /api/mcp/projects/{projectId}/default-location","href":"/api-reference/brand/set-the-default-location"},{"title":"Get domain authority","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/mcp/projects/{projectId}/domain-authority","href":"/api-reference/brand/get-domain-authority"}]},{"group":"Prompts","pages":[{"title":"Get prompt catalog","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/mcp/projects/{projectId}/prompts","href":"/api-reference/prompts/get-prompt-catalog"},{"title":"Add prompts","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /api/mcp/projects/{projectId}/prompts","href":"/api-reference/prompts/add-prompts"},{"title":"Create a topic","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /api/mcp/projects/{projectId}/topics","href":"/api-reference/prompts/create-a-topic"},{"title":"Edit a topic","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json patch /api/mcp/projects/{projectId}/topics/{topicId}","href":"/api-reference/prompts/edit-a-topic"},{"title":"Update a prompt","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json patch /api/mcp/projects/{projectId}/prompts/{promptId}","href":"/api-reference/prompts/update-a-prompt"},{"title":"Bulk-edit prompts","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /api/mcp/projects/{projectId}/prompts/sync","href":"/api-reference/prompts/bulk-edit-prompts"},{"title":"Archive or restore a prompt","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /api/mcp/projects/{projectId}/prompts/{promptId}/tracking","href":"/api-reference/prompts/archive-or-restore-a-prompt"},{"title":"Get prompt revisions","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/mcp/projects/{projectId}/prompts/{promptId}/revisions","href":"/api-reference/prompts/get-prompt-revisions"},{"title":"Restore prompt wording to an earlier revision","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /api/mcp/projects/{projectId}/prompts/{promptId}/revisions/{revision}/restore","href":"/api-reference/prompts/restore-prompt-wording-to-an-earlier-revision"},{"title":"Get the Prompt Universe brief","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/mcp/projects/{projectId}/prompt-generation/brief","href":"/api-reference/prompts/get-the-prompt-universe-brief"},{"title":"Import prompts","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /api/mcp/projects/{projectId}/prompt-generation/import","href":"/api-reference/prompts/import-prompts"}]},{"group":"Visibility","pages":[{"title":"Get visibility summary","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/mcp/projects/{projectId}/visibility","href":"/api-reference/visibility/get-visibility-summary"},{"title":"Get visibility history","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/mcp/projects/{projectId}/visibility/history","href":"/api-reference/visibility/get-visibility-history"},{"title":"Get per-prompt visibility","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/mcp/projects/{projectId}/visibility/prompts","href":"/api-reference/visibility/get-per-prompt-visibility"},{"title":"Get per-topic visibility","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/mcp/projects/{projectId}/visibility/topics","href":"/api-reference/visibility/get-per-topic-visibility"},{"title":"Get visibility by AI platform","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/mcp/projects/{projectId}/visibility/platforms","href":"/api-reference/visibility/get-visibility-by-ai-platform"},{"title":"Get visibility by location","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/mcp/projects/{projectId}/visibility/locations","href":"/api-reference/visibility/get-visibility-by-location"},{"title":"Answer a diagnostic question in one call","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/mcp/projects/{projectId}/investigate","href":"/api-reference/visibility/answer-a-diagnostic-question-in-one-call"}]},{"group":"Share of Voice","pages":[{"title":"Get share of voice","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/mcp/projects/{projectId}/share-of-voice","href":"/api-reference/share-of-voice/get-share-of-voice"},{"title":"Get share of voice history","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/mcp/projects/{projectId}/share-of-voice/history","href":"/api-reference/share-of-voice/get-share-of-voice-history"}]},{"group":"Competitors","pages":[{"title":"List competitors","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/mcp/projects/{projectId}/competitors","href":"/api-reference/competitors/list-competitors"},{"title":"Add competitors","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /api/mcp/projects/{projectId}/competitors","href":"/api-reference/competitors/add-competitors"},{"title":"Get a competitor","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/mcp/projects/{projectId}/competitors/{competitorId}","href":"/api-reference/competitors/get-a-competitor"},{"title":"Edit a competitor","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json patch /api/mcp/projects/{projectId}/competitors/{competitorId}","href":"/api-reference/competitors/edit-a-competitor"}]},{"group":"Query Fanout","pages":[{"title":"Get query fanout","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/mcp/projects/{projectId}/query-fanout","href":"/api-reference/query-fanout/get-query-fanout"},{"title":"Get query fanout for a prompt","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/mcp/projects/{projectId}/query-fanout/{promptId}","href":"/api-reference/query-fanout/get-query-fanout-for-a-prompt"}]},{"group":"Sentiment","pages":[{"title":"Get sentiment summary","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/mcp/projects/{projectId}/sentiment","href":"/api-reference/sentiment/get-sentiment-summary"},{"title":"Get sentiment history","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/mcp/projects/{projectId}/sentiment/history","href":"/api-reference/sentiment/get-sentiment-history"},{"title":"Get competitor sentiment comparison","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/mcp/projects/{projectId}/sentiment/competitors","href":"/api-reference/sentiment/get-competitor-sentiment-comparison"}]},{"group":"Reports","pages":[{"title":"List shared reports","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/mcp/projects/{projectId}/reports","href":"/api-reference/reports/list-shared-reports"},{"title":"Generate a shareable report","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /api/mcp/projects/{projectId}/reports","href":"/api-reference/reports/generate-a-shareable-report"}]},{"group":"Audits \u0026 Issues","pages":[{"title":"List monitored pages","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/mcp/projects/{projectId}/pages","href":"/api-reference/audits-\u0026-issues/list-monitored-pages"},{"title":"Get page audits","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/mcp/projects/{projectId}/audits","href":"/api-reference/audits-\u0026-issues/get-page-audits"},{"title":"Trigger a site audit","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /api/mcp/projects/{projectId}/audits","href":"/api-reference/audits-\u0026-issues/trigger-a-site-audit"},{"title":"Refresh the project's sitemap","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /api/mcp/projects/{projectId}/sitemap/refresh","href":"/api-reference/audits-\u0026-issues/refresh-the-projects-sitemap"},{"title":"List site issues","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/mcp/projects/{projectId}/issues","href":"/api-reference/audits-\u0026-issues/list-site-issues"},{"title":"Get page audits (v1 alias)","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/v1/projects/{projectId}/audits","href":"/api-reference/audits-\u0026-issues/get-page-audits-v1-alias"}]},{"group":"Opportunities","pages":[{"title":"List opportunities","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/mcp/projects/{projectId}/opportunities","href":"/api-reference/opportunities/list-opportunities"},{"title":"Update an opportunity's status","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json patch /api/mcp/projects/{projectId}/opportunities/{opportunityId}","href":"/api-reference/opportunities/update-an-opportunitys-status"}]},{"group":"Articles","pages":[{"title":"List articles","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/mcp/projects/{projectId}/articles","href":"/api-reference/articles/list-articles"},{"title":"Get an article","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/mcp/articles/{articleId}","href":"/api-reference/articles/get-an-article"}]},{"group":"GA4","pages":[{"title":"Get GA4 AI-referral visitors","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/mcp/projects/{projectId}/ga4/ai-referrals","href":"/api-reference/ga4/get-ga4-ai-referral-visitors"},{"title":"Get GA4 traffic trend","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/mcp/projects/{projectId}/ga4/traffic-trend","href":"/api-reference/ga4/get-ga4-traffic-trend"},{"title":"Get GA4 top pages","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/mcp/projects/{projectId}/ga4/top-pages","href":"/api-reference/ga4/get-ga4-top-pages"},{"title":"Get GA4 traffic sources","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/mcp/projects/{projectId}/ga4/traffic-sources","href":"/api-reference/ga4/get-ga4-traffic-sources"}]},{"group":"GSC","pages":[{"title":"Get GSC overview","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/mcp/projects/{projectId}/gsc/overview","href":"/api-reference/gsc/get-gsc-overview"},{"title":"Get GSC top queries","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/mcp/projects/{projectId}/gsc/top-queries","href":"/api-reference/gsc/get-gsc-top-queries"},{"title":"Get GSC top pages","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/mcp/projects/{projectId}/gsc/top-pages","href":"/api-reference/gsc/get-gsc-top-pages"},{"title":"Get GSC performance trend","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/mcp/projects/{projectId}/gsc/performance-trend","href":"/api-reference/gsc/get-gsc-performance-trend"},{"title":"Get GSC performance by country","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/mcp/projects/{projectId}/gsc/countries","href":"/api-reference/gsc/get-gsc-performance-by-country"},{"title":"Get GSC performance by device","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/mcp/projects/{projectId}/gsc/devices","href":"/api-reference/gsc/get-gsc-performance-by-device"},{"title":"Get GSC quick-win queries","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/mcp/projects/{projectId}/gsc/opportunities","href":"/api-reference/gsc/get-gsc-quick-win-queries"},{"title":"Get GSC query distribution by position","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/mcp/projects/{projectId}/gsc/position-buckets","href":"/api-reference/gsc/get-gsc-query-distribution-by-position"}]},{"group":"Sources","pages":[{"title":"List cited source domains","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/mcp/projects/{projectId}/sources/domains","href":"/api-reference/sources/list-cited-source-domains"},{"title":"Get a cited domain's detail","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/mcp/projects/{projectId}/sources/domains/{domain}","href":"/api-reference/sources/get-a-cited-domains-detail"},{"title":"List a domain's cited URLs","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/mcp/projects/{projectId}/sources/domains/{domain}/urls","href":"/api-reference/sources/list-a-domains-cited-urls"},{"title":"List AI responses that cited a domain","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/mcp/projects/{projectId}/sources/domains/{domain}/responses","href":"/api-reference/sources/list-ai-responses-that-cited-a-domain"},{"title":"List all cited URLs","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/mcp/projects/{projectId}/sources/urls","href":"/api-reference/sources/list-all-cited-urls"},{"title":"Get a cited URL's detail","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/mcp/projects/{projectId}/sources/urls/{url}","href":"/api-reference/sources/get-a-cited-urls-detail"},{"title":"Get a cited page's cached content","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/mcp/projects/{projectId}/sources/urls/{url}/content","href":"/api-reference/sources/get-a-cited-pages-cached-content"},{"title":"Get cited content-type distribution","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/mcp/projects/{projectId}/sources/content-types","href":"/api-reference/sources/get-cited-content-type-distribution"},{"title":"Get cited source-type summary","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/mcp/projects/{projectId}/sources/source-types","href":"/api-reference/sources/get-cited-source-type-summary"},{"title":"Get cited article-type breakdown","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/mcp/projects/{projectId}/sources/article-types","href":"/api-reference/sources/get-cited-article-type-breakdown"},{"title":"Get cited-source trend","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/mcp/projects/{projectId}/sources/trend","href":"/api-reference/sources/get-cited-source-trend"},{"title":"List source classification rules","description":"The project's source classification rules: each names a subdomain or path of a cited domain (`business.linkedin.com`, `linkedin.com/help`) and the Source Type its citations take. `status` says whether the stored citation types reflect the rules yet: after a change, `status.applying` stays `true` until the numbers have refreshed, within a few minutes. Needs only the `read` scope.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/mcp/projects/{projectId}/sources/rules","href":"/api-reference/sources/list-source-classification-rules"},{"title":"Create a source classification rule","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /api/mcp/projects/{projectId}/sources/rules","href":"/api-reference/sources/create-a-source-classification-rule"},{"title":"Remove every source classification rule","description":"Removes every source classification rule of the project, so each cited source takes its built-in Source Type again. Requires the `source:classify` capability, and your own project role must allow managing the project (otherwise 403 `forbidden`). A pitch project that is not currently active refuses with 409 `INACTIVE_PITCH_PROMPT_MUTATION`. Numbers refresh within a few minutes: the answer carries `status.applying: true`, so poll `GET /projects/{projectId}/sources/rules` until `status.applying` is `false`.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json delete /api/mcp/projects/{projectId}/sources/rules","href":"/api-reference/sources/remove-every-source-classification-rule"},{"title":"Delete a source classification rule","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json delete /api/mcp/projects/{projectId}/sources/rules/{ruleId}","href":"/api-reference/sources/delete-a-source-classification-rule"},{"title":"Change a source classification rule","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json patch /api/mcp/projects/{projectId}/sources/rules/{ruleId}","href":"/api-reference/sources/change-a-source-classification-rule"},{"title":"Preview a source classification rule change","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /api/mcp/projects/{projectId}/sources/rules/preview","href":"/api-reference/sources/preview-a-source-classification-rule-change"},{"title":"List source classification rule changes","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/mcp/projects/{projectId}/sources/rules/history","href":"/api-reference/sources/list-source-classification-rule-changes"}]},{"group":"Traffic","pages":[{"title":"Get AI traffic overview","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/mcp/projects/{projectId}/traffic/overview","href":"/api-reference/traffic/get-ai-traffic-overview"},{"title":"List AI-crawler activity by page","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/mcp/projects/{projectId}/traffic/bots","href":"/api-reference/traffic/list-ai-crawler-activity-by-page"},{"title":"Get AI-referral session timeseries","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/mcp/projects/{projectId}/traffic/referrals","href":"/api-reference/traffic/get-ai-referral-session-timeseries"},{"title":"Get top AI-referral pages for a platform","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/mcp/projects/{projectId}/traffic/top-cited-pages","href":"/api-reference/traffic/get-top-ai-referral-pages-for-a-platform"},{"title":"Get sitemap crawl coverage","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/mcp/projects/{projectId}/traffic/sitemap-coverage","href":"/api-reference/traffic/get-sitemap-crawl-coverage"},{"title":"Get human traffic from AI assistants","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/mcp/projects/{projectId}/traffic/human","href":"/api-reference/traffic/get-human-traffic-from-ai-assistants"},{"title":"Get crawl-to-visit correlation","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/mcp/projects/{projectId}/traffic/correlation","href":"/api-reference/traffic/get-crawl-to-visit-correlation"},{"title":"Get traffic attribution","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/mcp/projects/{projectId}/traffic/attribution","href":"/api-reference/traffic/get-traffic-attribution"},{"title":"Get raw request logs","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/mcp/projects/{projectId}/traffic/logs","href":"/api-reference/traffic/get-raw-request-logs"}]},{"group":"Shopping","pages":[{"title":"Get shopping visibility summary","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/mcp/projects/{projectId}/shopping","href":"/api-reference/shopping/get-shopping-visibility-summary"},{"title":"Get shopping product detail","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/mcp/projects/{projectId}/shopping/products/{productId}","href":"/api-reference/shopping/get-shopping-product-detail"},{"title":"Get shopping activation timeseries","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/mcp/projects/{projectId}/shopping/timeseries","href":"/api-reference/shopping/get-shopping-activation-timeseries"}]},{"group":"Ads","pages":[{"title":"List AI-ad advertisers","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/mcp/projects/{projectId}/ads/advertisers","href":"/api-reference/ads/list-ai-ad-advertisers"},{"title":"List AI-ad creatives","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/mcp/projects/{projectId}/ads/creatives","href":"/api-reference/ads/list-ai-ad-creatives"},{"title":"List ad-surfacing prompts","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/mcp/projects/{projectId}/ads/prompts","href":"/api-reference/ads/list-ad-surfacing-prompts"},{"title":"Get AI-ad frequency timeseries","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/mcp/projects/{projectId}/ads/timeseries","href":"/api-reference/ads/get-ai-ad-frequency-timeseries"}]},{"group":"Answers","pages":[{"title":"List raw AI responses for a prompt","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/mcp/projects/{projectId}/prompts/{promptId}/responses","href":"/api-reference/answers/list-raw-ai-responses-for-a-prompt"}]},{"group":"Site Health","pages":[{"title":"Get per-URL metrics rollup","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/mcp/projects/{projectId}/pages/metrics","href":"/api-reference/site-health/get-per-url-metrics-rollup"}]},{"group":"Topics","pages":[{"title":"Get prompt rankings within a topic","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/mcp/projects/{projectId}/topics/prompt-rankings","href":"/api-reference/topics/get-prompt-rankings-within-a-topic"},{"title":"Get topic by platform position heatmap","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/mcp/projects/{projectId}/topics/heatmap","href":"/api-reference/topics/get-topic-by-platform-position-heatmap"}]}]}]}]},"basePath":"","title":"Create a source classification rule - Searchable Docs","buildId":"dpl_36EDyZCDfRuoUD9af5CH4M1bqY2h","deploymentId":"dpl_36EDyZCDfRuoUD9af5CH4M1bqY2h","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-DCDCdBVX.js","utils-ME8dDnLe.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-0e84ACsd.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-wgRBj-ia.js","snippetPresets-C11Sgb-o.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","ApiExamples-C0lapOpP.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-ZeRQV8fF.js","shallow-BupWh095.js","getApiPlaygroundDisplay-BnYQO2Ss.js","CodeSnippet-RKKOc8c_.js","CodeSnippets-Drf_m8wS.js","Page-Bevw23-4.js","getPastedJson-u6QiPzNZ.js","icon-Bb-CBSxO.js","MethodPill-F7l5AI7V.js","DuplicateIcon-IiAXkdSg.js","createIcon-FliI8EBc.js","DynamicMarkdown-B62XqCSI.js","SectionHeading-Dj31pT03.js","axios-vUo_bRtp.js","Markdown-BOgQCTwD.js","clsx-BIWXJmsZ.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-DKZWslLH.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-UDqbR6xh.js"]}