{"openapi":"3.1.0","info":{"title":"Magister API","description":"Magister's data and analysis over REST, billed in your organization's prepaid API credits (apart from any plan). Authenticate with `Authorization: Bearer mm_live_...` (Settings -> Developers -> API keys). Every successful JSON response carries `credits_charged` and an `X-Magister-Credits-Remaining` header (the API credit balance). Every error is JSON with `error`, `message` and `retryable`.","version":"1.0.0-draft"},"servers":[{"url":"https://api.magistermarketing.com"}],"paths":{"/v1/credits":{"get":{"tags":["Magister API"],"summary":"API credit balance","description":"Credits: free. Upstream: none (the API credit balance). Scope: `read`.","operationId":"credits_v1_credits_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataResponse"}}}},"401":{"description":"Missing, unknown or revoked API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"402":{"description":"Not enough API credits (`limit_reached`, `credits_exhausted`, with `top_up_url`), over `max_credits`, or a hold above the key's whole daily cap (`key_daily_cap_too_low`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"The key lacks a scope, or the endpoint is not enabled.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Unknown job; or the API is not enabled.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"409":{"description":"Not ready yet: the report of a job that has not finished.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"422":{"description":"Invalid input (`validation_error`, with `fields` when the body does not fit the schema).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"429":{"description":"60 requests a minute or 5 running jobs per organization, or the key's daily cap; see `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"500":{"description":"The request failed unexpectedly (`upstream_failed`): retryable when it failed before it started; after, `retryable` is false and the error carries its `request_id`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"502":{"description":"An upstream provider failed. Billed only what it used before failing.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"503":{"description":"The request could not start (`transport_unavailable`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/v1/keywords/research":{"post":{"tags":["Magister API"],"summary":"Keyword research","description":"Credits: about 12 (median of 17 runs, 30 days); a lookup that finds nothing is not billed. Upstream: DataForSEO's data, returned as Magister's opportunities (score, intent, topic, action; demand, difficulty and rank as bands), never DataForSEO's numbers. Scope: `write`. Enabled by Magister for the API; answers 403 `entitlement_unavailable` while it is off.","operationId":"keyword_research_v1_keywords_research_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KeywordResearchRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataResponse"}}}},"401":{"description":"Missing, unknown or revoked API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"402":{"description":"Not enough API credits (`limit_reached`, `credits_exhausted`, with `top_up_url`), over `max_credits`, or a hold above the key's whole daily cap (`key_daily_cap_too_low`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"The key lacks a scope, or the endpoint is not enabled.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Unknown job; or the API is not enabled.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"409":{"description":"Not ready yet: the report of a job that has not finished.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"422":{"description":"Invalid input (`validation_error`, with `fields` when the body does not fit the schema).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"429":{"description":"60 requests a minute or 5 running jobs per organization, or the key's daily cap; see `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"500":{"description":"The request failed unexpectedly (`upstream_failed`): retryable when it failed before it started; after, `retryable` is false and the error carries its `request_id`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"502":{"description":"An upstream provider failed. Billed only what it used before failing.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"503":{"description":"The request could not start (`transport_unavailable`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/v1/web/map":{"post":{"tags":["Magister API"],"summary":"Map a website's pages","description":"Credits: about 1 per map. Upstream: Magister's own crawler (Firecrawl, self-hosted: the site's sitemaps). Scope: `write`.","operationId":"map_website_v1_web_map_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MapWebsiteRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataResponse"}}}},"401":{"description":"Missing, unknown or revoked API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"402":{"description":"Not enough API credits (`limit_reached`, `credits_exhausted`, with `top_up_url`), over `max_credits`, or a hold above the key's whole daily cap (`key_daily_cap_too_low`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"The key lacks a scope, or the endpoint is not enabled.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Unknown job; or the API is not enabled.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"409":{"description":"Not ready yet: the report of a job that has not finished.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"422":{"description":"Invalid input (`validation_error`, with `fields` when the body does not fit the schema).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"429":{"description":"60 requests a minute or 5 running jobs per organization, or the key's daily cap; see `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"500":{"description":"The request failed unexpectedly (`upstream_failed`): retryable when it failed before it started; after, `retryable` is false and the error carries its `request_id`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"502":{"description":"An upstream provider failed. Billed only what it used before failing.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"503":{"description":"The request could not start (`transport_unavailable`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/v1/web/page-speed":{"post":{"tags":["Magister API"],"summary":"A site's page experience for real visitors","description":"Credits: free (no paid provider). Upstream: the Chrome UX Report (Google, CC BY 4.0): real visitors' measurements, returned as Magister's page-experience score, ratings and fixes. Scope: `read`.","operationId":"page_speed_v1_web_page_speed_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PageSpeedRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataResponse"}}}},"401":{"description":"Missing, unknown or revoked API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"402":{"description":"Not enough API credits (`limit_reached`, `credits_exhausted`, with `top_up_url`), over `max_credits`, or a hold above the key's whole daily cap (`key_daily_cap_too_low`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"The key lacks a scope, or the endpoint is not enabled.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Unknown job; or the API is not enabled.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"409":{"description":"Not ready yet: the report of a job that has not finished.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"422":{"description":"Invalid input (`validation_error`, with `fields` when the body does not fit the schema).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"429":{"description":"60 requests a minute or 5 running jobs per organization, or the key's daily cap; see `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"500":{"description":"The request failed unexpectedly (`upstream_failed`): retryable when it failed before it started; after, `retryable` is false and the error carries its `request_id`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"502":{"description":"An upstream provider failed. Billed only what it used before failing.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"503":{"description":"The request could not start (`transport_unavailable`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/v1/competitors/discover":{"post":{"tags":["Magister API"],"summary":"Find a site's search competitors","description":"Credits: about 3 per lookup. Upstream: DataForSEO's domain competitors, returned as Magister's overlap, standing and reach (bands), never DataForSEO's numbers. Scope: `write`. Enabled by Magister for the API; answers 403 `entitlement_unavailable` while it is off.","operationId":"competitors_discover_v1_competitors_discover_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompetitorsRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataResponse"}}}},"401":{"description":"Missing, unknown or revoked API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"402":{"description":"Not enough API credits (`limit_reached`, `credits_exhausted`, with `top_up_url`), over `max_credits`, or a hold above the key's whole daily cap (`key_daily_cap_too_low`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"The key lacks a scope, or the endpoint is not enabled.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Unknown job; or the API is not enabled.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"409":{"description":"Not ready yet: the report of a job that has not finished.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"422":{"description":"Invalid input (`validation_error`, with `fields` when the body does not fit the schema).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"429":{"description":"60 requests a minute or 5 running jobs per organization, or the key's daily cap; see `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"500":{"description":"The request failed unexpectedly (`upstream_failed`): retryable when it failed before it started; after, `retryable` is false and the error carries its `request_id`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"502":{"description":"An upstream provider failed. Billed only what it used before failing.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"503":{"description":"The request could not start (`transport_unavailable`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/v1/projects":{"get":{"tags":["Magister API"],"summary":"Your organization's brands","description":"Credits: free. Upstream: none (your organization's brands in Magister). Scope: `read`.","operationId":"projects_v1_projects_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataResponse"}}}},"401":{"description":"Missing, unknown or revoked API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"402":{"description":"Not enough API credits (`limit_reached`, `credits_exhausted`, with `top_up_url`), over `max_credits`, or a hold above the key's whole daily cap (`key_daily_cap_too_low`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"The key lacks a scope, or the endpoint is not enabled.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Unknown job; or the API is not enabled.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"409":{"description":"Not ready yet: the report of a job that has not finished.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"422":{"description":"Invalid input (`validation_error`, with `fields` when the body does not fit the schema).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"429":{"description":"60 requests a minute or 5 running jobs per organization, or the key's daily cap; see `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"500":{"description":"The request failed unexpectedly (`upstream_failed`): retryable when it failed before it started; after, `retryable` is false and the error carries its `request_id`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"502":{"description":"An upstream provider failed. Billed only what it used before failing.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"503":{"description":"The request could not start (`transport_unavailable`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}},"post":{"tags":["Magister API"],"summary":"Create a brand, with a lead's audit and check in it","description":"Credits: free (the brand is billed on your plan). Upstream: none: a brand in your organization, set up as in the app (its audit, plan and agent) and billed on your plan like any brand, never in API credits. Scope: `write`. Answers 201 with the new brand, or 200 with the one your organization already has for this site (nothing is added twice: a retry gets the brand it made, and a brand someone else added gets nothing from `from_jobs`; a brand's id is returned only to a key whose creator may open it, otherwise 409). Each job must read `succeeded` (409 `not_ready` until it does). A brand your plan does not already include answers 402 `payment_required` with its `charge` and `add_brand_url`: an API key never agrees to a price. The key's creator must be an owner or admin, or a member allowed to add brands.","operationId":"create_project_v1_projects_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateProjectRequest"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataResponse"}}}},"401":{"description":"Missing, unknown or revoked API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"402":{"description":"Not enough API credits (`limit_reached`, `credits_exhausted`, with `top_up_url`), over `max_credits`, or a hold above the key's whole daily cap (`key_daily_cap_too_low`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"The key lacks a scope, or the endpoint is not enabled.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Unknown job; or the API is not enabled.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"409":{"description":"Not ready yet: the report of a job that has not finished.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"422":{"description":"Invalid input (`validation_error`, with `fields` when the body does not fit the schema).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"429":{"description":"60 requests a minute or 5 running jobs per organization, or the key's daily cap; see `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"500":{"description":"The request failed unexpectedly (`upstream_failed`): retryable when it failed before it started; after, `retryable` is false and the error carries its `request_id`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"502":{"description":"An upstream provider failed. Billed only what it used before failing.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"503":{"description":"The request could not start (`transport_unavailable`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/v1/projects/{project_id}/ai-visibility/sets":{"get":{"tags":["Magister API"],"summary":"A brand's tracked AI visibility sets","description":"Credits: free. Upstream: Magister's tracking of a brand's AI visibility: scores, rates, share of voice and changes, never the answers. Scope: `read`.","operationId":"project_visibility_sets_v1_projects__project_id__ai_visibility_sets_get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataResponse"}}}},"401":{"description":"Missing, unknown or revoked API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"402":{"description":"Not enough API credits (`limit_reached`, `credits_exhausted`, with `top_up_url`), over `max_credits`, or a hold above the key's whole daily cap (`key_daily_cap_too_low`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"The key lacks a scope, or the endpoint is not enabled.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Unknown job; or the API is not enabled.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"409":{"description":"Not ready yet: the report of a job that has not finished.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"422":{"description":"Invalid input (`validation_error`, with `fields` when the body does not fit the schema).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"429":{"description":"60 requests a minute or 5 running jobs per organization, or the key's daily cap; see `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"500":{"description":"The request failed unexpectedly (`upstream_failed`): retryable when it failed before it started; after, `retryable` is false and the error carries its `request_id`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"502":{"description":"An upstream provider failed. Billed only what it used before failing.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"503":{"description":"The request could not start (`transport_unavailable`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/v1/projects/{project_id}/ai-visibility/sets/{set_id}":{"get":{"tags":["Magister API"],"summary":"One tracked AI visibility set","description":"Credits: free. Upstream: Magister's tracking of a brand's AI visibility: scores, rates, share of voice and changes, never the answers. Scope: `read`.","operationId":"project_visibility_set_v1_projects__project_id__ai_visibility_sets__set_id__get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}},{"name":"set_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Set Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataResponse"}}}},"401":{"description":"Missing, unknown or revoked API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"402":{"description":"Not enough API credits (`limit_reached`, `credits_exhausted`, with `top_up_url`), over `max_credits`, or a hold above the key's whole daily cap (`key_daily_cap_too_low`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"The key lacks a scope, or the endpoint is not enabled.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Unknown job; or the API is not enabled.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"409":{"description":"Not ready yet: the report of a job that has not finished.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"422":{"description":"Invalid input (`validation_error`, with `fields` when the body does not fit the schema).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"429":{"description":"60 requests a minute or 5 running jobs per organization, or the key's daily cap; see `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"500":{"description":"The request failed unexpectedly (`upstream_failed`): retryable when it failed before it started; after, `retryable` is false and the error carries its `request_id`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"502":{"description":"An upstream provider failed. Billed only what it used before failing.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"503":{"description":"The request could not start (`transport_unavailable`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/v1/audits/site":{"post":{"tags":["Magister API"],"summary":"Start a full marketing audit of a site","description":"Credits: about 100, measured per run (the full marketing audit). Upstream: DataForSEO, Google's Chrome UX Report and LLMs as inputs (no Bright Data, no BuiltWith), returned as Magister's scores, findings and opportunities (keywords as bands), never the vendors' data. Scope: `write`. Enabled by Magister for the API; answers 403 `entitlement_unavailable` while it is off.","operationId":"site_audit_v1_audits_site_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SiteAuditRequest"}}},"required":true},"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobAccepted"}}}},"401":{"description":"Missing, unknown or revoked API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"402":{"description":"Not enough API credits (`limit_reached`, `credits_exhausted`, with `top_up_url`), over `max_credits`, or a hold above the key's whole daily cap (`key_daily_cap_too_low`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"The key lacks a scope, or the endpoint is not enabled.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Unknown job; or the API is not enabled.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"409":{"description":"Not ready yet: the report of a job that has not finished.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"422":{"description":"Invalid input (`validation_error`, with `fields` when the body does not fit the schema).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"429":{"description":"60 requests a minute or 5 running jobs per organization, or the key's daily cap; see `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"500":{"description":"The request failed unexpectedly (`upstream_failed`): retryable when it failed before it started; after, `retryable` is false and the error carries its `request_id`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"502":{"description":"An upstream provider failed. Billed only what it used before failing.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"503":{"description":"The request could not start (`transport_unavailable`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/v1/audits/aeo":{"post":{"tags":["Magister API"],"summary":"Start an AEO (AI readiness) audit of a page","description":"Credits: free (no paid provider). Upstream: none (Magister fetches the page itself). Scope: `read`.","operationId":"aeo_audit_v1_audits_aeo_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AeoAuditRequest"}}},"required":true},"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobAccepted"}}}},"401":{"description":"Missing, unknown or revoked API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"402":{"description":"Not enough API credits (`limit_reached`, `credits_exhausted`, with `top_up_url`), over `max_credits`, or a hold above the key's whole daily cap (`key_daily_cap_too_low`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"The key lacks a scope, or the endpoint is not enabled.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Unknown job; or the API is not enabled.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"409":{"description":"Not ready yet: the report of a job that has not finished.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"422":{"description":"Invalid input (`validation_error`, with `fields` when the body does not fit the schema).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"429":{"description":"60 requests a minute or 5 running jobs per organization, or the key's daily cap; see `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"500":{"description":"The request failed unexpectedly (`upstream_failed`): retryable when it failed before it started; after, `retryable` is false and the error carries its `request_id`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"502":{"description":"An upstream provider failed. Billed only what it used before failing.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"503":{"description":"The request could not start (`transport_unavailable`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/v1/ai-visibility/engines":{"get":{"tags":["Magister API"],"summary":"The engines an AI visibility check can ask","description":"Credits: free. Upstream: none (the engines a check can ask, and which your account may use). Scope: `read`.","operationId":"ai_visibility_engines_v1_ai_visibility_engines_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataResponse"}}}},"401":{"description":"Missing, unknown or revoked API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"402":{"description":"Not enough API credits (`limit_reached`, `credits_exhausted`, with `top_up_url`), over `max_credits`, or a hold above the key's whole daily cap (`key_daily_cap_too_low`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"The key lacks a scope, or the endpoint is not enabled.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Unknown job; or the API is not enabled.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"409":{"description":"Not ready yet: the report of a job that has not finished.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"422":{"description":"Invalid input (`validation_error`, with `fields` when the body does not fit the schema).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"429":{"description":"60 requests a minute or 5 running jobs per organization, or the key's daily cap; see `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"500":{"description":"The request failed unexpectedly (`upstream_failed`): retryable when it failed before it started; after, `retryable` is false and the error carries its `request_id`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"502":{"description":"An upstream provider failed. Billed only what it used before failing.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"503":{"description":"The request could not start (`transport_unavailable`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/v1/ai-visibility/check":{"post":{"tags":["Magister API"],"summary":"Check a domain's AI visibility (no brand needed)","description":"Credits: about 22 for the default check (3 questions on the 3 default engines), measured per run; each answer costs what its engine does (`GET /v1/ai-visibility/engines`). Perplexity, asked only by name, adds about 5. OpenAI, asked only by name, adds about 10. Google AI Mode, asked only by name, adds about 4. Grok, asked only by name, adds about 74. Gemini (API), asked only by name, adds about 4. DeepSeek, asked only by name, adds about 3. Mistral, asked only by name, adds about 9. Meta Muse, asked only by name, adds about 4. An answer without web search costs a fraction of one with it. Upstream: the ChatGPT and Gemini apps and Google AI Mode read through DataForSEO; Anthropic, OpenAI, Perplexity and xAI through their APIs with web search; Gemini's API, DeepSeek, Mistral and Meta's Muse answering without search. Scope: `write`.","operationId":"ai_visibility_check_v1_ai_visibility_check_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AiVisibilityCheckRequest"}}},"required":true},"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobAccepted"}}}},"401":{"description":"Missing, unknown or revoked API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"402":{"description":"Not enough API credits (`limit_reached`, `credits_exhausted`, with `top_up_url`), over `max_credits`, or a hold above the key's whole daily cap (`key_daily_cap_too_low`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"The key lacks a scope, or the endpoint is not enabled.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Unknown job; or the API is not enabled.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"409":{"description":"Not ready yet: the report of a job that has not finished.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"422":{"description":"Invalid input (`validation_error`, with `fields` when the body does not fit the schema).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"429":{"description":"60 requests a minute or 5 running jobs per organization, or the key's daily cap; see `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"500":{"description":"The request failed unexpectedly (`upstream_failed`): retryable when it failed before it started; after, `retryable` is false and the error carries its `request_id`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"502":{"description":"An upstream provider failed. Billed only what it used before failing.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"503":{"description":"The request could not start (`transport_unavailable`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/v1/brand/extract":{"post":{"tags":["Magister API"],"summary":"Extract a brand from its domain","description":"Credits: about 2, measured per run. Upstream: Magister's own page reader (Firecrawl, self-hosted) and an LLM. Scope: `write`.","operationId":"brand_extract_v1_brand_extract_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BrandExtractRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataResponse"}}}},"401":{"description":"Missing, unknown or revoked API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"402":{"description":"Not enough API credits (`limit_reached`, `credits_exhausted`, with `top_up_url`), over `max_credits`, or a hold above the key's whole daily cap (`key_daily_cap_too_low`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"The key lacks a scope, or the endpoint is not enabled.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Unknown job; or the API is not enabled.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"409":{"description":"Not ready yet: the report of a job that has not finished.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"422":{"description":"Invalid input (`validation_error`, with `fields` when the body does not fit the schema).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"429":{"description":"60 requests a minute or 5 running jobs per organization, or the key's daily cap; see `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"500":{"description":"The request failed unexpectedly (`upstream_failed`): retryable when it failed before it started; after, `retryable` is false and the error carries its `request_id`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"502":{"description":"An upstream provider failed. Billed only what it used before failing.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"503":{"description":"The request could not start (`transport_unavailable`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/v1/jobs/{job_id}":{"get":{"tags":["Magister API"],"summary":"Poll a job","description":"Credits: free. Upstream: none. Scope: `read`.","operationId":"get_job_v1_jobs__job_id__get","parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobResponse"}}}},"401":{"description":"Missing, unknown or revoked API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"402":{"description":"Not enough API credits (`limit_reached`, `credits_exhausted`, with `top_up_url`), over `max_credits`, or a hold above the key's whole daily cap (`key_daily_cap_too_low`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"The key lacks a scope, or the endpoint is not enabled.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Unknown job; or the API is not enabled.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"409":{"description":"Not ready yet: the report of a job that has not finished.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"422":{"description":"Invalid input (`validation_error`, with `fields` when the body does not fit the schema).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"429":{"description":"60 requests a minute or 5 running jobs per organization, or the key's daily cap; see `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"500":{"description":"The request failed unexpectedly (`upstream_failed`): retryable when it failed before it started; after, `retryable` is false and the error carries its `request_id`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"502":{"description":"An upstream provider failed. Billed only what it used before failing.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"503":{"description":"The request could not start (`transport_unavailable`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/v1/jobs/{job_id}/report":{"get":{"tags":["Magister API"],"summary":"A finished job as an HTML report","description":"Credits: free. Upstream: none. Scope: `read`.","operationId":"job_report_v1_jobs__job_id__report_get","parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"401":{"description":"Missing, unknown or revoked API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"402":{"description":"Not enough API credits (`limit_reached`, `credits_exhausted`, with `top_up_url`), over `max_credits`, or a hold above the key's whole daily cap (`key_daily_cap_too_low`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"403":{"description":"The key lacks a scope, or the endpoint is not enabled.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Unknown job; or the API is not enabled.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"409":{"description":"Not ready yet: the report of a job that has not finished.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"422":{"description":"Invalid input (`validation_error`, with `fields` when the body does not fit the schema).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"429":{"description":"60 requests a minute or 5 running jobs per organization, or the key's daily cap; see `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"500":{"description":"The request failed unexpectedly (`upstream_failed`): retryable when it failed before it started; after, `retryable` is false and the error carries its `request_id`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"502":{"description":"An upstream provider failed. Billed only what it used before failing.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"503":{"description":"The request could not start (`transport_unavailable`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}}},"components":{"schemas":{"AeoAuditRequest":{"properties":{"webhook_url":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Webhook Url","description":"Public https URL POSTed when the job finishes, signed in `Magister-Signature` with your organization's webhook secret (Settings -> Developers -> Webhooks); retried 5 times over a day."},"max_credits":{"anyOf":[{"type":"number","maximum":100000.0,"exclusiveMinimum":0.0},{"type":"null"}],"title":"Max Credits","description":"Refuse the job (402 `limit_reached`, reason `max_credits_exceeded`) when the most it may hold is above this. A refused job costs nothing."},"url":{"type":"string","maxLength":2000,"title":"Url","description":"A public page, such as https://example.com/pricing."}},"additionalProperties":false,"type":"object","required":["url"],"title":"AeoAuditRequest"},"AiVisibilityCheckRequest":{"properties":{"webhook_url":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Webhook Url","description":"Public https URL POSTed when the job finishes, signed in `Magister-Signature` with your organization's webhook secret (Settings -> Developers -> Webhooks); retried 5 times over a day."},"max_credits":{"anyOf":[{"type":"number","maximum":100000.0,"exclusiveMinimum":0.0},{"type":"null"}],"title":"Max Credits","description":"Refuse the job (402 `limit_reached`, reason `max_credits_exceeded`) when the most it may hold is above this. A refused job costs nothing."},"domain":{"type":"string","maxLength":253,"title":"Domain","description":"The site whose brand to check, such as example.com."},"brand_name":{"anyOf":[{"type":"string","maxLength":100,"minLength":1},{"type":"null"}],"title":"Brand Name","description":"Defaults to the site's own name."},"competitors":{"items":{"type":"string","maxLength":100,"minLength":1},"type":"array","maxItems":20,"title":"Competitors"},"prompts":{"items":{"type":"string","maxLength":500,"minLength":1},"type":"array","maxItems":10,"title":"Prompts","description":"Up to 10 questions buyers ask; every engine is asked the same ones. Omitted: unbranded buyer questions are suggested from the site, as many as the most answers asked of any engine (3 by default); a site your organization checked before is asked the questions that check suggested, so repeat checks compare, until they are 30 days old (`prompts_suggested_at` in the result says when they were first suggested). A page's address (`medium.com/@brand`) always gets its own."},"engines":{"anyOf":[{"items":{"anyOf":[{"type":"string","enum":["chatgpt","gemini","claude","perplexity","openai","google_ai_mode","xai","gemini_api","deepseek","mistral","meta"]},{"$ref":"#/components/schemas/EngineChoice"}]},"type":"array","maxItems":11,"minItems":1},{"type":"null"}],"title":"Engines","description":"Which engines to ask, each by name (`\"openai\"`) or with its own settings (`{\"name\": \"openai\", \"answers\": 5, \"web_search\": false}`). Omitted: the default engines (`GET /v1/ai-visibility/engines` marks them, with what each is, whether it searches and what it costs). The others are asked only by name."},"answers_per_engine":{"anyOf":[{"type":"integer","maximum":10.0,"minimum":1.0},{"type":"null"}],"title":"Answers Per Engine","description":"How many of the questions each engine answers. Defaults to 3, or to every question in `prompts` when you send your own."},"web_search":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Web Search","description":"Whether the engines search the web for their answers. Omitted: each engine's default (the ChatGPT and Gemini apps, Google AI Mode, Claude, OpenAI, Perplexity and Grok search; Gemini's API, DeepSeek, Mistral and Meta answer from what the model knows). `true`: with no `engines`, only the engines that can search are asked. `false`: every engine that can answers without search, which leaves out Perplexity (it is a search engine) and the apps (they are read as a buyer uses them). An answer without search has no sources and costs less."}},"additionalProperties":false,"type":"object","required":["domain"],"title":"AiVisibilityCheckRequest"},"BrandExtractRequest":{"properties":{"domain":{"type":"string","maxLength":253,"title":"Domain","description":"Any public site, such as example.com."}},"additionalProperties":false,"type":"object","required":["domain"],"title":"BrandExtractRequest"},"CompetitorsRequest":{"properties":{"domain":{"type":"string","maxLength":253,"title":"Domain","description":"The site whose search rivals to find, such as example.com."},"limit":{"type":"integer","maximum":50.0,"minimum":1.0,"title":"Limit","default":10}},"additionalProperties":false,"type":"object","required":["domain"],"title":"CompetitorsRequest"},"CreateProjectRequest":{"properties":{"website_url":{"type":"string","maxLength":2048,"title":"Website Url","description":"The brand's public website, such as https://example.com."},"name":{"anyOf":[{"type":"string","maxLength":80,"minLength":1},{"type":"null"}],"title":"Name","description":"Defaults to the name Magister reads from the site."},"whose":{"type":"string","enum":["client","own"],"title":"Whose","description":"A client's brand (the default) or your own business.","default":"client"},"hosted":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Hosted","description":"Connect plans only: `true` asks for the brand with its own hosted Magister Agent."},"from_jobs":{"items":{"type":"string","format":"uuid"},"type":"array","maxItems":2,"title":"From Jobs","description":"Finished jobs of this site to carry into the brand, from any of your organization's keys: a site audit (`POST /v1/audits/site`) becomes the brand's plan, with no second audit, and an AI visibility check (`POST /v1/ai-visibility/check`) becomes its first AI visibility history, tracked weekly from then on. At most one of each."}},"additionalProperties":false,"type":"object","required":["website_url"],"title":"CreateProjectRequest"},"DataResponse":{"properties":{"data":{"additionalProperties":true,"type":"object","title":"Data"},"credits_charged":{"type":"number","title":"Credits Charged","description":"Credits this request has cost: what it actually used. A request refused before it starts costs nothing; one that fails partway costs what it used."},"request_id":{"type":"string","title":"Request Id"}},"type":"object","required":["data","credits_charged","request_id"],"title":"DataResponse"},"EngineChoice":{"properties":{"name":{"type":"string","enum":["chatgpt","gemini","claude","perplexity","openai","google_ai_mode","xai","gemini_api","deepseek","mistral","meta"],"title":"Name"},"answers":{"anyOf":[{"type":"integer","maximum":10.0,"minimum":1.0},{"type":"null"}],"title":"Answers","description":"How many of the questions this engine answers: the first N, in order. Defaults to `answers_per_engine`."},"web_search":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Web Search","description":"Ask this engine with (`true`) or without (`false`) web search. Defaults to the check's `web_search`, else to the engine's own default. An engine that cannot do what is asked answers 422."}},"additionalProperties":false,"type":"object","required":["name"],"title":"EngineChoice"},"ErrorBody":{"properties":{"error":{"type":"string","title":"Error","description":"The MCP error code, such as `limit_reached`."},"message":{"type":"string","title":"Message"},"retryable":{"type":"boolean","title":"Retryable"}},"type":"object","required":["error","message","retryable"],"title":"ErrorBody"},"JobAccepted":{"properties":{"job_id":{"type":"string","title":"Job Id"},"status":{"type":"string","enum":["running","succeeded","failed"],"title":"Status"},"status_url":{"type":"string","title":"Status Url"},"poll_after_seconds":{"type":"integer","title":"Poll After Seconds"},"credits_charged":{"type":"number","title":"Credits Charged"},"request_id":{"type":"string","title":"Request Id"}},"type":"object","required":["job_id","status","status_url","poll_after_seconds","credits_charged","request_id"],"title":"JobAccepted"},"JobResponse":{"properties":{"job_id":{"type":"string","title":"Job Id"},"kind":{"type":"string","enum":["site_audit","ai_visibility_check","aeo_check"],"title":"Kind"},"status":{"type":"string","enum":["running","succeeded","failed"],"title":"Status"},"result":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Result"},"poll_after_seconds":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Poll After Seconds"},"credits_charged":{"type":"number","title":"Credits Charged"},"report_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Report Url","description":"The finished job as HTML (needs the key)."},"share_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Share Url","description":"The same report at a link anyone may open."},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created At"},"finished_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Finished At"}},"type":"object","required":["job_id","kind","status","credits_charged"],"title":"JobResponse"},"KeywordResearchRequest":{"properties":{"domain":{"anyOf":[{"type":"string","maxLength":253},{"type":"null"}],"title":"Domain","description":"A site whose rankings and search summary to read, such as example.com."},"seed":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Seed","description":"A seed keyword for ideas."},"limit":{"type":"integer","maximum":100.0,"minimum":1.0,"title":"Limit","default":20}},"additionalProperties":false,"type":"object","title":"KeywordResearchRequest"},"MapWebsiteRequest":{"properties":{"url":{"type":"string","maxLength":2000,"title":"Url","description":"The site's address, such as https://example.com."},"search":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Search","description":"Keep only the pages whose address contains this word."},"limit":{"type":"integer","maximum":500.0,"minimum":1.0,"title":"Limit","default":100}},"additionalProperties":false,"type":"object","required":["url"],"title":"MapWebsiteRequest"},"PageSpeedRequest":{"properties":{"url":{"type":"string","maxLength":2000,"title":"Url","description":"The site's address, such as https://example.com."}},"additionalProperties":false,"type":"object","required":["url"],"title":"PageSpeedRequest"},"SiteAuditRequest":{"properties":{"webhook_url":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Webhook Url","description":"Public https URL POSTed when the job finishes, signed in `Magister-Signature` with your organization's webhook secret (Settings -> Developers -> Webhooks); retried 5 times over a day."},"max_credits":{"anyOf":[{"type":"number","maximum":100000.0,"exclusiveMinimum":0.0},{"type":"null"}],"title":"Max Credits","description":"Refuse the job (402 `limit_reached`, reason `max_credits_exceeded`) when the most it may hold is above this. A refused job costs nothing."},"url":{"type":"string","maxLength":2000,"title":"Url","description":"Any public site, such as https://example.com."}},"additionalProperties":false,"type":"object","required":["url"],"title":"SiteAuditRequest"}},"securitySchemes":{"apiKey":{"type":"http","scheme":"bearer","description":"An `mm_live_` API key."}}},"security":[{"apiKey":[]}]}