Pega Constellation DX API Reference

Pega Digital Experience delivers a unified and branded experience across multiple channels. The Pega Digital Experience (DX) API is a collection of model-driven REST API endpoints that allow you to programmatically view, create, and update cases and assignments. This enables developers to create custom front-end experiences for Pega Platform™ applications without having to embed business logic in each individual channel. P

DX API version 2 is primarily focused on view-based authoring. It enables you to manage data views, explore metadata, and retrieve specific fields via data view endpoints.It is important to ensure that applications are compliant with the DX API. Compliance ensures that developers can create suitable front-end components using their preferred UI frameworks, aligning with the center-out architecture approach. Here are some best practices to follow when designing applications with DX APIS:

  • Harnesses should use a screen layout as the main container.
  • Visibility expressions must only reference when rules.
  • Sections should be auto-generated.
  • Sections should use one of the following layouts:
    • Table
    • Dynamic layout
    • Repeating dynamic layout (not sourced from data pages)
    • Embedded section
  • If a flow action involves editable pages (such as named pages, thread-level data pages, or requestor-level data pages), the edited values won’t be available in post-processing data transforms or activities. In these cases, use auto-populated properties (that get data from data pages) and savable data pages during flow action post-processing.
  • Always configure applications to use optimistic locking.
  • DX API v2 testing requires authorization to generate sample endpoint responses, which means you’ll need an OAuth 2.0 client registration data instance.

DX API reference with sample payload for your reference:

Action

Method

URL

Category

Sample API Request

Add a record in the Data table

Post

https://{LabInstanceURL}/prweb/app/retail-banking/api/application/v2/data/D_TransactionHistorySavable

Data

{
“data”: {
“AccountHolderName”: “TEst”,
“AccountNumber”: “Test”,
“BranchLocation”: “Test”,
“EmployeeName”: “Test”,
“TransactionDate”: “2025-05-06T04:00:00.000Z”,
“TransactionDescription”: “Test”,
“TransactionID”: “Test”,
“TransactionPurpose”: “TEst”,
“TransactionAmount”: 234,
“TransactionType”: “”
},
“pageInstructions”:
}

Edit a record in the Data table

Patch

https://{LabInstanceURL}/prweb/app/retail-banking/api/application/v2/data/D_TransactionHistorySavable

Data

{
“data”: {
“EmployeeName”: “john Doe”,
“TransactionDate”: “2025-04-09T15:33:46.663Z”,
“TransactionDescription”: " savings account",
“TransactionID”: “TXN001”,
“TransactionPurpose”: “Savings”,
“TransactionType”: “Deposit”,
“TransactionAmount”: 1500.75,
“pyGUID”: “05d4c7af-6f6c-46f8-9953-16c71f6fb8b1”
},
“pageInstructions”:
}

Delete a record in the Data table

DELETE

https://{LabInstanceURL}/prweb/app/retail-banking/api/application/v2/data/D_TransactionHistorySavable?dataViewParameters=%7B%22pyGUID%22%3A%22c81983f1-37cc-46bd-a936-ab296daf9eec%22%7D

Data

{“pyGUID”:“c81983f1-37cc-46bd-a936-ab296daf9eec”}

Datatable Query without parameters

Post

https://{LabInstanceURL}/prweb/app/retail-banking/api/application/v2/data_views/D_TransactionHistoryList

Data

{
“paging”: {
“pageNumber”: 1,
“pageSize”: 1
},
“useExtendedTimeout”: true,
“includeTotalCount”: true
}

Datatable Query without parameters

Post

https://{LabInstanceURL}/prweb/app/retail-banking/api/application/v2/data_views/D_TransactionHistoryList

Data

{
“paging”: {
“pageNumber”: 1,
“pageSize”: 1
},
“dataViewParameters”: {
“AccountHolderName”: “John Doe”
},
“useExtendedTimeout”: true,
“includeTotalCount”: true
}

Datatable dynamic filter search

Post

https://{LabInstanceURL}/prweb/app/retail-banking/api/application/v2/data_views/D_TransactionHistoryList

Data

{
“dataViewParameters”: {},
“paging”: {
“pageNumber”: 1,
“pageSize”: 1
},
“query”: {
“filter”: {
“logic”: “T1”,
“filterConditions”: {
“T1”: {
“comparator”: “CONTAINS”,
“lhs”: {
“field”: “TransactionDescription”
},
“rhs”: {
“value”: “rom ATM”
},
“ignoreCase”: true
}
}
}
}
}

Datatable dynamic sort on UI

Post

https://{LabInstanceURL}/prweb/app/retail-banking/api/application/v2/data_views/D_TransactionHistoryList

Data

{
“dataViewParameters”: {},
“paging”: {
“pageNumber”: 1,
“pageSize”: 46
},
“query”: {
“sortBy”: [
{
“field”: “AccountHolderName”,
“type”: “ASC”
}
]
}
}

Datatable dynamic GroupBy on UI

Post

https://{LabInstanceURL}/prweb/app/retail-banking/api/application/v2/data_views/D_TransactionHistoryList

Data

{
“query”: {
“select”: [
{
“field”: “TransactionDescription”
},
{
“aggregation”: “TransactionDescriptionCOUNT”
},
{
“field”: “pyGUID”
}
],
“sortBy”: [
{
“field”: “TransactionDescription”,
“type”: “ASC”
}
],
“aggregations”: {
“TransactionDescriptionCOUNT”: {
“field”: “TransactionDescription”,
“summaryFunction”: “COUNT”
}
}
},
“dataViewParameters”: {}
}

Datatable dynamic Combine Column

NA

NA

At run time

Create Case

POST

https://{LabInstanceURL}/prweb/app/retail-banking/api/application/v2/cases?viewType=page

Case

{
“caseTypeID”: “ABC-AppName-Work-DXExample”,
“content”: {},
“processID”: “pyStartCase”
}

Create Case - Page

POST

https://{LabInstanceURL}/prweb/app/retail-banking/api/application/v2/cases?viewType=none&pageName=none

Case

{
“caseTypeID”: {ClassName},
“content”: {
},
“pageInstructions” :
[
{
“instruction” : “UPDATE”,
“target” : “ClientInfo”,
“content” : {
“ClientID” : “S-50798”,
“SID” : “90021”,
“ClientRequestedEffectiveDate” : “20240522”,
“SubmittedBy” : {
“pyFullName” : “Ramesh Sangili”,
“pyEmail1” : “[email protected]
}
}
}
]
}

Create Case - PageList

POST

https://{LabInstanceURL}/prweb/app/retail-banking/api/application/v2/cases?viewType=none&pageName=none

Case

{
“caseTypeID”: {ClassName},
“content”: {
},
“pageInstructions” :
[
{
“instruction” : “UPDATE”,
“target” : “ChangeRequest”,
“content” : {
“ClientID” : “S-50798”,
“SID” : “90021”,
“ClientRequestedEffectiveDate” : “20240522”,
“SubmittedBy” : {
“pyFullName” : “Ramesh Sangili”,
“pyEmail1” : “[email protected]
}
“AccountList” :
[
{
“AccountName” : “Account1”,
“AccountID” : “85105030202007”,
“AccountNumber” : “50242092701”
},
{
“AccountName” : “Account2”,
“AccountID” : “95481548480120”,
“AccountNumber” : “54629009361”
}
]
}
}
]
}

Finish Assignment

PATCH

https://{LabInstanceURL}/prweb/app/retail-banking/api/application/v2/assignments/{AssignmentKey}/actions/{ViewName}?viewType=form

Assignment

RequestHeader:
“etag:“20250512T112435.421 GMT”
Request payload:
{
““content””: {
““FullLegalName””: ““test””,
““NewMailingAddress””: ““test””,
““NewEmailAddress””: ““test@gmailcom””,
““NewPrimaryPhoneNumber””: “””“,
““ReasonForAddressChange””: “””",
““TransactionSinglePage””: {
““pyGUID””: ““1821d052-f5cb-470d-bdf9-4e933a72743e””
}
},
““pageInstructions””:
}

Open Assignment

GET

https://{LabInstanceURL}/prweb/app/retail-banking/api/application/v2/assignments/{AssignmentKey}?viewType=page

Assignment

Case Summary

GET

https://{LabInstanceURL}/prweb/app/retail-banking/api/application/v2/cases/{CasInseKey}/views/pyCaseSummary

Case

Screenflow - Next

PATCH

https://{LabInstanceURL}/prweb/app/retail-banking/api/application/v2/assignments/{AssignmentKey}/actions/Create?viewType=page

Assignment

{
“content”: {
“FullLegalName”: “test”,
“NewMailingAddress”: “test”,
“NewEmailAddress”: “test@gmailcom”,
“NewPrimaryPhoneNumber”: “”,
“ReasonForAddressChange”: “”
},
“pageInstructions”:
}

Screenflow - Previous

PATCH

https://{LabInstanceURL}/prweb/app/retail-banking/api/application/v2/assignments/{AssignmentKey}/navigation_steps/previous?viewType=page

Assignment

FillForm with AI

PATCH

https://{LabInstanceURL}/prweb/app/retail-banking/api/application/v2/assignments/{AssignmentKey}/actions/Create/refresh?fillFormWithAI=true

Assignment

{
“content”: {
“FullLegalName”: “”,
“NewMailingAddress”: “”,
“NewPrimaryPhoneNumber”: “”,
“NewEmailAddress”: “”,
“ReasonForAddressChange”: “”
},
“pageInstructions”:
}

GET

https://{LabInstanceURL}/prweb/app/retail-banking/api/application/v2/cases/{CasInseKey}/actions/pyUpdateCaseDetails?excludeAdditionalActions=true&viewType=form

Case

NA

Details Tab

GET

https://{LabInstanceURL}/prweb/app/retail-banking/api/application/v2/cases/{CasInseKey}/views/pyDetailsTabContent

Case

NA

Audit History

POST

https://{LabInstanceURL}/prweb/app/retail-banking/api/application/v2/data_views/D_pyWorkHistory

Data

{
“dataViewParameters”: {
“CaseInstanceKey”: “ABC-AppName-WORK A-1002”
}
}

Pulse

GET

https://{LabInstanceURL}/prweb/app/retail-banking/api/application/v2/cases/{CasInseKey}/views/pyCasePulseOnly

Case

NA

CaseFeed

GET

https://{LabInstanceURL}/prweb/app/retail-banking/api/application/v2/feeds/pyCaseFeed?filterFor={CasInseKey}&feedClass={CaseClassName}&filterBy=&pageSize=10&olderThan=

Feeds

Attachments (Step1)

POST

https://{LabInstanceURL}/prweb/app/retail-banking/api/application/v2/attachments/upload

Attachments

appendUniqueIdToFileName: true
file: (binary)

Attachments (Step2)

POSt

https://{LabInstanceURL}/prweb/app/retail-banking/api/application/v2/cases/{CasInseKey}/attachments

Attachments

{
“attachments”: [
{
“type”: “File”,
“category”: “File”,
“ID”: “60b079d2-eb1d-404d-a6dd-c61d7607561c”,
“filename”: “AlertLog_Dec27.txt”
}
]
}

GetAttachment

GET

https://{LabInstanceURL}/prweb/app/retail-banking/api/application/v2/cases/{CasInseKey}/attachments?includeThumbnail=false

Attachments

Add a Follower

POST

https://{LabInstanceURL}/prweb/app/retail-banking/api/application/v2/cases/{CasInseKey}/followers

Case

{
“users”: [
{
“ID”: “operatorID”
}
]
}

Delete a follower

DELETE

https://{LabInstanceURL}/prweb/app/retail-banking/api/application/v2/cases/{CasInseKey}/followers/operatorID

Case

Follow Cases

POST

https://{LabInstanceURL}/prweb/app/retail-banking/api/application/v2/data_views/D_pyMyFollowedCases

Data

{
“dataViewParameters”: {},
“paging”: {
“pageNumber”: 1,
“pageSize”: 101
},
“query”: {
“select”: [
{
“field”: “pyID”
},
{
“field”: “pyLabel”
},
{
“field”: “pyStatusWork”
},
{
“field”: “pxUrgencyWork”
},
{
“field”: “pxUpdateDateTime”
},
{
“field”: “pzInsKey”
},
{
“field”: “pxObjClass”
}
]
}
}

My Worklist

POST

https://{LabInstanceURL}/prweb/app/retail-banking/api/application/v2/data_views/D_pyMyWorkList

Data

{
“dataViewParameters”: {},
“includeTotalCount”: true,
“paging”: {
“pageNumber”: 1,
“pageSize”: 3
},
“query”: {
“select”: [
{
“field”: “pxAssignedOperatorID”
},
{
“field”: “pzInsKey”
},
{
“field”: “pyLabel”
},
{
“field”: “pxRefObjectKey”
},
{
“field”: “pxUrgencyAssign”
},
{
“field”: “pxRefObjectClass”
},
{
“field”: “pyAssignmentStatus”
},
{
“field”: “pxTaskLabel”
},
{
“field”: “pxProcessName”
},
{
“field”: “pxIsMultiStep”
},
{
“field”: “pxRefObjectInsName”
}
]
}
}

Recents

GET

https://{LabInstanceURL}/prweb/app/retail-banking/api/application/v2/recents?maxResultsToFetch=15

Recents

Notifications

GET

https://{LabInstanceURL}/prweb/app/retail-banking/api/application/v2/data_views/D_pyGetCurrentUserNotifications

Data

LandingPages

GET

https://{LabInstanceURL}/prweb/app/retail-banking/api/application/v2/pages/pyWorklist?pageClass=Data-Portal

Pages

Examples:
Home - https://lab-07237-bos.lab.pega.com/prweb/app/retail-banking/api/application/v2/pages/pyHome?pageClass=Data-Portal
Dashboard - https://lab-07237-bos.lab.pega.com/prweb/app/retail-banking/api/application/v2/pages/pyDashboardsManager?pageClass=Data-Portal
Explore Data - https://lab-07237-bos.lab.pega.com/prweb/app/retail-banking/api/application/v2/pages/pyDataExplorer?pageClass=Data-Portal