UiPath Documentation
industry-department-solutions
latest
false
  • Overview
    • Introduction
    • Getting Started
    • API Guide
    • Customizations
    • Data Onboarding Checklist
  • API Resources
UiPath logo, featuring letters U and I in white

Supply Chain & Retail Solutions API guide

Last updated Apr 16, 2026

Customizations

The Data Ingestion API supports adding custom attributes to existing APIs, allowing you to send additional information specific to your business requirements.

Overview

Custom attributes provide a way to:

  • Extend standard schemas – add business-specific fields to any object without modifying the base schema
  • Maintain flexibility – adapt to changing data requirements without engineering intervention
  • Preserve validation – custom attributes are validated according to their defined data types and constraints

Workflow

The process for using custom attributes involves three steps:

  1. Add custom attributes – define additional attributes using the /{objectName}/add-attribute endpoint with UPPERCASE attribute names
  2. Retrieve updated schema – fetch the schema using /schema?solutionName={solutionName} to confirm the custom attributes (optional)
  3. Ingest data – submit data including the custom attributes via the standard ingestion endpoint using the pattern /api/v2/object/{prefix}{object_name}{suffix}

Adding Custom Attributes

Use the POST /{objectName}/add-attribute endpoint to add custom attributes to an existing object schema.

Request Parameters

ParameterTypeRequiredDescription
solutionNamestringYesA unique identifier for the rollout or solution. (e.g., QP_OOTB)
attributeNamestringYesThe name of the custom attribute in UPPERCASE (e.g., SUPPLIER_CODE)
dataTypestringYesData type: string, integer, float, boolean, datetime, date
defaultValuestringNoDefault value for the attribute
validationsarrayNoArray of validation rules (e.g., nonNull, minLength, maxLength)

Step 1: Add Custom Attribute

curl -X POST \
  'https://service.peak.ai/ingestion-api/api/v2/PRODUCTS/add-attribute' \
  -H 'Authorization: YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{
    "solutionName": "QP_OOTB",
    "attributeName": "SUPPLIER_CODE",
    "dataType": "string",
    "defaultValue": "21C",
    "validations": [
      {
        "type": "nonNull"
      },
      {
        "type": "minLength",
        "value": 3
      },
      {
        "type": "maxLength",
        "value": 100
      }
    ]
  }'
curl -X POST \
  'https://service.peak.ai/ingestion-api/api/v2/PRODUCTS/add-attribute' \
  -H 'Authorization: YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{
    "solutionName": "QP_OOTB",
    "attributeName": "SUPPLIER_CODE",
    "dataType": "string",
    "defaultValue": "21C",
    "validations": [
      {
        "type": "nonNull"
      },
      {
        "type": "minLength",
        "value": 3
      },
      {
        "type": "maxLength",
        "value": 100
      }
    ]
  }'

Success Response:

{
  "message": "Custom attribute added successfully"
}
{
  "message": "Custom attribute added successfully"
}

Your new attribute will be prefixed with C_ from now on. When ingesting data make sure you add the prefix to the custom attribute.

Step 2: Retrieve Updated Schema (Optional)

curl -X GET \
  'https://service.peak.ai/ingestion-api/api/v2/schema?solutionName=QP_OOTB' \
  -H 'Authorization: YOUR_API_KEY'
curl -X GET \
  'https://service.peak.ai/ingestion-api/api/v2/schema?solutionName=QP_OOTB' \
  -H 'Authorization: YOUR_API_KEY'

Response:

{
  "solutionName": "pricing-b2b",
  "appName": "pricingb2b",
  "appVersion": "v1.0.0",
  "targetSchema": "stage",
  "prefix": "test_",
  "suffix": null,
  "createdAt": "2026-01-20T09:06:15.891Z",
  "schema": [
    {
      "objectName": "QP_PRODUCTS_OOTB",
      "primaryKeys": [
        "PRODUCT_ID",
        "UPDATED_AT"
      ],
      "columns": [
        {
          "columnName": "PRODUCT_ID",
          "dataType": "string",
          "validations": []
        },
        {
          "columnName": "PRODUCT_NAME",
          "dataType": "string",
          "validations": []
        },
        {
          "columnName": "C_SUPPLIER_CODE",
          "dataType": "string",
          "validations": [
            {
              "type": "nonNull"
            },
            {
              "type": "minLength",
              "value": 3
            },
            {
              "type": "maxLength",
              "value": 100
            }
          ]
        }
      ],
      "isRolledOut": true
    }
  ]
}
{
  "solutionName": "pricing-b2b",
  "appName": "pricingb2b",
  "appVersion": "v1.0.0",
  "targetSchema": "stage",
  "prefix": "test_",
  "suffix": null,
  "createdAt": "2026-01-20T09:06:15.891Z",
  "schema": [
    {
      "objectName": "QP_PRODUCTS_OOTB",
      "primaryKeys": [
        "PRODUCT_ID",
        "UPDATED_AT"
      ],
      "columns": [
        {
          "columnName": "PRODUCT_ID",
          "dataType": "string",
          "validations": []
        },
        {
          "columnName": "PRODUCT_NAME",
          "dataType": "string",
          "validations": []
        },
        {
          "columnName": "C_SUPPLIER_CODE",
          "dataType": "string",
          "validations": [
            {
              "type": "nonNull"
            },
            {
              "type": "minLength",
              "value": 3
            },
            {
              "type": "maxLength",
              "value": 100
            }
          ]
        }
      ],
      "isRolledOut": true
    }
  ]
}

Step 3: Ingest Data with Custom Attributes

curl -X POST \
  'https://service.peak.ai/ingestion-api/api/v2/objects/QP_PRODUCTS_OOTB' \
  -H 'Authorization: YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{
    "solutionName": "QP_OOTB",
    "data": [
      {
        "PRODUCT_ID": "PROD-001",
        "NAME": "Premium Widget",
        "DESCRIPTION": "High-quality widget with extended warranty",
        "LOWEST_PRODUCT_CATEGORY_ID": "CAT-100",
        "CREATED_AT": "2024-01-15 10:30:00",
        "UPDATED_AT": "2024-01-15 10:30:00",
        "C_SUPPLIER_CODE": "SUP-XYZ-001"
      }
    ],
    "operationType": "UPSERT"
  }'
curl -X POST \
  'https://service.peak.ai/ingestion-api/api/v2/objects/QP_PRODUCTS_OOTB' \
  -H 'Authorization: YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{
    "solutionName": "QP_OOTB",
    "data": [
      {
        "PRODUCT_ID": "PROD-001",
        "NAME": "Premium Widget",
        "DESCRIPTION": "High-quality widget with extended warranty",
        "LOWEST_PRODUCT_CATEGORY_ID": "CAT-100",
        "CREATED_AT": "2024-01-15 10:30:00",
        "UPDATED_AT": "2024-01-15 10:30:00",
        "C_SUPPLIER_CODE": "SUP-XYZ-001"
      }
    ],
    "operationType": "UPSERT"
  }'

Success Response:

{
  "message": "Data ingested successfully",
  "recordsProcessed": 1
}
{
  "message": "Data ingested successfully",
  "recordsProcessed": 1
}

Important Considerations

Data Type Mapping

Custom attributes support the following data types:

Data TypeDescriptionExample Values
stringVariable-length string"ABC123", "Product Code"
integerWhole numbers42, -10, 0
floatDecimal numbers19.99, -0.5, 3.14159
booleanTrue/false valuestrue, false
datetimeTimestamp with time"2025-01-23T14:30:00Z"
dateDate only"2025-01-23"

Validations

Custom attributes support validation rules to enforce data quality:

Validation TypeDescriptionExample
nonNullField cannot be null or empty{"type": "nonNull"}
minLengthMinimum string length{"type": "minLength", "value": 3}
maxLengthMaximum string length{"type": "maxLength", "value": 100}
minMinimum numeric value{"type": "min", "value": 0}
maxMaximum numeric value{"type": "max", "value": 1000}

Schema Evolution

  • Custom attributes are additive – they extend the schema without affecting existing attributes
  • Once added, custom attributes become part of the schema and are subject to the same validation rules as standard attributes
  • Removing custom attributes requires submitting a support ticket

Validation

  • Custom attributes with nonNull validation must be present in all ingested rows
  • Data types are strictly validated – sending an incorrect type will result in a validation error
  • Custom attributes with default values will use the default if the field is omitted from the data payload
  • Multiple validations can be applied to a single attribute (e.g., nonNull, minLength, and maxLength together)

For further assistance with custom attributes or schema customization, submit a support ticket.

Was this page helpful?

Connect

Need help? Support

Want to learn? UiPath Academy

Have questions? UiPath Forum

Stay updated