Source: https://datafa.st/docs/api/website/bot-traffic/authentication-token/rotate
Markdown source: https://datafa.st/docs/api/website/bot-traffic/authentication-token/rotate.md
Description: Replace the website's `dfbot_` token. The previous token stops working immediately, so update your server-side tracker secret before relying on authenticated ingestion.

# Rotate Bot traffic token

`PUT https://datafa.st/api/v1/admin/websites/{websiteId}/bot-traffic/token`

Replace the website's `dfbot_` token. The previous token stops working immediately, so update your server-side tracker secret before relying on authenticated ingestion.

The complete replacement token is returned once in `requestAuthToken`. MCP equivalent: `datafast_bot_traffic_token_rotate`, with `confirm: true` required.

> **Related:** [Get token status](/docs/api/website/bot-traffic/authentication-token/retrieve) · [Bot traffic tracking](/docs/bot-traffic-tracking#optional-request-authentication)

## Request

#### Path parameters

| Parameter | Type | Required | Description |
| --- | --- | --- | --- |
| `websiteId` | string | Yes | Website ObjectId used by account tokens to choose which website to query or manage. Website ObjectId. Get it from the dashboard or the List websites API. |

## Response

Returns a JSON object with `status: "success"` and endpoint-specific fields in `data` (and `pagination` when the endpoint is paginated).

#### Response fields

| Field | Type | Description |
| --- | --- | --- |
| `data[].websiteId` | string | Website ObjectId used by account tokens to choose which website to query or manage. |
| `data[].domain` | string | Tracked domain. |
| `data[].hasToken` | boolean | Whether a request-authentication token exists. |
| `data[].displayToken` | string\|null | Masked token display value, never the secret. |
| `data[].createdAt` | string\|null | When the current token was created. |
| `data[].requireAuthToken` | boolean | Whether incoming Bot traffic requests must include the token. |
| `data[].requestAuthToken` | string | Full replacement token. Returned once; store it immediately. |

## Authentication

Requires an owner `dft_` account token with `settings:write`. Website API keys (`df_`) cannot call this endpoint.

The token must be allowed to access the website in the path, and that website must belong to the token owner.

The account must have active DataFast API access. Read [authentication and scopes](/docs/api/authentication) for token creation and permissions.

### Errors

**400** — Invalid website ID.

**404** — Website not found, owner access is missing, or no token exists yet.

**409** — The token changed during rotation; refresh and try again.

See [API errors](/docs/api#errors) for the standard error envelope, auth failures, validation errors, permission errors, and rate limits.

## Code examples

### Example request

```bash
curl -X PUT "https://datafa.st/api/v1/admin/websites/{websiteId}/bot-traffic/token" \
  -H "Authorization: Bearer dft_xxx"
```

### Success response

```json
{
  "status": "success",
  "data": [{
    "websiteId": "665f0b3c4d2e1a0012345678",
    "domain": "example.com",
    "hasToken": true,
    "displayToken": "dfbot_abcd...wxyz",
    "createdAt": "2026-09-03T09:15:00.000Z",
    "requireAuthToken": false,
    "requestAuthToken": "dfbot_store-this-value-now"
  }]
}
```
