Skip to content

website-seo ​

← All modules

74 endpoints.

GET /api/v1/settings/website/seo/websites ​

List Websites

200 — Successful Response

json
{
  "items": {
    "additionalProperties": true,
    "type": "object"
  },
  "type": "array",
  "title": "Response List Websites Api V1 Settings Website Seo Websites Get"
}

POST /api/v1/settings/website/seo/websites ​

Create Website

Request body

json
{
  "properties": {
    "name": {
      "type": "string",
      "maxLength": 255,
      "minLength": 1,
      "title": "Name"
    },
    "url": {
      "type": "string",
      "maxLength": 500,
      "minLength": 1,
      "title": "Url"
    },
    "status": {
      "type": "integer",
      "title": "Status",
      "default": 1
    }
  },
  "type": "object",
  "required": [
    "name",
    "url"
  ],
  "title": "WebsiteIn"
}

201 — Successful Response

json
{
  "additionalProperties": true,
  "type": "object",
  "title": "Response Create Website Api V1 Settings Website Seo Websites Post"
}

422 — Validation Error

json
{
  "properties": {
    "detail": {
      "items": {
        "properties": {
          "loc": {
            "items": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "integer"
                }
              ]
            },
            "type": "array",
            "title": "Location"
          },
          "msg": {
            "type": "string",
            "title": "Message"
          },
          "type": {
            "type": "string",
            "title": "Error Type"
          }
        },
        "type": "object",
        "required": [
          "loc",
          "msg",
          "type"
        ],
        "title": "ValidationError"
      },
      "type": "array",
      "title": "Detail"
    }
  },
  "type": "object",
  "title": "HTTPValidationError"
}

PATCH /api/v1/settings/website/seo/websites/{website_id} ​

Update Website

Parameters

NameInRequiredTypeDescription
website_idpathyesstring

Request body

json
{
  "properties": {
    "name": {
      "type": "string",
      "maxLength": 255,
      "minLength": 1,
      "title": "Name"
    },
    "url": {
      "type": "string",
      "maxLength": 500,
      "minLength": 1,
      "title": "Url"
    },
    "status": {
      "type": "integer",
      "title": "Status",
      "default": 1
    }
  },
  "type": "object",
  "required": [
    "name",
    "url"
  ],
  "title": "WebsiteIn"
}

200 — Successful Response

json
{
  "type": "object",
  "additionalProperties": true,
  "title": "Response Update Website Api V1 Settings Website Seo Websites  Website Id  Patch"
}

422 — Validation Error

json
{
  "properties": {
    "detail": {
      "items": {
        "properties": {
          "loc": {
            "items": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "integer"
                }
              ]
            },
            "type": "array",
            "title": "Location"
          },
          "msg": {
            "type": "string",
            "title": "Message"
          },
          "type": {
            "type": "string",
            "title": "Error Type"
          }
        },
        "type": "object",
        "required": [
          "loc",
          "msg",
          "type"
        ],
        "title": "ValidationError"
      },
      "type": "array",
      "title": "Detail"
    }
  },
  "type": "object",
  "title": "HTTPValidationError"
}

DELETE /api/v1/settings/website/seo/websites/{website_id} ​

Delete Website

Parameters

NameInRequiredTypeDescription
website_idpathyesstring

204 — Successful Response

422 — Validation Error

json
{
  "properties": {
    "detail": {
      "items": {
        "properties": {
          "loc": {
            "items": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "integer"
                }
              ]
            },
            "type": "array",
            "title": "Location"
          },
          "msg": {
            "type": "string",
            "title": "Message"
          },
          "type": {
            "type": "string",
            "title": "Error Type"
          }
        },
        "type": "object",
        "required": [
          "loc",
          "msg",
          "type"
        ],
        "title": "ValidationError"
      },
      "type": "array",
      "title": "Detail"
    }
  },
  "type": "object",
  "title": "HTTPValidationError"
}

GET /api/v1/settings/website/seo/keywords ​

List Keywords

Parameters

NameInRequiredTypeDescription
website_idqueryno

200 — Successful Response

json
{
  "type": "array",
  "items": {
    "type": "object",
    "additionalProperties": true
  },
  "title": "Response List Keywords Api V1 Settings Website Seo Keywords Get"
}

422 — Validation Error

json
{
  "properties": {
    "detail": {
      "items": {
        "properties": {
          "loc": {
            "items": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "integer"
                }
              ]
            },
            "type": "array",
            "title": "Location"
          },
          "msg": {
            "type": "string",
            "title": "Message"
          },
          "type": {
            "type": "string",
            "title": "Error Type"
          }
        },
        "type": "object",
        "required": [
          "loc",
          "msg",
          "type"
        ],
        "title": "ValidationError"
      },
      "type": "array",
      "title": "Detail"
    }
  },
  "type": "object",
  "title": "HTTPValidationError"
}

POST /api/v1/settings/website/seo/keywords ​

Create Keyword

Request body

json
{
  "properties": {
    "website_id": {
      "type": "string",
      "title": "Website Id"
    },
    "name": {
      "type": "string",
      "maxLength": 255,
      "minLength": 1,
      "title": "Name"
    },
    "lang_code": {
      "type": "string",
      "title": "Lang Code",
      "default": "en"
    },
    "country_code": {
      "type": "string",
      "title": "Country Code",
      "default": "za"
    },
    "status": {
      "type": "integer",
      "title": "Status",
      "default": 1
    }
  },
  "type": "object",
  "required": [
    "website_id",
    "name"
  ],
  "title": "KeywordIn"
}

201 — Successful Response

json
{
  "type": "object",
  "additionalProperties": true,
  "title": "Response Create Keyword Api V1 Settings Website Seo Keywords Post"
}

422 — Validation Error

json
{
  "properties": {
    "detail": {
      "items": {
        "properties": {
          "loc": {
            "items": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "integer"
                }
              ]
            },
            "type": "array",
            "title": "Location"
          },
          "msg": {
            "type": "string",
            "title": "Message"
          },
          "type": {
            "type": "string",
            "title": "Error Type"
          }
        },
        "type": "object",
        "required": [
          "loc",
          "msg",
          "type"
        ],
        "title": "ValidationError"
      },
      "type": "array",
      "title": "Detail"
    }
  },
  "type": "object",
  "title": "HTTPValidationError"
}

POST /api/v1/settings/website/seo/keywords/bulk ​

Create Keywords Bulk

Add many keywords to a website at once (one per line/comma in the UI).

Request body

json
{
  "properties": {
    "website_id": {
      "type": "string",
      "title": "Website Id"
    },
    "keywords": {
      "items": {
        "type": "string"
      },
      "type": "array",
      "title": "Keywords"
    },
    "lang_code": {
      "type": "string",
      "title": "Lang Code",
      "default": "en"
    },
    "country_code": {
      "type": "string",
      "title": "Country Code",
      "default": "za"
    }
  },
  "type": "object",
  "required": [
    "website_id",
    "keywords"
  ],
  "title": "KeywordsBulkIn"
}

200 — Successful Response

json
{
  "additionalProperties": true,
  "type": "object",
  "title": "Response Create Keywords Bulk Api V1 Settings Website Seo Keywords Bulk Post"
}

422 — Validation Error

json
{
  "properties": {
    "detail": {
      "items": {
        "properties": {
          "loc": {
            "items": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "integer"
                }
              ]
            },
            "type": "array",
            "title": "Location"
          },
          "msg": {
            "type": "string",
            "title": "Message"
          },
          "type": {
            "type": "string",
            "title": "Error Type"
          }
        },
        "type": "object",
        "required": [
          "loc",
          "msg",
          "type"
        ],
        "title": "ValidationError"
      },
      "type": "array",
      "title": "Detail"
    }
  },
  "type": "object",
  "title": "HTTPValidationError"
}

DELETE /api/v1/settings/website/seo/keywords/{keyword_id} ​

Delete Keyword

Parameters

NameInRequiredTypeDescription
keyword_idpathyesstring

204 — Successful Response

422 — Validation Error

json
{
  "properties": {
    "detail": {
      "items": {
        "properties": {
          "loc": {
            "items": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "integer"
                }
              ]
            },
            "type": "array",
            "title": "Location"
          },
          "msg": {
            "type": "string",
            "title": "Message"
          },
          "type": {
            "type": "string",
            "title": "Error Type"
          }
        },
        "type": "object",
        "required": [
          "loc",
          "msg",
          "type"
        ],
        "title": "ValidationError"
      },
      "type": "array",
      "title": "Detail"
    }
  },
  "type": "object",
  "title": "HTTPValidationError"
}

GET /api/v1/settings/website/seo/engines ​

List Engines

200 — Successful Response

json
{
  "additionalProperties": true,
  "type": "object",
  "title": "Response List Engines Api V1 Settings Website Seo Engines Get"
}

GET /api/v1/settings/website/seo/ranks ​

List Ranks

Latest rank per keyword (the cached last_rank), for the Rank Tracking tab.

Parameters

NameInRequiredTypeDescription
website_idqueryno

200 — Successful Response

json
{
  "type": "array",
  "items": {
    "type": "object",
    "additionalProperties": true
  },
  "title": "Response List Ranks Api V1 Settings Website Seo Ranks Get"
}

422 — Validation Error

json
{
  "properties": {
    "detail": {
      "items": {
        "properties": {
          "loc": {
            "items": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "integer"
                }
              ]
            },
            "type": "array",
            "title": "Location"
          },
          "msg": {
            "type": "string",
            "title": "Message"
          },
          "type": {
            "type": "string",
            "title": "Error Type"
          }
        },
        "type": "object",
        "required": [
          "loc",
          "msg",
          "type"
        ],
        "title": "ValidationError"
      },
      "type": "array",
      "title": "Detail"
    }
  },
  "type": "object",
  "title": "HTTPValidationError"
}

GET /api/v1/settings/website/seo/keywords/{keyword_id}/history ​

Rank History

Parameters

NameInRequiredTypeDescription
keyword_idpathyesstring

200 — Successful Response

json
{
  "type": "array",
  "items": {
    "type": "object",
    "additionalProperties": true
  },
  "title": "Response Rank History Api V1 Settings Website Seo Keywords  Keyword Id  History Get"
}

422 — Validation Error

json
{
  "properties": {
    "detail": {
      "items": {
        "properties": {
          "loc": {
            "items": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "integer"
                }
              ]
            },
            "type": "array",
            "title": "Location"
          },
          "msg": {
            "type": "string",
            "title": "Message"
          },
          "type": {
            "type": "string",
            "title": "Error Type"
          }
        },
        "type": "object",
        "required": [
          "loc",
          "msg",
          "type"
        ],
        "title": "ValidationError"
      },
      "type": "array",
      "title": "Detail"
    }
  },
  "type": "object",
  "title": "HTTPValidationError"
}

POST /api/v1/settings/website/seo/ranks/run ​

Run Rank

Check current rankings for the given keywords on an engine, now.

Request body

json
{
  "properties": {
    "keyword_ids": {
      "items": {
        "type": "string"
      },
      "type": "array",
      "title": "Keyword Ids"
    },
    "engine_id": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Engine Id"
    },
    "mode": {
      "type": "string",
      "title": "Mode",
      "default": "live"
    }
  },
  "type": "object",
  "required": [
    "keyword_ids"
  ],
  "title": "RankRunIn"
}

200 — Successful Response

json
{
  "additionalProperties": true,
  "type": "object",
  "title": "Response Run Rank Api V1 Settings Website Seo Ranks Run Post"
}

422 — Validation Error

json
{
  "properties": {
    "detail": {
      "items": {
        "properties": {
          "loc": {
            "items": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "integer"
                }
              ]
            },
            "type": "array",
            "title": "Location"
          },
          "msg": {
            "type": "string",
            "title": "Message"
          },
          "type": {
            "type": "string",
            "title": "Error Type"
          }
        },
        "type": "object",
        "required": [
          "loc",
          "msg",
          "type"
        ],
        "title": "ValidationError"
      },
      "type": "array",
      "title": "Detail"
    }
  },
  "type": "object",
  "title": "HTTPValidationError"
}

POST /api/v1/settings/website/seo/ranks/collect ​

Collect Ranks

Collect any finished queued DataForSEO rank tasks now.

The daily scheduled pass does this too; the endpoint exists so a queued batch can be pulled in without waiting for tomorrow morning.

200 — Successful Response

json
{
  "additionalProperties": true,
  "type": "object",
  "title": "Response Collect Ranks Api V1 Settings Website Seo Ranks Collect Post"
}

Rank Trends

Current rank, rank days ago, and the movement between them.

The rank history table has been written since the feature shipped but was never read back — position alone cannot distinguish a keyword that climbed from 40 to 11 from one that has sat at 11 all month.

Parameters

NameInRequiredTypeDescription
website_idqueryno
daysquerynointeger

200 — Successful Response

json
{
  "type": "object",
  "additionalProperties": true,
  "title": "Response Rank Trends Api V1 Settings Website Seo Ranks Trends Get"
}

422 — Validation Error

json
{
  "properties": {
    "detail": {
      "items": {
        "properties": {
          "loc": {
            "items": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "integer"
                }
              ]
            },
            "type": "array",
            "title": "Location"
          },
          "msg": {
            "type": "string",
            "title": "Message"
          },
          "type": {
            "type": "string",
            "title": "Error Type"
          }
        },
        "type": "object",
        "required": [
          "loc",
          "msg",
          "type"
        ],
        "title": "ValidationError"
      },
      "type": "array",
      "title": "Detail"
    }
  },
  "type": "object",
  "title": "HTTPValidationError"
}

GET /api/v1/settings/website/seo/listings ​

List Listings

200 — Successful Response

json
{
  "items": {
    "additionalProperties": true,
    "type": "object"
  },
  "type": "array",
  "title": "Response List Listings Api V1 Settings Website Seo Listings Get"
}

POST /api/v1/settings/website/seo/listings ​

Create Listing

Request body

json
{
  "properties": {
    "business_name": {
      "type": "string",
      "maxLength": 255,
      "minLength": 1,
      "title": "Business Name"
    },
    "website_url": {
      "type": "string",
      "maxLength": 500,
      "minLength": 1,
      "title": "Website Url"
    }
  },
  "type": "object",
  "required": [
    "business_name",
    "website_url"
  ],
  "title": "ListingIn"
}

201 — Successful Response

json
{
  "additionalProperties": true,
  "type": "object",
  "title": "Response Create Listing Api V1 Settings Website Seo Listings Post"
}

422 — Validation Error

json
{
  "properties": {
    "detail": {
      "items": {
        "properties": {
          "loc": {
            "items": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "integer"
                }
              ]
            },
            "type": "array",
            "title": "Location"
          },
          "msg": {
            "type": "string",
            "title": "Message"
          },
          "type": {
            "type": "string",
            "title": "Error Type"
          }
        },
        "type": "object",
        "required": [
          "loc",
          "msg",
          "type"
        ],
        "title": "ValidationError"
      },
      "type": "array",
      "title": "Detail"
    }
  },
  "type": "object",
  "title": "HTTPValidationError"
}

GET /api/v1/settings/website/seo/listings/{listing_id} ​

Get Listing

Parameters

NameInRequiredTypeDescription
listing_idpathyesstring

200 — Successful Response

json
{
  "type": "object",
  "additionalProperties": true,
  "title": "Response Get Listing Api V1 Settings Website Seo Listings  Listing Id  Get"
}

422 — Validation Error

json
{
  "properties": {
    "detail": {
      "items": {
        "properties": {
          "loc": {
            "items": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "integer"
                }
              ]
            },
            "type": "array",
            "title": "Location"
          },
          "msg": {
            "type": "string",
            "title": "Message"
          },
          "type": {
            "type": "string",
            "title": "Error Type"
          }
        },
        "type": "object",
        "required": [
          "loc",
          "msg",
          "type"
        ],
        "title": "ValidationError"
      },
      "type": "array",
      "title": "Detail"
    }
  },
  "type": "object",
  "title": "HTTPValidationError"
}

DELETE /api/v1/settings/website/seo/listings/{listing_id} ​

Delete Listing

Parameters

NameInRequiredTypeDescription
listing_idpathyesstring

204 — Successful Response

422 — Validation Error

json
{
  "properties": {
    "detail": {
      "items": {
        "properties": {
          "loc": {
            "items": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "integer"
                }
              ]
            },
            "type": "array",
            "title": "Location"
          },
          "msg": {
            "type": "string",
            "title": "Message"
          },
          "type": {
            "type": "string",
            "title": "Error Type"
          }
        },
        "type": "object",
        "required": [
          "loc",
          "msg",
          "type"
        ],
        "title": "ValidationError"
      },
      "type": "array",
      "title": "Detail"
    }
  },
  "type": "object",
  "title": "HTTPValidationError"
}

POST /api/v1/settings/website/seo/listings/{listing_id}/check-metadata ​

Check Listing Metadata

Fetch the listing's website and score its listing-readiness (title/meta/OG/JSON-LD) — see app.services.google_listing_check. Caches the result on the row and auto-fills business_name/description the first time they're blank.

Parameters

NameInRequiredTypeDescription
listing_idpathyesstring

200 — Successful Response

json
{
  "type": "object",
  "additionalProperties": true,
  "title": "Response Check Listing Metadata Api V1 Settings Website Seo Listings  Listing Id  Check Metadata Post"
}

422 — Validation Error

json
{
  "properties": {
    "detail": {
      "items": {
        "properties": {
          "loc": {
            "items": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "integer"
                }
              ]
            },
            "type": "array",
            "title": "Location"
          },
          "msg": {
            "type": "string",
            "title": "Message"
          },
          "type": {
            "type": "string",
            "title": "Error Type"
          }
        },
        "type": "object",
        "required": [
          "loc",
          "msg",
          "type"
        ],
        "title": "ValidationError"
      },
      "type": "array",
      "title": "Detail"
    }
  },
  "type": "object",
  "title": "HTTPValidationError"
}

GET /api/v1/settings/website/seo/listings/{listing_id}/advisory ​

Listing Advisory

The Advisory: prioritised fixes from the last metadata check, plus a ready-to-paste LocalBusiness JSON-LD snippet.

Parameters

NameInRequiredTypeDescription
listing_idpathyesstring

200 — Successful Response

json
{
  "type": "object",
  "additionalProperties": true,
  "title": "Response Listing Advisory Api V1 Settings Website Seo Listings  Listing Id  Advisory Get"
}

422 — Validation Error

json
{
  "properties": {
    "detail": {
      "items": {
        "properties": {
          "loc": {
            "items": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "integer"
                }
              ]
            },
            "type": "array",
            "title": "Location"
          },
          "msg": {
            "type": "string",
            "title": "Message"
          },
          "type": {
            "type": "string",
            "title": "Error Type"
          }
        },
        "type": "object",
        "required": [
          "loc",
          "msg",
          "type"
        ],
        "title": "ValidationError"
      },
      "type": "array",
      "title": "Detail"
    }
  },
  "type": "object",
  "title": "HTTPValidationError"
}

PUT /api/v1/settings/website/seo/listings/{listing_id}/profile ​

Update Profile

Save the listing's Profile tab — text fields + logo/cover/gallery uploads.

Parameters

NameInRequiredTypeDescription
listing_idpathyesstring

200 — Successful Response

json
{
  "type": "object",
  "additionalProperties": true,
  "title": "Response Update Profile Api V1 Settings Website Seo Listings  Listing Id  Profile Put"
}

422 — Validation Error

json
{
  "properties": {
    "detail": {
      "items": {
        "properties": {
          "loc": {
            "items": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "integer"
                }
              ]
            },
            "type": "array",
            "title": "Location"
          },
          "msg": {
            "type": "string",
            "title": "Message"
          },
          "type": {
            "type": "string",
            "title": "Error Type"
          }
        },
        "type": "object",
        "required": [
          "loc",
          "msg",
          "type"
        ],
        "title": "ValidationError"
      },
      "type": "array",
      "title": "Detail"
    }
  },
  "type": "object",
  "title": "HTTPValidationError"
}

GET /api/v1/settings/website/seo/listings/{listing_id}/files/{file_id}/content ​

Listing File Content

Parameters

NameInRequiredTypeDescription
listing_idpathyesstring
file_idpathyesstring

200 — Successful Response

json
{}

422 — Validation Error

json
{
  "properties": {
    "detail": {
      "items": {
        "properties": {
          "loc": {
            "items": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "integer"
                }
              ]
            },
            "type": "array",
            "title": "Location"
          },
          "msg": {
            "type": "string",
            "title": "Message"
          },
          "type": {
            "type": "string",
            "title": "Error Type"
          }
        },
        "type": "object",
        "required": [
          "loc",
          "msg",
          "type"
        ],
        "title": "ValidationError"
      },
      "type": "array",
      "title": "Detail"
    }
  },
  "type": "object",
  "title": "HTTPValidationError"
}

GET /api/v1/settings/website/seo/listings/{listing_id}/reviews ​

List Reviews

Parameters

NameInRequiredTypeDescription
listing_idpathyesstring

200 — Successful Response

json
{
  "type": "array",
  "items": {
    "type": "object",
    "additionalProperties": true
  },
  "title": "Response List Reviews Api V1 Settings Website Seo Listings  Listing Id  Reviews Get"
}

422 — Validation Error

json
{
  "properties": {
    "detail": {
      "items": {
        "properties": {
          "loc": {
            "items": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "integer"
                }
              ]
            },
            "type": "array",
            "title": "Location"
          },
          "msg": {
            "type": "string",
            "title": "Message"
          },
          "type": {
            "type": "string",
            "title": "Error Type"
          }
        },
        "type": "object",
        "required": [
          "loc",
          "msg",
          "type"
        ],
        "title": "ValidationError"
      },
      "type": "array",
      "title": "Detail"
    }
  },
  "type": "object",
  "title": "HTTPValidationError"
}

POST /api/v1/settings/website/seo/listings/{listing_id}/reviews ​

Create Review

Parameters

NameInRequiredTypeDescription
listing_idpathyesstring

Request body

json
{
  "properties": {
    "reviewer_name": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Reviewer Name"
    },
    "rating": {
      "type": "integer",
      "maximum": 5,
      "minimum": 1,
      "title": "Rating"
    },
    "comment": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Comment"
    },
    "review_time": {
      "anyOf": [
        {
          "type": "string",
          "format": "date-time"
        },
        {
          "type": "null"
        }
      ],
      "title": "Review Time"
    }
  },
  "type": "object",
  "required": [
    "rating"
  ],
  "title": "ReviewIn"
}

201 — Successful Response

json
{
  "type": "object",
  "additionalProperties": true,
  "title": "Response Create Review Api V1 Settings Website Seo Listings  Listing Id  Reviews Post"
}

422 — Validation Error

json
{
  "properties": {
    "detail": {
      "items": {
        "properties": {
          "loc": {
            "items": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "integer"
                }
              ]
            },
            "type": "array",
            "title": "Location"
          },
          "msg": {
            "type": "string",
            "title": "Message"
          },
          "type": {
            "type": "string",
            "title": "Error Type"
          }
        },
        "type": "object",
        "required": [
          "loc",
          "msg",
          "type"
        ],
        "title": "ValidationError"
      },
      "type": "array",
      "title": "Detail"
    }
  },
  "type": "object",
  "title": "HTTPValidationError"
}

PATCH /api/v1/settings/website/seo/reviews/{review_id} ​

Update Review

Parameters

NameInRequiredTypeDescription
review_idpathyesstring

Request body

json
{
  "properties": {
    "reviewer_name": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Reviewer Name"
    },
    "rating": {
      "type": "integer",
      "maximum": 5,
      "minimum": 1,
      "title": "Rating"
    },
    "comment": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Comment"
    },
    "review_time": {
      "anyOf": [
        {
          "type": "string",
          "format": "date-time"
        },
        {
          "type": "null"
        }
      ],
      "title": "Review Time"
    }
  },
  "type": "object",
  "required": [
    "rating"
  ],
  "title": "ReviewIn"
}

200 — Successful Response

json
{
  "type": "object",
  "additionalProperties": true,
  "title": "Response Update Review Api V1 Settings Website Seo Reviews  Review Id  Patch"
}

422 — Validation Error

json
{
  "properties": {
    "detail": {
      "items": {
        "properties": {
          "loc": {
            "items": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "integer"
                }
              ]
            },
            "type": "array",
            "title": "Location"
          },
          "msg": {
            "type": "string",
            "title": "Message"
          },
          "type": {
            "type": "string",
            "title": "Error Type"
          }
        },
        "type": "object",
        "required": [
          "loc",
          "msg",
          "type"
        ],
        "title": "ValidationError"
      },
      "type": "array",
      "title": "Detail"
    }
  },
  "type": "object",
  "title": "HTTPValidationError"
}

DELETE /api/v1/settings/website/seo/reviews/{review_id} ​

Delete Review

Parameters

NameInRequiredTypeDescription
review_idpathyesstring

204 — Successful Response

422 — Validation Error

json
{
  "properties": {
    "detail": {
      "items": {
        "properties": {
          "loc": {
            "items": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "integer"
                }
              ]
            },
            "type": "array",
            "title": "Location"
          },
          "msg": {
            "type": "string",
            "title": "Message"
          },
          "type": {
            "type": "string",
            "title": "Error Type"
          }
        },
        "type": "object",
        "required": [
          "loc",
          "msg",
          "type"
        ],
        "title": "ValidationError"
      },
      "type": "array",
      "title": "Detail"
    }
  },
  "type": "object",
  "title": "HTTPValidationError"
}

POST /api/v1/settings/website/seo/reviews/{review_id}/draft-reply ​

Draft Reply

Draft a starter reply (heuristic templates, not an LLM).

Parameters

NameInRequiredTypeDescription
review_idpathyesstring

200 — Successful Response

json
{
  "type": "object",
  "additionalProperties": true,
  "title": "Response Draft Reply Api V1 Settings Website Seo Reviews  Review Id  Draft Reply Post"
}

422 — Validation Error

json
{
  "properties": {
    "detail": {
      "items": {
        "properties": {
          "loc": {
            "items": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "integer"
                }
              ]
            },
            "type": "array",
            "title": "Location"
          },
          "msg": {
            "type": "string",
            "title": "Message"
          },
          "type": {
            "type": "string",
            "title": "Error Type"
          }
        },
        "type": "object",
        "required": [
          "loc",
          "msg",
          "type"
        ],
        "title": "ValidationError"
      },
      "type": "array",
      "title": "Detail"
    }
  },
  "type": "object",
  "title": "HTTPValidationError"
}

POST /api/v1/settings/website/seo/reviews/{review_id}/reply ​

Post Reply

Save a reply. Manually-logged reviews have no live Google review to post to — this saves it locally (offer to copy/paste onto the real listing). Reviews synced from Google (source="google_api") post live via gbp_client.

Parameters

NameInRequiredTypeDescription
review_idpathyesstring

Request body

json
{
  "properties": {
    "reply_text": {
      "type": "string",
      "title": "Reply Text"
    }
  },
  "type": "object",
  "required": [
    "reply_text"
  ],
  "title": "Body_post_reply_api_v1_settings_website_seo_reviews__review_id__reply_post"
}

200 — Successful Response

json
{
  "type": "object",
  "additionalProperties": true,
  "title": "Response Post Reply Api V1 Settings Website Seo Reviews  Review Id  Reply Post"
}

422 — Validation Error

json
{
  "properties": {
    "detail": {
      "items": {
        "properties": {
          "loc": {
            "items": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "integer"
                }
              ]
            },
            "type": "array",
            "title": "Location"
          },
          "msg": {
            "type": "string",
            "title": "Message"
          },
          "type": {
            "type": "string",
            "title": "Error Type"
          }
        },
        "type": "object",
        "required": [
          "loc",
          "msg",
          "type"
        ],
        "title": "ValidationError"
      },
      "type": "array",
      "title": "Detail"
    }
  },
  "type": "object",
  "title": "HTTPValidationError"
}

POST /api/v1/settings/website/seo/listings/{listing_id}/reviews/sync ​

Sync Reviews

Pull reviews from Google (legacy v4 API) and upsert them locally.

Parameters

NameInRequiredTypeDescription
listing_idpathyesstring

200 — Successful Response

json
{
  "type": "object",
  "additionalProperties": true,
  "title": "Response Sync Reviews Api V1 Settings Website Seo Listings  Listing Id  Reviews Sync Post"
}

422 — Validation Error

json
{
  "properties": {
    "detail": {
      "items": {
        "properties": {
          "loc": {
            "items": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "integer"
                }
              ]
            },
            "type": "array",
            "title": "Location"
          },
          "msg": {
            "type": "string",
            "title": "Message"
          },
          "type": {
            "type": "string",
            "title": "Error Type"
          }
        },
        "type": "object",
        "required": [
          "loc",
          "msg",
          "type"
        ],
        "title": "ValidationError"
      },
      "type": "array",
      "title": "Detail"
    }
  },
  "type": "object",
  "title": "HTTPValidationError"
}

POST /api/v1/settings/website/seo/listings/{listing_id}/push ​

Push Listing To Gbp

Parameters

NameInRequiredTypeDescription
listing_idpathyesstring

200 — Successful Response

json
{
  "type": "object",
  "additionalProperties": true,
  "title": "Response Push Listing To Gbp Api V1 Settings Website Seo Listings  Listing Id  Push Post"
}

422 — Validation Error

json
{
  "properties": {
    "detail": {
      "items": {
        "properties": {
          "loc": {
            "items": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "integer"
                }
              ]
            },
            "type": "array",
            "title": "Location"
          },
          "msg": {
            "type": "string",
            "title": "Message"
          },
          "type": {
            "type": "string",
            "title": "Error Type"
          }
        },
        "type": "object",
        "required": [
          "loc",
          "msg",
          "type"
        ],
        "title": "ValidationError"
      },
      "type": "array",
      "title": "Detail"
    }
  },
  "type": "object",
  "title": "HTTPValidationError"
}

GET /api/v1/settings/website/seo/gbp/status ​

Gbp Status

200 — Successful Response

json
{
  "additionalProperties": true,
  "type": "object",
  "title": "Response Gbp Status Api V1 Settings Website Seo Gbp Status Get"
}

POST /api/v1/settings/website/seo/gbp/credentials ​

Gbp Save Credentials

Request body

json
{
  "properties": {
    "client_id": {
      "type": "string",
      "maxLength": 255,
      "minLength": 1,
      "title": "Client Id"
    },
    "client_secret": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Client Secret"
    },
    "redirect_uri": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Redirect Uri"
    }
  },
  "type": "object",
  "required": [
    "client_id"
  ],
  "title": "GbpCredentialsIn"
}

200 — Successful Response

json
{
  "additionalProperties": true,
  "type": "object",
  "title": "Response Gbp Save Credentials Api V1 Settings Website Seo Gbp Credentials Post"
}

422 — Validation Error

json
{
  "properties": {
    "detail": {
      "items": {
        "properties": {
          "loc": {
            "items": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "integer"
                }
              ]
            },
            "type": "array",
            "title": "Location"
          },
          "msg": {
            "type": "string",
            "title": "Message"
          },
          "type": {
            "type": "string",
            "title": "Error Type"
          }
        },
        "type": "object",
        "required": [
          "loc",
          "msg",
          "type"
        ],
        "title": "ValidationError"
      },
      "type": "array",
      "title": "Detail"
    }
  },
  "type": "object",
  "title": "HTTPValidationError"
}

GET /api/v1/settings/website/seo/gbp/auth-url ​

Gbp Auth Url

200 — Successful Response

json
{
  "additionalProperties": true,
  "type": "object",
  "title": "Response Gbp Auth Url Api V1 Settings Website Seo Gbp Auth Url Get"
}

POST /api/v1/settings/website/seo/gbp/disconnect ​

Gbp Disconnect

200 — Successful Response

json
{
  "additionalProperties": true,
  "type": "object",
  "title": "Response Gbp Disconnect Api V1 Settings Website Seo Gbp Disconnect Post"
}

GET /api/v1/settings/website/seo/gbp/locations ​

Gbp Locations

200 — Successful Response

json
{
  "additionalProperties": true,
  "type": "object",
  "title": "Response Gbp Locations Api V1 Settings Website Seo Gbp Locations Get"
}

Gbp Link

Request body

json
{
  "properties": {
    "listing_id": {
      "type": "string",
      "title": "Listing Id"
    },
    "location_name": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Location Name"
    },
    "account_name": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Account Name"
    }
  },
  "type": "object",
  "required": [
    "listing_id"
  ],
  "title": "GbpLinkIn"
}

200 — Successful Response

json
{
  "additionalProperties": true,
  "type": "object",
  "title": "Response Gbp Link Api V1 Settings Website Seo Gbp Link Post"
}

422 — Validation Error

json
{
  "properties": {
    "detail": {
      "items": {
        "properties": {
          "loc": {
            "items": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "integer"
                }
              ]
            },
            "type": "array",
            "title": "Location"
          },
          "msg": {
            "type": "string",
            "title": "Message"
          },
          "type": {
            "type": "string",
            "title": "Error Type"
          }
        },
        "type": "object",
        "required": [
          "loc",
          "msg",
          "type"
        ],
        "title": "ValidationError"
      },
      "type": "array",
      "title": "Detail"
    }
  },
  "type": "object",
  "title": "HTTPValidationError"
}

GET /api/v1/settings/website/seo/settings ​

Google Seo Settings

Read every Google SEO setting plus the live sign-in state. No secrets — each is reported as a has_* flag.

200 — Successful Response

json
{
  "additionalProperties": true,
  "type": "object",
  "title": "Response Google Seo Settings Api V1 Settings Website Seo Settings Get"
}

PUT /api/v1/settings/website/seo/settings ​

Save Google Seo Settings

Request body

json
{
  "properties": {
    "google": {
      "anyOf": [
        {
          "properties": {
            "client_id": {
              "type": "string",
              "title": "Client Id",
              "default": ""
            },
            "client_secret": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Client Secret"
            },
            "redirect_uri": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Redirect Uri"
            }
          },
          "type": "object",
          "title": "GoogleSeoGoogleIn"
        },
        {
          "type": "null"
        }
      ]
    },
    "pagespeed": {
      "anyOf": [
        {
          "properties": {
            "api_key": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Api Key"
            }
          },
          "type": "object",
          "title": "GoogleSeoPageSpeedIn"
        },
        {
          "type": "null"
        }
      ]
    },
    "dataforseo": {
      "anyOf": [
        {
          "properties": {
            "login": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Login"
            },
            "password": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Password"
            },
            "location": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Location"
            }
          },
          "type": "object",
          "title": "GoogleSeoDataForSeoIn"
        },
        {
          "type": "null"
        }
      ]
    },
    "openserp": {
      "anyOf": [
        {
          "properties": {
            "url": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Url"
            }
          },
          "type": "object",
          "title": "GoogleSeoOpenSerpIn"
        },
        {
          "type": "null"
        }
      ]
    }
  },
  "type": "object",
  "title": "GoogleSeoSettingsIn",
  "description": "Every section optional: the page saves one card at a time, and an\nomitted section must not clear the credentials it holds."
}

200 — Successful Response

json
{
  "additionalProperties": true,
  "type": "object",
  "title": "Response Save Google Seo Settings Api V1 Settings Website Seo Settings Put"
}

422 — Validation Error

json
{
  "properties": {
    "detail": {
      "items": {
        "properties": {
          "loc": {
            "items": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "integer"
                }
              ]
            },
            "type": "array",
            "title": "Location"
          },
          "msg": {
            "type": "string",
            "title": "Message"
          },
          "type": {
            "type": "string",
            "title": "Error Type"
          }
        },
        "type": "object",
        "required": [
          "loc",
          "msg",
          "type"
        ],
        "title": "ValidationError"
      },
      "type": "array",
      "title": "Detail"
    }
  },
  "type": "object",
  "title": "HTTPValidationError"
}

GET /api/v1/settings/website/seo/search-console/status ​

Search Console Status

Whether Search Console is usable, and which properties are reachable.

Shares the Business Profile connection (one Google account, one consent), so "not connected" here and there are the same state.

200 — Successful Response

json
{
  "additionalProperties": true,
  "type": "object",
  "title": "Response Search Console Status Api V1 Settings Website Seo Search Console Status Get"
}

POST /api/v1/settings/website/seo/search-console/sync ​

Search Console Sync

Pull Search Console data now (the daily job does this unattended).

Request body

json
{
  "properties": {
    "website_id": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Website Id"
    },
    "days": {
      "type": "integer",
      "maximum": 90,
      "minimum": 1,
      "title": "Days",
      "default": 14
    }
  },
  "type": "object",
  "title": "GscSyncIn"
}

200 — Successful Response

json
{
  "additionalProperties": true,
  "type": "object",
  "title": "Response Search Console Sync Api V1 Settings Website Seo Search Console Sync Post"
}

422 — Validation Error

json
{
  "properties": {
    "detail": {
      "items": {
        "properties": {
          "loc": {
            "items": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "integer"
                }
              ]
            },
            "type": "array",
            "title": "Location"
          },
          "msg": {
            "type": "string",
            "title": "Message"
          },
          "type": {
            "type": "string",
            "title": "Error Type"
          }
        },
        "type": "object",
        "required": [
          "loc",
          "msg",
          "type"
        ],
        "title": "ValidationError"
      },
      "type": "array",
      "title": "Detail"
    }
  },
  "type": "object",
  "title": "HTTPValidationError"
}

GET /api/v1/settings/website/seo/search-console/summary ​

Search Console Summary

Headline totals for the period, against the period before it.

Parameters

NameInRequiredTypeDescription
website_idqueryno
daysquerynointeger

200 — Successful Response

json
{
  "type": "object",
  "additionalProperties": true,
  "title": "Response Search Console Summary Api V1 Settings Website Seo Search Console Summary Get"
}

422 — Validation Error

json
{
  "properties": {
    "detail": {
      "items": {
        "properties": {
          "loc": {
            "items": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "integer"
                }
              ]
            },
            "type": "array",
            "title": "Location"
          },
          "msg": {
            "type": "string",
            "title": "Message"
          },
          "type": {
            "type": "string",
            "title": "Error Type"
          }
        },
        "type": "object",
        "required": [
          "loc",
          "msg",
          "type"
        ],
        "title": "ValidationError"
      },
      "type": "array",
      "title": "Detail"
    }
  },
  "type": "object",
  "title": "HTTPValidationError"
}

GET /api/v1/settings/website/seo/search-console/daily ​

Search Console Daily

The per-day series behind the chart.

Parameters

NameInRequiredTypeDescription
website_idqueryno
daysquerynointeger

200 — Successful Response

json
{
  "type": "array",
  "items": {
    "type": "object",
    "additionalProperties": true
  },
  "title": "Response Search Console Daily Api V1 Settings Website Seo Search Console Daily Get"
}

422 — Validation Error

json
{
  "properties": {
    "detail": {
      "items": {
        "properties": {
          "loc": {
            "items": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "integer"
                }
              ]
            },
            "type": "array",
            "title": "Location"
          },
          "msg": {
            "type": "string",
            "title": "Message"
          },
          "type": {
            "type": "string",
            "title": "Error Type"
          }
        },
        "type": "object",
        "required": [
          "loc",
          "msg",
          "type"
        ],
        "title": "ValidationError"
      },
      "type": "array",
      "title": "Detail"
    }
  },
  "type": "object",
  "title": "HTTPValidationError"
}

GET /api/v1/settings/website/seo/search-console/queries ​

Search Console Queries

Queries the site was shown for.

order=opportunity returns the ones sitting just off page 1 with real impressions — where Google already rates the site and a small push wins traffic. That view is the reason this data is worth ingesting.

Parameters

NameInRequiredTypeDescription
website_idqueryno
daysquerynointeger
orderquerynostring
limitquerynointeger

200 — Successful Response

json
{
  "type": "array",
  "items": {
    "type": "object",
    "additionalProperties": true
  },
  "title": "Response Search Console Queries Api V1 Settings Website Seo Search Console Queries Get"
}

422 — Validation Error

json
{
  "properties": {
    "detail": {
      "items": {
        "properties": {
          "loc": {
            "items": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "integer"
                }
              ]
            },
            "type": "array",
            "title": "Location"
          },
          "msg": {
            "type": "string",
            "title": "Message"
          },
          "type": {
            "type": "string",
            "title": "Error Type"
          }
        },
        "type": "object",
        "required": [
          "loc",
          "msg",
          "type"
        ],
        "title": "ValidationError"
      },
      "type": "array",
      "title": "Detail"
    }
  },
  "type": "object",
  "title": "HTTPValidationError"
}

POST /api/v1/settings/website/seo/search-console/promote ​

Promote Queries

Start tracking discovered queries as real keywords.

Discovered queries deliberately live in their own table — a busy site discloses thousands and folding them into tracked keywords would wreck both the Keywords page and the quota. Promotion is therefore an explicit choice, and it is charged against the keyword quota like any other addition.

Request body

json
{
  "properties": {
    "website_id": {
      "type": "string",
      "title": "Website Id"
    },
    "queries": {
      "items": {
        "type": "string"
      },
      "type": "array",
      "title": "Queries"
    }
  },
  "type": "object",
  "required": [
    "website_id",
    "queries"
  ],
  "title": "PromoteQueryIn"
}

200 — Successful Response

json
{
  "additionalProperties": true,
  "type": "object",
  "title": "Response Promote Queries Api V1 Settings Website Seo Search Console Promote Post"
}

422 — Validation Error

json
{
  "properties": {
    "detail": {
      "items": {
        "properties": {
          "loc": {
            "items": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "integer"
                }
              ]
            },
            "type": "array",
            "title": "Location"
          },
          "msg": {
            "type": "string",
            "title": "Message"
          },
          "type": {
            "type": "string",
            "title": "Error Type"
          }
        },
        "type": "object",
        "required": [
          "loc",
          "msg",
          "type"
        ],
        "title": "ValidationError"
      },
      "type": "array",
      "title": "Detail"
    }
  },
  "type": "object",
  "title": "HTTPValidationError"
}

GET /api/v1/settings/website/seo/search-console/sitemaps ​

Search Console Sitemaps

Parameters

NameInRequiredTypeDescription
website_idqueryno

200 — Successful Response

json
{
  "type": "array",
  "items": {
    "type": "object",
    "additionalProperties": true
  },
  "title": "Response Search Console Sitemaps Api V1 Settings Website Seo Search Console Sitemaps Get"
}

422 — Validation Error

json
{
  "properties": {
    "detail": {
      "items": {
        "properties": {
          "loc": {
            "items": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "integer"
                }
              ]
            },
            "type": "array",
            "title": "Location"
          },
          "msg": {
            "type": "string",
            "title": "Message"
          },
          "type": {
            "type": "string",
            "title": "Error Type"
          }
        },
        "type": "object",
        "required": [
          "loc",
          "msg",
          "type"
        ],
        "title": "ValidationError"
      },
      "type": "array",
      "title": "Detail"
    }
  },
  "type": "object",
  "title": "HTTPValidationError"
}

GET /api/v1/settings/website/seo/audit/projects ​

List Audit Projects

200 — Successful Response

json
{
  "items": {
    "additionalProperties": true,
    "type": "object"
  },
  "type": "array",
  "title": "Response List Audit Projects Api V1 Settings Website Seo Audit Projects Get"
}

POST /api/v1/settings/website/seo/audit/projects ​

Create Audit Project

Request body

json
{
  "properties": {
    "website_id": {
      "type": "string",
      "title": "Website Id"
    },
    "name": {
      "type": "string",
      "maxLength": 255,
      "minLength": 1,
      "title": "Name"
    },
    "max_pages": {
      "type": "integer",
      "maximum": 2000,
      "minimum": 1,
      "title": "Max Pages",
      "default": 200
    },
    "exclude_paths": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Exclude Paths"
    },
    "exclude_extensions": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Exclude Extensions"
    },
    "sitemap_url": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Sitemap Url"
    },
    "check_broken_links": {
      "type": "boolean",
      "title": "Check Broken Links",
      "default": true
    },
    "store_page_links": {
      "type": "boolean",
      "title": "Store Page Links",
      "default": true
    },
    "cron": {
      "type": "boolean",
      "title": "Cron",
      "default": true
    }
  },
  "type": "object",
  "required": [
    "website_id",
    "name"
  ],
  "title": "AuditProjectIn"
}

201 — Successful Response

json
{
  "additionalProperties": true,
  "type": "object",
  "title": "Response Create Audit Project Api V1 Settings Website Seo Audit Projects Post"
}

422 — Validation Error

json
{
  "properties": {
    "detail": {
      "items": {
        "properties": {
          "loc": {
            "items": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "integer"
                }
              ]
            },
            "type": "array",
            "title": "Location"
          },
          "msg": {
            "type": "string",
            "title": "Message"
          },
          "type": {
            "type": "string",
            "title": "Error Type"
          }
        },
        "type": "object",
        "required": [
          "loc",
          "msg",
          "type"
        ],
        "title": "ValidationError"
      },
      "type": "array",
      "title": "Detail"
    }
  },
  "type": "object",
  "title": "HTTPValidationError"
}

PATCH /api/v1/settings/website/seo/audit/projects/{project_id} ​

Update Audit Project

Parameters

NameInRequiredTypeDescription
project_idpathyesstring

Request body

json
{
  "properties": {
    "website_id": {
      "type": "string",
      "title": "Website Id"
    },
    "name": {
      "type": "string",
      "maxLength": 255,
      "minLength": 1,
      "title": "Name"
    },
    "max_pages": {
      "type": "integer",
      "maximum": 2000,
      "minimum": 1,
      "title": "Max Pages",
      "default": 200
    },
    "exclude_paths": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Exclude Paths"
    },
    "exclude_extensions": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Exclude Extensions"
    },
    "sitemap_url": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Sitemap Url"
    },
    "check_broken_links": {
      "type": "boolean",
      "title": "Check Broken Links",
      "default": true
    },
    "store_page_links": {
      "type": "boolean",
      "title": "Store Page Links",
      "default": true
    },
    "cron": {
      "type": "boolean",
      "title": "Cron",
      "default": true
    }
  },
  "type": "object",
  "required": [
    "website_id",
    "name"
  ],
  "title": "AuditProjectIn"
}

200 — Successful Response

json
{
  "type": "object",
  "additionalProperties": true,
  "title": "Response Update Audit Project Api V1 Settings Website Seo Audit Projects  Project Id  Patch"
}

422 — Validation Error

json
{
  "properties": {
    "detail": {
      "items": {
        "properties": {
          "loc": {
            "items": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "integer"
                }
              ]
            },
            "type": "array",
            "title": "Location"
          },
          "msg": {
            "type": "string",
            "title": "Message"
          },
          "type": {
            "type": "string",
            "title": "Error Type"
          }
        },
        "type": "object",
        "required": [
          "loc",
          "msg",
          "type"
        ],
        "title": "ValidationError"
      },
      "type": "array",
      "title": "Detail"
    }
  },
  "type": "object",
  "title": "HTTPValidationError"
}

DELETE /api/v1/settings/website/seo/audit/projects/{project_id} ​

Delete Audit Project

Parameters

NameInRequiredTypeDescription
project_idpathyesstring

204 — Successful Response

422 — Validation Error

json
{
  "properties": {
    "detail": {
      "items": {
        "properties": {
          "loc": {
            "items": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "integer"
                }
              ]
            },
            "type": "array",
            "title": "Location"
          },
          "msg": {
            "type": "string",
            "title": "Message"
          },
          "type": {
            "type": "string",
            "title": "Error Type"
          }
        },
        "type": "object",
        "required": [
          "loc",
          "msg",
          "type"
        ],
        "title": "ValidationError"
      },
      "type": "array",
      "title": "Detail"
    }
  },
  "type": "object",
  "title": "HTTPValidationError"
}

POST /api/v1/settings/website/seo/audit/projects/{project_id}/run ​

Run Audit Project

Start a crawl of the project's website. Returns as soon as it is running.

It used to run INLINE and return the finished summary, which worked only for a site small enough to crawl in two minutes. Past that, nginx's proxy_read_timeout 120 (conf.d/portal-lubb.conf) cut the POST and handed the browser a 504 — and the SPA treats 502/503/504 as ServerUnavailableError, so a slow audit did not merely fail, it threw the whole portal onto the "server is restarting" page (lib/api-client.ts + main.tsx). Longer still and Postgres killed the session's connection for idling in a transaction and the crawl's results were lost outright.

So the crawl is a background task now and this endpoint only starts it. The client polls GET /audit/projects: running says a crawl is in flight, and last_run_at/score/last_error carry the outcome.

Parameters

NameInRequiredTypeDescription
project_idpathyesstring

202 — Successful Response

json
{
  "type": "object",
  "additionalProperties": true,
  "title": "Response Run Audit Project Api V1 Settings Website Seo Audit Projects  Project Id  Run Post"
}

422 — Validation Error

json
{
  "properties": {
    "detail": {
      "items": {
        "properties": {
          "loc": {
            "items": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "integer"
                }
              ]
            },
            "type": "array",
            "title": "Location"
          },
          "msg": {
            "type": "string",
            "title": "Message"
          },
          "type": {
            "type": "string",
            "title": "Error Type"
          }
        },
        "type": "object",
        "required": [
          "loc",
          "msg",
          "type"
        ],
        "title": "ValidationError"
      },
      "type": "array",
      "title": "Detail"
    }
  },
  "type": "object",
  "title": "HTTPValidationError"
}

GET /api/v1/settings/website/seo/audit/projects/{project_id}/pages ​

List Audit Pages

Parameters

NameInRequiredTypeDescription
project_idpathyesstring
issuequeryno
limitquerynointeger

200 — Successful Response

json
{
  "type": "array",
  "items": {
    "type": "object",
    "additionalProperties": true
  },
  "title": "Response List Audit Pages Api V1 Settings Website Seo Audit Projects  Project Id  Pages Get"
}

422 — Validation Error

json
{
  "properties": {
    "detail": {
      "items": {
        "properties": {
          "loc": {
            "items": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "integer"
                }
              ]
            },
            "type": "array",
            "title": "Location"
          },
          "msg": {
            "type": "string",
            "title": "Message"
          },
          "type": {
            "type": "string",
            "title": "Error Type"
          }
        },
        "type": "object",
        "required": [
          "loc",
          "msg",
          "type"
        ],
        "title": "ValidationError"
      },
      "type": "array",
      "title": "Detail"
    }
  },
  "type": "object",
  "title": "HTTPValidationError"
}

GET /api/v1/settings/website/seo/audit/projects/{project_id}/fix-preview ​

Audit Fix Preview

How many audited pages "Fix all" can actually edit, and how many it cannot.

Read by the button so it can say what it is about to do to a live public website before it does it, and so a site this install does not host says so up front (target_site null + a reason) instead of after a run that changed nothing.

Parameters

NameInRequiredTypeDescription
project_idpathyesstring

200 — Successful Response

json
{
  "type": "object",
  "additionalProperties": true,
  "title": "Response Audit Fix Preview Api V1 Settings Website Seo Audit Projects  Project Id  Fix Preview Get"
}

422 — Validation Error

json
{
  "properties": {
    "detail": {
      "items": {
        "properties": {
          "loc": {
            "items": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "integer"
                }
              ]
            },
            "type": "array",
            "title": "Location"
          },
          "msg": {
            "type": "string",
            "title": "Message"
          },
          "type": {
            "type": "string",
            "title": "Error Type"
          }
        },
        "type": "object",
        "required": [
          "loc",
          "msg",
          "type"
        ],
        "title": "ValidationError"
      },
      "type": "array",
      "title": "Detail"
    }
  },
  "type": "object",
  "title": "HTTPValidationError"
}

POST /api/v1/settings/website/seo/audit/projects/{project_id}/fix ​

Audit Fix All

Write corrected titles and meta descriptions to the live site.

Background, and returns as soon as it is running — same reason the crawl is (see :func:run_audit_project): the pass is dozens of language-model round trips plus dozens of cross-database writes, and nginx cuts the POST at 120 seconds with a 504 the SPA renders as "the server is restarting".

Only seo_title/seo_description override columns are written, never the visible copy those values are derived from; see app.apps.instances.services.website_seo_audit_fix's module docstring.

Parameters

NameInRequiredTypeDescription
project_idpathyesstring

202 — Successful Response

json
{
  "type": "object",
  "additionalProperties": true,
  "title": "Response Audit Fix All Api V1 Settings Website Seo Audit Projects  Project Id  Fix Post"
}

422 — Validation Error

json
{
  "properties": {
    "detail": {
      "items": {
        "properties": {
          "loc": {
            "items": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "integer"
                }
              ]
            },
            "type": "array",
            "title": "Location"
          },
          "msg": {
            "type": "string",
            "title": "Message"
          },
          "type": {
            "type": "string",
            "title": "Error Type"
          }
        },
        "type": "object",
        "required": [
          "loc",
          "msg",
          "type"
        ],
        "title": "ValidationError"
      },
      "type": "array",
      "title": "Detail"
    }
  },
  "type": "object",
  "title": "HTTPValidationError"
}

POST /api/v1/settings/website/seo/audit/fixes/{fix_id}/undo ​

Audit Fix Undo

Put one fixed field back to what was live before Fix all wrote it.

Synchronous — it is a single UPDATE of a single column, with the value already recorded — so the row can flip to "reverted" in the same click.

Parameters

NameInRequiredTypeDescription
fix_idpathyesstring

200 — Successful Response

json
{
  "type": "object",
  "additionalProperties": true,
  "title": "Response Audit Fix Undo Api V1 Settings Website Seo Audit Fixes  Fix Id  Undo Post"
}

422 — Validation Error

json
{
  "properties": {
    "detail": {
      "items": {
        "properties": {
          "loc": {
            "items": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "integer"
                }
              ]
            },
            "type": "array",
            "title": "Location"
          },
          "msg": {
            "type": "string",
            "title": "Message"
          },
          "type": {
            "type": "string",
            "title": "Error Type"
          }
        },
        "type": "object",
        "required": [
          "loc",
          "msg",
          "type"
        ],
        "title": "ValidationError"
      },
      "type": "array",
      "title": "Detail"
    }
  },
  "type": "object",
  "title": "HTTPValidationError"
}

GET /api/v1/settings/website/seo/audit/projects/{project_id}/duplicates ​

Audit Duplicates

Pages sharing a title or description — invisible one page at a time, and the most common finding on a template-built website.

Parameters

NameInRequiredTypeDescription
project_idpathyesstring

200 — Successful Response

json
{
  "type": "object",
  "additionalProperties": true,
  "title": "Response Audit Duplicates Api V1 Settings Website Seo Audit Projects  Project Id  Duplicates Get"
}

422 — Validation Error

json
{
  "properties": {
    "detail": {
      "items": {
        "properties": {
          "loc": {
            "items": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "integer"
                }
              ]
            },
            "type": "array",
            "title": "Location"
          },
          "msg": {
            "type": "string",
            "title": "Message"
          },
          "type": {
            "type": "string",
            "title": "Error Type"
          }
        },
        "type": "object",
        "required": [
          "loc",
          "msg",
          "type"
        ],
        "title": "ValidationError"
      },
      "type": "array",
      "title": "Detail"
    }
  },
  "type": "object",
  "title": "HTTPValidationError"
}

Audit Broken Links

Parameters

NameInRequiredTypeDescription
project_idpathyesstring
limitquerynointeger

200 — Successful Response

json
{
  "type": "array",
  "items": {
    "type": "object",
    "additionalProperties": true
  },
  "title": "Response Audit Broken Links Api V1 Settings Website Seo Audit Projects  Project Id  Broken Links Get"
}

422 — Validation Error

json
{
  "properties": {
    "detail": {
      "items": {
        "properties": {
          "loc": {
            "items": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "integer"
                }
              ]
            },
            "type": "array",
            "title": "Location"
          },
          "msg": {
            "type": "string",
            "title": "Message"
          },
          "type": {
            "type": "string",
            "title": "Error Type"
          }
        },
        "type": "object",
        "required": [
          "loc",
          "msg",
          "type"
        ],
        "title": "ValidationError"
      },
      "type": "array",
      "title": "Detail"
    }
  },
  "type": "object",
  "title": "HTTPValidationError"
}

GET /api/v1/settings/website/seo/pagespeed ​

List Pagespeed

Parameters

NameInRequiredTypeDescription
website_idqueryno
daysquerynointeger

200 — Successful Response

json
{
  "type": "array",
  "items": {
    "type": "object",
    "additionalProperties": true
  },
  "title": "Response List Pagespeed Api V1 Settings Website Seo Pagespeed Get"
}

422 — Validation Error

json
{
  "properties": {
    "detail": {
      "items": {
        "properties": {
          "loc": {
            "items": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "integer"
                }
              ]
            },
            "type": "array",
            "title": "Location"
          },
          "msg": {
            "type": "string",
            "title": "Message"
          },
          "type": {
            "type": "string",
            "title": "Error Type"
          }
        },
        "type": "object",
        "required": [
          "loc",
          "msg",
          "type"
        ],
        "title": "ValidationError"
      },
      "type": "array",
      "title": "Detail"
    }
  },
  "type": "object",
  "title": "HTTPValidationError"
}

POST /api/v1/settings/website/seo/pagespeed/run ​

Run Pagespeed

Request body

json
{
  "properties": {
    "website_id": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Website Id"
    }
  },
  "type": "object",
  "title": "PageSpeedRunIn"
}

200 — Successful Response

json
{
  "additionalProperties": true,
  "type": "object",
  "title": "Response Run Pagespeed Api V1 Settings Website Seo Pagespeed Run Post"
}

422 — Validation Error

json
{
  "properties": {
    "detail": {
      "items": {
        "properties": {
          "loc": {
            "items": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "integer"
                }
              ]
            },
            "type": "array",
            "title": "Location"
          },
          "msg": {
            "type": "string",
            "title": "Message"
          },
          "type": {
            "type": "string",
            "title": "Error Type"
          }
        },
        "type": "object",
        "required": [
          "loc",
          "msg",
          "type"
        ],
        "title": "ValidationError"
      },
      "type": "array",
      "title": "Detail"
    }
  },
  "type": "object",
  "title": "HTTPValidationError"
}

GET /api/v1/settings/website/seo/alerts ​

List Alerts

Parameters

NameInRequiredTypeDescription
unread_onlyquerynoboolean
categoryqueryno
limitquerynointeger

200 — Successful Response

json
{
  "type": "object",
  "additionalProperties": true,
  "title": "Response List Alerts Api V1 Settings Website Seo Alerts Get"
}

422 — Validation Error

json
{
  "properties": {
    "detail": {
      "items": {
        "properties": {
          "loc": {
            "items": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "integer"
                }
              ]
            },
            "type": "array",
            "title": "Location"
          },
          "msg": {
            "type": "string",
            "title": "Message"
          },
          "type": {
            "type": "string",
            "title": "Error Type"
          }
        },
        "type": "object",
        "required": [
          "loc",
          "msg",
          "type"
        ],
        "title": "ValidationError"
      },
      "type": "array",
      "title": "Detail"
    }
  },
  "type": "object",
  "title": "HTTPValidationError"
}

POST /api/v1/settings/website/seo/alerts/generate ​

Generate Alerts

Evaluate the alert rules now (the daily pass does this unattended).

200 — Successful Response

json
{
  "additionalProperties": true,
  "type": "object",
  "title": "Response Generate Alerts Api V1 Settings Website Seo Alerts Generate Post"
}

POST /api/v1/settings/website/seo/alerts/read ​

Read Alerts

Request body

json
{
  "properties": {
    "alert_ids": {
      "anyOf": [
        {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        {
          "type": "null"
        }
      ],
      "title": "Alert Ids"
    }
  },
  "type": "object",
  "title": "AlertReadIn"
}

200 — Successful Response

json
{
  "additionalProperties": true,
  "type": "object",
  "title": "Response Read Alerts Api V1 Settings Website Seo Alerts Read Post"
}

422 — Validation Error

json
{
  "properties": {
    "detail": {
      "items": {
        "properties": {
          "loc": {
            "items": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "integer"
                }
              ]
            },
            "type": "array",
            "title": "Location"
          },
          "msg": {
            "type": "string",
            "title": "Message"
          },
          "type": {
            "type": "string",
            "title": "Error Type"
          }
        },
        "type": "object",
        "required": [
          "loc",
          "msg",
          "type"
        ],
        "title": "ValidationError"
      },
      "type": "array",
      "title": "Detail"
    }
  },
  "type": "object",
  "title": "HTTPValidationError"
}

GET /api/v1/settings/website/seo/reports/settings ​

Get Report Settings

200 — Successful Response

json
{
  "additionalProperties": true,
  "type": "object",
  "title": "Response Get Report Settings Api V1 Settings Website Seo Reports Settings Get"
}

PUT /api/v1/settings/website/seo/reports/settings ​

Save Report Settings

Request body

json
{
  "properties": {
    "enabled": {
      "type": "boolean",
      "title": "Enabled",
      "default": false
    },
    "interval": {
      "type": "string",
      "pattern": "^(weekly|monthly)$",
      "title": "Interval",
      "default": "monthly"
    },
    "recipients": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Recipients"
    }
  },
  "type": "object",
  "title": "ReportSettingsIn"
}

200 — Successful Response

json
{
  "additionalProperties": true,
  "type": "object",
  "title": "Response Save Report Settings Api V1 Settings Website Seo Reports Settings Put"
}

422 — Validation Error

json
{
  "properties": {
    "detail": {
      "items": {
        "properties": {
          "loc": {
            "items": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "integer"
                }
              ]
            },
            "type": "array",
            "title": "Location"
          },
          "msg": {
            "type": "string",
            "title": "Message"
          },
          "type": {
            "type": "string",
            "title": "Error Type"
          }
        },
        "type": "object",
        "required": [
          "loc",
          "msg",
          "type"
        ],
        "title": "ValidationError"
      },
      "type": "array",
      "title": "Detail"
    }
  },
  "type": "object",
  "title": "HTTPValidationError"
}

GET /api/v1/settings/website/seo/reports/preview ​

Preview Report

The report's data, so the page can render it before anything is emailed.

Parameters

NameInRequiredTypeDescription
daysquerynointeger

200 — Successful Response

json
{
  "type": "object",
  "additionalProperties": true,
  "title": "Response Preview Report Api V1 Settings Website Seo Reports Preview Get"
}

422 — Validation Error

json
{
  "properties": {
    "detail": {
      "items": {
        "properties": {
          "loc": {
            "items": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "integer"
                }
              ]
            },
            "type": "array",
            "title": "Location"
          },
          "msg": {
            "type": "string",
            "title": "Message"
          },
          "type": {
            "type": "string",
            "title": "Error Type"
          }
        },
        "type": "object",
        "required": [
          "loc",
          "msg",
          "type"
        ],
        "title": "ValidationError"
      },
      "type": "array",
      "title": "Detail"
    }
  },
  "type": "object",
  "title": "HTTPValidationError"
}

GET /api/v1/settings/website/seo/reports/preview.html ​

Preview Report Html

Exactly the HTML the email carries — the only honest way to check it.

Parameters

NameInRequiredTypeDescription
daysquerynointeger

200 — Successful Response

422 — Validation Error

json
{
  "properties": {
    "detail": {
      "items": {
        "properties": {
          "loc": {
            "items": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "integer"
                }
              ]
            },
            "type": "array",
            "title": "Location"
          },
          "msg": {
            "type": "string",
            "title": "Message"
          },
          "type": {
            "type": "string",
            "title": "Error Type"
          }
        },
        "type": "object",
        "required": [
          "loc",
          "msg",
          "type"
        ],
        "title": "ValidationError"
      },
      "type": "array",
      "title": "Detail"
    }
  },
  "type": "object",
  "title": "HTTPValidationError"
}

POST /api/v1/settings/website/seo/reports/send ​

Send Report Now

Request body

json
{
  "anyOf": [
    {
      "properties": {
        "recipients": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Recipients"
        }
      },
      "type": "object",
      "title": "SendReportIn",
      "description": "Recipients for a one-off send, comma-separated.\n\nOptional: omitted (or blank) falls back to the saved row, which is what the\nscheduled send uses. It exists because \"Send one now\" sits next to an\neditable recipients box, and the page enabled that button off the box's\nLOCAL value while the server only ever read the SAVED one — so typing an\naddress and sending without pressing Save first failed with \"No recipients\nconfigured\" against a visibly non-empty field. Sending what is on screen is\nwhat the button claims to do."
    },
    {
      "type": "null"
    }
  ],
  "title": "Body"
}

200 — Successful Response

json
{
  "additionalProperties": true,
  "type": "object",
  "title": "Response Send Report Now Api V1 Settings Website Seo Reports Send Post"
}

422 — Validation Error

json
{
  "properties": {
    "detail": {
      "items": {
        "properties": {
          "loc": {
            "items": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "integer"
                }
              ]
            },
            "type": "array",
            "title": "Location"
          },
          "msg": {
            "type": "string",
            "title": "Message"
          },
          "type": {
            "type": "string",
            "title": "Error Type"
          }
        },
        "type": "object",
        "required": [
          "loc",
          "msg",
          "type"
        ],
        "title": "ValidationError"
      },
      "type": "array",
      "title": "Detail"
    }
  },
  "type": "object",
  "title": "HTTPValidationError"
}

POST /api/v1/settings/website/seo/listings/{listing_id}/reviews/fetch ​

Fetch Reviews Dfs

Queue a review pull that needs no Google consent.

The GBP path (/listings/{id}/reviews/sync) requires both customer OAuth and legacy v4 API access Google closed to new projects in 2020, so for most sites it returns nothing, ever. This reads the same public reviews from a URL or business name instead — which is why the Reviews tab can have content before anyone connects anything.

Parameters

NameInRequiredTypeDescription
listing_idpathyesstring

Request body

json
{
  "properties": {
    "platform": {
      "type": "string",
      "pattern": "^(google|trustpilot)$",
      "title": "Platform",
      "default": "google"
    }
  },
  "type": "object",
  "title": "ReviewFetchIn"
}

200 — Successful Response

json
{
  "type": "object",
  "additionalProperties": true,
  "title": "Response Fetch Reviews Dfs Api V1 Settings Website Seo Listings  Listing Id  Reviews Fetch Post"
}

422 — Validation Error

json
{
  "properties": {
    "detail": {
      "items": {
        "properties": {
          "loc": {
            "items": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "integer"
                }
              ]
            },
            "type": "array",
            "title": "Location"
          },
          "msg": {
            "type": "string",
            "title": "Message"
          },
          "type": {
            "type": "string",
            "title": "Error Type"
          }
        },
        "type": "object",
        "required": [
          "loc",
          "msg",
          "type"
        ],
        "title": "ValidationError"
      },
      "type": "array",
      "title": "Detail"
    }
  },
  "type": "object",
  "title": "HTTPValidationError"
}

POST /api/v1/settings/website/seo/reviews/collect ​

Collect Reviews Dfs

Collect any finished review tasks now.

200 — Successful Response

json
{
  "additionalProperties": true,
  "type": "object",
  "title": "Response Collect Reviews Dfs Api V1 Settings Website Seo Reviews Collect Post"
}

GET /api/v1/settings/website/seo/crawl-log ​

Get Crawl Log

Every outbound fetch made for this site.

The answer to "the check ran but found nothing" — a CAPTCHA'd scraper, an out-of-credit API and a genuinely unranked keyword used to be indistinguishable from the outside.

Parameters

NameInRequiredTypeDescription
crawl_typequeryno
only_failuresquerynoboolean
limitquerynointeger

200 — Successful Response

json
{
  "type": "array",
  "items": {
    "type": "object",
    "additionalProperties": true
  },
  "title": "Response Get Crawl Log Api V1 Settings Website Seo Crawl Log Get"
}

422 — Validation Error

json
{
  "properties": {
    "detail": {
      "items": {
        "properties": {
          "loc": {
            "items": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "integer"
                }
              ]
            },
            "type": "array",
            "title": "Location"
          },
          "msg": {
            "type": "string",
            "title": "Message"
          },
          "type": {
            "type": "string",
            "title": "Error Type"
          }
        },
        "type": "object",
        "required": [
          "loc",
          "msg",
          "type"
        ],
        "title": "ValidationError"
      },
      "type": "array",
      "title": "Detail"
    }
  },
  "type": "object",
  "title": "HTTPValidationError"
}

GET /api/v1/settings/website/seo/quota ​

Get Quota

200 — Successful Response

json
{
  "additionalProperties": true,
  "type": "object",
  "title": "Response Get Quota Api V1 Settings Website Seo Quota Get"
}

PUT /api/v1/settings/website/seo/quota ​

Save Quota

Set this site's caps. A null field clears back to the default.

Request body

json
{
  "properties": {
    "max_websites": {
      "anyOf": [
        {
          "type": "integer"
        },
        {
          "type": "null"
        }
      ],
      "title": "Max Websites"
    },
    "max_keywords": {
      "anyOf": [
        {
          "type": "integer"
        },
        {
          "type": "null"
        }
      ],
      "title": "Max Keywords"
    },
    "max_audit_pages": {
      "anyOf": [
        {
          "type": "integer"
        },
        {
          "type": "null"
        }
      ],
      "title": "Max Audit Pages"
    },
    "max_monthly_serp_checks": {
      "anyOf": [
        {
          "type": "integer"
        },
        {
          "type": "null"
        }
      ],
      "title": "Max Monthly Serp Checks"
    }
  },
  "type": "object",
  "title": "Body_save_quota_api_v1_settings_website_seo_quota_put"
}

200 — Successful Response

json
{
  "additionalProperties": true,
  "type": "object",
  "title": "Response Save Quota Api V1 Settings Website Seo Quota Put"
}

422 — Validation Error

json
{
  "properties": {
    "detail": {
      "items": {
        "properties": {
          "loc": {
            "items": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "integer"
                }
              ]
            },
            "type": "array",
            "title": "Location"
          },
          "msg": {
            "type": "string",
            "title": "Message"
          },
          "type": {
            "type": "string",
            "title": "Error Type"
          }
        },
        "type": "object",
        "required": [
          "loc",
          "msg",
          "type"
        ],
        "title": "ValidationError"
      },
      "type": "array",
      "title": "Detail"
    }
  },
  "type": "object",
  "title": "HTTPValidationError"
}

GET /api/v1/settings/website/seo/providers/status ​

Providers Status

Health of everything this feature depends on, in one call.

DataForSEO is deliberately NOT reported here. It is the paid ALTERNATIVE to OpenSERP for rank checks, not a requirement, and no site on this instance uses it — so its "not configured" status rendered as a red error on a page whose whole job is to say what is broken. Its credit balance (seo_rank.account_balance) is still worth surfacing next to a paid run if the provider is ever adopted; it just is not a health signal until then.

200 — Successful Response

json
{
  "additionalProperties": true,
  "type": "object",
  "title": "Response Providers Status Api V1 Settings Website Seo Providers Status Get"
}

GET /api/v1/settings/website/seo/gbp/callback ​

Gbp Callback

Parameters

NameInRequiredTypeDescription
codequerynostring
statequerynostring
errorquerynostring

200 — Successful Response

json
{}

422 — Validation Error

json
{
  "properties": {
    "detail": {
      "items": {
        "properties": {
          "loc": {
            "items": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "integer"
                }
              ]
            },
            "type": "array",
            "title": "Location"
          },
          "msg": {
            "type": "string",
            "title": "Message"
          },
          "type": {
            "type": "string",
            "title": "Error Type"
          }
        },
        "type": "object",
        "required": [
          "loc",
          "msg",
          "type"
        ],
        "title": "ValidationError"
      },
      "type": "array",
      "title": "Detail"
    }
  },
  "type": "object",
  "title": "HTTPValidationError"
}

GET /api/v1/google/gbp/callback ​

Gbp Callback

Parameters

NameInRequiredTypeDescription
codequerynostring
statequerynostring
errorquerynostring

200 — Successful Response

json
{}

422 — Validation Error

json
{
  "properties": {
    "detail": {
      "items": {
        "properties": {
          "loc": {
            "items": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "integer"
                }
              ]
            },
            "type": "array",
            "title": "Location"
          },
          "msg": {
            "type": "string",
            "title": "Message"
          },
          "type": {
            "type": "string",
            "title": "Error Type"
          }
        },
        "type": "object",
        "required": [
          "loc",
          "msg",
          "type"
        ],
        "title": "ValidationError"
      },
      "type": "array",
      "title": "Detail"
    }
  },
  "type": "object",
  "title": "HTTPValidationError"
}

Lubb One Documentation