FlowOn API Studio
FlowOn API Studio is the visual designer where functional consultants configure API endpoints. It provides a no-code interface for defining what data and operations are exposed through the REST API.
Studio Structure
┌─────────────────────────────────────────────────────────────────────┐
│ FlowOn API STUDIO │
├─────────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────────────────────────────────────────────────┐ │
│ │ CONTEXT │ │
│ │ ┌─────────────────┐ ┌─────────────────┐ │ │
│ │ │ User │ │ Roles │ │ │
│ │ │ Properties │ │ Definitions │ │ │
│ │ └─────────────────┘ └─────────────────┘ │ │
│ └─────────────────────────────────────────────────────────────┘ │
│ │
│ ┌─────────────────────────────────────────────────────────────┐ │
│ │ OPTION SETS │ │
│ │ Global CRM Option Sets exposed as endpoints │ │
│ └─────────────────────────────────────────────────────────────┘ │
│ │
│ ┌─────────────────────────────────────────────────────────────┐ │
│ │ MODULES │ │
│ │ ┌─────────────────────────────────────────────────────┐ │ │
│ │ │ Module: Sales │ │ │
│ │ │ ├── Entities │ │ │
│ │ │ │ ├── Account │ │ │
│ │ │ │ │ ├── Create │ │ │
│ │ │ │ │ ├── Update │ │ │
│ │ │ │ │ ├── Delete │ │ │
│ │ │ │ │ ├── Upload │ │ │
│ │ │ │ │ ├── Download │ │ │
│ │ │ │ │ ├── Local Process Actions │ │ │
│ │ │ │ │ └── Local Option Sets │ │ │
│ │ │ │ └── Contact │ │ │
│ │ │ ├── Processes │ │ │
│ │ │ │ └── Global Process Actions │ │ │
│ │ │ └── Queries │ │ │
│ │ │ ├── Single Queries │ │ │
│ │ │ ├── Multi Queries │ │ │
│ │ │ └── Paginated Queries │ │ │
│ │ └─────────────────────────────────────────────────────┘ │ │
│ │ │ │
│ │ ┌─────────────────────────────────────────────────────┐ │ │
│ │ │ Module: Service │ │ │
│ │ │ ├── Entities │ │ │
│ │ │ ├── Processes │ │ │
│ │ │ └── Queries │ │ │
│ │ └─────────────────────────────────────────────────────┘ │ │
│ └─────────────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────┘
Context Configuration
The Context section defines user-related information that is available throughout the API. It establishes the security and identity foundation for API requests.
User Properties
The User configuration defines which properties are returned as part of the user context when authenticated users access the API.
| Configuration | Description |
|---|---|
| User Properties | Fields from the User entity to include in the context |
| Related Data | Associated records to include (e.g., Business Unit, Team) |
| Custom Properties | Calculated or derived values to expose |
Example User Context Configuration
User Context Properties:
├── systemuserid (GUID)
├── fullname (String)
├── internalemailaddress (String)
├── businessunitid (Entity Reference)
├── title (String)
├── Custom: IsManager (Boolean) - calculated field
└── Custom: TeamNames (String[]) - derived from team memberships
Resulting API Response:
{
"user": {
"id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"fullName": "John Smith",
"email": "john.smith@company.com",
"businessUnitId": "bu-guid-here",
"title": "Senior Analyst",
"isManager": true,
"teamNames": ["Sales Team", "Project Alpha"]
}
}
Roles
The Roles configuration defines the security roles that are used for API authorization. These roles determine what endpoints and data users can access.
| Configuration | Description |
|---|---|
| Role Definitions | Named roles used in API authorization |
| Role Mapping | How Dynamics 365 security roles map to API roles |
| Role Hierarchy | Inheritance relationships between roles |
Example Roles Configuration
API Roles:
├── Administrator
│ └── Maps to: System Administrator security role
├── Manager
│ └── Maps to: Sales Manager, Service Manager roles
├── StandardUser
│ └── Maps to: Salesperson, Customer Service Representative
└── ReadOnly
└── Maps to: Read-Only User role
Usage in API:
- Endpoints can require specific roles
- Queries can be filtered by role
- Actions can have role-based access control
Option Sets
The Option Sets section exposes Dynamics 365 global option sets as API endpoints. This allows UI applications to retrieve picklist values for dropdowns, filters, and validation.
Why Expose Option Sets?
Web and mobile applications need access to the same picklist values that appear in Dynamics 365. Instead of hardcoding these values (which break when options change), the API exposes them dynamically.
Configuration
| Setting | Description |
|---|---|
| Option Set Name | The Dynamics 365 global option set to expose |
| Endpoint Name | The URL path for retrieving this option set |
| Include Inactive | Whether to include inactive options |
| Custom Filtering | Additional filter criteria |
Example Option Sets Configuration
Exposed Option Sets:
├── AccountCategory
│ └── Endpoint: /api/optionsets/account-category
├── ContactPreferredMethod
│ └── Endpoint: /api/optionsets/contact-preferred-method
├── CaseStatus
│ └── Endpoint: /api/optionsets/case-status
└── PriorityLevel
└── Endpoint: /api/optionsets/priority-level
Option Set Request Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| lcid | Integer | No | Locale ID for label localization. Default: 1033 (English) |
Common LCID Values
| LCID | Language |
|---|---|
| 1033 | English (US) |
| 1025 | Arabic |
| 1036 | French |
| 1031 | German |
| 1034 | Spanish |
| 2052 | Chinese (Simplified) |
| 1041 | Japanese |
API Response Format
Request:
GET /api/optionsets/gender
Response (200 OK):
[
{
"name": "Male",
"value": 1
},
{
"name": "Female",
"value": 2
}
]
Request with Localization:
GET /api/optionsets/gender?lcid=1025
Response (200 OK) - Arabic:
[
{
"name": "ذكر",
"value": 1
},
{
"name": "أنثى",
"value": 2
}
]
Option Set Response Structure
| Field | Type | Description |
|---|---|---|
| name | String | Localized display label for the option |
| value | Integer | The option set value (used in API requests) |
Modules
Modules are organizational containers that group related API endpoints together. They function like folders, helping you organize your API logically by business domain or functional area.
Module Structure
| Component | Description |
|---|---|
| Module Name | Identifier for the grouping (e.g., "Sales", "Service", "Inventory") |
| Entities | CRM entities exposed within this module |
| Processes | Global process actions exposed within this module |
| Queries | Custom queries defined within this module |
Example Module Organization
Modules:
├── Sales
│ ├── Entities: Account, Contact, Opportunity, Quote
│ ├── Processes: ApproveQuote, ConvertLead
│ └── Queries: ActiveOpportunities, TopCustomers
│
├── Service
│ ├── Entities: Case, KnowledgeArticle
│ ├── Processes: EscalateCase, ResolveCase
│ └── Queries: OpenCases, CasesByPriority
│
├── Inventory
│ ├── Entities: Product, PriceListItem
│ ├── Processes: AdjustInventory
│ └── Queries: LowStockProducts, ProductCatalog
│
└── Administration
├── Entities: User, Team
├── Processes: DeactivateUser
└── Queries: ActiveUsers, TeamMembers