Entities
Entities define which Dataverse entities are exposed through the API and what operations are available for each entity.
Entity Configuration
When you add an entity to a module, you configure which operations (actions) are available:
| Operation | HTTP Method | Description |
|---|---|---|
| Create | POST | Create new records |
| Update | PUT/PATCH | Modify existing records |
| Read | GET | Retrieve single record by ID |
| Delete | DELETE | Remove records |
| Upload | POST | Upload files/attachments |
| Download | GET | Download files/attachments |
| Process Actions | POST | Execute custom actions |
| Local Option Sets | GET | Retrieve entity-specific option sets |
Entity Actions
Each entity can have multiple actions configured. Actions define:
- Endpoint Name: The URL path for the action
- Documentation: Title and description for API documentation
- Inputs: Parameters accepted by the action
- Data Fetcher: Pre-fetch queries for dependent data
- Access Control: Authorization and pre-conditions
- Entity Properties: Field mappings for create/update
Entity Structure in API Studio
Entity: Account
├── Definition
│ └── Endpoint: accounts
├── Actions:
│ ├── Create Action
│ │ ├── Definition
│ │ ├── Documentation
│ │ ├── Inputs
│ │ ├── Data Fetcher
│ │ ├── Access Control
│ │ └── Entity Properties
│ ├── Update Action
│ │ └── (similar structure)
│ ├── Read Action
│ │ └── (similar structure)
│ ├── Delete Action
│ │ └── (similar structure)
│ ├── Upload Actions
│ │ └── (for file uploads)
│ ├── Download Actions
│ │ └── (for file downloads)
│ └── Process Actions
│ └── (entity-bound custom actions)
└── Local Option Sets
└── (entity-specific picklists)
Generated API Endpoints
Each endpoint route is built from the module name, the entity logical name, and the endpoint name you configure on the action, then lowercased. For example, for the account entity in the Sales module with actions named create, get, update, and delete, the engine emits:
| Operation | Endpoint | Description |
|---|---|---|
| Create | POST /sales/account/create | Create new account |
| Update | PUT /sales/account/{id}/update | Update account |
| Read | GET /sales/account/{id}/get | Get account by ID |
| Delete | DELETE /sales/account/{id}/delete | Delete account |
| Upload | POST /sales/account/{id}/upload | Upload attachment |
| Download | GET /sales/account/{id}/download/{attachmentId} | Download a specific attachment |
| Local process | POST /sales/account/approve?id={id} | Execute an entity-bound process action |
| Option Sets | GET /sales/account/optionsets/{name} | Get a local option set |
Routes are rooted at the application host — the runtime does not add an /api/ prefix. Any such prefix (or a base path) comes from how you host the app. Route segments are always lowercased, the entity segment is the Dataverse logical name (e.g. account, incident), and every entity action carries its own endpoint-name segment. Local (entity-bound) process actions take the record id as a required query-string parameter, not a route segment.
Local Option Sets
Local Option Sets expose entity-specific (local) option sets through dedicated endpoints.
Entity: Account (logical name: account)
Local Option Sets:
├── accountcategorycode
│ └── Endpoint: /sales/account/optionsets/accountcategorycode
│
├── accountclassificationcode
│ └── Endpoint: /sales/account/optionsets/accountclassificationcode
│
└── customertypecode
└── Endpoint: /sales/account/optionsets/customertypecode
Access Control:
└── Authorization Policy:
└── Type: Demand Authenticated User
API Request:
GET /sales/account/optionsets/accountcategorycode?lcid=1033
API Response (200 OK):
[
{
"name": "Preferred Customer",
"value": 1
},
{
"name": "Standard",
"value": 2
}
]
Local option sets support the same lcid parameter as global option sets for localization.