<!-- https://developers.silktide.com/v1/governance/websites/get-website | Governance / Websites -->

# Get a website's settings

`GET /v1/websites/{websiteId}`

Returns one website: its details, who may do what with it, when it is
retested, and its settings. Updating a website returns the same body.

The API key's user must be able to admin the website. A user who can only see
it gets `403 AccessDenied`; a website they cannot see at all, or that does
not exist, gets `404 ModelNotFound`.

`options` holds each setting that has been set or has a default. Settings can
be added over time, so ignore any you do not recognize. `website.languages`
is always present.

`websiteId` must be a whole number. Anything else currently returns `500`
rather than `404`.

## Request

### Path parameters

- `websiteId` (integer, required, at least 1): The website.

## Response

Status `200`.

- `website` (object, required): The website.
  - `websiteId` (integer, required, at least 1): The website.
  - `name` (string, required): Its name.
  - `homeUrl` (string, required): Its home page.
  - `status` (string, required): `installing` while Silktide creates it, `setup` before it goes live, `live` once it is tested. One of: `installing`, `setup`, `live`.
  - `maxPages` (integer, required): The most pages Silktide will test.
  - `maxDocuments` (integer, required): The most documents (PDFs) Silktide will test.
  - `created` (integer, required): When it was created.
  - `lastTested` (integer, required): When its last test finished. `0` if it has never been tested.
  - `propertyId` (integer, required): The Analytics property linked to the website. `0` when it has none.
- `permissions` (object, required): Who may do what with the website.
  - `components` (list of objects, required): The permissions a website has.
    - `permissionId` (string, required): The permission, such as `Website-WebsiteRead`.
    - `componentType` (string, required): What can be given it. `assignees` for users and roles.
    - `label` (string, required): Its name.
    - `description` (string, required, can be null): What it allows. Null for some permissions.
    - `inheritedPermissionIds` (list of strings, required): Permissions that include this one: anyone with those has this too.
    - `models` (list of any JSON, required): Reserved. Empty for website permissions.
  - `componentValues` (map of list of strings, required): Who was given each permission on this website directly, as assignee ids (`u:` users, `g:` roles).
  - `fixedValues` (map of list of strings, required): Who has each permission from elsewhere, such as account-wide roles. Changed elsewhere, not here.
- `schedule` (object, required): When it is retested.
  - `scheduleInterval` (string, required): The unit it is retested in. Empty when it is not retested on a schedule. One of: `second`, `minute`, `hour`, `day`, `week`, `month`, `year`.
  - `schedulePeriod` (integer, required): How many `scheduleInterval`s apart tests are.
  - `scheduleFromDate` (integer, required): When the schedule counts from.
  - `schedulePreset` (string, required): A named schedule (`none`, `five-daily`, `weekly` or `monthly`), or empty when the interval and period were set directly.
  - `isActive` (boolean, required): Whether scheduled tests run.
- `options` (object, required): Its settings, by name.
  - `website.allowFragmentPaths` (boolean, optional): Experimental. Crawl paths with fragments, such as hashbangs.
  - `website.allowedHttpCodes` (list of integers, optional): HTTP codes to accept besides 2xx and 3xx, which are always accepted.
  - `website.authType` (string, optional): How Silktide signs in to pages that need it.
  - `website.benchmarkId` (string, optional): The Silktide Benchmark to grade against. Empty for none.
  - `website.benchmarkPercentile` (integer, optional): The percentile to read from the benchmark.
  - `website.brokenLinkMaxRedirects` (integer, optional): How many redirects a link may take before it counts as broken.
  - `website.brokenLinkPropulsionFallback` (boolean, optional): Confirm broken links in a real browser. Slower but more reliable.
  - `website.brokenLinkTimeout` (integer, optional): Seconds to wait before a link counts as broken.
  - `website.clickSelector` (string, optional): A CSS selector Silktide clicks on each page before testing it.
  - `website.disableAnalytics` (boolean, optional): Block the website's analytics scripts while testing, so tests do not count as visits.
  - `website.disableFirstTimeVisit` (boolean, optional): Skip the built-in first-visit user flow, which tests pages before cookie banners are dismissed.
  - `website.disableLinkDiscovery` (boolean, optional): Test only the URLs you give, and follow no links.
  - `website.disableScrollDown` (boolean, optional): Do not scroll each page to the bottom and back while testing.
  - `website.disableStealth` (boolean, optional): Let websites detect that Silktide's browser is automated.
  - `website.enableAnimation` (boolean, optional): Let pages animate. Silktide stops animation by default.
  - `website.exclude3rdPartyPluginIssues` (boolean, optional): Ignore issues inside common third-party plugins, such as embedded maps.
  - `website.excludeQueryParams` (list of strings, optional): Query parameters to remove from URLs, so pages that differ only by them count once.
  - `website.ignoreAutomaticSitemaps` (boolean, optional): Do not use the sitemaps Silktide finds on its own.
  - `website.inspectorCss` (string, optional): CSS added to pages when they are shown in the Inspector.
  - `website.languages` (list of strings, required): Language codes, such as `en-US`, that every page is in. Always present.
  - `website.maxConnections` (integer, optional): How many pages Silktide may load at once.
  - `website.normalizeUrlPath` (boolean, optional): Lowercase URL paths, for websites that mix case.
  - `website.optionalLanguages` (list of strings, optional): Language codes a page might be in. Silktide detects them per page, which slows testing.
  - `website.pageWait` (number, optional): Seconds to wait after a page loads before testing it.
  - `website.proxyHost` (string, optional): A proxy server to test through.
  - `website.proxyPort` (integer, optional): The proxy server's port.
  - `website.proxyPreset` (string, optional): One of Silktide's proxies: `eu-dublin`, `us-ohio` or `au-sydney`. Empty for the region's own location.
  - `website.proxyUsername` (string, optional): The proxy server's username.
  - `website.readabilityFormula` (string, optional): The readability formula, such as `smog`.
  - `website.readabilityThreshold` (number, optional): The readability score pages should stay within.
  - `website.reportLanguage` (string, optional): The language AI reports about the website are written in. Empty for the account's language.
  - `website.timeout` (integer, optional): Seconds to wait for a page to load before giving up.
  - `website.trustPageDeclaredLanguage` (boolean, optional): Believe the language a page declares rather than detecting it.
  - `website.userAgentSuffix` (string, optional): Text added to the end of Silktide's browser user agent.
  - `website.username` (string, optional): The username Silktide signs in to pages with.
  - `website.aiEnabled` (boolean, optional): Whether Silktide's AI may work on this website.
  - `website.passwordSet` (boolean, required): Whether a sign-in password is saved. Always present. Read-only: sending it changes nothing.
  - `website.proxyPasswordSet` (boolean, required): Whether a proxy password is saved. Always present. Read-only, like `website.passwordSet`.
- `tagIds` (list of strings, required): The ids of the tags on the whole website (section `0`).
- `governanceAiOptimizer` (boolean, required): Whether the website holds one of the account's Governance AI optimizers.
- `governanceAiOptimizerAvailable` (boolean, required): Whether it could be given one now, counting one its own recent reports still hold.
- `reportLanguage` (string, required): The language its AI reports are written in: its own setting, or the account's when unset.

## Errors

| Status | Type | When |
| --- | --- | --- |
| 404 | `ModelNotFound` | Nothing with that id exists in the account, or the API key's user cannot see it. |
| 403 | `AccessDenied` | The API key's user cannot admin this website. |
| 401 | `NotLoggedIn` | No API key was sent, or it is not a key for this region. |
| 429 | `TooManyRequests` | Too many requests to this path in five seconds. Retry after the number of seconds in the `Retry-After` header, which `properties.retryAfter` repeats. |
| 503 | - | Silktide is busy. Retry after the number of seconds in the `Retry-After` header. |

## Access

- Permission: Can admin this website
- Plan feature: none
- Edition: Silktide 4 and Silktide 5
- Cost: free
- Stability: stable, since 1.0.0

## Example: A website retested every five days

```bash
curl "https://api.eu.silktide.com/v1/websites/2" \
  -H "Authorization: silktide token=$SILKTIDE_API_KEY"
```

Response:

```json
{
  "website": {
    "websiteId": 2,
    "name": "Example",
    "homeUrl": "https://example.com/",
    "status": "live",
    "maxPages": 1000,
    "maxDocuments": 500,
    "created": 1790216529,
    "lastTested": 1790302929,
    "propertyId": 0
  },
  "permissions": {
    "components": [
      {
        "permissionId": "Website-WebsiteRead",
        "componentType": "assignees",
        "label": "Can see website",
        "description": "Can see this website, and any sections within this website.",
        "inheritedPermissionIds": [
          "Website-WebsiteContribute",
          "Website-WebsiteTest",
          "Website-WebsiteReadAll"
        ],
        "models": []
      }
    ],
    "componentValues": {
      "Website-WebsiteRead": [
        "u:eu-12"
      ]
    },
    "fixedValues": {
      "Website-WebsiteRead": [
        "g:2"
      ]
    }
  },
  "schedule": {
    "scheduleInterval": "day",
    "schedulePeriod": 5,
    "scheduleFromDate": 1790216529,
    "schedulePreset": "",
    "isActive": true
  },
  "options": {
    "website.languages": [
      "en-US"
    ],
    "website.optionalLanguages": [],
    "website.maxConnections": 6,
    "website.timeout": 30,
    "website.pageWait": 0,
    "website.excludeQueryParams": [
      "utm_source",
      "utm_medium"
    ],
    "website.disableAnalytics": true,
    "website.enableAnimation": false,
    "website.reportLanguage": "",
    "website.passwordSet": false,
    "website.proxyPasswordSet": false
  },
  "tagIds": [
    "marketing"
  ],
  "governanceAiOptimizer": false,
  "governanceAiOptimizerAvailable": true,
  "reportLanguage": "en-US"
}
```
