UiPath Documentation
industry-department-solutions
latest
false
Supply Chain & Retail Solutions API guide
  • Overview
    • Introduction
    • Getting Started
    • Integration walkthrough
    • API Guide
    • Schema lifecycle
    • Scheduled ingestion
    • Historical data ingestion
    • Data Quality Dashboard
    • Customizations
    • Data Onboarding Checklist
  • API Resources

Customizations

Extend standard Data Ingestion API schemas by adding custom attributes to any API object for business-specific fields and metadata.

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 columns using the /api/v2/schema/{objectName}/add-attribute endpoint with UPPERCASE column names
  2. Retrieve updated schema – fetch the schema using /api/v2/schema?solutionName={solutionName} to confirm the custom columns (optional)
  3. Ingest data – submit data including the custom columns via the standard ingestion endpoint using the pattern /api/v2/objects/{prefix}{object_name}{suffix}

Adding custom attributes

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

Request parameters

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

Step 1: Add custom attribute

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

The new column is now part of the schema. When ingesting data, use the exact column name you specified above as the JSON key — for example, "SUPPLIER_CODE": "SUP-XYZ-001".

Step 2: Retrieve updated schema (optional)

curl -X GET \
  'https://ingestion.peak.ai/api/v2/schema?solutionName=QP_OOTB' \
  -H 'Authorization: YOUR_API_KEY'
curl -X GET \
  'https://ingestion.peak.ai/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": "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": "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://ingestion.peak.ai/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",
        "SUPPLIER_CODE": "SUP-XYZ-001"
      }
    ],
    "operationType": "UPSERT"
  }'
curl -X POST \
  'https://ingestion.peak.ai/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",
        "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