Entity Management API Overview
The Entity Management API lets developers create and manage the tenant's data model over HTTP — entities (tables), fields (columns), picklists, lookup filters, rollup summaries, and formulas — without opening the Setup UI. This is the headless surface: everything an administrator can do in Setup > Create > Entities is available as a REST call.
Use it for schema deployment scripts, migrations between environments, integration setup, and any programmatic tooling that provisions or edits your custom data model.
Endpoint Map
Every Entity Management resource is a regular REST 3 entity, so the standard verb-based conventions apply:
| Resource | Purpose | Base path |
|---|
| Entity | Custom tables | /api/3.0/entity/Entity |
| EntityField | Columns on an entity | /api/3.0/entity/EntityField |
| Picklist | Values inside a picklist or global picklist | /api/3.0/entity/Picklist |
| GlobalPicklistType | Shared value sets reusable across fields | /api/3.0/entity/GlobalPicklistType |
Every resource supports the standard verbs:
| Verb | Path | What it does |
|---|
| POST | /api/3.0/entity/{Resource} | Create a record. |
| GET | /api/3.0/entity/{Resource} | List records (supports the same query-string filters as the record-CRUD API). |
| GET | /api/3.0/entity/{Resource}/{id} | Get one record. |
| GET | /api/3.0/entity/{Resource}/{id}/metadata | Get the metadata (schema, layouts) sub-resource. Also available for regular data entities. |
| PATCH | /api/3.0/entity/{Resource}/{id} | Update a record. See each resource page for what is editable vs immutable. |
| DELETE | /api/3.0/entity/{Resource}/{id} | Delete a record. Entity Management deletes drop the underlying table/column and may be blocked by dependencies. |
| PUT | /api/3.0/entity/{Resource}?uniqueField={fieldName} | Upsert — match on the named unique field, insert if not found, update if found. |
Additional cross-entity endpoint: GET /api/3.0/entity/metadata?entities=Entity1,Entity2 returns metadata for multiple entities in one call.
URL and Resource Casing
The resource name in the URL (e.g. Entity, EntityField) is case-insensitive — /api/3.0/entity/Entity and /api/3.0/entity/entity resolve identically. Record IDs and field-type IDs are case-sensitive and must be sent exactly as returned. Where casing appears in payloads or picklist values, treat everything as case-sensitive unless a page says otherwise.
All record IDs are 19 characters long. The first three characters are the entity's KeyPrefix, which the platform assigns at creation time (see Entity Resource).
Authentication
Every request must include a bearer token in the Authorization header. See Get access token for the token flow.
Authorization: Bearer <token>
Content-Type: application/json
Accept: application/json
Send both Content-Type and Accept on every write so validation errors come back with a JSON body instead of a bare HTTP 406.
Permission Requirements
Entity Management is admin-level work. Two roles can call these endpoints:
- Host users — full access; some options on the entity and field models are Host-only (noted on each resource page).
- Any user whose Security Role grants CRUD on the Entity and EntityField resources.
A call from a non-privileged user returns HTTP 404 for the entity name to avoid leaking whether the resource exists.
Response Shape
Create / Update / Upsert / Delete return an ActionResponse:
{
"id": "7NS0000000000A50001",
"errors": [],
"success": true
}On failure, success is false and errors is a non-empty array. When multiple records are submitted (bulk create/upsert), the response is an array in input order, with per-record success/errors.
GET (list) returns:
{
"Records": [ { ... }, { ... } ],
"Count": 42
}GET (single record) returns the record object directly.
Custom Naming and __c Suffix
Custom entities and custom fields receive a __c suffix on their Name automatically. Send the plain name in the payload (for example, "Name": "Invoice"); the platform stores it as Invoice__c. Every subsequent API call uses the suffixed name in the URL path (for example, POST /api/3.0/entity/Invoice__c to create an Invoice record).
Where to Go Next
Entity Resource >>