- DarkLight
Create Attributes (Bulk) - Submit
- DarkLight
Overview
This API enables the bulk creation, update, and deletion of attributes for profile and custom entities in Data Cloud. It supports:
Creating new attributes for profile and custom entities
Updating existing attributes, such as labels, visibility, masking, and linkage
Deleting attributes that are no longer required
Submitting multiple Attribute operations across entities in a single request
This is an Asynchronous bulk API. On successful submission, the API returns a jobId, which can be used to track the processing status using the Job Status API.
Endpoint URL
The API endpoint used to submit bulk attribute operations is:
/api/v1/dataobjects/attributes/bulk
HTTP Method
POST
Request Body Structure
Each entity includes an entityName and a list of attributes with the required fields. Structure your request body as follows:
{
"entities": [
{
"entityName": "Profile",
"attributes": [
{
"action": "create",
"name": "preferredLanguage",
"label": "Preferred Language",
"dataType": "string",
"category": {
"category": "business",
"categoryID": "10"
},
"isMergeIdentifier": false,
"isShowInProfile": false,
"isMaskOnScreen": false,
"isMaskInDataExport": false,
"linkedToProfileDataObjectField": null
},
{
"action": "update",
"name": "email",
"label": "Email Address (Primary)",
"category": {
"category": "business",
"categoryID": "10"
},
"isShowInProfile": true,
"isMaskOnScreen": true,
"isMaskInDataExport": true,
"linkedToProfileDataObjectField": "profile.email"
},
{
"action": "delete",
"name": "oldCustomerCode",
"reason": "Deprecated field"
}
]
},
{
"entityName": "LoanApplications",
"attributes": [
{
"action": "create",
"name": "loanStartDate",
"label": "Loan Start Date",
"dataType": "date",
"dateTimeFormat": {
"dateTimeFormatID": 20,
"format": "dd/MM/yyyy",
"type": "date"
},
"category": {
"category": "business",
"categoryID": "10"
},
"isMergeIdentifier": false,
"isShowInProfile": false,
"isMaskOnScreen": false,
"isMaskInDataExport": false,
"linkedToProfileDataObjectField": "profile.mobile"
},
{
"action": "create",
"name": "loanAmount",
"label": "Loan Amount",
"dataType": "number",
"category": {
"category": "business",
"categoryID": "10"
},
"isMergeIdentifier": false,
"isShowInProfile": false,
"isMaskOnScreen": false,
"isMaskInDataExport": false,
"linkedToProfileDataObjectField": null
},
{
"action": "delete",
"name": "obsoleteLoanFlag",
"reason": "Field removed per new schema"
}
]
}
]
} Request Field Description
This table outlines the required fields for the API request, including their types, whether they are mandatory, and their descriptions.
Field Name | Data Type | Required | Description |
|---|---|---|---|
entities | Array | Yes | Contains the list of entities for which attribute operations are submitted. |
entityName | String | Yes | Name of the entity (for example, Profile or a custom entity name). |
attributes | Array | Yes | List of attributes to be created, updated, or deleted for the entity. |
action | String | Yes | Operation to perform on the attribute. Allowed values: create, update, delete. |
name | String | Yes | Internal name of the attribute. |
label | String | Required for create/update | Display label for the attribute in the UI. |
dataType | String | Required for create/update | Data type of the attribute. Allowed values: int, string, float, double, date, datetime. |
dateTimeFormat | String | Required only when dataType = date or datetime | Format of the date/time field (e.g., "yyyy-MM-dd"). Not required for non-date fields. Allowed values are attached here at the bottom. |
category | String | Yes | Category to which the attribute belongs. Supported values are listed at the end of this section. |
isMergeIdentifier | Boolean | No | Indicates whether the attribute is used as a merge identifier. |
isShowInProfile | Boolean | No | Determines whether the attribute should be visible in the profile view. |
isMaskOnScreen | Boolean | No | Determines whether the attribute should be masked when displayed on screen. |
isMaskInDataExport | Boolean | No | Determines whether the attribute should be masked when included in data exports. |
linkedToProfileDataObjectField | String | No | Reference key pointing to a profile attribute (for example, profile.mobile). |
reason | String | Required only for delete | Reason for deleting the attribute. |
Validation Rules
The following validation rules apply to attribute operations in this API.
Attribute-level rules
action is mandatory. Allowed values: create, update, delete
If action = create or update:
name, label, and dataType are required.
dateTimeFormat is required only when dataType = date.
If action = delete:
name is required.
reason is recommended.
Linked profile reference rules
Allowed format: profile.<publicAttributeName>
Internal IDs or internal attribute names must not be used.
Supported Date and DateTime Formats
The following date and datetime formats are supported.
Type | Format |
|---|---|
Date | dd/MM/yyyy |
Date | dd-MM-yyyy |
Date | MM/dd/yyyy |
Date | MM-dd-yyyy |
Date | yyyy/MM/dd |
Date | yyyy-MM-dd |
Date | dd/MMM/yyyy |
Date | dd-MMM-yyyy |
DateTime | dd/MM/yyyy HH:mm |
DateTime | dd/MM/yyyy HH:mm:ss |
DateTime | dd-MM-yyyy HH:mm |
DateTime | dd-MM-yyyy HH:mm:ss |
DateTime | MM/dd/yyyy HH:mm |
DateTime | MM/dd/yyyy HH:mm:ss |
DateTime | MM-dd-yyyy HH:mm |
DateTime | MM-dd-yyyy HH:mm:ss |
DateTime | yyyy/MM/dd HH:mm |
DateTime | yyyy/MM/dd HH:mm:ss |
DateTime | yyyy-MM-dd HH:mm |
DateTime | yyyy-MM-dd HH:mm:ss |
DateTime | yyyy-MM-ddTHH:mm:ss |
DateTime | dd/MMM/yyyy HH:mm |
DateTime | dd/MMM/yyyy HH:mm:ss |
DateTime | dd-MMM-yyyy HH:mm |
DateTime | dd-MMM-yyyy HH:mm:ss |
Supported Category Values
The following category values are supported:
Business
Phone
Email
Personal Information
Contact Information
Address Information
Identification
Education and Employment
Business Information
Financial Information
Household Information
Demographic Information
Others
System
Sample Response
{
"entities": [
{
"entityName": "Profile",
"attributes": [
{
"action": "create",
"name": "preferredLanguage",
"label": "Preferred Language",
"dataType": "string",
"category": {
"category": "business",
"categoryID": 10
},
"isMergeIdentifier": false,
"isShowInProfile": false,
"isMaskOnScreen": false,
"isMaskInDataExport": false,
"linkedToProfileDataObjectField": null
},
{
"action": "update",
"name": "email",
"label": "Email Address (Primary)",
"category": {
"category": "business",
"categoryID": 10
},
"isShowInProfile": true,
"isMaskOnScreen": true,
"isMaskInDataExport": true,
"linkedToProfileDataObjectField": "profile.email"
},
{
"action": "delete",
"name": "oldCustomerCode",
"reason": "Deprecated field"
}
]
}
{
"entityName": "LoanApplications",
"attributes": [
{
"action": "create",
"name": "loanStartDate",
"label": "Loan Start Date",
"dataType": "date",
"dateTimeFormat": {
"dateTimeFormatID": 20,
"format": "dd/MM/yyyy",
"type": "date"
},
"category": {
"category": "business",
"categoryID": 10
},
"isMergeIdentifier": false,
"isShowInProfile" : false,
"isMaskOnScreen" : false,
"isMaskInDataExport" : false,
"linkedToProfileDataObjectField": "profile.mobile"
},
{
"action": "create",
"name": "loanAmount",
"label": "Loan Amount",
"dataType": "number",
"category": {
"category": "business",
"categoryID": 10
},
"isMergeIdentifier": false,
"isShowInProfile" : false,
"isMaskOnScreen" : false,
"isMaskInDataExport" : false,
"linkedToProfileDataObjectField": null
},
{
"action": "delete",
"name": "obsoleteLoanFlag",
"reason": "Field removed per new schema"
}
]
}
]
}Sample Response
{
"entities": [
{
"entityName": "Profile",
"attributes": [
{
"action": "create",
"name": "preferredLanguage",
"label": "Preferred Language",
"dataType": "string",
"category": {
"category": "business",
"categoryID": "10"
},
"isMergeIdentifier": false,
"isShowInProfile": false,
"isMaskOnScreen": false,
"isMaskInDataExport": false,
"linkedToProfileDataObjectField": null
},
{
"action": "update",
"name": "email",
"label": "Email Address (Primary)",
"category": {
"category": "business",
"categoryID": "10"
},
"isShowInProfile": true,
"isMaskOnScreen": true,
"isMaskInDataExport": true,
"linkedToProfileDataObjectField": "profile.email"
},
{
"action": "delete",
"name": "oldCustomerCode",
"reason": "Deprecated field"
}
]
},
{
"entityName": "LoanApplications",
"attributes": [
{
"action": "create",
"name": "loanStartDate",
"label": "Loan Start Date",
"dataType": "date",
"dateTimeFormat": {
"dateTimeFormatID": 20,
"format": "dd/MM/yyyy",
"type": "date"
},
"category": {
"category": "business",
"categoryID": "10"
},
"isMergeIdentifier": false,
"isShowInProfile": false,
"isMaskOnScreen": false,
"isMaskInDataExport": false,
"linkedToProfileDataObjectField": "profile.mobile"
},
{
"action": "create",
"name": "loanAmount",
"label": "Loan Amount",
"dataType": "number",
"category": {
"category": "business",
"categoryID": "10"
},
"isMergeIdentifier": false,
"isShowInProfile": false,
"isMaskOnScreen": false,
"isMaskInDataExport": false,
"linkedToProfileDataObjectField": null
},
{
"action": "delete",
"name": "obsoleteLoanFlag",
"reason": "Field removed per new schema"
}
]
}
]
}
Response Field Description
This table outlines the response fields for the API request, including their types, whether they are, and their descriptions.
Field Name | Data Type | Present In | Description |
|---|---|---|---|
jobId | String | Success, Partial Success, Error | A unique identifier assigned to the bulk attribute operation. Used for tracking and retrieving status. |
status | String | Success, Partial Success, Error | Represents the final outcome of the request. Possible values: success, partial_success, error. |
summary | Object | Success, Partial Success | Aggregated counts of processed attributes across all entities. |
summary.totalEntitiesProcessed | Number | Success, Partial Success | Total number of entities processed in the request. |
summary.totalAttributesProcessed | Number | Success, Partial Success | Total number of attributes processed across all entities. |
summary.created | Number | Success, Partial Success | Number of attributes successfully created. |
summary.updated | Number | Success, Partial Success | Number of attributes successfully updated. |
summary.deleted | Number | Success, Partial Success | Number of attributes successfully deleted. |
summary.failed | Number | Partial Success | Number of attributes that failed during processing. |
results | Array | Success, Partial Success | Contains the per-entity operation status and attribute-level details. |
results[].entityName | String | Success, Partial Success | Name of the entity (e.g., Profile, LoanApplications) to which the attributes belong. |
results[].attributes | Array | Success, Partial Success | List of attributes processed for that specific entity. |
results[].attributes[].name | String | Success, Partial Success | The attribute name that the operation was attempted on. |
results[].attributes[].action | String | Success, Partial Success | Operation performed — create, update, or delete. |
results[].attributes[].status | String | Success, Partial Success | Processing outcome for that attribute — success or failed. |
results[].attributes[].message | String | Partial Success | Error message describing why the operation failed (present only when status = failed). |
Limit
The following table outlines the limits for the Create Attributes (Bulk) API.
Parameter | Limit | Notes |
|---|---|---|
Maximum attributes per request | 100 attributes | Each request can include up to 100 attributes across all entities. |
Error Response
The following table outlines the error responses for the API with descriptions.
Error Response | Description |
|---|---|
401 – Unauthorized | Indicates that the API request is not authenticated. |
400 – Bad Request | The input format is incorrect. Refer to the documentation for the correct format. |
405 – Method Not Allowed | Indicates that the HTTP method used in the request is not allowed for the specified resource. |
429 – Too Many Requests | Indicates that the client has exceeded the allowed number of requests within a given time frame. |
413 – Attributes are Too Large | Indicates that the request exceeded the maximum limit of 100 attributes and was rejected. |