User Interface API
Access record data, layouts, list views, and navigation items for building custom user interfaces. Powers Lightning web components in Experience Cloud sites with metadata-driven UI rendering.
Access record data, layouts, list views, and navigation items for building custom user interfaces. Powers Lightning web components in Experience Cloud sites with metadata-driven UI rendering.
openapi: 3.1.0
info:
title: Salesforce Experience Cloud Salesforce User Interface API
description: >-
Access record data, layouts, list views, and navigation items for building
custom user interfaces. Powers Lightning web components in Experience Cloud
sites with metadata-driven UI rendering. Returns both data and metadata
in a single response.
version: 59.0.0
contact:
name: Salesforce Developer Support
url: https://developer.salesforce.com/
license:
name: Salesforce Master Subscription Agreement
url: https://www.salesforce.com/company/legal/sfdc-website-terms-of-service/
servers:
- url: https://{instance}.salesforce.com/services/data/v59.0/ui-api
description: Salesforce Instance
variables:
instance:
default: yourInstance
description: Your Salesforce instance name or custom domain
security:
- oauth2: []
- bearerAuth: []
tags:
- name: Actions
description: Available actions for records and objects
- name: Favorites
description: User favorites management
- name: Layouts
description: Page layout metadata
- name: List Views
description: List view data and metadata
- name: Object Info
description: Object metadata for UI rendering
- name: Records
description: Record data and UI operations
paths:
/record-ui/{recordIds}:
get:
operationId: getRecordUi
summary: Salesforce Experience Cloud Get Record UI
description: >-
Returns layout information, field data, and object metadata for one
or more records. Provides everything needed to render a record detail
page including layout sections, field values, and display properties.
tags:
- Records
parameters:
- name: recordIds
in: path
required: true
description: >-
One or more record IDs (comma-separated for multiple records,
up to 200)
schema:
type: string
- name: childRelationships
in: query
description: Comma-separated list of child relationship names to include
schema:
type: string
- name: formFactor
in: query
description: Form factor for the layout
schema:
type: string
enum:
- Large
- Medium
- Small
- name: layoutTypes
in: query
description: Comma-separated layout types to return
schema:
type: string
enum:
- Compact
- Full
- name: modes
in: query
description: Comma-separated modes for the layout
schema:
type: string
enum:
- Create
- Edit
- View
- name: optionalFields
in: query
description: Comma-separated list of optional fields to include
schema:
type: string
responses:
'200':
description: Successfully retrieved record UI data
content:
application/json:
schema:
$ref: '#/components/schemas/RecordUiRepresentation'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
/records/{recordId}:
get:
operationId: getRecord
summary: Salesforce Experience Cloud Get a Record
description: >-
Returns field values and metadata for a specific record. Supports
requesting specific fields or all fields from a layout. Returns
both raw values and display-formatted values.
tags:
- Records
parameters:
- $ref: '#/components/parameters/RecordId'
- name: fields
in: query
description: Comma-separated list of field API names to return
schema:
type: string
- name: layoutTypes
in: query
description: Layout type whose fields to include
schema:
type: string
enum:
- Compact
- Full
- name: modes
in: query
description: Layout mode
schema:
type: string
enum:
- Create
- Edit
- View
- name: optionalFields
in: query
description: Optional fields to include if accessible
schema:
type: string
responses:
'200':
description: Successfully retrieved the record
content:
application/json:
schema:
$ref: '#/components/schemas/RecordRepresentation'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
patch:
operationId: updateRecord
summary: Salesforce Experience Cloud Update a Record
description: >-
Updates the specified record with the provided field values. Returns
the updated record representation including the new field values.
tags:
- Records
parameters:
- $ref: '#/components/parameters/RecordId'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/RecordInput'
responses:
'200':
description: Record updated successfully
content:
application/json:
schema:
$ref: '#/components/schemas/RecordRepresentation'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
delete:
operationId: deleteRecord
summary: Salesforce Experience Cloud Delete a Record
description: >-
Deletes the specified record. The record is moved to the Recycle
Bin.
tags:
- Records
parameters:
- $ref: '#/components/parameters/RecordId'
responses:
'204':
description: Record deleted successfully
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
/records:
post:
operationId: createRecord
summary: Salesforce Experience Cloud Create a Record
description: >-
Creates a new record of the specified sObject type. Returns the
created record representation with all field values.
tags:
- Records
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/RecordInput'
responses:
'201':
description: Record created successfully
content:
application/json:
schema:
$ref: '#/components/schemas/RecordRepresentation'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
/layout/{objectApiName}:
get:
operationId: getRecordLayout
summary: Salesforce Experience Cloud Get Record Layout
description: >-
Returns layout metadata for the specified object type including
sections, fields, and their display properties. Used to render
record forms dynamically.
tags:
- Layouts
parameters:
- $ref: '#/components/parameters/ObjectApiName'
- name: formFactor
in: query
description: Form factor for the layout
schema:
type: string
enum:
- Large
- Medium
- Small
- name: layoutType
in: query
description: Type of layout to retrieve
schema:
type: string
enum:
- Compact
- Full
- name: mode
in: query
description: Mode for the layout
schema:
type: string
enum:
- Create
- Edit
- View
- name: recordTypeId
in: query
description: Record type ID for the layout
schema:
type: string
responses:
'200':
description: Successfully retrieved record layout
content:
application/json:
schema:
$ref: '#/components/schemas/RecordLayoutRepresentation'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
/object-info/{objectApiName}:
get:
operationId: getObjectInfo
summary: Salesforce Experience Cloud Get Object Info
description: >-
Returns metadata about the specified object including fields, record
types, child relationships, and theme information. Provides the
information needed for metadata-driven UI construction.
tags:
- Object Info
parameters:
- $ref: '#/components/parameters/ObjectApiName'
responses:
'200':
description: Successfully retrieved object info
content:
application/json:
schema:
$ref: '#/components/schemas/ObjectInfoRepresentation'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
/list-ui/{listViewId}:
get:
operationId: getListViewData
summary: Salesforce Experience Cloud Get List View Data
description: >-
Returns the records and metadata for a specific list view including
columns, sorting, filtering, and the record data. Used to render
list views in custom UIs.
tags:
- List Views
parameters:
- name: listViewId
in: path
required: true
description: The ID of the list view
schema:
type: string
- name: fields
in: query
description: Additional fields to include in list view records
schema:
type: string
- name: optionalFields
in: query
description: Optional fields to include if accessible
schema:
type: string
- name: pageSize
in: query
description: Number of records per page
schema:
type: integer
default: 50
- name: pageToken
in: query
description: Token for the next page of records
schema:
type: string
- name: sortBy
in: query
description: Field API name to sort by
schema:
type: string
responses:
'200':
description: Successfully retrieved list view data
content:
application/json:
schema:
$ref: '#/components/schemas/ListViewRepresentation'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
/list-ui/{objectApiName}:
get:
operationId: getListViewsByObject
summary: Salesforce Experience Cloud Get List Views for Object
description: >-
Returns all available list views for the specified object type.
Includes list view ID, label, and developer name.
tags:
- List Views
parameters:
- $ref: '#/components/parameters/ObjectApiName'
- name: pageSize
in: query
description: Number of list views per page
schema:
type: integer
default: 20
- name: pageToken
in: query
description: Token for the next page
schema:
type: string
- name: q
in: query
description: Search term to filter list views by name
schema:
type: string
responses:
'200':
description: Successfully retrieved list views
content:
application/json:
schema:
$ref: '#/components/schemas/ListViewSummaryCollection'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
/actions/record/{recordId}:
get:
operationId: getRecordActions
summary: Salesforce Experience Cloud Get Record Actions
description: >-
Returns the actions available for a specific record based on the
current user's permissions and the record's state.
tags:
- Actions
parameters:
- $ref: '#/components/parameters/RecordId'
- name: formFactor
in: query
description: Form factor for filtering actions
schema:
type: string
enum:
- Large
- Medium
- Small
- name: sections
in: query
description: Comma-separated list of action sections
schema:
type: string
responses:
'200':
description: Successfully retrieved record actions
content:
application/json:
schema:
$ref: '#/components/schemas/RecordActionsRepresentation'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
/favorites:
get:
operationId: getFavorites
summary: Salesforce Experience Cloud Get Favorites
description: >-
Returns the list of favorites for the context user, including
records, list views, and other favorited items.
tags:
- Favorites
responses:
'200':
description: Successfully retrieved favorites
content:
application/json:
schema:
$ref: '#/components/schemas/FavoritesRepresentation'
'401':
$ref: '#/components/responses/Unauthorized'
post:
operationId: addFavorite
summary: Salesforce Experience Cloud Add a Favorite
description: >-
Adds a record, list view, or other item to the user's favorites.
tags:
- Favorites
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/FavoriteInput'
responses:
'201':
description: Favorite added successfully
content:
application/json:
schema:
$ref: '#/components/schemas/Favorite'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
/favorites/{favoriteId}:
delete:
operationId: removeFavorite
summary: Salesforce Experience Cloud Remove a Favorite
description: >-
Removes the specified item from the user's favorites.
tags:
- Favorites
parameters:
- name: favoriteId
in: path
required: true
description: The ID of the favorite to remove
schema:
type: string
responses:
'204':
description: Favorite removed successfully
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
components:
securitySchemes:
oauth2:
type: oauth2
description: Salesforce OAuth 2.0 authentication
flows:
authorizationCode:
authorizationUrl: https://login.salesforce.com/services/oauth2/authorize
tokenUrl: https://login.salesforce.com/services/oauth2/token
scopes:
api: Access and manage your data
bearerAuth:
type: http
scheme: bearer
bearerFormat: OAuth2
description: Bearer token obtained through OAuth 2.0 flow
parameters:
RecordId:
name: recordId
in: path
required: true
description: The 18-character Salesforce record ID
schema:
type: string
ObjectApiName:
name: objectApiName
in: path
required: true
description: The API name of the Salesforce object (e.g., Account, Contact)
schema:
type: string
schemas:
RecordUiRepresentation:
type: object
description: Complete UI representation for one or more records
properties:
layoutUserStates:
type: object
additionalProperties:
type: object
layouts:
type: object
description: Map of object API names to layout representations
additionalProperties:
type: object
objectInfos:
type: object
description: Map of object API names to object info
additionalProperties:
$ref: '#/components/schemas/ObjectInfoRepresentation'
records:
type: object
description: Map of record IDs to record representations
additionalProperties:
$ref: '#/components/schemas/RecordRepresentation'
RecordRepresentation:
type: object
description: Representation of a record with field values
properties:
apiName:
type: string
description: API name of the sObject type
childRelationships:
type: object
additionalProperties:
type: object
eTag:
type: string
description: Entity tag for optimistic concurrency
fields:
type: object
description: Map of field API names to field values
additionalProperties:
$ref: '#/components/schemas/FieldValueRepresentation'
id:
type: string
description: Record ID
lastModifiedById:
type: string
lastModifiedDate:
type: string
format: date-time
recordTypeId:
type: string
recordTypeInfo:
type: object
properties:
available:
type: boolean
defaultRecordTypeMapping:
type: boolean
master:
type: boolean
name:
type: string
recordTypeId:
type: string
systemModstamp:
type: string
format: date-time
weakEtag:
type: integer
RecordInput:
type: object
description: Input for creating or updating a record
properties:
apiName:
type: string
description: API name of the sObject type (required for create)
fields:
type: object
description: Map of field API names to values
additionalProperties: true
FieldValueRepresentation:
type: object
description: Field value with display formatting
properties:
displayValue:
type: string
description: Formatted display value (locale-aware)
value:
description: Raw field value
RecordLayoutRepresentation:
type: object
description: Layout metadata for an object
properties:
id:
type: string
description: Layout ID
layoutType:
type: string
enum:
- Compact
- Full
mode:
type: string
enum:
- Create
- Edit
- View
sections:
type: array
items:
$ref: '#/components/schemas/LayoutSection'
LayoutSection:
type: object
description: A section within a layout
properties:
collapsible:
type: boolean
columns:
type: integer
heading:
type: string
id:
type: string
layoutRows:
type: array
items:
type: object
properties:
layoutItems:
type: array
items:
$ref: '#/components/schemas/LayoutItem'
rows:
type: integer
useHeading:
type: boolean
LayoutItem:
type: object
description: A field item within a layout section
properties:
editableForNew:
type: boolean
editableForUpdate:
type: boolean
label:
type: string
layoutComponents:
type: array
items:
type: object
properties:
apiName:
type: string
componentType:
type: string
label:
type: string
lookupIdApiName:
type: string
required:
type: boolean
sortable:
type: boolean
ObjectInfoRepresentation:
type: object
description: Object metadata for UI rendering
properties:
apiName:
type: string
description: API name of the object
associateEntityType:
type: string
associateParentEntity:
type: string
childRelationships:
type: array
items:
type: object
properties:
childObjectApiName:
type: string
fieldName:
type: string
junctionIdListNames:
type: array
items:
type: string
junctionReferenceTo:
type: array
items:
type: string
relationshipName:
type: string
createable:
type: boolean
custom:
type: boolean
defaultRecordTypeId:
type: string
deletable:
type: boolean
feedEnabled:
type: boolean
fields:
type: object
description: Map of field API names to field metadata
additionalProperties:
type: object
properties:
apiName:
type: string
compound:
type: boolean
compoundComponentName:
type: string
compoundFieldName:
type: string
controllerName:
type: string
controllingFields:
type: array
items:
type: string
createable:
type: boolean
custom:
type: boolean
dataType:
type: string
extraTypeInfo:
type: string
filterable:
type: boolean
filteredLookupInfo:
type: object
highScaleNumber:
type: boolean
htmlFormatted:
type: boolean
inlineHelpText:
type: string
label:
type: string
length:
type: integer
nameField:
type: boolean
polymorphicForeignKey:
type: boolean
precision:
type: integer
reference:
type: boolean
referenceTargetField:
type: string
referenceToInfos:
type: array
items:
type: object
relationshipName:
type: string
required:
type: boolean
scale:
type: integer
searchPrefilterable:
type: boolean
sortable:
type: boolean
unique:
type: boolean
updateable:
type: boolean
keyPrefix:
type: string
label:
type: string
labelPlural:
type: string
layoutable:
type: boolean
mruEnabled:
type: boolean
nameFields:
type: array
items:
type: string
queryable:
type: boolean
recordTypeInfos:
type: object
additionalProperties:
type: object
properties:
available:
type: boolean
defaultRecordTypeMapping:
type: boolean
master:
type: boolean
name:
type: string
recordTypeId:
type: string
searchable:
type: boolean
themeInfo:
type: object
properties:
color:
type: string
iconUrl:
type: string
format: uri
updateable:
type: boolean
ListViewRepresentation:
type: object
description: List view data and metadata
properties:
count:
type: integer
currentPageToken:
type: string
currentPageUrl:
type: string
format: uri
info:
$ref: '#/components/schemas/ListViewInfo'
nextPageToken:
type: string
nextPageUrl:
type: string
format: uri
previousPageToken:
type: string
previousPageUrl:
type: string
format: uri
records:
type: array
items:
$ref: '#/components/schemas/RecordRepresentation'
ListViewInfo:
type: object
description: Metadata about a list view
properties:
cloneable:
type: boolean
createable:
type: boolean
deletable:
type: boolean
displayColumns:
type: array
items:
type: object
properties:
fieldApiName:
type: string
label:
type: string
sortable:
type: boolean
eTag:
type: string
filterLogicString:
type: string
filteredByInfo:
type: array
items:
type: object
id:
type: string
label:
type: string
listReference:
type: object
properties:
id:
type: string
listViewApiName:
type: string
objectApiName:
type: string
type:
type: string
orderedByInfo:
type: array
items:
type: object
properties:
fieldApiName:
type: string
isAscending:
type: boolean
label:
type: string
updateable:
type: boolean
visibility:
type: string
enum:
- Private
- Public
ListViewSummaryCollection:
type: object
description: Collection of list view summaries
properties:
count:
type: integer
currentPageToken:
type: string
currentPageUrl:
type: string
format: uri
lists:
type: array
items:
type: object
properties:
apiName:
type: string
id:
type: string
label:
type: string
listUiUrl:
type: string
format: uri
nextPageToken:
type: string
nextPageUrl:
type: string
format: uri
objectApiName:
type: string
RecordActionsRepresentation:
type: object
description: Available actions for a record
properties:
actions:
type: object
additionalProperties:
type: object
properties:
actions:
type: array
items:
type: object
properties:
actionListContext:
type: string
actionTarget:
type: string
format: uri
actionTargetType:
type: string
apiName:
type: string
externalAction:
type: boolean
iconUrl:
type: string
format: uri
id:
type: string
isMassAction:
type: boolean
label:
type: string
primary:
type: boolean
relatedListRecordId:
type: string
relatedSourceObject:
type: string
subtype:
type: string
targetObject:
type: string
targetUrl:
type: string
type:
type: string
FavoritesRepresentation:
type: object
description: User's favorites
properties:
favorites:
type: array
items:
$ref: '#/components/schemas/Favorite'
Favorite:
type: object
description: A user favorite item
properties:
color:
type: string
iconUrl:
type: string
format: uri
id:
type: string
name:
type: string
sortOrder:
type: integer
target:
type: string
targetType:
type: string
enum:
- Record
- ListView
- Object
- Dashboard
- Report
FavoriteInput:
type: object
description: Input for adding a favorite
required:
- name
- target
- targetType
properties:
name:
type: string
description: Name of the favorite
sortOrder:
type: integer
description: Sort position
target:
type: string
description: ID or reference of the item to favorite
targetType:
type: string
description: Type of item being favorited
enum:
- Record
- ListView
- Object
ErrorResponse:
type: object
description: Standard error response
properties:
errorCode:
type: string
message:
type: string
responses:
BadRequest:
description: Bad request
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/ErrorResponse'
Unauthorized:
description: Unauthorized
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/ErrorResponse'
NotFound:
description: Not found
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/ErrorResponse'