> ## Documentation Index
> Fetch the complete documentation index at: https://docs.omneo.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Working with Profiles

> Creating, reading, updating, and searching profiles via the Omneo API.

Profiles are the central object in Omneo. This guide covers the core CRUD operations and common patterns for working with profiles programmatically.

## Creating a profile

```shell theme={null}
curl -X POST https://api.[tenant].getomneo.com/api/v3/profiles \
  -H "Authorization: Bearer ${TOKEN}" \
  -H "Content-Type: application/json" \
  -d '{
    "first_name": "Jane",
    "last_name": "Smith",
    "email": "jane@example.com",
    "mobile_phone": "+61412345678"
  }'
```

A successful response returns the created profile with its `id`.

## Reading a profile

By Omneo profile ID:

```shell theme={null}
GET /api/v3/profiles/{profileId}
```

By identity (e.g., Shopify customer ID):

```shell theme={null}
GET /api/v3/profiles/{shopifyCustomerId}?identity[handle]=shopify
```

## Searching profiles

```shell theme={null}
GET /api/v3/profiles?search=jane@example.com
```

The search endpoint supports name, email, mobile, and other fields. Omneo uses Algolia for instant, typo-tolerant search.

## Updating a profile

```shell theme={null}
curl -X PUT https://api.[tenant].getomneo.com/api/v3/profiles/{profileId} \
  -H "Authorization: Bearer ${TOKEN}" \
  -H "Content-Type: application/json" \
  -d '{
    "birth_day": 15,
    "birth_month": 9,
    "birth_year": 1985
  }'
```

## Syncing profiles (upsert)

The sync endpoint creates a profile if it doesn't exist, or updates it if it does. It matches on email or mobile phone:

```shell theme={null}
POST /api/v3/profiles/sync
```

This is the recommended approach for eCommerce integrations where you don't always know if a profile exists.

## Deleting a profile

```shell theme={null}
DELETE /api/v3/profiles/{profileId}
```

This soft-deletes the profile. For a full GDPR-compliant erasure, use the Purge endpoint:

```shell theme={null}
POST /api/v3/profiles/{profileId}/purge
```

## Bulk import

For large-scale profile imports, use the batch import endpoint or the CSV import tool in CX Manager under the Import Jobs section.

```shell theme={null}
POST /api/v3/profiles/batch
```

<Note>Content needed: field validation rules, error response reference, and bulk import file format specification.</Note>
