> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://apidocs.propertypal.com/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://apidocs.propertypal.com/_mcp/server.

# Authentication

Every request to the PropertyPal APIs must be authenticated using the **OAuth2
client credentials** grant. Your `client_id` and `client_secret` are issued by the
PropertyPal Feeds Team.

Don't have credentials yet? Contact the PropertyPal Feeds Team at
[help@propertypal.com](mailto:help@propertypal.com) to get set up.

## Request a token

Exchange your credentials for a short-lived access token at the token endpoint:

```bash title="Request an access token"
curl -X POST https://accounts.propertypal.com/oauth2/token \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -d "grant_type=client_credentials" \
  -d "client_id=YOUR_CLIENT_ID" \
  -d "client_secret=YOUR_CLIENT_SECRET" \
  -d "scope=openid"
```

A successful response returns a bearer token:

```json title="Response"
{
  "access_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVC...",
  "token_type": "Bearer",
  "expires_in": 3600,
  "scope": "openid"
}
```

## Use the token

Send the token in the `Authorization` header on every API request:

```bash title="Authenticated request"
curl https://rightmove-feed.propertypal.com/v2/property/commercial/DEMO-001 \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "Rightmove-Agent-ID: 12345"
```

Cache and reuse the token until it expires, then request a new one. Avoid
requesting a fresh token on every call.

## Errors

| Status             | Meaning                                             |
| ------------------ | --------------------------------------------------- |
| `401 Unauthorized` | Missing or invalid credentials / token.             |
| `403 Forbidden`    | Authenticated, but not permitted for this resource. |

See the [API reference](/api-reference/overview) for the full error model.