> For the complete documentation index, see [llms.txt](https://docs.fulfillmenttools.com/documentation/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.fulfillmenttools.com/documentation/getting-started/custom-attributes.md).

# Custom attributes

Custom attributes can be added to all editable fulfillmenttools entities.

You can store any relevant data for the entity you want (within reason) if our current properties don't fit your needs.

There's no schema to follow, and there's no validation from our side. You're free to work with the data as you wish, as long as you follow the [limitations section](#custom-attribute-inheritance).

Some entities display the custom attributes in Backoffice, such as the [Network order details view](/documentation/backoffice/network-view/orders/order-details-view.md#custom-attributes), but others are only accessible via API.

Example use cases for custom attributes include storing a consumer rating for a shop, specifying a consumer segment, indicating how to access a facility, or defining a foreign key that relates to data in a connected system.

## Using custom attributes

If you see the `customAttributes` field within the fulfillmenttools entity, you can add any relevant data to it, whether that be from integrations or other services outside of fulfillmenttools.

{% hint style="info" %}
The `customAttributes` field shouldn't be confused with the `attributes` field mentioned in [customization via article attributes](/documentation/by-pillar/global-inventory-hub/articles/article-attributes.md).
{% endhint %}

Within the relevant entity, you can add the `customAttributes` object. For example, in the code extract below, we've added our own `customAttributes` as part of the facility entity:

```json
{
...
  "name": "Nerd Herd Clothing",
  "type": "MANAGED_FACILITY",
  "customAttributes": {
        "accessibility": "Stairs only",
        "storageSize": "Medium",
        "staff": 12
  },
...
}
```

The `customAttributes` are stored and can be retrieved through the various fulfillmenttools APIs.

## Limitations <a href="#custom-attribute-inheritance" id="custom-attribute-inheritance"></a>

Although you can add the data that you wish to a custom attribute, it needs to follow the limitations below:

* Each `customAttributes` object is serialized into a string and is subject to a size limit of 15,360 characters. You'll get an `HTTP 400` error if creating or updating an entity exceeds this limit.
* Keys within a `customAttributes` object must not start with a `$` character and must not contain a `.` character.
* Follow our [responsible API usage guidelines](/documentation/about-fulfillmenttools/limits-and-scaling.md#responsible-api-use).
* You're responsible for the data, including regulations that fall under GDPR or similar.

## Inheritance <a href="#custom-attribute-inheritance" id="custom-attribute-inheritance"></a>

Some `customAttributes` are inherited when entities are created in fulfillmenttools.

For example, when order line items include `customAttributes`, the resulting pick job line items include those `customAttributes`.

Order-level `customAttributes` belong to the order. They don't become `customAttributes` on downstream operational entities like pick jobs, shipments, or their line items. Where an event payload includes an order representation, they remain order-level data. For example, the two tabs below show code samples from the `ORDER_CREATED` and `PICK_JOB_CREATED` events.

{% tabs %}
{% tab title="Order-level customAttributes" %}

```json
{
  "event": "ORDER_CREATED",
  "eventId": "019f8372-32f6-7032-a417-d3320f7d253d",
  "payload": {
    "id": "019f8372-0904-7775-a683-e3fb8ee74d34",
    "customAttributes": {
      "consumerSegment": "priority",
      "externalOrderReference": "WEB-100045"
    }
  }
}
```

{% endtab %}

{% tab title="Order line item customAttribute" %}

```json
{
  "event": "PICK_JOB_CREATED",
  "eventId": "019f8372-32f6-7032-a417-d3320f7d253d",
  "payload": {
    "order": {
      "customAttributes": {
        "consumerSegment": "priority"
      }
    },
    "pickLineItems": [
      {
        "customAttributes": {
          "giftWrap": true
        }
      }
    ]
  }
}
```

{% endtab %}
{% endtabs %}


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://docs.fulfillmenttools.com/documentation/getting-started/custom-attributes.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
