> ## Documentation Index
> Fetch the complete documentation index at: https://docs.usestatemachines.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Salesforce known differences

> Compatibility boundaries and recorded gaps that affect assertions against the Salesforce replica.

A passing test establishes the asserted behavior for one replica app version, Salesforce API version, and actor. Coverage of an endpoint does not establish every Salesforce behavior associated with that endpoint.

Conformance tests compare selected requests with captured Salesforce responses. Other behaviors have local regression tests without a captured Salesforce comparison.

## Supported scope and boundaries

| Area | Replica behavior | Consequence for a test |
| - | - | - |
| Organization data | Each app version starts with a predefined catalog and data. Environment creation does not import an external organization. | Customer-specific fields and packages are available only if the app's catalog includes them. A snapshot copies a State Machines environment, not an external Salesforce organization. |
| Custom schema | The internal catalog represents custom objects and fields. Public app settings do not expose schema import or deployment, and the registered routes do not provide a general Metadata API. | Internal custom-field tests do not establish a customer-facing metadata deployment workflow. |
| Formulas and automation | Describe can expose calculated-field metadata. The runtime implements specific defaults, derivations, validations, and related-record effects. It has no general customer formula, Flow, or Apex execution engine. | A calculated flag or default formula in describe is not a guarantee that arbitrary automation executes. |
| REST discovery | The resource directory lists a subset of registered routes. | Use the [API reference](/apps/salesforce) for supported operation families and describe for object and field availability. |
| SOAP | Partner operations are supported. `merge` and `convertLead` return `INVALID_OPERATION`. Enterprise SOAP is unsupported. | Tests that require merge or lead conversion need separate validation against Salesforce. |
| Tooling | Only `WorkflowOutboundMessage` create, read, and delete routes are registered. | Tooling availability does not imply support for Apex tooling, custom-object deployment, or general metadata management. |
| Outbound messages | An active outbound message sends a SOAP notification on each create or update of its configured object. | This behavior does not imply evaluation of a customer's workflow criteria. |
| Change events | Selected record changes create internal events for the replica's background processing. No public route serves those events. | These internal events are not a Streaming API or Pub/Sub subscription interface. |
| Bulk | Bulk API 2.0 ingest and query are implemented. Bulk API 1.0 is unsupported. Bulk query restricts query forms and compound fields. | Use the [Bulk guide](/apps/salesforce-bulk) to select a supported query and inspect per-row failures. |
| OAuth | Token grants depend on the connected app configuration and supplied credentials. No authorization endpoint is registered for a browser authorization-code flow. | Availability of `/token` does not make the replica a complete Salesforce sign-in service. |
| Versions | Earlier served versions project from the release's baseline catalog. Object availability and protocol policies vary by version. | A served version is not a separate historical Salesforce installation. Keep app version and API version in test reports. |
| Quotas and timing | The replica counts daily API requests but does not enforce Salesforce API limits. Bulk jobs run on the replica's own workers. | `/limits`, completion times, and throughput do not predict a customer's Salesforce capacity. |
| Daily API limit | The replica never returns `REQUEST_LIMIT_EXCEEDED`. | Do not test limit-exhaustion handling against the replica. |
| Bulk upload size | One Bulk API 2.0 upload is capped at 20 MiB. Salesforce accepts 150 MB. | Split large fixtures into several jobs. |
| Child rows larger than a page | The replica returns the whole child set inside its parent. Salesforce pages it on its own locator. | Do not test child-locator handling against the replica. |

## Recorded compatibility gaps

Each gap covers only the captured request and caller. The rest of the operation can still match Salesforce.

| Scenario | Recorded difference | Test guidance |
| - | - | - |
| SOQL query plans | The `explain` parameter is ignored. | Do not assert Salesforce optimizer plans or costs against the replica. |
| Child query with `LIMIT` and no `ORDER BY` | The captured organization and replica returned different child rows. The capture does not establish a guaranteed order. | Specify an order when the chosen child row matters. |
| A Standard User queries its sessions | The replica hides `LoginHistory` and `AuthSession` where the captured organization exposes the user's own session information. | Do not infer session-query parity from administrator tests. |
| A Standard User requests limits | The replica returns storage limits to a Standard User. The captured organization did not. | Check the exact actor's response instead of asserting the administrator's limit keys. |
| `EntityDefinition` sharing metadata | Captured administrator and sales-manager responses remain marked as divergent. | Treat sharing-metadata introspection as an unqualified scenario until the specific fields your client needs are verified. |
| `AccountPartner` lifecycle | The replica does not reproduce the captured reverse partner record and `ReversePartnerId` link. | A successful partner create does not establish the reverse relationship behavior. |
| An `OpportunityLineItem` query error | The code, column, and value match, but the displayed query excerpt differs. | Prefer error codes and relevant fields over exact full-message equality unless the text itself is under test. |
| `USING SCOPE team` on `Product2` | The captured organization returned an internal server error. The replica answers the query and explicitly does not reproduce that failure. | Do not use the replica to reproduce this captured platform defect. |

## Other SOQL restrictions

The replica returns `MALFORMED_QUERY` with the message `<feature> is not supported` for `FOR UPDATE`, `UPDATE TRACKING`, `UPDATE VIEWSTAT`, `WITH SYSTEM_MODE`, `WITH DATA CATEGORY`, other `WITH` filters, `DISTANCE()`, `FORMULA()`, and a `FROM` list with relationship aliases. `WITH SECURITY_ENFORCED` also fails. `WITH USER_MODE`, `FOR VIEW`, and `FOR REFERENCE` are accepted and change nothing.

Bulk queries impose additional restrictions on grouping, aggregates, child queries, `TYPEOF`, `OFFSET`, field expansion, and compound fields. REST and SOAP accept up to four nested child levels from API version 58.0 and one level below it. Bulk query jobs accept none.

## Difference reports

A useful report includes the app version, Salesforce API version, actor, request method and path, expected result, actual result, and a small sanitized reproduction. Credentials and customer records are unnecessary.

[Request troubleshooting](/troubleshooting/requests) distinguishes a State Machines gateway failure from a Salesforce protocol response. Unsupported behavior needs separate validation against an appropriate Salesforce environment. A disposable test must not automatically fall back to production credentials.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.