Salesforce User Interface API

Build custom user interfaces for Salesforce data using the same API that powers Lightning Experience. Returns data and metadata in a single response with layout, picklist, and field-level security awareness.

Documentation

Specifications

Other Resources

OpenAPI Specification

salesforce-sales-cloud-ui-api-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: Salesforce Sales Cloud Salesforce User Interface API
  description: >-
    Build custom user interfaces for Salesforce data using the same API that
    powers Lightning Experience. Returns data and metadata in a single response
    with layout, picklist, and field-level security awareness. Provides
    record CRUD operations, layout metadata, picklist values, and object
    information optimized for UI rendering.
  version: 59.0.0
  termsOfService: https://www.salesforce.com/company/legal/agreements/
  contact:
    name: Salesforce Developer Support
    url: https://developer.salesforce.com/
  license:
    name: Salesforce Master Subscription Agreement
    url: https://www.salesforce.com/company/legal/agreements/
externalDocs:
  description: User Interface API Developer Guide
  url: https://developer.salesforce.com/docs/atlas.en-us.uiapi.meta/uiapi/ui_api_get_started.htm
servers:
  - url: https://{instance}.salesforce.com/services/data/v59.0/ui-api
    description: Salesforce Production or Developer Edition
    variables:
      instance:
        default: yourInstance
        description: Your Salesforce instance identifier
security:
  - oauth2: []
  - bearerAuth: []
tags:
  - name: Layouts
    description: Page layout metadata
  - name: List Views
    description: List view metadata and records
  - name: Lookups
    description: Lookup field search
  - name: Object Info
    description: Object and field metadata for UI rendering
  - name: Picklist Values
    description: Picklist field values with record type awareness
  - name: Record UI
    description: Complete record page data including layout and metadata
  - name: Records
    description: Record CRUD operations with UI metadata
paths:
  /records/{recordId}:
    get:
      operationId: getRecord
      summary: Salesforce Sales Cloud Get a record with UI metadata
      description: >-
        Retrieves a record with field values and UI metadata. Specify the
        fields to return or use a layout mode to get the fields appropriate
        for a specific page layout. Returned data respects field-level
        security.
      tags:
        - Records
      parameters:
        - $ref: '#/components/parameters/recordId'
        - name: fields
          in: query
          description: Comma-separated list of field API names to return
          required: false
          schema:
            type: string
        - name: layoutTypes
          in: query
          description: Layout type to determine which fields to return
          required: false
          schema:
            type: string
            enum:
              - Compact
              - Full
        - name: modes
          in: query
          description: The mode for the layout
          required: false
          schema:
            type: string
            enum:
              - Create
              - Edit
              - View
        - name: optionalFields
          in: query
          description: Optional fields returned if accessible
          required: false
          schema:
            type: string
      responses:
        '200':
          description: Successfully retrieved record
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RecordRepresentation'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
    patch:
      operationId: updateRecord
      summary: Salesforce Sales Cloud Update a record
      description: >-
        Updates the specified record. Only include fields that need to be
        changed. Returns the updated record with UI metadata.
      tags:
        - Records
      parameters:
        - $ref: '#/components/parameters/recordId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                fields:
                  type: object
                  additionalProperties: true
      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 Sales Cloud Delete a record
      description: >-
        Deletes the specified record.
      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 Sales Cloud Create a record
      description: >-
        Creates a new record. Returns the created record with UI metadata
        and the new record ID.
      tags:
        - Records
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - apiName
                - fields
              properties:
                apiName:
                  type: string
                  description: The sObject API name
                fields:
                  type: object
                  additionalProperties: true
                  description: Field name-value pairs
      responses:
        '201':
          description: Record created successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RecordRepresentation'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /record-ui/{recordIds}:
    get:
      operationId: getRecordUI
      summary: Salesforce Sales Cloud Get record UI data
      description: >-
        Returns layout information, field metadata, and record data for one
        or more records in a single response. This is the most efficient way
        to get everything needed to render a record detail page.
      tags:
        - Record UI
      parameters:
        - name: recordIds
          in: path
          required: true
          description: Comma-separated list of record IDs (up to 200)
          schema:
            type: string
        - name: formFactor
          in: query
          required: false
          schema:
            type: string
            enum:
              - Large
              - Medium
              - Small
        - name: layoutTypes
          in: query
          required: false
          schema:
            type: string
            enum:
              - Compact
              - Full
        - name: modes
          in: query
          required: false
          schema:
            type: string
            enum:
              - Create
              - Edit
              - View
      responses:
        '200':
          description: Successfully retrieved record UI data
          content:
            application/json:
              schema:
                type: object
                properties:
                  layouts:
                    type: object
                    additionalProperties: true
                  objectInfos:
                    type: object
                    additionalProperties:
                      $ref: '#/components/schemas/ObjectInfo'
                  records:
                    type: object
                    additionalProperties:
                      $ref: '#/components/schemas/RecordRepresentation'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /layout/{objectApiName}:
    get:
      operationId: getRecordLayout
      summary: Salesforce Sales Cloud Get record layout metadata
      description: >-
        Returns layout metadata for the specified sObject including sections,
        fields, and their arrangement on the page. Respects record type
        and profile-based layout assignments.
      tags:
        - Layouts
      parameters:
        - name: objectApiName
          in: path
          required: true
          description: The API name of the sObject
          schema:
            type: string
        - name: layoutType
          in: query
          required: false
          schema:
            type: string
            enum:
              - Compact
              - Full
        - name: mode
          in: query
          required: false
          schema:
            type: string
            enum:
              - Create
              - Edit
              - View
        - name: recordTypeId
          in: query
          required: false
          description: The record type ID for record-type-specific layouts
          schema:
            type: string
      responses:
        '200':
          description: Successfully retrieved layout
          content:
            application/json:
              schema:
                type: object
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
  /object-info/{objectApiName}:
    get:
      operationId: getObjectInfo
      summary: Salesforce Sales Cloud Get object metadata for UI
      description: >-
        Returns metadata about the specified sObject optimized for UI
        rendering, including field metadata, record type info, child
        relationships, and theme information.
      tags:
        - Object Info
      parameters:
        - name: objectApiName
          in: path
          required: true
          schema:
            type: string
      responses:
        '200':
          description: Successfully retrieved object info
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ObjectInfo'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
  /object-info/{objectApiName}/picklist-values/{recordTypeId}:
    get:
      operationId: getPicklistValues
      summary: Salesforce Sales Cloud Get picklist values for all fields
      description: >-
        Returns the picklist values for all picklist fields on the specified
        object, filtered by record type. Includes dependent picklist
        controlling field information.
      tags:
        - Picklist Values
      parameters:
        - name: objectApiName
          in: path
          required: true
          schema:
            type: string
        - name: recordTypeId
          in: path
          required: true
          description: The record type ID (use 012000000000000AAA for master)
          schema:
            type: string
      responses:
        '200':
          description: Successfully retrieved picklist values
          content:
            application/json:
              schema:
                type: object
                properties:
                  picklistFieldValues:
                    type: object
                    additionalProperties:
                      type: object
                      properties:
                        controllerValues:
                          type: object
                          additionalProperties:
                            type: integer
                        defaultValue:
                          nullable: true
                        url:
                          type: string
                        values:
                          type: array
                          items:
                            $ref: '#/components/schemas/PicklistValue'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
  /object-info/{objectApiName}/picklist-values/{recordTypeId}/{fieldApiName}:
    get:
      operationId: getPicklistValuesByField
      summary: Salesforce Sales Cloud Get picklist values for a specific field
      description: >-
        Returns the picklist values for the specified picklist field,
        filtered by record type.
      tags:
        - Picklist Values
      parameters:
        - name: objectApiName
          in: path
          required: true
          schema:
            type: string
        - name: recordTypeId
          in: path
          required: true
          schema:
            type: string
        - name: fieldApiName
          in: path
          required: true
          description: The API name of the picklist field
          schema:
            type: string
      responses:
        '200':
          description: Successfully retrieved picklist values
          content:
            application/json:
              schema:
                type: object
                properties:
                  controllerValues:
                    type: object
                  defaultValue:
                    nullable: true
                  url:
                    type: string
                  values:
                    type: array
                    items:
                      $ref: '#/components/schemas/PicklistValue'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
  /list-ui/{listViewId}:
    get:
      operationId: getListViewRecords
      summary: Salesforce Sales Cloud Get list view records
      description: >-
        Returns records and metadata for the specified list view, including
        column definitions, sort information, and filtered records.
      tags:
        - List Views
      parameters:
        - name: listViewId
          in: path
          required: true
          schema:
            type: string
        - name: pageSize
          in: query
          required: false
          schema:
            type: integer
            default: 50
        - name: pageToken
          in: query
          required: false
          schema:
            type: string
      responses:
        '200':
          description: Successfully retrieved list view records
          content:
            application/json:
              schema:
                type: object
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
  /lookups/{objectApiName}/{fieldApiName}/{targetApiName}:
    get:
      operationId: lookupFieldSearch
      summary: Salesforce Sales Cloud Search for lookup field values
      description: >-
        Searches for records to populate a lookup field, filtered by the
        lookup filter criteria configured for the field.
      tags:
        - Lookups
      parameters:
        - name: objectApiName
          in: path
          required: true
          schema:
            type: string
        - name: fieldApiName
          in: path
          required: true
          schema:
            type: string
        - name: targetApiName
          in: path
          required: true
          schema:
            type: string
        - name: q
          in: query
          description: Search string
          required: false
          schema:
            type: string
        - name: searchType
          in: query
          required: false
          schema:
            type: string
            enum:
              - Recent
              - Search
              - TypeAhead
        - name: pageSize
          in: query
          required: false
          schema:
            type: integer
      responses:
        '200':
          description: Successfully retrieved lookup results
          content:
            application/json:
              schema:
                type: object
                properties:
                  count:
                    type: integer
                  records:
                    type: array
                    items:
                      $ref: '#/components/schemas/RecordRepresentation'
        '401':
          $ref: '#/components/responses/Unauthorized'
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 Salesforce data
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: OAuth 2.0 Access Token
  parameters:
    recordId:
      name: recordId
      in: path
      required: true
      description: The 18-character Salesforce record ID
      schema:
        type: string
  schemas:
    RecordRepresentation:
      type: object
      description: A record with field values and UI metadata
      properties:
        apiName:
          type: string
          description: The sObject API name
        childRelationships:
          type: object
          additionalProperties: true
        eTag:
          type: string
        fields:
          type: object
          additionalProperties:
            type: object
            properties:
              displayValue:
                type: string
                nullable: true
              value:
                nullable: true
        id:
          type: string
        lastModifiedById:
          type: string
        lastModifiedDate:
          type: string
          format: date-time
        recordTypeId:
          type: string
          nullable: true
        recordTypeInfo:
          type: object
          nullable: true
          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
    ObjectInfo:
      type: object
      description: Object metadata optimized for UI rendering
      properties:
        apiName:
          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
          nullable: true
        deletable:
          type: boolean
        eTag:
          type: string
        feedEnabled:
          type: boolean
        fields:
          type: object
          additionalProperties:
            type: object
            properties:
              apiName:
                type: string
              compound:
                type: boolean
              compoundComponentName:
                type: string
                nullable: true
              compoundFieldName:
                type: string
                nullable: true
              controllerName:
                type: string
                nullable: true
              controllingFields:
                type: array
                items:
                  type: string
              createable:
                type: boolean
              custom:
                type: boolean
              dataType:
                type: string
              extraTypeInfo:
                type: string
                nullable: true
              filterable:
                type: boolean
              htmlFormatted:
                type: boolean
              inlineHelpText:
                type: string
                nullable: true
              label:
                type: string
              length:
                type: integer
              nameField:
                type: boolean
              polymorphicForeignKey:
                type: boolean
              precision:
                type: integer
              reference:
                type: boolean
              referenceTargetField:
                type: string
                nullable: true
              referenceToInfos:
                type: array
                items:
                  type: object
              relationshipName:
                type: string
                nullable: true
              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
        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
        updateable:
          type: boolean
    PicklistValue:
      type: object
      properties:
        attributes:
          type: object
          nullable: true
        label:
          type: string
        validFor:
          type: array
          items:
            type: integer
          description: Indices of controlling field values for which this value is valid
        value:
          type: string
    ApiError:
      type: object
      properties:
        errorCode:
          type: string
        message:
          type: string
    ErrorResponse:
      type: array
      items:
        $ref: '#/components/schemas/ApiError'
  responses:
    BadRequest:
      description: Invalid request
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
    Unauthorized:
      description: Authentication failed
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
    NotFound:
      description: Resource not found
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'