EBXv1

API reference

Onboarding

Bringing an asset onto the platform: onboarding workflows and the tasks assigned to you — gates, DPL rows, RfI fields, document upload and download, partner and asset owner access links, and prequalification submission.

80 endpoints
GET/v1/onboarding-branding/{organization_id}

Get organization onboarding branding

onboarding.read

Returns branding for the caller's organization. EBX users may read branding for any organization.

Path parameters

organization_idREQUIRED
stringOrganization identifier the branding belongs to.
Example value
curl "https://api.ebx.energy/v1/onboarding-branding/your-org" \
  -H "Authorization: Bearer $EBX_TOKEN"
Example response200
{
  "organization_id": "<string>",
  "organization_name": "<string>",
  "branding": {
    "display_name": "<string>",
    "primary_color": "<string>",
    "support_email": "<string>",
    "logo_url": "<string>",
    "email_banner_url": "<string>",
    "magic_link_default_language": "de",
    "magic_link_email_templates": "<string>"
  }
}
Can raise
  • 401no valid token
  • 403scope missing
  • 404unknown or not visible
  • 429rate limited
ALL CODES →
PUT/v1/onboarding-branding/{organization_id}

Create or update organization onboarding branding

onboarding.write

Updates the caller's organization branding. EBX writers may update any organization.

Path parameters

organization_idREQUIRED
stringOrganization identifier the branding belongs to.

Request body · required

display_nameREQUIRED
string
primary_colorREQUIRED
stringHex color, e.g. #1f4fff
support_emailREQUIRED
string<email>
magic_link_default_language
enumdeen
magic_link_email_templates
object
Example value
curl -X PUT "https://api.ebx.energy/v1/onboarding-branding/your-org" \
  -H "Authorization: Bearer $EBX_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"display_name":"<string>","primary_color":"<string>","support_email":"name@example.com","magic_link_default_language":"de","magic_link_email_templates":"<string>"}'
Example response200
{
  "display_name": "<string>",
  "primary_color": "<string>",
  "support_email": "<string>",
  "logo_url": "<string>",
  "email_banner_url": "<string>",
  "magic_link_default_language": "de",
  "magic_link_email_templates": "<string>"
}
Can raise
  • 400malformed request
  • 401no valid token
  • 403scope missing
  • 404unknown or not visible
  • 409state conflict
  • 422validation failed
  • 429rate limited
ALL CODES →
PUT/v1/onboarding-branding/{organization_id}/email-banner

Upload an organization onboarding email banner

onboarding.write

Uploads the caller's organization-wide email banner as PNG, SVG, or JPEG (maximum 2 MB). EBX writers may upload for any organization.

Path parameters

organization_idREQUIRED
stringOrganization identifier the branding belongs to.
Example value
curl -X PUT "https://api.ebx.energy/v1/onboarding-branding/your-org/email-banner" \
  -H "Authorization: Bearer $EBX_TOKEN"
Example response200
{
  "display_name": "<string>",
  "primary_color": "<string>",
  "support_email": "<string>",
  "logo_url": "<string>",
  "email_banner_url": "<string>",
  "magic_link_default_language": "de",
  "magic_link_email_templates": "<string>"
}
Can raise
  • 400malformed request
  • 401no valid token
  • 403scope missing
  • 404unknown or not visible
  • 409state conflict
  • 429rate limited
ALL CODES →
POST/v1/onboarding-magic/{token}/exchange

Exchange an onboarding magic link

Validates a reusable external onboarding magic link and returns Cognito tokens scoped to the assigned task principal.

Path parameters

tokenREQUIRED
stringRaw magic-link token from the external onboarding email.
Example value
curl -X POST "https://api.ebx.energy/v1/onboarding-magic/ml_9f2c4b8a1d3e/exchange" \
  -H "Authorization: Bearer $EBX_TOKEN"
Example response200
{
  "access_token": "<string>",
  "id_token": "<string>",
  "refresh_token": "<string>",
  "token_type": "Bearer",
  "expires_at": 0,
  "session_id": "<string>",
  "onboarding_id": "<string>",
  "role": "asset_owner",
  "contact_name": "<string>",
  "contact_email": "<string>",
  "branding": {
    "display_name": "<string>",
    "primary_color": "<string>",
    "support_email": "<string>",
    "logo_url": "<string>"
  }
}
Can raise
  • 400malformed request
  • 404unknown or not visible
  • 409state conflict
  • 429rate limited
ALL CODES →
POST/v1/onboarding-magic/refresh

Refresh an onboarding magic-link session

Refreshes a Cognito access token for an active external onboarding magic-link session.

Request body · required

session_idREQUIRED
string
refresh_tokenREQUIRED
string
Example value
curl -X POST "https://api.ebx.energy/v1/onboarding-magic/refresh" \
  -H "Authorization: Bearer $EBX_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"session_id":"<string>","refresh_token":"<string>"}'
Example response200
{
  "access_token": "<string>",
  "id_token": "<string>",
  "token_type": "Bearer",
  "expires_at": 0
}
Can raise
  • 400malformed request
  • 409state conflict
  • 422validation failed
  • 429rate limited
ALL CODES →
GET/v1/onboarding-tasks

List assigned onboarding tasks

Returns the asset-owner, EPC, or EMS onboarding tasks assigned to the authenticated caller.

This endpoint takes no parameters.

Example value
curl "https://api.ebx.energy/v1/onboarding-tasks" \
  -H "Authorization: Bearer $EBX_TOKEN"
Example response200
{
  "tasks": [
    {
      "onboarding_id": "<string>",
      "asset_name": "<string>",
      "location": "<string>",
      "country": "<string>",
      "integration_type": "monitoring_only",
      "overall_status": "in_progress",
      "role": "asset_owner",
      "gate_definition_id": "mon_rfi",
      "gate_title": "<string>",
      "gate_status": "pending",
      "deadline": "2026-01-01",
      "ready": false,
      "branding": {
        "display_name": "<string>",
        "primary_color": "<string>",
        "support_email": "<string>",
        "logo_url": "<string>"
      },
      "updated_at": "<string>"
    }
  ]
}
Can raise
  • 429rate limited
ALL CODES →
GET/v1/onboarding-tasks/{onboarding_id}

Get onboarding task detail

Returns the guided-task payload for an assigned onboarding without exposing the full control-center workspace.

Path parameters

onboarding_idREQUIRED
string<uuid>Stable onboarding identifier returned by the task list.

Query parameters

role
enumasset_ownerepcems_providerentrix_onboardingebxtsoAssigned task role to load when the caller has multiple roles on the same onboarding.

Header parameters

X-Onboarding-Preview-Role
enumasset_ownerepcems_providerentrix_onboardingebxtsoEBX-internal view-as role. Requires onboarding.read for reads and onboarding.write for mutations.
Example value
curl "https://api.ebx.energy/v1/onboarding-tasks/00000000-0000-0000-0000-000000000000" \
  -H "Authorization: Bearer $EBX_TOKEN"
Example response200
{
  "onboarding_id": "<string>",
  "asset_name": "<string>",
  "location": "<string>",
  "country": "<string>",
  "integration_type": "monitoring_only",
  "target_hc_date": "2026-01-01",
  "overall_status": "in_progress",
  "role": "asset_owner",
  "viewer_contact_name": "<string>",
  "task_gate_ids": [
    "mon_rfi"
  ],
  "gates": [
    {
      "id": "<string>",
      "definition_id": "mon_rfi",
      "status": "pending",
      "deadline": "2026-01-01",
      "last_note": "<string>",
      "passed_at": "<string>",
      "passed_by_user_name": "<string>",
      "structured_data": "<string>"
    }
  ],
  "gate_definitions": "<string>",
  "process_document_slots": [
    {
      "document_type": "installation_photo_mdevice",
      "label": "<string>",
      "description": "<string>",
      "required": false,
      "allow_multiple": false
    }
  ],
  "documents": [
    {
      "id": "<string>",
      "onboarding_id": "<string>",
      "gate_definition_id": "mon_rfi",
      "document_type": "installation_photo_mdevice",
      "filename": "<string>",
      "size_bytes": 0,
      "content_type": "<string>",
      "uploaded_at": "<string>",
      "uploaded_by_user_name": "<string>",
      "version": 0
    }
  ],
  "branding": {
    "display_name": "<string>",
    "primary_color": "<string>",
    "support_email": "<string>",
    "logo_url": "<string>"
  },
  "updated_at": "<string>"
}
Can raise
  • 404unknown or not visible
  • 422validation failed
  • 429rate limited
ALL CODES →
DELETE/v1/onboarding-tasks/{onboarding_id}/documents/{document_id}

Remove a task-scoped uploaded document

Soft-deletes a document the caller uploaded through their onboarding task so it no longer appears on the task or receives download URLs. The S3 object is not deleted synchronously.

Path parameters

onboarding_idREQUIRED
string<uuid>Stable onboarding identifier returned by the task list.
document_idREQUIRED
string<uuid>Document identifier returned by the presigned upload request.

Header parameters

X-Onboarding-Preview-Role
enumasset_ownerepcems_providerentrix_onboardingebxtsoEBX-internal view-as role. Requires onboarding.read for reads and onboarding.write for mutations.
Example value
curl -X DELETE "https://api.ebx.energy/v1/onboarding-tasks/00000000-0000-0000-0000-000000000000/documents/00000000-0000-0000-0000-000000000000" \
  -H "Authorization: Bearer $EBX_TOKEN"
Example response200
{
  "onboarding_id": "<string>",
  "asset_name": "<string>",
  "location": "<string>",
  "country": "<string>",
  "integration_type": "monitoring_only",
  "target_hc_date": "2026-01-01",
  "overall_status": "in_progress",
  "role": "asset_owner",
  "viewer_contact_name": "<string>",
  "task_gate_ids": [
    "mon_rfi"
  ],
  "gates": [
    {
      "id": "<string>",
      "definition_id": "mon_rfi",
      "status": "pending",
      "deadline": "2026-01-01",
      "last_note": "<string>",
      "passed_at": "<string>",
      "passed_by_user_name": "<string>",
      "structured_data": "<string>"
    }
  ],
  "gate_definitions": "<string>",
  "process_document_slots": [
    {
      "document_type": "installation_photo_mdevice",
      "label": "<string>",
      "description": "<string>",
      "required": false,
      "allow_multiple": false
    }
  ],
  "documents": [
    {
      "id": "<string>",
      "onboarding_id": "<string>",
      "gate_definition_id": "mon_rfi",
      "document_type": "installation_photo_mdevice",
      "filename": "<string>",
      "size_bytes": 0,
      "content_type": "<string>",
      "uploaded_at": "<string>",
      "uploaded_by_user_name": "<string>",
      "version": 0
    }
  ],
  "branding": {
    "display_name": "<string>",
    "primary_color": "<string>",
    "support_email": "<string>",
    "logo_url": "<string>"
  },
  "updated_at": "<string>"
}
Can raise
  • 400malformed request
  • 404unknown or not visible
  • 409state conflict
  • 429rate limited
ALL CODES →
GET/v1/onboarding-tasks/{onboarding_id}/documents/{document_id}/download

Download a task-scoped document

Returns a short-lived presigned S3 GET URL for a document the caller can access through their assigned onboarding task.

Path parameters

onboarding_idREQUIRED
string<uuid>Stable onboarding identifier returned by the task list.
document_idREQUIRED
string<uuid>Document identifier returned by the presigned upload request.

Query parameters

role
enumasset_ownerepcems_providerentrix_onboardingebxtsoAssigned task role to download as when the caller has multiple roles on the same onboarding.

Header parameters

X-Onboarding-Preview-Role
enumasset_ownerepcems_providerentrix_onboardingebxtsoEBX-internal view-as role. Requires onboarding.read for reads and onboarding.write for mutations.
Example value
curl "https://api.ebx.energy/v1/onboarding-tasks/00000000-0000-0000-0000-000000000000/documents/00000000-0000-0000-0000-000000000000/download" \
  -H "Authorization: Bearer $EBX_TOKEN"
Example response200
{
  "download_url": "<string>",
  "expires_at": "<string>"
}
Can raise
  • 404unknown or not visible
  • 422validation failed
  • 429rate limited
ALL CODES →
POST/v1/onboarding-tasks/{onboarding_id}/documents/{document_id}/finalize

Finalize a task-scoped uploaded document

Marks a pending task evidence upload as available after the client has uploaded bytes to S3.

Path parameters

onboarding_idREQUIRED
string<uuid>Stable onboarding identifier returned by the task list.
document_idREQUIRED
string<uuid>Document identifier returned by the presigned upload request.

Header parameters

X-Onboarding-Preview-Role
enumasset_ownerepcems_providerentrix_onboardingebxtsoEBX-internal view-as role. Requires onboarding.read for reads and onboarding.write for mutations.
Example value
curl -X POST "https://api.ebx.energy/v1/onboarding-tasks/00000000-0000-0000-0000-000000000000/documents/00000000-0000-0000-0000-000000000000/finalize" \
  -H "Authorization: Bearer $EBX_TOKEN"
Example response200
{
  "onboarding_id": "<string>",
  "asset_name": "<string>",
  "location": "<string>",
  "country": "<string>",
  "integration_type": "monitoring_only",
  "target_hc_date": "2026-01-01",
  "overall_status": "in_progress",
  "role": "asset_owner",
  "viewer_contact_name": "<string>",
  "task_gate_ids": [
    "mon_rfi"
  ],
  "gates": [
    {
      "id": "<string>",
      "definition_id": "mon_rfi",
      "status": "pending",
      "deadline": "2026-01-01",
      "last_note": "<string>",
      "passed_at": "<string>",
      "passed_by_user_name": "<string>",
      "structured_data": "<string>"
    }
  ],
  "gate_definitions": "<string>",
  "process_document_slots": [
    {
      "document_type": "installation_photo_mdevice",
      "label": "<string>",
      "description": "<string>",
      "required": false,
      "allow_multiple": false
    }
  ],
  "documents": [
    {
      "id": "<string>",
      "onboarding_id": "<string>",
      "gate_definition_id": "mon_rfi",
      "document_type": "installation_photo_mdevice",
      "filename": "<string>",
      "size_bytes": 0,
      "content_type": "<string>",
      "uploaded_at": "<string>",
      "uploaded_by_user_name": "<string>",
      "version": 0
    }
  ],
  "branding": {
    "display_name": "<string>",
    "primary_color": "<string>",
    "support_email": "<string>",
    "logo_url": "<string>"
  },
  "updated_at": "<string>"
}
Can raise
  • 400malformed request
  • 404unknown or not visible
  • 409state conflict
  • 429rate limited
ALL CODES →
POST/v1/onboarding-tasks/{onboarding_id}/documents/presigned-upload

Create a task-scoped document upload URL

Creates pending document metadata for task-owned evidence and returns a short-lived presigned S3 PUT URL.

Path parameters

onboarding_idREQUIRED
string<uuid>Stable onboarding identifier returned by the task list.

Header parameters

X-Onboarding-Preview-Role
enumasset_ownerepcems_providerentrix_onboardingebxtsoEBX-internal view-as role. Requires onboarding.read for reads and onboarding.write for mutations.

Request body · required

document_typeREQUIRED
enuminstallation_photo_mdeviceinstallation_photo_antennatest_results_signedbetriebsfahrt_datapq_frequency_analysispq_doublestroke_filepq_approvaleigentuemerbetreiberother
gate_definition_id
enummon_rfimon_hwmon_swmon_valctl_rfictl_hwctl_swctl_mon_testctl_ctrl_testctl_pq_testctl_pq_submitctl_pq_approved
filenameREQUIRED
string
size_bytesREQUIRED
integer
content_typeREQUIRED
string
Example value
curl -X POST "https://api.ebx.energy/v1/onboarding-tasks/00000000-0000-0000-0000-000000000000/documents/presigned-upload" \
  -H "Authorization: Bearer $EBX_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"document_type":"installation_photo_mdevice","gate_definition_id":"mon_rfi","filename":"<string>","size_bytes":0,"content_type":"<string>"}'
Example response201
{
  "upload_url": "<string>",
  "document_id": "<string>",
  "expires_at": "<string>"
}
Can raise
  • 400malformed request
  • 404unknown or not visible
  • 409state conflict
  • 422validation failed
  • 429rate limited
ALL CODES →
PATCH/v1/onboarding-tasks/{onboarding_id}/dpl/rows/{row_id}

Update an EMS DPL task row

Updates externally editable implementation fields for one DPL row on the EMS software task.

Path parameters

onboarding_idREQUIRED
string<uuid>Stable onboarding identifier returned by the task list.
row_idREQUIRED
stringDPL row identifier from the onboarding software task payload.

Header parameters

X-Onboarding-Preview-Role
enumasset_ownerepcems_providerentrix_onboardingebxtsoEBX-internal view-as role. Requires onboarding.read for reads and onboarding.write for mutations.

Request body · required

implementation_status
enumpendingimplementeddeviationnot_available
received_test_value
number | integer
excluded
boolean
asset_notes
string
Example value
curl -X PATCH "https://api.ebx.energy/v1/onboarding-tasks/00000000-0000-0000-0000-000000000000/dpl/rows/dpl_row_014" \
  -H "Authorization: Bearer $EBX_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"implementation_status":"pending","received_test_value":0,"excluded":false,"asset_notes":"<string>"}'
Example response200
{
  "onboarding_id": "<string>",
  "asset_name": "<string>",
  "location": "<string>",
  "country": "<string>",
  "integration_type": "monitoring_only",
  "target_hc_date": "2026-01-01",
  "overall_status": "in_progress",
  "role": "asset_owner",
  "viewer_contact_name": "<string>",
  "task_gate_ids": [
    "mon_rfi"
  ],
  "gates": [
    {
      "id": "<string>",
      "definition_id": "mon_rfi",
      "status": "pending",
      "deadline": "2026-01-01",
      "last_note": "<string>",
      "passed_at": "<string>",
      "passed_by_user_name": "<string>",
      "structured_data": "<string>"
    }
  ],
  "gate_definitions": "<string>",
  "process_document_slots": [
    {
      "document_type": "installation_photo_mdevice",
      "label": "<string>",
      "description": "<string>",
      "required": false,
      "allow_multiple": false
    }
  ],
  "documents": [
    {
      "id": "<string>",
      "onboarding_id": "<string>",
      "gate_definition_id": "mon_rfi",
      "document_type": "installation_photo_mdevice",
      "filename": "<string>",
      "size_bytes": 0,
      "content_type": "<string>",
      "uploaded_at": "<string>",
      "uploaded_by_user_name": "<string>",
      "version": 0
    }
  ],
  "branding": {
    "display_name": "<string>",
    "primary_color": "<string>",
    "support_email": "<string>",
    "logo_url": "<string>"
  },
  "updated_at": "<string>"
}
Can raise
  • 400malformed request
  • 404unknown or not visible
  • 409state conflict
  • 422validation failed
  • 429rate limited
ALL CODES →
POST/v1/onboarding-tasks/{onboarding_id}/dpl/rows/{row_id}/comments

Comment on an EMS DPL task row

Adds an EMS clarification comment to one DPL row and opens the row discussion.

Path parameters

onboarding_idREQUIRED
string<uuid>Stable onboarding identifier returned by the task list.
row_idREQUIRED
stringDPL row identifier from the onboarding software task payload.

Header parameters

X-Onboarding-Preview-Role
enumasset_ownerepcems_providerentrix_onboardingebxtsoEBX-internal view-as role. Requires onboarding.read for reads and onboarding.write for mutations.

Request body · required

bodyREQUIRED
string
Example value
curl -X POST "https://api.ebx.energy/v1/onboarding-tasks/00000000-0000-0000-0000-000000000000/dpl/rows/dpl_row_014/comments" \
  -H "Authorization: Bearer $EBX_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"body":"<string>"}'
Example response200
{
  "status": "open",
  "comments": [
    {
      "id": "<string>",
      "author_user_name": "<string>",
      "author_org_name": "<string>",
      "author_side": "ebx",
      "created_at": "<string>",
      "body": "<string>"
    }
  ],
  "last_comment_at": "<string>"
}
Can raise
  • 400malformed request
  • 404unknown or not visible
  • 409state conflict
  • 422validation failed
  • 429rate limited
ALL CODES →
PATCH/v1/onboarding-tasks/{onboarding_id}/dpl/rows/{row_id}/thread

Update an EMS DPL task row discussion status

Opens or resolves the discussion thread for a DPL row without changing the row implementation values.

Path parameters

onboarding_idREQUIRED
string<uuid>Stable onboarding identifier returned by the task list.
row_idREQUIRED
stringDPL row identifier from the onboarding software task payload.

Header parameters

X-Onboarding-Preview-Role
enumasset_ownerepcems_providerentrix_onboardingebxtsoEBX-internal view-as role. Requires onboarding.read for reads and onboarding.write for mutations.

Request body · required

statusREQUIRED
enumopenresolved
Example value
curl -X PATCH "https://api.ebx.energy/v1/onboarding-tasks/00000000-0000-0000-0000-000000000000/dpl/rows/dpl_row_014/thread" \
  -H "Authorization: Bearer $EBX_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"status":"open"}'
Example response200
{
  "onboarding_id": "<string>",
  "asset_name": "<string>",
  "location": "<string>",
  "country": "<string>",
  "integration_type": "monitoring_only",
  "target_hc_date": "2026-01-01",
  "overall_status": "in_progress",
  "role": "asset_owner",
  "viewer_contact_name": "<string>",
  "task_gate_ids": [
    "mon_rfi"
  ],
  "gates": [
    {
      "id": "<string>",
      "definition_id": "mon_rfi",
      "status": "pending",
      "deadline": "2026-01-01",
      "last_note": "<string>",
      "passed_at": "<string>",
      "passed_by_user_name": "<string>",
      "structured_data": "<string>"
    }
  ],
  "gate_definitions": "<string>",
  "process_document_slots": [
    {
      "document_type": "installation_photo_mdevice",
      "label": "<string>",
      "description": "<string>",
      "required": false,
      "allow_multiple": false
    }
  ],
  "documents": [
    {
      "id": "<string>",
      "onboarding_id": "<string>",
      "gate_definition_id": "mon_rfi",
      "document_type": "installation_photo_mdevice",
      "filename": "<string>",
      "size_bytes": 0,
      "content_type": "<string>",
      "uploaded_at": "<string>",
      "uploaded_by_user_name": "<string>",
      "version": 0
    }
  ],
  "branding": {
    "display_name": "<string>",
    "primary_color": "<string>",
    "support_email": "<string>",
    "logo_url": "<string>"
  },
  "updated_at": "<string>"
}
Can raise
  • 400malformed request
  • 404unknown or not visible
  • 409state conflict
  • 422validation failed
  • 429rate limited
ALL CODES →
GET/v1/onboarding-tasks/{onboarding_id}/gates/{gate_id}/auto-check

Run a task-scoped gate auto-check

Returns the current automated check result visible from the external working view.

Path parameters

onboarding_idREQUIRED
string<uuid>Stable onboarding identifier returned by the task list.
gate_idREQUIRED
enummon_rfimon_hwmon_swmon_valctl_rfictl_hwctl_swctl_mon_testctl_ctrl_testctl_pq_testctl_pq_submitctl_pq_approvedExternally owned workflow gate identifier.

Header parameters

X-Onboarding-Preview-Role
enumasset_ownerepcems_providerentrix_onboardingebxtsoEBX-internal view-as role. Requires onboarding.read for reads and onboarding.write for mutations.
Example value
curl "https://api.ebx.energy/v1/onboarding-tasks/00000000-0000-0000-0000-000000000000/gates/mon_rfi/auto-check" \
  -H "Authorization: Bearer $EBX_TOKEN"
Example response200
{
  "status": "pass",
  "summary": "<string>",
  "facts": [
    {
      "label": "<string>",
      "value": "<string>",
      "pass": false
    }
  ],
  "last_checked_at": "<string>",
  "hardware_signal": {
    "boxes": [
      {
        "device": 0,
        "signal_strength_pct": 0,
        "lan_connected": false,
        "last_seen_at": "<string>"
      }
    ]
  }
}
Can raise
  • 404unknown or not visible
  • 429rate limited
ALL CODES →
POST/v1/onboarding-tasks/{onboarding_id}/gates/{gate_id}/submit

Submit an external onboarding task for EBX confirmation

Validates task-owned evidence/progress and moves the canonical gate to awaiting_confirmation without passing it.

Path parameters

onboarding_idREQUIRED
string<uuid>Stable onboarding identifier returned by the task list.
gate_idREQUIRED
enummon_rfimon_hwmon_swmon_valctl_rfictl_hwctl_swctl_mon_testctl_ctrl_testctl_pq_testctl_pq_submitctl_pq_approvedExternally owned workflow gate identifier.

Header parameters

X-Onboarding-Preview-Role
enumasset_ownerepcems_providerentrix_onboardingebxtsoEBX-internal view-as role. Requires onboarding.read for reads and onboarding.write for mutations.

Request body · required

note
string
hardware
object
Example value
curl -X POST "https://api.ebx.energy/v1/onboarding-tasks/00000000-0000-0000-0000-000000000000/gates/mon_rfi/submit" \
  -H "Authorization: Bearer $EBX_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"note":"<string>","hardware":{"package_received_confirmed":false,"installation_confirmed":false,"notes":"<string>"}}'
Example response200
{
  "onboarding_id": "<string>",
  "asset_name": "<string>",
  "location": "<string>",
  "country": "<string>",
  "integration_type": "monitoring_only",
  "target_hc_date": "2026-01-01",
  "overall_status": "in_progress",
  "role": "asset_owner",
  "viewer_contact_name": "<string>",
  "task_gate_ids": [
    "mon_rfi"
  ],
  "gates": [
    {
      "id": "<string>",
      "definition_id": "mon_rfi",
      "status": "pending",
      "deadline": "2026-01-01",
      "last_note": "<string>",
      "passed_at": "<string>",
      "passed_by_user_name": "<string>",
      "structured_data": "<string>"
    }
  ],
  "gate_definitions": "<string>",
  "process_document_slots": [
    {
      "document_type": "installation_photo_mdevice",
      "label": "<string>",
      "description": "<string>",
      "required": false,
      "allow_multiple": false
    }
  ],
  "documents": [
    {
      "id": "<string>",
      "onboarding_id": "<string>",
      "gate_definition_id": "mon_rfi",
      "document_type": "installation_photo_mdevice",
      "filename": "<string>",
      "size_bytes": 0,
      "content_type": "<string>",
      "uploaded_at": "<string>",
      "uploaded_by_user_name": "<string>",
      "version": 0
    }
  ],
  "branding": {
    "display_name": "<string>",
    "primary_color": "<string>",
    "support_email": "<string>",
    "logo_url": "<string>"
  },
  "updated_at": "<string>"
}
Can raise
  • 400malformed request
  • 404unknown or not visible
  • 409state conflict
  • 422validation failed
  • 429rate limited
ALL CODES →
PATCH/v1/onboarding-tasks/{onboarding_id}/rfi

Update an asset-owner RfI task

Stores asset-owner RfI/site-readiness progress without passing the canonical onboarding gate.

Path parameters

onboarding_idREQUIRED
string<uuid>Stable onboarding identifier returned by the task list.

Header parameters

X-Onboarding-Preview-Role
enumasset_ownerepcems_providerentrix_onboardingebxtsoEBX-internal view-as role. Requires onboarding.read for reads and onboarding.write for mutations.

Request body · required

rfiREQUIRED
object
Example value
curl -X PATCH "https://api.ebx.energy/v1/onboarding-tasks/00000000-0000-0000-0000-000000000000/rfi" \
  -H "Authorization: Bearer $EBX_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"rfi":{"m_device":{"shipping_address":{"street":"<string>","postal_code":"<string>","city":"<string>","country":"<string>","attention":"<string>"},"site_contact":{"name":"<string>","email":"name@example.com","phone":"<string>"},"network_config":{"ems_server_ip":"","ebx_box_1_client_ip":"","ebx_box_2_client_ip":""},"planned_hw_installation_date":"<string>","delivery_mode":"loose_components","power_supply":"24v_dc","ethernet_available":false,"antenna_location_outdoors":false,"antenna_extension_cable":"none","notes":"<string>"},"control":{"ems_vendor":"<string>","ems_vendor_other":"<string>","ems_supports_modbus_tcp":false,"pq_submission_targeted":false,"ems_technical_contact":{"name":"<string>","email":"name@example.com","phone":"<string>"},"pq_data":"<string>","pq_documents":"<string>","notes":"<string>"},"field_meta":"<string>"}}'
Example response200
{
  "onboarding_id": "<string>",
  "asset_name": "<string>",
  "location": "<string>",
  "country": "<string>",
  "integration_type": "monitoring_only",
  "target_hc_date": "2026-01-01",
  "overall_status": "in_progress",
  "role": "asset_owner",
  "viewer_contact_name": "<string>",
  "task_gate_ids": [
    "mon_rfi"
  ],
  "gates": [
    {
      "id": "<string>",
      "definition_id": "mon_rfi",
      "status": "pending",
      "deadline": "2026-01-01",
      "last_note": "<string>",
      "passed_at": "<string>",
      "passed_by_user_name": "<string>",
      "structured_data": "<string>"
    }
  ],
  "gate_definitions": "<string>",
  "process_document_slots": [
    {
      "document_type": "installation_photo_mdevice",
      "label": "<string>",
      "description": "<string>",
      "required": false,
      "allow_multiple": false
    }
  ],
  "documents": [
    {
      "id": "<string>",
      "onboarding_id": "<string>",
      "gate_definition_id": "mon_rfi",
      "document_type": "installation_photo_mdevice",
      "filename": "<string>",
      "size_bytes": 0,
      "content_type": "<string>",
      "uploaded_at": "<string>",
      "uploaded_by_user_name": "<string>",
      "version": 0
    }
  ],
  "branding": {
    "display_name": "<string>",
    "primary_color": "<string>",
    "support_email": "<string>",
    "logo_url": "<string>"
  },
  "updated_at": "<string>"
}
Can raise
  • 400malformed request
  • 404unknown or not visible
  • 409state conflict
  • 422validation failed
  • 429rate limited
ALL CODES →
POST/v1/onboarding-tasks/{onboarding_id}/rfi/fields/{field_key}/comments

Comment on an asset-owner RfI field

Adds a clarification comment to an RfI field on the asset-owner task and opens the field discussion thread.

Path parameters

onboarding_idREQUIRED
string<uuid>Stable onboarding identifier returned by the task list.
field_keyREQUIRED
stringRfI field key from the RfI task field_meta payload, for example m_device.shipping_address.

Header parameters

X-Onboarding-Preview-Role
enumasset_ownerepcems_providerentrix_onboardingebxtsoEBX-internal view-as role. Requires onboarding.read for reads and onboarding.write for mutations.

Request body · required

bodyREQUIRED
string
Example value
curl -X POST "https://api.ebx.energy/v1/onboarding-tasks/00000000-0000-0000-0000-000000000000/rfi/fields/m_device.shipping_address/comments" \
  -H "Authorization: Bearer $EBX_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"body":"<string>"}'
Example response200
{
  "status": "open",
  "comments": [
    {
      "id": "<string>",
      "author_user_name": "<string>",
      "author_org_name": "<string>",
      "author_side": "ebx",
      "created_at": "<string>",
      "body": "<string>"
    }
  ],
  "last_comment_at": "<string>"
}
Can raise
  • 400malformed request
  • 404unknown or not visible
  • 409state conflict
  • 422validation failed
  • 429rate limited
ALL CODES →
PATCH/v1/onboarding-tasks/{onboarding_id}/rfi/fields/{field_key}/thread

Update an asset-owner RfI field discussion status

Opens or resolves the clarification thread for an RfI field without changing the field values.

Path parameters

onboarding_idREQUIRED
string<uuid>Stable onboarding identifier returned by the task list.
field_keyREQUIRED
stringRfI field key from the RfI task field_meta payload, for example m_device.shipping_address.

Header parameters

X-Onboarding-Preview-Role
enumasset_ownerepcems_providerentrix_onboardingebxtsoEBX-internal view-as role. Requires onboarding.read for reads and onboarding.write for mutations.

Request body · required

statusREQUIRED
enumopenresolved
Example value
curl -X PATCH "https://api.ebx.energy/v1/onboarding-tasks/00000000-0000-0000-0000-000000000000/rfi/fields/m_device.shipping_address/thread" \
  -H "Authorization: Bearer $EBX_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"status":"open"}'
Example response200
{
  "status": "open",
  "comments": [
    {
      "id": "<string>",
      "author_user_name": "<string>",
      "author_org_name": "<string>",
      "author_side": "ebx",
      "created_at": "<string>",
      "body": "<string>"
    }
  ],
  "last_comment_at": "<string>"
}
Can raise
  • 400malformed request
  • 404unknown or not visible
  • 409state conflict
  • 422validation failed
  • 429rate limited
ALL CODES →
GET/v1/onboardings

List visible onboardings

onboarding.read

Returns onboardings the caller can read. EBX users see all onboardings. Asset-owner users see onboardings for their organization. Task-principal users are intentionally scoped to /onboarding-tasks.

Query parameters

status
enumin_progressblockedcompletedabortedFilter by overall onboarding status.
integration_type
enummonitoring_onlyfull_controlFilter by integration path: monitoring-only or full-control.
attention_only
booleandefault falseWhen true, return only blocked and in-progress onboardings.
Example value
curl "https://api.ebx.energy/v1/onboardings" \
  -H "Authorization: Bearer $EBX_TOKEN"
Example response200
{
  "onboardings": [
    {
      "id": "<string>",
      "asset_id": "<string>",
      "asset_name": "<string>",
      "location": "<string>",
      "country": "<string>",
      "tso": "<string>",
      "integration_type": "monitoring_only",
      "target_hc_date": "2026-01-01",
      "current_gate_definition_id": "mon_rfi",
      "overall_status": "in_progress",
      "asset_owner_org_id": "<string>",
      "asset_owner_org_name": "<string>",
      "whitelabel": false,
      "process_definition": {
        "id": "<string>",
        "integration_type": "monitoring_only",
        "version": "<string>",
        "source_label": "<string>",
        "gate_sequence": [
          "mon_rfi"
        ],
        "gate_definitions": "<string>",
        "process_document_slots": [
          {
            "document_type": "installation_photo_mdevice",
            "label": "<string>",
            "description": "<string>",
            "required": false,
            "allow_multiple": false
          }
        ],
        "asset_profile_sync_gate_id": "mon_rfi",
        "schema_version": 0
      },
      "gate_definitions": "<string>",
      "asset_profile": {
        "id": "<string>",
        "onboarding_id": "<string>",
        "asset_id": "<string>",
        "asset_name": "<string>",
        "location": "<string>",
        "country": "<string>",
        "asset_owner_org_id": "<string>",
        "asset_owner_org_name": "<string>",
        "shipping_address": {
          "street": "<string>",
          "postal_code": "<string>",
          "city": "<string>",
          "country": "<string>",
          "attention": "<string>"
        },
        "site_contact": {
          "name": "<string>",
          "email": "name@example.com",
          "phone": "<string>"
        },
        "power_supply": "24v_dc",
        "ethernet_available": false,
        "antenna_location_outdoors": false,
        "ems_vendor": "<string>",
        "ems_vendor_other": "<string>",
        "ems_supports_modbus_tcp": false,
        "pq_submission_targeted": false,
        "ems_technical_contact": {
          "name": "<string>",
          "email": "name@example.com",
          "phone": "<string>"
        },
        "source_gate_definition_id": "mon_rfi",
        "source_gate_passed_at": "<string>",
        "source_gate_updated_at": "<string>",
        "synced_at": "<string>",
        "sync_reason": "<string>"
      },
      "asset_owner_contact": {
        "id": "<string>",
        "contact_name": "<string>",
        "contact_email": "<string>",
        "access": {
          "status": "<string>"
        }
      },
      "asset_owner_contacts": [
        {
          "id": "<string>",
          "contact_name": "<string>",
          "contact_email": "<string>",
          "access": {
            "status": "<string>"
          }
        }
      ],
      "partners": [
        {
          "id": "<string>",
          "role": "epc",
          "org_name": "<string>",
          "contact_name": "<string>",
          "contact_email": "<string>",
          "access": {
            "status": "<string>"
          }
        }
      ],
      "created_at": "<string>",
      "updated_at": "<string>",
      "gates": [
        {
          "id": "<string>",
          "definition_id": "mon_rfi",
          "status": "pending",
          "deadline": "2026-01-01",
          "last_note": "<string>",
          "passed_at": "<string>",
          "passed_by_user_name": "<string>",
          "structured_data": "<string>"
        }
      ],
      "documents": [
        {
          "id": "<string>",
          "onboarding_id": "<string>",
          "gate_definition_id": "mon_rfi",
          "document_type": "installation_photo_mdevice",
          "filename": "<string>",
          "size_bytes": 0,
          "content_type": "<string>",
          "uploaded_at": "<string>",
          "uploaded_by_user_name": "<string>",
          "version": 0
        }
      ],
      "activity": [
        {
          "id": "<string>",
          "onboarding_id": "<string>",
          "gate_definition_id": "mon_rfi",
          "actor_user_name": "<string>",
          "actor_org_name": "<string>",
          "event_type": "onboarding_created",
          "note": "<string>",
          "created_at": "<string>"
        }
      ],
      "internal_tracker": {
        "tasks": [
          {
            "id": "<string>",
            "title": "<string>",
            "description": "<string>",
            "status": "open",
            "category": "<string>",
            "template_key": "<string>",
            "due_date": "<string>",
            "created_by_user_name": "<string>",
            "created_at": "<string>",
            "updated_at": "<string>",
            "completed_at": "<string>"
          }
        ],
        "open_points": [
          {
            "id": "<string>",
            "title": "<string>",
            "status": "open",
            "ref": {
              "kind": "<string>",
              "gate_definition_id": "mon_rfi"
            },
            "comments": [
              {
                "id": "<string>",
                "author_user_name": "<string>",
                "author_org_name": "<string>",
                "author_side": "ebx",
                "created_at": "<string>",
                "body": "<string>"
              }
            ],
            "created_by_user_name": "<string>",
            "created_at": "<string>",
            "updated_at": "<string>",
            "resolved_at": "<string>"
          }
        ],
        "applied_templates": [
          "<string>"
        ]
      }
    }
  ]
}
Can raise
  • 401no valid token
  • 403scope missing
  • 422validation failed
  • 429rate limited
ALL CODES →
POST/v1/onboardings

Create an onboarding workflow

onboarding.write

Creates a version-pinned onboarding workflow for a new asset. The service stores the selected process definition, creates all gates, starts the first gate, initializes gate payloads such as RFI/DPL data where applicable, and records the initial activity log entries. Organization writers create onboardings for their own organization; EBX writers may select any registered organization.

Request body · required

asset_nameREQUIRED
string
locationREQUIRED
string
countryREQUIRED
string
tso
stringControl area, canonical TSO short id (e.g. 50HZ)
integration_typeREQUIRED
enummonitoring_onlyfull_control
target_hc_dateREQUIRED
string<date>
asset_owner_org_idREQUIRED
string
asset_owner_org_nameREQUIRED
string
asset_owner_contact
object
asset_id
string
register_asset
booleandefault falseCreate and atomically link the onboarding stub asset. Mutually exclusive with asset_id.
partners
array[object]
whitelabel
booleandefault falseBrand the external onboarding surface with the owner org's branding. Requires branding to be configured for the org.
Example value
curl -X POST "https://api.ebx.energy/v1/onboardings" \
  -H "Authorization: Bearer $EBX_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"asset_name":"<string>","location":"<string>","country":"<string>","tso":"<string>","integration_type":"monitoring_only","target_hc_date":"2026-01-01","asset_owner_org_id":"<string>","asset_owner_org_name":"<string>","asset_owner_contact":{"contact_name":"<string>","contact_email":"name@example.com"},"asset_id":"<string>","register_asset":false,"partners":[{"role":"epc","org_name":"<string>","contact_name":"<string>","contact_email":"name@example.com"}],"whitelabel":false}'
Example response201
{
  "id": "<string>",
  "asset_id": "<string>",
  "asset_name": "<string>",
  "location": "<string>",
  "country": "<string>",
  "tso": "<string>",
  "integration_type": "monitoring_only",
  "target_hc_date": "2026-01-01",
  "current_gate_definition_id": "mon_rfi",
  "overall_status": "in_progress",
  "asset_owner_org_id": "<string>",
  "asset_owner_org_name": "<string>",
  "whitelabel": false,
  "process_definition": {
    "id": "<string>",
    "integration_type": "monitoring_only",
    "version": "<string>",
    "source_label": "<string>",
    "gate_sequence": [
      "mon_rfi"
    ],
    "gate_definitions": "<string>",
    "process_document_slots": [
      {
        "document_type": "installation_photo_mdevice",
        "label": "<string>",
        "description": "<string>",
        "required": false,
        "allow_multiple": false
      }
    ],
    "asset_profile_sync_gate_id": "mon_rfi",
    "schema_version": 0
  },
  "gate_definitions": "<string>",
  "asset_profile": {
    "id": "<string>",
    "onboarding_id": "<string>",
    "asset_id": "<string>",
    "asset_name": "<string>",
    "location": "<string>",
    "country": "<string>",
    "asset_owner_org_id": "<string>",
    "asset_owner_org_name": "<string>",
    "shipping_address": {
      "street": "<string>",
      "postal_code": "<string>",
      "city": "<string>",
      "country": "<string>",
      "attention": "<string>"
    },
    "site_contact": {
      "name": "<string>",
      "email": "name@example.com",
      "phone": "<string>"
    },
    "power_supply": "24v_dc",
    "ethernet_available": false,
    "antenna_location_outdoors": false,
    "ems_vendor": "<string>",
    "ems_vendor_other": "<string>",
    "ems_supports_modbus_tcp": false,
    "pq_submission_targeted": false,
    "ems_technical_contact": {
      "name": "<string>",
      "email": "name@example.com",
      "phone": "<string>"
    },
    "source_gate_definition_id": "mon_rfi",
    "source_gate_passed_at": "<string>",
    "source_gate_updated_at": "<string>",
    "synced_at": "<string>",
    "sync_reason": "<string>"
  },
  "asset_owner_contact": {
    "id": "<string>",
    "contact_name": "<string>",
    "contact_email": "<string>",
    "access": {
      "status": "<string>"
    }
  },
  "asset_owner_contacts": [
    {
      "id": "<string>",
      "contact_name": "<string>",
      "contact_email": "<string>",
      "access": {
        "status": "<string>"
      }
    }
  ],
  "partners": [
    {
      "id": "<string>",
      "role": "epc",
      "org_name": "<string>",
      "contact_name": "<string>",
      "contact_email": "<string>",
      "access": {
        "status": "<string>"
      }
    }
  ],
  "created_at": "<string>",
  "updated_at": "<string>",
  "gates": [
    {
      "id": "<string>",
      "definition_id": "mon_rfi",
      "status": "pending",
      "deadline": "2026-01-01",
      "last_note": "<string>",
      "passed_at": "<string>",
      "passed_by_user_name": "<string>",
      "structured_data": "<string>"
    }
  ],
  "documents": [
    {
      "id": "<string>",
      "onboarding_id": "<string>",
      "gate_definition_id": "mon_rfi",
      "document_type": "installation_photo_mdevice",
      "filename": "<string>",
      "size_bytes": 0,
      "content_type": "<string>",
      "uploaded_at": "<string>",
      "uploaded_by_user_name": "<string>",
      "version": 0
    }
  ],
  "activity": [
    {
      "id": "<string>",
      "onboarding_id": "<string>",
      "gate_definition_id": "mon_rfi",
      "actor_user_name": "<string>",
      "actor_org_name": "<string>",
      "event_type": "onboarding_created",
      "note": "<string>",
      "created_at": "<string>"
    }
  ],
  "internal_tracker": {
    "tasks": [
      {
        "id": "<string>",
        "title": "<string>",
        "description": "<string>",
        "status": "open",
        "category": "<string>",
        "template_key": "<string>",
        "due_date": "<string>",
        "created_by_user_name": "<string>",
        "created_at": "<string>",
        "updated_at": "<string>",
        "completed_at": "<string>"
      }
    ],
    "open_points": [
      {
        "id": "<string>",
        "title": "<string>",
        "status": "open",
        "ref": {
          "kind": "<string>",
          "gate_definition_id": "mon_rfi"
        },
        "comments": [
          {
            "id": "<string>",
            "author_user_name": "<string>",
            "author_org_name": "<string>",
            "author_side": "ebx",
            "created_at": "<string>",
            "body": "<string>"
          }
        ],
        "created_by_user_name": "<string>",
        "created_at": "<string>",
        "updated_at": "<string>",
        "resolved_at": "<string>"
      }
    ],
    "applied_templates": [
      "<string>"
    ]
  }
}
Can raise
  • 400malformed request
  • 401no valid token
  • 403scope missing
  • 409state conflict
  • 422validation failed
  • 429rate limited
ALL CODES →
GET/v1/onboardings/{onboarding_id}

Get onboarding details

onboarding.read

Returns the complete onboarding state for a visible onboarding, including the persisted process definition, current gate states, partner assignments, document metadata, activity log, DPL discussions, and synced asset profile when available.

Path parameters

onboarding_idREQUIRED
string<uuid>Stable onboarding identifier returned by create and list operations.
Example value
curl "https://api.ebx.energy/v1/onboardings/00000000-0000-0000-0000-000000000000" \
  -H "Authorization: Bearer $EBX_TOKEN"
Example response200
{
  "id": "<string>",
  "asset_id": "<string>",
  "asset_name": "<string>",
  "location": "<string>",
  "country": "<string>",
  "tso": "<string>",
  "integration_type": "monitoring_only",
  "target_hc_date": "2026-01-01",
  "current_gate_definition_id": "mon_rfi",
  "overall_status": "in_progress",
  "asset_owner_org_id": "<string>",
  "asset_owner_org_name": "<string>",
  "whitelabel": false,
  "process_definition": {
    "id": "<string>",
    "integration_type": "monitoring_only",
    "version": "<string>",
    "source_label": "<string>",
    "gate_sequence": [
      "mon_rfi"
    ],
    "gate_definitions": "<string>",
    "process_document_slots": [
      {
        "document_type": "installation_photo_mdevice",
        "label": "<string>",
        "description": "<string>",
        "required": false,
        "allow_multiple": false
      }
    ],
    "asset_profile_sync_gate_id": "mon_rfi",
    "schema_version": 0
  },
  "gate_definitions": "<string>",
  "asset_profile": {
    "id": "<string>",
    "onboarding_id": "<string>",
    "asset_id": "<string>",
    "asset_name": "<string>",
    "location": "<string>",
    "country": "<string>",
    "asset_owner_org_id": "<string>",
    "asset_owner_org_name": "<string>",
    "shipping_address": {
      "street": "<string>",
      "postal_code": "<string>",
      "city": "<string>",
      "country": "<string>",
      "attention": "<string>"
    },
    "site_contact": {
      "name": "<string>",
      "email": "name@example.com",
      "phone": "<string>"
    },
    "power_supply": "24v_dc",
    "ethernet_available": false,
    "antenna_location_outdoors": false,
    "ems_vendor": "<string>",
    "ems_vendor_other": "<string>",
    "ems_supports_modbus_tcp": false,
    "pq_submission_targeted": false,
    "ems_technical_contact": {
      "name": "<string>",
      "email": "name@example.com",
      "phone": "<string>"
    },
    "source_gate_definition_id": "mon_rfi",
    "source_gate_passed_at": "<string>",
    "source_gate_updated_at": "<string>",
    "synced_at": "<string>",
    "sync_reason": "<string>"
  },
  "asset_owner_contact": {
    "id": "<string>",
    "contact_name": "<string>",
    "contact_email": "<string>",
    "access": {
      "status": "<string>"
    }
  },
  "asset_owner_contacts": [
    {
      "id": "<string>",
      "contact_name": "<string>",
      "contact_email": "<string>",
      "access": {
        "status": "<string>"
      }
    }
  ],
  "partners": [
    {
      "id": "<string>",
      "role": "epc",
      "org_name": "<string>",
      "contact_name": "<string>",
      "contact_email": "<string>",
      "access": {
        "status": "<string>"
      }
    }
  ],
  "created_at": "<string>",
  "updated_at": "<string>",
  "gates": [
    {
      "id": "<string>",
      "definition_id": "mon_rfi",
      "status": "pending",
      "deadline": "2026-01-01",
      "last_note": "<string>",
      "passed_at": "<string>",
      "passed_by_user_name": "<string>",
      "structured_data": "<string>"
    }
  ],
  "documents": [
    {
      "id": "<string>",
      "onboarding_id": "<string>",
      "gate_definition_id": "mon_rfi",
      "document_type": "installation_photo_mdevice",
      "filename": "<string>",
      "size_bytes": 0,
      "content_type": "<string>",
      "uploaded_at": "<string>",
      "uploaded_by_user_name": "<string>",
      "version": 0
    }
  ],
  "activity": [
    {
      "id": "<string>",
      "onboarding_id": "<string>",
      "gate_definition_id": "mon_rfi",
      "actor_user_name": "<string>",
      "actor_org_name": "<string>",
      "event_type": "onboarding_created",
      "note": "<string>",
      "created_at": "<string>"
    }
  ],
  "internal_tracker": {
    "tasks": [
      {
        "id": "<string>",
        "title": "<string>",
        "description": "<string>",
        "status": "open",
        "category": "<string>",
        "template_key": "<string>",
        "due_date": "<string>",
        "created_by_user_name": "<string>",
        "created_at": "<string>",
        "updated_at": "<string>",
        "completed_at": "<string>"
      }
    ],
    "open_points": [
      {
        "id": "<string>",
        "title": "<string>",
        "status": "open",
        "ref": {
          "kind": "<string>",
          "gate_definition_id": "mon_rfi"
        },
        "comments": [
          {
            "id": "<string>",
            "author_user_name": "<string>",
            "author_org_name": "<string>",
            "author_side": "ebx",
            "created_at": "<string>",
            "body": "<string>"
          }
        ],
        "created_by_user_name": "<string>",
        "created_at": "<string>",
        "updated_at": "<string>",
        "resolved_at": "<string>"
      }
    ],
    "applied_templates": [
      "<string>"
    ]
  }
}
Can raise
  • 401no valid token
  • 403scope missing
  • 404unknown or not visible
  • 429rate limited
ALL CODES →
PATCH/v1/onboardings/{onboarding_id}

Update onboarding metadata

onboarding.write

Updates onboarding metadata within the caller's authorized organization. Changing the target HC date recalculates gate deadlines from the persisted process definition. Changing the asset id updates the synced asset profile identity when a profile already exists.

Path parameters

onboarding_idREQUIRED
string<uuid>Stable onboarding identifier returned by create and list operations.

Request body · required

target_hc_date
string<date>
asset_id
string
Example value
curl -X PATCH "https://api.ebx.energy/v1/onboardings/00000000-0000-0000-0000-000000000000" \
  -H "Authorization: Bearer $EBX_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"target_hc_date":"2026-01-01","asset_id":"<string>"}'
Example response200
{
  "id": "<string>",
  "asset_id": "<string>",
  "asset_name": "<string>",
  "location": "<string>",
  "country": "<string>",
  "tso": "<string>",
  "integration_type": "monitoring_only",
  "target_hc_date": "2026-01-01",
  "current_gate_definition_id": "mon_rfi",
  "overall_status": "in_progress",
  "asset_owner_org_id": "<string>",
  "asset_owner_org_name": "<string>",
  "whitelabel": false,
  "process_definition": {
    "id": "<string>",
    "integration_type": "monitoring_only",
    "version": "<string>",
    "source_label": "<string>",
    "gate_sequence": [
      "mon_rfi"
    ],
    "gate_definitions": "<string>",
    "process_document_slots": [
      {
        "document_type": "installation_photo_mdevice",
        "label": "<string>",
        "description": "<string>",
        "required": false,
        "allow_multiple": false
      }
    ],
    "asset_profile_sync_gate_id": "mon_rfi",
    "schema_version": 0
  },
  "gate_definitions": "<string>",
  "asset_profile": {
    "id": "<string>",
    "onboarding_id": "<string>",
    "asset_id": "<string>",
    "asset_name": "<string>",
    "location": "<string>",
    "country": "<string>",
    "asset_owner_org_id": "<string>",
    "asset_owner_org_name": "<string>",
    "shipping_address": {
      "street": "<string>",
      "postal_code": "<string>",
      "city": "<string>",
      "country": "<string>",
      "attention": "<string>"
    },
    "site_contact": {
      "name": "<string>",
      "email": "name@example.com",
      "phone": "<string>"
    },
    "power_supply": "24v_dc",
    "ethernet_available": false,
    "antenna_location_outdoors": false,
    "ems_vendor": "<string>",
    "ems_vendor_other": "<string>",
    "ems_supports_modbus_tcp": false,
    "pq_submission_targeted": false,
    "ems_technical_contact": {
      "name": "<string>",
      "email": "name@example.com",
      "phone": "<string>"
    },
    "source_gate_definition_id": "mon_rfi",
    "source_gate_passed_at": "<string>",
    "source_gate_updated_at": "<string>",
    "synced_at": "<string>",
    "sync_reason": "<string>"
  },
  "asset_owner_contact": {
    "id": "<string>",
    "contact_name": "<string>",
    "contact_email": "<string>",
    "access": {
      "status": "<string>"
    }
  },
  "asset_owner_contacts": [
    {
      "id": "<string>",
      "contact_name": "<string>",
      "contact_email": "<string>",
      "access": {
        "status": "<string>"
      }
    }
  ],
  "partners": [
    {
      "id": "<string>",
      "role": "epc",
      "org_name": "<string>",
      "contact_name": "<string>",
      "contact_email": "<string>",
      "access": {
        "status": "<string>"
      }
    }
  ],
  "created_at": "<string>",
  "updated_at": "<string>",
  "gates": [
    {
      "id": "<string>",
      "definition_id": "mon_rfi",
      "status": "pending",
      "deadline": "2026-01-01",
      "last_note": "<string>",
      "passed_at": "<string>",
      "passed_by_user_name": "<string>",
      "structured_data": "<string>"
    }
  ],
  "documents": [
    {
      "id": "<string>",
      "onboarding_id": "<string>",
      "gate_definition_id": "mon_rfi",
      "document_type": "installation_photo_mdevice",
      "filename": "<string>",
      "size_bytes": 0,
      "content_type": "<string>",
      "uploaded_at": "<string>",
      "uploaded_by_user_name": "<string>",
      "version": 0
    }
  ],
  "activity": [
    {
      "id": "<string>",
      "onboarding_id": "<string>",
      "gate_definition_id": "mon_rfi",
      "actor_user_name": "<string>",
      "actor_org_name": "<string>",
      "event_type": "onboarding_created",
      "note": "<string>",
      "created_at": "<string>"
    }
  ],
  "internal_tracker": {
    "tasks": [
      {
        "id": "<string>",
        "title": "<string>",
        "description": "<string>",
        "status": "open",
        "category": "<string>",
        "template_key": "<string>",
        "due_date": "<string>",
        "created_by_user_name": "<string>",
        "created_at": "<string>",
        "updated_at": "<string>",
        "completed_at": "<string>"
      }
    ],
    "open_points": [
      {
        "id": "<string>",
        "title": "<string>",
        "status": "open",
        "ref": {
          "kind": "<string>",
          "gate_definition_id": "mon_rfi"
        },
        "comments": [
          {
            "id": "<string>",
            "author_user_name": "<string>",
            "author_org_name": "<string>",
            "author_side": "ebx",
            "created_at": "<string>",
            "body": "<string>"
          }
        ],
        "created_by_user_name": "<string>",
        "created_at": "<string>",
        "updated_at": "<string>",
        "resolved_at": "<string>"
      }
    ],
    "applied_templates": [
      "<string>"
    ]
  }
}
Can raise
  • 400malformed request
  • 401no valid token
  • 403scope missing
  • 404unknown or not visible
  • 409state conflict
  • 422validation failed
  • 429rate limited
ALL CODES →
PATCH/v1/onboardings/{onboarding_id}/asset-owner-contact

Set or edit the asset-owner contact

onboarding.write

Creates or updates the asset-owner contact without sending a magic link. Changing the contact email — or editing a previously revoked contact — resets external access to not_invited and invalidates outstanding magic links; a name-only edit keeps the current access state.

Path parameters

onboarding_idREQUIRED
string<uuid>Stable onboarding identifier returned by create and list operations.

Request body · required

contact_name
string
contact_email
string<email>
Example value
curl -X PATCH "https://api.ebx.energy/v1/onboardings/00000000-0000-0000-0000-000000000000/asset-owner-contact" \
  -H "Authorization: Bearer $EBX_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"contact_name":"<string>","contact_email":"name@example.com"}'
Example response200
{
  "id": "<string>",
  "asset_id": "<string>",
  "asset_name": "<string>",
  "location": "<string>",
  "country": "<string>",
  "tso": "<string>",
  "integration_type": "monitoring_only",
  "target_hc_date": "2026-01-01",
  "current_gate_definition_id": "mon_rfi",
  "overall_status": "in_progress",
  "asset_owner_org_id": "<string>",
  "asset_owner_org_name": "<string>",
  "whitelabel": false,
  "process_definition": {
    "id": "<string>",
    "integration_type": "monitoring_only",
    "version": "<string>",
    "source_label": "<string>",
    "gate_sequence": [
      "mon_rfi"
    ],
    "gate_definitions": "<string>",
    "process_document_slots": [
      {
        "document_type": "installation_photo_mdevice",
        "label": "<string>",
        "description": "<string>",
        "required": false,
        "allow_multiple": false
      }
    ],
    "asset_profile_sync_gate_id": "mon_rfi",
    "schema_version": 0
  },
  "gate_definitions": "<string>",
  "asset_profile": {
    "id": "<string>",
    "onboarding_id": "<string>",
    "asset_id": "<string>",
    "asset_name": "<string>",
    "location": "<string>",
    "country": "<string>",
    "asset_owner_org_id": "<string>",
    "asset_owner_org_name": "<string>",
    "shipping_address": {
      "street": "<string>",
      "postal_code": "<string>",
      "city": "<string>",
      "country": "<string>",
      "attention": "<string>"
    },
    "site_contact": {
      "name": "<string>",
      "email": "name@example.com",
      "phone": "<string>"
    },
    "power_supply": "24v_dc",
    "ethernet_available": false,
    "antenna_location_outdoors": false,
    "ems_vendor": "<string>",
    "ems_vendor_other": "<string>",
    "ems_supports_modbus_tcp": false,
    "pq_submission_targeted": false,
    "ems_technical_contact": {
      "name": "<string>",
      "email": "name@example.com",
      "phone": "<string>"
    },
    "source_gate_definition_id": "mon_rfi",
    "source_gate_passed_at": "<string>",
    "source_gate_updated_at": "<string>",
    "synced_at": "<string>",
    "sync_reason": "<string>"
  },
  "asset_owner_contact": {
    "id": "<string>",
    "contact_name": "<string>",
    "contact_email": "<string>",
    "access": {
      "status": "<string>"
    }
  },
  "asset_owner_contacts": [
    {
      "id": "<string>",
      "contact_name": "<string>",
      "contact_email": "<string>",
      "access": {
        "status": "<string>"
      }
    }
  ],
  "partners": [
    {
      "id": "<string>",
      "role": "epc",
      "org_name": "<string>",
      "contact_name": "<string>",
      "contact_email": "<string>",
      "access": {
        "status": "<string>"
      }
    }
  ],
  "created_at": "<string>",
  "updated_at": "<string>",
  "gates": [
    {
      "id": "<string>",
      "definition_id": "mon_rfi",
      "status": "pending",
      "deadline": "2026-01-01",
      "last_note": "<string>",
      "passed_at": "<string>",
      "passed_by_user_name": "<string>",
      "structured_data": "<string>"
    }
  ],
  "documents": [
    {
      "id": "<string>",
      "onboarding_id": "<string>",
      "gate_definition_id": "mon_rfi",
      "document_type": "installation_photo_mdevice",
      "filename": "<string>",
      "size_bytes": 0,
      "content_type": "<string>",
      "uploaded_at": "<string>",
      "uploaded_by_user_name": "<string>",
      "version": 0
    }
  ],
  "activity": [
    {
      "id": "<string>",
      "onboarding_id": "<string>",
      "gate_definition_id": "mon_rfi",
      "actor_user_name": "<string>",
      "actor_org_name": "<string>",
      "event_type": "onboarding_created",
      "note": "<string>",
      "created_at": "<string>"
    }
  ],
  "internal_tracker": {
    "tasks": [
      {
        "id": "<string>",
        "title": "<string>",
        "description": "<string>",
        "status": "open",
        "category": "<string>",
        "template_key": "<string>",
        "due_date": "<string>",
        "created_by_user_name": "<string>",
        "created_at": "<string>",
        "updated_at": "<string>",
        "completed_at": "<string>"
      }
    ],
    "open_points": [
      {
        "id": "<string>",
        "title": "<string>",
        "status": "open",
        "ref": {
          "kind": "<string>",
          "gate_definition_id": "mon_rfi"
        },
        "comments": [
          {
            "id": "<string>",
            "author_user_name": "<string>",
            "author_org_name": "<string>",
            "author_side": "ebx",
            "created_at": "<string>",
            "body": "<string>"
          }
        ],
        "created_by_user_name": "<string>",
        "created_at": "<string>",
        "updated_at": "<string>",
        "resolved_at": "<string>"
      }
    ],
    "applied_templates": [
      "<string>"
    ]
  }
}
Can raise
  • 400malformed request
  • 401no valid token
  • 403scope missing
  • 404unknown or not visible
  • 409state conflict
  • 422validation failed
  • 429rate limited
ALL CODES →
POST/v1/onboardings/{onboarding_id}/asset-owner/access/revoke

Revoke asset-owner onboarding task access

onboarding.write

Revokes active links, refresh sessions, database access state, and the matching Cognito task-principal group for one asset-owner contact.

Path parameters

onboarding_idREQUIRED
string<uuid>Stable onboarding identifier returned by create and list operations.

Request body · required

contact_name
string
contact_email
string<email>
Example value
curl -X POST "https://api.ebx.energy/v1/onboardings/00000000-0000-0000-0000-000000000000/asset-owner/access/revoke" \
  -H "Authorization: Bearer $EBX_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"contact_name":"<string>","contact_email":"name@example.com"}'
Example response200
{
  "onboarding": {
    "id": "<string>",
    "asset_id": "<string>",
    "asset_name": "<string>",
    "location": "<string>",
    "country": "<string>",
    "tso": "<string>",
    "integration_type": "monitoring_only",
    "target_hc_date": "2026-01-01",
    "current_gate_definition_id": "mon_rfi",
    "overall_status": "in_progress",
    "asset_owner_org_id": "<string>",
    "asset_owner_org_name": "<string>",
    "whitelabel": false,
    "process_definition": {
      "id": "<string>",
      "integration_type": "monitoring_only",
      "version": "<string>",
      "source_label": "<string>",
      "gate_sequence": [
        "mon_rfi"
      ],
      "gate_definitions": "<string>",
      "process_document_slots": [
        {
          "document_type": "installation_photo_mdevice",
          "label": "<string>",
          "description": "<string>",
          "required": false,
          "allow_multiple": false
        }
      ],
      "asset_profile_sync_gate_id": "mon_rfi",
      "schema_version": 0
    },
    "gate_definitions": "<string>",
    "asset_profile": {
      "id": "<string>",
      "onboarding_id": "<string>",
      "asset_id": "<string>",
      "asset_name": "<string>",
      "location": "<string>",
      "country": "<string>",
      "asset_owner_org_id": "<string>",
      "asset_owner_org_name": "<string>",
      "shipping_address": {
        "street": "<string>",
        "postal_code": "<string>",
        "city": "<string>",
        "country": "<string>",
        "attention": "<string>"
      },
      "site_contact": {
        "name": "<string>",
        "email": "name@example.com",
        "phone": "<string>"
      },
      "power_supply": "24v_dc",
      "ethernet_available": false,
      "antenna_location_outdoors": false,
      "ems_vendor": "<string>",
      "ems_vendor_other": "<string>",
      "ems_supports_modbus_tcp": false,
      "pq_submission_targeted": false,
      "ems_technical_contact": {
        "name": "<string>",
        "email": "name@example.com",
        "phone": "<string>"
      },
      "source_gate_definition_id": "mon_rfi",
      "source_gate_passed_at": "<string>",
      "source_gate_updated_at": "<string>",
      "synced_at": "<string>",
      "sync_reason": "<string>"
    },
    "asset_owner_contact": {
      "id": "<string>",
      "contact_name": "<string>",
      "contact_email": "<string>",
      "access": {
        "status": "<string>"
      }
    },
    "asset_owner_contacts": [
      {
        "id": "<string>",
        "contact_name": "<string>",
        "contact_email": "<string>",
        "access": {
          "status": "<string>"
        }
      }
    ],
    "partners": [
      {
        "id": "<string>",
        "role": "epc",
        "org_name": "<string>",
        "contact_name": "<string>",
        "contact_email": "<string>",
        "access": {
          "status": "<string>"
        }
      }
    ],
    "created_at": "<string>",
    "updated_at": "<string>",
    "gates": [
      {
        "id": "<string>",
        "definition_id": "mon_rfi",
        "status": "pending",
        "deadline": "2026-01-01",
        "last_note": "<string>",
        "passed_at": "<string>",
        "passed_by_user_name": "<string>",
        "structured_data": "<string>"
      }
    ],
    "documents": [
      {
        "id": "<string>",
        "onboarding_id": "<string>",
        "gate_definition_id": "mon_rfi",
        "document_type": "installation_photo_mdevice",
        "filename": "<string>",
        "size_bytes": 0,
        "content_type": "<string>",
        "uploaded_at": "<string>",
        "uploaded_by_user_name": "<string>",
        "version": 0
      }
    ],
    "activity": [
      {
        "id": "<string>",
        "onboarding_id": "<string>",
        "gate_definition_id": "mon_rfi",
        "actor_user_name": "<string>",
        "actor_org_name": "<string>",
        "event_type": "onboarding_created",
        "note": "<string>",
        "created_at": "<string>"
      }
    ],
    "internal_tracker": {
      "tasks": [
        {
          "id": "<string>",
          "title": "<string>",
          "description": "<string>",
          "status": "open",
          "category": "<string>",
          "template_key": "<string>",
          "due_date": "<string>",
          "created_by_user_name": "<string>",
          "created_at": "<string>",
          "updated_at": "<string>",
          "completed_at": "<string>"
        }
      ],
      "open_points": [
        {
          "id": "<string>",
          "title": "<string>",
          "status": "open",
          "ref": {
            "kind": "<string>",
            "gate_definition_id": "mon_rfi"
          },
          "comments": [
            {
              "id": "<string>",
              "author_user_name": "<string>",
              "author_org_name": "<string>",
              "author_side": "ebx",
              "created_at": "<string>",
              "body": "<string>"
            }
          ],
          "created_by_user_name": "<string>",
          "created_at": "<string>",
          "updated_at": "<string>",
          "resolved_at": "<string>"
        }
      ],
      "applied_templates": [
        "<string>"
      ]
    }
  },
  "revoked_link_count": 0,
  "revoked_session_count": 0
}
Can raise
  • 400malformed request
  • 401no valid token
  • 403scope missing
  • 404unknown or not visible
  • 409state conflict
  • 422validation failed
  • 429rate limited
ALL CODES →
POST/v1/onboardings/{onboarding_id}/asset-owner/magic-link

Send an asset-owner onboarding magic link

onboarding.write

Creates a six-month reusable magic link for the asset-owner site-readiness task and sends it to the contact email.

Path parameters

onboarding_idREQUIRED
string<uuid>Stable onboarding identifier returned by create and list operations.

Request body · required

language
enumdeen
email_template
object
contact_name
string
contact_email
string<email>
Example value
curl -X POST "https://api.ebx.energy/v1/onboardings/00000000-0000-0000-0000-000000000000/asset-owner/magic-link" \
  -H "Authorization: Bearer $EBX_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"language":"de","email_template":{"subject":"<string>","greeting":"<string>","body":"<string>","button_label":"<string>","fallback_text":"<string>","signature":"<string>","generated":"<string>"},"contact_name":"<string>","contact_email":"name@example.com"}'
Example response200
{
  "onboarding": {
    "id": "<string>",
    "asset_id": "<string>",
    "asset_name": "<string>",
    "location": "<string>",
    "country": "<string>",
    "tso": "<string>",
    "integration_type": "monitoring_only",
    "target_hc_date": "2026-01-01",
    "current_gate_definition_id": "mon_rfi",
    "overall_status": "in_progress",
    "asset_owner_org_id": "<string>",
    "asset_owner_org_name": "<string>",
    "whitelabel": false,
    "process_definition": {
      "id": "<string>",
      "integration_type": "monitoring_only",
      "version": "<string>",
      "source_label": "<string>",
      "gate_sequence": [
        "mon_rfi"
      ],
      "gate_definitions": "<string>",
      "process_document_slots": [
        {
          "document_type": "installation_photo_mdevice",
          "label": "<string>",
          "description": "<string>",
          "required": false,
          "allow_multiple": false
        }
      ],
      "asset_profile_sync_gate_id": "mon_rfi",
      "schema_version": 0
    },
    "gate_definitions": "<string>",
    "asset_profile": {
      "id": "<string>",
      "onboarding_id": "<string>",
      "asset_id": "<string>",
      "asset_name": "<string>",
      "location": "<string>",
      "country": "<string>",
      "asset_owner_org_id": "<string>",
      "asset_owner_org_name": "<string>",
      "shipping_address": {
        "street": "<string>",
        "postal_code": "<string>",
        "city": "<string>",
        "country": "<string>",
        "attention": "<string>"
      },
      "site_contact": {
        "name": "<string>",
        "email": "name@example.com",
        "phone": "<string>"
      },
      "power_supply": "24v_dc",
      "ethernet_available": false,
      "antenna_location_outdoors": false,
      "ems_vendor": "<string>",
      "ems_vendor_other": "<string>",
      "ems_supports_modbus_tcp": false,
      "pq_submission_targeted": false,
      "ems_technical_contact": {
        "name": "<string>",
        "email": "name@example.com",
        "phone": "<string>"
      },
      "source_gate_definition_id": "mon_rfi",
      "source_gate_passed_at": "<string>",
      "source_gate_updated_at": "<string>",
      "synced_at": "<string>",
      "sync_reason": "<string>"
    },
    "asset_owner_contact": {
      "id": "<string>",
      "contact_name": "<string>",
      "contact_email": "<string>",
      "access": {
        "status": "<string>"
      }
    },
    "asset_owner_contacts": [
      {
        "id": "<string>",
        "contact_name": "<string>",
        "contact_email": "<string>",
        "access": {
          "status": "<string>"
        }
      }
    ],
    "partners": [
      {
        "id": "<string>",
        "role": "epc",
        "org_name": "<string>",
        "contact_name": "<string>",
        "contact_email": "<string>",
        "access": {
          "status": "<string>"
        }
      }
    ],
    "created_at": "<string>",
    "updated_at": "<string>",
    "gates": [
      {
        "id": "<string>",
        "definition_id": "mon_rfi",
        "status": "pending",
        "deadline": "2026-01-01",
        "last_note": "<string>",
        "passed_at": "<string>",
        "passed_by_user_name": "<string>",
        "structured_data": "<string>"
      }
    ],
    "documents": [
      {
        "id": "<string>",
        "onboarding_id": "<string>",
        "gate_definition_id": "mon_rfi",
        "document_type": "installation_photo_mdevice",
        "filename": "<string>",
        "size_bytes": 0,
        "content_type": "<string>",
        "uploaded_at": "<string>",
        "uploaded_by_user_name": "<string>",
        "version": 0
      }
    ],
    "activity": [
      {
        "id": "<string>",
        "onboarding_id": "<string>",
        "gate_definition_id": "mon_rfi",
        "actor_user_name": "<string>",
        "actor_org_name": "<string>",
        "event_type": "onboarding_created",
        "note": "<string>",
        "created_at": "<string>"
      }
    ],
    "internal_tracker": {
      "tasks": [
        {
          "id": "<string>",
          "title": "<string>",
          "description": "<string>",
          "status": "open",
          "category": "<string>",
          "template_key": "<string>",
          "due_date": "<string>",
          "created_by_user_name": "<string>",
          "created_at": "<string>",
          "updated_at": "<string>",
          "completed_at": "<string>"
        }
      ],
      "open_points": [
        {
          "id": "<string>",
          "title": "<string>",
          "status": "open",
          "ref": {
            "kind": "<string>",
            "gate_definition_id": "mon_rfi"
          },
          "comments": [
            {
              "id": "<string>",
              "author_user_name": "<string>",
              "author_org_name": "<string>",
              "author_side": "ebx",
              "created_at": "<string>",
              "body": "<string>"
            }
          ],
          "created_by_user_name": "<string>",
          "created_at": "<string>",
          "updated_at": "<string>",
          "resolved_at": "<string>"
        }
      ],
      "applied_templates": [
        "<string>"
      ]
    }
  },
  "dev_magic_link": "<string>"
}
Can raise
  • 400malformed request
  • 401no valid token
  • 403scope missing
  • 404unknown or not visible
  • 409state conflict
  • 422validation failed
  • 429rate limited
ALL CODES →
POST/v1/onboardings/{onboarding_id}/asset-owner/magic-link/revoke

Revoke active asset-owner onboarding magic links

onboarding.write

Revokes active reusable magic links and refresh sessions for one asset-owner contact without revoking future access.

Path parameters

onboarding_idREQUIRED
string<uuid>Stable onboarding identifier returned by create and list operations.

Request body · required

contact_name
string
contact_email
string<email>
Example value
curl -X POST "https://api.ebx.energy/v1/onboardings/00000000-0000-0000-0000-000000000000/asset-owner/magic-link/revoke" \
  -H "Authorization: Bearer $EBX_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"contact_name":"<string>","contact_email":"name@example.com"}'
Example response200
{
  "onboarding": {
    "id": "<string>",
    "asset_id": "<string>",
    "asset_name": "<string>",
    "location": "<string>",
    "country": "<string>",
    "tso": "<string>",
    "integration_type": "monitoring_only",
    "target_hc_date": "2026-01-01",
    "current_gate_definition_id": "mon_rfi",
    "overall_status": "in_progress",
    "asset_owner_org_id": "<string>",
    "asset_owner_org_name": "<string>",
    "whitelabel": false,
    "process_definition": {
      "id": "<string>",
      "integration_type": "monitoring_only",
      "version": "<string>",
      "source_label": "<string>",
      "gate_sequence": [
        "mon_rfi"
      ],
      "gate_definitions": "<string>",
      "process_document_slots": [
        {
          "document_type": "installation_photo_mdevice",
          "label": "<string>",
          "description": "<string>",
          "required": false,
          "allow_multiple": false
        }
      ],
      "asset_profile_sync_gate_id": "mon_rfi",
      "schema_version": 0
    },
    "gate_definitions": "<string>",
    "asset_profile": {
      "id": "<string>",
      "onboarding_id": "<string>",
      "asset_id": "<string>",
      "asset_name": "<string>",
      "location": "<string>",
      "country": "<string>",
      "asset_owner_org_id": "<string>",
      "asset_owner_org_name": "<string>",
      "shipping_address": {
        "street": "<string>",
        "postal_code": "<string>",
        "city": "<string>",
        "country": "<string>",
        "attention": "<string>"
      },
      "site_contact": {
        "name": "<string>",
        "email": "name@example.com",
        "phone": "<string>"
      },
      "power_supply": "24v_dc",
      "ethernet_available": false,
      "antenna_location_outdoors": false,
      "ems_vendor": "<string>",
      "ems_vendor_other": "<string>",
      "ems_supports_modbus_tcp": false,
      "pq_submission_targeted": false,
      "ems_technical_contact": {
        "name": "<string>",
        "email": "name@example.com",
        "phone": "<string>"
      },
      "source_gate_definition_id": "mon_rfi",
      "source_gate_passed_at": "<string>",
      "source_gate_updated_at": "<string>",
      "synced_at": "<string>",
      "sync_reason": "<string>"
    },
    "asset_owner_contact": {
      "id": "<string>",
      "contact_name": "<string>",
      "contact_email": "<string>",
      "access": {
        "status": "<string>"
      }
    },
    "asset_owner_contacts": [
      {
        "id": "<string>",
        "contact_name": "<string>",
        "contact_email": "<string>",
        "access": {
          "status": "<string>"
        }
      }
    ],
    "partners": [
      {
        "id": "<string>",
        "role": "epc",
        "org_name": "<string>",
        "contact_name": "<string>",
        "contact_email": "<string>",
        "access": {
          "status": "<string>"
        }
      }
    ],
    "created_at": "<string>",
    "updated_at": "<string>",
    "gates": [
      {
        "id": "<string>",
        "definition_id": "mon_rfi",
        "status": "pending",
        "deadline": "2026-01-01",
        "last_note": "<string>",
        "passed_at": "<string>",
        "passed_by_user_name": "<string>",
        "structured_data": "<string>"
      }
    ],
    "documents": [
      {
        "id": "<string>",
        "onboarding_id": "<string>",
        "gate_definition_id": "mon_rfi",
        "document_type": "installation_photo_mdevice",
        "filename": "<string>",
        "size_bytes": 0,
        "content_type": "<string>",
        "uploaded_at": "<string>",
        "uploaded_by_user_name": "<string>",
        "version": 0
      }
    ],
    "activity": [
      {
        "id": "<string>",
        "onboarding_id": "<string>",
        "gate_definition_id": "mon_rfi",
        "actor_user_name": "<string>",
        "actor_org_name": "<string>",
        "event_type": "onboarding_created",
        "note": "<string>",
        "created_at": "<string>"
      }
    ],
    "internal_tracker": {
      "tasks": [
        {
          "id": "<string>",
          "title": "<string>",
          "description": "<string>",
          "status": "open",
          "category": "<string>",
          "template_key": "<string>",
          "due_date": "<string>",
          "created_by_user_name": "<string>",
          "created_at": "<string>",
          "updated_at": "<string>",
          "completed_at": "<string>"
        }
      ],
      "open_points": [
        {
          "id": "<string>",
          "title": "<string>",
          "status": "open",
          "ref": {
            "kind": "<string>",
            "gate_definition_id": "mon_rfi"
          },
          "comments": [
            {
              "id": "<string>",
              "author_user_name": "<string>",
              "author_org_name": "<string>",
              "author_side": "ebx",
              "created_at": "<string>",
              "body": "<string>"
            }
          ],
          "created_by_user_name": "<string>",
          "created_at": "<string>",
          "updated_at": "<string>",
          "resolved_at": "<string>"
        }
      ],
      "applied_templates": [
        "<string>"
      ]
    }
  },
  "revoked_link_count": 0,
  "revoked_session_count": 0
}
Can raise
  • 400malformed request
  • 401no valid token
  • 403scope missing
  • 404unknown or not visible
  • 409state conflict
  • 422validation failed
  • 429rate limited
ALL CODES →
GET/v1/onboardings/{onboarding_id}/betriebsfahrt

Betriebsfahrt status of the onboarding

onboarding.read

The milestone's poll target: whether the automated Betriebsfahrt is available, which preconditions still fail, the plan defaults and the session being worked on.

Path parameters

onboarding_idREQUIRED
string<uuid>Stable onboarding identifier.
Example value
curl "https://api.ebx.energy/v1/onboardings/00000000-0000-0000-0000-000000000000/betriebsfahrt" \
  -H "Authorization: Bearer $EBX_TOKEN"
Example response200
{
  "enabled": false,
  "server_now": "2026-09-10T13:30:00Z",
  "preconditions": [
    {
      "key": "<string>",
      "label": "<string>",
      "status": "ok",
      "detail": "<string>"
    }
  ],
  "can_create_session": false,
  "defaults": {
    "first_direction": "positive",
    "extended_stroke_minutes": 0,
    "extended_stroke_min_minutes": 0,
    "extended_stroke_max_minutes": 0,
    "second_run_extended_stroke_minutes": 0,
    "planned_start": "2026-09-10T13:30:00Z"
  },
  "session": {
    "id": "<string>",
    "onboarding_id": "<string>",
    "asset_id": "<string>",
    "status": "draft",
    "execution_mode": "real",
    "supersedes_session_id": "<string>",
    "parameters": {
      "first_direction": "positive",
      "single_direction": false,
      "extended_stroke_minutes": 0,
      "extended_stroke_min_minutes": 0,
      "extended_stroke_max_minutes": 0,
      "second_run_extended_stroke_minutes": 0,
      "capacity_mw": {
        "positive": "<string>",
        "negative": "<string>"
      },
      "products": {
        "positive": [
          "<string>"
        ],
        "negative": [
          "<string>"
        ]
      },
      "product_capacity_mw": "<string>",
      "usable_energy_mwh": "<string>",
      "energy_safety_margin": "<string>",
      "energy_per_run_mwh": {
        "positive": "<string>",
        "negative": "<string>"
      },
      "ramp_mw_per_s": {
        "positive": "<string>",
        "negative": "<string>"
      },
      "fcr_ramp_required_mw_per_s": {
        "positive": "<string>",
        "negative": "<string>"
      },
      "measurement_point": "<string>",
      "retention_minutes": 0,
      "stroke_minutes": 0
    },
    "findings": [
      {
        "code": "<string>",
        "severity": "blocker",
        "message": "<string>"
      }
    ],
    "planned_start": "2026-09-10T13:30:00Z",
    "planned_end": "2026-09-10T13:30:00Z",
    "plan_sha256": "<string>",
    "plan": "<string>",
    "runs": [
      {
        "index": 0,
        "direction": "positive",
        "products": [
          "<string>"
        ],
        "requested_capacity_mw": "<string>",
        "phases": [
          {
            "index": 0,
            "kind": "retention",
            "start": "2026-09-10T13:30:00Z",
            "end": "2026-09-10T13:30:00Z",
            "setpoint_mw": "<string>",
            "window_id": "<string>",
            "actual_start": "2026-09-10T13:30:00Z",
            "actual_end": "2026-09-10T13:30:00Z"
          }
        ],
        "status": "pending",
        "follow_checks": [
          {
            "phase_index": 0,
            "checked_at": "2026-09-10T13:30:00Z",
            "expected_mw": "<string>",
            "measured_mw": "<string>",
            "passed": false,
            "detail": "<string>"
          }
        ],
        "proofs": "<string>",
        "uploads": "<string>",
        "verdicts": "<string>",
        "overrides": [
          {
            "product": "<string>",
            "reason": "<string>",
            "by_user_id": "<string>",
            "by_user_name": "<string>",
            "at": "2026-09-10T13:30:00Z"
          }
        ],
        "error": "<string>",
        "actual_start": "2026-09-10T13:30:00Z",
        "actual_end": "2026-09-10T13:30:00Z"
      }
    ],
    "driver": {
      "request_id": "<string>",
      "run_id": "<string>",
      "status": "<string>",
      "journal_written_at": "2026-09-10T13:30:00Z",
      "tracking_source": "<string>",
      "events": [
        "<string>"
      ]
    },
    "progress": {
      "current_run_index": 0,
      "current_phase_index": 0,
      "confidence": "confirmed",
      "remaining_seconds": 0
    },
    "actual_start": "2026-09-10T13:30:00Z",
    "actual_end": "2026-09-10T13:30:00Z",
    "confirmed_by_user_name": "<string>",
    "confirmed_at": "2026-09-10T13:30:00Z",
    "aborted_at": "2026-09-10T13:30:00Z",
    "abort_reason": "<string>",
    "last_error": "<string>",
    "last_error_at": "2026-09-10T13:30:00Z",
    "row_version": 0,
    "created_at": "2026-09-10T13:30:00Z",
    "updated_at": "2026-09-10T13:30:00Z"
  },
  "history_count": 0
}
Can raise
  • 401no valid token
  • 403scope missing
  • 404unknown or not visible
  • 429rate limited
ALL CODES →
GET/v1/onboardings/{onboarding_id}/betriebsfahrt/sessions

Betriebsfahrt session history

onboarding.read

Every session of the onboarding, newest first, including superseded and ended ones.

Path parameters

onboarding_idREQUIRED
string<uuid>Stable onboarding identifier.
Example value
curl "https://api.ebx.energy/v1/onboardings/00000000-0000-0000-0000-000000000000/betriebsfahrt/sessions" \
  -H "Authorization: Bearer $EBX_TOKEN"
Example response200
[
  {
    "id": "<string>",
    "onboarding_id": "<string>",
    "asset_id": "<string>",
    "status": "draft",
    "execution_mode": "real",
    "supersedes_session_id": "<string>",
    "parameters": {
      "first_direction": "positive",
      "single_direction": false,
      "extended_stroke_minutes": 0,
      "extended_stroke_min_minutes": 0,
      "extended_stroke_max_minutes": 0,
      "second_run_extended_stroke_minutes": 0,
      "capacity_mw": {
        "positive": "<string>",
        "negative": "<string>"
      },
      "products": {
        "positive": [
          "<string>"
        ],
        "negative": [
          "<string>"
        ]
      },
      "product_capacity_mw": "<string>",
      "usable_energy_mwh": "<string>",
      "energy_safety_margin": "<string>",
      "energy_per_run_mwh": {
        "positive": "<string>",
        "negative": "<string>"
      },
      "ramp_mw_per_s": {
        "positive": "<string>",
        "negative": "<string>"
      },
      "fcr_ramp_required_mw_per_s": {
        "positive": "<string>",
        "negative": "<string>"
      },
      "measurement_point": "<string>",
      "retention_minutes": 0,
      "stroke_minutes": 0
    },
    "findings": [
      {
        "code": "<string>",
        "severity": "blocker",
        "message": "<string>"
      }
    ],
    "planned_start": "2026-09-10T13:30:00Z",
    "planned_end": "2026-09-10T13:30:00Z",
    "plan_sha256": "<string>",
    "plan": "<string>",
    "runs": [
      {
        "index": 0,
        "direction": "positive",
        "products": [
          "<string>"
        ],
        "requested_capacity_mw": "<string>",
        "phases": [
          {
            "index": 0,
            "kind": "retention",
            "start": "2026-09-10T13:30:00Z",
            "end": "2026-09-10T13:30:00Z",
            "setpoint_mw": "<string>",
            "window_id": "<string>",
            "actual_start": "2026-09-10T13:30:00Z",
            "actual_end": "2026-09-10T13:30:00Z"
          }
        ],
        "status": "pending",
        "follow_checks": [
          {
            "phase_index": 0,
            "checked_at": "2026-09-10T13:30:00Z",
            "expected_mw": "<string>",
            "measured_mw": "<string>",
            "passed": false,
            "detail": "<string>"
          }
        ],
        "proofs": "<string>",
        "uploads": "<string>",
        "verdicts": "<string>",
        "overrides": [
          {
            "product": "<string>",
            "reason": "<string>",
            "by_user_id": "<string>",
            "by_user_name": "<string>",
            "at": "2026-09-10T13:30:00Z"
          }
        ],
        "error": "<string>",
        "actual_start": "2026-09-10T13:30:00Z",
        "actual_end": "2026-09-10T13:30:00Z"
      }
    ],
    "driver": {
      "request_id": "<string>",
      "run_id": "<string>",
      "status": "<string>",
      "journal_written_at": "2026-09-10T13:30:00Z",
      "tracking_source": "<string>",
      "events": [
        "<string>"
      ]
    },
    "progress": {
      "current_run_index": 0,
      "current_phase_index": 0,
      "confidence": "confirmed",
      "remaining_seconds": 0
    },
    "actual_start": "2026-09-10T13:30:00Z",
    "actual_end": "2026-09-10T13:30:00Z",
    "confirmed_by_user_name": "<string>",
    "confirmed_at": "2026-09-10T13:30:00Z",
    "aborted_at": "2026-09-10T13:30:00Z",
    "abort_reason": "<string>",
    "last_error": "<string>",
    "last_error_at": "2026-09-10T13:30:00Z",
    "row_version": 0,
    "created_at": "2026-09-10T13:30:00Z",
    "updated_at": "2026-09-10T13:30:00Z"
  }
]
Can raise
  • 401no valid token
  • 403scope missing
  • 404unknown or not visible
  • 429rate limited
ALL CODES →
POST/v1/onboardings/{onboarding_id}/betriebsfahrt/sessions

Plan a Betriebsfahrt session

onboarding.write

Generates a draft session from the RfI, the PQ profile and the asset: two runs back to back (one per direction), each with three retention phases, two 15-minute delivery strokes and an extended third stroke sized from the usable energy. Replaces an existing draft. Nothing is sent to the asset or the TSO portal until the session is confirmed.

Path parameters

onboarding_idREQUIRED
string<uuid>Stable onboarding identifier.

Request body · required

first_direction
enumpositivenegativeDirection of the first run: positive (discharge) needs a full battery, negative (charge) an empty one. Defaults to positive.
extended_stroke_minutes
integerThe first run's third delivery stroke: a multiple of 15 min within the range the usable energy allows, default the longest. The second run's follows from the energy moved.
planned_start
string<date-time>UTC start of run 1 on a quarter hour; defaults to the next quarter hour after the submission lead time.
single_direction
booleandefault falseDrive the first direction alone (one run instead of two). FCR is symmetric and cannot be proven from a single direction; leave it false to drive both.
execution_mode
enumrealdry_run
Example value
curl -X POST "https://api.ebx.energy/v1/onboardings/00000000-0000-0000-0000-000000000000/betriebsfahrt/sessions" \
  -H "Authorization: Bearer $EBX_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"first_direction":"positive","extended_stroke_minutes":0,"planned_start":"2026-09-10T13:30:00Z","single_direction":false,"execution_mode":"real"}'
Example response201
{
  "id": "<string>",
  "onboarding_id": "<string>",
  "asset_id": "<string>",
  "status": "draft",
  "execution_mode": "real",
  "supersedes_session_id": "<string>",
  "parameters": {
    "first_direction": "positive",
    "single_direction": false,
    "extended_stroke_minutes": 0,
    "extended_stroke_min_minutes": 0,
    "extended_stroke_max_minutes": 0,
    "second_run_extended_stroke_minutes": 0,
    "capacity_mw": {
      "positive": "<string>",
      "negative": "<string>"
    },
    "products": {
      "positive": [
        "<string>"
      ],
      "negative": [
        "<string>"
      ]
    },
    "product_capacity_mw": "<string>",
    "usable_energy_mwh": "<string>",
    "energy_safety_margin": "<string>",
    "energy_per_run_mwh": {
      "positive": "<string>",
      "negative": "<string>"
    },
    "ramp_mw_per_s": {
      "positive": "<string>",
      "negative": "<string>"
    },
    "fcr_ramp_required_mw_per_s": {
      "positive": "<string>",
      "negative": "<string>"
    },
    "measurement_point": "<string>",
    "retention_minutes": 0,
    "stroke_minutes": 0
  },
  "findings": [
    {
      "code": "<string>",
      "severity": "blocker",
      "message": "<string>"
    }
  ],
  "planned_start": "2026-09-10T13:30:00Z",
  "planned_end": "2026-09-10T13:30:00Z",
  "plan_sha256": "<string>",
  "plan": "<string>",
  "runs": [
    {
      "index": 0,
      "direction": "positive",
      "products": [
        "<string>"
      ],
      "requested_capacity_mw": "<string>",
      "phases": [
        {
          "index": 0,
          "kind": "retention",
          "start": "2026-09-10T13:30:00Z",
          "end": "2026-09-10T13:30:00Z",
          "setpoint_mw": "<string>",
          "window_id": "<string>",
          "actual_start": "2026-09-10T13:30:00Z",
          "actual_end": "2026-09-10T13:30:00Z"
        }
      ],
      "status": "pending",
      "follow_checks": [
        {
          "phase_index": 0,
          "checked_at": "2026-09-10T13:30:00Z",
          "expected_mw": "<string>",
          "measured_mw": "<string>",
          "passed": false,
          "detail": "<string>"
        }
      ],
      "proofs": "<string>",
      "uploads": "<string>",
      "verdicts": "<string>",
      "overrides": [
        {
          "product": "<string>",
          "reason": "<string>",
          "by_user_id": "<string>",
          "by_user_name": "<string>",
          "at": "2026-09-10T13:30:00Z"
        }
      ],
      "error": "<string>",
      "actual_start": "2026-09-10T13:30:00Z",
      "actual_end": "2026-09-10T13:30:00Z"
    }
  ],
  "driver": {
    "request_id": "<string>",
    "run_id": "<string>",
    "status": "<string>",
    "journal_written_at": "2026-09-10T13:30:00Z",
    "tracking_source": "<string>",
    "events": [
      "<string>"
    ]
  },
  "progress": {
    "current_run_index": 0,
    "current_phase_index": 0,
    "confidence": "confirmed",
    "remaining_seconds": 0
  },
  "actual_start": "2026-09-10T13:30:00Z",
  "actual_end": "2026-09-10T13:30:00Z",
  "confirmed_by_user_name": "<string>",
  "confirmed_at": "2026-09-10T13:30:00Z",
  "aborted_at": "2026-09-10T13:30:00Z",
  "abort_reason": "<string>",
  "last_error": "<string>",
  "last_error_at": "2026-09-10T13:30:00Z",
  "row_version": 0,
  "created_at": "2026-09-10T13:30:00Z",
  "updated_at": "2026-09-10T13:30:00Z"
}
Can raise
  • 400malformed request
  • 401no valid token
  • 403scope missing
  • 404unknown or not visible
  • 409state conflict
  • 422validation failed
  • 429rate limited
ALL CODES →
GET/v1/onboardings/{onboarding_id}/betriebsfahrt/sessions/{session_id}

Get one Betriebsfahrt session

onboarding.read

Path parameters

onboarding_idREQUIRED
string<uuid>Stable onboarding identifier.
session_idREQUIRED
string<uuid>Betriebsfahrt session identifier from the status response.
Example value
curl "https://api.ebx.energy/v1/onboardings/00000000-0000-0000-0000-000000000000/betriebsfahrt/sessions/00000000-0000-0000-0000-000000000000" \
  -H "Authorization: Bearer $EBX_TOKEN"
Example response200
{
  "id": "<string>",
  "onboarding_id": "<string>",
  "asset_id": "<string>",
  "status": "draft",
  "execution_mode": "real",
  "supersedes_session_id": "<string>",
  "parameters": {
    "first_direction": "positive",
    "single_direction": false,
    "extended_stroke_minutes": 0,
    "extended_stroke_min_minutes": 0,
    "extended_stroke_max_minutes": 0,
    "second_run_extended_stroke_minutes": 0,
    "capacity_mw": {
      "positive": "<string>",
      "negative": "<string>"
    },
    "products": {
      "positive": [
        "<string>"
      ],
      "negative": [
        "<string>"
      ]
    },
    "product_capacity_mw": "<string>",
    "usable_energy_mwh": "<string>",
    "energy_safety_margin": "<string>",
    "energy_per_run_mwh": {
      "positive": "<string>",
      "negative": "<string>"
    },
    "ramp_mw_per_s": {
      "positive": "<string>",
      "negative": "<string>"
    },
    "fcr_ramp_required_mw_per_s": {
      "positive": "<string>",
      "negative": "<string>"
    },
    "measurement_point": "<string>",
    "retention_minutes": 0,
    "stroke_minutes": 0
  },
  "findings": [
    {
      "code": "<string>",
      "severity": "blocker",
      "message": "<string>"
    }
  ],
  "planned_start": "2026-09-10T13:30:00Z",
  "planned_end": "2026-09-10T13:30:00Z",
  "plan_sha256": "<string>",
  "plan": "<string>",
  "runs": [
    {
      "index": 0,
      "direction": "positive",
      "products": [
        "<string>"
      ],
      "requested_capacity_mw": "<string>",
      "phases": [
        {
          "index": 0,
          "kind": "retention",
          "start": "2026-09-10T13:30:00Z",
          "end": "2026-09-10T13:30:00Z",
          "setpoint_mw": "<string>",
          "window_id": "<string>",
          "actual_start": "2026-09-10T13:30:00Z",
          "actual_end": "2026-09-10T13:30:00Z"
        }
      ],
      "status": "pending",
      "follow_checks": [
        {
          "phase_index": 0,
          "checked_at": "2026-09-10T13:30:00Z",
          "expected_mw": "<string>",
          "measured_mw": "<string>",
          "passed": false,
          "detail": "<string>"
        }
      ],
      "proofs": "<string>",
      "uploads": "<string>",
      "verdicts": "<string>",
      "overrides": [
        {
          "product": "<string>",
          "reason": "<string>",
          "by_user_id": "<string>",
          "by_user_name": "<string>",
          "at": "2026-09-10T13:30:00Z"
        }
      ],
      "error": "<string>",
      "actual_start": "2026-09-10T13:30:00Z",
      "actual_end": "2026-09-10T13:30:00Z"
    }
  ],
  "driver": {
    "request_id": "<string>",
    "run_id": "<string>",
    "status": "<string>",
    "journal_written_at": "2026-09-10T13:30:00Z",
    "tracking_source": "<string>",
    "events": [
      "<string>"
    ]
  },
  "progress": {
    "current_run_index": 0,
    "current_phase_index": 0,
    "confidence": "confirmed",
    "remaining_seconds": 0
  },
  "actual_start": "2026-09-10T13:30:00Z",
  "actual_end": "2026-09-10T13:30:00Z",
  "confirmed_by_user_name": "<string>",
  "confirmed_at": "2026-09-10T13:30:00Z",
  "aborted_at": "2026-09-10T13:30:00Z",
  "abort_reason": "<string>",
  "last_error": "<string>",
  "last_error_at": "2026-09-10T13:30:00Z",
  "row_version": 0,
  "created_at": "2026-09-10T13:30:00Z",
  "updated_at": "2026-09-10T13:30:00Z"
}
Can raise
  • 401no valid token
  • 403scope missing
  • 404unknown or not visible
  • 429rate limited
ALL CODES →
PATCH/v1/onboardings/{onboarding_id}/betriebsfahrt/sessions/{session_id}

Adjust a draft Betriebsfahrt session

onboarding.write

Regenerates the draft with the given parameters (first direction, extended stroke, start, execution mode). Only drafts can be adjusted.

Path parameters

onboarding_idREQUIRED
string<uuid>Stable onboarding identifier.
session_idREQUIRED
string<uuid>Betriebsfahrt session identifier from the status response.

Request body · required

first_direction
enumpositivenegative
extended_stroke_minutes
integer
planned_start
string<date-time>
execution_mode
enumrealdry_run
single_direction
booleanDrive the first direction alone (one run instead of two); FCR cannot be proven from it.
Example value
curl -X PATCH "https://api.ebx.energy/v1/onboardings/00000000-0000-0000-0000-000000000000/betriebsfahrt/sessions/00000000-0000-0000-0000-000000000000" \
  -H "Authorization: Bearer $EBX_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"first_direction":"positive","extended_stroke_minutes":0,"planned_start":"2026-09-10T13:30:00Z","execution_mode":"real","single_direction":false}'
Example response200
{
  "id": "<string>",
  "onboarding_id": "<string>",
  "asset_id": "<string>",
  "status": "draft",
  "execution_mode": "real",
  "supersedes_session_id": "<string>",
  "parameters": {
    "first_direction": "positive",
    "single_direction": false,
    "extended_stroke_minutes": 0,
    "extended_stroke_min_minutes": 0,
    "extended_stroke_max_minutes": 0,
    "second_run_extended_stroke_minutes": 0,
    "capacity_mw": {
      "positive": "<string>",
      "negative": "<string>"
    },
    "products": {
      "positive": [
        "<string>"
      ],
      "negative": [
        "<string>"
      ]
    },
    "product_capacity_mw": "<string>",
    "usable_energy_mwh": "<string>",
    "energy_safety_margin": "<string>",
    "energy_per_run_mwh": {
      "positive": "<string>",
      "negative": "<string>"
    },
    "ramp_mw_per_s": {
      "positive": "<string>",
      "negative": "<string>"
    },
    "fcr_ramp_required_mw_per_s": {
      "positive": "<string>",
      "negative": "<string>"
    },
    "measurement_point": "<string>",
    "retention_minutes": 0,
    "stroke_minutes": 0
  },
  "findings": [
    {
      "code": "<string>",
      "severity": "blocker",
      "message": "<string>"
    }
  ],
  "planned_start": "2026-09-10T13:30:00Z",
  "planned_end": "2026-09-10T13:30:00Z",
  "plan_sha256": "<string>",
  "plan": "<string>",
  "runs": [
    {
      "index": 0,
      "direction": "positive",
      "products": [
        "<string>"
      ],
      "requested_capacity_mw": "<string>",
      "phases": [
        {
          "index": 0,
          "kind": "retention",
          "start": "2026-09-10T13:30:00Z",
          "end": "2026-09-10T13:30:00Z",
          "setpoint_mw": "<string>",
          "window_id": "<string>",
          "actual_start": "2026-09-10T13:30:00Z",
          "actual_end": "2026-09-10T13:30:00Z"
        }
      ],
      "status": "pending",
      "follow_checks": [
        {
          "phase_index": 0,
          "checked_at": "2026-09-10T13:30:00Z",
          "expected_mw": "<string>",
          "measured_mw": "<string>",
          "passed": false,
          "detail": "<string>"
        }
      ],
      "proofs": "<string>",
      "uploads": "<string>",
      "verdicts": "<string>",
      "overrides": [
        {
          "product": "<string>",
          "reason": "<string>",
          "by_user_id": "<string>",
          "by_user_name": "<string>",
          "at": "2026-09-10T13:30:00Z"
        }
      ],
      "error": "<string>",
      "actual_start": "2026-09-10T13:30:00Z",
      "actual_end": "2026-09-10T13:30:00Z"
    }
  ],
  "driver": {
    "request_id": "<string>",
    "run_id": "<string>",
    "status": "<string>",
    "journal_written_at": "2026-09-10T13:30:00Z",
    "tracking_source": "<string>",
    "events": [
      "<string>"
    ]
  },
  "progress": {
    "current_run_index": 0,
    "current_phase_index": 0,
    "confidence": "confirmed",
    "remaining_seconds": 0
  },
  "actual_start": "2026-09-10T13:30:00Z",
  "actual_end": "2026-09-10T13:30:00Z",
  "confirmed_by_user_name": "<string>",
  "confirmed_at": "2026-09-10T13:30:00Z",
  "aborted_at": "2026-09-10T13:30:00Z",
  "abort_reason": "<string>",
  "last_error": "<string>",
  "last_error_at": "2026-09-10T13:30:00Z",
  "row_version": 0,
  "created_at": "2026-09-10T13:30:00Z",
  "updated_at": "2026-09-10T13:30:00Z"
}
Can raise
  • 400malformed request
  • 401no valid token
  • 403scope missing
  • 404unknown or not visible
  • 409state conflict
  • 422validation failed
  • 429rate limited
ALL CODES →
POST/v1/onboardings/{onboarding_id}/betriebsfahrt/sessions/{session_id}/abort

Abort a Betriebsfahrt session

onboarding.write

Ends the session and sends the driver's kill switch (zero every product on the asset; cancel the run when known). Aborting again resends the kill switch.

Path parameters

onboarding_idREQUIRED
string<uuid>Stable onboarding identifier.
session_idREQUIRED
string<uuid>Betriebsfahrt session identifier from the status response.

Request body · required

reasonREQUIRED
string
Example value
curl -X POST "https://api.ebx.energy/v1/onboardings/00000000-0000-0000-0000-000000000000/betriebsfahrt/sessions/00000000-0000-0000-0000-000000000000/abort" \
  -H "Authorization: Bearer $EBX_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"reason":"<string>"}'
Example response200
{
  "id": "<string>",
  "onboarding_id": "<string>",
  "asset_id": "<string>",
  "status": "draft",
  "execution_mode": "real",
  "supersedes_session_id": "<string>",
  "parameters": {
    "first_direction": "positive",
    "single_direction": false,
    "extended_stroke_minutes": 0,
    "extended_stroke_min_minutes": 0,
    "extended_stroke_max_minutes": 0,
    "second_run_extended_stroke_minutes": 0,
    "capacity_mw": {
      "positive": "<string>",
      "negative": "<string>"
    },
    "products": {
      "positive": [
        "<string>"
      ],
      "negative": [
        "<string>"
      ]
    },
    "product_capacity_mw": "<string>",
    "usable_energy_mwh": "<string>",
    "energy_safety_margin": "<string>",
    "energy_per_run_mwh": {
      "positive": "<string>",
      "negative": "<string>"
    },
    "ramp_mw_per_s": {
      "positive": "<string>",
      "negative": "<string>"
    },
    "fcr_ramp_required_mw_per_s": {
      "positive": "<string>",
      "negative": "<string>"
    },
    "measurement_point": "<string>",
    "retention_minutes": 0,
    "stroke_minutes": 0
  },
  "findings": [
    {
      "code": "<string>",
      "severity": "blocker",
      "message": "<string>"
    }
  ],
  "planned_start": "2026-09-10T13:30:00Z",
  "planned_end": "2026-09-10T13:30:00Z",
  "plan_sha256": "<string>",
  "plan": "<string>",
  "runs": [
    {
      "index": 0,
      "direction": "positive",
      "products": [
        "<string>"
      ],
      "requested_capacity_mw": "<string>",
      "phases": [
        {
          "index": 0,
          "kind": "retention",
          "start": "2026-09-10T13:30:00Z",
          "end": "2026-09-10T13:30:00Z",
          "setpoint_mw": "<string>",
          "window_id": "<string>",
          "actual_start": "2026-09-10T13:30:00Z",
          "actual_end": "2026-09-10T13:30:00Z"
        }
      ],
      "status": "pending",
      "follow_checks": [
        {
          "phase_index": 0,
          "checked_at": "2026-09-10T13:30:00Z",
          "expected_mw": "<string>",
          "measured_mw": "<string>",
          "passed": false,
          "detail": "<string>"
        }
      ],
      "proofs": "<string>",
      "uploads": "<string>",
      "verdicts": "<string>",
      "overrides": [
        {
          "product": "<string>",
          "reason": "<string>",
          "by_user_id": "<string>",
          "by_user_name": "<string>",
          "at": "2026-09-10T13:30:00Z"
        }
      ],
      "error": "<string>",
      "actual_start": "2026-09-10T13:30:00Z",
      "actual_end": "2026-09-10T13:30:00Z"
    }
  ],
  "driver": {
    "request_id": "<string>",
    "run_id": "<string>",
    "status": "<string>",
    "journal_written_at": "2026-09-10T13:30:00Z",
    "tracking_source": "<string>",
    "events": [
      "<string>"
    ]
  },
  "progress": {
    "current_run_index": 0,
    "current_phase_index": 0,
    "confidence": "confirmed",
    "remaining_seconds": 0
  },
  "actual_start": "2026-09-10T13:30:00Z",
  "actual_end": "2026-09-10T13:30:00Z",
  "confirmed_by_user_name": "<string>",
  "confirmed_at": "2026-09-10T13:30:00Z",
  "aborted_at": "2026-09-10T13:30:00Z",
  "abort_reason": "<string>",
  "last_error": "<string>",
  "last_error_at": "2026-09-10T13:30:00Z",
  "row_version": 0,
  "created_at": "2026-09-10T13:30:00Z",
  "updated_at": "2026-09-10T13:30:00Z"
}
Can raise
  • 400malformed request
  • 401no valid token
  • 403scope missing
  • 404unknown or not visible
  • 409state conflict
  • 422validation failed
  • 429rate limited
ALL CODES →
POST/v1/onboardings/{onboarding_id}/betriebsfahrt/sessions/{session_id}/confirm

Confirm a Betriebsfahrt session

onboarding.write

Freezes the plan and hands it to the control-test driver: the typed asset id must match, the plan must still be the reviewed one, the asset must be full (positive run first) or empty (negative run first) with telemetry arriving, and the TSO portal pre-flight must have created the technical unit, the reserve unit and the planned prequalifications. The drive starts at the planned quarter hour without further prompts; the plan is published to the driver ten minutes before.

Path parameters

onboarding_idREQUIRED
string<uuid>Stable onboarding identifier.
session_idREQUIRED
string<uuid>Betriebsfahrt session identifier from the status response.

Request body · required

confirm_asset_idREQUIRED
stringThe asset id typed by the operator; must equal the session's asset.
row_versionREQUIRED
integerThe row version of the draft the operator reviewed; any adjustment since (plan, start, mode) is refused.
Example value
curl -X POST "https://api.ebx.energy/v1/onboardings/00000000-0000-0000-0000-000000000000/betriebsfahrt/sessions/00000000-0000-0000-0000-000000000000/confirm" \
  -H "Authorization: Bearer $EBX_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"confirm_asset_id":"<string>","row_version":0}'
Example response202
{
  "id": "<string>",
  "onboarding_id": "<string>",
  "asset_id": "<string>",
  "status": "draft",
  "execution_mode": "real",
  "supersedes_session_id": "<string>",
  "parameters": {
    "first_direction": "positive",
    "single_direction": false,
    "extended_stroke_minutes": 0,
    "extended_stroke_min_minutes": 0,
    "extended_stroke_max_minutes": 0,
    "second_run_extended_stroke_minutes": 0,
    "capacity_mw": {
      "positive": "<string>",
      "negative": "<string>"
    },
    "products": {
      "positive": [
        "<string>"
      ],
      "negative": [
        "<string>"
      ]
    },
    "product_capacity_mw": "<string>",
    "usable_energy_mwh": "<string>",
    "energy_safety_margin": "<string>",
    "energy_per_run_mwh": {
      "positive": "<string>",
      "negative": "<string>"
    },
    "ramp_mw_per_s": {
      "positive": "<string>",
      "negative": "<string>"
    },
    "fcr_ramp_required_mw_per_s": {
      "positive": "<string>",
      "negative": "<string>"
    },
    "measurement_point": "<string>",
    "retention_minutes": 0,
    "stroke_minutes": 0
  },
  "findings": [
    {
      "code": "<string>",
      "severity": "blocker",
      "message": "<string>"
    }
  ],
  "planned_start": "2026-09-10T13:30:00Z",
  "planned_end": "2026-09-10T13:30:00Z",
  "plan_sha256": "<string>",
  "plan": "<string>",
  "runs": [
    {
      "index": 0,
      "direction": "positive",
      "products": [
        "<string>"
      ],
      "requested_capacity_mw": "<string>",
      "phases": [
        {
          "index": 0,
          "kind": "retention",
          "start": "2026-09-10T13:30:00Z",
          "end": "2026-09-10T13:30:00Z",
          "setpoint_mw": "<string>",
          "window_id": "<string>",
          "actual_start": "2026-09-10T13:30:00Z",
          "actual_end": "2026-09-10T13:30:00Z"
        }
      ],
      "status": "pending",
      "follow_checks": [
        {
          "phase_index": 0,
          "checked_at": "2026-09-10T13:30:00Z",
          "expected_mw": "<string>",
          "measured_mw": "<string>",
          "passed": false,
          "detail": "<string>"
        }
      ],
      "proofs": "<string>",
      "uploads": "<string>",
      "verdicts": "<string>",
      "overrides": [
        {
          "product": "<string>",
          "reason": "<string>",
          "by_user_id": "<string>",
          "by_user_name": "<string>",
          "at": "2026-09-10T13:30:00Z"
        }
      ],
      "error": "<string>",
      "actual_start": "2026-09-10T13:30:00Z",
      "actual_end": "2026-09-10T13:30:00Z"
    }
  ],
  "driver": {
    "request_id": "<string>",
    "run_id": "<string>",
    "status": "<string>",
    "journal_written_at": "2026-09-10T13:30:00Z",
    "tracking_source": "<string>",
    "events": [
      "<string>"
    ]
  },
  "progress": {
    "current_run_index": 0,
    "current_phase_index": 0,
    "confidence": "confirmed",
    "remaining_seconds": 0
  },
  "actual_start": "2026-09-10T13:30:00Z",
  "actual_end": "2026-09-10T13:30:00Z",
  "confirmed_by_user_name": "<string>",
  "confirmed_at": "2026-09-10T13:30:00Z",
  "aborted_at": "2026-09-10T13:30:00Z",
  "abort_reason": "<string>",
  "last_error": "<string>",
  "last_error_at": "2026-09-10T13:30:00Z",
  "row_version": 0,
  "created_at": "2026-09-10T13:30:00Z",
  "updated_at": "2026-09-10T13:30:00Z"
}
Can raise
  • 400malformed request
  • 401no valid token
  • 403scope missing
  • 404unknown or not visible
  • 409state conflict
  • 422validation failed
  • 429rate limited
ALL CODES →
POST/v1/onboardings/{onboarding_id}/betriebsfahrt/sessions/{session_id}/runs/{run_index}/validate

Validate a run again

onboarding.write

Re-runs the instant validation of one run for every product whose verdict is not PASS: the workbook is generated again from telemetry, uploaded to the planned prequalification when its bytes changed, and the portal's analysis is fetched and judged. For a recording the telemetry store received late, or a portal hiccup.

Path parameters

onboarding_idREQUIRED
string<uuid>Stable onboarding identifier.
session_idREQUIRED
string<uuid>Betriebsfahrt session identifier from the status response.
run_indexREQUIRED
integerRun index within the session: 0 = first run, 1 = second run.
Example value
curl -X POST "https://api.ebx.energy/v1/onboardings/00000000-0000-0000-0000-000000000000/betriebsfahrt/sessions/00000000-0000-0000-0000-000000000000/runs/0/validate" \
  -H "Authorization: Bearer $EBX_TOKEN"
Example response200
{
  "id": "<string>",
  "onboarding_id": "<string>",
  "asset_id": "<string>",
  "status": "draft",
  "execution_mode": "real",
  "supersedes_session_id": "<string>",
  "parameters": {
    "first_direction": "positive",
    "single_direction": false,
    "extended_stroke_minutes": 0,
    "extended_stroke_min_minutes": 0,
    "extended_stroke_max_minutes": 0,
    "second_run_extended_stroke_minutes": 0,
    "capacity_mw": {
      "positive": "<string>",
      "negative": "<string>"
    },
    "products": {
      "positive": [
        "<string>"
      ],
      "negative": [
        "<string>"
      ]
    },
    "product_capacity_mw": "<string>",
    "usable_energy_mwh": "<string>",
    "energy_safety_margin": "<string>",
    "energy_per_run_mwh": {
      "positive": "<string>",
      "negative": "<string>"
    },
    "ramp_mw_per_s": {
      "positive": "<string>",
      "negative": "<string>"
    },
    "fcr_ramp_required_mw_per_s": {
      "positive": "<string>",
      "negative": "<string>"
    },
    "measurement_point": "<string>",
    "retention_minutes": 0,
    "stroke_minutes": 0
  },
  "findings": [
    {
      "code": "<string>",
      "severity": "blocker",
      "message": "<string>"
    }
  ],
  "planned_start": "2026-09-10T13:30:00Z",
  "planned_end": "2026-09-10T13:30:00Z",
  "plan_sha256": "<string>",
  "plan": "<string>",
  "runs": [
    {
      "index": 0,
      "direction": "positive",
      "products": [
        "<string>"
      ],
      "requested_capacity_mw": "<string>",
      "phases": [
        {
          "index": 0,
          "kind": "retention",
          "start": "2026-09-10T13:30:00Z",
          "end": "2026-09-10T13:30:00Z",
          "setpoint_mw": "<string>",
          "window_id": "<string>",
          "actual_start": "2026-09-10T13:30:00Z",
          "actual_end": "2026-09-10T13:30:00Z"
        }
      ],
      "status": "pending",
      "follow_checks": [
        {
          "phase_index": 0,
          "checked_at": "2026-09-10T13:30:00Z",
          "expected_mw": "<string>",
          "measured_mw": "<string>",
          "passed": false,
          "detail": "<string>"
        }
      ],
      "proofs": "<string>",
      "uploads": "<string>",
      "verdicts": "<string>",
      "overrides": [
        {
          "product": "<string>",
          "reason": "<string>",
          "by_user_id": "<string>",
          "by_user_name": "<string>",
          "at": "2026-09-10T13:30:00Z"
        }
      ],
      "error": "<string>",
      "actual_start": "2026-09-10T13:30:00Z",
      "actual_end": "2026-09-10T13:30:00Z"
    }
  ],
  "driver": {
    "request_id": "<string>",
    "run_id": "<string>",
    "status": "<string>",
    "journal_written_at": "2026-09-10T13:30:00Z",
    "tracking_source": "<string>",
    "events": [
      "<string>"
    ]
  },
  "progress": {
    "current_run_index": 0,
    "current_phase_index": 0,
    "confidence": "confirmed",
    "remaining_seconds": 0
  },
  "actual_start": "2026-09-10T13:30:00Z",
  "actual_end": "2026-09-10T13:30:00Z",
  "confirmed_by_user_name": "<string>",
  "confirmed_at": "2026-09-10T13:30:00Z",
  "aborted_at": "2026-09-10T13:30:00Z",
  "abort_reason": "<string>",
  "last_error": "<string>",
  "last_error_at": "2026-09-10T13:30:00Z",
  "row_version": 0,
  "created_at": "2026-09-10T13:30:00Z",
  "updated_at": "2026-09-10T13:30:00Z"
}
Can raise
  • 400malformed request
  • 401no valid token
  • 403scope missing
  • 404unknown or not visible
  • 409state conflict
  • 429rate limited
ALL CODES →
POST/v1/onboardings/{onboarding_id}/betriebsfahrt/sessions/{session_id}/runs/{run_index}/verdict-override

Accept a REDO verdict with a reason

onboarding.write

An EBX admin accepts one product's REDO verdict on a run; the reason is recorded on the session, the gate and the activity log, and the sign-off counts the run as accepted.

Path parameters

onboarding_idREQUIRED
string<uuid>Stable onboarding identifier.
session_idREQUIRED
string<uuid>Betriebsfahrt session identifier from the status response.
run_indexREQUIRED
integerRun index within the session: 0 = first run, 1 = second run.

Request body · required

productREQUIRED
stringProduct slug of the run's verdict to accept, e.g. AutomaticFrequencyRestorationReserve/Positive.
reasonREQUIRED
string
verdict_computed_atREQUIRED
string<date-time>The computed_at of the verdict the operator reviewed; a verdict computed since is refused.
Example value
curl -X POST "https://api.ebx.energy/v1/onboardings/00000000-0000-0000-0000-000000000000/betriebsfahrt/sessions/00000000-0000-0000-0000-000000000000/runs/0/verdict-override" \
  -H "Authorization: Bearer $EBX_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"product":"<string>","reason":"<string>","verdict_computed_at":"2026-09-10T13:30:00Z"}'
Example response200
{
  "id": "<string>",
  "onboarding_id": "<string>",
  "asset_id": "<string>",
  "status": "draft",
  "execution_mode": "real",
  "supersedes_session_id": "<string>",
  "parameters": {
    "first_direction": "positive",
    "single_direction": false,
    "extended_stroke_minutes": 0,
    "extended_stroke_min_minutes": 0,
    "extended_stroke_max_minutes": 0,
    "second_run_extended_stroke_minutes": 0,
    "capacity_mw": {
      "positive": "<string>",
      "negative": "<string>"
    },
    "products": {
      "positive": [
        "<string>"
      ],
      "negative": [
        "<string>"
      ]
    },
    "product_capacity_mw": "<string>",
    "usable_energy_mwh": "<string>",
    "energy_safety_margin": "<string>",
    "energy_per_run_mwh": {
      "positive": "<string>",
      "negative": "<string>"
    },
    "ramp_mw_per_s": {
      "positive": "<string>",
      "negative": "<string>"
    },
    "fcr_ramp_required_mw_per_s": {
      "positive": "<string>",
      "negative": "<string>"
    },
    "measurement_point": "<string>",
    "retention_minutes": 0,
    "stroke_minutes": 0
  },
  "findings": [
    {
      "code": "<string>",
      "severity": "blocker",
      "message": "<string>"
    }
  ],
  "planned_start": "2026-09-10T13:30:00Z",
  "planned_end": "2026-09-10T13:30:00Z",
  "plan_sha256": "<string>",
  "plan": "<string>",
  "runs": [
    {
      "index": 0,
      "direction": "positive",
      "products": [
        "<string>"
      ],
      "requested_capacity_mw": "<string>",
      "phases": [
        {
          "index": 0,
          "kind": "retention",
          "start": "2026-09-10T13:30:00Z",
          "end": "2026-09-10T13:30:00Z",
          "setpoint_mw": "<string>",
          "window_id": "<string>",
          "actual_start": "2026-09-10T13:30:00Z",
          "actual_end": "2026-09-10T13:30:00Z"
        }
      ],
      "status": "pending",
      "follow_checks": [
        {
          "phase_index": 0,
          "checked_at": "2026-09-10T13:30:00Z",
          "expected_mw": "<string>",
          "measured_mw": "<string>",
          "passed": false,
          "detail": "<string>"
        }
      ],
      "proofs": "<string>",
      "uploads": "<string>",
      "verdicts": "<string>",
      "overrides": [
        {
          "product": "<string>",
          "reason": "<string>",
          "by_user_id": "<string>",
          "by_user_name": "<string>",
          "at": "2026-09-10T13:30:00Z"
        }
      ],
      "error": "<string>",
      "actual_start": "2026-09-10T13:30:00Z",
      "actual_end": "2026-09-10T13:30:00Z"
    }
  ],
  "driver": {
    "request_id": "<string>",
    "run_id": "<string>",
    "status": "<string>",
    "journal_written_at": "2026-09-10T13:30:00Z",
    "tracking_source": "<string>",
    "events": [
      "<string>"
    ]
  },
  "progress": {
    "current_run_index": 0,
    "current_phase_index": 0,
    "confidence": "confirmed",
    "remaining_seconds": 0
  },
  "actual_start": "2026-09-10T13:30:00Z",
  "actual_end": "2026-09-10T13:30:00Z",
  "confirmed_by_user_name": "<string>",
  "confirmed_at": "2026-09-10T13:30:00Z",
  "aborted_at": "2026-09-10T13:30:00Z",
  "abort_reason": "<string>",
  "last_error": "<string>",
  "last_error_at": "2026-09-10T13:30:00Z",
  "row_version": 0,
  "created_at": "2026-09-10T13:30:00Z",
  "updated_at": "2026-09-10T13:30:00Z"
}
Can raise
  • 400malformed request
  • 401no valid token
  • 403scope missing
  • 404unknown or not visible
  • 409state conflict
  • 422validation failed
  • 429rate limited
ALL CODES →
DELETE/v1/onboardings/{onboarding_id}/documents/{document_id}

Remove a document from an onboarding

onboarding.write

Soft-deletes document metadata so the document no longer appears on the onboarding or receives download URLs. The stored S3 object is not synchronously deleted.

Path parameters

onboarding_idREQUIRED
string<uuid>Stable onboarding identifier returned by create and list operations.
document_idREQUIRED
string<uuid>Document identifier returned by the presigned upload request.
Example value
curl -X DELETE "https://api.ebx.energy/v1/onboardings/00000000-0000-0000-0000-000000000000/documents/00000000-0000-0000-0000-000000000000" \
  -H "Authorization: Bearer $EBX_TOKEN"
Example response200
{
  "id": "<string>",
  "asset_id": "<string>",
  "asset_name": "<string>",
  "location": "<string>",
  "country": "<string>",
  "tso": "<string>",
  "integration_type": "monitoring_only",
  "target_hc_date": "2026-01-01",
  "current_gate_definition_id": "mon_rfi",
  "overall_status": "in_progress",
  "asset_owner_org_id": "<string>",
  "asset_owner_org_name": "<string>",
  "whitelabel": false,
  "process_definition": {
    "id": "<string>",
    "integration_type": "monitoring_only",
    "version": "<string>",
    "source_label": "<string>",
    "gate_sequence": [
      "mon_rfi"
    ],
    "gate_definitions": "<string>",
    "process_document_slots": [
      {
        "document_type": "installation_photo_mdevice",
        "label": "<string>",
        "description": "<string>",
        "required": false,
        "allow_multiple": false
      }
    ],
    "asset_profile_sync_gate_id": "mon_rfi",
    "schema_version": 0
  },
  "gate_definitions": "<string>",
  "asset_profile": {
    "id": "<string>",
    "onboarding_id": "<string>",
    "asset_id": "<string>",
    "asset_name": "<string>",
    "location": "<string>",
    "country": "<string>",
    "asset_owner_org_id": "<string>",
    "asset_owner_org_name": "<string>",
    "shipping_address": {
      "street": "<string>",
      "postal_code": "<string>",
      "city": "<string>",
      "country": "<string>",
      "attention": "<string>"
    },
    "site_contact": {
      "name": "<string>",
      "email": "name@example.com",
      "phone": "<string>"
    },
    "power_supply": "24v_dc",
    "ethernet_available": false,
    "antenna_location_outdoors": false,
    "ems_vendor": "<string>",
    "ems_vendor_other": "<string>",
    "ems_supports_modbus_tcp": false,
    "pq_submission_targeted": false,
    "ems_technical_contact": {
      "name": "<string>",
      "email": "name@example.com",
      "phone": "<string>"
    },
    "source_gate_definition_id": "mon_rfi",
    "source_gate_passed_at": "<string>",
    "source_gate_updated_at": "<string>",
    "synced_at": "<string>",
    "sync_reason": "<string>"
  },
  "asset_owner_contact": {
    "id": "<string>",
    "contact_name": "<string>",
    "contact_email": "<string>",
    "access": {
      "status": "<string>"
    }
  },
  "asset_owner_contacts": [
    {
      "id": "<string>",
      "contact_name": "<string>",
      "contact_email": "<string>",
      "access": {
        "status": "<string>"
      }
    }
  ],
  "partners": [
    {
      "id": "<string>",
      "role": "epc",
      "org_name": "<string>",
      "contact_name": "<string>",
      "contact_email": "<string>",
      "access": {
        "status": "<string>"
      }
    }
  ],
  "created_at": "<string>",
  "updated_at": "<string>",
  "gates": [
    {
      "id": "<string>",
      "definition_id": "mon_rfi",
      "status": "pending",
      "deadline": "2026-01-01",
      "last_note": "<string>",
      "passed_at": "<string>",
      "passed_by_user_name": "<string>",
      "structured_data": "<string>"
    }
  ],
  "documents": [
    {
      "id": "<string>",
      "onboarding_id": "<string>",
      "gate_definition_id": "mon_rfi",
      "document_type": "installation_photo_mdevice",
      "filename": "<string>",
      "size_bytes": 0,
      "content_type": "<string>",
      "uploaded_at": "<string>",
      "uploaded_by_user_name": "<string>",
      "version": 0
    }
  ],
  "activity": [
    {
      "id": "<string>",
      "onboarding_id": "<string>",
      "gate_definition_id": "mon_rfi",
      "actor_user_name": "<string>",
      "actor_org_name": "<string>",
      "event_type": "onboarding_created",
      "note": "<string>",
      "created_at": "<string>"
    }
  ],
  "internal_tracker": {
    "tasks": [
      {
        "id": "<string>",
        "title": "<string>",
        "description": "<string>",
        "status": "open",
        "category": "<string>",
        "template_key": "<string>",
        "due_date": "<string>",
        "created_by_user_name": "<string>",
        "created_at": "<string>",
        "updated_at": "<string>",
        "completed_at": "<string>"
      }
    ],
    "open_points": [
      {
        "id": "<string>",
        "title": "<string>",
        "status": "open",
        "ref": {
          "kind": "<string>",
          "gate_definition_id": "mon_rfi"
        },
        "comments": [
          {
            "id": "<string>",
            "author_user_name": "<string>",
            "author_org_name": "<string>",
            "author_side": "ebx",
            "created_at": "<string>",
            "body": "<string>"
          }
        ],
        "created_by_user_name": "<string>",
        "created_at": "<string>",
        "updated_at": "<string>",
        "resolved_at": "<string>"
      }
    ],
    "applied_templates": [
      "<string>"
    ]
  }
}
Can raise
  • 400malformed request
  • 401no valid token
  • 403scope missing
  • 404unknown or not visible
  • 409state conflict
  • 429rate limited
ALL CODES →
GET/v1/onboardings/{onboarding_id}/documents/{document_id}/download

Create a document download URL

onboarding.read

Returns a short-lived presigned S3 GET URL for an available, non-deleted onboarding document. The API does not proxy document bytes.

Path parameters

onboarding_idREQUIRED
string<uuid>Stable onboarding identifier returned by create and list operations.
document_idREQUIRED
string<uuid>Document identifier returned by the presigned upload request.
Example value
curl "https://api.ebx.energy/v1/onboardings/00000000-0000-0000-0000-000000000000/documents/00000000-0000-0000-0000-000000000000/download" \
  -H "Authorization: Bearer $EBX_TOKEN"
Example response200
{
  "download_url": "<string>",
  "expires_at": "<string>"
}
Can raise
  • 401no valid token
  • 403scope missing
  • 404unknown or not visible
  • 429rate limited
ALL CODES →
POST/v1/onboardings/{onboarding_id}/documents/{document_id}/finalize

Finalize an uploaded document

onboarding.write

Marks a pending document upload as available after the client has uploaded bytes to the presigned S3 URL and records document-upload activity.

Path parameters

onboarding_idREQUIRED
string<uuid>Stable onboarding identifier returned by create and list operations.
document_idREQUIRED
string<uuid>Document identifier returned by the presigned upload request.
Example value
curl -X POST "https://api.ebx.energy/v1/onboardings/00000000-0000-0000-0000-000000000000/documents/00000000-0000-0000-0000-000000000000/finalize" \
  -H "Authorization: Bearer $EBX_TOKEN"
Example response200
{
  "id": "<string>",
  "asset_id": "<string>",
  "asset_name": "<string>",
  "location": "<string>",
  "country": "<string>",
  "tso": "<string>",
  "integration_type": "monitoring_only",
  "target_hc_date": "2026-01-01",
  "current_gate_definition_id": "mon_rfi",
  "overall_status": "in_progress",
  "asset_owner_org_id": "<string>",
  "asset_owner_org_name": "<string>",
  "whitelabel": false,
  "process_definition": {
    "id": "<string>",
    "integration_type": "monitoring_only",
    "version": "<string>",
    "source_label": "<string>",
    "gate_sequence": [
      "mon_rfi"
    ],
    "gate_definitions": "<string>",
    "process_document_slots": [
      {
        "document_type": "installation_photo_mdevice",
        "label": "<string>",
        "description": "<string>",
        "required": false,
        "allow_multiple": false
      }
    ],
    "asset_profile_sync_gate_id": "mon_rfi",
    "schema_version": 0
  },
  "gate_definitions": "<string>",
  "asset_profile": {
    "id": "<string>",
    "onboarding_id": "<string>",
    "asset_id": "<string>",
    "asset_name": "<string>",
    "location": "<string>",
    "country": "<string>",
    "asset_owner_org_id": "<string>",
    "asset_owner_org_name": "<string>",
    "shipping_address": {
      "street": "<string>",
      "postal_code": "<string>",
      "city": "<string>",
      "country": "<string>",
      "attention": "<string>"
    },
    "site_contact": {
      "name": "<string>",
      "email": "name@example.com",
      "phone": "<string>"
    },
    "power_supply": "24v_dc",
    "ethernet_available": false,
    "antenna_location_outdoors": false,
    "ems_vendor": "<string>",
    "ems_vendor_other": "<string>",
    "ems_supports_modbus_tcp": false,
    "pq_submission_targeted": false,
    "ems_technical_contact": {
      "name": "<string>",
      "email": "name@example.com",
      "phone": "<string>"
    },
    "source_gate_definition_id": "mon_rfi",
    "source_gate_passed_at": "<string>",
    "source_gate_updated_at": "<string>",
    "synced_at": "<string>",
    "sync_reason": "<string>"
  },
  "asset_owner_contact": {
    "id": "<string>",
    "contact_name": "<string>",
    "contact_email": "<string>",
    "access": {
      "status": "<string>"
    }
  },
  "asset_owner_contacts": [
    {
      "id": "<string>",
      "contact_name": "<string>",
      "contact_email": "<string>",
      "access": {
        "status": "<string>"
      }
    }
  ],
  "partners": [
    {
      "id": "<string>",
      "role": "epc",
      "org_name": "<string>",
      "contact_name": "<string>",
      "contact_email": "<string>",
      "access": {
        "status": "<string>"
      }
    }
  ],
  "created_at": "<string>",
  "updated_at": "<string>",
  "gates": [
    {
      "id": "<string>",
      "definition_id": "mon_rfi",
      "status": "pending",
      "deadline": "2026-01-01",
      "last_note": "<string>",
      "passed_at": "<string>",
      "passed_by_user_name": "<string>",
      "structured_data": "<string>"
    }
  ],
  "documents": [
    {
      "id": "<string>",
      "onboarding_id": "<string>",
      "gate_definition_id": "mon_rfi",
      "document_type": "installation_photo_mdevice",
      "filename": "<string>",
      "size_bytes": 0,
      "content_type": "<string>",
      "uploaded_at": "<string>",
      "uploaded_by_user_name": "<string>",
      "version": 0
    }
  ],
  "activity": [
    {
      "id": "<string>",
      "onboarding_id": "<string>",
      "gate_definition_id": "mon_rfi",
      "actor_user_name": "<string>",
      "actor_org_name": "<string>",
      "event_type": "onboarding_created",
      "note": "<string>",
      "created_at": "<string>"
    }
  ],
  "internal_tracker": {
    "tasks": [
      {
        "id": "<string>",
        "title": "<string>",
        "description": "<string>",
        "status": "open",
        "category": "<string>",
        "template_key": "<string>",
        "due_date": "<string>",
        "created_by_user_name": "<string>",
        "created_at": "<string>",
        "updated_at": "<string>",
        "completed_at": "<string>"
      }
    ],
    "open_points": [
      {
        "id": "<string>",
        "title": "<string>",
        "status": "open",
        "ref": {
          "kind": "<string>",
          "gate_definition_id": "mon_rfi"
        },
        "comments": [
          {
            "id": "<string>",
            "author_user_name": "<string>",
            "author_org_name": "<string>",
            "author_side": "ebx",
            "created_at": "<string>",
            "body": "<string>"
          }
        ],
        "created_by_user_name": "<string>",
        "created_at": "<string>",
        "updated_at": "<string>",
        "resolved_at": "<string>"
      }
    ],
    "applied_templates": [
      "<string>"
    ]
  }
}
Can raise
  • 400malformed request
  • 401no valid token
  • 403scope missing
  • 404unknown or not visible
  • 409state conflict
  • 429rate limited
ALL CODES →
POST/v1/onboardings/{onboarding_id}/documents/presigned-upload

Create a document upload URL

onboarding.write

Creates pending document metadata and returns a short-lived presigned S3 PUT URL. Clients upload the file bytes directly to S3, then call finalize to make the document available on the onboarding. Maximum accepted metadata size is 100 MiB.

Path parameters

onboarding_idREQUIRED
string<uuid>Stable onboarding identifier returned by create and list operations.

Request body · required

document_typeREQUIRED
enuminstallation_photo_mdeviceinstallation_photo_antennatest_results_signedbetriebsfahrt_datapq_frequency_analysispq_doublestroke_filepq_approvaleigentuemerbetreiberother
gate_definition_id
enummon_rfimon_hwmon_swmon_valctl_rfictl_hwctl_swctl_mon_testctl_ctrl_testctl_pq_testctl_pq_submitctl_pq_approved
filenameREQUIRED
string
size_bytesREQUIRED
integer
content_typeREQUIRED
string
Example value
curl -X POST "https://api.ebx.energy/v1/onboardings/00000000-0000-0000-0000-000000000000/documents/presigned-upload" \
  -H "Authorization: Bearer $EBX_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"document_type":"installation_photo_mdevice","gate_definition_id":"mon_rfi","filename":"<string>","size_bytes":0,"content_type":"<string>"}'
Example response200
{
  "upload_url": "<string>",
  "document_id": "<string>",
  "expires_at": "<string>"
}
Can raise
  • 400malformed request
  • 401no valid token
  • 403scope missing
  • 404unknown or not visible
  • 409state conflict
  • 422validation failed
  • 429rate limited
ALL CODES →
PATCH/v1/onboardings/{onboarding_id}/dpl

Replace the onboarding DPL

onboarding.write

Replaces the software-gate DPL payload for an onboarding. The target software gate is selected from the DPL standard id: monitoring DPLs update the monitoring software gate, and control DPLs update the control software gate.

Path parameters

onboarding_idREQUIRED
string<uuid>Stable onboarding identifier returned by create and list operations.

Request body · required

dplREQUIRED
object
Example value
curl -X PATCH "https://api.ebx.energy/v1/onboardings/00000000-0000-0000-0000-000000000000/dpl" \
  -H "Authorization: Bearer $EBX_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"dpl":{"standard_id":"ebx_monitor","standard_version":"<string>","rows":[{"id":"<string>","standard_datapoint_id":"<string>","name":"<string>","unit":"<string>","data_type":"float","direction":"control","register":0,"register_type":"holding","short_description":"<string>","long_description":"<string>","implementation_status":"pending","received_test_value":0,"excluded":false,"asset_notes":"<string>","discussion":{"status":"open","comments":[{"id":"<string>","author_user_name":"<string>","author_org_name":"<string>","author_side":"ebx","created_at":"<string>","body":"<string>"}],"last_comment_at":"<string>"}}],"updated_at":"<string>"}}'
Example response200
{
  "id": "<string>",
  "asset_id": "<string>",
  "asset_name": "<string>",
  "location": "<string>",
  "country": "<string>",
  "tso": "<string>",
  "integration_type": "monitoring_only",
  "target_hc_date": "2026-01-01",
  "current_gate_definition_id": "mon_rfi",
  "overall_status": "in_progress",
  "asset_owner_org_id": "<string>",
  "asset_owner_org_name": "<string>",
  "whitelabel": false,
  "process_definition": {
    "id": "<string>",
    "integration_type": "monitoring_only",
    "version": "<string>",
    "source_label": "<string>",
    "gate_sequence": [
      "mon_rfi"
    ],
    "gate_definitions": "<string>",
    "process_document_slots": [
      {
        "document_type": "installation_photo_mdevice",
        "label": "<string>",
        "description": "<string>",
        "required": false,
        "allow_multiple": false
      }
    ],
    "asset_profile_sync_gate_id": "mon_rfi",
    "schema_version": 0
  },
  "gate_definitions": "<string>",
  "asset_profile": {
    "id": "<string>",
    "onboarding_id": "<string>",
    "asset_id": "<string>",
    "asset_name": "<string>",
    "location": "<string>",
    "country": "<string>",
    "asset_owner_org_id": "<string>",
    "asset_owner_org_name": "<string>",
    "shipping_address": {
      "street": "<string>",
      "postal_code": "<string>",
      "city": "<string>",
      "country": "<string>",
      "attention": "<string>"
    },
    "site_contact": {
      "name": "<string>",
      "email": "name@example.com",
      "phone": "<string>"
    },
    "power_supply": "24v_dc",
    "ethernet_available": false,
    "antenna_location_outdoors": false,
    "ems_vendor": "<string>",
    "ems_vendor_other": "<string>",
    "ems_supports_modbus_tcp": false,
    "pq_submission_targeted": false,
    "ems_technical_contact": {
      "name": "<string>",
      "email": "name@example.com",
      "phone": "<string>"
    },
    "source_gate_definition_id": "mon_rfi",
    "source_gate_passed_at": "<string>",
    "source_gate_updated_at": "<string>",
    "synced_at": "<string>",
    "sync_reason": "<string>"
  },
  "asset_owner_contact": {
    "id": "<string>",
    "contact_name": "<string>",
    "contact_email": "<string>",
    "access": {
      "status": "<string>"
    }
  },
  "asset_owner_contacts": [
    {
      "id": "<string>",
      "contact_name": "<string>",
      "contact_email": "<string>",
      "access": {
        "status": "<string>"
      }
    }
  ],
  "partners": [
    {
      "id": "<string>",
      "role": "epc",
      "org_name": "<string>",
      "contact_name": "<string>",
      "contact_email": "<string>",
      "access": {
        "status": "<string>"
      }
    }
  ],
  "created_at": "<string>",
  "updated_at": "<string>",
  "gates": [
    {
      "id": "<string>",
      "definition_id": "mon_rfi",
      "status": "pending",
      "deadline": "2026-01-01",
      "last_note": "<string>",
      "passed_at": "<string>",
      "passed_by_user_name": "<string>",
      "structured_data": "<string>"
    }
  ],
  "documents": [
    {
      "id": "<string>",
      "onboarding_id": "<string>",
      "gate_definition_id": "mon_rfi",
      "document_type": "installation_photo_mdevice",
      "filename": "<string>",
      "size_bytes": 0,
      "content_type": "<string>",
      "uploaded_at": "<string>",
      "uploaded_by_user_name": "<string>",
      "version": 0
    }
  ],
  "activity": [
    {
      "id": "<string>",
      "onboarding_id": "<string>",
      "gate_definition_id": "mon_rfi",
      "actor_user_name": "<string>",
      "actor_org_name": "<string>",
      "event_type": "onboarding_created",
      "note": "<string>",
      "created_at": "<string>"
    }
  ],
  "internal_tracker": {
    "tasks": [
      {
        "id": "<string>",
        "title": "<string>",
        "description": "<string>",
        "status": "open",
        "category": "<string>",
        "template_key": "<string>",
        "due_date": "<string>",
        "created_by_user_name": "<string>",
        "created_at": "<string>",
        "updated_at": "<string>",
        "completed_at": "<string>"
      }
    ],
    "open_points": [
      {
        "id": "<string>",
        "title": "<string>",
        "status": "open",
        "ref": {
          "kind": "<string>",
          "gate_definition_id": "mon_rfi"
        },
        "comments": [
          {
            "id": "<string>",
            "author_user_name": "<string>",
            "author_org_name": "<string>",
            "author_side": "ebx",
            "created_at": "<string>",
            "body": "<string>"
          }
        ],
        "created_by_user_name": "<string>",
        "created_at": "<string>",
        "updated_at": "<string>",
        "resolved_at": "<string>"
      }
    ],
    "applied_templates": [
      "<string>"
    ]
  }
}
Can raise
  • 400malformed request
  • 401no valid token
  • 403scope missing
  • 404unknown or not visible
  • 409state conflict
  • 422validation failed
  • 429rate limited
ALL CODES →
POST/v1/onboardings/{onboarding_id}/dpl/rows/{row_id}/comments

Comment on a DPL row

onboarding.write

Adds a discussion comment to a DPL row on the software gate, opens the row discussion thread, and records onboarding activity.

Path parameters

onboarding_idREQUIRED
string<uuid>Stable onboarding identifier returned by create and list operations.
row_idREQUIRED
stringDPL row identifier from the onboarding software-gate DPL payload.

Request body · required

bodyREQUIRED
string
Example value
curl -X POST "https://api.ebx.energy/v1/onboardings/00000000-0000-0000-0000-000000000000/dpl/rows/dpl_row_014/comments" \
  -H "Authorization: Bearer $EBX_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"body":"<string>"}'
Example response200
{
  "status": "open",
  "comments": [
    {
      "id": "<string>",
      "author_user_name": "<string>",
      "author_org_name": "<string>",
      "author_side": "ebx",
      "created_at": "<string>",
      "body": "<string>"
    }
  ],
  "last_comment_at": "<string>"
}
Can raise
  • 400malformed request
  • 401no valid token
  • 403scope missing
  • 404unknown or not visible
  • 409state conflict
  • 422validation failed
  • 429rate limited
ALL CODES →
PATCH/v1/onboardings/{onboarding_id}/dpl/rows/{row_id}/thread

Update a DPL row discussion status

onboarding.write

Opens or resolves the discussion thread for a DPL row without changing the row implementation values.

Path parameters

onboarding_idREQUIRED
string<uuid>Stable onboarding identifier returned by create and list operations.
row_idREQUIRED
stringDPL row identifier from the onboarding software-gate DPL payload.

Request body · required

statusREQUIRED
enumopenresolved
Example value
curl -X PATCH "https://api.ebx.energy/v1/onboardings/00000000-0000-0000-0000-000000000000/dpl/rows/dpl_row_014/thread" \
  -H "Authorization: Bearer $EBX_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"status":"open"}'
Example response200
{
  "status": "open",
  "comments": [
    {
      "id": "<string>",
      "author_user_name": "<string>",
      "author_org_name": "<string>",
      "author_side": "ebx",
      "created_at": "<string>",
      "body": "<string>"
    }
  ],
  "last_comment_at": "<string>"
}
Can raise
  • 400malformed request
  • 401no valid token
  • 403scope missing
  • 404unknown or not visible
  • 409state conflict
  • 422validation failed
  • 429rate limited
ALL CODES →
GET/v1/onboardings/{onboarding_id}/gates/{gate_id}/auto-check

Run a gate auto-check

onboarding.read

Returns the current automated check result for a gate. RFI checks validate required stored fields. DPL checks summarize stored DPL implementation state only. Signal-strength, live telemetry, alarms, and plausibility checks are currently reported as pending until telemetry integration is added.

Path parameters

onboarding_idREQUIRED
string<uuid>Stable onboarding identifier returned by create and list operations.
gate_idREQUIRED
enummon_rfimon_hwmon_swmon_valctl_rfictl_hwctl_swctl_mon_testctl_ctrl_testctl_pq_testctl_pq_submitctl_pq_approvedWorkflow gate identifier from the onboarding process definition.
Example value
curl "https://api.ebx.energy/v1/onboardings/00000000-0000-0000-0000-000000000000/gates/mon_rfi/auto-check" \
  -H "Authorization: Bearer $EBX_TOKEN"
Example response200
{
  "status": "pass",
  "summary": "<string>",
  "facts": [
    {
      "label": "<string>",
      "value": "<string>",
      "pass": false
    }
  ],
  "last_checked_at": "<string>",
  "hardware_signal": {
    "boxes": [
      {
        "device": 0,
        "signal_strength_pct": 0,
        "lan_connected": false,
        "last_seen_at": "<string>"
      }
    ]
  }
}
Can raise
  • 401no valid token
  • 403scope missing
  • 404unknown or not visible
  • 429rate limited
ALL CODES →
POST/v1/onboardings/{onboarding_id}/gates/{gate_id}/block

Block a workflow gate

onboarding.write

Marks an in-progress or awaiting-confirmation gate as blocked, stores the blocking reason, records activity, and sets the overall onboarding status to blocked.

Path parameters

onboarding_idREQUIRED
string<uuid>Stable onboarding identifier returned by create and list operations.
gate_idREQUIRED
enummon_rfimon_hwmon_swmon_valctl_rfictl_hwctl_swctl_mon_testctl_ctrl_testctl_pq_testctl_pq_submitctl_pq_approvedWorkflow gate identifier from the onboarding process definition.

Request body · required

reasonREQUIRED
string
Example value
curl -X POST "https://api.ebx.energy/v1/onboardings/00000000-0000-0000-0000-000000000000/gates/mon_rfi/block" \
  -H "Authorization: Bearer $EBX_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"reason":"<string>"}'
Example response200
{
  "id": "<string>",
  "asset_id": "<string>",
  "asset_name": "<string>",
  "location": "<string>",
  "country": "<string>",
  "tso": "<string>",
  "integration_type": "monitoring_only",
  "target_hc_date": "2026-01-01",
  "current_gate_definition_id": "mon_rfi",
  "overall_status": "in_progress",
  "asset_owner_org_id": "<string>",
  "asset_owner_org_name": "<string>",
  "whitelabel": false,
  "process_definition": {
    "id": "<string>",
    "integration_type": "monitoring_only",
    "version": "<string>",
    "source_label": "<string>",
    "gate_sequence": [
      "mon_rfi"
    ],
    "gate_definitions": "<string>",
    "process_document_slots": [
      {
        "document_type": "installation_photo_mdevice",
        "label": "<string>",
        "description": "<string>",
        "required": false,
        "allow_multiple": false
      }
    ],
    "asset_profile_sync_gate_id": "mon_rfi",
    "schema_version": 0
  },
  "gate_definitions": "<string>",
  "asset_profile": {
    "id": "<string>",
    "onboarding_id": "<string>",
    "asset_id": "<string>",
    "asset_name": "<string>",
    "location": "<string>",
    "country": "<string>",
    "asset_owner_org_id": "<string>",
    "asset_owner_org_name": "<string>",
    "shipping_address": {
      "street": "<string>",
      "postal_code": "<string>",
      "city": "<string>",
      "country": "<string>",
      "attention": "<string>"
    },
    "site_contact": {
      "name": "<string>",
      "email": "name@example.com",
      "phone": "<string>"
    },
    "power_supply": "24v_dc",
    "ethernet_available": false,
    "antenna_location_outdoors": false,
    "ems_vendor": "<string>",
    "ems_vendor_other": "<string>",
    "ems_supports_modbus_tcp": false,
    "pq_submission_targeted": false,
    "ems_technical_contact": {
      "name": "<string>",
      "email": "name@example.com",
      "phone": "<string>"
    },
    "source_gate_definition_id": "mon_rfi",
    "source_gate_passed_at": "<string>",
    "source_gate_updated_at": "<string>",
    "synced_at": "<string>",
    "sync_reason": "<string>"
  },
  "asset_owner_contact": {
    "id": "<string>",
    "contact_name": "<string>",
    "contact_email": "<string>",
    "access": {
      "status": "<string>"
    }
  },
  "asset_owner_contacts": [
    {
      "id": "<string>",
      "contact_name": "<string>",
      "contact_email": "<string>",
      "access": {
        "status": "<string>"
      }
    }
  ],
  "partners": [
    {
      "id": "<string>",
      "role": "epc",
      "org_name": "<string>",
      "contact_name": "<string>",
      "contact_email": "<string>",
      "access": {
        "status": "<string>"
      }
    }
  ],
  "created_at": "<string>",
  "updated_at": "<string>",
  "gates": [
    {
      "id": "<string>",
      "definition_id": "mon_rfi",
      "status": "pending",
      "deadline": "2026-01-01",
      "last_note": "<string>",
      "passed_at": "<string>",
      "passed_by_user_name": "<string>",
      "structured_data": "<string>"
    }
  ],
  "documents": [
    {
      "id": "<string>",
      "onboarding_id": "<string>",
      "gate_definition_id": "mon_rfi",
      "document_type": "installation_photo_mdevice",
      "filename": "<string>",
      "size_bytes": 0,
      "content_type": "<string>",
      "uploaded_at": "<string>",
      "uploaded_by_user_name": "<string>",
      "version": 0
    }
  ],
  "activity": [
    {
      "id": "<string>",
      "onboarding_id": "<string>",
      "gate_definition_id": "mon_rfi",
      "actor_user_name": "<string>",
      "actor_org_name": "<string>",
      "event_type": "onboarding_created",
      "note": "<string>",
      "created_at": "<string>"
    }
  ],
  "internal_tracker": {
    "tasks": [
      {
        "id": "<string>",
        "title": "<string>",
        "description": "<string>",
        "status": "open",
        "category": "<string>",
        "template_key": "<string>",
        "due_date": "<string>",
        "created_by_user_name": "<string>",
        "created_at": "<string>",
        "updated_at": "<string>",
        "completed_at": "<string>"
      }
    ],
    "open_points": [
      {
        "id": "<string>",
        "title": "<string>",
        "status": "open",
        "ref": {
          "kind": "<string>",
          "gate_definition_id": "mon_rfi"
        },
        "comments": [
          {
            "id": "<string>",
            "author_user_name": "<string>",
            "author_org_name": "<string>",
            "author_side": "ebx",
            "created_at": "<string>",
            "body": "<string>"
          }
        ],
        "created_by_user_name": "<string>",
        "created_at": "<string>",
        "updated_at": "<string>",
        "resolved_at": "<string>"
      }
    ],
    "applied_templates": [
      "<string>"
    ]
  }
}
Can raise
  • 400malformed request
  • 401no valid token
  • 403scope missing
  • 404unknown or not visible
  • 409state conflict
  • 422validation failed
  • 429rate limited
ALL CODES →
POST/v1/onboardings/{onboarding_id}/gates/{gate_id}/note

Update a gate note

onboarding.write

Stores the latest operational note on a gate and records an activity entry. This does not change the gate status.

Path parameters

onboarding_idREQUIRED
string<uuid>Stable onboarding identifier returned by create and list operations.
gate_idREQUIRED
enummon_rfimon_hwmon_swmon_valctl_rfictl_hwctl_swctl_mon_testctl_ctrl_testctl_pq_testctl_pq_submitctl_pq_approvedWorkflow gate identifier from the onboarding process definition.

Request body · required

noteREQUIRED
string
Example value
curl -X POST "https://api.ebx.energy/v1/onboardings/00000000-0000-0000-0000-000000000000/gates/mon_rfi/note" \
  -H "Authorization: Bearer $EBX_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"note":"<string>"}'
Example response200
{
  "id": "<string>",
  "asset_id": "<string>",
  "asset_name": "<string>",
  "location": "<string>",
  "country": "<string>",
  "tso": "<string>",
  "integration_type": "monitoring_only",
  "target_hc_date": "2026-01-01",
  "current_gate_definition_id": "mon_rfi",
  "overall_status": "in_progress",
  "asset_owner_org_id": "<string>",
  "asset_owner_org_name": "<string>",
  "whitelabel": false,
  "process_definition": {
    "id": "<string>",
    "integration_type": "monitoring_only",
    "version": "<string>",
    "source_label": "<string>",
    "gate_sequence": [
      "mon_rfi"
    ],
    "gate_definitions": "<string>",
    "process_document_slots": [
      {
        "document_type": "installation_photo_mdevice",
        "label": "<string>",
        "description": "<string>",
        "required": false,
        "allow_multiple": false
      }
    ],
    "asset_profile_sync_gate_id": "mon_rfi",
    "schema_version": 0
  },
  "gate_definitions": "<string>",
  "asset_profile": {
    "id": "<string>",
    "onboarding_id": "<string>",
    "asset_id": "<string>",
    "asset_name": "<string>",
    "location": "<string>",
    "country": "<string>",
    "asset_owner_org_id": "<string>",
    "asset_owner_org_name": "<string>",
    "shipping_address": {
      "street": "<string>",
      "postal_code": "<string>",
      "city": "<string>",
      "country": "<string>",
      "attention": "<string>"
    },
    "site_contact": {
      "name": "<string>",
      "email": "name@example.com",
      "phone": "<string>"
    },
    "power_supply": "24v_dc",
    "ethernet_available": false,
    "antenna_location_outdoors": false,
    "ems_vendor": "<string>",
    "ems_vendor_other": "<string>",
    "ems_supports_modbus_tcp": false,
    "pq_submission_targeted": false,
    "ems_technical_contact": {
      "name": "<string>",
      "email": "name@example.com",
      "phone": "<string>"
    },
    "source_gate_definition_id": "mon_rfi",
    "source_gate_passed_at": "<string>",
    "source_gate_updated_at": "<string>",
    "synced_at": "<string>",
    "sync_reason": "<string>"
  },
  "asset_owner_contact": {
    "id": "<string>",
    "contact_name": "<string>",
    "contact_email": "<string>",
    "access": {
      "status": "<string>"
    }
  },
  "asset_owner_contacts": [
    {
      "id": "<string>",
      "contact_name": "<string>",
      "contact_email": "<string>",
      "access": {
        "status": "<string>"
      }
    }
  ],
  "partners": [
    {
      "id": "<string>",
      "role": "epc",
      "org_name": "<string>",
      "contact_name": "<string>",
      "contact_email": "<string>",
      "access": {
        "status": "<string>"
      }
    }
  ],
  "created_at": "<string>",
  "updated_at": "<string>",
  "gates": [
    {
      "id": "<string>",
      "definition_id": "mon_rfi",
      "status": "pending",
      "deadline": "2026-01-01",
      "last_note": "<string>",
      "passed_at": "<string>",
      "passed_by_user_name": "<string>",
      "structured_data": "<string>"
    }
  ],
  "documents": [
    {
      "id": "<string>",
      "onboarding_id": "<string>",
      "gate_definition_id": "mon_rfi",
      "document_type": "installation_photo_mdevice",
      "filename": "<string>",
      "size_bytes": 0,
      "content_type": "<string>",
      "uploaded_at": "<string>",
      "uploaded_by_user_name": "<string>",
      "version": 0
    }
  ],
  "activity": [
    {
      "id": "<string>",
      "onboarding_id": "<string>",
      "gate_definition_id": "mon_rfi",
      "actor_user_name": "<string>",
      "actor_org_name": "<string>",
      "event_type": "onboarding_created",
      "note": "<string>",
      "created_at": "<string>"
    }
  ],
  "internal_tracker": {
    "tasks": [
      {
        "id": "<string>",
        "title": "<string>",
        "description": "<string>",
        "status": "open",
        "category": "<string>",
        "template_key": "<string>",
        "due_date": "<string>",
        "created_by_user_name": "<string>",
        "created_at": "<string>",
        "updated_at": "<string>",
        "completed_at": "<string>"
      }
    ],
    "open_points": [
      {
        "id": "<string>",
        "title": "<string>",
        "status": "open",
        "ref": {
          "kind": "<string>",
          "gate_definition_id": "mon_rfi"
        },
        "comments": [
          {
            "id": "<string>",
            "author_user_name": "<string>",
            "author_org_name": "<string>",
            "author_side": "ebx",
            "created_at": "<string>",
            "body": "<string>"
          }
        ],
        "created_by_user_name": "<string>",
        "created_at": "<string>",
        "updated_at": "<string>",
        "resolved_at": "<string>"
      }
    ],
    "applied_templates": [
      "<string>"
    ]
  }
}
Can raise
  • 400malformed request
  • 401no valid token
  • 403scope missing
  • 404unknown or not visible
  • 409state conflict
  • 422validation failed
  • 429rate limited
ALL CODES →
POST/v1/onboardings/{onboarding_id}/gates/{gate_id}/pass

Pass a workflow gate

onboarding.write

Signs off a gate and advances the workflow. The service validates prerequisites, validates any gate-specific structured data, records the sign-off, starts the next pending gate, and recomputes the overall onboarding status from the persisted process definition. Passing the configured RFI gate also syncs the asset profile.

Path parameters

onboarding_idREQUIRED
string<uuid>Stable onboarding identifier returned by create and list operations.
gate_idREQUIRED
enummon_rfimon_hwmon_swmon_valctl_rfictl_hwctl_swctl_mon_testctl_ctrl_testctl_pq_testctl_pq_submitctl_pq_approvedWorkflow gate identifier from the onboarding process definition.

Request body · required

note
string
structured_data
object
override_reason
string
Example value
curl -X POST "https://api.ebx.energy/v1/onboardings/00000000-0000-0000-0000-000000000000/gates/mon_rfi/pass" \
  -H "Authorization: Bearer $EBX_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"note":"<string>","structured_data":"<string>","override_reason":"<string>"}'
Example response200
{
  "id": "<string>",
  "asset_id": "<string>",
  "asset_name": "<string>",
  "location": "<string>",
  "country": "<string>",
  "tso": "<string>",
  "integration_type": "monitoring_only",
  "target_hc_date": "2026-01-01",
  "current_gate_definition_id": "mon_rfi",
  "overall_status": "in_progress",
  "asset_owner_org_id": "<string>",
  "asset_owner_org_name": "<string>",
  "whitelabel": false,
  "process_definition": {
    "id": "<string>",
    "integration_type": "monitoring_only",
    "version": "<string>",
    "source_label": "<string>",
    "gate_sequence": [
      "mon_rfi"
    ],
    "gate_definitions": "<string>",
    "process_document_slots": [
      {
        "document_type": "installation_photo_mdevice",
        "label": "<string>",
        "description": "<string>",
        "required": false,
        "allow_multiple": false
      }
    ],
    "asset_profile_sync_gate_id": "mon_rfi",
    "schema_version": 0
  },
  "gate_definitions": "<string>",
  "asset_profile": {
    "id": "<string>",
    "onboarding_id": "<string>",
    "asset_id": "<string>",
    "asset_name": "<string>",
    "location": "<string>",
    "country": "<string>",
    "asset_owner_org_id": "<string>",
    "asset_owner_org_name": "<string>",
    "shipping_address": {
      "street": "<string>",
      "postal_code": "<string>",
      "city": "<string>",
      "country": "<string>",
      "attention": "<string>"
    },
    "site_contact": {
      "name": "<string>",
      "email": "name@example.com",
      "phone": "<string>"
    },
    "power_supply": "24v_dc",
    "ethernet_available": false,
    "antenna_location_outdoors": false,
    "ems_vendor": "<string>",
    "ems_vendor_other": "<string>",
    "ems_supports_modbus_tcp": false,
    "pq_submission_targeted": false,
    "ems_technical_contact": {
      "name": "<string>",
      "email": "name@example.com",
      "phone": "<string>"
    },
    "source_gate_definition_id": "mon_rfi",
    "source_gate_passed_at": "<string>",
    "source_gate_updated_at": "<string>",
    "synced_at": "<string>",
    "sync_reason": "<string>"
  },
  "asset_owner_contact": {
    "id": "<string>",
    "contact_name": "<string>",
    "contact_email": "<string>",
    "access": {
      "status": "<string>"
    }
  },
  "asset_owner_contacts": [
    {
      "id": "<string>",
      "contact_name": "<string>",
      "contact_email": "<string>",
      "access": {
        "status": "<string>"
      }
    }
  ],
  "partners": [
    {
      "id": "<string>",
      "role": "epc",
      "org_name": "<string>",
      "contact_name": "<string>",
      "contact_email": "<string>",
      "access": {
        "status": "<string>"
      }
    }
  ],
  "created_at": "<string>",
  "updated_at": "<string>",
  "gates": [
    {
      "id": "<string>",
      "definition_id": "mon_rfi",
      "status": "pending",
      "deadline": "2026-01-01",
      "last_note": "<string>",
      "passed_at": "<string>",
      "passed_by_user_name": "<string>",
      "structured_data": "<string>"
    }
  ],
  "documents": [
    {
      "id": "<string>",
      "onboarding_id": "<string>",
      "gate_definition_id": "mon_rfi",
      "document_type": "installation_photo_mdevice",
      "filename": "<string>",
      "size_bytes": 0,
      "content_type": "<string>",
      "uploaded_at": "<string>",
      "uploaded_by_user_name": "<string>",
      "version": 0
    }
  ],
  "activity": [
    {
      "id": "<string>",
      "onboarding_id": "<string>",
      "gate_definition_id": "mon_rfi",
      "actor_user_name": "<string>",
      "actor_org_name": "<string>",
      "event_type": "onboarding_created",
      "note": "<string>",
      "created_at": "<string>"
    }
  ],
  "internal_tracker": {
    "tasks": [
      {
        "id": "<string>",
        "title": "<string>",
        "description": "<string>",
        "status": "open",
        "category": "<string>",
        "template_key": "<string>",
        "due_date": "<string>",
        "created_by_user_name": "<string>",
        "created_at": "<string>",
        "updated_at": "<string>",
        "completed_at": "<string>"
      }
    ],
    "open_points": [
      {
        "id": "<string>",
        "title": "<string>",
        "status": "open",
        "ref": {
          "kind": "<string>",
          "gate_definition_id": "mon_rfi"
        },
        "comments": [
          {
            "id": "<string>",
            "author_user_name": "<string>",
            "author_org_name": "<string>",
            "author_side": "ebx",
            "created_at": "<string>",
            "body": "<string>"
          }
        ],
        "created_by_user_name": "<string>",
        "created_at": "<string>",
        "updated_at": "<string>",
        "resolved_at": "<string>"
      }
    ],
    "applied_templates": [
      "<string>"
    ]
  }
}
Can raise
  • 400malformed request
  • 401no valid token
  • 403scope missing
  • 404unknown or not visible
  • 409state conflict
  • 422validation failed
  • 429rate limited
ALL CODES →
POST/v1/onboardings/{onboarding_id}/gates/{gate_id}/reopen

Reopen a workflow gate

onboarding.write

Reopens a passed or blocked gate and resets all downstream gates to pending. Use this when a prior sign-off needs correction or new information invalidates later steps.

Path parameters

onboarding_idREQUIRED
string<uuid>Stable onboarding identifier returned by create and list operations.
gate_idREQUIRED
enummon_rfimon_hwmon_swmon_valctl_rfictl_hwctl_swctl_mon_testctl_ctrl_testctl_pq_testctl_pq_submitctl_pq_approvedWorkflow gate identifier from the onboarding process definition.

Request body · required

reasonREQUIRED
string
Example value
curl -X POST "https://api.ebx.energy/v1/onboardings/00000000-0000-0000-0000-000000000000/gates/mon_rfi/reopen" \
  -H "Authorization: Bearer $EBX_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"reason":"<string>"}'
Example response200
{
  "id": "<string>",
  "asset_id": "<string>",
  "asset_name": "<string>",
  "location": "<string>",
  "country": "<string>",
  "tso": "<string>",
  "integration_type": "monitoring_only",
  "target_hc_date": "2026-01-01",
  "current_gate_definition_id": "mon_rfi",
  "overall_status": "in_progress",
  "asset_owner_org_id": "<string>",
  "asset_owner_org_name": "<string>",
  "whitelabel": false,
  "process_definition": {
    "id": "<string>",
    "integration_type": "monitoring_only",
    "version": "<string>",
    "source_label": "<string>",
    "gate_sequence": [
      "mon_rfi"
    ],
    "gate_definitions": "<string>",
    "process_document_slots": [
      {
        "document_type": "installation_photo_mdevice",
        "label": "<string>",
        "description": "<string>",
        "required": false,
        "allow_multiple": false
      }
    ],
    "asset_profile_sync_gate_id": "mon_rfi",
    "schema_version": 0
  },
  "gate_definitions": "<string>",
  "asset_profile": {
    "id": "<string>",
    "onboarding_id": "<string>",
    "asset_id": "<string>",
    "asset_name": "<string>",
    "location": "<string>",
    "country": "<string>",
    "asset_owner_org_id": "<string>",
    "asset_owner_org_name": "<string>",
    "shipping_address": {
      "street": "<string>",
      "postal_code": "<string>",
      "city": "<string>",
      "country": "<string>",
      "attention": "<string>"
    },
    "site_contact": {
      "name": "<string>",
      "email": "name@example.com",
      "phone": "<string>"
    },
    "power_supply": "24v_dc",
    "ethernet_available": false,
    "antenna_location_outdoors": false,
    "ems_vendor": "<string>",
    "ems_vendor_other": "<string>",
    "ems_supports_modbus_tcp": false,
    "pq_submission_targeted": false,
    "ems_technical_contact": {
      "name": "<string>",
      "email": "name@example.com",
      "phone": "<string>"
    },
    "source_gate_definition_id": "mon_rfi",
    "source_gate_passed_at": "<string>",
    "source_gate_updated_at": "<string>",
    "synced_at": "<string>",
    "sync_reason": "<string>"
  },
  "asset_owner_contact": {
    "id": "<string>",
    "contact_name": "<string>",
    "contact_email": "<string>",
    "access": {
      "status": "<string>"
    }
  },
  "asset_owner_contacts": [
    {
      "id": "<string>",
      "contact_name": "<string>",
      "contact_email": "<string>",
      "access": {
        "status": "<string>"
      }
    }
  ],
  "partners": [
    {
      "id": "<string>",
      "role": "epc",
      "org_name": "<string>",
      "contact_name": "<string>",
      "contact_email": "<string>",
      "access": {
        "status": "<string>"
      }
    }
  ],
  "created_at": "<string>",
  "updated_at": "<string>",
  "gates": [
    {
      "id": "<string>",
      "definition_id": "mon_rfi",
      "status": "pending",
      "deadline": "2026-01-01",
      "last_note": "<string>",
      "passed_at": "<string>",
      "passed_by_user_name": "<string>",
      "structured_data": "<string>"
    }
  ],
  "documents": [
    {
      "id": "<string>",
      "onboarding_id": "<string>",
      "gate_definition_id": "mon_rfi",
      "document_type": "installation_photo_mdevice",
      "filename": "<string>",
      "size_bytes": 0,
      "content_type": "<string>",
      "uploaded_at": "<string>",
      "uploaded_by_user_name": "<string>",
      "version": 0
    }
  ],
  "activity": [
    {
      "id": "<string>",
      "onboarding_id": "<string>",
      "gate_definition_id": "mon_rfi",
      "actor_user_name": "<string>",
      "actor_org_name": "<string>",
      "event_type": "onboarding_created",
      "note": "<string>",
      "created_at": "<string>"
    }
  ],
  "internal_tracker": {
    "tasks": [
      {
        "id": "<string>",
        "title": "<string>",
        "description": "<string>",
        "status": "open",
        "category": "<string>",
        "template_key": "<string>",
        "due_date": "<string>",
        "created_by_user_name": "<string>",
        "created_at": "<string>",
        "updated_at": "<string>",
        "completed_at": "<string>"
      }
    ],
    "open_points": [
      {
        "id": "<string>",
        "title": "<string>",
        "status": "open",
        "ref": {
          "kind": "<string>",
          "gate_definition_id": "mon_rfi"
        },
        "comments": [
          {
            "id": "<string>",
            "author_user_name": "<string>",
            "author_org_name": "<string>",
            "author_side": "ebx",
            "created_at": "<string>",
            "body": "<string>"
          }
        ],
        "created_by_user_name": "<string>",
        "created_at": "<string>",
        "updated_at": "<string>",
        "resolved_at": "<string>"
      }
    ],
    "applied_templates": [
      "<string>"
    ]
  }
}
Can raise
  • 400malformed request
  • 401no valid token
  • 403scope missing
  • 404unknown or not visible
  • 409state conflict
  • 422validation failed
  • 429rate limited
ALL CODES →
PATCH/v1/onboardings/{onboarding_id}/gates/{gate_id}/structured-data

Update gate structured data

onboarding.write

Persists the current structured payload for a gate without passing the gate. RFI, DPL, control-test, and Betriebsfahrt payloads are schema-validated. If the configured RFI gate has already passed, updating its payload also refreshes the synced asset profile.

Path parameters

onboarding_idREQUIRED
string<uuid>Stable onboarding identifier returned by create and list operations.
gate_idREQUIRED
enummon_rfimon_hwmon_swmon_valctl_rfictl_hwctl_swctl_mon_testctl_ctrl_testctl_pq_testctl_pq_submitctl_pq_approvedWorkflow gate identifier from the onboarding process definition.

Request body · required

structured_dataREQUIRED
object
Example value
curl -X PATCH "https://api.ebx.energy/v1/onboardings/00000000-0000-0000-0000-000000000000/gates/mon_rfi/structured-data" \
  -H "Authorization: Bearer $EBX_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"structured_data":"<string>"}'
Example response200
{
  "id": "<string>",
  "asset_id": "<string>",
  "asset_name": "<string>",
  "location": "<string>",
  "country": "<string>",
  "tso": "<string>",
  "integration_type": "monitoring_only",
  "target_hc_date": "2026-01-01",
  "current_gate_definition_id": "mon_rfi",
  "overall_status": "in_progress",
  "asset_owner_org_id": "<string>",
  "asset_owner_org_name": "<string>",
  "whitelabel": false,
  "process_definition": {
    "id": "<string>",
    "integration_type": "monitoring_only",
    "version": "<string>",
    "source_label": "<string>",
    "gate_sequence": [
      "mon_rfi"
    ],
    "gate_definitions": "<string>",
    "process_document_slots": [
      {
        "document_type": "installation_photo_mdevice",
        "label": "<string>",
        "description": "<string>",
        "required": false,
        "allow_multiple": false
      }
    ],
    "asset_profile_sync_gate_id": "mon_rfi",
    "schema_version": 0
  },
  "gate_definitions": "<string>",
  "asset_profile": {
    "id": "<string>",
    "onboarding_id": "<string>",
    "asset_id": "<string>",
    "asset_name": "<string>",
    "location": "<string>",
    "country": "<string>",
    "asset_owner_org_id": "<string>",
    "asset_owner_org_name": "<string>",
    "shipping_address": {
      "street": "<string>",
      "postal_code": "<string>",
      "city": "<string>",
      "country": "<string>",
      "attention": "<string>"
    },
    "site_contact": {
      "name": "<string>",
      "email": "name@example.com",
      "phone": "<string>"
    },
    "power_supply": "24v_dc",
    "ethernet_available": false,
    "antenna_location_outdoors": false,
    "ems_vendor": "<string>",
    "ems_vendor_other": "<string>",
    "ems_supports_modbus_tcp": false,
    "pq_submission_targeted": false,
    "ems_technical_contact": {
      "name": "<string>",
      "email": "name@example.com",
      "phone": "<string>"
    },
    "source_gate_definition_id": "mon_rfi",
    "source_gate_passed_at": "<string>",
    "source_gate_updated_at": "<string>",
    "synced_at": "<string>",
    "sync_reason": "<string>"
  },
  "asset_owner_contact": {
    "id": "<string>",
    "contact_name": "<string>",
    "contact_email": "<string>",
    "access": {
      "status": "<string>"
    }
  },
  "asset_owner_contacts": [
    {
      "id": "<string>",
      "contact_name": "<string>",
      "contact_email": "<string>",
      "access": {
        "status": "<string>"
      }
    }
  ],
  "partners": [
    {
      "id": "<string>",
      "role": "epc",
      "org_name": "<string>",
      "contact_name": "<string>",
      "contact_email": "<string>",
      "access": {
        "status": "<string>"
      }
    }
  ],
  "created_at": "<string>",
  "updated_at": "<string>",
  "gates": [
    {
      "id": "<string>",
      "definition_id": "mon_rfi",
      "status": "pending",
      "deadline": "2026-01-01",
      "last_note": "<string>",
      "passed_at": "<string>",
      "passed_by_user_name": "<string>",
      "structured_data": "<string>"
    }
  ],
  "documents": [
    {
      "id": "<string>",
      "onboarding_id": "<string>",
      "gate_definition_id": "mon_rfi",
      "document_type": "installation_photo_mdevice",
      "filename": "<string>",
      "size_bytes": 0,
      "content_type": "<string>",
      "uploaded_at": "<string>",
      "uploaded_by_user_name": "<string>",
      "version": 0
    }
  ],
  "activity": [
    {
      "id": "<string>",
      "onboarding_id": "<string>",
      "gate_definition_id": "mon_rfi",
      "actor_user_name": "<string>",
      "actor_org_name": "<string>",
      "event_type": "onboarding_created",
      "note": "<string>",
      "created_at": "<string>"
    }
  ],
  "internal_tracker": {
    "tasks": [
      {
        "id": "<string>",
        "title": "<string>",
        "description": "<string>",
        "status": "open",
        "category": "<string>",
        "template_key": "<string>",
        "due_date": "<string>",
        "created_by_user_name": "<string>",
        "created_at": "<string>",
        "updated_at": "<string>",
        "completed_at": "<string>"
      }
    ],
    "open_points": [
      {
        "id": "<string>",
        "title": "<string>",
        "status": "open",
        "ref": {
          "kind": "<string>",
          "gate_definition_id": "mon_rfi"
        },
        "comments": [
          {
            "id": "<string>",
            "author_user_name": "<string>",
            "author_org_name": "<string>",
            "author_side": "ebx",
            "created_at": "<string>",
            "body": "<string>"
          }
        ],
        "created_by_user_name": "<string>",
        "created_at": "<string>",
        "updated_at": "<string>",
        "resolved_at": "<string>"
      }
    ],
    "applied_templates": [
      "<string>"
    ]
  }
}
Can raise
  • 400malformed request
  • 401no valid token
  • 403scope missing
  • 404unknown or not visible
  • 409state conflict
  • 422validation failed
  • 429rate limited
ALL CODES →
POST/v1/onboardings/{onboarding_id}/internal-tracker/open-points

Add an internal tracker open point

onboarding.write

Adds an EBX-internal open point, optionally linked to a gate, RfI field, or DPL row, with an optional first comment.

Path parameters

onboarding_idREQUIRED
string<uuid>Stable onboarding identifier returned by create and list operations.

Request body · required

titleREQUIRED
string
ref
OpenPointGateRef | OpenPointRfiFieldRef | OpenPointDplRowRef
body
string
Example value
curl -X POST "https://api.ebx.energy/v1/onboardings/00000000-0000-0000-0000-000000000000/internal-tracker/open-points" \
  -H "Authorization: Bearer $EBX_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"title":"<string>","ref":{"kind":"<string>","gate_definition_id":"mon_rfi"},"body":"<string>"}'
Example response201
{
  "id": "<string>",
  "asset_id": "<string>",
  "asset_name": "<string>",
  "location": "<string>",
  "country": "<string>",
  "tso": "<string>",
  "integration_type": "monitoring_only",
  "target_hc_date": "2026-01-01",
  "current_gate_definition_id": "mon_rfi",
  "overall_status": "in_progress",
  "asset_owner_org_id": "<string>",
  "asset_owner_org_name": "<string>",
  "whitelabel": false,
  "process_definition": {
    "id": "<string>",
    "integration_type": "monitoring_only",
    "version": "<string>",
    "source_label": "<string>",
    "gate_sequence": [
      "mon_rfi"
    ],
    "gate_definitions": "<string>",
    "process_document_slots": [
      {
        "document_type": "installation_photo_mdevice",
        "label": "<string>",
        "description": "<string>",
        "required": false,
        "allow_multiple": false
      }
    ],
    "asset_profile_sync_gate_id": "mon_rfi",
    "schema_version": 0
  },
  "gate_definitions": "<string>",
  "asset_profile": {
    "id": "<string>",
    "onboarding_id": "<string>",
    "asset_id": "<string>",
    "asset_name": "<string>",
    "location": "<string>",
    "country": "<string>",
    "asset_owner_org_id": "<string>",
    "asset_owner_org_name": "<string>",
    "shipping_address": {
      "street": "<string>",
      "postal_code": "<string>",
      "city": "<string>",
      "country": "<string>",
      "attention": "<string>"
    },
    "site_contact": {
      "name": "<string>",
      "email": "name@example.com",
      "phone": "<string>"
    },
    "power_supply": "24v_dc",
    "ethernet_available": false,
    "antenna_location_outdoors": false,
    "ems_vendor": "<string>",
    "ems_vendor_other": "<string>",
    "ems_supports_modbus_tcp": false,
    "pq_submission_targeted": false,
    "ems_technical_contact": {
      "name": "<string>",
      "email": "name@example.com",
      "phone": "<string>"
    },
    "source_gate_definition_id": "mon_rfi",
    "source_gate_passed_at": "<string>",
    "source_gate_updated_at": "<string>",
    "synced_at": "<string>",
    "sync_reason": "<string>"
  },
  "asset_owner_contact": {
    "id": "<string>",
    "contact_name": "<string>",
    "contact_email": "<string>",
    "access": {
      "status": "<string>"
    }
  },
  "asset_owner_contacts": [
    {
      "id": "<string>",
      "contact_name": "<string>",
      "contact_email": "<string>",
      "access": {
        "status": "<string>"
      }
    }
  ],
  "partners": [
    {
      "id": "<string>",
      "role": "epc",
      "org_name": "<string>",
      "contact_name": "<string>",
      "contact_email": "<string>",
      "access": {
        "status": "<string>"
      }
    }
  ],
  "created_at": "<string>",
  "updated_at": "<string>",
  "gates": [
    {
      "id": "<string>",
      "definition_id": "mon_rfi",
      "status": "pending",
      "deadline": "2026-01-01",
      "last_note": "<string>",
      "passed_at": "<string>",
      "passed_by_user_name": "<string>",
      "structured_data": "<string>"
    }
  ],
  "documents": [
    {
      "id": "<string>",
      "onboarding_id": "<string>",
      "gate_definition_id": "mon_rfi",
      "document_type": "installation_photo_mdevice",
      "filename": "<string>",
      "size_bytes": 0,
      "content_type": "<string>",
      "uploaded_at": "<string>",
      "uploaded_by_user_name": "<string>",
      "version": 0
    }
  ],
  "activity": [
    {
      "id": "<string>",
      "onboarding_id": "<string>",
      "gate_definition_id": "mon_rfi",
      "actor_user_name": "<string>",
      "actor_org_name": "<string>",
      "event_type": "onboarding_created",
      "note": "<string>",
      "created_at": "<string>"
    }
  ],
  "internal_tracker": {
    "tasks": [
      {
        "id": "<string>",
        "title": "<string>",
        "description": "<string>",
        "status": "open",
        "category": "<string>",
        "template_key": "<string>",
        "due_date": "<string>",
        "created_by_user_name": "<string>",
        "created_at": "<string>",
        "updated_at": "<string>",
        "completed_at": "<string>"
      }
    ],
    "open_points": [
      {
        "id": "<string>",
        "title": "<string>",
        "status": "open",
        "ref": {
          "kind": "<string>",
          "gate_definition_id": "mon_rfi"
        },
        "comments": [
          {
            "id": "<string>",
            "author_user_name": "<string>",
            "author_org_name": "<string>",
            "author_side": "ebx",
            "created_at": "<string>",
            "body": "<string>"
          }
        ],
        "created_by_user_name": "<string>",
        "created_at": "<string>",
        "updated_at": "<string>",
        "resolved_at": "<string>"
      }
    ],
    "applied_templates": [
      "<string>"
    ]
  }
}
Can raise
  • 400malformed request
  • 401no valid token
  • 403scope missing
  • 404unknown or not visible
  • 409state conflict
  • 422validation failed
  • 429rate limited
ALL CODES →
PATCH/v1/onboardings/{onboarding_id}/internal-tracker/open-points/{point_id}

Resolve or reopen an internal tracker open point

onboarding.write

Sets an open point's status. Resolving records an internal activity entry.

Path parameters

onboarding_idREQUIRED
string<uuid>Stable onboarding identifier returned by create and list operations.
point_idREQUIRED
stringInternal-tracker open-point identifier from the onboarding response.

Request body · required

statusREQUIRED
enumopenresolved
Example value
curl -X PATCH "https://api.ebx.energy/v1/onboardings/00000000-0000-0000-0000-000000000000/internal-tracker/open-points/op-77" \
  -H "Authorization: Bearer $EBX_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"status":"open"}'
Example response200
{
  "id": "<string>",
  "asset_id": "<string>",
  "asset_name": "<string>",
  "location": "<string>",
  "country": "<string>",
  "tso": "<string>",
  "integration_type": "monitoring_only",
  "target_hc_date": "2026-01-01",
  "current_gate_definition_id": "mon_rfi",
  "overall_status": "in_progress",
  "asset_owner_org_id": "<string>",
  "asset_owner_org_name": "<string>",
  "whitelabel": false,
  "process_definition": {
    "id": "<string>",
    "integration_type": "monitoring_only",
    "version": "<string>",
    "source_label": "<string>",
    "gate_sequence": [
      "mon_rfi"
    ],
    "gate_definitions": "<string>",
    "process_document_slots": [
      {
        "document_type": "installation_photo_mdevice",
        "label": "<string>",
        "description": "<string>",
        "required": false,
        "allow_multiple": false
      }
    ],
    "asset_profile_sync_gate_id": "mon_rfi",
    "schema_version": 0
  },
  "gate_definitions": "<string>",
  "asset_profile": {
    "id": "<string>",
    "onboarding_id": "<string>",
    "asset_id": "<string>",
    "asset_name": "<string>",
    "location": "<string>",
    "country": "<string>",
    "asset_owner_org_id": "<string>",
    "asset_owner_org_name": "<string>",
    "shipping_address": {
      "street": "<string>",
      "postal_code": "<string>",
      "city": "<string>",
      "country": "<string>",
      "attention": "<string>"
    },
    "site_contact": {
      "name": "<string>",
      "email": "name@example.com",
      "phone": "<string>"
    },
    "power_supply": "24v_dc",
    "ethernet_available": false,
    "antenna_location_outdoors": false,
    "ems_vendor": "<string>",
    "ems_vendor_other": "<string>",
    "ems_supports_modbus_tcp": false,
    "pq_submission_targeted": false,
    "ems_technical_contact": {
      "name": "<string>",
      "email": "name@example.com",
      "phone": "<string>"
    },
    "source_gate_definition_id": "mon_rfi",
    "source_gate_passed_at": "<string>",
    "source_gate_updated_at": "<string>",
    "synced_at": "<string>",
    "sync_reason": "<string>"
  },
  "asset_owner_contact": {
    "id": "<string>",
    "contact_name": "<string>",
    "contact_email": "<string>",
    "access": {
      "status": "<string>"
    }
  },
  "asset_owner_contacts": [
    {
      "id": "<string>",
      "contact_name": "<string>",
      "contact_email": "<string>",
      "access": {
        "status": "<string>"
      }
    }
  ],
  "partners": [
    {
      "id": "<string>",
      "role": "epc",
      "org_name": "<string>",
      "contact_name": "<string>",
      "contact_email": "<string>",
      "access": {
        "status": "<string>"
      }
    }
  ],
  "created_at": "<string>",
  "updated_at": "<string>",
  "gates": [
    {
      "id": "<string>",
      "definition_id": "mon_rfi",
      "status": "pending",
      "deadline": "2026-01-01",
      "last_note": "<string>",
      "passed_at": "<string>",
      "passed_by_user_name": "<string>",
      "structured_data": "<string>"
    }
  ],
  "documents": [
    {
      "id": "<string>",
      "onboarding_id": "<string>",
      "gate_definition_id": "mon_rfi",
      "document_type": "installation_photo_mdevice",
      "filename": "<string>",
      "size_bytes": 0,
      "content_type": "<string>",
      "uploaded_at": "<string>",
      "uploaded_by_user_name": "<string>",
      "version": 0
    }
  ],
  "activity": [
    {
      "id": "<string>",
      "onboarding_id": "<string>",
      "gate_definition_id": "mon_rfi",
      "actor_user_name": "<string>",
      "actor_org_name": "<string>",
      "event_type": "onboarding_created",
      "note": "<string>",
      "created_at": "<string>"
    }
  ],
  "internal_tracker": {
    "tasks": [
      {
        "id": "<string>",
        "title": "<string>",
        "description": "<string>",
        "status": "open",
        "category": "<string>",
        "template_key": "<string>",
        "due_date": "<string>",
        "created_by_user_name": "<string>",
        "created_at": "<string>",
        "updated_at": "<string>",
        "completed_at": "<string>"
      }
    ],
    "open_points": [
      {
        "id": "<string>",
        "title": "<string>",
        "status": "open",
        "ref": {
          "kind": "<string>",
          "gate_definition_id": "mon_rfi"
        },
        "comments": [
          {
            "id": "<string>",
            "author_user_name": "<string>",
            "author_org_name": "<string>",
            "author_side": "ebx",
            "created_at": "<string>",
            "body": "<string>"
          }
        ],
        "created_by_user_name": "<string>",
        "created_at": "<string>",
        "updated_at": "<string>",
        "resolved_at": "<string>"
      }
    ],
    "applied_templates": [
      "<string>"
    ]
  }
}
Can raise
  • 400malformed request
  • 401no valid token
  • 403scope missing
  • 404unknown or not visible
  • 409state conflict
  • 422validation failed
  • 429rate limited
ALL CODES →
POST/v1/onboardings/{onboarding_id}/internal-tracker/open-points/{point_id}/comments

Comment on an internal tracker open point

onboarding.write

Appends an EBX-internal comment to an open point. Commenting on a resolved open point reopens it.

Path parameters

onboarding_idREQUIRED
string<uuid>Stable onboarding identifier returned by create and list operations.
point_idREQUIRED
stringInternal-tracker open-point identifier from the onboarding response.

Request body · required

bodyREQUIRED
string
Example value
curl -X POST "https://api.ebx.energy/v1/onboardings/00000000-0000-0000-0000-000000000000/internal-tracker/open-points/op-77/comments" \
  -H "Authorization: Bearer $EBX_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"body":"<string>"}'
Example response200
{
  "id": "<string>",
  "asset_id": "<string>",
  "asset_name": "<string>",
  "location": "<string>",
  "country": "<string>",
  "tso": "<string>",
  "integration_type": "monitoring_only",
  "target_hc_date": "2026-01-01",
  "current_gate_definition_id": "mon_rfi",
  "overall_status": "in_progress",
  "asset_owner_org_id": "<string>",
  "asset_owner_org_name": "<string>",
  "whitelabel": false,
  "process_definition": {
    "id": "<string>",
    "integration_type": "monitoring_only",
    "version": "<string>",
    "source_label": "<string>",
    "gate_sequence": [
      "mon_rfi"
    ],
    "gate_definitions": "<string>",
    "process_document_slots": [
      {
        "document_type": "installation_photo_mdevice",
        "label": "<string>",
        "description": "<string>",
        "required": false,
        "allow_multiple": false
      }
    ],
    "asset_profile_sync_gate_id": "mon_rfi",
    "schema_version": 0
  },
  "gate_definitions": "<string>",
  "asset_profile": {
    "id": "<string>",
    "onboarding_id": "<string>",
    "asset_id": "<string>",
    "asset_name": "<string>",
    "location": "<string>",
    "country": "<string>",
    "asset_owner_org_id": "<string>",
    "asset_owner_org_name": "<string>",
    "shipping_address": {
      "street": "<string>",
      "postal_code": "<string>",
      "city": "<string>",
      "country": "<string>",
      "attention": "<string>"
    },
    "site_contact": {
      "name": "<string>",
      "email": "name@example.com",
      "phone": "<string>"
    },
    "power_supply": "24v_dc",
    "ethernet_available": false,
    "antenna_location_outdoors": false,
    "ems_vendor": "<string>",
    "ems_vendor_other": "<string>",
    "ems_supports_modbus_tcp": false,
    "pq_submission_targeted": false,
    "ems_technical_contact": {
      "name": "<string>",
      "email": "name@example.com",
      "phone": "<string>"
    },
    "source_gate_definition_id": "mon_rfi",
    "source_gate_passed_at": "<string>",
    "source_gate_updated_at": "<string>",
    "synced_at": "<string>",
    "sync_reason": "<string>"
  },
  "asset_owner_contact": {
    "id": "<string>",
    "contact_name": "<string>",
    "contact_email": "<string>",
    "access": {
      "status": "<string>"
    }
  },
  "asset_owner_contacts": [
    {
      "id": "<string>",
      "contact_name": "<string>",
      "contact_email": "<string>",
      "access": {
        "status": "<string>"
      }
    }
  ],
  "partners": [
    {
      "id": "<string>",
      "role": "epc",
      "org_name": "<string>",
      "contact_name": "<string>",
      "contact_email": "<string>",
      "access": {
        "status": "<string>"
      }
    }
  ],
  "created_at": "<string>",
  "updated_at": "<string>",
  "gates": [
    {
      "id": "<string>",
      "definition_id": "mon_rfi",
      "status": "pending",
      "deadline": "2026-01-01",
      "last_note": "<string>",
      "passed_at": "<string>",
      "passed_by_user_name": "<string>",
      "structured_data": "<string>"
    }
  ],
  "documents": [
    {
      "id": "<string>",
      "onboarding_id": "<string>",
      "gate_definition_id": "mon_rfi",
      "document_type": "installation_photo_mdevice",
      "filename": "<string>",
      "size_bytes": 0,
      "content_type": "<string>",
      "uploaded_at": "<string>",
      "uploaded_by_user_name": "<string>",
      "version": 0
    }
  ],
  "activity": [
    {
      "id": "<string>",
      "onboarding_id": "<string>",
      "gate_definition_id": "mon_rfi",
      "actor_user_name": "<string>",
      "actor_org_name": "<string>",
      "event_type": "onboarding_created",
      "note": "<string>",
      "created_at": "<string>"
    }
  ],
  "internal_tracker": {
    "tasks": [
      {
        "id": "<string>",
        "title": "<string>",
        "description": "<string>",
        "status": "open",
        "category": "<string>",
        "template_key": "<string>",
        "due_date": "<string>",
        "created_by_user_name": "<string>",
        "created_at": "<string>",
        "updated_at": "<string>",
        "completed_at": "<string>"
      }
    ],
    "open_points": [
      {
        "id": "<string>",
        "title": "<string>",
        "status": "open",
        "ref": {
          "kind": "<string>",
          "gate_definition_id": "mon_rfi"
        },
        "comments": [
          {
            "id": "<string>",
            "author_user_name": "<string>",
            "author_org_name": "<string>",
            "author_side": "ebx",
            "created_at": "<string>",
            "body": "<string>"
          }
        ],
        "created_by_user_name": "<string>",
        "created_at": "<string>",
        "updated_at": "<string>",
        "resolved_at": "<string>"
      }
    ],
    "applied_templates": [
      "<string>"
    ]
  }
}
Can raise
  • 400malformed request
  • 401no valid token
  • 403scope missing
  • 404unknown or not visible
  • 409state conflict
  • 422validation failed
  • 429rate limited
ALL CODES →
POST/v1/onboardings/{onboarding_id}/internal-tracker/tasks

Add an internal tracker task

onboarding.write

Adds an EBX-internal task to the onboarding's internal tracker. The tracker is EBX-only: it is never included in the external /onboarding-tasks responses and is redacted from onboarding responses for non-EBX readers.

Path parameters

onboarding_idREQUIRED
string<uuid>Stable onboarding identifier returned by create and list operations.

Request body · required

titleREQUIRED
string
description
string
category
stringdefault general
due_date
string<date>
Example value
curl -X POST "https://api.ebx.energy/v1/onboardings/00000000-0000-0000-0000-000000000000/internal-tracker/tasks" \
  -H "Authorization: Bearer $EBX_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"title":"<string>","description":"<string>","category":"general","due_date":"2026-01-01"}'
Example response201
{
  "id": "<string>",
  "asset_id": "<string>",
  "asset_name": "<string>",
  "location": "<string>",
  "country": "<string>",
  "tso": "<string>",
  "integration_type": "monitoring_only",
  "target_hc_date": "2026-01-01",
  "current_gate_definition_id": "mon_rfi",
  "overall_status": "in_progress",
  "asset_owner_org_id": "<string>",
  "asset_owner_org_name": "<string>",
  "whitelabel": false,
  "process_definition": {
    "id": "<string>",
    "integration_type": "monitoring_only",
    "version": "<string>",
    "source_label": "<string>",
    "gate_sequence": [
      "mon_rfi"
    ],
    "gate_definitions": "<string>",
    "process_document_slots": [
      {
        "document_type": "installation_photo_mdevice",
        "label": "<string>",
        "description": "<string>",
        "required": false,
        "allow_multiple": false
      }
    ],
    "asset_profile_sync_gate_id": "mon_rfi",
    "schema_version": 0
  },
  "gate_definitions": "<string>",
  "asset_profile": {
    "id": "<string>",
    "onboarding_id": "<string>",
    "asset_id": "<string>",
    "asset_name": "<string>",
    "location": "<string>",
    "country": "<string>",
    "asset_owner_org_id": "<string>",
    "asset_owner_org_name": "<string>",
    "shipping_address": {
      "street": "<string>",
      "postal_code": "<string>",
      "city": "<string>",
      "country": "<string>",
      "attention": "<string>"
    },
    "site_contact": {
      "name": "<string>",
      "email": "name@example.com",
      "phone": "<string>"
    },
    "power_supply": "24v_dc",
    "ethernet_available": false,
    "antenna_location_outdoors": false,
    "ems_vendor": "<string>",
    "ems_vendor_other": "<string>",
    "ems_supports_modbus_tcp": false,
    "pq_submission_targeted": false,
    "ems_technical_contact": {
      "name": "<string>",
      "email": "name@example.com",
      "phone": "<string>"
    },
    "source_gate_definition_id": "mon_rfi",
    "source_gate_passed_at": "<string>",
    "source_gate_updated_at": "<string>",
    "synced_at": "<string>",
    "sync_reason": "<string>"
  },
  "asset_owner_contact": {
    "id": "<string>",
    "contact_name": "<string>",
    "contact_email": "<string>",
    "access": {
      "status": "<string>"
    }
  },
  "asset_owner_contacts": [
    {
      "id": "<string>",
      "contact_name": "<string>",
      "contact_email": "<string>",
      "access": {
        "status": "<string>"
      }
    }
  ],
  "partners": [
    {
      "id": "<string>",
      "role": "epc",
      "org_name": "<string>",
      "contact_name": "<string>",
      "contact_email": "<string>",
      "access": {
        "status": "<string>"
      }
    }
  ],
  "created_at": "<string>",
  "updated_at": "<string>",
  "gates": [
    {
      "id": "<string>",
      "definition_id": "mon_rfi",
      "status": "pending",
      "deadline": "2026-01-01",
      "last_note": "<string>",
      "passed_at": "<string>",
      "passed_by_user_name": "<string>",
      "structured_data": "<string>"
    }
  ],
  "documents": [
    {
      "id": "<string>",
      "onboarding_id": "<string>",
      "gate_definition_id": "mon_rfi",
      "document_type": "installation_photo_mdevice",
      "filename": "<string>",
      "size_bytes": 0,
      "content_type": "<string>",
      "uploaded_at": "<string>",
      "uploaded_by_user_name": "<string>",
      "version": 0
    }
  ],
  "activity": [
    {
      "id": "<string>",
      "onboarding_id": "<string>",
      "gate_definition_id": "mon_rfi",
      "actor_user_name": "<string>",
      "actor_org_name": "<string>",
      "event_type": "onboarding_created",
      "note": "<string>",
      "created_at": "<string>"
    }
  ],
  "internal_tracker": {
    "tasks": [
      {
        "id": "<string>",
        "title": "<string>",
        "description": "<string>",
        "status": "open",
        "category": "<string>",
        "template_key": "<string>",
        "due_date": "<string>",
        "created_by_user_name": "<string>",
        "created_at": "<string>",
        "updated_at": "<string>",
        "completed_at": "<string>"
      }
    ],
    "open_points": [
      {
        "id": "<string>",
        "title": "<string>",
        "status": "open",
        "ref": {
          "kind": "<string>",
          "gate_definition_id": "mon_rfi"
        },
        "comments": [
          {
            "id": "<string>",
            "author_user_name": "<string>",
            "author_org_name": "<string>",
            "author_side": "ebx",
            "created_at": "<string>",
            "body": "<string>"
          }
        ],
        "created_by_user_name": "<string>",
        "created_at": "<string>",
        "updated_at": "<string>",
        "resolved_at": "<string>"
      }
    ],
    "applied_templates": [
      "<string>"
    ]
  }
}
Can raise
  • 400malformed request
  • 401no valid token
  • 403scope missing
  • 404unknown or not visible
  • 409state conflict
  • 422validation failed
  • 429rate limited
ALL CODES →
PATCH/v1/onboardings/{onboarding_id}/internal-tracker/tasks/{task_id}

Update an internal tracker task status

onboarding.write

Moves an internal task between open, in progress, and done. Completing a task records an internal activity entry.

Path parameters

onboarding_idREQUIRED
string<uuid>Stable onboarding identifier returned by create and list operations.
task_idREQUIRED
stringInternal-tracker task identifier from the onboarding response.

Request body · required

statusREQUIRED
enumopenin_progressdone
Example value
curl -X PATCH "https://api.ebx.energy/v1/onboardings/00000000-0000-0000-0000-000000000000/internal-tracker/tasks/trk-1042" \
  -H "Authorization: Bearer $EBX_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"status":"open"}'
Example response200
{
  "id": "<string>",
  "asset_id": "<string>",
  "asset_name": "<string>",
  "location": "<string>",
  "country": "<string>",
  "tso": "<string>",
  "integration_type": "monitoring_only",
  "target_hc_date": "2026-01-01",
  "current_gate_definition_id": "mon_rfi",
  "overall_status": "in_progress",
  "asset_owner_org_id": "<string>",
  "asset_owner_org_name": "<string>",
  "whitelabel": false,
  "process_definition": {
    "id": "<string>",
    "integration_type": "monitoring_only",
    "version": "<string>",
    "source_label": "<string>",
    "gate_sequence": [
      "mon_rfi"
    ],
    "gate_definitions": "<string>",
    "process_document_slots": [
      {
        "document_type": "installation_photo_mdevice",
        "label": "<string>",
        "description": "<string>",
        "required": false,
        "allow_multiple": false
      }
    ],
    "asset_profile_sync_gate_id": "mon_rfi",
    "schema_version": 0
  },
  "gate_definitions": "<string>",
  "asset_profile": {
    "id": "<string>",
    "onboarding_id": "<string>",
    "asset_id": "<string>",
    "asset_name": "<string>",
    "location": "<string>",
    "country": "<string>",
    "asset_owner_org_id": "<string>",
    "asset_owner_org_name": "<string>",
    "shipping_address": {
      "street": "<string>",
      "postal_code": "<string>",
      "city": "<string>",
      "country": "<string>",
      "attention": "<string>"
    },
    "site_contact": {
      "name": "<string>",
      "email": "name@example.com",
      "phone": "<string>"
    },
    "power_supply": "24v_dc",
    "ethernet_available": false,
    "antenna_location_outdoors": false,
    "ems_vendor": "<string>",
    "ems_vendor_other": "<string>",
    "ems_supports_modbus_tcp": false,
    "pq_submission_targeted": false,
    "ems_technical_contact": {
      "name": "<string>",
      "email": "name@example.com",
      "phone": "<string>"
    },
    "source_gate_definition_id": "mon_rfi",
    "source_gate_passed_at": "<string>",
    "source_gate_updated_at": "<string>",
    "synced_at": "<string>",
    "sync_reason": "<string>"
  },
  "asset_owner_contact": {
    "id": "<string>",
    "contact_name": "<string>",
    "contact_email": "<string>",
    "access": {
      "status": "<string>"
    }
  },
  "asset_owner_contacts": [
    {
      "id": "<string>",
      "contact_name": "<string>",
      "contact_email": "<string>",
      "access": {
        "status": "<string>"
      }
    }
  ],
  "partners": [
    {
      "id": "<string>",
      "role": "epc",
      "org_name": "<string>",
      "contact_name": "<string>",
      "contact_email": "<string>",
      "access": {
        "status": "<string>"
      }
    }
  ],
  "created_at": "<string>",
  "updated_at": "<string>",
  "gates": [
    {
      "id": "<string>",
      "definition_id": "mon_rfi",
      "status": "pending",
      "deadline": "2026-01-01",
      "last_note": "<string>",
      "passed_at": "<string>",
      "passed_by_user_name": "<string>",
      "structured_data": "<string>"
    }
  ],
  "documents": [
    {
      "id": "<string>",
      "onboarding_id": "<string>",
      "gate_definition_id": "mon_rfi",
      "document_type": "installation_photo_mdevice",
      "filename": "<string>",
      "size_bytes": 0,
      "content_type": "<string>",
      "uploaded_at": "<string>",
      "uploaded_by_user_name": "<string>",
      "version": 0
    }
  ],
  "activity": [
    {
      "id": "<string>",
      "onboarding_id": "<string>",
      "gate_definition_id": "mon_rfi",
      "actor_user_name": "<string>",
      "actor_org_name": "<string>",
      "event_type": "onboarding_created",
      "note": "<string>",
      "created_at": "<string>"
    }
  ],
  "internal_tracker": {
    "tasks": [
      {
        "id": "<string>",
        "title": "<string>",
        "description": "<string>",
        "status": "open",
        "category": "<string>",
        "template_key": "<string>",
        "due_date": "<string>",
        "created_by_user_name": "<string>",
        "created_at": "<string>",
        "updated_at": "<string>",
        "completed_at": "<string>"
      }
    ],
    "open_points": [
      {
        "id": "<string>",
        "title": "<string>",
        "status": "open",
        "ref": {
          "kind": "<string>",
          "gate_definition_id": "mon_rfi"
        },
        "comments": [
          {
            "id": "<string>",
            "author_user_name": "<string>",
            "author_org_name": "<string>",
            "author_side": "ebx",
            "created_at": "<string>",
            "body": "<string>"
          }
        ],
        "created_by_user_name": "<string>",
        "created_at": "<string>",
        "updated_at": "<string>",
        "resolved_at": "<string>"
      }
    ],
    "applied_templates": [
      "<string>"
    ]
  }
}
Can raise
  • 400malformed request
  • 401no valid token
  • 403scope missing
  • 404unknown or not visible
  • 409state conflict
  • 422validation failed
  • 429rate limited
ALL CODES →
POST/v1/onboardings/{onboarding_id}/partners

Add a partner assignment

onboarding.write

Adds an EPC or EMS partner assignment to an onboarding. This stores the partner organization/contact; EBX sends passwordless magic-link access separately.

Path parameters

onboarding_idREQUIRED
string<uuid>Stable onboarding identifier returned by create and list operations.

Request body · required

roleREQUIRED
enumepcems_provider
org_nameREQUIRED
string
contact_name
string
contact_email
string<email>
Example value
curl -X POST "https://api.ebx.energy/v1/onboardings/00000000-0000-0000-0000-000000000000/partners" \
  -H "Authorization: Bearer $EBX_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"role":"epc","org_name":"<string>","contact_name":"<string>","contact_email":"name@example.com"}'
Example response200
{
  "id": "<string>",
  "asset_id": "<string>",
  "asset_name": "<string>",
  "location": "<string>",
  "country": "<string>",
  "tso": "<string>",
  "integration_type": "monitoring_only",
  "target_hc_date": "2026-01-01",
  "current_gate_definition_id": "mon_rfi",
  "overall_status": "in_progress",
  "asset_owner_org_id": "<string>",
  "asset_owner_org_name": "<string>",
  "whitelabel": false,
  "process_definition": {
    "id": "<string>",
    "integration_type": "monitoring_only",
    "version": "<string>",
    "source_label": "<string>",
    "gate_sequence": [
      "mon_rfi"
    ],
    "gate_definitions": "<string>",
    "process_document_slots": [
      {
        "document_type": "installation_photo_mdevice",
        "label": "<string>",
        "description": "<string>",
        "required": false,
        "allow_multiple": false
      }
    ],
    "asset_profile_sync_gate_id": "mon_rfi",
    "schema_version": 0
  },
  "gate_definitions": "<string>",
  "asset_profile": {
    "id": "<string>",
    "onboarding_id": "<string>",
    "asset_id": "<string>",
    "asset_name": "<string>",
    "location": "<string>",
    "country": "<string>",
    "asset_owner_org_id": "<string>",
    "asset_owner_org_name": "<string>",
    "shipping_address": {
      "street": "<string>",
      "postal_code": "<string>",
      "city": "<string>",
      "country": "<string>",
      "attention": "<string>"
    },
    "site_contact": {
      "name": "<string>",
      "email": "name@example.com",
      "phone": "<string>"
    },
    "power_supply": "24v_dc",
    "ethernet_available": false,
    "antenna_location_outdoors": false,
    "ems_vendor": "<string>",
    "ems_vendor_other": "<string>",
    "ems_supports_modbus_tcp": false,
    "pq_submission_targeted": false,
    "ems_technical_contact": {
      "name": "<string>",
      "email": "name@example.com",
      "phone": "<string>"
    },
    "source_gate_definition_id": "mon_rfi",
    "source_gate_passed_at": "<string>",
    "source_gate_updated_at": "<string>",
    "synced_at": "<string>",
    "sync_reason": "<string>"
  },
  "asset_owner_contact": {
    "id": "<string>",
    "contact_name": "<string>",
    "contact_email": "<string>",
    "access": {
      "status": "<string>"
    }
  },
  "asset_owner_contacts": [
    {
      "id": "<string>",
      "contact_name": "<string>",
      "contact_email": "<string>",
      "access": {
        "status": "<string>"
      }
    }
  ],
  "partners": [
    {
      "id": "<string>",
      "role": "epc",
      "org_name": "<string>",
      "contact_name": "<string>",
      "contact_email": "<string>",
      "access": {
        "status": "<string>"
      }
    }
  ],
  "created_at": "<string>",
  "updated_at": "<string>",
  "gates": [
    {
      "id": "<string>",
      "definition_id": "mon_rfi",
      "status": "pending",
      "deadline": "2026-01-01",
      "last_note": "<string>",
      "passed_at": "<string>",
      "passed_by_user_name": "<string>",
      "structured_data": "<string>"
    }
  ],
  "documents": [
    {
      "id": "<string>",
      "onboarding_id": "<string>",
      "gate_definition_id": "mon_rfi",
      "document_type": "installation_photo_mdevice",
      "filename": "<string>",
      "size_bytes": 0,
      "content_type": "<string>",
      "uploaded_at": "<string>",
      "uploaded_by_user_name": "<string>",
      "version": 0
    }
  ],
  "activity": [
    {
      "id": "<string>",
      "onboarding_id": "<string>",
      "gate_definition_id": "mon_rfi",
      "actor_user_name": "<string>",
      "actor_org_name": "<string>",
      "event_type": "onboarding_created",
      "note": "<string>",
      "created_at": "<string>"
    }
  ],
  "internal_tracker": {
    "tasks": [
      {
        "id": "<string>",
        "title": "<string>",
        "description": "<string>",
        "status": "open",
        "category": "<string>",
        "template_key": "<string>",
        "due_date": "<string>",
        "created_by_user_name": "<string>",
        "created_at": "<string>",
        "updated_at": "<string>",
        "completed_at": "<string>"
      }
    ],
    "open_points": [
      {
        "id": "<string>",
        "title": "<string>",
        "status": "open",
        "ref": {
          "kind": "<string>",
          "gate_definition_id": "mon_rfi"
        },
        "comments": [
          {
            "id": "<string>",
            "author_user_name": "<string>",
            "author_org_name": "<string>",
            "author_side": "ebx",
            "created_at": "<string>",
            "body": "<string>"
          }
        ],
        "created_by_user_name": "<string>",
        "created_at": "<string>",
        "updated_at": "<string>",
        "resolved_at": "<string>"
      }
    ],
    "applied_templates": [
      "<string>"
    ]
  }
}
Can raise
  • 400malformed request
  • 401no valid token
  • 403scope missing
  • 404unknown or not visible
  • 409state conflict
  • 422validation failed
  • 429rate limited
ALL CODES →
PATCH/v1/onboardings/{onboarding_id}/partners/{assignment_id}

Edit or replace a partner contact

onboarding.write

Updates a partner assignment's organization and contact. Changing the contact email — or editing a previously revoked partner — resets external access to not_invited and invalidates outstanding magic links, so the contact can be freshly invited; an org/name-only edit keeps the current access state.

Path parameters

onboarding_idREQUIRED
string<uuid>Stable onboarding identifier returned by create and list operations.
assignment_idREQUIRED
string<uuid>Partner assignment identifier from the onboarding response.

Request body · required

roleREQUIRED
enumepcems_provider
org_nameREQUIRED
string
contact_name
string
contact_email
string<email>
Example value
curl -X PATCH "https://api.ebx.energy/v1/onboardings/00000000-0000-0000-0000-000000000000/partners/00000000-0000-0000-0000-000000000000" \
  -H "Authorization: Bearer $EBX_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"role":"epc","org_name":"<string>","contact_name":"<string>","contact_email":"name@example.com"}'
Example response200
{
  "id": "<string>",
  "asset_id": "<string>",
  "asset_name": "<string>",
  "location": "<string>",
  "country": "<string>",
  "tso": "<string>",
  "integration_type": "monitoring_only",
  "target_hc_date": "2026-01-01",
  "current_gate_definition_id": "mon_rfi",
  "overall_status": "in_progress",
  "asset_owner_org_id": "<string>",
  "asset_owner_org_name": "<string>",
  "whitelabel": false,
  "process_definition": {
    "id": "<string>",
    "integration_type": "monitoring_only",
    "version": "<string>",
    "source_label": "<string>",
    "gate_sequence": [
      "mon_rfi"
    ],
    "gate_definitions": "<string>",
    "process_document_slots": [
      {
        "document_type": "installation_photo_mdevice",
        "label": "<string>",
        "description": "<string>",
        "required": false,
        "allow_multiple": false
      }
    ],
    "asset_profile_sync_gate_id": "mon_rfi",
    "schema_version": 0
  },
  "gate_definitions": "<string>",
  "asset_profile": {
    "id": "<string>",
    "onboarding_id": "<string>",
    "asset_id": "<string>",
    "asset_name": "<string>",
    "location": "<string>",
    "country": "<string>",
    "asset_owner_org_id": "<string>",
    "asset_owner_org_name": "<string>",
    "shipping_address": {
      "street": "<string>",
      "postal_code": "<string>",
      "city": "<string>",
      "country": "<string>",
      "attention": "<string>"
    },
    "site_contact": {
      "name": "<string>",
      "email": "name@example.com",
      "phone": "<string>"
    },
    "power_supply": "24v_dc",
    "ethernet_available": false,
    "antenna_location_outdoors": false,
    "ems_vendor": "<string>",
    "ems_vendor_other": "<string>",
    "ems_supports_modbus_tcp": false,
    "pq_submission_targeted": false,
    "ems_technical_contact": {
      "name": "<string>",
      "email": "name@example.com",
      "phone": "<string>"
    },
    "source_gate_definition_id": "mon_rfi",
    "source_gate_passed_at": "<string>",
    "source_gate_updated_at": "<string>",
    "synced_at": "<string>",
    "sync_reason": "<string>"
  },
  "asset_owner_contact": {
    "id": "<string>",
    "contact_name": "<string>",
    "contact_email": "<string>",
    "access": {
      "status": "<string>"
    }
  },
  "asset_owner_contacts": [
    {
      "id": "<string>",
      "contact_name": "<string>",
      "contact_email": "<string>",
      "access": {
        "status": "<string>"
      }
    }
  ],
  "partners": [
    {
      "id": "<string>",
      "role": "epc",
      "org_name": "<string>",
      "contact_name": "<string>",
      "contact_email": "<string>",
      "access": {
        "status": "<string>"
      }
    }
  ],
  "created_at": "<string>",
  "updated_at": "<string>",
  "gates": [
    {
      "id": "<string>",
      "definition_id": "mon_rfi",
      "status": "pending",
      "deadline": "2026-01-01",
      "last_note": "<string>",
      "passed_at": "<string>",
      "passed_by_user_name": "<string>",
      "structured_data": "<string>"
    }
  ],
  "documents": [
    {
      "id": "<string>",
      "onboarding_id": "<string>",
      "gate_definition_id": "mon_rfi",
      "document_type": "installation_photo_mdevice",
      "filename": "<string>",
      "size_bytes": 0,
      "content_type": "<string>",
      "uploaded_at": "<string>",
      "uploaded_by_user_name": "<string>",
      "version": 0
    }
  ],
  "activity": [
    {
      "id": "<string>",
      "onboarding_id": "<string>",
      "gate_definition_id": "mon_rfi",
      "actor_user_name": "<string>",
      "actor_org_name": "<string>",
      "event_type": "onboarding_created",
      "note": "<string>",
      "created_at": "<string>"
    }
  ],
  "internal_tracker": {
    "tasks": [
      {
        "id": "<string>",
        "title": "<string>",
        "description": "<string>",
        "status": "open",
        "category": "<string>",
        "template_key": "<string>",
        "due_date": "<string>",
        "created_by_user_name": "<string>",
        "created_at": "<string>",
        "updated_at": "<string>",
        "completed_at": "<string>"
      }
    ],
    "open_points": [
      {
        "id": "<string>",
        "title": "<string>",
        "status": "open",
        "ref": {
          "kind": "<string>",
          "gate_definition_id": "mon_rfi"
        },
        "comments": [
          {
            "id": "<string>",
            "author_user_name": "<string>",
            "author_org_name": "<string>",
            "author_side": "ebx",
            "created_at": "<string>",
            "body": "<string>"
          }
        ],
        "created_by_user_name": "<string>",
        "created_at": "<string>",
        "updated_at": "<string>",
        "resolved_at": "<string>"
      }
    ],
    "applied_templates": [
      "<string>"
    ]
  }
}
Can raise
  • 400malformed request
  • 401no valid token
  • 403scope missing
  • 404unknown or not visible
  • 409state conflict
  • 422validation failed
  • 429rate limited
ALL CODES →
POST/v1/onboardings/{onboarding_id}/partners/{assignment_id}/access/revoke

Revoke partner onboarding task access

onboarding.write

Revokes active links, refresh sessions, database access state, and the matching Cognito task-principal group for an EPC or EMS assignment.

Path parameters

onboarding_idREQUIRED
string<uuid>Stable onboarding identifier returned by create and list operations.
assignment_idREQUIRED
string<uuid>Partner assignment identifier from the onboarding response.
Example value
curl -X POST "https://api.ebx.energy/v1/onboardings/00000000-0000-0000-0000-000000000000/partners/00000000-0000-0000-0000-000000000000/access/revoke" \
  -H "Authorization: Bearer $EBX_TOKEN"
Example response200
{
  "onboarding": {
    "id": "<string>",
    "asset_id": "<string>",
    "asset_name": "<string>",
    "location": "<string>",
    "country": "<string>",
    "tso": "<string>",
    "integration_type": "monitoring_only",
    "target_hc_date": "2026-01-01",
    "current_gate_definition_id": "mon_rfi",
    "overall_status": "in_progress",
    "asset_owner_org_id": "<string>",
    "asset_owner_org_name": "<string>",
    "whitelabel": false,
    "process_definition": {
      "id": "<string>",
      "integration_type": "monitoring_only",
      "version": "<string>",
      "source_label": "<string>",
      "gate_sequence": [
        "mon_rfi"
      ],
      "gate_definitions": "<string>",
      "process_document_slots": [
        {
          "document_type": "installation_photo_mdevice",
          "label": "<string>",
          "description": "<string>",
          "required": false,
          "allow_multiple": false
        }
      ],
      "asset_profile_sync_gate_id": "mon_rfi",
      "schema_version": 0
    },
    "gate_definitions": "<string>",
    "asset_profile": {
      "id": "<string>",
      "onboarding_id": "<string>",
      "asset_id": "<string>",
      "asset_name": "<string>",
      "location": "<string>",
      "country": "<string>",
      "asset_owner_org_id": "<string>",
      "asset_owner_org_name": "<string>",
      "shipping_address": {
        "street": "<string>",
        "postal_code": "<string>",
        "city": "<string>",
        "country": "<string>",
        "attention": "<string>"
      },
      "site_contact": {
        "name": "<string>",
        "email": "name@example.com",
        "phone": "<string>"
      },
      "power_supply": "24v_dc",
      "ethernet_available": false,
      "antenna_location_outdoors": false,
      "ems_vendor": "<string>",
      "ems_vendor_other": "<string>",
      "ems_supports_modbus_tcp": false,
      "pq_submission_targeted": false,
      "ems_technical_contact": {
        "name": "<string>",
        "email": "name@example.com",
        "phone": "<string>"
      },
      "source_gate_definition_id": "mon_rfi",
      "source_gate_passed_at": "<string>",
      "source_gate_updated_at": "<string>",
      "synced_at": "<string>",
      "sync_reason": "<string>"
    },
    "asset_owner_contact": {
      "id": "<string>",
      "contact_name": "<string>",
      "contact_email": "<string>",
      "access": {
        "status": "<string>"
      }
    },
    "asset_owner_contacts": [
      {
        "id": "<string>",
        "contact_name": "<string>",
        "contact_email": "<string>",
        "access": {
          "status": "<string>"
        }
      }
    ],
    "partners": [
      {
        "id": "<string>",
        "role": "epc",
        "org_name": "<string>",
        "contact_name": "<string>",
        "contact_email": "<string>",
        "access": {
          "status": "<string>"
        }
      }
    ],
    "created_at": "<string>",
    "updated_at": "<string>",
    "gates": [
      {
        "id": "<string>",
        "definition_id": "mon_rfi",
        "status": "pending",
        "deadline": "2026-01-01",
        "last_note": "<string>",
        "passed_at": "<string>",
        "passed_by_user_name": "<string>",
        "structured_data": "<string>"
      }
    ],
    "documents": [
      {
        "id": "<string>",
        "onboarding_id": "<string>",
        "gate_definition_id": "mon_rfi",
        "document_type": "installation_photo_mdevice",
        "filename": "<string>",
        "size_bytes": 0,
        "content_type": "<string>",
        "uploaded_at": "<string>",
        "uploaded_by_user_name": "<string>",
        "version": 0
      }
    ],
    "activity": [
      {
        "id": "<string>",
        "onboarding_id": "<string>",
        "gate_definition_id": "mon_rfi",
        "actor_user_name": "<string>",
        "actor_org_name": "<string>",
        "event_type": "onboarding_created",
        "note": "<string>",
        "created_at": "<string>"
      }
    ],
    "internal_tracker": {
      "tasks": [
        {
          "id": "<string>",
          "title": "<string>",
          "description": "<string>",
          "status": "open",
          "category": "<string>",
          "template_key": "<string>",
          "due_date": "<string>",
          "created_by_user_name": "<string>",
          "created_at": "<string>",
          "updated_at": "<string>",
          "completed_at": "<string>"
        }
      ],
      "open_points": [
        {
          "id": "<string>",
          "title": "<string>",
          "status": "open",
          "ref": {
            "kind": "<string>",
            "gate_definition_id": "mon_rfi"
          },
          "comments": [
            {
              "id": "<string>",
              "author_user_name": "<string>",
              "author_org_name": "<string>",
              "author_side": "ebx",
              "created_at": "<string>",
              "body": "<string>"
            }
          ],
          "created_by_user_name": "<string>",
          "created_at": "<string>",
          "updated_at": "<string>",
          "resolved_at": "<string>"
        }
      ],
      "applied_templates": [
        "<string>"
      ]
    }
  },
  "revoked_link_count": 0,
  "revoked_session_count": 0
}
Can raise
  • 400malformed request
  • 401no valid token
  • 403scope missing
  • 404unknown or not visible
  • 409state conflict
  • 429rate limited
ALL CODES →
POST/v1/onboardings/{onboarding_id}/partners/{assignment_id}/magic-link

Send a partner onboarding magic link

onboarding.write

Creates a six-month reusable magic link for an EPC or EMS assignment, stores only the token hash, and sends the link to the partner contact email.

Path parameters

onboarding_idREQUIRED
string<uuid>Stable onboarding identifier returned by create and list operations.
assignment_idREQUIRED
string<uuid>Partner assignment identifier from the onboarding response.

Request body · optional

language
enumdeen
email_template
object
Example value
curl -X POST "https://api.ebx.energy/v1/onboardings/00000000-0000-0000-0000-000000000000/partners/00000000-0000-0000-0000-000000000000/magic-link" \
  -H "Authorization: Bearer $EBX_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"language":"de","email_template":{"subject":"<string>","greeting":"<string>","body":"<string>","button_label":"<string>","fallback_text":"<string>","signature":"<string>","generated":"<string>"}}'
Example response200
{
  "onboarding": {
    "id": "<string>",
    "asset_id": "<string>",
    "asset_name": "<string>",
    "location": "<string>",
    "country": "<string>",
    "tso": "<string>",
    "integration_type": "monitoring_only",
    "target_hc_date": "2026-01-01",
    "current_gate_definition_id": "mon_rfi",
    "overall_status": "in_progress",
    "asset_owner_org_id": "<string>",
    "asset_owner_org_name": "<string>",
    "whitelabel": false,
    "process_definition": {
      "id": "<string>",
      "integration_type": "monitoring_only",
      "version": "<string>",
      "source_label": "<string>",
      "gate_sequence": [
        "mon_rfi"
      ],
      "gate_definitions": "<string>",
      "process_document_slots": [
        {
          "document_type": "installation_photo_mdevice",
          "label": "<string>",
          "description": "<string>",
          "required": false,
          "allow_multiple": false
        }
      ],
      "asset_profile_sync_gate_id": "mon_rfi",
      "schema_version": 0
    },
    "gate_definitions": "<string>",
    "asset_profile": {
      "id": "<string>",
      "onboarding_id": "<string>",
      "asset_id": "<string>",
      "asset_name": "<string>",
      "location": "<string>",
      "country": "<string>",
      "asset_owner_org_id": "<string>",
      "asset_owner_org_name": "<string>",
      "shipping_address": {
        "street": "<string>",
        "postal_code": "<string>",
        "city": "<string>",
        "country": "<string>",
        "attention": "<string>"
      },
      "site_contact": {
        "name": "<string>",
        "email": "name@example.com",
        "phone": "<string>"
      },
      "power_supply": "24v_dc",
      "ethernet_available": false,
      "antenna_location_outdoors": false,
      "ems_vendor": "<string>",
      "ems_vendor_other": "<string>",
      "ems_supports_modbus_tcp": false,
      "pq_submission_targeted": false,
      "ems_technical_contact": {
        "name": "<string>",
        "email": "name@example.com",
        "phone": "<string>"
      },
      "source_gate_definition_id": "mon_rfi",
      "source_gate_passed_at": "<string>",
      "source_gate_updated_at": "<string>",
      "synced_at": "<string>",
      "sync_reason": "<string>"
    },
    "asset_owner_contact": {
      "id": "<string>",
      "contact_name": "<string>",
      "contact_email": "<string>",
      "access": {
        "status": "<string>"
      }
    },
    "asset_owner_contacts": [
      {
        "id": "<string>",
        "contact_name": "<string>",
        "contact_email": "<string>",
        "access": {
          "status": "<string>"
        }
      }
    ],
    "partners": [
      {
        "id": "<string>",
        "role": "epc",
        "org_name": "<string>",
        "contact_name": "<string>",
        "contact_email": "<string>",
        "access": {
          "status": "<string>"
        }
      }
    ],
    "created_at": "<string>",
    "updated_at": "<string>",
    "gates": [
      {
        "id": "<string>",
        "definition_id": "mon_rfi",
        "status": "pending",
        "deadline": "2026-01-01",
        "last_note": "<string>",
        "passed_at": "<string>",
        "passed_by_user_name": "<string>",
        "structured_data": "<string>"
      }
    ],
    "documents": [
      {
        "id": "<string>",
        "onboarding_id": "<string>",
        "gate_definition_id": "mon_rfi",
        "document_type": "installation_photo_mdevice",
        "filename": "<string>",
        "size_bytes": 0,
        "content_type": "<string>",
        "uploaded_at": "<string>",
        "uploaded_by_user_name": "<string>",
        "version": 0
      }
    ],
    "activity": [
      {
        "id": "<string>",
        "onboarding_id": "<string>",
        "gate_definition_id": "mon_rfi",
        "actor_user_name": "<string>",
        "actor_org_name": "<string>",
        "event_type": "onboarding_created",
        "note": "<string>",
        "created_at": "<string>"
      }
    ],
    "internal_tracker": {
      "tasks": [
        {
          "id": "<string>",
          "title": "<string>",
          "description": "<string>",
          "status": "open",
          "category": "<string>",
          "template_key": "<string>",
          "due_date": "<string>",
          "created_by_user_name": "<string>",
          "created_at": "<string>",
          "updated_at": "<string>",
          "completed_at": "<string>"
        }
      ],
      "open_points": [
        {
          "id": "<string>",
          "title": "<string>",
          "status": "open",
          "ref": {
            "kind": "<string>",
            "gate_definition_id": "mon_rfi"
          },
          "comments": [
            {
              "id": "<string>",
              "author_user_name": "<string>",
              "author_org_name": "<string>",
              "author_side": "ebx",
              "created_at": "<string>",
              "body": "<string>"
            }
          ],
          "created_by_user_name": "<string>",
          "created_at": "<string>",
          "updated_at": "<string>",
          "resolved_at": "<string>"
        }
      ],
      "applied_templates": [
        "<string>"
      ]
    }
  },
  "dev_magic_link": "<string>"
}
Can raise
  • 400malformed request
  • 401no valid token
  • 403scope missing
  • 404unknown or not visible
  • 409state conflict
  • 422validation failed
  • 429rate limited
ALL CODES →
POST/v1/onboardings/{onboarding_id}/partners/{assignment_id}/magic-link/revoke

Revoke active partner onboarding magic links

onboarding.write

Revokes active reusable magic links and refresh sessions for an EPC or EMS assignment without revoking the assignment itself.

Path parameters

onboarding_idREQUIRED
string<uuid>Stable onboarding identifier returned by create and list operations.
assignment_idREQUIRED
string<uuid>Partner assignment identifier from the onboarding response.
Example value
curl -X POST "https://api.ebx.energy/v1/onboardings/00000000-0000-0000-0000-000000000000/partners/00000000-0000-0000-0000-000000000000/magic-link/revoke" \
  -H "Authorization: Bearer $EBX_TOKEN"
Example response200
{
  "onboarding": {
    "id": "<string>",
    "asset_id": "<string>",
    "asset_name": "<string>",
    "location": "<string>",
    "country": "<string>",
    "tso": "<string>",
    "integration_type": "monitoring_only",
    "target_hc_date": "2026-01-01",
    "current_gate_definition_id": "mon_rfi",
    "overall_status": "in_progress",
    "asset_owner_org_id": "<string>",
    "asset_owner_org_name": "<string>",
    "whitelabel": false,
    "process_definition": {
      "id": "<string>",
      "integration_type": "monitoring_only",
      "version": "<string>",
      "source_label": "<string>",
      "gate_sequence": [
        "mon_rfi"
      ],
      "gate_definitions": "<string>",
      "process_document_slots": [
        {
          "document_type": "installation_photo_mdevice",
          "label": "<string>",
          "description": "<string>",
          "required": false,
          "allow_multiple": false
        }
      ],
      "asset_profile_sync_gate_id": "mon_rfi",
      "schema_version": 0
    },
    "gate_definitions": "<string>",
    "asset_profile": {
      "id": "<string>",
      "onboarding_id": "<string>",
      "asset_id": "<string>",
      "asset_name": "<string>",
      "location": "<string>",
      "country": "<string>",
      "asset_owner_org_id": "<string>",
      "asset_owner_org_name": "<string>",
      "shipping_address": {
        "street": "<string>",
        "postal_code": "<string>",
        "city": "<string>",
        "country": "<string>",
        "attention": "<string>"
      },
      "site_contact": {
        "name": "<string>",
        "email": "name@example.com",
        "phone": "<string>"
      },
      "power_supply": "24v_dc",
      "ethernet_available": false,
      "antenna_location_outdoors": false,
      "ems_vendor": "<string>",
      "ems_vendor_other": "<string>",
      "ems_supports_modbus_tcp": false,
      "pq_submission_targeted": false,
      "ems_technical_contact": {
        "name": "<string>",
        "email": "name@example.com",
        "phone": "<string>"
      },
      "source_gate_definition_id": "mon_rfi",
      "source_gate_passed_at": "<string>",
      "source_gate_updated_at": "<string>",
      "synced_at": "<string>",
      "sync_reason": "<string>"
    },
    "asset_owner_contact": {
      "id": "<string>",
      "contact_name": "<string>",
      "contact_email": "<string>",
      "access": {
        "status": "<string>"
      }
    },
    "asset_owner_contacts": [
      {
        "id": "<string>",
        "contact_name": "<string>",
        "contact_email": "<string>",
        "access": {
          "status": "<string>"
        }
      }
    ],
    "partners": [
      {
        "id": "<string>",
        "role": "epc",
        "org_name": "<string>",
        "contact_name": "<string>",
        "contact_email": "<string>",
        "access": {
          "status": "<string>"
        }
      }
    ],
    "created_at": "<string>",
    "updated_at": "<string>",
    "gates": [
      {
        "id": "<string>",
        "definition_id": "mon_rfi",
        "status": "pending",
        "deadline": "2026-01-01",
        "last_note": "<string>",
        "passed_at": "<string>",
        "passed_by_user_name": "<string>",
        "structured_data": "<string>"
      }
    ],
    "documents": [
      {
        "id": "<string>",
        "onboarding_id": "<string>",
        "gate_definition_id": "mon_rfi",
        "document_type": "installation_photo_mdevice",
        "filename": "<string>",
        "size_bytes": 0,
        "content_type": "<string>",
        "uploaded_at": "<string>",
        "uploaded_by_user_name": "<string>",
        "version": 0
      }
    ],
    "activity": [
      {
        "id": "<string>",
        "onboarding_id": "<string>",
        "gate_definition_id": "mon_rfi",
        "actor_user_name": "<string>",
        "actor_org_name": "<string>",
        "event_type": "onboarding_created",
        "note": "<string>",
        "created_at": "<string>"
      }
    ],
    "internal_tracker": {
      "tasks": [
        {
          "id": "<string>",
          "title": "<string>",
          "description": "<string>",
          "status": "open",
          "category": "<string>",
          "template_key": "<string>",
          "due_date": "<string>",
          "created_by_user_name": "<string>",
          "created_at": "<string>",
          "updated_at": "<string>",
          "completed_at": "<string>"
        }
      ],
      "open_points": [
        {
          "id": "<string>",
          "title": "<string>",
          "status": "open",
          "ref": {
            "kind": "<string>",
            "gate_definition_id": "mon_rfi"
          },
          "comments": [
            {
              "id": "<string>",
              "author_user_name": "<string>",
              "author_org_name": "<string>",
              "author_side": "ebx",
              "created_at": "<string>",
              "body": "<string>"
            }
          ],
          "created_by_user_name": "<string>",
          "created_at": "<string>",
          "updated_at": "<string>",
          "resolved_at": "<string>"
        }
      ],
      "applied_templates": [
        "<string>"
      ]
    }
  },
  "revoked_link_count": 0,
  "revoked_session_count": 0
}
Can raise
  • 400malformed request
  • 401no valid token
  • 403scope missing
  • 404unknown or not visible
  • 409state conflict
  • 429rate limited
ALL CODES →
POST/v1/onboardings/{onboarding_id}/pq-proofs

Generate the PQ Portal proof workbook for a Betriebsfahrt run

onboarding.write

Reads the asset's telemetry for the run window, writes the Doppelhubkurve workbook in the PQ Portal layout, stores it as a versioned onboarding document and records it on the run. An invalid result (gaps, missing signals) is stored and reported too.

Path parameters

onboarding_idREQUIRED
string<uuid>Stable onboarding identifier returned by create and list operations.

Request body · required

run_indexREQUIRED
integerIndex of the run in the Betriebsfahrt gate's structured data.
Example value
curl -X POST "https://api.ebx.energy/v1/onboardings/00000000-0000-0000-0000-000000000000/pq-proofs" \
  -H "Authorization: Bearer $EBX_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"run_index":0}'
Example response201
{
  "run_index": 0,
  "run": {
    "product": "fcr",
    "direction": "positive",
    "start": "2026-09-10T13:30:00Z",
    "end": "2026-09-10T13:30:00Z",
    "operating_point_mw": "0",
    "requested_capacity_mw": "<string>",
    "setpoint_schedule": [
      {
        "start": "2026-09-10T13:30:00Z",
        "end": "2026-09-10T13:30:00Z",
        "setpoint_mw": "<string>"
      }
    ],
    "notes": "<string>",
    "proof": {
      "document_id": "<string>",
      "filename": "<string>",
      "source": "generated",
      "generated_at": "<string>",
      "generator_version": "<string>",
      "rows": 0,
      "missing_seconds": 0,
      "max_gap_seconds": 0,
      "sha256": "<string>",
      "valid": false,
      "problems": [
        "<string>"
      ],
      "warnings": [
        "<string>"
      ],
      "run_fingerprint": "<string>",
      "asset_id": "<string>",
      "measurement_point": "<string>"
    },
    "source": "manual",
    "session_id": "<string>",
    "verdict_status": "pass",
    "verdict_override_reason": "<string>"
  }
}
Can raise
  • 400malformed request
  • 401no valid token
  • 403scope missing
  • 404unknown or not visible
  • 409state conflict
  • 422validation failed
  • 429rate limited
ALL CODES →
PUT/v1/onboardings/{onboarding_id}/pq-proofs

Attach an uploaded proof workbook to a Betriebsfahrt run

onboarding.write

Links a pq_doublestroke_file document uploaded into the Betriebsfahrt gate to one run, replacing a generated proof.

Path parameters

onboarding_idREQUIRED
string<uuid>Stable onboarding identifier returned by create and list operations.

Request body · required

run_indexREQUIRED
integer
document_idREQUIRED
string<uuid>An available pq_doublestroke_file upload of this onboarding.
Example value
curl -X PUT "https://api.ebx.energy/v1/onboardings/00000000-0000-0000-0000-000000000000/pq-proofs" \
  -H "Authorization: Bearer $EBX_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"run_index":0,"document_id":"00000000-0000-0000-0000-000000000000"}'
Example response200
{
  "run_index": 0,
  "run": {
    "product": "fcr",
    "direction": "positive",
    "start": "2026-09-10T13:30:00Z",
    "end": "2026-09-10T13:30:00Z",
    "operating_point_mw": "0",
    "requested_capacity_mw": "<string>",
    "setpoint_schedule": [
      {
        "start": "2026-09-10T13:30:00Z",
        "end": "2026-09-10T13:30:00Z",
        "setpoint_mw": "<string>"
      }
    ],
    "notes": "<string>",
    "proof": {
      "document_id": "<string>",
      "filename": "<string>",
      "source": "generated",
      "generated_at": "<string>",
      "generator_version": "<string>",
      "rows": 0,
      "missing_seconds": 0,
      "max_gap_seconds": 0,
      "sha256": "<string>",
      "valid": false,
      "problems": [
        "<string>"
      ],
      "warnings": [
        "<string>"
      ],
      "run_fingerprint": "<string>",
      "asset_id": "<string>",
      "measurement_point": "<string>"
    },
    "source": "manual",
    "session_id": "<string>",
    "verdict_status": "pass",
    "verdict_override_reason": "<string>"
  }
}
Can raise
  • 400malformed request
  • 401no valid token
  • 403scope missing
  • 404unknown or not visible
  • 409state conflict
  • 422validation failed
  • 429rate limited
ALL CODES →
GET/v1/onboardings/{onboarding_id}/pq-submission

Get PQ Portal submission status

onboarding.read

Returns the orchestration step timeline and the per-product prequalification states for this onboarding's PQ Portal submission.

Path parameters

onboarding_idREQUIRED
string<uuid>Stable onboarding identifier returned by create and list operations.
Example value
curl "https://api.ebx.energy/v1/onboardings/00000000-0000-0000-0000-000000000000/pq-submission" \
  -H "Authorization: Bearer $EBX_TOKEN"
Example response200
{
  "id": "<string>",
  "onboarding_id": "<string>",
  "status": "<string>",
  "portal_env": "<string>",
  "run_kind": "<string>",
  "current_step": "<string>",
  "steps": [
    {
      "step": "<string>",
      "status": "<string>",
      "started_at": "<string>",
      "finished_at": "<string>",
      "error": "<string>"
    }
  ],
  "blockers": [
    {
      "key": "<string>",
      "label": "<string>",
      "detail": "<string>",
      "source": "<string>"
    }
  ],
  "profile": {
    "balance_group_responsible_name": "<string>",
    "balance_group_eic_x": "<string>",
    "contractor_name": "<string>",
    "connection_type_control_system_name": "<string>",
    "products": [
      "<string>"
    ],
    "power_caps_mw": "<string>"
  },
  "technical_unit_id": "<string>",
  "reserve_unit_id": "<string>",
  "dso_id": "<string>",
  "contract_ids": "<string>",
  "concept_ids": "<string>",
  "last_error": "<string>",
  "attempt_count": 0,
  "triggered_by_user_name": "<string>",
  "triggered_at": "<string>",
  "review_snapshot": "<string>",
  "review_snapshot_hash": "<string>",
  "review_inputs_changed": false,
  "reviewed_by_user_name": "<string>",
  "reviewed_at": "<string>",
  "review_note": "<string>",
  "requested_at": "<string>",
  "last_polled_at": "<string>",
  "preflight_completed_at": "<string>",
  "applications": [
    {
      "id": "<string>",
      "reserve_type": "<string>",
      "reserve_direction": "<string>",
      "cycle": 0,
      "reserve_id": "<string>",
      "portal_prequalification_id": "<string>",
      "portal_state": "<string>",
      "portal_number": "<string>",
      "valid_from": "<string>",
      "valid_until": "<string>",
      "proof": {
        "document_id": "<string>",
        "sha256": "<string>",
        "portal_document_id": "<string>",
        "portal_document_version_id": "<string>"
      },
      "performance_proof": "<string>",
      "dso_confirmation": {
        "id": "<string>",
        "state": "<string>",
        "power_mw": "<string>",
        "gradient_mw_per_min": "<string>"
      },
      "requested_measurement": "<string>",
      "requested_measurement_overrides": "<string>",
      "confirmed_measurement": "<string>",
      "calculated_measurement": "<string>",
      "evaluation_status": "<string>",
      "evaluation_details": [
        "<string>"
      ],
      "comments": [
        {
          "id": "<string>",
          "text": "<string>",
          "author_name": "<string>",
          "created_at": "<string>",
          "is_ebx": false
        }
      ],
      "unresolved_comment_count": 0,
      "action_requested_at": "<string>"
    }
  ]
}
Can raise
  • 401no valid token
  • 403scope missing
  • 404unknown or not visible
  • 429rate limited
ALL CODES →
POST/v1/onboardings/{onboarding_id}/pq-submission/applications/{application_id}/comments

Reply to a TSO clarification request (Nachfrage)

onboarding.write

Posts a reply on the prequalification's portal comment thread and refreshes the local snapshot.

Path parameters

onboarding_idREQUIRED
string<uuid>Stable onboarding identifier returned by create and list operations.
application_idREQUIRED
string<uuid>PQ application identifier from the submission status response.

Request body · required

bodyREQUIRED
string
Example value
curl -X POST "https://api.ebx.energy/v1/onboardings/00000000-0000-0000-0000-000000000000/pq-submission/applications/00000000-0000-0000-0000-000000000000/comments" \
  -H "Authorization: Bearer $EBX_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"body":"<string>"}'
Example response201
{
  "id": "<string>",
  "reserve_type": "<string>",
  "reserve_direction": "<string>",
  "cycle": 0,
  "reserve_id": "<string>",
  "portal_prequalification_id": "<string>",
  "portal_state": "<string>",
  "portal_number": "<string>",
  "valid_from": "<string>",
  "valid_until": "<string>",
  "proof": {
    "document_id": "<string>",
    "sha256": "<string>",
    "portal_document_id": "<string>",
    "portal_document_version_id": "<string>"
  },
  "performance_proof": "<string>",
  "dso_confirmation": {
    "id": "<string>",
    "state": "<string>",
    "power_mw": "<string>",
    "gradient_mw_per_min": "<string>"
  },
  "requested_measurement": "<string>",
  "requested_measurement_overrides": "<string>",
  "confirmed_measurement": "<string>",
  "calculated_measurement": "<string>",
  "evaluation_status": "<string>",
  "evaluation_details": [
    "<string>"
  ],
  "comments": [
    {
      "id": "<string>",
      "text": "<string>",
      "author_name": "<string>",
      "created_at": "<string>",
      "is_ebx": false
    }
  ],
  "unresolved_comment_count": 0,
  "action_requested_at": "<string>"
}
Can raise
  • 400malformed request
  • 401no valid token
  • 403scope missing
  • 404unknown or not visible
  • 409state conflict
  • 422validation failed
  • 429rate limited
ALL CODES →
PUT/v1/onboardings/{onboarding_id}/pq-submission/applications/{application_id}/requested-measurement

Override requested values of one prequalification

onboarding.write

Records operator overrides (each with a reason) of the requested values computed from the RfI, the DSO confirmation and the portal's proof analysis. They apply on the next preparation run.

Path parameters

onboarding_idREQUIRED
string<uuid>Stable onboarding identifier returned by create and list operations.
application_idREQUIRED
string<uuid>PQ application identifier from the case status response.

Request body · required

overrides
object
Example value
curl -X PUT "https://api.ebx.energy/v1/onboardings/00000000-0000-0000-0000-000000000000/pq-submission/applications/00000000-0000-0000-0000-000000000000/requested-measurement" \
  -H "Authorization: Bearer $EBX_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"overrides":"<string>"}'
Example response200
{
  "id": "<string>",
  "reserve_type": "<string>",
  "reserve_direction": "<string>",
  "cycle": 0,
  "reserve_id": "<string>",
  "portal_prequalification_id": "<string>",
  "portal_state": "<string>",
  "portal_number": "<string>",
  "valid_from": "<string>",
  "valid_until": "<string>",
  "proof": {
    "document_id": "<string>",
    "sha256": "<string>",
    "portal_document_id": "<string>",
    "portal_document_version_id": "<string>"
  },
  "performance_proof": "<string>",
  "dso_confirmation": {
    "id": "<string>",
    "state": "<string>",
    "power_mw": "<string>",
    "gradient_mw_per_min": "<string>"
  },
  "requested_measurement": "<string>",
  "requested_measurement_overrides": "<string>",
  "confirmed_measurement": "<string>",
  "calculated_measurement": "<string>",
  "evaluation_status": "<string>",
  "evaluation_details": [
    "<string>"
  ],
  "comments": [
    {
      "id": "<string>",
      "text": "<string>",
      "author_name": "<string>",
      "created_at": "<string>",
      "is_ebx": false
    }
  ],
  "unresolved_comment_count": 0,
  "action_requested_at": "<string>"
}
Can raise
  • 400malformed request
  • 401no valid token
  • 403scope missing
  • 404unknown or not visible
  • 409state conflict
  • 422validation failed
  • 429rate limited
ALL CODES →
POST/v1/onboardings/{onboarding_id}/pq-submission/preflight

Create the PQ Portal entities ahead of the Betriebsfahrt

onboarding.write

The pre-flight of an automated Betriebsfahrt: validates the collected data (the recording is not required yet), resolves the portal master data, creates or updates the technical unit and reserve unit, the reserves and the planned prequalifications the recording will be uploaded to. A missing framework contract or delivery concept is a warning here. Runs to its end before answering; a complete pre-flight leaves the case blocked on betriebsfahrt_required.

Path parameters

onboarding_idREQUIRED
string<uuid>Stable onboarding identifier returned by create and list operations.
Example value
curl -X POST "https://api.ebx.energy/v1/onboardings/00000000-0000-0000-0000-000000000000/pq-submission/preflight" \
  -H "Authorization: Bearer $EBX_TOKEN"
Example response200
{
  "id": "<string>",
  "onboarding_id": "<string>",
  "status": "<string>",
  "portal_env": "<string>",
  "run_kind": "<string>",
  "current_step": "<string>",
  "steps": [
    {
      "step": "<string>",
      "status": "<string>",
      "started_at": "<string>",
      "finished_at": "<string>",
      "error": "<string>"
    }
  ],
  "blockers": [
    {
      "key": "<string>",
      "label": "<string>",
      "detail": "<string>",
      "source": "<string>"
    }
  ],
  "profile": {
    "balance_group_responsible_name": "<string>",
    "balance_group_eic_x": "<string>",
    "contractor_name": "<string>",
    "connection_type_control_system_name": "<string>",
    "products": [
      "<string>"
    ],
    "power_caps_mw": "<string>"
  },
  "technical_unit_id": "<string>",
  "reserve_unit_id": "<string>",
  "dso_id": "<string>",
  "contract_ids": "<string>",
  "concept_ids": "<string>",
  "last_error": "<string>",
  "attempt_count": 0,
  "triggered_by_user_name": "<string>",
  "triggered_at": "<string>",
  "review_snapshot": "<string>",
  "review_snapshot_hash": "<string>",
  "review_inputs_changed": false,
  "reviewed_by_user_name": "<string>",
  "reviewed_at": "<string>",
  "review_note": "<string>",
  "requested_at": "<string>",
  "last_polled_at": "<string>",
  "preflight_completed_at": "<string>",
  "applications": [
    {
      "id": "<string>",
      "reserve_type": "<string>",
      "reserve_direction": "<string>",
      "cycle": 0,
      "reserve_id": "<string>",
      "portal_prequalification_id": "<string>",
      "portal_state": "<string>",
      "portal_number": "<string>",
      "valid_from": "<string>",
      "valid_until": "<string>",
      "proof": {
        "document_id": "<string>",
        "sha256": "<string>",
        "portal_document_id": "<string>",
        "portal_document_version_id": "<string>"
      },
      "performance_proof": "<string>",
      "dso_confirmation": {
        "id": "<string>",
        "state": "<string>",
        "power_mw": "<string>",
        "gradient_mw_per_min": "<string>"
      },
      "requested_measurement": "<string>",
      "requested_measurement_overrides": "<string>",
      "confirmed_measurement": "<string>",
      "calculated_measurement": "<string>",
      "evaluation_status": "<string>",
      "evaluation_details": [
        "<string>"
      ],
      "comments": [
        {
          "id": "<string>",
          "text": "<string>",
          "author_name": "<string>",
          "created_at": "<string>",
          "is_ebx": false
        }
      ],
      "unresolved_comment_count": 0,
      "action_requested_at": "<string>"
    }
  ]
}
Can raise
  • 400malformed request
  • 401no valid token
  • 403scope missing
  • 404unknown or not visible
  • 409state conflict
  • 429rate limited
ALL CODES →
POST/v1/onboardings/{onboarding_id}/pq-submission/prepare

Prepare the PQ application in the PQ Portal

onboarding.write

Claims a preparation run and executes it in the background: validates the collected data, resolves the portal master data, creates or updates the technical unit, reserve unit, reserves, concept links and documents, requests the digital DSO confirmations, uploads the proof workbooks, waits for the portal's analysis, sets the requested values and reads the portal's evaluation. Nothing is requested from the TSO: the case ends blocked, waiting for the DSO or the analysis, or ready for review. Safe to repeat.

Path parameters

onboarding_idREQUIRED
string<uuid>Stable onboarding identifier returned by create and list operations.
Example value
curl -X POST "https://api.ebx.energy/v1/onboardings/00000000-0000-0000-0000-000000000000/pq-submission/prepare" \
  -H "Authorization: Bearer $EBX_TOKEN"
Example response202
{
  "id": "<string>",
  "onboarding_id": "<string>",
  "status": "<string>",
  "portal_env": "<string>",
  "run_kind": "<string>",
  "current_step": "<string>",
  "steps": [
    {
      "step": "<string>",
      "status": "<string>",
      "started_at": "<string>",
      "finished_at": "<string>",
      "error": "<string>"
    }
  ],
  "blockers": [
    {
      "key": "<string>",
      "label": "<string>",
      "detail": "<string>",
      "source": "<string>"
    }
  ],
  "profile": {
    "balance_group_responsible_name": "<string>",
    "balance_group_eic_x": "<string>",
    "contractor_name": "<string>",
    "connection_type_control_system_name": "<string>",
    "products": [
      "<string>"
    ],
    "power_caps_mw": "<string>"
  },
  "technical_unit_id": "<string>",
  "reserve_unit_id": "<string>",
  "dso_id": "<string>",
  "contract_ids": "<string>",
  "concept_ids": "<string>",
  "last_error": "<string>",
  "attempt_count": 0,
  "triggered_by_user_name": "<string>",
  "triggered_at": "<string>",
  "review_snapshot": "<string>",
  "review_snapshot_hash": "<string>",
  "review_inputs_changed": false,
  "reviewed_by_user_name": "<string>",
  "reviewed_at": "<string>",
  "review_note": "<string>",
  "requested_at": "<string>",
  "last_polled_at": "<string>",
  "preflight_completed_at": "<string>",
  "applications": [
    {
      "id": "<string>",
      "reserve_type": "<string>",
      "reserve_direction": "<string>",
      "cycle": 0,
      "reserve_id": "<string>",
      "portal_prequalification_id": "<string>",
      "portal_state": "<string>",
      "portal_number": "<string>",
      "valid_from": "<string>",
      "valid_until": "<string>",
      "proof": {
        "document_id": "<string>",
        "sha256": "<string>",
        "portal_document_id": "<string>",
        "portal_document_version_id": "<string>"
      },
      "performance_proof": "<string>",
      "dso_confirmation": {
        "id": "<string>",
        "state": "<string>",
        "power_mw": "<string>",
        "gradient_mw_per_min": "<string>"
      },
      "requested_measurement": "<string>",
      "requested_measurement_overrides": "<string>",
      "confirmed_measurement": "<string>",
      "calculated_measurement": "<string>",
      "evaluation_status": "<string>",
      "evaluation_details": [
        "<string>"
      ],
      "comments": [
        {
          "id": "<string>",
          "text": "<string>",
          "author_name": "<string>",
          "created_at": "<string>",
          "is_ebx": false
        }
      ],
      "unresolved_comment_count": 0,
      "action_requested_at": "<string>"
    }
  ]
}
Can raise
  • 400malformed request
  • 401no valid token
  • 403scope missing
  • 404unknown or not visible
  • 409state conflict
  • 429rate limited
ALL CODES →
PUT/v1/onboardings/{onboarding_id}/pq-submission/profile

Update the EBX-maintained PQ profile

onboarding.write

Stores the balance-group responsible, balance group EIC, supplier, IT connection type, targeted products and power caps for this onboarding's PQ case. A prepared case must be prepared again afterwards.

Path parameters

onboarding_idREQUIRED
string<uuid>Stable onboarding identifier returned by create and list operations.

Request body · required

balance_group_responsible_name
string
balance_group_eic_x
string
contractor_name
string
connection_type_control_system_name
string
products
array[string]
power_caps_mw
object
Example value
curl -X PUT "https://api.ebx.energy/v1/onboardings/00000000-0000-0000-0000-000000000000/pq-submission/profile" \
  -H "Authorization: Bearer $EBX_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"balance_group_responsible_name":"<string>","balance_group_eic_x":"<string>","contractor_name":"<string>","connection_type_control_system_name":"<string>","products":["<string>"],"power_caps_mw":"<string>"}'
Example response200
{
  "id": "<string>",
  "onboarding_id": "<string>",
  "status": "<string>",
  "portal_env": "<string>",
  "run_kind": "<string>",
  "current_step": "<string>",
  "steps": [
    {
      "step": "<string>",
      "status": "<string>",
      "started_at": "<string>",
      "finished_at": "<string>",
      "error": "<string>"
    }
  ],
  "blockers": [
    {
      "key": "<string>",
      "label": "<string>",
      "detail": "<string>",
      "source": "<string>"
    }
  ],
  "profile": {
    "balance_group_responsible_name": "<string>",
    "balance_group_eic_x": "<string>",
    "contractor_name": "<string>",
    "connection_type_control_system_name": "<string>",
    "products": [
      "<string>"
    ],
    "power_caps_mw": "<string>"
  },
  "technical_unit_id": "<string>",
  "reserve_unit_id": "<string>",
  "dso_id": "<string>",
  "contract_ids": "<string>",
  "concept_ids": "<string>",
  "last_error": "<string>",
  "attempt_count": 0,
  "triggered_by_user_name": "<string>",
  "triggered_at": "<string>",
  "review_snapshot": "<string>",
  "review_snapshot_hash": "<string>",
  "review_inputs_changed": false,
  "reviewed_by_user_name": "<string>",
  "reviewed_at": "<string>",
  "review_note": "<string>",
  "requested_at": "<string>",
  "last_polled_at": "<string>",
  "preflight_completed_at": "<string>",
  "applications": [
    {
      "id": "<string>",
      "reserve_type": "<string>",
      "reserve_direction": "<string>",
      "cycle": 0,
      "reserve_id": "<string>",
      "portal_prequalification_id": "<string>",
      "portal_state": "<string>",
      "portal_number": "<string>",
      "valid_from": "<string>",
      "valid_until": "<string>",
      "proof": {
        "document_id": "<string>",
        "sha256": "<string>",
        "portal_document_id": "<string>",
        "portal_document_version_id": "<string>"
      },
      "performance_proof": "<string>",
      "dso_confirmation": {
        "id": "<string>",
        "state": "<string>",
        "power_mw": "<string>",
        "gradient_mw_per_min": "<string>"
      },
      "requested_measurement": "<string>",
      "requested_measurement_overrides": "<string>",
      "confirmed_measurement": "<string>",
      "calculated_measurement": "<string>",
      "evaluation_status": "<string>",
      "evaluation_details": [
        "<string>"
      ],
      "comments": [
        {
          "id": "<string>",
          "text": "<string>",
          "author_name": "<string>",
          "created_at": "<string>",
          "is_ebx": false
        }
      ],
      "unresolved_comment_count": 0,
      "action_requested_at": "<string>"
    }
  ]
}
Can raise
  • 400malformed request
  • 401no valid token
  • 403scope missing
  • 404unknown or not visible
  • 409state conflict
  • 422validation failed
  • 429rate limited
ALL CODES →
GET/v1/onboardings/{onboarding_id}/pq-submission/readiness

Check PQ Portal submission readiness

onboarding.read

Validates that all data and documents required for the automated PQ Portal submission are collected. With resolve=true the values are also resolved against the portal master data.

Path parameters

onboarding_idREQUIRED
string<uuid>Stable onboarding identifier returned by create and list operations.

Query parameters

resolve
booleandefault falseAlso resolve collected values against PQ Portal master data and build the payload preview.
Example value
curl "https://api.ebx.energy/v1/onboardings/00000000-0000-0000-0000-000000000000/pq-submission/readiness" \
  -H "Authorization: Bearer $EBX_TOKEN"
Example response200
{
  "ready": false,
  "integration_enabled": false,
  "portal_env": "<string>",
  "resolve_attempted": false,
  "items": [
    {
      "key": "<string>",
      "label": "<string>",
      "status": "ok",
      "detail": "<string>"
    }
  ],
  "derived_products": [
    "<string>"
  ],
  "payload_preview": {
    "technical_unit": "<string>",
    "reserve_unit": "<string>",
    "requested_measurements": "<string>",
    "documents": [
      "<string>"
    ]
  }
}
Can raise
  • 401no valid token
  • 403scope missing
  • 404unknown or not visible
  • 422validation failed
  • 429rate limited
ALL CODES →
POST/v1/onboardings/{onboarding_id}/pq-submission/replan

Start a new PQ cycle after a TSO rejection

onboarding.write

Resets the rejected prequalifications for a new cycle; the next preparation creates new ones in the portal. Reopen the PQ Submission gate first if it was passed.

Path parameters

onboarding_idREQUIRED
string<uuid>Stable onboarding identifier returned by create and list operations.
Example value
curl -X POST "https://api.ebx.energy/v1/onboardings/00000000-0000-0000-0000-000000000000/pq-submission/replan" \
  -H "Authorization: Bearer $EBX_TOKEN"
Example response200
{
  "id": "<string>",
  "onboarding_id": "<string>",
  "status": "<string>",
  "portal_env": "<string>",
  "run_kind": "<string>",
  "current_step": "<string>",
  "steps": [
    {
      "step": "<string>",
      "status": "<string>",
      "started_at": "<string>",
      "finished_at": "<string>",
      "error": "<string>"
    }
  ],
  "blockers": [
    {
      "key": "<string>",
      "label": "<string>",
      "detail": "<string>",
      "source": "<string>"
    }
  ],
  "profile": {
    "balance_group_responsible_name": "<string>",
    "balance_group_eic_x": "<string>",
    "contractor_name": "<string>",
    "connection_type_control_system_name": "<string>",
    "products": [
      "<string>"
    ],
    "power_caps_mw": "<string>"
  },
  "technical_unit_id": "<string>",
  "reserve_unit_id": "<string>",
  "dso_id": "<string>",
  "contract_ids": "<string>",
  "concept_ids": "<string>",
  "last_error": "<string>",
  "attempt_count": 0,
  "triggered_by_user_name": "<string>",
  "triggered_at": "<string>",
  "review_snapshot": "<string>",
  "review_snapshot_hash": "<string>",
  "review_inputs_changed": false,
  "reviewed_by_user_name": "<string>",
  "reviewed_at": "<string>",
  "review_note": "<string>",
  "requested_at": "<string>",
  "last_polled_at": "<string>",
  "preflight_completed_at": "<string>",
  "applications": [
    {
      "id": "<string>",
      "reserve_type": "<string>",
      "reserve_direction": "<string>",
      "cycle": 0,
      "reserve_id": "<string>",
      "portal_prequalification_id": "<string>",
      "portal_state": "<string>",
      "portal_number": "<string>",
      "valid_from": "<string>",
      "valid_until": "<string>",
      "proof": {
        "document_id": "<string>",
        "sha256": "<string>",
        "portal_document_id": "<string>",
        "portal_document_version_id": "<string>"
      },
      "performance_proof": "<string>",
      "dso_confirmation": {
        "id": "<string>",
        "state": "<string>",
        "power_mw": "<string>",
        "gradient_mw_per_min": "<string>"
      },
      "requested_measurement": "<string>",
      "requested_measurement_overrides": "<string>",
      "confirmed_measurement": "<string>",
      "calculated_measurement": "<string>",
      "evaluation_status": "<string>",
      "evaluation_details": [
        "<string>"
      ],
      "comments": [
        {
          "id": "<string>",
          "text": "<string>",
          "author_name": "<string>",
          "created_at": "<string>",
          "is_ebx": false
        }
      ],
      "unresolved_comment_count": 0,
      "action_requested_at": "<string>"
    }
  ]
}
Can raise
  • 400malformed request
  • 401no valid token
  • 403scope missing
  • 404unknown or not visible
  • 409state conflict
  • 429rate limited
ALL CODES →
POST/v1/onboardings/{onboarding_id}/pq-submission/request

Approve the prepared PQ application and request it from the TSO

onboarding.write

The human sign-off of the automated PQ submission. The approval is bound to the snapshot hash of the prepared state shown in the review; a stale hash is rejected with 409. The request run re-verifies the portal against the reviewed snapshot and sends the Request action per prequalification in the background. Poll the status endpoint for progress.

Path parameters

onboarding_idREQUIRED
string<uuid>Stable onboarding identifier returned by create and list operations.

Request body · required

snapshot_hashREQUIRED
string
note
string
Example value
curl -X POST "https://api.ebx.energy/v1/onboardings/00000000-0000-0000-0000-000000000000/pq-submission/request" \
  -H "Authorization: Bearer $EBX_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"snapshot_hash":"<string>","note":"<string>"}'
Example response202
{
  "id": "<string>",
  "onboarding_id": "<string>",
  "status": "<string>",
  "portal_env": "<string>",
  "run_kind": "<string>",
  "current_step": "<string>",
  "steps": [
    {
      "step": "<string>",
      "status": "<string>",
      "started_at": "<string>",
      "finished_at": "<string>",
      "error": "<string>"
    }
  ],
  "blockers": [
    {
      "key": "<string>",
      "label": "<string>",
      "detail": "<string>",
      "source": "<string>"
    }
  ],
  "profile": {
    "balance_group_responsible_name": "<string>",
    "balance_group_eic_x": "<string>",
    "contractor_name": "<string>",
    "connection_type_control_system_name": "<string>",
    "products": [
      "<string>"
    ],
    "power_caps_mw": "<string>"
  },
  "technical_unit_id": "<string>",
  "reserve_unit_id": "<string>",
  "dso_id": "<string>",
  "contract_ids": "<string>",
  "concept_ids": "<string>",
  "last_error": "<string>",
  "attempt_count": 0,
  "triggered_by_user_name": "<string>",
  "triggered_at": "<string>",
  "review_snapshot": "<string>",
  "review_snapshot_hash": "<string>",
  "review_inputs_changed": false,
  "reviewed_by_user_name": "<string>",
  "reviewed_at": "<string>",
  "review_note": "<string>",
  "requested_at": "<string>",
  "last_polled_at": "<string>",
  "preflight_completed_at": "<string>",
  "applications": [
    {
      "id": "<string>",
      "reserve_type": "<string>",
      "reserve_direction": "<string>",
      "cycle": 0,
      "reserve_id": "<string>",
      "portal_prequalification_id": "<string>",
      "portal_state": "<string>",
      "portal_number": "<string>",
      "valid_from": "<string>",
      "valid_until": "<string>",
      "proof": {
        "document_id": "<string>",
        "sha256": "<string>",
        "portal_document_id": "<string>",
        "portal_document_version_id": "<string>"
      },
      "performance_proof": "<string>",
      "dso_confirmation": {
        "id": "<string>",
        "state": "<string>",
        "power_mw": "<string>",
        "gradient_mw_per_min": "<string>"
      },
      "requested_measurement": "<string>",
      "requested_measurement_overrides": "<string>",
      "confirmed_measurement": "<string>",
      "calculated_measurement": "<string>",
      "evaluation_status": "<string>",
      "evaluation_details": [
        "<string>"
      ],
      "comments": [
        {
          "id": "<string>",
          "text": "<string>",
          "author_name": "<string>",
          "created_at": "<string>",
          "is_ebx": false
        }
      ],
      "unresolved_comment_count": 0,
      "action_requested_at": "<string>"
    }
  ]
}
Can raise
  • 400malformed request
  • 401no valid token
  • 403scope missing
  • 404unknown or not visible
  • 409state conflict
  • 422validation failed
  • 429rate limited
ALL CODES →
POST/v1/onboardings/{onboarding_id}/pq-submission/withdraw

Withdraw the requested PQ application from the TSO

onboarding.write

Sends the Withdraw action for every requested prequalification; the case must be prepared and reviewed again afterwards.

Path parameters

onboarding_idREQUIRED
string<uuid>Stable onboarding identifier returned by create and list operations.

Request body · required

note
string
Example value
curl -X POST "https://api.ebx.energy/v1/onboardings/00000000-0000-0000-0000-000000000000/pq-submission/withdraw" \
  -H "Authorization: Bearer $EBX_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"note":"<string>"}'
Example response200
{
  "id": "<string>",
  "onboarding_id": "<string>",
  "status": "<string>",
  "portal_env": "<string>",
  "run_kind": "<string>",
  "current_step": "<string>",
  "steps": [
    {
      "step": "<string>",
      "status": "<string>",
      "started_at": "<string>",
      "finished_at": "<string>",
      "error": "<string>"
    }
  ],
  "blockers": [
    {
      "key": "<string>",
      "label": "<string>",
      "detail": "<string>",
      "source": "<string>"
    }
  ],
  "profile": {
    "balance_group_responsible_name": "<string>",
    "balance_group_eic_x": "<string>",
    "contractor_name": "<string>",
    "connection_type_control_system_name": "<string>",
    "products": [
      "<string>"
    ],
    "power_caps_mw": "<string>"
  },
  "technical_unit_id": "<string>",
  "reserve_unit_id": "<string>",
  "dso_id": "<string>",
  "contract_ids": "<string>",
  "concept_ids": "<string>",
  "last_error": "<string>",
  "attempt_count": 0,
  "triggered_by_user_name": "<string>",
  "triggered_at": "<string>",
  "review_snapshot": "<string>",
  "review_snapshot_hash": "<string>",
  "review_inputs_changed": false,
  "reviewed_by_user_name": "<string>",
  "reviewed_at": "<string>",
  "review_note": "<string>",
  "requested_at": "<string>",
  "last_polled_at": "<string>",
  "preflight_completed_at": "<string>",
  "applications": [
    {
      "id": "<string>",
      "reserve_type": "<string>",
      "reserve_direction": "<string>",
      "cycle": 0,
      "reserve_id": "<string>",
      "portal_prequalification_id": "<string>",
      "portal_state": "<string>",
      "portal_number": "<string>",
      "valid_from": "<string>",
      "valid_until": "<string>",
      "proof": {
        "document_id": "<string>",
        "sha256": "<string>",
        "portal_document_id": "<string>",
        "portal_document_version_id": "<string>"
      },
      "performance_proof": "<string>",
      "dso_confirmation": {
        "id": "<string>",
        "state": "<string>",
        "power_mw": "<string>",
        "gradient_mw_per_min": "<string>"
      },
      "requested_measurement": "<string>",
      "requested_measurement_overrides": "<string>",
      "confirmed_measurement": "<string>",
      "calculated_measurement": "<string>",
      "evaluation_status": "<string>",
      "evaluation_details": [
        "<string>"
      ],
      "comments": [
        {
          "id": "<string>",
          "text": "<string>",
          "author_name": "<string>",
          "created_at": "<string>",
          "is_ebx": false
        }
      ],
      "unresolved_comment_count": 0,
      "action_requested_at": "<string>"
    }
  ]
}
Can raise
  • 400malformed request
  • 401no valid token
  • 403scope missing
  • 404unknown or not visible
  • 409state conflict
  • 422validation failed
  • 429rate limited
ALL CODES →
PATCH/v1/onboardings/{onboarding_id}/rfi

Update the RfI on behalf of the asset owner

onboarding.write

Persists the RfI gate payload with EBX attribution so operators can fill or correct the form for the asset owner. Per-field change stamps are updated server-side and clarification threads are preserved. If the RFI gate has already passed, the synced asset profile is refreshed.

Path parameters

onboarding_idREQUIRED
string<uuid>Stable onboarding identifier returned by create and list operations.

Request body · required

rfiREQUIRED
object
Example value
curl -X PATCH "https://api.ebx.energy/v1/onboardings/00000000-0000-0000-0000-000000000000/rfi" \
  -H "Authorization: Bearer $EBX_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"rfi":{"m_device":{"shipping_address":{"street":"<string>","postal_code":"<string>","city":"<string>","country":"<string>","attention":"<string>"},"site_contact":{"name":"<string>","email":"name@example.com","phone":"<string>"},"network_config":{"ems_server_ip":"","ebx_box_1_client_ip":"","ebx_box_2_client_ip":""},"planned_hw_installation_date":"<string>","delivery_mode":"loose_components","power_supply":"24v_dc","ethernet_available":false,"antenna_location_outdoors":false,"antenna_extension_cable":"none","notes":"<string>"},"control":{"ems_vendor":"<string>","ems_vendor_other":"<string>","ems_supports_modbus_tcp":false,"pq_submission_targeted":false,"ems_technical_contact":{"name":"<string>","email":"name@example.com","phone":"<string>"},"pq_data":"<string>","pq_documents":"<string>","notes":"<string>"},"field_meta":"<string>"}}'
Example response200
{
  "id": "<string>",
  "asset_id": "<string>",
  "asset_name": "<string>",
  "location": "<string>",
  "country": "<string>",
  "tso": "<string>",
  "integration_type": "monitoring_only",
  "target_hc_date": "2026-01-01",
  "current_gate_definition_id": "mon_rfi",
  "overall_status": "in_progress",
  "asset_owner_org_id": "<string>",
  "asset_owner_org_name": "<string>",
  "whitelabel": false,
  "process_definition": {
    "id": "<string>",
    "integration_type": "monitoring_only",
    "version": "<string>",
    "source_label": "<string>",
    "gate_sequence": [
      "mon_rfi"
    ],
    "gate_definitions": "<string>",
    "process_document_slots": [
      {
        "document_type": "installation_photo_mdevice",
        "label": "<string>",
        "description": "<string>",
        "required": false,
        "allow_multiple": false
      }
    ],
    "asset_profile_sync_gate_id": "mon_rfi",
    "schema_version": 0
  },
  "gate_definitions": "<string>",
  "asset_profile": {
    "id": "<string>",
    "onboarding_id": "<string>",
    "asset_id": "<string>",
    "asset_name": "<string>",
    "location": "<string>",
    "country": "<string>",
    "asset_owner_org_id": "<string>",
    "asset_owner_org_name": "<string>",
    "shipping_address": {
      "street": "<string>",
      "postal_code": "<string>",
      "city": "<string>",
      "country": "<string>",
      "attention": "<string>"
    },
    "site_contact": {
      "name": "<string>",
      "email": "name@example.com",
      "phone": "<string>"
    },
    "power_supply": "24v_dc",
    "ethernet_available": false,
    "antenna_location_outdoors": false,
    "ems_vendor": "<string>",
    "ems_vendor_other": "<string>",
    "ems_supports_modbus_tcp": false,
    "pq_submission_targeted": false,
    "ems_technical_contact": {
      "name": "<string>",
      "email": "name@example.com",
      "phone": "<string>"
    },
    "source_gate_definition_id": "mon_rfi",
    "source_gate_passed_at": "<string>",
    "source_gate_updated_at": "<string>",
    "synced_at": "<string>",
    "sync_reason": "<string>"
  },
  "asset_owner_contact": {
    "id": "<string>",
    "contact_name": "<string>",
    "contact_email": "<string>",
    "access": {
      "status": "<string>"
    }
  },
  "asset_owner_contacts": [
    {
      "id": "<string>",
      "contact_name": "<string>",
      "contact_email": "<string>",
      "access": {
        "status": "<string>"
      }
    }
  ],
  "partners": [
    {
      "id": "<string>",
      "role": "epc",
      "org_name": "<string>",
      "contact_name": "<string>",
      "contact_email": "<string>",
      "access": {
        "status": "<string>"
      }
    }
  ],
  "created_at": "<string>",
  "updated_at": "<string>",
  "gates": [
    {
      "id": "<string>",
      "definition_id": "mon_rfi",
      "status": "pending",
      "deadline": "2026-01-01",
      "last_note": "<string>",
      "passed_at": "<string>",
      "passed_by_user_name": "<string>",
      "structured_data": "<string>"
    }
  ],
  "documents": [
    {
      "id": "<string>",
      "onboarding_id": "<string>",
      "gate_definition_id": "mon_rfi",
      "document_type": "installation_photo_mdevice",
      "filename": "<string>",
      "size_bytes": 0,
      "content_type": "<string>",
      "uploaded_at": "<string>",
      "uploaded_by_user_name": "<string>",
      "version": 0
    }
  ],
  "activity": [
    {
      "id": "<string>",
      "onboarding_id": "<string>",
      "gate_definition_id": "mon_rfi",
      "actor_user_name": "<string>",
      "actor_org_name": "<string>",
      "event_type": "onboarding_created",
      "note": "<string>",
      "created_at": "<string>"
    }
  ],
  "internal_tracker": {
    "tasks": [
      {
        "id": "<string>",
        "title": "<string>",
        "description": "<string>",
        "status": "open",
        "category": "<string>",
        "template_key": "<string>",
        "due_date": "<string>",
        "created_by_user_name": "<string>",
        "created_at": "<string>",
        "updated_at": "<string>",
        "completed_at": "<string>"
      }
    ],
    "open_points": [
      {
        "id": "<string>",
        "title": "<string>",
        "status": "open",
        "ref": {
          "kind": "<string>",
          "gate_definition_id": "mon_rfi"
        },
        "comments": [
          {
            "id": "<string>",
            "author_user_name": "<string>",
            "author_org_name": "<string>",
            "author_side": "ebx",
            "created_at": "<string>",
            "body": "<string>"
          }
        ],
        "created_by_user_name": "<string>",
        "created_at": "<string>",
        "updated_at": "<string>",
        "resolved_at": "<string>"
      }
    ],
    "applied_templates": [
      "<string>"
    ]
  }
}
Can raise
  • 400malformed request
  • 401no valid token
  • 403scope missing
  • 404unknown or not visible
  • 409state conflict
  • 422validation failed
  • 429rate limited
ALL CODES →
POST/v1/onboardings/{onboarding_id}/rfi/fields/{field_key}/comments

Comment on an RfI field

onboarding.write

Adds a clarification comment to an RfI field on the RFI gate, opens the field discussion thread, and records onboarding activity.

Path parameters

onboarding_idREQUIRED
string<uuid>Stable onboarding identifier returned by create and list operations.
field_keyREQUIRED
stringRfI field key from the RFI gate field_meta payload, for example m_device.shipping_address.

Request body · required

bodyREQUIRED
string
Example value
curl -X POST "https://api.ebx.energy/v1/onboardings/00000000-0000-0000-0000-000000000000/rfi/fields/m_device.shipping_address/comments" \
  -H "Authorization: Bearer $EBX_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"body":"<string>"}'
Example response200
{
  "status": "open",
  "comments": [
    {
      "id": "<string>",
      "author_user_name": "<string>",
      "author_org_name": "<string>",
      "author_side": "ebx",
      "created_at": "<string>",
      "body": "<string>"
    }
  ],
  "last_comment_at": "<string>"
}
Can raise
  • 400malformed request
  • 401no valid token
  • 403scope missing
  • 404unknown or not visible
  • 409state conflict
  • 422validation failed
  • 429rate limited
ALL CODES →
PATCH/v1/onboardings/{onboarding_id}/rfi/fields/{field_key}/thread

Update an RfI field discussion status

onboarding.write

Opens or resolves the clarification thread for an RfI field without changing the field values.

Path parameters

onboarding_idREQUIRED
string<uuid>Stable onboarding identifier returned by create and list operations.
field_keyREQUIRED
stringRfI field key from the RFI gate field_meta payload, for example m_device.shipping_address.

Request body · required

statusREQUIRED
enumopenresolved
Example value
curl -X PATCH "https://api.ebx.energy/v1/onboardings/00000000-0000-0000-0000-000000000000/rfi/fields/m_device.shipping_address/thread" \
  -H "Authorization: Bearer $EBX_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"status":"open"}'
Example response200
{
  "status": "open",
  "comments": [
    {
      "id": "<string>",
      "author_user_name": "<string>",
      "author_org_name": "<string>",
      "author_side": "ebx",
      "created_at": "<string>",
      "body": "<string>"
    }
  ],
  "last_comment_at": "<string>"
}
Can raise
  • 400malformed request
  • 401no valid token
  • 403scope missing
  • 404unknown or not visible
  • 409state conflict
  • 422validation failed
  • 429rate limited
ALL CODES →
PATCH/v1/onboardings/{onboarding_id}/whitelabel

Enable or disable whitelabel branding

onboarding.write

Toggles whether the external onboarding surface (magic-link views and emails) carries the asset owner org's branding instead of EBX's. Enabling requires branding to be configured for the owner org.

Path parameters

onboarding_idREQUIRED
string<uuid>Stable onboarding identifier returned by create and list operations.

Request body · required

whitelabelREQUIRED
boolean
Example value
curl -X PATCH "https://api.ebx.energy/v1/onboardings/00000000-0000-0000-0000-000000000000/whitelabel" \
  -H "Authorization: Bearer $EBX_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"whitelabel":false}'
Example response200
{
  "id": "<string>",
  "asset_id": "<string>",
  "asset_name": "<string>",
  "location": "<string>",
  "country": "<string>",
  "tso": "<string>",
  "integration_type": "monitoring_only",
  "target_hc_date": "2026-01-01",
  "current_gate_definition_id": "mon_rfi",
  "overall_status": "in_progress",
  "asset_owner_org_id": "<string>",
  "asset_owner_org_name": "<string>",
  "whitelabel": false,
  "process_definition": {
    "id": "<string>",
    "integration_type": "monitoring_only",
    "version": "<string>",
    "source_label": "<string>",
    "gate_sequence": [
      "mon_rfi"
    ],
    "gate_definitions": "<string>",
    "process_document_slots": [
      {
        "document_type": "installation_photo_mdevice",
        "label": "<string>",
        "description": "<string>",
        "required": false,
        "allow_multiple": false
      }
    ],
    "asset_profile_sync_gate_id": "mon_rfi",
    "schema_version": 0
  },
  "gate_definitions": "<string>",
  "asset_profile": {
    "id": "<string>",
    "onboarding_id": "<string>",
    "asset_id": "<string>",
    "asset_name": "<string>",
    "location": "<string>",
    "country": "<string>",
    "asset_owner_org_id": "<string>",
    "asset_owner_org_name": "<string>",
    "shipping_address": {
      "street": "<string>",
      "postal_code": "<string>",
      "city": "<string>",
      "country": "<string>",
      "attention": "<string>"
    },
    "site_contact": {
      "name": "<string>",
      "email": "name@example.com",
      "phone": "<string>"
    },
    "power_supply": "24v_dc",
    "ethernet_available": false,
    "antenna_location_outdoors": false,
    "ems_vendor": "<string>",
    "ems_vendor_other": "<string>",
    "ems_supports_modbus_tcp": false,
    "pq_submission_targeted": false,
    "ems_technical_contact": {
      "name": "<string>",
      "email": "name@example.com",
      "phone": "<string>"
    },
    "source_gate_definition_id": "mon_rfi",
    "source_gate_passed_at": "<string>",
    "source_gate_updated_at": "<string>",
    "synced_at": "<string>",
    "sync_reason": "<string>"
  },
  "asset_owner_contact": {
    "id": "<string>",
    "contact_name": "<string>",
    "contact_email": "<string>",
    "access": {
      "status": "<string>"
    }
  },
  "asset_owner_contacts": [
    {
      "id": "<string>",
      "contact_name": "<string>",
      "contact_email": "<string>",
      "access": {
        "status": "<string>"
      }
    }
  ],
  "partners": [
    {
      "id": "<string>",
      "role": "epc",
      "org_name": "<string>",
      "contact_name": "<string>",
      "contact_email": "<string>",
      "access": {
        "status": "<string>"
      }
    }
  ],
  "created_at": "<string>",
  "updated_at": "<string>",
  "gates": [
    {
      "id": "<string>",
      "definition_id": "mon_rfi",
      "status": "pending",
      "deadline": "2026-01-01",
      "last_note": "<string>",
      "passed_at": "<string>",
      "passed_by_user_name": "<string>",
      "structured_data": "<string>"
    }
  ],
  "documents": [
    {
      "id": "<string>",
      "onboarding_id": "<string>",
      "gate_definition_id": "mon_rfi",
      "document_type": "installation_photo_mdevice",
      "filename": "<string>",
      "size_bytes": 0,
      "content_type": "<string>",
      "uploaded_at": "<string>",
      "uploaded_by_user_name": "<string>",
      "version": 0
    }
  ],
  "activity": [
    {
      "id": "<string>",
      "onboarding_id": "<string>",
      "gate_definition_id": "mon_rfi",
      "actor_user_name": "<string>",
      "actor_org_name": "<string>",
      "event_type": "onboarding_created",
      "note": "<string>",
      "created_at": "<string>"
    }
  ],
  "internal_tracker": {
    "tasks": [
      {
        "id": "<string>",
        "title": "<string>",
        "description": "<string>",
        "status": "open",
        "category": "<string>",
        "template_key": "<string>",
        "due_date": "<string>",
        "created_by_user_name": "<string>",
        "created_at": "<string>",
        "updated_at": "<string>",
        "completed_at": "<string>"
      }
    ],
    "open_points": [
      {
        "id": "<string>",
        "title": "<string>",
        "status": "open",
        "ref": {
          "kind": "<string>",
          "gate_definition_id": "mon_rfi"
        },
        "comments": [
          {
            "id": "<string>",
            "author_user_name": "<string>",
            "author_org_name": "<string>",
            "author_side": "ebx",
            "created_at": "<string>",
            "body": "<string>"
          }
        ],
        "created_by_user_name": "<string>",
        "created_at": "<string>",
        "updated_at": "<string>",
        "resolved_at": "<string>"
      }
    ],
    "applied_templates": [
      "<string>"
    ]
  }
}
Can raise
  • 400malformed request
  • 401no valid token
  • 403scope missing
  • 404unknown or not visible
  • 409state conflict
  • 422validation failed
  • 429rate limited
ALL CODES →
GET/v1/onboardings/standards/dpl

List standard DPL templates

onboarding.read

Returns the EBX-maintained standard Data Point List templates available for onboarding. Use these templates to initialize or compare the software-gate DPL for monitoring-only and full-control integrations.

This endpoint takes no parameters.

Example value
curl "https://api.ebx.energy/v1/onboardings/standards/dpl" \
  -H "Authorization: Bearer $EBX_TOKEN"
Example response200
[
  {
    "id": "ebx_monitor",
    "label": "<string>",
    "version": "<string>",
    "published_at": "<string>",
    "notes": "<string>",
    "datapoints": [
      {
        "id": "<string>",
        "name": "<string>",
        "unit": "<string>",
        "data_type": "float",
        "direction": "control",
        "register": 0,
        "register_type": "holding",
        "short_description": "<string>",
        "long_description_en": "<string>",
        "long_description_de": "<string>"
      }
    ]
  }
]
Can raise
  • 401no valid token
  • 403scope missing
  • 429rate limited
ALL CODES →
GET/v1/onboardings/standards/dpl/{standard_id}

Get a standard DPL template

onboarding.read

Returns one EBX standard DPL template. The response includes the expected datapoints, Modbus register metadata, direction, data type, and customer-facing descriptions used to prepare the EMS implementation.

Path parameters

standard_idREQUIRED
stringStandard DPL identifier, for example ebx_monitor or ebx_control.
Example value
curl "https://api.ebx.energy/v1/onboardings/standards/dpl/ebx_monitor" \
  -H "Authorization: Bearer $EBX_TOKEN"
Example response200
{
  "id": "ebx_monitor",
  "label": "<string>",
  "version": "<string>",
  "published_at": "<string>",
  "notes": "<string>",
  "datapoints": [
    {
      "id": "<string>",
      "name": "<string>",
      "unit": "<string>",
      "data_type": "float",
      "direction": "control",
      "register": 0,
      "register_type": "holding",
      "short_description": "<string>",
      "long_description_en": "<string>",
      "long_description_de": "<string>"
    }
  ]
}
Can raise
  • 401no valid token
  • 403scope missing
  • 404unknown or not visible
  • 429rate limited
ALL CODES →
GET/v1/public/onboarding-branding/{organization_id}/email-banner

Get a whitelabel onboarding email banner

Serves the organization's uploaded email banner for onboarding emails and previews.

Path parameters

organization_idREQUIRED
stringOrganization identifier the branding belongs to.
Example value
curl "https://api.ebx.energy/v1/public/onboarding-branding/your-org/email-banner" \
  -H "Authorization: Bearer $EBX_TOKEN"
Example response200
{}
Can raise
  • 404unknown or not visible
  • 429rate limited
ALL CODES →

Send feedback

This goes straight to the docs team on Slack, with the page you are on. It is not attributed to you, so say who you are if you would like an answer.

0/2000