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

# Get a profile

GET https://experience.ninetailed.co/v2/organizations/{organizationId}/environments/{environmentSlug}/profiles/{profileId}

Returns a profile with its currently selected experience variants. The `organizationId` is the **Client ID** from **Settings → SDK Keys → Optimization**.

Reference: https://contentful.com/developers/docs/references/experience-api/profiles/get-a-profile

## Request

### Path parameters

- `environmentSlug` (string, required, default: main) — The slug of the environment of the profile to retrieve
- `organizationId` (string, required) — The ID of the organization of the profile to retrieve
- `profileId` (string, required) — The ID of the profile to retrieve

### Query parameters

- `locale` (string, optional, default: en) — An ISO 639-1 language code used for experience evaluation.

## Response

### 200

Successful response

## Errors

### 400 Bad Request Error

Bad Request

- `message` (string, required)
- `data` (BadRequestData, required)
- `error` (BadRequestError, optional)

### 404 Not Found Error

Profile not found

- `GetAProfileRequestNotFoundError`

### 429 Too Many Requests Error

Profile overload

- `GetAProfileRequestTooManyRequestsError`

### 500 Internal Server Error

Internal server error

- `message` (string, required)
- `data` (InternalServerErrorData, required)
- `error` (InternalServerErrorError, optional)

## Types

### BadRequestData

### BadRequestError

- `code` (string, optional)

### profileNotFoundError

- `message` (string, required)
- `data` (ProfileNotFoundErrorData, required)
- `error` (ProfileNotFoundErrorError, optional)

### notFoundError

- `message` (string, required)
- `data` (NotFoundErrorData, required)
- `error` (NotFoundErrorError, optional)

### profileOverloadError

- `message` (string, required)
- `data` (ProfileOverloadErrorData, required)
- `error` (ProfileOverloadErrorError, optional)

### tooManyRequests

- `message` (string, required)
- `data` (TooManyRequestsData, required)
- `error` (TooManyRequestsError, optional)

### InternalServerErrorData

### InternalServerErrorError

- `code` (string, optional)

### ProfileNotFoundErrorData

### ProfileNotFoundErrorError

- `code` (string, optional)

### NotFoundErrorData

### NotFoundErrorError

- `code` (string, optional)

### ProfileOverloadErrorData

### ProfileOverloadErrorError

- `code` (string, optional)

### TooManyRequestsData

### TooManyRequestsError

- `code` (string, optional)

## Examples

**Response**

```json
{
  "data": {
    "changes": [],
    "experiences": [
      {
        "experienceId": "exp-1",
        "variantIndex": 1,
        "variants": {
          "entryA": "entryB"
        }
      }
    ],
    "profile": {
      "audiences": [
        "audience-1"
      ],
      "id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
      "location": {},
      "random": 0.42,
      "session": {},
      "stableId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
      "traits": {
        "favAnimal": "fox"
      }
    }
  },
  "error": null,
  "message": "ok"
}
```

**SDK Code**

```javascript JavaScript
const response = await fetch('https://experience.ninetailed.co/v2/organizations/{organizationId}/environments/{environmentSlug}/profiles/{profileId}', {
    method: 'GET',
    headers: {},
});
const data = await response.json();
```

```python Python
import requests

response = requests.get(
    "https://experience.ninetailed.co/v2/organizations/{organizationId}/environments/{environmentSlug}/profiles/{profileId}",
    headers={},
)
data = response.json()
```

```http HTTP
GET /v2/organizations/{organizationId}/environments/{environmentSlug}/profiles/{profileId} HTTP/1.1
Host: experience.ninetailed.co
Accept: */*
```