Open Mercato
Una API
Version 0.6.5
OpenAPI JSONMarkdown Docs

OpenAPI Explorer

Auto-generated OpenAPI definition for all enabled modules.

Default server: https://151.115.63.33.sslip.io/api

Authentication & Accounts

Showing 20 of 34 endpoints
GET/auth/admin/nav
Auth required

Resolve backend chrome bootstrap payload

Returns the backend chrome payload available to the authenticated administrator after applying scope, RBAC, role defaults, and personal sidebar preferences.

Responses

200Backend chrome payload
Content-Type: application/json
{
  "brand": null,
  "groups": [
    {
      "name": "string",
      "items": [
        {
          "href": "string",
          "title": "string"
        }
      ]
    }
  ],
  "settingsSections": [
    {
      "id": "string",
      "label": "string",
      "items": [
        {
          "id": "string",
          "label": "string",
          "href": "string"
        }
      ]
    }
  ],
  "settingsPathPrefixes": [
    "string"
  ],
  "profileSections": [
    {
      "id": "string",
      "label": "string",
      "items": [
        {
          "id": "string",
          "label": "string",
          "href": "string"
        }
      ]
    }
  ],
  "profilePathPrefixes": [
    "string"
  ],
  "grantedFeatures": [
    "string"
  ],
  "roles": [
    "string"
  ]
}

Example

curl -X GET "https://151.115.63.33.sslip.io/api/auth/admin/nav" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
POST/auth/feature-check
Auth required

Check feature grants for the current user

Evaluates which of the requested features are available to the signed-in user within the active tenant / organization context.

Request body (application/json)

{
  "features": [
    "string"
  ]
}

Responses

200Evaluation result
Content-Type: application/json
{
  "ok": true,
  "granted": [
    "string"
  ],
  "userId": "string"
}
400Invalid request — features array missing, too large, or contains invalid entries
Content-Type: application/json
{
  "ok": false,
  "error": "string"
}

Example

curl -X POST "https://151.115.63.33.sslip.io/api/auth/feature-check" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d "{
  \"features\": [
    \"string\"
  ]
}"
GET/auth/features
Auth requiredauth.acl.manage

List declared feature flags

Returns all static features contributed by the enabled modules along with their module source. Requires features: auth.acl.manage

Responses

200Aggregated feature catalog
Content-Type: application/json
{
  "items": [
    {
      "id": "string",
      "title": "string",
      "module": "string"
    }
  ],
  "modules": [
    {
      "id": "string",
      "title": "string"
    }
  ]
}

Example

curl -X GET "https://151.115.63.33.sslip.io/api/auth/features" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
GET/auth/locale

Set locale and redirect

Stores the selected locale in a cookie and redirects to a safe local path.

Parameters

NameInRequiredSchemaDescription
localequeryYesany
redirectqueryNoany

Responses

200Success response
Content-Type: application/json
"string"
302Locale cookie set and request redirected
Content-Type: application/json
"string"
400Invalid locale
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X GET "https://151.115.63.33.sslip.io/api/auth/locale?locale=en" \
  -H "Accept: application/json"
POST/auth/locale

Set locale

Stores the selected locale in a cookie and returns a JSON success response.

Request body (application/json)

{
  "locale": "en"
}

Responses

200Locale cookie set
Content-Type: application/json
{
  "ok": true
}
400Invalid locale or malformed request body
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X POST "https://151.115.63.33.sslip.io/api/auth/locale" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d "{
  \"locale\": \"en\"
}"
POST/auth/login

Authenticate user credentials

Validates the submitted credentials and issues a bearer token cookie for subsequent API calls.

Request body (application/x-www-form-urlencoded)

email=user%40example.com&password=string

Responses

200Authentication succeeded
Content-Type: application/json
{
  "ok": true,
  "token": "string",
  "redirect": null
}
400Validation failed
Content-Type: application/json
{
  "ok": false,
  "error": "string"
}
401Invalid credentials
Content-Type: application/json
{
  "ok": false,
  "error": "string"
}
403User lacks required role
Content-Type: application/json
{
  "ok": false,
  "error": "string"
}
429Too many login attempts
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X POST "https://151.115.63.33.sslip.io/api/auth/login" \
  -H "Accept: application/json" \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -d "email=user%40example.com&password=string"
POST/auth/logout
Auth required

Invalidate session and redirect

Clears authentication cookies and redirects the browser to the login page.

Responses

201Success response
Content-Type: application/json
"string"
302Redirect to login after successful logout
Content-Type: text/html
string

Example

curl -X POST "https://151.115.63.33.sslip.io/api/auth/logout" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
GET/auth/profile
Auth required

Get current profile

Returns the email address for the signed-in user.

Responses

200Profile payload
Content-Type: application/json
{
  "email": "user@example.com",
  "roles": [
    "string"
  ]
}
404User not found
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X GET "https://151.115.63.33.sslip.io/api/auth/profile" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
PUT/auth/profile
Auth required

Update current profile

Updates the email address or password for the signed-in user.

Request body (application/json)

{}

Responses

200Profile updated
Content-Type: application/json
{
  "ok": true,
  "email": "user@example.com"
}
400Invalid payload
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X PUT "https://151.115.63.33.sslip.io/api/auth/profile" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d "{}"
POST/auth/reset

Send reset email

Requests a password reset email for the given account. The endpoint always returns `ok: true` to avoid leaking account existence.

Request body (application/x-www-form-urlencoded)

email=user%40example.com

Responses

200Reset email dispatched (or ignored for unknown accounts)
Content-Type: application/json
{
  "ok": true
}
400Invalid request origin
Content-Type: application/json
{
  "error": "string"
}
429Too many password reset requests
Content-Type: application/json
{
  "error": "string"
}
500Password reset email origin is not configured
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X POST "https://151.115.63.33.sslip.io/api/auth/reset" \
  -H "Accept: application/json" \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -d "email=user%40example.com"
POST/auth/reset/confirm

Complete password reset

Validates the reset token and updates the user password.

Request body (application/x-www-form-urlencoded)

token=string&password=string

Responses

200Password reset succeeded
Content-Type: application/json
{
  "ok": true,
  "redirect": "string"
}
400Invalid token or payload
Content-Type: application/json
{
  "ok": false,
  "error": "string"
}
429Too many reset confirmation attempts
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X POST "https://151.115.63.33.sslip.io/api/auth/reset/confirm" \
  -H "Accept: application/json" \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -d "token=string&password=string"
GET/auth/roles
Auth requiredauth.roles.list

List roles

Returns available roles within the current tenant. Super administrators receive visibility across tenants. Requires features: auth.roles.list

Parameters

NameInRequiredSchemaDescription
idqueryNoany
pagequeryNoany
pageSizequeryNoany
searchqueryNoany
tenantIdqueryNoany

Responses

200Role collection
Content-Type: application/json
{
  "items": [
    {
      "id": "00000000-0000-4000-8000-000000000000",
      "name": "string",
      "usersCount": 1,
      "tenantId": null,
      "tenantName": null,
      "updatedAt": null
    }
  ],
  "total": 1,
  "totalPages": 1
}

Example

curl -X GET "https://151.115.63.33.sslip.io/api/auth/roles?page=1&pageSize=50" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
POST/auth/roles
Auth requiredauth.roles.manage

Create role

Creates a new role for the current tenant or globally when `tenantId` is omitted. Requires features: auth.roles.manage

Request body (application/json)

{
  "name": "string"
}

Responses

201Role created
Content-Type: application/json
{
  "id": "00000000-0000-4000-8000-000000000000"
}
400Invalid payload
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X POST "https://151.115.63.33.sslip.io/api/auth/roles" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d "{
  \"name\": \"string\"
}"
PUT/auth/roles
Auth requiredauth.roles.manage

Update role

Updates mutable fields on an existing role. Requires features: auth.roles.manage

Request body (application/json)

{
  "id": "00000000-0000-4000-8000-000000000000"
}

Responses

200Role updated
Content-Type: application/json
{
  "ok": true
}
400Invalid payload
Content-Type: application/json
{
  "error": "string"
}
404Role not found
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X PUT "https://151.115.63.33.sslip.io/api/auth/roles" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d "{
  \"id\": \"00000000-0000-4000-8000-000000000000\"
}"
DELETE/auth/roles
Auth requiredauth.roles.manage

Delete role

Deletes a role by identifier. Fails when users remain assigned. Requires features: auth.roles.manage

Parameters

NameInRequiredSchemaDescription
idqueryYesanyRole identifier

Responses

200Role deleted
Content-Type: application/json
{
  "ok": true
}
400Role cannot be deleted
Content-Type: application/json
{
  "error": "string"
}
404Role not found
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X DELETE "https://151.115.63.33.sslip.io/api/auth/roles?id=00000000-0000-4000-8000-000000000000" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
GET/auth/roles/acl
Auth requiredauth.acl.manage

Fetch role ACL

Returns the feature and organization assignments associated with a role within the current tenant. Requires features: auth.acl.manage

Parameters

NameInRequiredSchemaDescription
roleIdqueryYesany
tenantIdqueryNoany

Responses

200Role ACL entry
Content-Type: application/json
{
  "isSuperAdmin": true,
  "features": [
    "string"
  ],
  "organizations": null,
  "updatedAt": null
}
400Invalid role id
Content-Type: application/json
{
  "error": "string"
}
404Role not found
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X GET "https://151.115.63.33.sslip.io/api/auth/roles/acl?roleId=00000000-0000-4000-8000-000000000000" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
PUT/auth/roles/acl
Auth requiredauth.acl.manage

Update role ACL

Replaces the feature list, super admin flag, and optional organization assignments for a role. Requires features: auth.acl.manage

Request body (application/json)

{
  "roleId": "00000000-0000-4000-8000-000000000000",
  "organizations": null
}

Responses

200Role ACL updated
Content-Type: application/json
{
  "ok": true,
  "sanitized": true
}
400Invalid payload
Content-Type: application/json
{
  "error": "string"
}
404Role not found
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X PUT "https://151.115.63.33.sslip.io/api/auth/roles/acl" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d "{
  \"roleId\": \"00000000-0000-4000-8000-000000000000\",
  \"organizations\": null
}"
GET/auth/session/refresh

Refresh auth cookie from session token (browser)

Exchanges an existing `session_token` cookie for a fresh JWT auth cookie and redirects the browser.

Parameters

NameInRequiredSchemaDescription
redirectqueryNoanyAbsolute or relative URL to redirect after refresh

Responses

200Success response
Content-Type: application/json
"string"
302Redirect to target location when session is valid
Content-Type: text/html
string

Example

curl -X GET "https://151.115.63.33.sslip.io/api/auth/session/refresh" \
  -H "Accept: application/json"
POST/auth/session/refresh

Refresh access token (API/mobile)

Exchanges a refresh token for a new JWT access token. Pass the refresh token obtained from login in the request body.

Request body (application/json)

{
  "refreshToken": "string"
}

Responses

200New access token issued
Content-Type: application/json
{
  "ok": true,
  "accessToken": "string",
  "expiresIn": 1
}
400Missing refresh token
Content-Type: application/json
{
  "ok": false,
  "error": "string"
}
401Invalid or expired token
Content-Type: application/json
{
  "ok": false,
  "error": "string"
}
429Too many refresh attempts
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X POST "https://151.115.63.33.sslip.io/api/auth/session/refresh" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d "{
  \"refreshToken\": \"string\"
}"
GET/auth/sidebar/preferences
Auth required

Get sidebar preferences

Returns sidebar customization for the current user (default) or the specified role (`?roleId=…`, requires `auth.sidebar.manage`).

Responses

200Current sidebar configuration
Content-Type: application/json
{
  "locale": "string",
  "settings": {
    "version": 1,
    "groupOrder": [
      "string"
    ],
    "groupLabels": {
      "key": "string"
    },
    "itemLabels": {
      "key": "string"
    },
    "hiddenItems": [
      "string"
    ],
    "itemOrder": {
      "key": [
        "string"
      ]
    }
  },
  "canApplyToRoles": true,
  "roles": [
    {
      "id": "00000000-0000-4000-8000-000000000000",
      "name": "string",
      "hasPreference": true
    }
  ],
  "scope": {
    "type": "user"
  },
  "updatedAt": null
}
403Missing features for role-scope read
Content-Type: application/json
{
  "error": "string"
}
404Role not found in current tenant scope
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X GET "https://151.115.63.33.sslip.io/api/auth/sidebar/preferences" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"

Directory (Tenants & Organizations)

Showing 2 of 2 endpoints
GET/directory/organizations/lookup

Public organization lookup by slug

Responses

200Success response
Content-Type: application/json
"string"

Example

curl -X GET "https://151.115.63.33.sslip.io/api/directory/organizations/lookup" \
  -H "Accept: application/json"
GET/directory/tenants/lookup

Public tenant lookup

Responses

200Success response
Content-Type: application/json
"string"

Example

curl -X GET "https://151.115.63.33.sslip.io/api/directory/tenants/lookup" \
  -H "Accept: application/json"

API Documentation

Showing 1 of 1 endpoints
GET/version

Deployed Open Mercato version

Responses

200Success response
Content-Type: application/json
"string"

Example

curl -X GET "https://151.115.63.33.sslip.io/api/version" \
  -H "Accept: application/json"

Audit & Action Logs

Showing 5 of 5 endpoints
GET/audit_logs/audit-logs/access
Auth requiredaudit_logs.view_self

Retrieve access logs

Fetches paginated access audit logs scoped to the authenticated user. Tenant administrators can optionally expand the search to other actors or organizations. Requires features: audit_logs.view_self

Parameters

NameInRequiredSchemaDescription
organizationIdqueryNoanyLimit results to a specific organization
actorUserIdqueryNoanyFilter by actor user id (tenant administrators only)
resourceKindqueryNoanyRestrict to a resource kind such as `order` or `product`
accessTypequeryNoanyAccess type filter, e.g. `read` or `export`
pagequeryNoanyPage number (default 1)
pageSizequeryNoanyPage size (default 50)
limitqueryNoanyExplicit maximum number of records when paginating manually
beforequeryNoanyReturn logs created before this ISO-8601 timestamp
afterqueryNoanyReturn logs created after this ISO-8601 timestamp

Responses

200Access logs returned successfully
Content-Type: application/json
{
  "items": [
    {
      "id": "string",
      "resourceKind": "string",
      "resourceId": "string",
      "accessType": "string",
      "actorUserId": null,
      "actorUserName": null,
      "tenantId": null,
      "tenantName": null,
      "organizationId": null,
      "organizationName": null,
      "fields": [
        "string"
      ],
      "context": null,
      "createdAt": "string"
    }
  ],
  "canViewTenant": true,
  "page": 1,
  "pageSize": 1,
  "total": 1,
  "totalPages": 1
}
400Invalid filters supplied
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X GET "https://151.115.63.33.sslip.io/api/audit_logs/audit-logs/access" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
GET/audit_logs/audit-logs/actions
Auth requiredaudit_logs.view_self

Fetch action logs

Returns recent action audit log entries. Tenant administrators can widen the scope to other actors or organizations, and callers can optionally restrict results to undoable actions. Requires features: audit_logs.view_self

Parameters

NameInRequiredSchemaDescription
organizationIdqueryNoanyLimit results to a specific organization
actorUserIdqueryNoanyFilter logs created by specific actor IDs (tenant administrators only). Accepts a single UUID or a comma-separated UUID list.
resourceKindqueryNoanyFilter by resource kind (e.g., "order", "product")
resourceIdqueryNoanyFilter by resource ID (UUID of the specific record)
actionTypequeryNoanyFilter by action type (`create`, `edit`, `delete`, `assign`). Accepts a single value or a comma-separated list.
fieldNamequeryNoanyFilter to entries where the given field changed. Accepts a single field name or a comma-separated list.
includeRelatedqueryNoanyWhen `true`, also returns changes to child entities linked via parentResourceKind/parentResourceId
includeTotalqueryNoanyWhen `true`, the response includes the filtered total count.
undoableOnlyqueryNoanyWhen `true`, only undoable actions are returned
limitqueryNoanyMaximum number of records to return (default 50, max 1000)
offsetqueryNoanyZero-based record offset for pagination (legacy — prefer page/pageSize)
pagequeryNoanyPage number (default 1)
pageSizequeryNoanyPage size (default 50, max 200)
sortFieldqueryNoanySort field: `createdAt`, `user`, `action`, `field`, or `source`.
sortDirqueryNoanySort direction: `asc` or `desc`.
beforequeryNoanyReturn actions created before this ISO-8601 timestamp
afterqueryNoanyReturn actions created after this ISO-8601 timestamp

Responses

200Action logs retrieved successfully
Content-Type: application/json
{
  "items": [
    {
      "id": "string",
      "commandId": "string",
      "actionLabel": null,
      "executionState": "done",
      "actorUserId": null,
      "actorUserName": null,
      "tenantId": null,
      "tenantName": null,
      "organizationId": null,
      "organizationName": null,
      "resourceKind": null,
      "resourceId": null,
      "parentResourceKind": null,
      "parentResourceId": null,
      "undoToken": null,
      "createdAt": "string",
      "updatedAt": "string",
      "snapshotBefore": null,
      "snapshotAfter": null,
      "changes": null,
      "context": null
    }
  ],
  "canViewTenant": true,
  "page": 1,
  "pageSize": 1,
  "total": 1,
  "totalPages": 1
}
400Invalid filter values
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X GET "https://151.115.63.33.sslip.io/api/audit_logs/audit-logs/actions?includeRelated=false&includeTotal=false&undoableOnly=false" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
GET/audit_logs/audit-logs/actions/export
Auth requiredaudit_logs.view_self

Export action logs as CSV

Returns a CSV attachment containing filtered action audit log entries. Tenant administrators can widen the scope to other actors or organizations. Requires features: audit_logs.view_self

Parameters

NameInRequiredSchemaDescription
organizationIdqueryNoanyLimit results to a specific organization
actorUserIdqueryNoanyFilter logs created by specific actor IDs (tenant administrators only). Accepts a single UUID or a comma-separated UUID list.
resourceKindqueryNoanyFilter by resource kind (e.g., "order", "product")
resourceIdqueryNoanyFilter by resource ID (UUID of the specific record)
actionTypequeryNoanyFilter by action type (`create`, `edit`, `delete`, `assign`). Accepts a single value or a comma-separated list.
fieldNamequeryNoanyFilter to entries where the given field changed. Accepts a single field name or a comma-separated list.
includeRelatedqueryNoanyWhen `true`, also returns changes to child entities linked via parentResourceKind/parentResourceId
undoableOnlyqueryNoanyWhen `true`, only undoable actions are returned
limitqueryNoanyMaximum number of records to export (default 1000, capped at 1000)
sortFieldqueryNoanySort field: `createdAt`, `user`, `action`, `field`, or `source`.
sortDirqueryNoanySort direction: `asc` or `desc`.
beforequeryNoanyReturn actions created before this ISO-8601 timestamp
afterqueryNoanyReturn actions created after this ISO-8601 timestamp

Responses

200CSV export generated successfully
Content-Type: application/json
{
  "file": "csv"
}
400Invalid filter values
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X GET "https://151.115.63.33.sslip.io/api/audit_logs/audit-logs/actions/export?includeRelated=false&undoableOnly=false" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
POST/audit_logs/audit-logs/actions/redo
Auth requiredaudit_logs.redo_self

Redo by action log id

Redoes the latest undone command owned by the caller. Requires the action to still be eligible for redo within tenant and organization scope. Requires features: audit_logs.redo_self

Request body (application/json)

{
  "logId": "string"
}

Responses

200Redo executed successfully
Content-Type: application/json
{
  "ok": true,
  "logId": null,
  "undoToken": null
}
400Log not eligible for redo
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X POST "https://151.115.63.33.sslip.io/api/audit_logs/audit-logs/actions/redo" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d "{
  \"logId\": \"string\"
}"
POST/audit_logs/audit-logs/actions/undo
Auth requiredaudit_logs.undo_self

Undo action by token

Replays the undo handler registered for a command. The provided undo token must match the latest undoable log entry accessible to the caller. Requires features: audit_logs.undo_self

Request body (application/json)

{
  "undoToken": "string"
}

Responses

200Undo applied successfully
Content-Type: application/json
{
  "ok": true,
  "logId": "string"
}
400Invalid or unavailable undo token
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X POST "https://151.115.63.33.sslip.io/api/audit_logs/audit-logs/actions/undo" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d "{
  \"undoToken\": \"string\"
}"

Notifications

Showing 13 of 13 endpoints
GET/notifications
Auth required

List notifications

Returns a paginated collection of notifications.

Parameters

NameInRequiredSchemaDescription
statusqueryNoany
typequeryNoany
severityqueryNoany
sourceEntityTypequeryNoany
sourceEntityIdqueryNoany
sincequeryNoany
pagequeryNoany
pageSizequeryNoany
idsqueryNoanyComma-separated list of record UUIDs to filter by (max 200).

Responses

200Paginated notifications
Content-Type: application/json
{
  "items": [
    {
      "id": "00000000-0000-4000-8000-000000000000",
      "type": "string",
      "title": "string",
      "body": null,
      "titleKey": null,
      "bodyKey": null,
      "titleVariables": null,
      "bodyVariables": null,
      "icon": null,
      "severity": "string",
      "status": "string",
      "actions": [
        {
          "id": "string",
          "label": "string"
        }
      ],
      "sourceModule": null,
      "sourceEntityType": null,
      "sourceEntityId": null,
      "linkHref": null,
      "createdAt": "string",
      "readAt": null,
      "actionTaken": null
    }
  ],
  "total": 1,
  "page": 1,
  "pageSize": 1,
  "totalPages": 1
}

Example

curl -X GET "https://151.115.63.33.sslip.io/api/notifications?page=1&pageSize=20" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
POST/notifications
Auth requirednotifications.create

Create notification

Creates a notification for a user. Requires features: notifications.create

Request body (application/json)

{
  "type": "string",
  "severity": "info",
  "recipientUserId": "00000000-0000-4000-8000-000000000000"
}

Responses

201Notification created
Content-Type: application/json
{
  "id": "00000000-0000-4000-8000-000000000000"
}

Example

curl -X POST "https://151.115.63.33.sslip.io/api/notifications" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d "{
  \"type\": \"string\",
  \"severity\": \"info\",
  \"recipientUserId\": \"00000000-0000-4000-8000-000000000000\"
}"
POST/notifications/{id}/action
Auth required

POST /notifications/{id}/action

Parameters

NameInRequiredSchemaDescription
idpathYesany

Responses

201Success response
Content-Type: application/json
"string"

Example

curl -X POST "https://151.115.63.33.sslip.io/api/notifications/:id/action" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
PUT/notifications/{id}/dismiss
Auth required

PUT /notifications/{id}/dismiss

Parameters

NameInRequiredSchemaDescription
idpathYesany

Responses

200Success response
Content-Type: application/json
"string"

Example

curl -X PUT "https://151.115.63.33.sslip.io/api/notifications/:id/dismiss" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
PUT/notifications/{id}/read
Auth required

PUT /notifications/{id}/read

Parameters

NameInRequiredSchemaDescription
idpathYesany

Responses

200Success response
Content-Type: application/json
"string"

Example

curl -X PUT "https://151.115.63.33.sslip.io/api/notifications/:id/read" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
PUT/notifications/{id}/restore
Auth required

PUT /notifications/{id}/restore

Parameters

NameInRequiredSchemaDescription
idpathYesany

Responses

200Success response
Content-Type: application/json
"string"

Example

curl -X PUT "https://151.115.63.33.sslip.io/api/notifications/:id/restore" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
POST/notifications/batch
Auth requirednotifications.create

POST /notifications/batch

Requires features: notifications.create

Responses

201Success response
Content-Type: application/json
"string"

Example

curl -X POST "https://151.115.63.33.sslip.io/api/notifications/batch" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
POST/notifications/feature
Auth requirednotifications.create

POST /notifications/feature

Requires features: notifications.create

Responses

201Success response
Content-Type: application/json
"string"

Example

curl -X POST "https://151.115.63.33.sslip.io/api/notifications/feature" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
PUT/notifications/mark-all-read
Auth required

PUT /notifications/mark-all-read

Responses

200Success response
Content-Type: application/json
"string"

Example

curl -X PUT "https://151.115.63.33.sslip.io/api/notifications/mark-all-read" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
POST/notifications/role
Auth requirednotifications.create

POST /notifications/role

Requires features: notifications.create

Responses

201Success response
Content-Type: application/json
"string"

Example

curl -X POST "https://151.115.63.33.sslip.io/api/notifications/role" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
GET/notifications/settings
Auth requirednotifications.manage

GET /notifications/settings

Requires features: notifications.manage

Responses

200Success response
Content-Type: application/json
"string"

Example

curl -X GET "https://151.115.63.33.sslip.io/api/notifications/settings" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
POST/notifications/settings
Auth requirednotifications.manage

POST /notifications/settings

Requires features: notifications.manage

Responses

201Success response
Content-Type: application/json
"string"

Example

curl -X POST "https://151.115.63.33.sslip.io/api/notifications/settings" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
GET/notifications/unread-count
Auth required

GET /notifications/unread-count

Responses

200Success response
Content-Type: application/json
"string"

Example

curl -X GET "https://151.115.63.33.sslip.io/api/notifications/unread-count" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"

Attachments

Showing 14 of 14 endpoints
GET/attachments
Auth requiredattachments.view

List attachments for a record

Returns uploaded attachments for the given entity record, ordered by newest first. Requires features: attachments.view

Parameters

NameInRequiredSchemaDescription
entityIdqueryYesanyEntity identifier that owns the attachments
recordIdqueryYesanyRecord identifier within the entity
pagequeryNoany
pageSizequeryNoany

Responses

200Attachments found for the record
Content-Type: application/json
{
  "items": [
    {
      "id": "string",
      "url": "string",
      "fileName": "string",
      "fileSize": 1,
      "createdAt": "string",
      "mimeType": null,
      "content": null
    }
  ]
}
400Missing entity or record identifiers
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X GET "https://151.115.63.33.sslip.io/api/attachments?entityId=string&recordId=string" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
POST/attachments
Auth requiredattachments.manage

Upload attachment

Uploads a new attachment using multipart form-data and stores metadata for later retrieval. Requires features: attachments.manage

Request body (multipart/form-data)

entityId=string
recordId=string
file=string

Responses

200Attachment stored successfully
Content-Type: application/json
{
  "ok": true,
  "item": {
    "id": "string",
    "url": "string",
    "fileName": "string",
    "fileSize": 1,
    "content": null
  }
}
400Payload validation error
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X POST "https://151.115.63.33.sslip.io/api/attachments" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: multipart/form-data" \
  -d "{
  \"entityId\": \"string\",
  \"recordId\": \"string\",
  \"file\": \"string\"
}"
DELETE/attachments
Auth requiredattachments.manage

Delete attachment

Removes an uploaded attachment and deletes the stored asset. Requires features: attachments.manage

Parameters

NameInRequiredSchemaDescription
idqueryYesany

Responses

200Attachment deleted
Content-Type: application/json
{
  "ok": true
}
400Missing attachment identifier
Content-Type: application/json
{
  "error": "string"
}
404Attachment not found
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X DELETE "https://151.115.63.33.sslip.io/api/attachments?id=00000000-0000-4000-8000-000000000000" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
GET/attachments/file/{id}

Download or serve attachment file

Returns the raw file content for an attachment. Path parameter: {id} - Attachment UUID. Query parameter: ?download=1 - Force file download with Content-Disposition header. Access control is enforced based on partition settings.

Parameters

NameInRequiredSchemaDescription
idpathYesany

Responses

200File content with appropriate MIME type
Content-Type: application/json
"string"
400Missing attachment ID
Content-Type: application/json
{
  "error": "string"
}
401Unauthorized - authentication required for private partitions
Content-Type: application/json
{
  "error": "string"
}
403Forbidden - insufficient permissions
Content-Type: application/json
{
  "error": "string"
}
404Attachment or file not found
Content-Type: application/json
{
  "error": "string"
}
500Partition misconfigured
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X GET "https://151.115.63.33.sslip.io/api/attachments/file/:id" \
  -H "Accept: application/json"
GET/attachments/image/{id}/{slug}

Serve image with optional resizing

Returns an image attachment with optional on-the-fly resizing and cropping. Resized images are cached for performance. Only works with image MIME types. Path parameter: {id} - Attachment UUID. Query parameters: ?width=N (1-4000 pixels), ?height=N (1-4000 pixels), ?cropType=cover|contain (resize behavior).

Parameters

NameInRequiredSchemaDescription
idpathYesany
slugpathNoany

Responses

200Binary image content (Content-Type: image/jpeg, image/png, etc.)
Content-Type: application/json
"string"
400Invalid parameters, missing ID, or non-image attachment
Content-Type: application/json
{
  "error": "string"
}
401Unauthorized - authentication required for private partitions
Content-Type: application/json
{
  "error": "string"
}
403Forbidden - insufficient permissions
Content-Type: application/json
{
  "error": "string"
}
404Image not found
Content-Type: application/json
{
  "error": "string"
}
500Partition misconfigured or image rendering failed
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X GET "https://151.115.63.33.sslip.io/api/attachments/image/:id/:slug" \
  -H "Accept: application/json"
GET/attachments/library
Auth requiredattachments.view

List attachments

Returns paginated list of attachments with optional filtering by search term, partition, and tags. Includes available tags and partitions. Requires features: attachments.view

Parameters

NameInRequiredSchemaDescription
pagequeryNoanyPage number for pagination
pageSizequeryNoanyNumber of items per page (max 100)
searchqueryNoanySearch by file name (case-insensitive)
partitionqueryNoanyFilter by partition code
tagsqueryNoanyFilter by tags (comma-separated)
sortFieldqueryNoanyField to sort by
sortDirqueryNoanySort direction

Responses

200Attachments list with pagination and metadata
Content-Type: application/json
{
  "items": [
    {
      "id": "00000000-0000-4000-8000-000000000000",
      "fileName": "string",
      "fileSize": 1,
      "mimeType": "string",
      "partitionCode": "string",
      "partitionTitle": null,
      "url": null,
      "createdAt": "string",
      "tags": [
        "string"
      ],
      "assignments": [],
      "content": null
    }
  ],
  "total": 1,
  "page": 1,
  "pageSize": 1,
  "totalPages": 1,
  "availableTags": [
    "string"
  ],
  "partitions": [
    {
      "code": "string",
      "title": "string",
      "description": null,
      "isPublic": true
    }
  ]
}
400Invalid query parameters
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X GET "https://151.115.63.33.sslip.io/api/attachments/library?page=1&pageSize=25" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
GET/attachments/library/{id}
Auth requiredattachments.view

Get attachment details

Returns complete details of an attachment including metadata, tags, assignments, and custom fields. Requires features: attachments.view

Parameters

NameInRequiredSchemaDescription
idpathYesany

Responses

200Attachment details
Content-Type: application/json
{
  "item": {
    "id": "00000000-0000-4000-8000-000000000000",
    "fileName": "string",
    "fileSize": 1,
    "mimeType": "string",
    "partitionCode": "string",
    "partitionTitle": null,
    "tags": [
      "string"
    ],
    "assignments": [],
    "content": null,
    "customFields": null
  }
}
400Invalid attachment ID
Content-Type: application/json
{
  "error": "string"
}
404Attachment not found
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X GET "https://151.115.63.33.sslip.io/api/attachments/library/:id" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
PATCH/attachments/library/{id}
Auth requiredattachments.manage

Update attachment metadata

Updates attachment tags, assignments, and custom fields. Emits CRUD side effects for indexing and events. Requires features: attachments.manage

Parameters

NameInRequiredSchemaDescription
idpathYesany

Request body (application/json)

{}

Responses

200Attachment updated successfully
Content-Type: application/json
{
  "ok": true
}
400Invalid payload or attachment ID
Content-Type: application/json
{
  "error": "string"
}
404Attachment not found
Content-Type: application/json
{
  "error": "string"
}
500Failed to save attributes
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X PATCH "https://151.115.63.33.sslip.io/api/attachments/library/:id" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d "{}"
DELETE/attachments/library/{id}
Auth requiredattachments.manage

Delete attachment

Permanently deletes an attachment file from storage and database. Emits CRUD side effects. Requires features: attachments.manage

Parameters

NameInRequiredSchemaDescription
idpathYesany

Responses

200Attachment deleted successfully
Content-Type: application/json
{
  "ok": true
}
400Invalid attachment ID
Content-Type: application/json
{
  "error": "string"
}
404Attachment not found
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X DELETE "https://151.115.63.33.sslip.io/api/attachments/library/:id" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
GET/attachments/partitions
Auth requiredattachments.manage

List all attachment partitions

Returns all configured attachment partitions with storage settings, OCR configuration, and access control settings. Requires features: attachments.manage

Responses

200List of partitions
Content-Type: application/json
{
  "items": [
    {
      "id": "00000000-0000-4000-8000-000000000000",
      "code": "string",
      "title": "string",
      "description": null,
      "isPublic": true,
      "requiresOcr": true,
      "ocrModel": null,
      "configJson": null,
      "createdAt": null,
      "updatedAt": null,
      "envKey": "string"
    }
  ]
}

Example

curl -X GET "https://151.115.63.33.sslip.io/api/attachments/partitions" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
POST/attachments/partitions
Auth requiredattachments.manage

Create new partition

Creates a new attachment partition with specified storage and OCR settings. Requires unique partition code. Requires features: attachments.manage

Request body (application/json)

{
  "code": "string",
  "title": "string",
  "description": null,
  "ocrModel": null,
  "storageDriver": "local",
  "configJson": null
}

Responses

201Partition created successfully
Content-Type: application/json
{
  "item": {
    "id": "00000000-0000-4000-8000-000000000000",
    "code": "string",
    "title": "string",
    "description": null,
    "isPublic": true,
    "requiresOcr": true,
    "ocrModel": null,
    "configJson": null,
    "createdAt": null,
    "updatedAt": null,
    "envKey": "string"
  }
}
400Invalid payload or partition code
Content-Type: application/json
{
  "error": "string"
}
409Partition code already exists
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X POST "https://151.115.63.33.sslip.io/api/attachments/partitions" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d "{
  \"code\": \"string\",
  \"title\": \"string\",
  \"description\": null,
  \"ocrModel\": null,
  \"storageDriver\": \"local\",
  \"configJson\": null
}"
PUT/attachments/partitions
Auth requiredattachments.manage

Update partition

Updates an existing partition. Partition code cannot be changed. Title, description, OCR settings, and access control can be modified. Requires features: attachments.manage

Request body (application/json)

{
  "code": "string",
  "title": "string",
  "description": null,
  "ocrModel": null,
  "storageDriver": "local",
  "configJson": null,
  "id": "00000000-0000-4000-8000-000000000000"
}

Responses

200Partition updated successfully
Content-Type: application/json
{
  "item": {
    "id": "00000000-0000-4000-8000-000000000000",
    "code": "string",
    "title": "string",
    "description": null,
    "isPublic": true,
    "requiresOcr": true,
    "ocrModel": null,
    "configJson": null,
    "createdAt": null,
    "updatedAt": null,
    "envKey": "string"
  }
}
400Invalid payload or code change attempt
Content-Type: application/json
{
  "error": "string"
}
404Partition not found
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X PUT "https://151.115.63.33.sslip.io/api/attachments/partitions" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d "{
  \"code\": \"string\",
  \"title\": \"string\",
  \"description\": null,
  \"ocrModel\": null,
  \"storageDriver\": \"local\",
  \"configJson\": null,
  \"id\": \"00000000-0000-4000-8000-000000000000\"
}"
DELETE/attachments/partitions
Auth requiredattachments.manage

Delete partition

Deletes a partition. Default partitions cannot be deleted. Partitions with existing attachments cannot be deleted. Requires features: attachments.manage

Responses

200Partition deleted successfully
Content-Type: application/json
{
  "ok": true
}
400Invalid ID or default partition deletion attempt
Content-Type: application/json
{
  "error": "string"
}
404Partition not found
Content-Type: application/json
{
  "error": "string"
}
409Partition in use
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X DELETE "https://151.115.63.33.sslip.io/api/attachments/partitions" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
POST/attachments/transfer
Auth requiredattachments.manage

Transfer attachments to different record

Transfers one or more attachments from one record to another within the same entity type. Updates attachment assignments and metadata to reflect the new record. Requires features: attachments.manage

Request body (application/json)

{
  "entityId": "string",
  "attachmentIds": [
    "00000000-0000-4000-8000-000000000000"
  ],
  "toRecordId": "string"
}

Responses

200Attachments transferred successfully
Content-Type: application/json
{
  "ok": true,
  "updated": 1
}
400Invalid payload
Content-Type: application/json
{
  "error": "string"
}
404Attachments not found
Content-Type: application/json
{
  "error": "string"
}
500Attachment model missing
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X POST "https://151.115.63.33.sslip.io/api/attachments/transfer" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d "{
  \"entityId\": \"string\",
  \"attachmentIds\": [
    \"00000000-0000-4000-8000-000000000000\"
  ],
  \"toRecordId\": \"string\"
}"

Events

Showing 2 of 2 endpoints
GET/events
Auth required

List declared events

Returns every declared event. Filters: category, module, excludeTriggerExcluded (default true).

Responses

200Declared events
Content-Type: application/json
{
  "data": [
    {
      "id": "string",
      "label": "string"
    }
  ],
  "total": 1
}

Example

curl -X GET "https://151.115.63.33.sslip.io/api/events" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
GET/events/stream
Auth required

GET /events/stream

Responses

200Success response
Content-Type: application/json
"string"

Example

curl -X GET "https://151.115.63.33.sslip.io/api/events/stream" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"

Klienci

Showing 4 of 4 endpoints
GET/customers/customers
Auth requiredcustomers.customer.view

Customer (Klient) CRUD

Requires features: customers.customer.view

Responses

200Success response
Content-Type: application/json
"string"

Example

curl -X GET "https://151.115.63.33.sslip.io/api/customers/customers" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
POST/customers/customers
Auth requiredcustomers.customer.manage

Customer (Klient) CRUD

Requires features: customers.customer.manage

Responses

201Success response
Content-Type: application/json
"string"

Example

curl -X POST "https://151.115.63.33.sslip.io/api/customers/customers" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
PUT/customers/customers
Auth requiredcustomers.customer.manage

Customer (Klient) CRUD

Requires features: customers.customer.manage

Responses

200Success response
Content-Type: application/json
"string"

Example

curl -X PUT "https://151.115.63.33.sslip.io/api/customers/customers" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
DELETE/customers/customers
Auth requiredcustomers.customer.manage

Customer (Klient) CRUD

Requires features: customers.customer.manage

Responses

204Success

No response body.

Example

curl -X DELETE "https://151.115.63.33.sslip.io/api/customers/customers" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"

Energy Master Data

Showing 20 of 25 endpoints
GET/energy_master_data/hubs
Auth requiredenergy_master_data.hub.view

List hubs

Returns a paginated collection of hubs scoped to the authenticated organization. Requires features: energy_master_data.hub.view

Parameters

NameInRequiredSchemaDescription
pagequeryNoany
pageSizequeryNoany
searchqueryNoany
idqueryNoany
customerIdqueryNoany
statusqueryNoany
terytCodequeryNoany
asOfqueryNoany
idsqueryNoanyComma-separated list of record UUIDs to filter by (max 200).

Responses

200Paginated hubs
Content-Type: application/json
{
  "items": [
    {
      "id": "00000000-0000-4000-8000-000000000000",
      "customerId": "00000000-0000-4000-8000-000000000000",
      "name": "string",
      "addressLine1": null,
      "addressLine2": null,
      "city": null,
      "postalCode": null,
      "country": null,
      "terytCode": null,
      "status": "string",
      "createdAt": "string",
      "updatedAt": "string"
    }
  ],
  "total": 1,
  "totalPages": 1
}

Example

curl -X GET "https://151.115.63.33.sslip.io/api/energy_master_data/hubs?page=1&pageSize=50" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
POST/energy_master_data/hubs
Auth requiredenergy_master_data.hub.manage

Create hub

Create a hub Requires features: energy_master_data.hub.manage

Request body (application/json)

{
  "customerId": "00000000-0000-4000-8000-000000000000",
  "name": "string"
}

Responses

201Hub created
Content-Type: application/json
{
  "id": null
}

Example

curl -X POST "https://151.115.63.33.sslip.io/api/energy_master_data/hubs" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d "{
  \"customerId\": \"00000000-0000-4000-8000-000000000000\",
  \"name\": \"string\"
}"
PUT/energy_master_data/hubs
Auth requiredenergy_master_data.hub.manage

Update hub

Updates an existing hub by id. Requires features: energy_master_data.hub.manage

Request body (application/json)

{
  "id": "00000000-0000-4000-8000-000000000000"
}

Responses

200Hub updated
Content-Type: application/json
{
  "ok": true
}

Example

curl -X PUT "https://151.115.63.33.sslip.io/api/energy_master_data/hubs" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d "{
  \"id\": \"00000000-0000-4000-8000-000000000000\"
}"
DELETE/energy_master_data/hubs
Auth requiredenergy_master_data.hub.manage

Delete hub

Deletes a hub identified by id. Requires features: energy_master_data.hub.manage

Responses

200Hub deleted
Content-Type: application/json
{
  "ok": true
}

Example

curl -X DELETE "https://151.115.63.33.sslip.io/api/energy_master_data/hubs" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
GET/energy_master_data/meters
Auth requiredenergy_master_data.meter.view

List meters

Returns a paginated collection of meters scoped to the authenticated organization. Requires features: energy_master_data.meter.view

Parameters

NameInRequiredSchemaDescription
pagequeryNoany
pageSizequeryNoany
searchqueryNoany
idqueryNoany
serialNumberqueryNoany
deviceIdqueryNoany
statusqueryNoany
podIdqueryNoany
asOfqueryNoany
idsqueryNoanyComma-separated list of record UUIDs to filter by (max 200).

Responses

200Paginated meters
Content-Type: application/json
{
  "items": [
    {
      "id": "00000000-0000-4000-8000-000000000000",
      "serialNumber": "string",
      "deviceId": null,
      "remoteRead": true,
      "legalizationDate": null,
      "status": "IN_STOCK",
      "createdAt": "string",
      "updatedAt": "string"
    }
  ],
  "total": 1,
  "totalPages": 1
}

Example

curl -X GET "https://151.115.63.33.sslip.io/api/energy_master_data/meters?page=1&pageSize=50" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
POST/energy_master_data/meters
Auth requiredenergy_master_data.meter.manage

Create meter

Create a meter in the tenant pool Requires features: energy_master_data.meter.manage

Request body (application/json)

{
  "serialNumber": "string"
}

Responses

201Meter created
Content-Type: application/json
{
  "id": null
}

Example

curl -X POST "https://151.115.63.33.sslip.io/api/energy_master_data/meters" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d "{
  \"serialNumber\": \"string\"
}"
PUT/energy_master_data/meters
Auth requiredenergy_master_data.meter.manage

Update meter

Updates an existing meter by id. Requires features: energy_master_data.meter.manage

Request body (application/json)

{
  "id": "00000000-0000-4000-8000-000000000000"
}

Responses

200Meter updated
Content-Type: application/json
{
  "ok": true
}

Example

curl -X PUT "https://151.115.63.33.sslip.io/api/energy_master_data/meters" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d "{
  \"id\": \"00000000-0000-4000-8000-000000000000\"
}"
DELETE/energy_master_data/meters
Auth requiredenergy_master_data.meter.manage

Delete meter

Deletes a meter identified by id. Requires features: energy_master_data.meter.manage

Responses

200Meter deleted
Content-Type: application/json
{
  "ok": true
}

Example

curl -X DELETE "https://151.115.63.33.sslip.io/api/energy_master_data/meters" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
GET/energy_master_data/osds
Auth requiredenergy_master_data.osd.view

List osds

Returns a paginated collection of osds scoped to the authenticated organization. Requires features: energy_master_data.osd.view

Parameters

NameInRequiredSchemaDescription
pagequeryNoany
pageSizequeryNoany
searchqueryNoany
idqueryNoany
codequeryNoany
commodityqueryNoany
statusqueryNoany
idsqueryNoanyComma-separated list of record UUIDs to filter by (max 200).

Responses

200Paginated osds
Content-Type: application/json
{
  "items": [
    {
      "id": "00000000-0000-4000-8000-000000000000",
      "code": "string",
      "name": "string",
      "taxId": null,
      "commodity": "GAS",
      "status": "ACTIVE",
      "createdAt": "string",
      "updatedAt": "string"
    }
  ],
  "total": 1,
  "totalPages": 1
}

Example

curl -X GET "https://151.115.63.33.sslip.io/api/energy_master_data/osds?page=1&pageSize=50" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
POST/energy_master_data/osds
Auth requiredenergy_master_data.osd.manage

Create osd

Create an OSD (platform admin only) Requires features: energy_master_data.osd.manage

Request body (application/json)

{
  "code": "string",
  "name": "string"
}

Responses

201OSD created
Content-Type: application/json
{
  "id": null
}

Example

curl -X POST "https://151.115.63.33.sslip.io/api/energy_master_data/osds" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d "{
  \"code\": \"string\",
  \"name\": \"string\"
}"
PUT/energy_master_data/osds
Auth requiredenergy_master_data.osd.manage

Update osd

Updates an existing osd by id. Requires features: energy_master_data.osd.manage

Request body (application/json)

{
  "id": "00000000-0000-4000-8000-000000000000"
}

Responses

200OSD updated
Content-Type: application/json
{
  "ok": true
}

Example

curl -X PUT "https://151.115.63.33.sslip.io/api/energy_master_data/osds" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d "{
  \"id\": \"00000000-0000-4000-8000-000000000000\"
}"
DELETE/energy_master_data/osds
Auth requiredenergy_master_data.osd.manage

Delete osd

Deletes a osd identified by id. Requires features: energy_master_data.osd.manage

Responses

200OSD deleted
Content-Type: application/json
{
  "ok": true
}

Example

curl -X DELETE "https://151.115.63.33.sslip.io/api/energy_master_data/osds" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
GET/energy_master_data/pods
Auth requiredenergy_master_data.pod.view

List points of delivery (ppgs)

Returns a paginated collection of points of delivery (ppgs) scoped to the authenticated organization. Requires features: energy_master_data.pod.view

Parameters

NameInRequiredSchemaDescription
pagequeryNoany
pageSizequeryNoany
searchqueryNoany
idqueryNoany
idsqueryNoanyComma-separated list of record UUIDs to filter by (max 200).
hubIdqueryNoany
customerIdqueryNoany
gsrnqueryNoany
osdIdqueryNoany
osdAreaqueryNoany
commodityqueryNoany
statusqueryNoany
asOfqueryNoany

Responses

200Paginated points of delivery (ppgs)
Content-Type: application/json
{
  "items": [
    {
      "id": "00000000-0000-4000-8000-000000000000",
      "hubId": "00000000-0000-4000-8000-000000000000",
      "code": "string",
      "gsrn": "string",
      "commodity": "GAS",
      "osdArea": "string",
      "osdId": null,
      "status": "DRAFT",
      "createdAt": "string",
      "updatedAt": "string"
    }
  ],
  "total": 1,
  "totalPages": 1
}

Example

curl -X GET "https://151.115.63.33.sslip.io/api/energy_master_data/pods?page=1&pageSize=50" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
POST/energy_master_data/pods
Auth requiredenergy_master_data.pod.manage

Create point of delivery (ppg)

Create a PPG (validates GSRN checksum) Requires features: energy_master_data.pod.manage

Request body (application/json)

{
  "hubId": "00000000-0000-4000-8000-000000000000",
  "code": "string",
  "osdArea": "string"
}

Responses

201Point of Delivery (PPG) created
Content-Type: application/json
{
  "id": null
}

Example

curl -X POST "https://151.115.63.33.sslip.io/api/energy_master_data/pods" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d "{
  \"hubId\": \"00000000-0000-4000-8000-000000000000\",
  \"code\": \"string\",
  \"osdArea\": \"string\"
}"
PUT/energy_master_data/pods
Auth requiredenergy_master_data.pod.manage

Update point of delivery (ppg)

Updates an existing point of delivery (ppg) by id. Requires features: energy_master_data.pod.manage

Request body (application/json)

{
  "id": "00000000-0000-4000-8000-000000000000"
}

Responses

200Point of Delivery (PPG) updated
Content-Type: application/json
{
  "ok": true
}

Example

curl -X PUT "https://151.115.63.33.sslip.io/api/energy_master_data/pods" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d "{
  \"id\": \"00000000-0000-4000-8000-000000000000\"
}"
DELETE/energy_master_data/pods
Auth requiredenergy_master_data.pod.manage

Delete point of delivery (ppg)

Deletes a point of delivery (ppg) identified by id. Requires features: energy_master_data.pod.manage

Responses

200Point of Delivery (PPG) deleted
Content-Type: application/json
{
  "ok": true
}

Example

curl -X DELETE "https://151.115.63.33.sslip.io/api/energy_master_data/pods" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
POST/energy_master_data/pods/{id}/assign
Auth requiredenergy_master_data.assignment.manage

Assign a party to a PPG (bitemporal)

Adds or replaces the OPEN PpgCustomerAssignment for the given partyRole on this PPG. Closes the previous open row (if any) at validFrom and inserts a new row. Backdated edits earlier than the open row reject with 409 BitemporalOverlapError. Requires features: energy_master_data.assignment.manage

Parameters

NameInRequiredSchemaDescription
idpathYesany

Request body (application/json)

{
  "partyRole": "customer",
  "partyId": "00000000-0000-4000-8000-000000000000",
  "validFrom": "2025-01-01T00:00:00.000Z"
}

Responses

201Assignment created (and previous open row closed when applicable).
Content-Type: application/json
{
  "ok": true,
  "assignment": {
    "id": "00000000-0000-4000-8000-000000000000",
    "podId": "00000000-0000-4000-8000-000000000000",
    "partyRole": "string",
    "partyId": "00000000-0000-4000-8000-000000000000",
    "validFrom": "string",
    "validTo": null
  },
  "closedAssignmentId": null
}
404PPG not found in caller scope.
Content-Type: application/json
{
  "error": "string"
}
409New window overlaps an existing OPEN row (backdated edit).
Content-Type: application/json
{
  "error": "string",
  "code": "BITEMPORAL_OVERLAP"
}

Example

curl -X POST "https://151.115.63.33.sslip.io/api/energy_master_data/pods/:id/assign" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d "{
  \"partyRole\": \"customer\",
  \"partyId\": \"00000000-0000-4000-8000-000000000000\",
  \"validFrom\": \"2025-01-01T00:00:00.000Z\"
}"
POST/energy_master_data/pods/{id}/meter-install
Auth requiredenergy_master_data.assignment.manage

Install a meter on a PPG (bitemporal)

Opens a new MeterAssignment row mounting the meter on this PPG and flips the meter status to INSTALLED in a single atomic flush. Requires features: energy_master_data.assignment.manage

Parameters

NameInRequiredSchemaDescription
idpathYesany

Request body (application/json)

{
  "meterId": "00000000-0000-4000-8000-000000000000",
  "podId": "00000000-0000-4000-8000-000000000000",
  "validFrom": "2025-01-01T00:00:00.000Z"
}

Responses

201Meter installed.
Content-Type: application/json
{
  "ok": true,
  "assignment": {
    "id": "00000000-0000-4000-8000-000000000000",
    "podId": "00000000-0000-4000-8000-000000000000",
    "meterId": "00000000-0000-4000-8000-000000000000",
    "validFrom": "string",
    "validTo": null,
    "installReading": null
  }
}
404PPG or meter not found.
Content-Type: application/json
{
  "error": "string"
}
409PPG already has an active meter, meter already mounted elsewhere, or status invalid.
Content-Type: application/json
{
  "error": "string",
  "code": "string"
}

Example

curl -X POST "https://151.115.63.33.sslip.io/api/energy_master_data/pods/:id/meter-install" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d "{
  \"meterId\": \"00000000-0000-4000-8000-000000000000\",
  \"podId\": \"00000000-0000-4000-8000-000000000000\",
  \"validFrom\": \"2025-01-01T00:00:00.000Z\"
}"
POST/energy_master_data/pods/{id}/meter-replace
Auth requiredenergy_master_data.assignment.manage

Replace the active meter on a PPG (bitemporal)

Closes the current open MeterAssignment at validFrom (stamping removal_reading + removal_reason if supplied), opens a new assignment for newMeterId, and flips both meter statuses inside a single atomic flush. Requires features: energy_master_data.assignment.manage

Parameters

NameInRequiredSchemaDescription
idpathYesany

Request body (application/json)

{
  "podId": "00000000-0000-4000-8000-000000000000",
  "newMeterId": "00000000-0000-4000-8000-000000000000",
  "validFrom": "2025-01-01T00:00:00.000Z"
}

Responses

201Meter replaced.
Content-Type: application/json
{
  "ok": true,
  "assignment": {
    "id": "00000000-0000-4000-8000-000000000000",
    "podId": "00000000-0000-4000-8000-000000000000",
    "meterId": "00000000-0000-4000-8000-000000000000",
    "validFrom": "string",
    "validTo": null,
    "installReading": null
  },
  "closedAssignmentId": "00000000-0000-4000-8000-000000000000"
}
404PPG, replacement meter, or open assignment missing.
Content-Type: application/json
{
  "error": "string"
}
409Replacement no-op, meter not installable, or backdated overlap.
Content-Type: application/json
{
  "error": "string",
  "code": "string"
}

Example

curl -X POST "https://151.115.63.33.sslip.io/api/energy_master_data/pods/:id/meter-replace" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d "{
  \"podId\": \"00000000-0000-4000-8000-000000000000\",
  \"newMeterId\": \"00000000-0000-4000-8000-000000000000\",
  \"validFrom\": \"2025-01-01T00:00:00.000Z\"
}"
POST/energy_master_data/pods/{id}/transfer
Auth requiredenergy_master_data.assignment.manage

Transfer a PPG to another party (bitemporal)

Closes the current OPEN PpgCustomerAssignment for the partyRole at validFrom and opens a new one for the new party. Returns 404 if no open assignment exists (use assign instead) and 409 BitemporalOverlapError on backdated edits. Requires features: energy_master_data.assignment.manage

Parameters

NameInRequiredSchemaDescription
idpathYesany

Request body (application/json)

{
  "partyRole": "customer",
  "partyId": "00000000-0000-4000-8000-000000000000",
  "validFrom": "2025-01-01T00:00:00.000Z"
}

Responses

200No-op (transfer target equals current party).
Content-Type: application/json
{
  "ok": true,
  "noop": true,
  "assignment": {
    "id": "00000000-0000-4000-8000-000000000000",
    "podId": "00000000-0000-4000-8000-000000000000",
    "partyRole": "string",
    "partyId": "00000000-0000-4000-8000-000000000000",
    "validFrom": "string",
    "validTo": null
  }
}
201Transfer complete: previous row closed, new row opened.
Content-Type: application/json
{
  "ok": true,
  "assignment": {
    "id": "00000000-0000-4000-8000-000000000000",
    "podId": "00000000-0000-4000-8000-000000000000",
    "partyRole": "string",
    "partyId": "00000000-0000-4000-8000-000000000000",
    "validFrom": "string",
    "validTo": null
  },
  "closedAssignmentId": "00000000-0000-4000-8000-000000000000"
}
404PPG not found, or no open assignment to transfer.
Content-Type: application/json
{
  "error": "string"
}
409Backdated transfer would overlap an existing open window.
Content-Type: application/json
{
  "error": "string",
  "code": "BITEMPORAL_OVERLAP"
}

Example

curl -X POST "https://151.115.63.33.sslip.io/api/energy_master_data/pods/:id/transfer" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d "{
  \"partyRole\": \"customer\",
  \"partyId\": \"00000000-0000-4000-8000-000000000000\",
  \"validFrom\": \"2025-01-01T00:00:00.000Z\"
}"

Connector OSD Gaz

Showing 8 of 8 endpoints
GET/connector_osd_gaz/batches
Auth requiredconnector_osd_gaz.batch.view

List osd import batches

Returns a paginated collection of osd import batches scoped to the authenticated organization. Requires features: connector_osd_gaz.batch.view

Parameters

NameInRequiredSchemaDescription
pagequeryNoany
pageSizequeryNoany
connectionIdqueryNoany
statusqueryNoany
idsqueryNoanyComma-separated list of record UUIDs to filter by (max 200).

Responses

200Paginated osd import batches
Content-Type: application/json
{
  "items": [
    {
      "id": "00000000-0000-4000-8000-000000000000",
      "businessKey": null,
      "status": "PENDING",
      "connectionId": "00000000-0000-4000-8000-000000000000",
      "pullStartedAt": null,
      "completedAt": null,
      "totalFiles": 1,
      "parsedOk": 1,
      "parseErrors": 1,
      "recordsDispatched": 1,
      "errorDetail": null,
      "createdAt": "string",
      "updatedAt": "string"
    }
  ],
  "total": 1,
  "totalPages": 1
}

Example

curl -X GET "https://151.115.63.33.sslip.io/api/connector_osd_gaz/batches?page=1&pageSize=50" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
GET/connector_osd_gaz/connections
Auth requiredconnector_osd_gaz.connection.view

List osd connections

Returns a paginated collection of osd connections scoped to the authenticated organization. Requires features: connector_osd_gaz.connection.view

Parameters

NameInRequiredSchemaDescription
pagequeryNoany
pageSizequeryNoany
searchqueryNoany
idqueryNoany
osdIdqueryNoany
isActivequeryNoany
idsqueryNoanyComma-separated list of record UUIDs to filter by (max 200).

Responses

200Paginated osd connections
Content-Type: application/json
{
  "items": [
    {
      "id": "00000000-0000-4000-8000-000000000000",
      "code": "string",
      "name": "string",
      "osdId": null,
      "host": "string",
      "port": 1,
      "dirIn": "string",
      "dirOut": "string",
      "dirArchive": "string",
      "pullScheduleCron": null,
      "isActive": true,
      "status": "string",
      "version": 1,
      "createdAt": "string",
      "updatedAt": "string"
    }
  ],
  "total": 1,
  "totalPages": 1
}

Example

curl -X GET "https://151.115.63.33.sslip.io/api/connector_osd_gaz/connections?page=1&pageSize=50" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
POST/connector_osd_gaz/connections
Auth requiredconnector_osd_gaz.connection.manage

Create osd connection

Create an OSD SFTP connection configuration Requires features: connector_osd_gaz.connection.manage

Request body (application/json)

{
  "code": "string",
  "name": "string",
  "host": "string",
  "port": 22,
  "dirIn": "in/",
  "dirOut": "out/",
  "dirArchive": "archive/",
  "isActive": true
}

Responses

201OSD Connection created
Content-Type: application/json
{
  "id": null
}

Example

curl -X POST "https://151.115.63.33.sslip.io/api/connector_osd_gaz/connections" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d "{
  \"code\": \"string\",
  \"name\": \"string\",
  \"host\": \"string\",
  \"port\": 22,
  \"dirIn\": \"in/\",
  \"dirOut\": \"out/\",
  \"dirArchive\": \"archive/\",
  \"isActive\": true
}"
PUT/connector_osd_gaz/connections
Auth requiredconnector_osd_gaz.connection.manage

Update osd connection

Updates an existing osd connection by id. Requires features: connector_osd_gaz.connection.manage

Request body (application/json)

{
  "port": 22,
  "dirIn": "in/",
  "dirOut": "out/",
  "dirArchive": "archive/",
  "isActive": true
}

Responses

200OSD Connection updated
Content-Type: application/json
{
  "ok": true
}

Example

curl -X PUT "https://151.115.63.33.sslip.io/api/connector_osd_gaz/connections" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d "{
  \"port\": 22,
  \"dirIn\": \"in/\",
  \"dirOut\": \"out/\",
  \"dirArchive\": \"archive/\",
  \"isActive\": true
}"
DELETE/connector_osd_gaz/connections
Auth requiredconnector_osd_gaz.connection.manage

Delete osd connection

Deletes a osd connection identified by id. Requires features: connector_osd_gaz.connection.manage

Responses

200OSD Connection deleted
Content-Type: application/json
{
  "ok": true
}

Example

curl -X DELETE "https://151.115.63.33.sslip.io/api/connector_osd_gaz/connections" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
POST/connector_osd_gaz/connections/{id}/pull
Auth requiredconnector_osd_gaz.pull.trigger

Trigger a manual SFTP pull

Enqueues an immediate SFTP pull outside the scheduled cron window. The pull is idempotent (dedup via OsdFileLog). Returns 202 immediately; the actual transfer runs in the background. Requires features: connector_osd_gaz.pull.trigger

Parameters

NameInRequiredSchemaDescription
idpathYesany

Request body (application/json)

{
  "dryRun": false
}

Responses

202Pull accepted and queued
Content-Type: application/json
{
  "message": "string",
  "connectionId": "string",
  "messageKind": null,
  "dryRun": true
}
400Invalid payload or missing connection id
Content-Type: application/json
"string"
404OSD connection not found
Content-Type: application/json
"string"

Example

curl -X POST "https://151.115.63.33.sslip.io/api/connector_osd_gaz/connections/:id/pull" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d "{
  \"dryRun\": false
}"
GET/connector_osd_gaz/files
Auth requiredconnector_osd_gaz.file.view

List osd file logs

Returns a paginated collection of osd file logs scoped to the authenticated organization. Requires features: connector_osd_gaz.file.view

Parameters

NameInRequiredSchemaDescription
pagequeryNoany
pageSizequeryNoany
connectionIdqueryNoany
batchIdqueryNoany
statusqueryNoany
directionqueryNoany
messageKindqueryNoany
searchqueryNoany
idsqueryNoanyComma-separated list of record UUIDs to filter by (max 200).

Responses

200Paginated osd file logs
Content-Type: application/json
{
  "items": [
    {
      "id": "00000000-0000-4000-8000-000000000000",
      "businessKey": "string",
      "filename": "string",
      "contentHash": "string",
      "direction": "in",
      "status": "POBRANY",
      "messageKind": null,
      "connectionId": "00000000-0000-4000-8000-000000000000",
      "batchId": null,
      "archivePath": null,
      "sizeBytes": null,
      "errorDetail": null,
      "sourceSystem": null,
      "createdAt": "string",
      "updatedAt": "string"
    }
  ],
  "total": 1,
  "totalPages": 1
}

Example

curl -X GET "https://151.115.63.33.sslip.io/api/connector_osd_gaz/files?page=1&pageSize=50" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
POST/connector_osd_gaz/switch-requests
Auth requiredconnector_osd_gaz.switch_request.send

Send outbound switching request

Serialises the switching payload to OSD format (XML/CSV per ACL), uploads it to the configured SFTP `out/` directory and emits `connector_osd_gaz.switch_request.sent`. Called internally by the switching module. Requires features: connector_osd_gaz.switch_request.send

Request body (application/json)

{
  "connectionId": "00000000-0000-4000-8000-000000000000",
  "ppgId": "00000000-0000-4000-8000-000000000000",
  "switchingCaseId": "00000000-0000-4000-8000-000000000000",
  "requestedSwitchDate": "string",
  "payload": {}
}

Responses

202Switch request accepted and queued for dispatch
Content-Type: application/json
{
  "message": "string",
  "connectionId": "00000000-0000-4000-8000-000000000000",
  "ppgId": "00000000-0000-4000-8000-000000000000",
  "switchingCaseId": "00000000-0000-4000-8000-000000000000"
}
400Invalid payload
Content-Type: application/json
"string"

Example

curl -X POST "https://151.115.63.33.sslip.io/api/connector_osd_gaz/switch-requests" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d "{
  \"connectionId\": \"00000000-0000-4000-8000-000000000000\",
  \"ppgId\": \"00000000-0000-4000-8000-000000000000\",
  \"switchingCaseId\": \"00000000-0000-4000-8000-000000000000\",
  \"requestedSwitchDate\": \"string\",
  \"payload\": {}
}"

Metering

Showing 14 of 14 endpoints
POST/metering/{orgSlug}/portal/self-reading

Customer Self-Reading (eBOK)

Submit a customer meter self-reading via the eBOK portal (§9E). Authenticated through customer portal session; PPG ownership verified against PpgCustomerAssignment in energy_master_data. Creates a SelfReading with status=PENDING for back-office review.

Parameters

NameInRequiredSchemaDescription
orgSlugpathYesany

Responses

201Success response
Content-Type: application/json
"string"

Example

curl -X POST "https://151.115.63.33.sslip.io/api/metering/:orgSlug/portal/self-reading" \
  -H "Accept: application/json"
GET/metering/corrections
Auth requiredmetering.view

Metering Corrections (Correction Case)

GET: list correction cases. POST: create a Correction Case for a closed billing period. NEVER silently overwrites a snapshot — creates a new MeteringDataVersion and emits metering.correction.applied. Requires features: metering.view

Responses

200Success response
Content-Type: application/json
"string"

Example

curl -X GET "https://151.115.63.33.sslip.io/api/metering/corrections" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
POST/metering/corrections
Auth requiredmetering.correct

Metering Corrections (Correction Case)

GET: list correction cases. POST: create a Correction Case for a closed billing period. NEVER silently overwrites a snapshot — creates a new MeteringDataVersion and emits metering.correction.applied. Requires features: metering.correct

Responses

201Success response
Content-Type: application/json
"string"

Example

curl -X POST "https://151.115.63.33.sslip.io/api/metering/corrections" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
GET/metering/periods
Auth requiredmetering.view

Billing Periods CRUD

List and create billing periods per PPG. Periods must be contiguous (no gaps/overlaps). Close a period via POST /periods/:id/close. Requires features: metering.view

Responses

200Success response
Content-Type: application/json
"string"

Example

curl -X GET "https://151.115.63.33.sslip.io/api/metering/periods" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
POST/metering/periods
Auth requiredmetering.manage

Billing Periods CRUD

List and create billing periods per PPG. Periods must be contiguous (no gaps/overlaps). Close a period via POST /periods/:id/close. Requires features: metering.manage

Responses

201Success response
Content-Type: application/json
"string"

Example

curl -X POST "https://151.115.63.33.sslip.io/api/metering/periods" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
PUT/metering/periods
Auth requiredmetering.manage

Billing Periods CRUD

List and create billing periods per PPG. Periods must be contiguous (no gaps/overlaps). Close a period via POST /periods/:id/close. Requires features: metering.manage

Responses

200Success response
Content-Type: application/json
"string"

Example

curl -X PUT "https://151.115.63.33.sslip.io/api/metering/periods" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
DELETE/metering/periods
Auth requiredmetering.manage

Billing Periods CRUD

List and create billing periods per PPG. Periods must be contiguous (no gaps/overlaps). Close a period via POST /periods/:id/close. Requires features: metering.manage

Responses

204Success

No response body.

Example

curl -X DELETE "https://151.115.63.33.sslip.io/api/metering/periods" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
POST/metering/periods/{id}/build
Auth requiredmetering.manage

Build Billing Period

Validate readings in the period, detect gaps, check completeness. Transitions status: DRAFT → BUILDING → COMPLETE. Requires features: metering.manage

Parameters

NameInRequiredSchemaDescription
idpathYesany

Responses

201Success response
Content-Type: application/json
"string"

Example

curl -X POST "https://151.115.63.33.sslip.io/api/metering/periods/:id/build" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
POST/metering/periods/{id}/close
Auth requiredmetering.close_period

Close Billing Period

Closes a COMPLETE billing period. Creates an immutable MeteringDataSnapshot and emits metering.period.closed to trigger the meterToCash billing saga. Period must be in COMPLETE status. Requires features: metering.close_period

Parameters

NameInRequiredSchemaDescription
idpathYesany

Responses

201Success response
Content-Type: application/json
"string"

Example

curl -X POST "https://151.115.63.33.sslip.io/api/metering/periods/:id/close" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
GET/metering/readings
Auth requiredmetering.view

Meter Readings CRUD

Import, list, update and delete meter readings. POST triggers VEE pipeline. Filter by ppgId, meterId, billingPeriodId, source, quality, readAt range. Requires features: metering.view

Responses

200Success response
Content-Type: application/json
"string"

Example

curl -X GET "https://151.115.63.33.sslip.io/api/metering/readings" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
POST/metering/readings
Auth requiredmetering.manage

Meter Readings CRUD

Import, list, update and delete meter readings. POST triggers VEE pipeline. Filter by ppgId, meterId, billingPeriodId, source, quality, readAt range. Requires features: metering.manage

Responses

201Success response
Content-Type: application/json
"string"

Example

curl -X POST "https://151.115.63.33.sslip.io/api/metering/readings" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
PUT/metering/readings
Auth requiredmetering.manage

Meter Readings CRUD

Import, list, update and delete meter readings. POST triggers VEE pipeline. Filter by ppgId, meterId, billingPeriodId, source, quality, readAt range. Requires features: metering.manage

Responses

200Success response
Content-Type: application/json
"string"

Example

curl -X PUT "https://151.115.63.33.sslip.io/api/metering/readings" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
DELETE/metering/readings
Auth requiredmetering.manage

Meter Readings CRUD

Import, list, update and delete meter readings. POST triggers VEE pipeline. Filter by ppgId, meterId, billingPeriodId, source, quality, readAt range. Requires features: metering.manage

Responses

204Success

No response body.

Example

curl -X DELETE "https://151.115.63.33.sslip.io/api/metering/readings" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
POST/metering/readings/{id}/estimate
Auth requiredmetering.manage

Start Meter Reading Estimation

Creates an EstimatedReading (VEE §5G) for the given reading with status=PENDING. Requires USER_TASK acceptance in workflows before quality becomes szacunkowy. Requires features: metering.manage

Parameters

NameInRequiredSchemaDescription
idpathYesany

Responses

201Success response
Content-Type: application/json
"string"

Example

curl -X POST "https://151.115.63.33.sslip.io/api/metering/readings/:id/estimate" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"

Market Data

Showing 12 of 12 endpoints
GET/market_data/fixings
Auth requiredmarket_data.view

List price fixings

Returns a paginated collection of price fixings scoped to the authenticated organization. Requires features: market_data.view

Parameters

NameInRequiredSchemaDescription
pagequeryNoany
pageSizequeryNoany
indexRefIdqueryNoany
statusqueryNoany
fixingDateFromqueryNoany
fixingDateToqueryNoany
idsqueryNoanyComma-separated list of record UUIDs to filter by (max 200).

Responses

200Paginated price fixings
Content-Type: application/json
{
  "items": [
    {
      "id": "00000000-0000-4000-8000-000000000000",
      "indexRefId": "00000000-0000-4000-8000-000000000000",
      "fixingDate": "string",
      "value": 1,
      "currency": "string",
      "status": "DRAFT",
      "publishedAt": null
    }
  ],
  "total": 1,
  "totalPages": 1
}

Example

curl -X GET "https://151.115.63.33.sslip.io/api/market_data/fixings?page=1&pageSize=50" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
POST/market_data/fixings
Auth requiredmarket_data.manage

Create price fixing

Creates a new price fixing. Requires features: market_data.manage

Request body (application/json)

{
  "indexRefId": "00000000-0000-4000-8000-000000000000",
  "fixingDate": "string",
  "value": 1,
  "currency": "PLN"
}

Responses

201Price Fixing created
Content-Type: application/json
{
  "id": null
}

Example

curl -X POST "https://151.115.63.33.sslip.io/api/market_data/fixings" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d "{
  \"indexRefId\": \"00000000-0000-4000-8000-000000000000\",
  \"fixingDate\": \"string\",
  \"value\": 1,
  \"currency\": \"PLN\"
}"
PUT/market_data/fixings
Auth requiredmarket_data.manage

Update price fixing

Updates an existing price fixing. Requires features: market_data.manage

Request body (application/json)

{
  "currency": "PLN"
}

Responses

200Price Fixing updated
Content-Type: application/json
{
  "ok": true
}

Example

curl -X PUT "https://151.115.63.33.sslip.io/api/market_data/fixings" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d "{
  \"currency\": \"PLN\"
}"
DELETE/market_data/fixings
Auth requiredmarket_data.manage

Delete price fixing

Soft-deletes a price fixing. Requires features: market_data.manage

Responses

200Price Fixing deleted
Content-Type: application/json
{
  "ok": true
}

Example

curl -X DELETE "https://151.115.63.33.sslip.io/api/market_data/fixings" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
GET/market_data/indexes
Auth requiredmarket_data.view

List index references

Returns a paginated collection of index references scoped to the authenticated organization. Requires features: market_data.view

Parameters

NameInRequiredSchemaDescription
pagequeryNoany
pageSizequeryNoany
searchqueryNoany
commodityqueryNoany
sourceIdqueryNoany
idsqueryNoanyComma-separated list of record UUIDs to filter by (max 200).

Responses

200Paginated index references
Content-Type: application/json
{
  "items": [
    {
      "id": "00000000-0000-4000-8000-000000000000",
      "code": "string",
      "name": "string",
      "commodity": "string",
      "currency": "string",
      "unit": "string"
    }
  ],
  "total": 1,
  "totalPages": 1
}

Example

curl -X GET "https://151.115.63.33.sslip.io/api/market_data/indexes?page=1&pageSize=50" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
POST/market_data/indexes
Auth requiredmarket_data.manage

Create index reference

Creates a new index reference. Requires features: market_data.manage

Request body (application/json)

{
  "code": "string",
  "name": "string",
  "commodity": "string",
  "currency": "PLN",
  "unit": "MWh"
}

Responses

201Index Reference created
Content-Type: application/json
{
  "id": null
}

Example

curl -X POST "https://151.115.63.33.sslip.io/api/market_data/indexes" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d "{
  \"code\": \"string\",
  \"name\": \"string\",
  \"commodity\": \"string\",
  \"currency\": \"PLN\",
  \"unit\": \"MWh\"
}"
PUT/market_data/indexes
Auth requiredmarket_data.manage

Update index reference

Updates an existing index reference. Requires features: market_data.manage

Request body (application/json)

{
  "currency": "PLN",
  "unit": "MWh"
}

Responses

200Index Reference updated
Content-Type: application/json
{
  "ok": true
}

Example

curl -X PUT "https://151.115.63.33.sslip.io/api/market_data/indexes" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d "{
  \"currency\": \"PLN\",
  \"unit\": \"MWh\"
}"
DELETE/market_data/indexes
Auth requiredmarket_data.manage

Delete index reference

Soft-deletes a index reference. Requires features: market_data.manage

Responses

200Index Reference deleted
Content-Type: application/json
{
  "ok": true
}

Example

curl -X DELETE "https://151.115.63.33.sslip.io/api/market_data/indexes" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
GET/market_data/sources
Auth requiredmarket_data.view

List market data sources

Returns a paginated collection of market data sources scoped to the authenticated organization. Requires features: market_data.view

Parameters

NameInRequiredSchemaDescription
pagequeryNoany
pageSizequeryNoany
searchqueryNoany
isActivequeryNoany
idsqueryNoanyComma-separated list of record UUIDs to filter by (max 200).

Responses

200Paginated market data sources
Content-Type: application/json
{
  "items": [
    {
      "id": "00000000-0000-4000-8000-000000000000",
      "code": "string",
      "name": "string",
      "sourceType": "string",
      "isActive": true
    }
  ],
  "total": 1,
  "totalPages": 1
}

Example

curl -X GET "https://151.115.63.33.sslip.io/api/market_data/sources?page=1&pageSize=50" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
POST/market_data/sources
Auth requiredmarket_data.manage

Create market data source

Creates a new market data source. Requires features: market_data.manage

Request body (application/json)

{
  "code": "string",
  "name": "string",
  "sourceType": "TGE",
  "isActive": true
}

Responses

201Market Data Source created
Content-Type: application/json
{
  "id": null
}

Example

curl -X POST "https://151.115.63.33.sslip.io/api/market_data/sources" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d "{
  \"code\": \"string\",
  \"name\": \"string\",
  \"sourceType\": \"TGE\",
  \"isActive\": true
}"
PUT/market_data/sources
Auth requiredmarket_data.manage

Update market data source

Updates an existing market data source. Requires features: market_data.manage

Request body (application/json)

{
  "isActive": true
}

Responses

200Market Data Source updated
Content-Type: application/json
{
  "ok": true
}

Example

curl -X PUT "https://151.115.63.33.sslip.io/api/market_data/sources" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d "{
  \"isActive\": true
}"
DELETE/market_data/sources
Auth requiredmarket_data.manage

Delete market data source

Soft-deletes a market data source. Requires features: market_data.manage

Responses

200Market Data Source deleted
Content-Type: application/json
{
  "ok": true
}

Example

curl -X DELETE "https://151.115.63.33.sslip.io/api/market_data/sources" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"

Pricing

Showing 20 of 21 endpoints
GET/pricing/calculations
Auth requiredpricing.view

List rating calculations

Returns a paginated collection of rating calculations scoped to the authenticated organization. Requires features: pricing.view

Parameters

NameInRequiredSchemaDescription
pagequeryNoany
pageSizequeryNoany
ppgIdqueryNoany
contractIdqueryNoany
billingPeriodIdqueryNoany
statusqueryNoany
idsqueryNoanyComma-separated list of record UUIDs to filter by (max 200).

Responses

200Paginated rating calculations
Content-Type: application/json
{
  "items": [
    {
      "id": "00000000-0000-4000-8000-000000000000",
      "ppgId": "00000000-0000-4000-8000-000000000000",
      "ratingDate": "string",
      "totalNet": 1,
      "currency": "string",
      "status": "string"
    }
  ],
  "total": 1,
  "totalPages": 1
}

Example

curl -X GET "https://151.115.63.33.sslip.io/api/pricing/calculations?page=1&pageSize=50" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
POST/pricing/calculations
Auth requiredpricing.rate

Rating Calculation management

Requires features: pricing.rate

Responses

201Success response
Content-Type: application/json
"string"

Example

curl -X POST "https://151.115.63.33.sslip.io/api/pricing/calculations" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
PUT/pricing/calculations
Auth requiredpricing.rate

Update rating calculation

Updates an existing rating calculation. Requires features: pricing.rate

Request body (application/json)

{}

Responses

200Rating Calculation updated
Content-Type: application/json
{
  "ok": true
}

Example

curl -X PUT "https://151.115.63.33.sslip.io/api/pricing/calculations" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d "{}"
DELETE/pricing/calculations
Auth requiredpricing.manage

Delete rating calculation

Soft-deletes a rating calculation. Requires features: pricing.manage

Responses

200Rating Calculation deleted
Content-Type: application/json
{
  "ok": true
}

Example

curl -X DELETE "https://151.115.63.33.sslip.io/api/pricing/calculations" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
GET/pricing/charge-components
Auth requiredpricing.view

List charge components

Returns a paginated collection of charge components scoped to the authenticated organization. Requires features: pricing.view

Parameters

NameInRequiredSchemaDescription
pagequeryNoany
pageSizequeryNoany
tariffVersionIdqueryNoany
kindqueryNoany
tariffScopequeryNoany
idsqueryNoanyComma-separated list of record UUIDs to filter by (max 200).

Responses

200Paginated charge components
Content-Type: application/json
{
  "items": [
    {
      "id": "00000000-0000-4000-8000-000000000000",
      "tariffVersionId": "00000000-0000-4000-8000-000000000000",
      "kind": "string",
      "tariffScope": "string",
      "unitPrice": 1,
      "currency": "string",
      "passThrough": true,
      "marginEligible": true
    }
  ],
  "total": 1,
  "totalPages": 1
}

Example

curl -X GET "https://151.115.63.33.sslip.io/api/pricing/charge-components?page=1&pageSize=50" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
POST/pricing/charge-components
Auth requiredpricing.manage

Create charge component

Creates a new charge component. Requires features: pricing.manage

Request body (application/json)

{
  "tariffVersionId": "00000000-0000-4000-8000-000000000000",
  "kind": "energia_czynna",
  "tariffScope": "SPRZEDAWCA",
  "unit": "string",
  "priceUnit": "string",
  "unitPrice": 1,
  "currency": "PLN",
  "passThrough": false,
  "marginEligible": true,
  "position": 0
}

Responses

201Charge Component created
Content-Type: application/json
{
  "id": null
}

Example

curl -X POST "https://151.115.63.33.sslip.io/api/pricing/charge-components" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d "{
  \"tariffVersionId\": \"00000000-0000-4000-8000-000000000000\",
  \"kind\": \"energia_czynna\",
  \"tariffScope\": \"SPRZEDAWCA\",
  \"unit\": \"string\",
  \"priceUnit\": \"string\",
  \"unitPrice\": 1,
  \"currency\": \"PLN\",
  \"passThrough\": false,
  \"marginEligible\": true,
  \"position\": 0
}"
PUT/pricing/charge-components
Auth requiredpricing.manage

Update charge component

Updates an existing charge component. Requires features: pricing.manage

Request body (application/json)

{
  "currency": "PLN",
  "passThrough": false,
  "marginEligible": true,
  "position": 0
}

Responses

200Charge Component updated
Content-Type: application/json
{
  "ok": true
}

Example

curl -X PUT "https://151.115.63.33.sslip.io/api/pricing/charge-components" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d "{
  \"currency\": \"PLN\",
  \"passThrough\": false,
  \"marginEligible\": true,
  \"position\": 0
}"
DELETE/pricing/charge-components
Auth requiredpricing.manage

Delete charge component

Soft-deletes a charge component. Requires features: pricing.manage

Responses

200Charge Component deleted
Content-Type: application/json
{
  "ok": true
}

Example

curl -X DELETE "https://151.115.63.33.sslip.io/api/pricing/charge-components" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
GET/pricing/formulas
Auth requiredpricing.view

List pricing formulas

Returns a paginated collection of pricing formulas scoped to the authenticated organization. Requires features: pricing.view

Parameters

NameInRequiredSchemaDescription
pagequeryNoany
pageSizequeryNoany
searchqueryNoany
kindqueryNoany
statusqueryNoany
idsqueryNoanyComma-separated list of record UUIDs to filter by (max 200).

Responses

200Paginated pricing formulas
Content-Type: application/json
{
  "items": [
    {
      "id": "00000000-0000-4000-8000-000000000000",
      "name": "string",
      "kind": "fixed",
      "currency": "string",
      "status": "string"
    }
  ],
  "total": 1,
  "totalPages": 1
}

Example

curl -X GET "https://151.115.63.33.sslip.io/api/pricing/formulas?page=1&pageSize=50" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
POST/pricing/formulas
Auth requiredpricing.manage

Create pricing formula

Creates a new pricing formula. Requires features: pricing.manage

Request body (application/json)

{
  "name": "string",
  "kind": "fixed",
  "currency": "PLN",
  "status": "DRAFT"
}

Responses

201Pricing Formula created
Content-Type: application/json
{
  "id": null
}

Example

curl -X POST "https://151.115.63.33.sslip.io/api/pricing/formulas" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d "{
  \"name\": \"string\",
  \"kind\": \"fixed\",
  \"currency\": \"PLN\",
  \"status\": \"DRAFT\"
}"
PUT/pricing/formulas
Auth requiredpricing.manage

Update pricing formula

Updates an existing pricing formula. Requires features: pricing.manage

Request body (application/json)

{
  "currency": "PLN",
  "status": "DRAFT"
}

Responses

200Pricing Formula updated
Content-Type: application/json
{
  "ok": true
}

Example

curl -X PUT "https://151.115.63.33.sslip.io/api/pricing/formulas" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d "{
  \"currency\": \"PLN\",
  \"status\": \"DRAFT\"
}"
DELETE/pricing/formulas
Auth requiredpricing.manage

Delete pricing formula

Soft-deletes a pricing formula. Requires features: pricing.manage

Responses

200Pricing Formula deleted
Content-Type: application/json
{
  "ok": true
}

Example

curl -X DELETE "https://151.115.63.33.sslip.io/api/pricing/formulas" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
GET/pricing/products
Auth requiredpricing.view

List pricing products

Returns a paginated collection of pricing products scoped to the authenticated organization. Requires features: pricing.view

Parameters

NameInRequiredSchemaDescription
pagequeryNoany
pageSizequeryNoany
searchqueryNoany
statusqueryNoany
commodityqueryNoany
idsqueryNoanyComma-separated list of record UUIDs to filter by (max 200).

Responses

200Paginated pricing products
Content-Type: application/json
{
  "items": [
    {
      "id": "00000000-0000-4000-8000-000000000000",
      "name": "string",
      "commodity": "string",
      "status": "string"
    }
  ],
  "total": 1,
  "totalPages": 1
}

Example

curl -X GET "https://151.115.63.33.sslip.io/api/pricing/products?page=1&pageSize=50" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
POST/pricing/products
Auth requiredpricing.manage

Create pricing product

Creates a new pricing product. Requires features: pricing.manage

Request body (application/json)

{
  "name": "string",
  "commodity": "GAS",
  "status": "DRAFT"
}

Responses

201Pricing Product created
Content-Type: application/json
{
  "id": null
}

Example

curl -X POST "https://151.115.63.33.sslip.io/api/pricing/products" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d "{
  \"name\": \"string\",
  \"commodity\": \"GAS\",
  \"status\": \"DRAFT\"
}"
PUT/pricing/products
Auth requiredpricing.manage

Update pricing product

Updates an existing pricing product. Requires features: pricing.manage

Request body (application/json)

{
  "commodity": "GAS",
  "status": "DRAFT"
}

Responses

200Pricing Product updated
Content-Type: application/json
{
  "ok": true
}

Example

curl -X PUT "https://151.115.63.33.sslip.io/api/pricing/products" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d "{
  \"commodity\": \"GAS\",
  \"status\": \"DRAFT\"
}"
DELETE/pricing/products
Auth requiredpricing.manage

Delete pricing product

Soft-deletes a pricing product. Requires features: pricing.manage

Responses

200Pricing Product deleted
Content-Type: application/json
{
  "ok": true
}

Example

curl -X DELETE "https://151.115.63.33.sslip.io/api/pricing/products" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
POST/pricing/rate
Auth requiredpricing.rate

POST /pricing/rate

Requires features: pricing.rate

Responses

201Success response
Content-Type: application/json
"string"

Example

curl -X POST "https://151.115.63.33.sslip.io/api/pricing/rate" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
GET/pricing/tariffs
Auth requiredpricing.view

List tariff versions

Returns a paginated collection of tariff versions scoped to the authenticated organization. Requires features: pricing.view

Parameters

NameInRequiredSchemaDescription
pagequeryNoany
pageSizequeryNoany
searchqueryNoany
statusqueryNoany
tariffScopequeryNoany
productIdqueryNoany
asOfqueryNoany
idsqueryNoanyComma-separated list of record UUIDs to filter by (max 200).

Responses

200Paginated tariff versions
Content-Type: application/json
{
  "items": [
    {
      "id": "00000000-0000-4000-8000-000000000000",
      "tariffCode": "string",
      "tariffScope": "SPRZEDAWCA",
      "status": "string",
      "validFrom": null,
      "validTo": null
    }
  ],
  "total": 1,
  "totalPages": 1
}

Example

curl -X GET "https://151.115.63.33.sslip.io/api/pricing/tariffs?page=1&pageSize=50" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
POST/pricing/tariffs
Auth requiredpricing.manage

Create tariff version

Creates a new tariff version. Requires features: pricing.manage

Request body (application/json)

{
  "tariffCode": "string",
  "tariffScope": "SPRZEDAWCA",
  "status": "DRAFT"
}

Responses

201Tariff Version created
Content-Type: application/json
{
  "id": null
}

Example

curl -X POST "https://151.115.63.33.sslip.io/api/pricing/tariffs" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d "{
  \"tariffCode\": \"string\",
  \"tariffScope\": \"SPRZEDAWCA\",
  \"status\": \"DRAFT\"
}"
PUT/pricing/tariffs
Auth requiredpricing.manage

Update tariff version

Updates an existing tariff version. Requires features: pricing.manage

Request body (application/json)

{
  "status": "DRAFT"
}

Responses

200Tariff Version updated
Content-Type: application/json
{
  "ok": true
}

Example

curl -X PUT "https://151.115.63.33.sslip.io/api/pricing/tariffs" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d "{
  \"status\": \"DRAFT\"
}"

Contracts (CLM)

Showing 6 of 6 endpoints
POST/contracts/contracts/{id}/activate
Auth requiredcontracts.activate

Activate a contract (PODPISANA → AKTYWNA)

Transitions a signed contract to active. Consent gate fail-closed is deferred to customers.consents extension (post-Fala 3). Emits `contracts.contract.activated`. Requires features: contracts.activate

Parameters

NameInRequiredSchemaDescription
idpathYesany

Responses

201Success response
Content-Type: application/json
"string"

Example

curl -X POST "https://151.115.63.33.sslip.io/api/contracts/contracts/:id/activate" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
POST/contracts/contracts/{id}/amend
Auth requiredcontracts.amend

Amend a contract (Correction-safe)

Creates a new ContractVersion + ContractAmendment row without overwriting the previous version. If the source status was AKTYWNA, the contract transitions to ANEKSOWANA. Emits `contracts.contract.amended`. Requires features: contracts.amend

Parameters

NameInRequiredSchemaDescription
idpathYesany

Responses

201Success response
Content-Type: application/json
"string"

Example

curl -X POST "https://151.115.63.33.sslip.io/api/contracts/contracts/:id/amend" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
POST/contracts/contracts/{id}/assign-ppg
Auth requiredcontracts.assign_ppg

Assign a PPG to a contract (bitemporal)

Closes any open ContractPpgAssignment for the (contract, PPG) pair and opens a new one starting at `validFrom`. Emits `contracts.ppg.added` (switching saga trigger per audit F1 §P-04). Requires features: contracts.assign_ppg

Parameters

NameInRequiredSchemaDescription
idpathYesany

Responses

201Success response
Content-Type: application/json
"string"

Example

curl -X POST "https://151.115.63.33.sslip.io/api/contracts/contracts/:id/assign-ppg" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
POST/contracts/contracts/{id}/remove-ppg
Auth requiredcontracts.assign_ppg

Remove a PPG from a contract (bitemporal close)

Sets validTo on the open ContractPpgAssignment instead of deleting it. Emits `contracts.ppg.removed`. Requires features: contracts.assign_ppg

Parameters

NameInRequiredSchemaDescription
idpathYesany

Responses

201Success response
Content-Type: application/json
"string"

Example

curl -X POST "https://151.115.63.33.sslip.io/api/contracts/contracts/:id/remove-ppg" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
POST/contracts/contracts/{id}/renew
Auth requiredcontracts.manage

Renew a finished contract (ZAKONCZONA → AKTYWNA)

Lifts a contract that ended cleanly (ZAKONCZONA) back to AKTYWNA with a new validTo. Records a ContractRenewal row. ROZWIAZANA contracts cannot be renewed — create a new contract instead. Emits `contracts.contract.renewed`. Requires features: contracts.manage

Parameters

NameInRequiredSchemaDescription
idpathYesany

Responses

201Success response
Content-Type: application/json
"string"

Example

curl -X POST "https://151.115.63.33.sslip.io/api/contracts/contracts/:id/renew" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
POST/contracts/contracts/{id}/terminate
Auth requiredcontracts.terminate

Terminate a contract

Records a ContractTermination and transitions the contract to ROZWIAZANA (unilateral) or ZAKONCZONA (mutual / expiry). Emits `contracts.contract.terminated`. Requires features: contracts.terminate

Parameters

NameInRequiredSchemaDescription
idpathYesany

Responses

201Success response
Content-Type: application/json
"string"

Example

curl -X POST "https://151.115.63.33.sslip.io/api/contracts/contracts/:id/terminate" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"

Billing (Fakturowanie gazowe)

Showing 3 of 3 endpoints
GET/billing/invoices/{id}/pdf
Auth requiredbilling.view

Generate invoice PDF

Requires features: billing.view

Parameters

NameInRequiredSchemaDescription
idpathYesany

Responses

200Success response
Content-Type: application/json
"string"

Example

curl -X GET "https://151.115.63.33.sslip.io/api/billing/invoices/:id/pdf" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
POST/billing/invoices/correct
Auth requiredbilling.correct

POST /billing/invoices/correct

Requires features: billing.correct

Responses

201Success response
Content-Type: application/json
"string"

Example

curl -X POST "https://151.115.63.33.sslip.io/api/billing/invoices/correct" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
POST/billing/invoices/ksef-submit
Auth requiredbilling.ksef

POST /billing/invoices/ksef-submit

Requires features: billing.ksef

Responses

201Success response
Content-Type: application/json
"string"

Example

curl -X POST "https://151.115.63.33.sslip.io/api/billing/invoices/ksef-submit" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"

Payments (Płatności gazowe)

Showing 3 of 3 endpoints
POST/payments/payments/{id}/match
Auth requiredpayments.match

POST /payments/payments/{id}/match

Requires features: payments.match

Parameters

NameInRequiredSchemaDescription
idpathYesany

Responses

201Success response
Content-Type: application/json
"string"

Example

curl -X POST "https://151.115.63.33.sslip.io/api/payments/payments/:id/match" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
POST/payments/payments/{id}/unmatch
Auth requiredpayments.match

POST /payments/payments/{id}/unmatch

Requires features: payments.match

Parameters

NameInRequiredSchemaDescription
idpathYesany

Responses

201Success response
Content-Type: application/json
"string"

Example

curl -X POST "https://151.115.63.33.sslip.io/api/payments/payments/:id/unmatch" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
POST/payments/statements/import
Auth requiredpayments.manage

POST /payments/statements/import

Requires features: payments.manage

Responses

201Success response
Content-Type: application/json
"string"

Example

curl -X POST "https://151.115.63.33.sslip.io/api/payments/statements/import" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"

Switching (zmiana sprzedawcy gazu)

Showing 3 of 3 endpoints
POST/switching/cases/{id}/cancel
Auth requiredswitching.cancel

Cancel switching case (4M rezygnacja / saga compensation)

Initiates saga compensation by transitioning to REZYGNACJA (if already sent to OSD) or ANULOWANY. Emits switching.case.cancelled; the saga handles OSD cancellation notification. Requires features: switching.cancel

Parameters

NameInRequiredSchemaDescription
idpathYesany

Responses

201Success response
Content-Type: application/json
"string"

Example

curl -X POST "https://151.115.63.33.sslip.io/api/switching/cases/:id/cancel" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
POST/switching/cases/{id}/resume
Auth requiredswitching.resume

Resume / re-activate switching case (4N ponowienie)

Resets a rejected or cancelled case to SWITCHING_ROBOCZY with a new planned change date. The caller must then re-submit with a new PoA check. Requires features: switching.resume

Parameters

NameInRequiredSchemaDescription
idpathYesany

Responses

201Success response
Content-Type: application/json
"string"

Example

curl -X POST "https://151.115.63.33.sslip.io/api/switching/cases/:id/resume" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
POST/switching/cases/{id}/submit
Auth requiredswitching.submit

Submit switching case to OSD (fail-closed PoA check)

Validates an active Power-of-Attorney (scope=switching) before sending. If no valid PoA → 422, no request sent (REQ-007, AC-002). Creates SwitchingRequest, advances to ZGŁOSZENIE_PRZYGOTOWANE, emits switching.case.submitted. The switchingWorkflow saga (om-temporal-saga) picks up from the event. Requires features: switching.submit

Parameters

NameInRequiredSchemaDescription
idpathYesany

Responses

201Success response
Content-Type: application/json
"string"

Example

curl -X POST "https://151.115.63.33.sslip.io/api/switching/cases/:id/submit" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"

Connector Bank

Showing 7 of 7 endpoints
GET/connector_bank/batches
Auth requiredconnector_bank.batch.view

List bank import batches

Returns a paginated collection of bank import batches scoped to the authenticated organization. Requires features: connector_bank.batch.view

Parameters

NameInRequiredSchemaDescription
pagequeryNoany
pageSizequeryNoany
connectionIdqueryNoany
statusqueryNoany
idsqueryNoanyComma-separated list of record UUIDs to filter by (max 200).

Responses

200Paginated bank import batches
Content-Type: application/json
{
  "items": [
    {
      "id": "00000000-0000-4000-8000-000000000000",
      "businessKey": null,
      "status": "string",
      "connectionId": "00000000-0000-4000-8000-000000000000",
      "pullStartedAt": null,
      "completedAt": null,
      "totalFiles": 1,
      "parsedOk": 1,
      "parseErrors": 1,
      "statementsDispatched": 1,
      "errorDetail": null,
      "version": 1,
      "createdAt": "string",
      "updatedAt": "string"
    }
  ],
  "total": 1,
  "totalPages": 1
}

Example

curl -X GET "https://151.115.63.33.sslip.io/api/connector_bank/batches?page=1&pageSize=50" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
GET/connector_bank/connections
Auth requiredconnector_bank.connection.view

List bank connections

Returns a paginated collection of bank connections scoped to the authenticated organization. Requires features: connector_bank.connection.view

Parameters

NameInRequiredSchemaDescription
pagequeryNoany
pageSizequeryNoany
searchqueryNoany
idqueryNoany
isActivequeryNoany
idsqueryNoanyComma-separated list of record UUIDs to filter by (max 200).

Responses

200Paginated bank connections
Content-Type: application/json
{
  "items": [
    {
      "id": "00000000-0000-4000-8000-000000000000",
      "code": "string",
      "name": "string",
      "host": "string",
      "port": 1,
      "dirIn": "string",
      "dirArchive": "string",
      "pullScheduleCron": null,
      "isActive": true,
      "status": "string",
      "version": 1,
      "createdAt": "string",
      "updatedAt": "string"
    }
  ],
  "total": 1,
  "totalPages": 1
}

Example

curl -X GET "https://151.115.63.33.sslip.io/api/connector_bank/connections?page=1&pageSize=50" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
POST/connector_bank/connections
Auth requiredconnector_bank.connection.manage

Create bank connection

Create a bank SFTP/H2H connection configuration Requires features: connector_bank.connection.manage

Request body (application/json)

{
  "code": "string",
  "name": "string",
  "host": "string",
  "port": 22,
  "dirIn": "in/",
  "dirArchive": "archive/",
  "isActive": true
}

Responses

201Bank Connection created
Content-Type: application/json
{
  "id": null
}

Example

curl -X POST "https://151.115.63.33.sslip.io/api/connector_bank/connections" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d "{
  \"code\": \"string\",
  \"name\": \"string\",
  \"host\": \"string\",
  \"port\": 22,
  \"dirIn\": \"in/\",
  \"dirArchive\": \"archive/\",
  \"isActive\": true
}"
PUT/connector_bank/connections
Auth requiredconnector_bank.connection.manage

Update bank connection

Updates an existing bank connection by id. Requires features: connector_bank.connection.manage

Request body (application/json)

{
  "port": 22,
  "dirIn": "in/",
  "dirArchive": "archive/",
  "isActive": true
}

Responses

200Bank Connection updated
Content-Type: application/json
{
  "ok": true
}

Example

curl -X PUT "https://151.115.63.33.sslip.io/api/connector_bank/connections" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d "{
  \"port\": 22,
  \"dirIn\": \"in/\",
  \"dirArchive\": \"archive/\",
  \"isActive\": true
}"
DELETE/connector_bank/connections
Auth requiredconnector_bank.connection.manage

Delete bank connection

Deletes a bank connection identified by id. Requires features: connector_bank.connection.manage

Responses

200Bank Connection deleted
Content-Type: application/json
{
  "ok": true
}

Example

curl -X DELETE "https://151.115.63.33.sslip.io/api/connector_bank/connections" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
POST/connector_bank/connections/{id}/pull
Auth requiredconnector_bank.pull.trigger

Trigger a manual MT940 SFTP pull

Enqueues an immediate SFTP pull of MT940 files outside the scheduled cron window. The pull is idempotent (dedup via BankFileLog + payments UNIQUE constraint). Returns 202 immediately; the actual transfer runs in the background. Requires features: connector_bank.pull.trigger

Parameters

NameInRequiredSchemaDescription
idpathYesany

Request body (application/json)

{
  "dryRun": false
}

Responses

202Pull accepted and queued
Content-Type: application/json
{
  "message": "string",
  "connectionId": "string",
  "dryRun": true
}
400Invalid payload or missing connection id
Content-Type: application/json
"string"
404Bank connection not found
Content-Type: application/json
"string"

Example

curl -X POST "https://151.115.63.33.sslip.io/api/connector_bank/connections/:id/pull" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d "{
  \"dryRun\": false
}"
GET/connector_bank/files
Auth requiredconnector_bank.file.view

List bank file logs

Returns a paginated collection of bank file logs scoped to the authenticated organization. Requires features: connector_bank.file.view

Parameters

NameInRequiredSchemaDescription
pagequeryNoany
pageSizequeryNoany
connectionIdqueryNoany
batchIdqueryNoany
statusqueryNoany
searchqueryNoany
idsqueryNoanyComma-separated list of record UUIDs to filter by (max 200).

Responses

200Paginated bank file logs
Content-Type: application/json
{
  "items": [
    {
      "id": "00000000-0000-4000-8000-000000000000",
      "businessKey": "string",
      "status": "string",
      "connectionId": "00000000-0000-4000-8000-000000000000",
      "batchId": null,
      "filename": "string",
      "contentHash": "string",
      "statementRef": null,
      "linesCount": null,
      "archivePath": null,
      "sizeBytes": null,
      "errorDetail": null,
      "sourceSystem": null,
      "sourceTimestamp": null,
      "version": 1,
      "createdAt": "string",
      "updatedAt": "string"
    }
  ],
  "total": 1,
  "totalPages": 1
}

Example

curl -X GET "https://151.115.63.33.sslip.io/api/connector_bank/files?page=1&pageSize=50" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"

Connector Accounting (MOCKUP)

Showing 8 of 8 endpoints
GET/connector_accounting/connections
Auth requiredconnector_accounting.connection.view

List accounting connections

Returns a paginated collection of accounting connections scoped to the authenticated organization. NOTE: transport is MOCKUP — no real accounting system is connected. Requires features: connector_accounting.connection.view

Parameters

NameInRequiredSchemaDescription
pagequeryNoany
pageSizequeryNoany
searchqueryNoany
idqueryNoany
isActivequeryNoany
idsqueryNoanyComma-separated list of record UUIDs to filter by (max 200).

Responses

200Paginated accounting connections
Content-Type: application/json
{
  "items": [
    {
      "id": "00000000-0000-4000-8000-000000000000",
      "code": "string",
      "name": "string",
      "systemType": "string",
      "baseUrl": null,
      "exportScheduleCron": null,
      "isActive": true,
      "version": 1,
      "createdAt": "string",
      "updatedAt": "string"
    }
  ],
  "total": 1,
  "totalPages": 1
}

Example

curl -X GET "https://151.115.63.33.sslip.io/api/connector_accounting/connections?page=1&pageSize=50" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
POST/connector_accounting/connections
Auth requiredconnector_accounting.connection.manage

Create accounting connection (mockup)

Create an accounting system connection configuration (MOCKUP — transport not connected) Requires features: connector_accounting.connection.manage

Request body (application/json)

{
  "code": "string",
  "name": "string",
  "systemType": "CUSTOM",
  "isActive": true
}

Responses

201Accounting Connection (MOCKUP) created
Content-Type: application/json
{
  "id": null
}

Example

curl -X POST "https://151.115.63.33.sslip.io/api/connector_accounting/connections" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d "{
  \"code\": \"string\",
  \"name\": \"string\",
  \"systemType\": \"CUSTOM\",
  \"isActive\": true
}"
PUT/connector_accounting/connections
Auth requiredconnector_accounting.connection.manage

Update accounting connection (mockup)

Updates an existing accounting connection (mockup) by id. Requires features: connector_accounting.connection.manage

Request body (application/json)

{
  "systemType": "CUSTOM",
  "isActive": true
}

Responses

200Accounting Connection (MOCKUP) updated
Content-Type: application/json
{
  "ok": true
}

Example

curl -X PUT "https://151.115.63.33.sslip.io/api/connector_accounting/connections" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d "{
  \"systemType\": \"CUSTOM\",
  \"isActive\": true
}"
DELETE/connector_accounting/connections
Auth requiredconnector_accounting.connection.manage

Delete accounting connection (mockup)

Deletes a accounting connection (mockup) identified by id. Requires features: connector_accounting.connection.manage

Responses

200Accounting Connection (MOCKUP) deleted
Content-Type: application/json
{
  "ok": true
}

Example

curl -X DELETE "https://151.115.63.33.sslip.io/api/connector_accounting/connections" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
GET/connector_accounting/connections/{id}
Auth requiredconnector_accounting.connection.view

Get an accounting connection by id

Returns a single accounting connection by id, scoped to the authenticated organization. NOTE: transport is MOCKUP — no real accounting system is connected. Create/update/delete are exposed on the collection route /api/connector_accounting/connections. Requires features: connector_accounting.connection.view

Parameters

NameInRequiredSchemaDescription
idpathYesany

Responses

200The accounting connection
Content-Type: application/json
{
  "id": "00000000-0000-4000-8000-000000000000",
  "code": "string",
  "name": "string",
  "systemType": "string",
  "baseUrl": null,
  "exportScheduleCron": null,
  "isActive": true,
  "version": 1,
  "createdAt": "string",
  "updatedAt": "string"
}
404Accounting connection not found
Content-Type: application/json
"string"

Example

curl -X GET "https://151.115.63.33.sslip.io/api/connector_accounting/connections/:id" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
GET/connector_accounting/export-batches
Auth requiredconnector_accounting.export_batch.view

List accounting export batches

Returns a paginated collection of accounting export batches scoped to the authenticated organization. NOTE: transport is MOCKUP — no real accounting system is connected. Requires features: connector_accounting.export_batch.view

Parameters

NameInRequiredSchemaDescription
pagequeryNoany
pageSizequeryNoany
connectionIdqueryNoany
statusqueryNoany
idsqueryNoanyComma-separated list of record UUIDs to filter by (max 200).

Responses

200Paginated accounting export batches
Content-Type: application/json
{
  "items": [
    {
      "id": "00000000-0000-4000-8000-000000000000",
      "connectionId": "00000000-0000-4000-8000-000000000000",
      "businessKey": null,
      "status": "string",
      "exportStartedAt": null,
      "completedAt": null,
      "totalPostings": 1,
      "sentOk": 1,
      "sendErrors": 1,
      "skipped": 1,
      "errorDetail": null,
      "version": 1,
      "createdAt": "string",
      "updatedAt": "string"
    }
  ],
  "total": 1,
  "totalPages": 1
}

Example

curl -X GET "https://151.115.63.33.sslip.io/api/connector_accounting/export-batches?page=1&pageSize=50" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
GET/connector_accounting/export-batches/{id}
Auth requiredconnector_accounting.export_batch.view

Get an accounting export batch by id

Returns a single accounting export batch by id, scoped to the authenticated organization. NOTE: transport is MOCKUP — no real accounting system is connected. Requires features: connector_accounting.export_batch.view

Parameters

NameInRequiredSchemaDescription
idpathYesany

Responses

200The accounting export batch
Content-Type: application/json
{
  "id": "00000000-0000-4000-8000-000000000000",
  "connectionId": "00000000-0000-4000-8000-000000000000",
  "businessKey": null,
  "status": "string",
  "exportStartedAt": null,
  "completedAt": null,
  "totalPostings": 1,
  "sentOk": 1,
  "sendErrors": 1,
  "skipped": 1,
  "errorDetail": null,
  "version": 1,
  "createdAt": "string",
  "updatedAt": "string"
}
404Accounting export batch not found
Content-Type: application/json
"string"

Example

curl -X GET "https://151.115.63.33.sslip.io/api/connector_accounting/export-batches/:id" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
GET/connector_accounting/posting-logs
Auth requiredconnector_accounting.posting_log.view

List accounting posting logs

Returns a paginated collection of accounting posting logs scoped to the authenticated organization. NOTE: transport is MOCKUP — no real accounting system is connected. Requires features: connector_accounting.posting_log.view

Parameters

NameInRequiredSchemaDescription
pagequeryNoany
pageSizequeryNoany
connectionIdqueryNoany
batchIdqueryNoany
invoiceIdqueryNoany
statusqueryNoany
accountingPeriodqueryNoany
searchqueryNoany
idsqueryNoanyComma-separated list of record UUIDs to filter by (max 200).

Responses

200Paginated accounting posting logs
Content-Type: application/json
{
  "items": [
    {
      "id": "00000000-0000-4000-8000-000000000000",
      "connectionId": "00000000-0000-4000-8000-000000000000",
      "invoiceId": "00000000-0000-4000-8000-000000000000",
      "invoiceNumber": null,
      "accountingPeriod": "string",
      "status": "string",
      "batchId": null,
      "externalRef": null,
      "sentAt": null,
      "errorDetail": null,
      "retryCount": 1,
      "idempotencyKey": "string",
      "version": 1,
      "createdAt": "string",
      "updatedAt": "string"
    }
  ],
  "total": 1,
  "totalPages": 1
}

Example

curl -X GET "https://151.115.63.33.sslip.io/api/connector_accounting/posting-logs?page=1&pageSize=50" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"

Auth

Showing 1 of 1 endpoints
GET/auth/users/consents
Auth requiredauth.users.edit

List user consents

Returns all consent records for a given user, with integrity verification status. Requires features: auth.users.edit

Parameters

NameInRequiredSchemaDescription
userIdqueryYesany

Responses

200Consent list returned
Content-Type: application/json
"string"

Example

curl -X GET "https://151.115.63.33.sslip.io/api/auth/users/consents?userId=00000000-0000-4000-8000-000000000000" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"

Billing

Showing 6 of 6 endpoints
GET/billing/accounts
Auth requiredbilling.view

List billing accounts

Returns a paginated collection of billing accounts scoped to the authenticated organization. Requires features: billing.view

Parameters

NameInRequiredSchemaDescription
customerIdqueryNoany
contractIdqueryNoany
statusqueryNoany
pagequeryNoany
pageSizequeryNoany
idsqueryNoanyComma-separated list of record UUIDs to filter by (max 200).

Responses

200Paginated billing accounts
Content-Type: application/json
{
  "items": [
    {
      "id": "00000000-0000-4000-8000-000000000000",
      "businessKey": "string",
      "contractId": "00000000-0000-4000-8000-000000000000",
      "customerId": "00000000-0000-4000-8000-000000000000",
      "status": "string",
      "balance": "string",
      "currency": "string",
      "version": 1,
      "createdAt": "string",
      "updatedAt": "string"
    }
  ],
  "total": 1,
  "totalPages": 1
}

Example

curl -X GET "https://151.115.63.33.sslip.io/api/billing/accounts" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
GET/billing/invoices
Auth requiredbilling.view

List invoices

Returns a paginated collection of invoices scoped to the authenticated organization. Requires features: billing.view

Parameters

NameInRequiredSchemaDescription
customerIdqueryNoany
buyerIdqueryNoany
contractIdqueryNoany
ppgIdqueryNoany
statusqueryNoany
asOfqueryNoany
periodFromqueryNoany
periodToqueryNoany
pagequeryNoany
pageSizequeryNoany
sortqueryNoany
orderqueryNoany
idsqueryNoanyComma-separated list of record UUIDs to filter by (max 200).

Responses

200Paginated invoices
Content-Type: application/json
{
  "items": [
    {
      "id": "00000000-0000-4000-8000-000000000000",
      "businessKey": "string",
      "status": "string",
      "buyerId": "00000000-0000-4000-8000-000000000000",
      "contractId": "00000000-0000-4000-8000-000000000000",
      "totalGross": "string",
      "issueDate": "string",
      "version": 1,
      "createdAt": "string",
      "updatedAt": "string"
    }
  ],
  "total": 1,
  "totalPages": 1
}

Example

curl -X GET "https://151.115.63.33.sslip.io/api/billing/invoices" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
POST/billing/invoices
Auth requiredbilling.manage

Create invoice

Issue a gas invoice. Requires features: billing.manage

Request body (application/json)

{
  "buyerId": "00000000-0000-4000-8000-000000000000",
  "contractId": "00000000-0000-4000-8000-000000000000",
  "issueDate": "string",
  "periodFrom": "string",
  "periodTo": "string",
  "totalNet": "string",
  "totalVat": "string",
  "totalGross": "string",
  "amountDue": "string",
  "validFrom": "string",
  "lines": [
    {
      "invoiceId": "00000000-0000-4000-8000-000000000000",
      "service": "Gaz",
      "qty": "string",
      "unit": "string",
      "unitPrice": "string",
      "net": "string",
      "vatRate": "string",
      "vatAmount": "string",
      "gross": "string",
      "tariffScope": "SPRZEDAWCA"
    }
  ]
}

Responses

201Invoice created
Content-Type: application/json
{
  "id": null
}

Example

curl -X POST "https://151.115.63.33.sslip.io/api/billing/invoices" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d "{
  \"buyerId\": \"00000000-0000-4000-8000-000000000000\",
  \"contractId\": \"00000000-0000-4000-8000-000000000000\",
  \"issueDate\": \"string\",
  \"periodFrom\": \"string\",
  \"periodTo\": \"string\",
  \"totalNet\": \"string\",
  \"totalVat\": \"string\",
  \"totalGross\": \"string\",
  \"amountDue\": \"string\",
  \"validFrom\": \"string\",
  \"lines\": [
    {
      \"invoiceId\": \"00000000-0000-4000-8000-000000000000\",
      \"service\": \"Gaz\",
      \"qty\": \"string\",
      \"unit\": \"string\",
      \"unitPrice\": \"string\",
      \"net\": \"string\",
      \"vatRate\": \"string\",
      \"vatAmount\": \"string\",
      \"gross\": \"string\",
      \"tariffScope\": \"SPRZEDAWCA\"
    }
  ]
}"
GET/billing/receivables
Auth requiredbilling.view

List receivables

Returns a paginated collection of receivables scoped to the authenticated organization. Requires features: billing.view

Parameters

NameInRequiredSchemaDescription
billingAccountIdqueryNoany
customerIdqueryNoany
contractIdqueryNoany
statusqueryNoany
overdueOnlyqueryNoany
pagequeryNoany
pageSizequeryNoany
idsqueryNoanyComma-separated list of record UUIDs to filter by (max 200).

Responses

200Paginated receivables
Content-Type: application/json
{
  "items": [
    {
      "id": "00000000-0000-4000-8000-000000000000",
      "invoiceId": "00000000-0000-4000-8000-000000000000",
      "billingAccountId": "00000000-0000-4000-8000-000000000000",
      "status": "string",
      "amount": "string",
      "paidAmount": "string",
      "currency": "string",
      "dueDate": "string",
      "version": 1,
      "createdAt": "string",
      "updatedAt": "string"
    }
  ],
  "total": 1,
  "totalPages": 1
}

Example

curl -X GET "https://151.115.63.33.sslip.io/api/billing/receivables" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
GET/billing/runs
Auth requiredbilling.view

List billing runs

Returns a paginated collection of billing runs scoped to the authenticated organization. Requires features: billing.view

Parameters

NameInRequiredSchemaDescription
statusqueryNoany
periodqueryNoany
pagequeryNoany
pageSizequeryNoany
idsqueryNoanyComma-separated list of record UUIDs to filter by (max 200).

Responses

200Paginated billing runs
Content-Type: application/json
{
  "items": [
    {
      "id": "00000000-0000-4000-8000-000000000000",
      "businessKey": "string",
      "status": "string",
      "period": "string",
      "scope": null,
      "totalContracts": null,
      "processedContracts": null,
      "failedContracts": null,
      "version": 1,
      "createdAt": "string",
      "updatedAt": "string"
    }
  ],
  "total": 1,
  "totalPages": 1
}

Example

curl -X GET "https://151.115.63.33.sslip.io/api/billing/runs" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
POST/billing/runs
Auth requiredbilling.run

Create billingrun

Enqueue a BillingRun for the specified period. Idempotent: returns existing run if already ZAPLANOWANY/W_TOKU for the same period+scope. Requires features: billing.run

Request body (application/json)

{
  "period": "string"
}

Responses

201BillingRun created
Content-Type: application/json
{
  "id": null
}

Example

curl -X POST "https://151.115.63.33.sslip.io/api/billing/runs" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d "{
  \"period\": \"string\"
}"

Configs

Showing 6 of 6 endpoints
GET/configs/cache
Auth requiredconfigs.cache.view

Get cache statistics

Returns detailed cache statistics including total entries and breakdown by cache segments. Requires cache service to be available. Requires features: configs.cache.view

Responses

200Cache statistics
Content-Type: application/json
{
  "generatedAt": "string",
  "totalKeys": 1,
  "segments": [
    {
      "segment": "string",
      "resource": null,
      "method": null,
      "path": null,
      "keyCount": 1,
      "keys": [
        "string"
      ]
    }
  ]
}
500Failed to resolve cache stats
Content-Type: application/json
{
  "error": "string"
}
503Cache service unavailable
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X GET "https://151.115.63.33.sslip.io/api/configs/cache" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
POST/configs/cache
Auth requiredconfigs.cache.manage

Purge cache

Purges cache entries. Supports two actions: purgeAll (clears entire cache) or purgeSegment (clears specific segment). Returns updated cache statistics after purge. Requires features: configs.cache.manage

Request body (application/json)

{
  "action": "purgeAll"
}

Responses

200Cache segment cleared successfully
Content-Type: application/json
{
  "action": "purgeSegment",
  "segment": "string",
  "deleted": 1,
  "stats": {
    "generatedAt": "string",
    "totalKeys": 1,
    "segments": [
      {
        "segment": "string",
        "resource": null,
        "method": null,
        "path": null,
        "keyCount": 1,
        "keys": [
          "string"
        ]
      }
    ]
  }
}
400Invalid request - missing segment identifier for purgeSegment action
Content-Type: application/json
{
  "error": "string"
}
500Failed to purge cache
Content-Type: application/json
{
  "error": "string"
}
503Cache service unavailable
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X POST "https://151.115.63.33.sslip.io/api/configs/cache" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d "{
  \"action\": \"purgeAll\"
}"
GET/configs/system-status
Auth requiredconfigs.system_status.view

Get system health status

Returns comprehensive system health information including environment details, version, resource usage, and service connectivity status. Requires features: configs.system_status.view

Responses

200System status snapshot
Content-Type: application/json
{
  "generatedAt": "string",
  "runtimeMode": "development",
  "categories": [
    {
      "key": "profiling",
      "labelKey": "string",
      "descriptionKey": null,
      "items": [
        {
          "key": "string",
          "category": "profiling",
          "kind": "boolean",
          "labelKey": "string",
          "descriptionKey": "string",
          "docUrl": null,
          "defaultValue": null,
          "state": "enabled",
          "value": null,
          "normalizedValue": null
        }
      ]
    }
  ]
}
500Failed to load system status
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X GET "https://151.115.63.33.sslip.io/api/configs/system-status" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
POST/configs/system-status
Auth requiredconfigs.manage

Clear system cache

Purges the entire cache for the current tenant. Useful for troubleshooting or forcing fresh data loading. Requires features: configs.manage

Responses

200Cache cleared successfully
Content-Type: application/json
{
  "cleared": true
}
500Failed to purge cache
Content-Type: application/json
{
  "error": "string"
}
503Cache service unavailable
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X POST "https://151.115.63.33.sslip.io/api/configs/system-status" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
GET/configs/upgrade-actions
Auth requiredconfigs.manage

List pending upgrade actions

Returns a list of pending upgrade actions for the current version. These are one-time setup tasks that need to be executed after upgrading to a new version. Requires organization and tenant context. Requires features: configs.manage

Responses

200List of pending upgrade actions
Content-Type: application/json
{
  "version": "string",
  "actions": [
    {
      "id": "string",
      "version": "string",
      "message": "string",
      "ctaLabel": "string",
      "successMessage": "string",
      "loadingLabel": "string"
    }
  ]
}
400Missing organization or tenant context
Content-Type: application/json
{
  "error": "string"
}
500Failed to load upgrade actions
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X GET "https://151.115.63.33.sslip.io/api/configs/upgrade-actions" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
POST/configs/upgrade-actions
Auth requiredconfigs.manage

Execute upgrade action

Executes a specific upgrade action by ID. Typically used for one-time setup tasks like seeding example data after version upgrade. Returns execution status and localized success message. Requires features: configs.manage

Request body (application/json)

{
  "actionId": "string"
}

Responses

200Upgrade action executed successfully
Content-Type: application/json
{
  "status": "string",
  "message": "string",
  "version": "string"
}
400Invalid request body or missing context
Content-Type: application/json
{
  "error": "string"
}
500Failed to execute upgrade action
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X POST "https://151.115.63.33.sslip.io/api/configs/upgrade-actions" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d "{
  \"actionId\": \"string\"
}"

Contracts

Showing 20 of 24 endpoints
GET/contracts/attachments
Auth requiredcontracts.view

List contract attachments

Returns a paginated collection of contract attachments scoped to the authenticated organization. Requires features: contracts.view

Parameters

NameInRequiredSchemaDescription
pagequeryNoany
pageSizequeryNoany
contractIdqueryNoany
idsqueryNoanyComma-separated list of record UUIDs to filter by (max 200).

Responses

200Paginated contract attachments
Content-Type: application/json
{
  "items": [
    {
      "id": "00000000-0000-4000-8000-000000000000",
      "contractId": "00000000-0000-4000-8000-000000000000",
      "storageKey": "string",
      "mimeType": null
    }
  ],
  "total": 1,
  "totalPages": 1
}

Example

curl -X GET "https://151.115.63.33.sslip.io/api/contracts/attachments?page=1&pageSize=50" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
POST/contracts/attachments
Auth requiredcontracts.manage

Create contract attachment

Upload metadata; filename encrypted at rest. Requires features: contracts.manage

Request body (application/json)

{
  "contractId": "00000000-0000-4000-8000-000000000000",
  "filename": "string",
  "mimeType": null,
  "storageKey": "string",
  "sizeBytes": null
}

Responses

201Contract Attachment created
Content-Type: application/json
{
  "id": null
}

Example

curl -X POST "https://151.115.63.33.sslip.io/api/contracts/attachments" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d "{
  \"contractId\": \"00000000-0000-4000-8000-000000000000\",
  \"filename\": \"string\",
  \"mimeType\": null,
  \"storageKey\": \"string\",
  \"sizeBytes\": null
}"
DELETE/contracts/attachments
Auth requiredcontracts.manage

Contract Attachment management

Requires features: contracts.manage

Responses

204Success

No response body.

Example

curl -X DELETE "https://151.115.63.33.sslip.io/api/contracts/attachments" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
GET/contracts/calendar
Auth requiredcontracts.view

List contract calendar events

Returns a paginated collection of contract calendar events scoped to the authenticated organization. Requires features: contracts.view

Parameters

NameInRequiredSchemaDescription
pagequeryNoany
pageSizequeryNoany
contractIdqueryNoany
kindqueryNoany
dueBeforequeryNoany
idsqueryNoanyComma-separated list of record UUIDs to filter by (max 200).

Responses

200Paginated contract calendar events
Content-Type: application/json
{
  "items": [
    {
      "id": "00000000-0000-4000-8000-000000000000",
      "calendarId": "00000000-0000-4000-8000-000000000000",
      "kind": "string",
      "dueAt": "string"
    }
  ],
  "total": 1,
  "totalPages": 1
}

Example

curl -X GET "https://151.115.63.33.sslip.io/api/contracts/calendar?page=1&pageSize=50" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
POST/contracts/calendar
Auth requiredcontracts.manage

Create contract calendar event

Creates a new contract calendar event. Requires features: contracts.manage

Request body (application/json)

{
  "calendarId": "00000000-0000-4000-8000-000000000000",
  "kind": "START_DOSTAW",
  "dueAt": "string",
  "note": null
}

Responses

201Contract Calendar Event created
Content-Type: application/json
{
  "id": null
}

Example

curl -X POST "https://151.115.63.33.sslip.io/api/contracts/calendar" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d "{
  \"calendarId\": \"00000000-0000-4000-8000-000000000000\",
  \"kind\": \"START_DOSTAW\",
  \"dueAt\": \"string\",
  \"note\": null
}"
DELETE/contracts/calendar
Auth requiredcontracts.manage

Contract Calendar Event management

Requires features: contracts.manage

Responses

204Success

No response body.

Example

curl -X DELETE "https://151.115.63.33.sslip.io/api/contracts/calendar" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
GET/contracts/contracts
Auth requiredcontracts.view

List contracts

Returns a paginated collection of contracts scoped to the authenticated organization. Requires features: contracts.view

Parameters

NameInRequiredSchemaDescription
pagequeryNoany
pageSizequeryNoany
customerIdqueryNoany
statusqueryNoany
typequeryNoany
sortFieldqueryNoany
sortDirqueryNoany
idsqueryNoanyComma-separated list of record UUIDs to filter by (max 200).

Responses

200Paginated contracts
Content-Type: application/json
{
  "items": [
    {
      "id": "00000000-0000-4000-8000-000000000000",
      "businessKey": "string",
      "type": "string",
      "status": "string",
      "customerId": "00000000-0000-4000-8000-000000000000",
      "sellerId": null,
      "validFrom": "string",
      "validTo": null,
      "createdAt": "string",
      "updatedAt": "string"
    }
  ],
  "total": 1,
  "totalPages": 1
}

Example

curl -X GET "https://151.115.63.33.sslip.io/api/contracts/contracts?page=1&pageSize=50" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
POST/contracts/contracts
Auth requiredcontracts.manage

Create contract

Create a draft contract. Requires features: contracts.manage

Request body (application/json)

{
  "type": "sprzedaz",
  "status": "UMOWA_ROBOCZA",
  "customerId": "00000000-0000-4000-8000-000000000000",
  "sellerId": null,
  "aggregatorId": null,
  "serviceModel": null,
  "productModel": null,
  "validFrom": "string",
  "validTo": null,
  "sourceSystem": null,
  "owner": null
}

Responses

201Contract created
Content-Type: application/json
{
  "id": null
}

Example

curl -X POST "https://151.115.63.33.sslip.io/api/contracts/contracts" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d "{
  \"type\": \"sprzedaz\",
  \"status\": \"UMOWA_ROBOCZA\",
  \"customerId\": \"00000000-0000-4000-8000-000000000000\",
  \"sellerId\": null,
  \"aggregatorId\": null,
  \"serviceModel\": null,
  \"productModel\": null,
  \"validFrom\": \"string\",
  \"validTo\": null,
  \"sourceSystem\": null,
  \"owner\": null
}"
PUT/contracts/contracts
Auth requiredcontracts.manage

Update contract

Updates an existing contract by id. Requires features: contracts.manage

Request body (application/json)

{
  "status": "UMOWA_ROBOCZA",
  "sellerId": null,
  "aggregatorId": null,
  "serviceModel": null,
  "productModel": null,
  "validTo": null,
  "sourceSystem": null,
  "owner": null,
  "id": "00000000-0000-4000-8000-000000000000"
}

Responses

200Contract updated
Content-Type: application/json
{
  "ok": true
}

Example

curl -X PUT "https://151.115.63.33.sslip.io/api/contracts/contracts" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d "{
  \"status\": \"UMOWA_ROBOCZA\",
  \"sellerId\": null,
  \"aggregatorId\": null,
  \"serviceModel\": null,
  \"productModel\": null,
  \"validTo\": null,
  \"sourceSystem\": null,
  \"owner\": null,
  \"id\": \"00000000-0000-4000-8000-000000000000\"
}"
DELETE/contracts/contracts
Auth requiredcontracts.manage

Delete contract

Deletes a contract identified by id. Requires features: contracts.manage

Responses

200Contract deleted
Content-Type: application/json
{
  "ok": true
}

Example

curl -X DELETE "https://151.115.63.33.sslip.io/api/contracts/contracts" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
GET/contracts/poa
Auth requiredcontracts.view

List powers of attorney

Returns a paginated collection of powers of attorney scoped to the authenticated organization. Requires features: contracts.view

Parameters

NameInRequiredSchemaDescription
pagequeryNoany
pageSizequeryNoany
contractIdqueryNoany
principalCustomerIdqueryNoany
idsqueryNoanyComma-separated list of record UUIDs to filter by (max 200).

Responses

200Paginated powers of attorney
Content-Type: application/json
{
  "items": [
    {
      "id": "00000000-0000-4000-8000-000000000000",
      "principalCustomerId": "00000000-0000-4000-8000-000000000000",
      "status": "string",
      "validFrom": "string",
      "validTo": null
    }
  ],
  "total": 1,
  "totalPages": 1
}

Example

curl -X GET "https://151.115.63.33.sslip.io/api/contracts/poa?page=1&pageSize=50" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
POST/contracts/poa
Auth requiredcontracts.manage

Create power of attorney

Register a Power of Attorney (PII fields encrypted at rest). Requires features: contracts.manage

Request body (application/json)

{
  "contractId": null,
  "principalCustomerId": "00000000-0000-4000-8000-000000000000",
  "validFrom": "string",
  "validTo": null,
  "scopes": [
    "assignment"
  ],
  "businessKey": null
}

Responses

201Power of Attorney created
Content-Type: application/json
{
  "id": null
}

Example

curl -X POST "https://151.115.63.33.sslip.io/api/contracts/poa" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d "{
  \"contractId\": null,
  \"principalCustomerId\": \"00000000-0000-4000-8000-000000000000\",
  \"validFrom\": \"string\",
  \"validTo\": null,
  \"scopes\": [
    \"assignment\"
  ],
  \"businessKey\": null
}"
DELETE/contracts/poa
Auth requiredcontracts.manage

Power of Attorney management

Requires features: contracts.manage

Responses

204Success

No response body.

Example

curl -X DELETE "https://151.115.63.33.sslip.io/api/contracts/poa" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
GET/contracts/ppg-assignments
Auth requiredcontracts.view

List contract ppg assignments

Returns a paginated collection of contract ppg assignments scoped to the authenticated organization. Requires features: contracts.view

Parameters

NameInRequiredSchemaDescription
pagequeryNoany
pageSizequeryNoany
contractIdqueryNoany
ppgIdqueryNoany
asOfqueryNoany
idsqueryNoanyComma-separated list of record UUIDs to filter by (max 200).

Responses

200Paginated contract ppg assignments
Content-Type: application/json
{
  "items": [
    {
      "id": "00000000-0000-4000-8000-000000000000",
      "contractId": "00000000-0000-4000-8000-000000000000",
      "ppgId": "00000000-0000-4000-8000-000000000000",
      "validFrom": "string",
      "validTo": null,
      "status": "string"
    }
  ],
  "total": 1,
  "totalPages": 1
}

Example

curl -X GET "https://151.115.63.33.sslip.io/api/contracts/ppg-assignments?page=1&pageSize=50" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
POST/contracts/ppg-assignments
Auth requiredcontracts.assign_ppg

Create contract ppg assignment

Create a bitemporal PPG ↔ contract assignment. Requires features: contracts.assign_ppg

Request body (application/json)

{
  "contractId": "00000000-0000-4000-8000-000000000000",
  "ppgId": "00000000-0000-4000-8000-000000000000",
  "validFrom": "string",
  "status": "ACTIVE",
  "sourceSystem": null
}

Responses

201Contract PPG Assignment created
Content-Type: application/json
{
  "id": null
}

Example

curl -X POST "https://151.115.63.33.sslip.io/api/contracts/ppg-assignments" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d "{
  \"contractId\": \"00000000-0000-4000-8000-000000000000\",
  \"ppgId\": \"00000000-0000-4000-8000-000000000000\",
  \"validFrom\": \"string\",
  \"status\": \"ACTIVE\",
  \"sourceSystem\": null
}"
DELETE/contracts/ppg-assignments
Auth requiredcontracts.assign_ppg

Contract PPG Assignment management

Requires features: contracts.assign_ppg

Responses

204Success

No response body.

Example

curl -X DELETE "https://151.115.63.33.sslip.io/api/contracts/ppg-assignments" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
GET/contracts/price-assignments
Auth requiredcontracts.view

List contract price assignments

Returns a paginated collection of contract price assignments scoped to the authenticated organization. Requires features: contracts.view

Parameters

NameInRequiredSchemaDescription
pagequeryNoany
pageSizequeryNoany
contractIdqueryNoany
priceIdqueryNoany
asOfqueryNoany
idsqueryNoanyComma-separated list of record UUIDs to filter by (max 200).

Responses

200Paginated contract price assignments
Content-Type: application/json
{
  "items": [
    {
      "id": "00000000-0000-4000-8000-000000000000",
      "contractId": "00000000-0000-4000-8000-000000000000",
      "priceId": "00000000-0000-4000-8000-000000000000",
      "validFrom": "string",
      "validTo": null,
      "status": "string"
    }
  ],
  "total": 1,
  "totalPages": 1
}

Example

curl -X GET "https://151.115.63.33.sslip.io/api/contracts/price-assignments?page=1&pageSize=50" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
POST/contracts/price-assignments
Auth requiredcontracts.manage

Create contract price assignment

Creates a new contract price assignment. Requires features: contracts.manage

Request body (application/json)

{
  "contractId": "00000000-0000-4000-8000-000000000000",
  "priceId": "00000000-0000-4000-8000-000000000000",
  "validFrom": "string",
  "validTo": null,
  "businessKey": null
}

Responses

201Contract Price Assignment created
Content-Type: application/json
{
  "id": null
}

Example

curl -X POST "https://151.115.63.33.sslip.io/api/contracts/price-assignments" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d "{
  \"contractId\": \"00000000-0000-4000-8000-000000000000\",
  \"priceId\": \"00000000-0000-4000-8000-000000000000\",
  \"validFrom\": \"string\",
  \"validTo\": null,
  \"businessKey\": null
}"
DELETE/contracts/price-assignments
Auth requiredcontracts.manage

Contract Price Assignment management

Requires features: contracts.manage

Responses

204Success

No response body.

Example

curl -X DELETE "https://151.115.63.33.sslip.io/api/contracts/price-assignments" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
GET/contracts/templates
Auth requiredcontracts.view

List contract templates

Returns a paginated collection of contract templates scoped to the authenticated organization. Requires features: contracts.view

Parameters

NameInRequiredSchemaDescription
pagequeryNoany
pageSizequeryNoany
isActivequeryNoany
idsqueryNoanyComma-separated list of record UUIDs to filter by (max 200).

Responses

200Paginated contract templates
Content-Type: application/json
{
  "items": [
    {
      "id": "00000000-0000-4000-8000-000000000000",
      "code": "string",
      "name": "string",
      "isActive": true
    }
  ],
  "total": 1,
  "totalPages": 1
}

Example

curl -X GET "https://151.115.63.33.sslip.io/api/contracts/templates?page=1&pageSize=50" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"

Dashboards

Showing 10 of 10 endpoints
GET/dashboards/layout
Auth requireddashboards.view

Load the current dashboard layout

Returns the saved widget layout together with the widgets the current user is allowed to place. Requires features: dashboards.view

Responses

200Current dashboard layout and available widgets.
Content-Type: application/json
{
  "layout": {
    "items": [
      {
        "id": "00000000-0000-4000-8000-000000000000",
        "widgetId": "string",
        "order": 1
      }
    ]
  },
  "allowedWidgetIds": [
    "string"
  ],
  "canConfigure": true,
  "context": {
    "userId": "00000000-0000-4000-8000-000000000000",
    "tenantId": null,
    "organizationId": null,
    "userName": null,
    "userEmail": null,
    "userLabel": "string"
  },
  "widgets": [
    {
      "id": "string",
      "title": "string",
      "description": null,
      "defaultSize": "sm",
      "defaultEnabled": true,
      "defaultSettings": null,
      "features": [
        "string"
      ],
      "moduleId": "string",
      "icon": null,
      "loaderKey": "string",
      "supportsRefresh": true
    }
  ]
}

Example

curl -X GET "https://151.115.63.33.sslip.io/api/dashboards/layout" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
PUT/dashboards/layout
Auth requireddashboards.configure

Persist dashboard layout changes

Saves the provided widget ordering, sizes, and settings for the current user. Requires features: dashboards.configure

Request body (application/json)

{
  "items": [
    {
      "id": "00000000-0000-4000-8000-000000000000",
      "widgetId": "string",
      "order": 1
    }
  ]
}

Responses

200Layout updated successfully.
Content-Type: application/json
{
  "ok": true
}
400Invalid layout payload
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X PUT "https://151.115.63.33.sslip.io/api/dashboards/layout" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d "{
  \"items\": [
    {
      \"id\": \"00000000-0000-4000-8000-000000000000\",
      \"widgetId\": \"string\",
      \"order\": 1
    }
  ]
}"
PATCH/dashboards/layout/{itemId}
Auth requireddashboards.configure

Update a dashboard layout item

Adjusts the size or settings for a single widget within the dashboard layout. Requires features: dashboards.configure

Parameters

NameInRequiredSchemaDescription
itemIdpathYesany

Request body (application/json)

{}

Responses

200Layout item updated.
Content-Type: application/json
{
  "ok": true
}
400Invalid payload or missing item id
Content-Type: application/json
{
  "error": "string"
}
404Item not found
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X PATCH "https://151.115.63.33.sslip.io/api/dashboards/layout/00000000-0000-4000-8000-000000000000" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d "{}"
GET/dashboards/roles/widgets
Auth requireddashboards.admin.assign-widgets

Fetch widget assignments for a role

Returns the widgets explicitly assigned to the given role together with the evaluation scope. Requires features: dashboards.admin.assign-widgets

Parameters

NameInRequiredSchemaDescription
roleIdqueryYesany
tenantIdqueryNoany
organizationIdqueryNoany

Responses

200Current widget configuration for the role.
Content-Type: application/json
{
  "widgetIds": [
    "string"
  ],
  "hasCustom": true,
  "scope": {
    "tenantId": null,
    "organizationId": null
  }
}
400Missing role identifier
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X GET "https://151.115.63.33.sslip.io/api/dashboards/roles/widgets?roleId=00000000-0000-4000-8000-000000000000" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
PUT/dashboards/roles/widgets
Auth requireddashboards.admin.assign-widgets

Update widgets assigned to a role

Persists the widget list for a role within the provided tenant and organization scope. Requires features: dashboards.admin.assign-widgets

Request body (application/json)

{
  "roleId": "00000000-0000-4000-8000-000000000000",
  "widgetIds": [
    "string"
  ]
}

Responses

200Widgets updated successfully.
Content-Type: application/json
{
  "ok": true,
  "widgetIds": [
    "string"
  ]
}
400Invalid payload or unknown widgets
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X PUT "https://151.115.63.33.sslip.io/api/dashboards/roles/widgets" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d "{
  \"roleId\": \"00000000-0000-4000-8000-000000000000\",
  \"widgetIds\": [
    \"string\"
  ]
}"
GET/dashboards/users/widgets
Auth requireddashboards.admin.assign-widgets

Read widget overrides for a user

Returns the widgets inherited and explicitly configured for the requested user within the current scope. Requires features: dashboards.admin.assign-widgets

Parameters

NameInRequiredSchemaDescription
userIdqueryYesany
tenantIdqueryNoany
organizationIdqueryNoany

Responses

200Widget settings for the user.
Content-Type: application/json
{
  "mode": "inherit",
  "widgetIds": [
    "string"
  ],
  "hasCustom": true,
  "effectiveWidgetIds": [
    "string"
  ],
  "scope": {
    "tenantId": null,
    "organizationId": null
  }
}
400Missing user identifier
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X GET "https://151.115.63.33.sslip.io/api/dashboards/users/widgets?userId=00000000-0000-4000-8000-000000000000" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
PUT/dashboards/users/widgets
Auth requireddashboards.admin.assign-widgets

Update user-specific dashboard widgets

Sets the widget override mode and allowed widgets for a user. Passing `mode: inherit` clears overrides. Requires features: dashboards.admin.assign-widgets

Request body (application/json)

{
  "userId": "00000000-0000-4000-8000-000000000000",
  "mode": "inherit",
  "widgetIds": [
    "string"
  ]
}

Responses

200Overrides saved.
Content-Type: application/json
{
  "ok": true,
  "mode": "inherit",
  "widgetIds": [
    "string"
  ]
}
400Invalid payload or unknown widgets
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X PUT "https://151.115.63.33.sslip.io/api/dashboards/users/widgets" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d "{
  \"userId\": \"00000000-0000-4000-8000-000000000000\",
  \"mode\": \"inherit\",
  \"widgetIds\": [
    \"string\"
  ]
}"
GET/dashboards/widgets/catalog
Auth requireddashboards.admin.assign-widgets

List available dashboard widgets

Returns the catalog of widgets that modules expose, including defaults and feature requirements. Requires features: dashboards.admin.assign-widgets

Responses

200Widgets available for assignment.
Content-Type: application/json
{
  "items": [
    {
      "id": "string",
      "title": "string",
      "description": null,
      "defaultSize": "sm",
      "defaultEnabled": true,
      "defaultSettings": null,
      "features": [
        "string"
      ],
      "moduleId": "string",
      "icon": null,
      "loaderKey": "string",
      "supportsRefresh": true
    }
  ]
}

Example

curl -X GET "https://151.115.63.33.sslip.io/api/dashboards/widgets/catalog" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
POST/dashboards/widgets/data
Auth requiredanalytics.view

Fetch aggregated data for dashboard widgets

Executes an aggregation query against the specified entity type and returns the result. Supports date range filtering, grouping, and period-over-period comparison. Requires features: analytics.view

Request body (application/json)

{
  "entityType": "string",
  "metric": {
    "field": "string",
    "aggregate": "count"
  }
}

Responses

200Aggregated data for the widget.
Content-Type: application/json
{
  "value": null,
  "data": [
    {
      "value": null
    }
  ],
  "metadata": {
    "fetchedAt": "string",
    "recordCount": 1
  }
}
400Invalid request payload
Content-Type: application/json
{
  "error": "string"
}
500Internal server error
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X POST "https://151.115.63.33.sslip.io/api/dashboards/widgets/data" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d "{
  \"entityType\": \"string\",
  \"metric\": {
    \"field\": \"string\",
    \"aggregate\": \"count\"
  }
}"
POST/dashboards/widgets/data/batch
Auth requiredanalytics.view

Fetch aggregated data for multiple dashboard widgets in one request

Resolves a batch of widget data requests with a single authentication, RBAC, organization-scope, and database-context setup. Each request is keyed by an opaque widget id and resolved independently, so a failure in one widget does not fail the batch. Requires features: analytics.view

Request body (application/json)

{
  "requests": [
    {
      "id": "string",
      "request": {
        "entityType": "string",
        "metric": {
          "field": "string",
          "aggregate": "count"
        }
      }
    }
  ]
}

Responses

200Per-widget aggregation results keyed by request id.
Content-Type: application/json
{
  "results": [
    {
      "id": "string",
      "ok": true,
      "data": {
        "value": null,
        "data": [
          {
            "value": null
          }
        ],
        "metadata": {
          "fetchedAt": "string",
          "recordCount": 1
        }
      }
    }
  ]
}
400Invalid request payload
Content-Type: application/json
{
  "error": "string"
}
500Internal server error
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X POST "https://151.115.63.33.sslip.io/api/dashboards/widgets/data/batch" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d "{
  \"requests\": [
    {
      \"id\": \"string\",
      \"request\": {
        \"entityType\": \"string\",
        \"metric\": {
          \"field\": \"string\",
          \"aggregate\": \"count\"
        }
      }
    }
  ]
}"

Directory

Showing 11 of 11 endpoints
GET/directory/organization-branding
Auth requireddirectory.organizations.view

Read sidebar branding for the selected organization

Returns the logo URL used by the backend sidebar for the currently selected organization. Requires features: directory.organizations.view

Responses

200Organization branding
Content-Type: application/json
{
  "organizationId": "00000000-0000-4000-8000-000000000000",
  "organizationName": "string",
  "tenantId": "00000000-0000-4000-8000-000000000000",
  "logoUrl": null
}
400A concrete organization scope is required
Content-Type: application/json
{
  "error": "string"
}
404Organization not found
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X GET "https://151.115.63.33.sslip.io/api/directory/organization-branding" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
PUT/directory/organization-branding
Auth requireddirectory.organizations.manage

Update sidebar branding for the selected organization

Stores an external image URL or an internal attachment image URL as the selected organization logo. Requires features: directory.organizations.manage

Request body (application/json)

{
  "logoUrl": null
}

Responses

200Updated organization branding
Content-Type: application/json
{
  "organizationId": "00000000-0000-4000-8000-000000000000",
  "organizationName": "string",
  "tenantId": "00000000-0000-4000-8000-000000000000",
  "logoUrl": null
}
400Save failed
Content-Type: application/json
{
  "error": "string"
}
422Invalid logo URL
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X PUT "https://151.115.63.33.sslip.io/api/directory/organization-branding" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d "{
  \"logoUrl\": null
}"
GET/directory/organization-switcher
Auth required

Load organization switcher menu

Returns the hierarchical menu of organizations the current user may switch to within the active tenant.

Responses

200Organization switcher payload.
Content-Type: application/json
{
  "items": [
    {
      "id": "00000000-0000-4000-8000-000000000000",
      "name": "string",
      "depth": 1,
      "selectable": true,
      "children": []
    }
  ],
  "selectedId": null,
  "canManage": true,
  "canViewAllOrganizations": true,
  "tenantId": null,
  "tenants": [
    {
      "id": "00000000-0000-4000-8000-000000000000",
      "name": "string",
      "isActive": true
    }
  ],
  "isSuperAdmin": true
}

Example

curl -X GET "https://151.115.63.33.sslip.io/api/directory/organization-switcher" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
GET/directory/organizations
Auth requireddirectory.organizations.view

List organizations

Returns organizations using options, tree, or paginated manage view depending on the `view` parameter. Requires features: directory.organizations.view

Parameters

NameInRequiredSchemaDescription
pagequeryNoany
pageSizequeryNoany
searchqueryNoany
viewqueryNoany
idsqueryNoany
tenantIdqueryNoany
includeInactivequeryNoany
statusqueryNoany

Responses

200Organization data for the requested view.
Content-Type: application/json
{
  "items": [
    {
      "id": "00000000-0000-4000-8000-000000000000",
      "name": "string",
      "parentId": null,
      "parentName": null,
      "tenantId": null,
      "tenantName": null,
      "rootId": null,
      "treePath": null
    }
  ]
}
400Invalid query or tenant scope
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X GET "https://151.115.63.33.sslip.io/api/directory/organizations?page=1&pageSize=50&view=options" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
POST/directory/organizations
Auth requireddirectory.organizations.manage

Create organization

Creates a new organization within a tenant and optionally assigns hierarchy relationships. Requires features: directory.organizations.manage

Request body (application/json)

{
  "name": "string",
  "slug": null,
  "logoUrl": null,
  "parentId": null
}

Responses

201Organization created.
Content-Type: application/json
{
  "id": "00000000-0000-4000-8000-000000000000"
}
400Validation failed
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X POST "https://151.115.63.33.sslip.io/api/directory/organizations" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d "{
  \"name\": \"string\",
  \"slug\": null,
  \"logoUrl\": null,
  \"parentId\": null
}"
PUT/directory/organizations
Auth requireddirectory.organizations.manage

Update organization

Updates organization details and hierarchy assignments. Requires features: directory.organizations.manage

Request body (application/json)

{
  "id": "00000000-0000-4000-8000-000000000000",
  "slug": null,
  "logoUrl": null,
  "parentId": null
}

Responses

200Organization updated.
Content-Type: application/json
{
  "ok": true
}
400Validation failed
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X PUT "https://151.115.63.33.sslip.io/api/directory/organizations" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d "{
  \"id\": \"00000000-0000-4000-8000-000000000000\",
  \"slug\": null,
  \"logoUrl\": null,
  \"parentId\": null
}"
DELETE/directory/organizations
Auth requireddirectory.organizations.manage

Delete organization

Soft deletes an organization identified by id. Requires features: directory.organizations.manage

Request body (application/json)

{
  "id": "00000000-0000-4000-8000-000000000000"
}

Responses

200Organization deleted.
Content-Type: application/json
{
  "ok": true
}
400Validation failed
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X DELETE "https://151.115.63.33.sslip.io/api/directory/organizations" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d "{
  \"id\": \"00000000-0000-4000-8000-000000000000\"
}"
GET/directory/tenants
Auth requireddirectory.tenants.view

List tenants

Returns tenants visible to the current user with optional search and pagination. Requires features: directory.tenants.view

Parameters

NameInRequiredSchemaDescription
idqueryNoany
pagequeryNoany
pageSizequeryNoany
searchqueryNoany
sortFieldqueryNoany
sortDirqueryNoany
isActivequeryNoany

Responses

200Paged list of tenants.
Content-Type: application/json
{
  "items": [
    {
      "id": "00000000-0000-4000-8000-000000000000",
      "name": "string",
      "isActive": true,
      "createdAt": null,
      "updatedAt": null
    }
  ],
  "total": 1,
  "page": 1,
  "pageSize": 1,
  "totalPages": 1
}
400Invalid query parameters
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X GET "https://151.115.63.33.sslip.io/api/directory/tenants?page=1&pageSize=50" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
POST/directory/tenants
Auth requireddirectory.tenants.manage

Create tenant

Creates a new tenant and returns its identifier. Requires features: directory.tenants.manage

Request body (application/json)

{
  "name": "string"
}

Responses

201Tenant created.
Content-Type: application/json
{
  "id": "00000000-0000-4000-8000-000000000000"
}
400Validation failed
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X POST "https://151.115.63.33.sslip.io/api/directory/tenants" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d "{
  \"name\": \"string\"
}"
PUT/directory/tenants
Auth requireddirectory.tenants.manage

Update tenant

Updates tenant properties such as name or activation state. Requires features: directory.tenants.manage

Request body (application/json)

{
  "id": "00000000-0000-4000-8000-000000000000"
}

Responses

200Tenant updated.
Content-Type: application/json
{
  "ok": true
}
400Validation failed
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X PUT "https://151.115.63.33.sslip.io/api/directory/tenants" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d "{
  \"id\": \"00000000-0000-4000-8000-000000000000\"
}"
DELETE/directory/tenants
Auth requireddirectory.tenants.manage

Delete tenant

Soft deletes the tenant identified by id. Requires features: directory.tenants.manage

Request body (application/json)

{
  "id": "00000000-0000-4000-8000-000000000000"
}

Responses

200Tenant removed.
Content-Type: application/json
{
  "ok": true
}
400Validation failed
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X DELETE "https://151.115.63.33.sslip.io/api/directory/tenants" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d "{
  \"id\": \"00000000-0000-4000-8000-000000000000\"
}"

Dunning

Showing 16 of 16 endpoints
GET/dunning/cases
Auth requireddunning.view

List dunning cases

Returns a paginated collection of dunning cases scoped to the authenticated organization. Requires features: dunning.view

Parameters

NameInRequiredSchemaDescription
statusqueryNoany
customerIdqueryNoany
invoiceIdqueryNoany
pagequeryNoany
pageSizequeryNoany
sortqueryNoany
orderqueryNoany
idsqueryNoanyComma-separated list of record UUIDs to filter by (max 200).

Responses

200Paginated dunning cases
Content-Type: application/json
{
  "items": [
    {
      "id": "00000000-0000-4000-8000-000000000000",
      "receivableId": "00000000-0000-4000-8000-000000000000",
      "invoiceId": "00000000-0000-4000-8000-000000000000",
      "billingAccountId": "00000000-0000-4000-8000-000000000000",
      "customerId": "00000000-0000-4000-8000-000000000000",
      "status": "string",
      "amount": "string",
      "paidAmount": "string",
      "currency": "string",
      "dueDate": "string",
      "detectedAt": "string",
      "version": 1,
      "createdAt": "string",
      "updatedAt": "string"
    }
  ],
  "total": 1,
  "totalPages": 1
}

Example

curl -X GET "https://151.115.63.33.sslip.io/api/dunning/cases?page=1&pageSize=20&sort=createdAt&order=desc" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
POST/dunning/cases
Auth requireddunning.manage

Create dunningcase

Open a new dunning case for an overdue receivable. Requires features: dunning.manage

Request body (application/json)

{
  "receivableId": "00000000-0000-4000-8000-000000000000",
  "invoiceId": "00000000-0000-4000-8000-000000000000",
  "billingAccountId": "00000000-0000-4000-8000-000000000000",
  "customerId": "00000000-0000-4000-8000-000000000000",
  "amount": "string",
  "paidAmount": "0",
  "currency": "PLN",
  "dueDate": "string",
  "detectedAt": "string",
  "policyId": null,
  "notes": null
}

Responses

201DunningCase created
Content-Type: application/json
{
  "id": null
}

Example

curl -X POST "https://151.115.63.33.sslip.io/api/dunning/cases" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d "{
  \"receivableId\": \"00000000-0000-4000-8000-000000000000\",
  \"invoiceId\": \"00000000-0000-4000-8000-000000000000\",
  \"billingAccountId\": \"00000000-0000-4000-8000-000000000000\",
  \"customerId\": \"00000000-0000-4000-8000-000000000000\",
  \"amount\": \"string\",
  \"paidAmount\": \"0\",
  \"currency\": \"PLN\",
  \"dueDate\": \"string\",
  \"detectedAt\": \"string\",
  \"policyId\": null,
  \"notes\": null
}"
PUT/dunning/cases
Auth requireddunning.manage

Update dunningcase

Updates an existing dunningcase by id. Requires features: dunning.manage

Request body (application/json)

{
  "policyId": null,
  "currentLevelId": null,
  "workflowTaskId": null,
  "notes": null,
  "closedReason": null
}

Responses

200DunningCase updated
Content-Type: application/json
{
  "ok": true
}

Example

curl -X PUT "https://151.115.63.33.sslip.io/api/dunning/cases" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d "{
  \"policyId\": null,
  \"currentLevelId\": null,
  \"workflowTaskId\": null,
  \"notes\": null,
  \"closedReason\": null
}"
DELETE/dunning/cases
Auth requireddunning.manage

Delete dunningcase

Deletes a dunningcase identified by id. Requires features: dunning.manage

Responses

200DunningCase deleted
Content-Type: application/json
{
  "ok": true
}

Example

curl -X DELETE "https://151.115.63.33.sslip.io/api/dunning/cases" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
GET/dunning/letters
Auth requireddunning.view

List dunning letters

Returns a paginated collection of dunning letters scoped to the authenticated organization. Requires features: dunning.view

Parameters

NameInRequiredSchemaDescription
caseIdqueryNoany
statusqueryNoany
pagequeryNoany
pageSizequeryNoany
idsqueryNoanyComma-separated list of record UUIDs to filter by (max 200).

Responses

200Paginated dunning letters
Content-Type: application/json
{
  "items": [
    {
      "id": "00000000-0000-4000-8000-000000000000",
      "caseId": "00000000-0000-4000-8000-000000000000",
      "stepId": null,
      "status": "string",
      "channel": null,
      "amount": "string",
      "currency": "string",
      "sentAt": null,
      "version": 1,
      "createdAt": "string",
      "updatedAt": "string"
    }
  ],
  "total": 1,
  "totalPages": 1
}

Example

curl -X GET "https://151.115.63.33.sslip.io/api/dunning/letters?page=1&pageSize=20" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
POST/dunning/letters
Auth requireddunning.manage

Create dunningletter

Generate a dunning letter for a case. PII fields encrypted at rest. Requires features: dunning.manage

Request body (application/json)

{
  "caseId": "00000000-0000-4000-8000-000000000000",
  "stepId": null,
  "templateId": null,
  "channel": null,
  "recipientName": null,
  "recipientAddress": null,
  "contactEmail": null,
  "contactPhone": null,
  "amount": "string",
  "currency": "PLN"
}

Responses

201DunningLetter created
Content-Type: application/json
{
  "id": null
}

Example

curl -X POST "https://151.115.63.33.sslip.io/api/dunning/letters" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d "{
  \"caseId\": \"00000000-0000-4000-8000-000000000000\",
  \"stepId\": null,
  \"templateId\": null,
  \"channel\": null,
  \"recipientName\": null,
  \"recipientAddress\": null,
  \"contactEmail\": null,
  \"contactPhone\": null,
  \"amount\": \"string\",
  \"currency\": \"PLN\"
}"
PUT/dunning/letters
Auth requireddunning.manage

Update dunningletter

Updates an existing dunningletter by id. Requires features: dunning.manage

Request body (application/json)

{
  "pdfStorageKey": null,
  "sentAt": null,
  "confirmedAt": null,
  "errorDetail": null
}

Responses

200DunningLetter updated
Content-Type: application/json
{
  "ok": true
}

Example

curl -X PUT "https://151.115.63.33.sslip.io/api/dunning/letters" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d "{
  \"pdfStorageKey\": null,
  \"sentAt\": null,
  \"confirmedAt\": null,
  \"errorDetail\": null
}"
DELETE/dunning/letters
Auth requireddunning.manage

Delete dunningletter

Deletes a dunningletter identified by id. Requires features: dunning.manage

Responses

200DunningLetter deleted
Content-Type: application/json
{
  "ok": true
}

Example

curl -X DELETE "https://151.115.63.33.sslip.io/api/dunning/letters" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
GET/dunning/levels
Auth requireddunning.view

List dunning levels

Returns a paginated collection of dunning levels scoped to the authenticated organization. Requires features: dunning.view

Parameters

NameInRequiredSchemaDescription
policyIdqueryNoany
pagequeryNoany
pageSizequeryNoany
idsqueryNoanyComma-separated list of record UUIDs to filter by (max 200).

Responses

200Paginated dunning levels
Content-Type: application/json
{
  "items": [
    {
      "id": "00000000-0000-4000-8000-000000000000",
      "policyId": "00000000-0000-4000-8000-000000000000",
      "levelNumber": 1,
      "label": "string",
      "triggerDays": 1,
      "autoEscalate": true,
      "version": 1,
      "createdAt": "string",
      "updatedAt": "string"
    }
  ],
  "total": 1,
  "totalPages": 1
}

Example

curl -X GET "https://151.115.63.33.sslip.io/api/dunning/levels?page=1&pageSize=50" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
POST/dunning/levels
Auth requireddunning.policy_manage

Create dunninglevel

Add an escalation level to a dunning policy. Requires features: dunning.policy_manage

Request body (application/json)

{
  "policyId": "00000000-0000-4000-8000-000000000000",
  "levelNumber": 1,
  "label": "string",
  "description": null,
  "triggerDays": 1,
  "autoEscalate": false
}

Responses

201DunningLevel created
Content-Type: application/json
{
  "id": null
}

Example

curl -X POST "https://151.115.63.33.sslip.io/api/dunning/levels" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d "{
  \"policyId\": \"00000000-0000-4000-8000-000000000000\",
  \"levelNumber\": 1,
  \"label\": \"string\",
  \"description\": null,
  \"triggerDays\": 1,
  \"autoEscalate\": false
}"
PUT/dunning/levels
Auth requireddunning.policy_manage

Update dunninglevel

Updates an existing dunninglevel by id. Requires features: dunning.policy_manage

Request body (application/json)

{
  "description": null
}

Responses

200DunningLevel updated
Content-Type: application/json
{
  "ok": true
}

Example

curl -X PUT "https://151.115.63.33.sslip.io/api/dunning/levels" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d "{
  \"description\": null
}"
DELETE/dunning/levels
Auth requireddunning.policy_manage

Delete dunninglevel

Deletes a dunninglevel identified by id. Requires features: dunning.policy_manage

Responses

200DunningLevel deleted
Content-Type: application/json
{
  "ok": true
}

Example

curl -X DELETE "https://151.115.63.33.sslip.io/api/dunning/levels" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
GET/dunning/policies
Auth requireddunning.view

List dunning policies

Returns a paginated collection of dunning policies scoped to the authenticated organization. Requires features: dunning.view

Parameters

NameInRequiredSchemaDescription
pagequeryNoany
pageSizequeryNoany
isActivequeryNoany
idsqueryNoanyComma-separated list of record UUIDs to filter by (max 200).

Responses

200Paginated dunning policies
Content-Type: application/json
{
  "items": [
    {
      "id": "00000000-0000-4000-8000-000000000000",
      "name": "string",
      "description": null,
      "segment": null,
      "isActive": true,
      "maxDaysOverdue": null,
      "version": 1,
      "createdAt": "string",
      "updatedAt": "string"
    }
  ],
  "total": 1,
  "totalPages": 1
}

Example

curl -X GET "https://151.115.63.33.sslip.io/api/dunning/policies?page=1&pageSize=20" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
POST/dunning/policies
Auth requireddunning.policy_manage

Create dunningpolicy

Create a dunning escalation policy. Requires features: dunning.policy_manage

Request body (application/json)

{
  "name": "string",
  "description": null,
  "segment": null,
  "isActive": true,
  "maxDaysOverdue": null
}

Responses

201DunningPolicy created
Content-Type: application/json
{
  "id": null
}

Example

curl -X POST "https://151.115.63.33.sslip.io/api/dunning/policies" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d "{
  \"name\": \"string\",
  \"description\": null,
  \"segment\": null,
  \"isActive\": true,
  \"maxDaysOverdue\": null
}"
PUT/dunning/policies
Auth requireddunning.policy_manage

Update dunningpolicy

Updates an existing dunningpolicy by id. Requires features: dunning.policy_manage

Request body (application/json)

{
  "description": null,
  "segment": null,
  "maxDaysOverdue": null
}

Responses

200DunningPolicy updated
Content-Type: application/json
{
  "ok": true
}

Example

curl -X PUT "https://151.115.63.33.sslip.io/api/dunning/policies" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d "{
  \"description\": null,
  \"segment\": null,
  \"maxDaysOverdue\": null
}"
DELETE/dunning/policies
Auth requireddunning.policy_manage

Delete dunningpolicy

Deletes a dunningpolicy identified by id. Requires features: dunning.policy_manage

Responses

200DunningPolicy deleted
Content-Type: application/json
{
  "ok": true
}

Example

curl -X DELETE "https://151.115.63.33.sslip.io/api/dunning/policies" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"

Entities

Showing 17 of 17 endpoints
GET/entities/definitions
Auth required

List active custom field definitions

Returns active custom field definitions for the supplied entity ids, respecting tenant scope and tombstones.

Parameters

NameInRequiredSchemaDescription
entityIdqueryNoany
entityIdsqueryNoany
fieldsetqueryNoany

Responses

200Definition list
Content-Type: application/json
{
  "items": [
    {
      "key": "string",
      "kind": "string",
      "label": "string",
      "entityId": "string"
    }
  ]
}
400Missing entity id
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X GET "https://151.115.63.33.sslip.io/api/entities/definitions" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
POST/entities/definitions
Auth requiredentities.definitions.manage

Upsert custom field definition

Creates or updates a custom field definition for the current tenant/org scope. Requires features: entities.definitions.manage

Request body (application/json)

{
  "entityId": "string",
  "key": "string",
  "kind": "text"
}

Responses

200Definition saved
Content-Type: application/json
{
  "ok": true,
  "item": {
    "id": "00000000-0000-4000-8000-000000000000",
    "key": "string",
    "kind": "string",
    "configJson": {}
  }
}
400Validation failed
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X POST "https://151.115.63.33.sslip.io/api/entities/definitions" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d "{
  \"entityId\": \"string\",
  \"key\": \"string\",
  \"kind\": \"text\"
}"
DELETE/entities/definitions
Auth requiredentities.definitions.manage

Soft delete custom field definition

Marks the specified definition inactive and tombstones it for the current scope. Requires features: entities.definitions.manage

Request body (application/json)

{
  "entityId": "string",
  "key": "string"
}

Responses

200Definition deleted
Content-Type: application/json
{
  "ok": true
}
400Missing entity id or key
Content-Type: application/json
{
  "error": "string"
}
404Definition not found
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X DELETE "https://151.115.63.33.sslip.io/api/entities/definitions" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d "{
  \"entityId\": \"string\",
  \"key\": \"string\"
}"
POST/entities/definitions.batch
Auth requiredentities.definitions.manage

Save multiple custom field definitions

Creates or updates multiple definitions for a single entity in one transaction. Requires features: entities.definitions.manage

Request body (application/json)

{
  "entityId": "string",
  "definitions": [
    {
      "key": "string",
      "kind": "text"
    }
  ]
}

Responses

200Definitions saved
Content-Type: application/json
{
  "ok": true
}
400Validation error
Content-Type: application/json
{
  "error": "string"
}
500Unexpected failure
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X POST "https://151.115.63.33.sslip.io/api/entities/definitions.batch" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d "{
  \"entityId\": \"string\",
  \"definitions\": [
    {
      \"key\": \"string\",
      \"kind\": \"text\"
    }
  ]
}"
GET/entities/definitions.manage
Auth requiredentities.definitions.manage

Get management snapshot

Returns scoped custom field definitions (including inactive tombstones) for administration interfaces. Requires features: entities.definitions.manage

Parameters

NameInRequiredSchemaDescription
entityIdqueryYesany

Responses

200Scoped definitions and deleted keys
Content-Type: application/json
{
  "items": [
    {
      "id": "00000000-0000-4000-8000-000000000000",
      "key": "string",
      "kind": "string",
      "configJson": null,
      "organizationId": null,
      "tenantId": null
    }
  ],
  "deletedKeys": [
    "string"
  ]
}
400Missing entity id
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X GET "https://151.115.63.33.sslip.io/api/entities/definitions.manage?entityId=string" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
POST/entities/definitions.restore
Auth requiredentities.definitions.manage

Restore definition

Reactivates a previously soft-deleted definition within the current tenant/org scope. Requires features: entities.definitions.manage

Request body (application/json)

{
  "entityId": "string",
  "key": "string"
}

Responses

200Definition restored
Content-Type: application/json
{
  "ok": true
}
400Missing entity id or key
Content-Type: application/json
{
  "error": "string"
}
404Definition not found
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X POST "https://151.115.63.33.sslip.io/api/entities/definitions.restore" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d "{
  \"entityId\": \"string\",
  \"key\": \"string\"
}"
GET/entities/encryption
Auth requiredentities.definitions.manage

Fetch encryption map

Returns the encrypted field map for the current tenant/organization scope. Requires features: entities.definitions.manage

Parameters

NameInRequiredSchemaDescription
entityIdqueryYesany

Responses

200Map
Content-Type: application/json
{
  "entityId": "string",
  "fields": [
    {
      "field": "string",
      "hashField": null
    }
  ]
}

Example

curl -X GET "https://151.115.63.33.sslip.io/api/entities/encryption?entityId=string" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
POST/entities/encryption
Auth requiredentities.definitions.manage

Upsert encryption map

Creates or updates the encryption map for the current tenant/organization scope. Requires features: entities.definitions.manage

Request body (application/json)

{
  "entityId": "string",
  "tenantId": null,
  "organizationId": null,
  "fields": [
    {
      "field": "string",
      "hashField": null
    }
  ]
}

Responses

200Saved
Content-Type: application/json
{
  "ok": true
}

Example

curl -X POST "https://151.115.63.33.sslip.io/api/entities/encryption" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d "{
  \"entityId\": \"string\",
  \"tenantId\": null,
  \"organizationId\": null,
  \"fields\": [
    {
      \"field\": \"string\",
      \"hashField\": null
    }
  ]
}"
GET/entities/entities
Auth required

List available entities

Returns generated and custom entities scoped to the caller with field counts per entity.

Responses

200List of entities
Content-Type: application/json
{
  "items": [
    {
      "entityId": "string",
      "source": "code",
      "label": "string",
      "count": 1
    }
  ]
}

Example

curl -X GET "https://151.115.63.33.sslip.io/api/entities/entities" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
POST/entities/entities
Auth requiredentities.definitions.manage

Upsert custom entity

Creates or updates a tenant/org scoped custom entity definition. Requires features: entities.definitions.manage

Request body (application/json)

{
  "entityId": "string",
  "label": "string",
  "description": null,
  "showInSidebar": false
}

Responses

200Entity saved
Content-Type: application/json
{
  "ok": true,
  "item": {
    "id": "00000000-0000-4000-8000-000000000000",
    "entityId": "string",
    "label": "string"
  }
}
400Validation error
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X POST "https://151.115.63.33.sslip.io/api/entities/entities" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d "{
  \"entityId\": \"string\",
  \"label\": \"string\",
  \"description\": null,
  \"showInSidebar\": false
}"
DELETE/entities/entities
Auth requiredentities.definitions.manage

Soft delete custom entity

Marks the specified custom entity inactive within the current scope. Requires features: entities.definitions.manage

Request body (application/json)

{
  "entityId": "string"
}

Responses

200Entity deleted
Content-Type: application/json
{
  "ok": true
}
400Missing entity id
Content-Type: application/json
{
  "error": "string"
}
404Entity not found in scope
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X DELETE "https://151.115.63.33.sslip.io/api/entities/entities" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d "{
  \"entityId\": \"string\"
}"
GET/entities/records
Auth requiredentities.records.view

List records

Returns paginated records for the supplied entity. Supports custom field filters, exports, and soft-delete toggles. Requires features: entities.records.view

Parameters

NameInRequiredSchemaDescription
entityIdqueryYesany
pagequeryNoany
pageSizequeryNoany
sortFieldqueryNoany
sortDirqueryNoany
withDeletedqueryNoany
formatqueryNoany
exportScopequeryNoany
export_scopequeryNoany
allqueryNoany
fullqueryNoany

Responses

200Paginated records
Content-Type: application/json
{
  "items": [
    {}
  ],
  "total": 1,
  "page": 1,
  "pageSize": 1,
  "totalPages": 1
}
400Missing entity id
Content-Type: application/json
{
  "error": "string"
}
500Unexpected failure
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X GET "https://151.115.63.33.sslip.io/api/entities/records?entityId=string" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
POST/entities/records
Auth requiredentities.records.manage

Create record

Creates a record for the given entity. When `recordId` is omitted or not a UUID the data engine will generate one automatically. Requires features: entities.records.manage

Request body (application/json)

{
  "entityId": "string",
  "values": {}
}

Responses

200Record created
Content-Type: application/json
{
  "ok": true
}
400Validation failure
Content-Type: application/json
{
  "error": "string"
}
500Unexpected failure
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X POST "https://151.115.63.33.sslip.io/api/entities/records" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d "{
  \"entityId\": \"string\",
  \"values\": {}
}"
PUT/entities/records
Auth requiredentities.records.manage

Update record

Updates an existing record. If the provided recordId is not a UUID the record will be created instead to support optimistic flows. Requires features: entities.records.manage

Request body (application/json)

{
  "entityId": "string",
  "recordId": "string",
  "values": {}
}

Responses

200Record updated
Content-Type: application/json
{
  "ok": true
}
400Validation failure
Content-Type: application/json
{
  "error": "string"
}
500Unexpected failure
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X PUT "https://151.115.63.33.sslip.io/api/entities/records" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d "{
  \"entityId\": \"string\",
  \"recordId\": \"string\",
  \"values\": {}
}"
DELETE/entities/records
Auth requiredentities.records.manage

Delete record

Soft deletes the specified record within the current tenant/org scope. Requires features: entities.records.manage

Request body (application/json)

{
  "entityId": "string",
  "recordId": "string"
}

Responses

200Record deleted
Content-Type: application/json
{
  "ok": true
}
400Missing entity id or record id
Content-Type: application/json
{
  "error": "string"
}
404Record not found
Content-Type: application/json
{
  "error": "string"
}
500Unexpected failure
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X DELETE "https://151.115.63.33.sslip.io/api/entities/records" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d "{
  \"entityId\": \"string\",
  \"recordId\": \"string\"
}"
GET/entities/relations/options
Auth requiredentities.definitions.view

List relation options

Returns up to 200 option entries for populating relation dropdowns, automatically resolving label fields when omitted. Requires features: entities.definitions.view

Parameters

NameInRequiredSchemaDescription
entityIdqueryYesany
labelFieldqueryNoany
qqueryNoany
idsqueryNoany
routeContextFieldsqueryNoany

Responses

200Option list
Content-Type: application/json
{
  "items": [
    {
      "value": "string",
      "label": "string"
    }
  ]
}

Example

curl -X GET "https://151.115.63.33.sslip.io/api/entities/relations/options?entityId=string" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
GET/entities/sidebar-entities
Auth required

Get sidebar entities

Returns custom entities flagged with `showInSidebar` for the current tenant/org scope.

Responses

200Sidebar entities for navigation
Content-Type: application/json
{
  "items": [
    {
      "entityId": "string",
      "label": "string",
      "href": "string"
    }
  ]
}

Example

curl -X GET "https://151.115.63.33.sslip.io/api/entities/sidebar-entities" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"

Payments

Showing 5 of 5 endpoints
GET/payments/allocations
Auth requiredpayments.view

List paymentallocations

Returns a paginated collection of paymentallocations scoped to the authenticated organization. Requires features: payments.view

Parameters

NameInRequiredSchemaDescription
paymentIdqueryNoany
invoiceIdqueryNoany
receivableIdqueryNoany
kindqueryNoany
pagequeryNoany
pageSizequeryNoany
idsqueryNoanyComma-separated list of record UUIDs to filter by (max 200).

Responses

200Paginated paymentallocations
Content-Type: application/json
{
  "items": [
    {
      "id": "00000000-0000-4000-8000-000000000000",
      "paymentId": "00000000-0000-4000-8000-000000000000",
      "invoiceId": "00000000-0000-4000-8000-000000000000",
      "receivableId": "00000000-0000-4000-8000-000000000000",
      "allocatedAmount": "string",
      "kind": "string",
      "allocatedAt": "string",
      "version": 1,
      "createdAt": "string",
      "updatedAt": "string"
    }
  ],
  "total": 1,
  "totalPages": 1
}

Example

curl -X GET "https://151.115.63.33.sslip.io/api/payments/allocations" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
GET/payments/payments
Auth requiredpayments.view

List payments

Returns a paginated collection of payments scoped to the authenticated organization. Requires features: payments.view

Parameters

NameInRequiredSchemaDescription
customerIdqueryNoany
contractIdqueryNoany
ppgIdqueryNoany
statusqueryNoany
sourcequeryNoany
unmatchedqueryNoany
paidAtFromqueryNoany
paidAtToqueryNoany
pagequeryNoany
pageSizequeryNoany
sortqueryNoany
orderqueryNoany
idsqueryNoanyComma-separated list of record UUIDs to filter by (max 200).

Responses

200Paginated payments
Content-Type: application/json
{
  "items": [
    {
      "id": "00000000-0000-4000-8000-000000000000",
      "businessKey": "string",
      "status": "string",
      "source": "string",
      "customerId": null,
      "contractId": null,
      "amount": "string",
      "currency": "string",
      "paidAt": "string",
      "version": 1,
      "createdAt": "string",
      "updatedAt": "string"
    }
  ],
  "total": 1,
  "totalPages": 1
}

Example

curl -X GET "https://151.115.63.33.sslip.io/api/payments/payments" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
GET/payments/statements
Auth requiredpayments.view

List bankstatements

Returns a paginated collection of bankstatements scoped to the authenticated organization. Requires features: payments.view

Parameters

NameInRequiredSchemaDescription
statusqueryNoany
periodFromqueryNoany
periodToqueryNoany
pagequeryNoany
pageSizequeryNoany
idsqueryNoanyComma-separated list of record UUIDs to filter by (max 200).

Responses

200Paginated bankstatements
Content-Type: application/json
{
  "items": [
    {
      "id": "00000000-0000-4000-8000-000000000000",
      "businessKey": "string",
      "statementRef": "string",
      "status": "string",
      "importedAt": "string",
      "currency": "string",
      "version": 1,
      "createdAt": "string",
      "updatedAt": "string"
    }
  ],
  "total": 1,
  "totalPages": 1
}

Example

curl -X GET "https://151.115.63.33.sslip.io/api/payments/statements" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
GET/payments/virtual-accounts
Auth requiredpayments.view

List virtualbankaccounts

Returns a paginated collection of virtualbankaccounts scoped to the authenticated organization. Requires features: payments.view

Parameters

NameInRequiredSchemaDescription
customerIdqueryNoany
contractIdqueryNoany
isActivequeryNoany
pagequeryNoany
pageSizequeryNoany
idsqueryNoanyComma-separated list of record UUIDs to filter by (max 200).

Responses

200Paginated virtualbankaccounts
Content-Type: application/json
{
  "items": [
    {
      "id": "00000000-0000-4000-8000-000000000000",
      "customerId": "00000000-0000-4000-8000-000000000000",
      "contractId": null,
      "label": null,
      "isActive": true,
      "createdAt": "string",
      "updatedAt": "string"
    }
  ],
  "total": 1,
  "totalPages": 1
}

Example

curl -X GET "https://151.115.63.33.sslip.io/api/payments/virtual-accounts" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
POST/payments/virtual-accounts
Auth requiredpayments.manage

Create virtualbankaccount

Create a virtual bank account for a customer/contract. Requires features: payments.manage

Request body (application/json)

{
  "customerId": "00000000-0000-4000-8000-000000000000",
  "accountNumber": "string"
}

Responses

201VirtualBankAccount created
Content-Type: application/json
{
  "id": null
}

Example

curl -X POST "https://151.115.63.33.sslip.io/api/payments/virtual-accounts" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d "{
  \"customerId\": \"00000000-0000-4000-8000-000000000000\",
  \"accountNumber\": \"string\"
}"

Query Index

Showing 3 of 3 endpoints
POST/query_index/purge
Auth requiredquery_index.purge

Purge query index records

Queues a purge job to remove indexed records for an entity type within the active scope. Requires features: query_index.purge

Request body (application/json)

{
  "entityType": "string"
}

Responses

200Purge job accepted.
Content-Type: application/json
{
  "ok": true
}
400Missing entity type
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X POST "https://151.115.63.33.sslip.io/api/query_index/purge" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d "{
  \"entityType\": \"string\"
}"
POST/query_index/reindex
Auth requiredquery_index.reindex

Trigger query index rebuild

Queues a reindex job for the specified entity type within the current tenant scope. Requires features: query_index.reindex

Request body (application/json)

{
  "entityType": "string"
}

Responses

200Reindex job accepted.
Content-Type: application/json
{
  "ok": true
}
400Missing entity type
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X POST "https://151.115.63.33.sslip.io/api/query_index/reindex" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d "{
  \"entityType\": \"string\"
}"
GET/query_index/status
Auth requiredquery_index.status.view

Inspect query index coverage

Returns entity counts comparing base tables with the query index along with the latest job status. Requires features: query_index.status.view

Responses

200Current query index status.
Content-Type: application/json
{
  "items": [
    {
      "entityId": "string",
      "label": "string",
      "baseCount": null,
      "indexCount": null,
      "vectorCount": null,
      "ok": true,
      "job": {
        "status": "idle",
        "startedAt": null,
        "finishedAt": null,
        "heartbeatAt": null,
        "processedCount": null,
        "totalCount": null,
        "scope": null
      }
    }
  ],
  "errors": [
    {
      "id": "string",
      "source": "string",
      "handler": "string",
      "entityType": null,
      "recordId": null,
      "tenantId": null,
      "organizationId": null,
      "message": "string",
      "stack": null,
      "payload": null,
      "occurredAt": "string"
    }
  ],
  "logs": [
    {
      "id": "string",
      "source": "string",
      "handler": "string",
      "level": "info",
      "entityType": null,
      "recordId": null,
      "tenantId": null,
      "organizationId": null,
      "message": "string",
      "details": null,
      "occurredAt": "string"
    }
  ]
}
400Tenant or organization context required
Content-Type: application/json
{
  "error": "string"
}

Example

curl -X GET "https://151.115.63.33.sslip.io/api/query_index/status" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"

Switching

Showing 10 of 10 endpoints
GET/switching/cases
Auth requiredswitching.view

List switching cases

Returns a paginated collection of switching cases scoped to the authenticated organization. Requires features: switching.view

Parameters

NameInRequiredSchemaDescription
pagequeryNoany
pageSizequeryNoany
ppgIdqueryNoany
contractIdqueryNoany
customerIdqueryNoany
statusqueryNoany
packageIdqueryNoany
sortFieldqueryNoany
sortDirqueryNoany
idsqueryNoanyComma-separated list of record UUIDs to filter by (max 200).

Responses

200Paginated switching cases
Content-Type: application/json
{
  "items": [
    {
      "id": "00000000-0000-4000-8000-000000000000",
      "businessKey": "string",
      "ppgId": "00000000-0000-4000-8000-000000000000",
      "contractId": "00000000-0000-4000-8000-000000000000",
      "customerId": "00000000-0000-4000-8000-000000000000",
      "packageId": null,
      "status": "string",
      "plannedChangeDate": "string",
      "effectiveChangeDate": null,
      "version": 1,
      "createdAt": "string",
      "updatedAt": "string"
    }
  ],
  "total": 1,
  "totalPages": 1
}

Example

curl -X GET "https://151.115.63.33.sslip.io/api/switching/cases?page=1&pageSize=50" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
POST/switching/cases
Auth requiredswitching.manage

Create switching case

Create a draft switching case (SWITCHING_ROBOCZY). Requires features: switching.manage

Request body (application/json)

{
  "ppgId": "00000000-0000-4000-8000-000000000000",
  "contractId": "00000000-0000-4000-8000-000000000000",
  "customerId": "00000000-0000-4000-8000-000000000000",
  "packageId": null,
  "poaId": "00000000-0000-4000-8000-000000000000",
  "previousSupplierId": "00000000-0000-4000-8000-000000000000",
  "osdId": "00000000-0000-4000-8000-000000000000",
  "plannedChangeDate": "string",
  "validFrom": "string",
  "validTo": null,
  "sourceSystem": null,
  "owner": null,
  "status": "SWITCHING_ROBOCZY"
}

Responses

201Switching Case created
Content-Type: application/json
{
  "id": null
}

Example

curl -X POST "https://151.115.63.33.sslip.io/api/switching/cases" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d "{
  \"ppgId\": \"00000000-0000-4000-8000-000000000000\",
  \"contractId\": \"00000000-0000-4000-8000-000000000000\",
  \"customerId\": \"00000000-0000-4000-8000-000000000000\",
  \"packageId\": null,
  \"poaId\": \"00000000-0000-4000-8000-000000000000\",
  \"previousSupplierId\": \"00000000-0000-4000-8000-000000000000\",
  \"osdId\": \"00000000-0000-4000-8000-000000000000\",
  \"plannedChangeDate\": \"string\",
  \"validFrom\": \"string\",
  \"validTo\": null,
  \"sourceSystem\": null,
  \"owner\": null,
  \"status\": \"SWITCHING_ROBOCZY\"
}"
PUT/switching/cases
Auth requiredswitching.manage

Update switching case

Updates an existing switching case by id. Requires features: switching.manage

Request body (application/json)

{
  "packageId": null,
  "validTo": null,
  "sourceSystem": null,
  "owner": null,
  "status": "SWITCHING_ROBOCZY",
  "id": "00000000-0000-4000-8000-000000000000"
}

Responses

200Switching Case updated
Content-Type: application/json
{
  "ok": true
}

Example

curl -X PUT "https://151.115.63.33.sslip.io/api/switching/cases" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d "{
  \"packageId\": null,
  \"validTo\": null,
  \"sourceSystem\": null,
  \"owner\": null,
  \"status\": \"SWITCHING_ROBOCZY\",
  \"id\": \"00000000-0000-4000-8000-000000000000\"
}"
DELETE/switching/cases
Auth requiredswitching.manage

Delete switching case

Deletes a switching case identified by id. Requires features: switching.manage

Responses

200Switching Case deleted
Content-Type: application/json
{
  "ok": true
}

Example

curl -X DELETE "https://151.115.63.33.sslip.io/api/switching/cases" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
GET/switching/packages
Auth requiredswitching.view

List switching packages

Returns a paginated collection of switching packages scoped to the authenticated organization. Requires features: switching.view

Parameters

NameInRequiredSchemaDescription
pagequeryNoany
pageSizequeryNoany
contractIdqueryNoany
statusqueryNoany
sortFieldqueryNoany
sortDirqueryNoany
idsqueryNoanyComma-separated list of record UUIDs to filter by (max 200).

Responses

200Paginated switching packages
Content-Type: application/json
{
  "items": [
    {
      "id": "00000000-0000-4000-8000-000000000000",
      "businessKey": "string",
      "contractId": "00000000-0000-4000-8000-000000000000",
      "status": "string",
      "totalPpgCount": 1,
      "acceptedPpgCount": 1,
      "rejectedPpgCount": 1,
      "version": 1,
      "createdAt": "string",
      "updatedAt": "string"
    }
  ],
  "total": 1,
  "totalPages": 1
}

Example

curl -X GET "https://151.115.63.33.sslip.io/api/switching/packages?page=1&pageSize=50" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
POST/switching/packages
Auth requiredswitching.manage

Create switching package

Create a switching package (4J multi-PPG batch). Requires features: switching.manage

Request body (application/json)

{
  "contractId": "00000000-0000-4000-8000-000000000000",
  "customerId": "00000000-0000-4000-8000-000000000000",
  "osdId": "00000000-0000-4000-8000-000000000000",
  "poaId": "00000000-0000-4000-8000-000000000000",
  "validFrom": "string",
  "validTo": null,
  "sourceSystem": null,
  "owner": null,
  "status": "PAKIET_ROBOCZY"
}

Responses

201Switching Package created
Content-Type: application/json
{
  "id": null
}

Example

curl -X POST "https://151.115.63.33.sslip.io/api/switching/packages" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d "{
  \"contractId\": \"00000000-0000-4000-8000-000000000000\",
  \"customerId\": \"00000000-0000-4000-8000-000000000000\",
  \"osdId\": \"00000000-0000-4000-8000-000000000000\",
  \"poaId\": \"00000000-0000-4000-8000-000000000000\",
  \"validFrom\": \"string\",
  \"validTo\": null,
  \"sourceSystem\": null,
  \"owner\": null,
  \"status\": \"PAKIET_ROBOCZY\"
}"
PUT/switching/packages
Auth requiredswitching.manage

Update switching package

Updates an existing switching package by id. Requires features: switching.manage

Request body (application/json)

{
  "validTo": null,
  "sourceSystem": null,
  "owner": null,
  "status": "PAKIET_ROBOCZY",
  "id": "00000000-0000-4000-8000-000000000000"
}

Responses

200Switching Package updated
Content-Type: application/json
{
  "ok": true
}

Example

curl -X PUT "https://151.115.63.33.sslip.io/api/switching/packages" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d "{
  \"validTo\": null,
  \"sourceSystem\": null,
  \"owner\": null,
  \"status\": \"PAKIET_ROBOCZY\",
  \"id\": \"00000000-0000-4000-8000-000000000000\"
}"
DELETE/switching/packages
Auth requiredswitching.manage

Delete switching package

Deletes a switching package identified by id. Requires features: switching.manage

Responses

200Switching Package deleted
Content-Type: application/json
{
  "ok": true
}

Example

curl -X DELETE "https://151.115.63.33.sslip.io/api/switching/packages" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
GET/switching/requests
Auth requiredswitching.view

List switching requests

Returns a paginated collection of switching requests scoped to the authenticated organization. Requires features: switching.view

Parameters

NameInRequiredSchemaDescription
pagequeryNoany
pageSizequeryNoany
switchingCaseIdqueryNoany
packageIdqueryNoany
statusqueryNoany
sortFieldqueryNoany
sortDirqueryNoany
idsqueryNoanyComma-separated list of record UUIDs to filter by (max 200).

Responses

200Paginated switching requests
Content-Type: application/json
{
  "items": [
    {
      "id": "00000000-0000-4000-8000-000000000000",
      "switchingCaseId": "00000000-0000-4000-8000-000000000000",
      "packageId": null,
      "ppgId": "00000000-0000-4000-8000-000000000000",
      "osdId": "00000000-0000-4000-8000-000000000000",
      "status": "string",
      "osdReferenceNumber": null,
      "sentAt": null,
      "confirmedAt": null,
      "version": 1,
      "createdAt": "string",
      "updatedAt": "string"
    }
  ],
  "total": 1,
  "totalPages": 1
}

Example

curl -X GET "https://151.115.63.33.sslip.io/api/switching/requests?page=1&pageSize=50" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"
GET/switching/sla-trackers
Auth requiredswitching.view

List sla trackers

Returns a paginated collection of sla trackers scoped to the authenticated organization. Requires features: switching.view

Parameters

NameInRequiredSchemaDescription
pagequeryNoany
pageSizequeryNoany
switchingCaseIdqueryNoany
threatLevelqueryNoany
sortFieldqueryNoany
sortDirqueryNoany
idsqueryNoanyComma-separated list of record UUIDs to filter by (max 200).

Responses

200Paginated sla trackers
Content-Type: application/json
{
  "items": [
    {
      "id": "00000000-0000-4000-8000-000000000000",
      "switchingCaseId": "00000000-0000-4000-8000-000000000000",
      "stage": "string",
      "deadlineAt": "string",
      "warningAt": "string",
      "threatLevel": "string",
      "breachedAt": null,
      "escalatedAt": null,
      "createdAt": "string",
      "updatedAt": "string"
    }
  ],
  "total": 1,
  "totalPages": 1
}

Example

curl -X GET "https://151.115.63.33.sslip.io/api/switching/sla-trackers?page=1&pageSize=50" \
  -H "Accept: application/json" \
  -H "authorization: Bearer <token>"