---
title: "PUT /api/v1/affiliate/account/windsor"
method: PUT
path: "/api/v1/affiliate/account/windsor"
tags: ["Account", "Affiliation"]
---

# PUT /api/v1/affiliate/account/windsor

`PUT /api/v1/affiliate/account/windsor`

Validates a Windsor API key with a bounded read-only Google Ads request, then encrypts and stores it for the authenticated Affiliate.

## Cookies

- `billing_session` string

## Request body

- object
  - `apiKey` string, required

## Response `200`

The key was verified and encrypted. A warning can report that no Google Ads accounts were observed.

- object
  - `active` boolean, required
  - `configured` boolean, required
  - `updatedAt` string, date-time, nullable, required
  - `warning` 'NO_GOOGLE_ADS_ACCOUNTS' | 'null', nullable, required

## Other responses

- `400` — The API key request is invalid.
- `401` — No valid Affiliate session exists.
- `403` — The request did not originate from this portal.
- `422` — Windsor rejected the API key.
- `429` — Too many validation attempts were made for this Affiliate account.
- `503` — Windsor validation or secure storage is temporarily unavailable.

---

[API](https://skmtc.dev/expertschat/apis/billing-core-api.md) · [All operations](https://skmtc.dev/expertschat/apis/billing-core-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/expertschat/billing-core-api/revisions/c6d0e986ce32/schema)
