Source: https://fyno.docs.pageloop.ai/api-reference/user-properties/post-wsid-version-profiles-properties-set-once

# Set an Unset Property

POST `https://api.fyno.io/v1/{WSID}/{version}/profiles/properties/set-once`

This API enables you to set user properties of your users listed in your [User Profiles](../user-profiles-overview) **only if it is currently unset.** If the given payload contains a mix of properties that are currently set and unset, then it will only add values to the properties that are currently unset and ignore the other properties. If the user with distinct ID doesn't exist, it creates a new user with the provided distinct ID and sets values for all the provided properties.

**Note:** If a [property was not created earlier](../adding-new-user-property#how-to-add-a-new-user-property-from-user-profile-page), it will create a new property and the data type of the property will be determined based on the data type of the value. For example, if you `$once` a new property called `premium_user=true`, it will create the `premium_user` property with `Boolean` type and value `true`.

The property values can take the following data types:

- **String:** Can be alphanumeric and contain a maximum of 255 characters. Example: `user_type=Premium` or `membership_number=ABC123`.
- **Number:** Can be an integer or a decimal. Example: `ltv=23000` or `cost=20.34`.
- **Boolean:** Can only contain `true` or `false` values.
- **Date:** Must be in ISO 8601 format. Example: `membership_date=2020-10-01T18:30:00.000Z` or `membership_date=2020-10-01T18:30:00Z` or `membership_date=2020-10-01T18:30:00.000+05:30` or `membership_date=2020-10-01T18:30:00+02:00` or `membership_date=2020-10-01`.
- **List:** Can contain an array of strings, numbers, and dates. Example: `products_ordered=['iPhone 16 Pro', 'iPad 32 GB']` or `purchase_amount=[23000, 20.34]` or `purchase_date=['2020-10-01T18:30:00Z', '2021-11-01T13:35:00+02:00', '2023-12-05']`

If you try to set a value with a data type that does not match the predefined property type, the API will accept the request but ignore the invalid value. For example, if a predefined property `cost` expects a numeric value and you try to set it to `ABC`, the API will not store the value.

These user properties can be used to filter your users for creating [user cohorts](../creating-cohorts) and [campaigns](../campaign_creation#creating-a-campaign-using-cohort).

## Authorization

#### Authorization (header, string, required)

Enter your API Key. If you don't have it already, you can create one from the API Keys page within your Fyno account

## Path Parameters

#### WSID (path, string, required)

Enter your workspace ID. You can obtain this value from the API Keys page within your Fyno account.

#### version (path, enum (string), required) — allowed: live, test

Specify the version for which you would like to update the user property.

## Body

#### $once (body, object, required)

Enter the property name as JSON key and the value to set as JSON value

#### distinct\_id (body, string, required)

Enter the distinct ID that you use to identify the recipient.

## Response

#### 202

Request has been accepted and will be processed asynchronously.

#### request\_id (string, required)

#### 400

$once object is empty

#### \_message (string, required)

#### status (string, required)

#### 401

API Key or Workspace ID is invalid. User is unauthorised.

#### \_message (string, required)

#### status (string, required)

#### Request

```bash cURL
curl -X POST 'https://api.fyno.io/v1/{WSID}/{version}/profiles/properties/set-once' \
  -H 'Authorization: Bearer <token>' \
  -H 'Content-Type: application/json' \
  -d '{"$once": {"property_1": "some text", "property_2": 123, "property_3": 45.67, "property_4": true, "property_5": false, "property_6": "2020-10-01T18:30:00.000Z", "property_7": "2021-12-01", "property_8": ["iPhone 16 Pro", "iPad 32 GB"], "property_9": [23000, 20.34], "property_n": ["2020-10-01T18:30:00Z", "2021-11-01T13:35:00+02:00", "2023-12-05"]}, "distinct_id": "XXXXXXXX"}'
```

```javascript JavaScript
const res = await fetch('https://api.fyno.io/v1/{WSID}/{version}/profiles/properties/set-once', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer <token>',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({"$once": {"property_1": "some text", "property_2": 123, "property_3": 45.67, "property_4": true, "property_5": false, "property_6": "2020-10-01T18:30:00.000Z", "property_7": "2021-12-01", "property_8": ["iPhone 16 Pro", "iPad 32 GB"], "property_9": [23000, 20.34], "property_n": ["2020-10-01T18:30:00Z", "2021-11-01T13:35:00+02:00", "2023-12-05"]}, "distinct_id": "XXXXXXXX"}),
});
const data = await res.json();
```

```python Python
import requests

res = requests.post(
    'https://api.fyno.io/v1/{WSID}/{version}/profiles/properties/set-once',
    headers={'Authorization': 'Bearer <token>'},
    json={"$once": {"property_1": "some text", "property_2": 123, "property_3": 45.67, "property_4": true, "property_5": false, "property_6": "2020-10-01T18:30:00.000Z", "property_7": "2021-12-01", "property_8": ["iPhone 16 Pro", "iPad 32 GB"], "property_9": [23000, 20.34], "property_n": ["2020-10-01T18:30:00Z", "2021-11-01T13:35:00+02:00", "2023-12-05"]}, "distinct_id": "XXXXXXXX"}
)
data = res.json()
```

#### Response

```json 202
{
  "request_id": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"
}
```

```json 400
{
  "_message": "$once has object/keys that is not allowed",
  "status": "error"
}
```

```json 401
{
  "_message": "Invalid API details",
  "status": "error"
}
```
