The EGU Partner Portal provides secure external API access for authorized partners to retrieve turnaround report data programmatically using OAuth2 authentication.
┌─────────────────┐
│ External System │ 1. Request Token
│ (Partner) │────────────────────┐
└─────────────────┘ │
v
┌────────────────┐
│ Azure AD │
│ Validates: │
│ - Credentials │
│ - Role │
└────────┬───────┘
│
│ 2. Issues JWT Token
│ - appid claim
│ - ExternalSystem.Access role
│ - 1 hour expiry
v
┌─────────────────┐
│ External System │ 3. Call API with Token
└────────┬────────┘
│
v
┌────────────────────────────┐
│ Partner Portal API │
│ │
│ ✓ JWT Validation │
│ ✓ Role Check │
│ ✓ Route Restriction │
│ ✓ Company Authorization │
│ │
│ → Query Database │
│ → Return JSON │
└────────────────────────────┘
ExternalSystem.Access role can authenticate/api/external/* endpoints| Item | Value |
|---|---|
| Token URL | https://login.microsoftonline.com/f90faace-b48d-4a19-a39c-1dd7b37686e3/oauth2/v2.0/token |
| Client ID | 11a51e47-cee5-4bb6-882b-a669dfaf1cb8 |
| Client Secret | YOUR_CLIENT_SECRET |
| Grant Type | client_credentials |
| Scope | api://e85dc5b1-f01b-45bd-b48d-08f50ee2e160/.default |
| Content-Type | application/x-www-form-urlencoded |
POST https://login.microsoftonline.com/f90faace-b48d-4a19-a39c-1dd7b37686e3/oauth2/v2.0/token
Content-Type: application/x-www-form-urlencoded
grant_type=client_credentials
&client_id=11a51e47-cee5-4bb6-882b-a669dfaf1cb8
&client_secret=YOUR_CLIENT_SECRET
&scope=api://e85dc5b1-f01b-45bd-b48d-08f50ee2e160/.default
Response:
{
"token_type": "Bearer",
"expires_in": 3599,
"access_token": "eyJ0eXAiOiJKV1QiLCJhbGci..."
}
Token Lifetime: 1 hour
| Item | Value |
|---|---|
| API Base URL | https://apiservice.redbay-6992b142.swedencentral.azurecontainerapps.io/api/external |
| Authentication | Authorization: Bearer <token> |
| Content Type | application/json |
Retrieves work order turnaround data with status transitions.
GET /turnaround-report
Query Parameters:
| Name | Type | Required | Description | Example |
|---|---|---|---|---|
companyNumber | string | Yes | Company identifier | SonlincXML3 |
dateFrom | string | No | Start date (YYYY-MM-DD) | 2025-01-01 |
dateTo | string | No | End date (YYYY-MM-DD) | 2025-12-31 |
Request Example:
GET /api/external/turnaround-report?companyNumber=SonlincXML3&dateFrom=2025-01-01&dateTo=2025-12-31
Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGci...
Accept: application/json
Response (200 OK):
{
"turnaroundReportItems": [
{
"workOrderID": 1503,
"workOrderNumber": "E261503",
"workOrderTypeID": 1,
"workOrderType": "New Installation",
"consumptionCategoryID": 1,
"consumptionCategoryName": "Apartment",
"preFuseAmpere": 10,
"preFuseTypeID": 1,
"preFuseType": "Switch",
"workOrderStatusID": 2,
"workOrderStatus": "Registration Sent",
"timestamp": "2025-12-20T10:30:00Z"
}
]
}
Response Fields:
| Field | Type | Description |
|---|---|---|
workOrderID | integer | Work order identifier |
workOrderNumber | string | Work order number |
workOrderType | string | Type (e.g., "New Installation") |
consumptionCategoryName | string | Category (e.g., "Apartment") |
preFuseAmpere | integer | Pre-fuse amperage |
preFuseType | string | Pre-fuse type |
workOrderStatus | string | Status (e.g., "Registration Sent") |
timestamp | string | ISO 8601 timestamp |
HTTP Status Codes:
| Code | Description |
|---|---|
200 | Success |
400 | Invalid parameters (e.g., date range > 5 years) |
401 | Missing or invalid token |
403 | Not authorized for this company |
500 | Server error |
Validation Rules:
dateFrom must be ≤ dateToBefore external systems can be granted access, an App Role must be defined in the API App Registration.
Go to:
Microsoft Entra ID → App registrations
Open EGU.PartnerPortal.ApiService
Navigate to App roles → Create app role.
Configure the role:
| Field | Value |
|---|---|
| Display name | External System Access |
| Allowed member types | Applications |
| Value | ExternalSystem.Access |
| Description | Allows external systems to access turnaround report data |
Save the role.
Create a separate application registration for each external company.
Go to:
Microsoft Entra ID → App registrations
Select New registration
Configuration:
| Setting | Value |
|---|---|
| Name | {CompanyName}-PartnerPortal-Access |
| Supported account types | Accounts in this organizational directory only |
| Redirect URI | Leave blank |
Generate Client Secret
Open the newly created {CompanyName}-PartnerPortal-Access app.
Navigate to Certificates & secrets.
Click New client secret.
Copy the secret value immediately and store it securely.
⚠️ The secret value cannot be viewed again after creation.
Never commit secrets to source control.
Assign Permissions
EGU.PartnerPortal.ApiServiceExternalSystem.AccessCompany Mapping (API side configuration)
{
"ExternalCompanies": {
"Ravdex": {
"AppId": "11a51e47-cee5-4bb6-882b-a669dfaf1cb8",
"CompanyNumber": "YOUR_COMPANY_NUMBER",
"Name": "Ravdex"
}
}
}