Salesforce REST API

Core REST API for accessing Salesforce data and metadata programmatically.

Documentation

Specifications

Schemas & Data

Other Resources

🔗
JSONLD
https://raw.githubusercontent.com/api-evangelist/salesforce-automation/refs/heads/main/json-ld/salesforce-automation-context.jsonld
🔗
ChangeLog
https://developer.salesforce.com/docs/atlas.en-us.api_rest.meta/api_rest/rest_rns.htm
🔗
Postman Collection
https://www.postman.com/salesforce-developers/workspace/salesforce-developers/overview
🔗
NaftikoCapability
https://raw.githubusercontent.com/api-evangelist/salesforce-automation/refs/heads/main/capabilities/salesforce-rest-approvals.yaml
🔗
NaftikoCapability
https://raw.githubusercontent.com/api-evangelist/salesforce-automation/refs/heads/main/capabilities/salesforce-rest-limits.yaml
🔗
NaftikoCapability
https://raw.githubusercontent.com/api-evangelist/salesforce-automation/refs/heads/main/capabilities/salesforce-rest-records.yaml
🔗
NaftikoCapability
https://raw.githubusercontent.com/api-evangelist/salesforce-automation/refs/heads/main/capabilities/salesforce-rest-soql.yaml
🔗
NaftikoCapability
https://raw.githubusercontent.com/api-evangelist/salesforce-automation/refs/heads/main/capabilities/salesforce-rest-sosl.yaml
🔗
NaftikoCapability
https://raw.githubusercontent.com/api-evangelist/salesforce-automation/refs/heads/main/capabilities/salesforce-rest-sobjects.yaml
🔗
NaftikoCapability
https://raw.githubusercontent.com/api-evangelist/salesforce-automation/refs/heads/main/capabilities/salesforce-rest-versions.yaml
🔗
NaftikoCapability
https://raw.githubusercontent.com/api-evangelist/salesforce-automation/refs/heads/main/capabilities/salesforce-rest-workflow.yaml

OpenAPI Specification

salesforce-rest-api-openapi.json Raw ↑
{
  "openapi": "3.1.0",
  "info": {
    "title": "Salesforce REST API",
    "description": "Core REST API for accessing and manipulating Salesforce data and metadata programmatically. Supports CRUD operations on standard and custom objects, SOQL queries, SOSL searches, and access to org-level resources. Uses OAuth 2.0 for authentication and returns JSON or XML responses.",
    "version": "63.0",
    "contact": {
      "name": "Salesforce Developer Support",
      "url": "https://developer.salesforce.com/support",
      "email": "[email protected]"
    },
    "license": {
      "name": "Salesforce API Terms of Use",
      "url": "https://www.salesforce.com/company/legal/agreements/"
    }
  },
  "servers": [
    {
      "url": "https://{instance}.salesforce.com/services/data/v63.0",
      "description": "Salesforce production or developer instance",
      "variables": {
        "instance": {
          "default": "yourInstance",
          "description": "Your Salesforce instance identifier (e.g., na1, eu5, or your My Domain subdomain)"
        }
      }
    },
    {
      "url": "https://{instance}.sandbox.salesforce.com/services/data/v63.0",
      "description": "Salesforce sandbox instance",
      "variables": {
        "instance": {
          "default": "yourInstance",
          "description": "Your Salesforce sandbox instance identifier"
        }
      }
    }
  ],
  "security": [
    {
      "oauth2": []
    },
    {
      "bearerAuth": []
    }
  ],
  "paths": {
    "/": {
      "get": {
        "operationId": "getVersions",
        "summary": "List available REST API versions",
        "description": "Lists summary information about each Salesforce version currently available, including the version number, label, and a link to the version root.",
        "tags": ["Versions"],
        "security": [],
        "responses": {
          "200": {
            "description": "List of available API versions",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "version": {
                        "type": "string",
                        "description": "The API version number (e.g., 63.0)"
                      },
                      "label": {
                        "type": "string",
                        "description": "The version label (e.g., Winter '25)"
                      },
                      "url": {
                        "type": "string",
                        "description": "The relative URL for this version's resources"
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/sobjects": {
      "get": {
        "operationId": "describeGlobal",
        "summary": "Describe all available SObjects",
        "description": "Lists all available objects and their metadata for your org, including the object name, label, key prefix, custom status, and URLs for describe and row template. Equivalent to the DescribeGlobal SOAP API call.",
        "tags": ["SObjects"],
        "responses": {
          "200": {
            "description": "Global describe result with list of all SObjects",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DescribeGlobalResult"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          }
        }
      }
    },
    "/sobjects/{sObjectName}": {
      "get": {
        "operationId": "describeSObject",
        "summary": "Describe an SObject",
        "description": "Retrieves metadata about a specific SObject including its fields, child relationships, record type details, and URLs for various operations.",
        "tags": ["SObjects"],
        "parameters": [
          {
            "$ref": "#/components/parameters/sObjectName"
          }
        ],
        "responses": {
          "200": {
            "description": "SObject describe result",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SObjectDescribeResult"
                }
              }
            }
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        }
      },
      "post": {
        "operationId": "createRecord",
        "summary": "Create a new record",
        "description": "Creates a new record of the specified SObject type. Returns the ID of the newly created record. Required fields must be included in the request body.",
        "tags": ["Records"],
        "parameters": [
          {
            "$ref": "#/components/parameters/sObjectName"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "description": "Field name-value pairs for the new record. Required fields depend on the SObject type.",
                "additionalProperties": true
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Record created successfully",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CreateRecordResult"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          }
        }
      }
    },
    "/sobjects/{sObjectName}/{recordId}": {
      "get": {
        "operationId": "getRecord",
        "summary": "Get a record by ID",
        "description": "Retrieves a record by its 15-character or 18-character Salesforce ID. Use the optional fields parameter to specify which fields to return; otherwise all accessible fields are returned.",
        "tags": ["Records"],
        "parameters": [
          {
            "$ref": "#/components/parameters/sObjectName"
          },
          {
            "$ref": "#/components/parameters/recordId"
          },
          {
            "name": "fields",
            "in": "query",
            "description": "Comma-separated list of field API names to return. Reduces payload size when you only need specific fields.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Record data",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SObjectRecord"
                }
              }
            }
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        }
      },
      "patch": {
        "operationId": "updateRecord",
        "summary": "Update a record",
        "description": "Updates the specified fields of an existing record. Only include fields you want to change. Fields not included in the request body are not modified.",
        "tags": ["Records"],
        "parameters": [
          {
            "$ref": "#/components/parameters/sObjectName"
          },
          {
            "$ref": "#/components/parameters/recordId"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "description": "Field name-value pairs to update on the record.",
                "additionalProperties": true
              }
            }
          }
        },
        "responses": {
          "204": {
            "description": "Record updated successfully"
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        }
      },
      "delete": {
        "operationId": "deleteRecord",
        "summary": "Delete a record",
        "description": "Soft-deletes the record with the specified ID, moving it to the Recycle Bin. The record can be restored from the Recycle Bin within 15 days.",
        "tags": ["Records"],
        "parameters": [
          {
            "$ref": "#/components/parameters/sObjectName"
          },
          {
            "$ref": "#/components/parameters/recordId"
          }
        ],
        "responses": {
          "204": {
            "description": "Record deleted successfully"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        }
      }
    },
    "/sobjects/{sObjectName}/describe": {
      "get": {
        "operationId": "describeSObjectFull",
        "summary": "Get full SObject describe",
        "description": "Retrieves the complete metadata for an SObject type including all fields, field-level properties (type, length, picklist values), relationships, record types, child relationships, and available layouts.",
        "tags": ["SObjects"],
        "parameters": [
          {
            "$ref": "#/components/parameters/sObjectName"
          }
        ],
        "responses": {
          "200": {
            "description": "Full SObject describe result",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SObjectDescribeResult"
                }
              }
            }
          }
        }
      }
    },
    "/query": {
      "get": {
        "operationId": "query",
        "summary": "Execute a SOQL query",
        "description": "Executes a SOQL query that returns records matching the query criteria. Results are returned in batches; use the nextRecordsUrl to retrieve additional batches if totalSize exceeds the batch size (default 2000 records).",
        "tags": ["SOQL"],
        "parameters": [
          {
            "name": "q",
            "in": "query",
            "required": true,
            "description": "The SOQL query string (e.g., SELECT Id, Name FROM Account WHERE Industry = 'Technology')",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Query results",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/QueryResult"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          }
        }
      }
    },
    "/queryAll": {
      "get": {
        "operationId": "queryAll",
        "summary": "Execute a SOQL query including deleted and archived records",
        "description": "Executes a SOQL query that includes soft-deleted records (IsDeleted = true) and archived records in the results. Otherwise identical to the /query endpoint.",
        "tags": ["SOQL"],
        "parameters": [
          {
            "name": "q",
            "in": "query",
            "required": true,
            "description": "The SOQL query string",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Query results including deleted and archived records",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/QueryResult"
                }
              }
            }
          }
        }
      }
    },
    "/query/{queryLocator}": {
      "get": {
        "operationId": "queryMore",
        "summary": "Retrieve additional query results",
        "description": "Retrieves the next batch of records for a query that has more results than the batch size. Use the nextRecordsUrl value from the previous response.",
        "tags": ["SOQL"],
        "parameters": [
          {
            "name": "queryLocator",
            "in": "path",
            "required": true,
            "description": "The query locator from the nextRecordsUrl of a previous query response",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Next batch of query results",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/QueryResult"
                }
              }
            }
          }
        }
      }
    },
    "/search": {
      "get": {
        "operationId": "search",
        "summary": "Execute a SOSL search",
        "description": "Executes a SOSL (Salesforce Object Search Language) search across multiple objects. SOSL uses the Salesforce search index to find records by text, unlike SOQL which uses the database directly.",
        "tags": ["SOSL"],
        "parameters": [
          {
            "name": "q",
            "in": "query",
            "required": true,
            "description": "The SOSL search string (e.g., FIND {Acme} IN ALL FIELDS RETURNING Account(Id, Name), Contact(Id, Name, Email))",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Search results",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SearchResult"
                }
              }
            }
          }
        }
      }
    },
    "/limits": {
      "get": {
        "operationId": "getLimits",
        "summary": "Get org limits",
        "description": "Returns the remaining and maximum values for various API and resource limits for your Salesforce org, including daily API request limits, data storage, file storage, and more.",
        "tags": ["Limits"],
        "responses": {
          "200": {
            "description": "Org limits",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": {
                    "type": "object",
                    "properties": {
                      "Max": {
                        "type": "integer",
                        "description": "The maximum allowed value"
                      },
                      "Remaining": {
                        "type": "integer",
                        "description": "The remaining available value"
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/process/approvals": {
      "get": {
        "operationId": "getApprovalProcesses",
        "summary": "List approval processes",
        "description": "Returns a list of all approval processes defined in your org, along with their associated metadata.",
        "tags": ["Approvals"],
        "responses": {
          "200": {
            "description": "List of approval processes",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApprovalProcessList"
                }
              }
            }
          }
        }
      },
      "post": {
        "operationId": "submitForApproval",
        "summary": "Submit a record for approval",
        "description": "Submits a record for approval, approves, or rejects an approval request. Supports specifying next approvers, comments, and skipping entry criteria.",
        "tags": ["Approvals"],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ApprovalRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Approval action result",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ApprovalResult"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/process/rules": {
      "get": {
        "operationId": "getWorkflowRules",
        "summary": "List workflow rules",
        "description": "Returns a list of all active workflow rules in the org. Workflow rules evaluate records when they are created or edited and trigger automated actions.",
        "tags": ["Workflow"],
        "responses": {
          "200": {
            "description": "List of workflow rules",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "rules": {
                      "type": "object",
                      "additionalProperties": {
                        "type": "array",
                        "items": {
                          "$ref": "#/components/schemas/WorkflowRule"
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/process/rules/{sObjectName}": {
      "get": {
        "operationId": "getWorkflowRulesForObject",
        "summary": "Get workflow rules for an SObject",
        "description": "Returns workflow rules defined for the specified SObject type.",
        "tags": ["Workflow"],
        "parameters": [
          {
            "$ref": "#/components/parameters/sObjectName"
          }
        ],
        "responses": {
          "200": {
            "description": "Workflow rules for the object",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "rules": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/WorkflowRule"
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "securitySchemes": {
      "oauth2": {
        "type": "oauth2",
        "description": "Salesforce OAuth 2.0 authentication. Supports Web Server Flow (authorization_code), User-Agent Flow (implicit), JWT Bearer Token Flow, and Device Flow.",
        "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",
              "full": "Full access to your Salesforce data",
              "refresh_token": "Perform requests at any time on your behalf"
            }
          }
        }
      },
      "bearerAuth": {
        "type": "http",
        "scheme": "bearer",
        "description": "OAuth 2.0 access token obtained through any supported authentication flow"
      }
    },
    "parameters": {
      "sObjectName": {
        "name": "sObjectName",
        "in": "path",
        "required": true,
        "description": "The API name of the SObject type (e.g., Account, Contact, Opportunity, MyCustomObject__c)",
        "schema": {
          "type": "string"
        }
      },
      "recordId": {
        "name": "recordId",
        "in": "path",
        "required": true,
        "description": "The 15-character or 18-character Salesforce record ID",
        "schema": {
          "type": "string",
          "minLength": 15,
          "maxLength": 18
        }
      }
    },
    "responses": {
      "BadRequest": {
        "description": "The request could not be processed due to invalid syntax, missing required fields, or business rule violations",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ErrorResponse"
            }
          }
        }
      },
      "Unauthorized": {
        "description": "Authentication failed. The session has expired, the token is invalid, or required scopes are missing.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ErrorResponse"
            }
          }
        }
      },
      "NotFound": {
        "description": "The requested resource was not found. The record may have been deleted or the ID may be invalid.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ErrorResponse"
            }
          }
        }
      }
    },
    "schemas": {
      "SObjectRecord": {
        "type": "object",
        "description": "A Salesforce SObject record with attributes metadata and dynamic fields",
        "properties": {
          "attributes": {
            "type": "object",
            "properties": {
              "type": {
                "type": "string",
                "description": "The API name of the SObject type"
              },
              "url": {
                "type": "string",
                "description": "The relative REST API URL for this record"
              }
            },
            "required": ["type"]
          },
          "Id": {
            "type": "string",
            "description": "The 18-character Salesforce record ID"
          }
        },
        "additionalProperties": true
      },
      "DescribeGlobalResult": {
        "type": "object",
        "properties": {
          "encoding": {
            "type": "string",
            "description": "The character encoding of the org"
          },
          "maxBatchSize": {
            "type": "integer",
            "description": "Maximum number of records in a batch"
          },
          "sobjects": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "activateable": {
                  "type": "boolean"
                },
                "createable": {
                  "type": "boolean",
                  "description": "Whether records of this type can be created"
                },
                "custom": {
                  "type": "boolean",
                  "description": "Whether this is a custom object"
                },
                "customSetting": {
                  "type": "boolean",
                  "description": "Whether this is a custom setting"
                },
                "deletable": {
                  "type": "boolean",
                  "description": "Whether records of this type can be deleted"
                },
                "deprecatedAndHidden": {
                  "type": "boolean"
                },
                "feedEnabled": {
                  "type": "boolean"
                },
                "hasSubtypes": {
                  "type": "boolean"
                },
                "isSubtype": {
                  "type": "boolean"
                },
                "keyPrefix": {
                  "type": ["string", "null"],
                  "description": "The three-character prefix of the record ID for this object type"
                },
                "label": {
                  "type": "string",
                  "description": "The display label for this object type"
                },
                "labelPlural": {
                  "type": "string",
                  "description": "The plural display label for this object type"
                },
                "layoutable": {
                  "type": "boolean"
                },
                "mergeable": {
                  "type": "boolean"
                },
                "mruEnabled": {
                  "type": "boolean"
                },
                "name": {
                  "type": "string",
                  "description": "The API name of the SObject type"
                },
                "queryable": {
                  "type": "boolean",
                  "description": "Whether this object can be queried with SOQL"
                },
                "replicateable": {
                  "type": "boolean"
                },
                "retrieveable": {
                  "type": "boolean"
                },
                "searchable": {
                  "type": "boolean",
                  "description": "Whether this object can be searched with SOSL"
                },
                "triggerable": {
                  "type": "boolean",
                  "description": "Whether Apex triggers can be defined for this object"
                },
                "undeletable": {
                  "type": "boolean"
                },
                "updateable": {
                  "type": "boolean"
                },
                "urls": {
                  "type": "object",
                  "additionalProperties": {
                    "type": "string"
                  }
                }
              }
            }
          }
        }
      },
      "SObjectDescribeResult": {
        "type": "object",
        "description": "Full metadata for an SObject type including fields, relationships, and capabilities",
        "properties": {
          "name": {
            "type": "string",
            "description": "API name of the SObject type"
          },
          "label": {
            "type": "string"
          },
          "labelPlural": {
            "type": "string"
          },
          "keyPrefix": {
            "type": ["string", "null"]
          },
          "custom": {
            "type": "boolean"
          },
          "fields": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/FieldDescribe"
            }
          },
          "childRelationships": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "childSObject": {
                  "type": "string"
                },
                "field": {
                  "type": "string"
                },
                "relationshipName": {
                  "type": ["string", "null"]
                }
              }
            }
          },
          "recordTypeInfos": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "active": {
                  "type": "boolean"
                },
                "defaultRecordTypeMapping": {
                  "type": "boolean"
                },
                "name": {
                  "type": "string"
                },
                "recordTypeId": {
                  "type": "string"
                }
              }
            }
          }
        }
      },
      "FieldDescribe": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "description": "The API name of the field"
          },
          "label": {
            "type": "string",
            "description": "The display label"
          },
          "type": {
            "type": "string",
            "description": "The Salesforce field type (string, boolean, int, double, date, datetime, id, reference, picklist, textarea, etc.)"
          },
          "length": {
            "type": "integer",
            "description": "Maximum length for string fields"
          },
          "nillable": {
            "type": "boolean",
            "description": "Whether the field can be null"
          },
          "createable": {
            "type": "boolean"
          },
          "updateable": {
            "type": "boolean"
          },
          "custom": {
            "type": "boolean"
          },
          "picklistValues": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "value": {
                  "type": "string"
                },
                "label": {
                  "type": "string"
                },
                "active": {
                  "type": "boolean"
                },
                "defaultValue": {
                  "type": "boolean"
                }
              }
            }
          },
          "referenceTo": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "For reference fields, the SObject types this field can point to"
          },
          "relationshipName": {
            "type": ["string", "null"],
            "description": "The name of the relationship for reference fields"
          }
        }
      },
      "CreateRecordResult": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "The 18-character ID of the newly created record"
          },
          "success": {
            "type": "boolean",
            "description": "Whether the create operation succeeded"
          },
          "errors": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ApiError"
            }
          }
        }
      },
      "QueryResult": {
        "type": "object",
        "description": "Results from a SOQL query, including records and pagination information",
        "properties": {
          "totalSize": {
            "type": "integer",
            "description": "Total number of records matching the query"
          },
          "done": {
            "type": "boolean",
            "description": "Whether all results have been returned. If false, use nextRecordsUrl to retrieve more."
          },
          "nextRecordsUrl": {
            "type": "string",
            "description": "The URL to retrieve the next batch of results. Only present when done is false."
          },
          "records": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/SObjectRecord"
            }
          }
        }
      },
      "SearchResult": {
        "type": "object",
        "description": "Results from a SOSL search",
        "properties": {
          "searchRecords": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/SObjectRecord"
            }
          }
        }
      },
      "ApprovalProcessList": {
        "type": "object",
        "properties": {
          "approvals": {
            "type": "object",
            "additionalProperties": {
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "description": {
                    "type": ["string", "null"]
                  },
                  "id": {
                    "type": "string"
                  },
                  "name": {
                    "type": "string"
                  },
                  "object": {
                    "type": "string"
                  },
                  "sortOrder": {
                    "type": "integer"
                  }
                }
              }
            }
          }
        }
      },
      "ApprovalRequest": {
        "type": "object",
        "properties": {
          "requests": {
            "type": "array",
            "items": {
              "type": "object",
              "required": ["actionType"],
              "properties": {
                "actionType": {
                  "type": "string",
                  "enum": ["Submit", "Approve", "Reject"],
                  "description": "The approval action to perform"
                },
                "contextActorId": {
                  "type": "string",
                  "description": "The ID of the user submitting, approving, or rejecting the request"
                },
                "contextId": {
                  "type": "string",
                  "description": "The ID of the record to submit for approval"
                },
                "comments": {
                  "type": "string",
                  "descrip

# --- truncated at 32 KB (35 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/salesforce-automation/refs/heads/main/openapi/salesforce-rest-api-openapi.json