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.

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

Get organization onboarding branding

onboarding.read

Required scopes: 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

Required scopes: 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

Required scopes: 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

Authentication: none

Validates a reusable external onboarding magic link and returns authentication tokens granting access to the assigned onboarding task.

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

Authentication: none

Refreshes an 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

Required scopes: none (any authenticated caller)

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": [
    {
      "archived_at": "<string>",
      "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

Required scopes: none (any authenticated caller)

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
{
  "archived_at": "<string>",
  "project_settings": {
    "deadline_overrides": "<string>",
    "contacts": {
      "asset_owner": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      },
      "epc": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      },
      "ems_provider": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      },
      "ebx": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      },
      "partner": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      }
    },
    "co_location": "<string>",
    "start": "2026-01-01",
    "original": "2026-01-01",
    "estimatedOverride": "2026-01-01"
  },
  "created_at": "<string>",
  "project_schedule": [
    {
      "definition_id": "mon_rfi",
      "status": "pending",
      "deadline": "2026-01-01",
      "passed_at": "<string>"
    }
  ],
  "hardware_requested_at": "<string>",
  "hardware_submitted_at": "<string>",
  "general_submitted_at": "<string>",
  "ems_submitted_at": "<string>",
  "hardware_ready": false,
  "ems_information": {
    "network": {
      "ems_server_ip": "",
      "ebx_box_1_client_ip": "",
      "ebx_box_2_client_ip": "",
      "subnet_mask": "",
      "gateway": "",
      "ems_mode": "client",
      "ems_port": 0,
      "ems_unit_id": 0,
      "ems_byte_word_order": "ABCD",
      "ems_poll_interval_ms": 0,
      "ems_timeout_ms": 0,
      "ems_batching": {
        "max_read_registers": 125,
        "max_read_gap_registers": 32,
        "max_write_registers": 123,
        "max_write_gap_registers": 0,
        "fill_write_gaps_from_shadow": false,
        "write_cache_ttl_seconds": 2
      }
    },
    "provider_company": "<string>",
    "ems_supports_modbus_tcp": false,
    "pq_submission_targeted": false,
    "ems_technical_contact": {
      "name": "<string>",
      "email": "name@example.com",
      "phone": "<string>"
    }
  },
  "responsible_contact": {
    "name": "<string>",
    "email": "<string>",
    "phone": "<string>",
    "company": "<string>"
  },
  "support_contact": {
    "name": "<string>",
    "email": "<string>",
    "phone": "<string>",
    "company": "<string>"
  },
  "onboarding_id": "<string>",
  "asset_id": "<string>",
  "asset_name": "<string>",
  "location": "<string>",
  "country": "<string>",
  "integration_type": "monitoring_only",
  "target_hc_date": "2026-01-01",
  "overall_status": "in_progress",
  "is_transition": false,
  "role": "asset_owner",
  "ems_network": {
    "ems_server_ip": "",
    "ebx_box_1_client_ip": "",
    "ebx_box_2_client_ip": "",
    "subnet_mask": "",
    "gateway": "",
    "ems_mode": "client",
    "ems_port": 0,
    "ems_unit_id": 0,
    "ems_byte_word_order": "ABCD",
    "ems_poll_interval_ms": 0,
    "ems_timeout_ms": 0,
    "ems_batching": {
      "max_read_registers": 125,
      "max_read_gap_registers": 32,
      "max_write_registers": 123,
      "max_write_gap_registers": 0,
      "fill_write_gaps_from_shadow": false,
      "write_cache_ttl_seconds": 2
    }
  },
  "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,
      "requirement_key": "<string>",
      "review_status": "accepted",
      "reviewed_at": "<string>",
      "reviewed_by_user_name": "<string>",
      "review_note": "<string>"
    }
  ],
  "branding": {
    "display_name": "<string>",
    "primary_color": "<string>",
    "support_email": "<string>",
    "logo_url": "<string>"
  },
  "updated_at": "<string>",
  "shared_notes": [
    {
      "id": "<string>",
      "body": "<string>",
      "visibility": "internal",
      "author_user_name": "<string>",
      "created_at": "<string>"
    }
  ],
  "shared_open_points": [
    {
      "id": "<string>",
      "title": "<string>",
      "status": "open",
      "owner": "asset_owner",
      "category": "grid_dso",
      "due_date": "2026-01-01",
      "decision": "<string>",
      "comments": [
        {
          "id": "<string>",
          "author_user_name": "<string>",
          "author_org_name": "<string>",
          "author_side": "ebx",
          "created_at": "<string>",
          "body": "<string>"
        }
      ],
      "created_at": "<string>",
      "updated_at": "<string>",
      "resolved_at": "<string>"
    }
  ]
}
Can raise
  • 404unknown or not visible
  • 422validation failed
  • 429rate limited
ALL CODES →
POST/v1/onboarding-tasks/{onboarding_id}/change-requests

Request Task Change

Required scopes: none (any authenticated caller)

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

sectionREQUIRED
enumhardwaregeneralems
noteREQUIRED
string
Example value
curl -X POST "https://api.ebx.energy/v1/onboarding-tasks/00000000-0000-0000-0000-000000000000/change-requests" \
  -H "Authorization: Bearer $EBX_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"section":"hardware","note":"<string>"}'

Returns 204 with no body.

Can raise
  • 400malformed request
  • 404unknown or not visible
  • 409state conflict
  • 422validation failed
  • 429rate limited
ALL CODES →
DELETE/v1/onboarding-tasks/{onboarding_id}/documents/{document_id}

Remove a task-scoped uploaded document

Required scopes: none (any authenticated caller)

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

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
{
  "archived_at": "<string>",
  "project_settings": {
    "deadline_overrides": "<string>",
    "contacts": {
      "asset_owner": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      },
      "epc": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      },
      "ems_provider": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      },
      "ebx": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      },
      "partner": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      }
    },
    "co_location": "<string>",
    "start": "2026-01-01",
    "original": "2026-01-01",
    "estimatedOverride": "2026-01-01"
  },
  "created_at": "<string>",
  "project_schedule": [
    {
      "definition_id": "mon_rfi",
      "status": "pending",
      "deadline": "2026-01-01",
      "passed_at": "<string>"
    }
  ],
  "hardware_requested_at": "<string>",
  "hardware_submitted_at": "<string>",
  "general_submitted_at": "<string>",
  "ems_submitted_at": "<string>",
  "hardware_ready": false,
  "ems_information": {
    "network": {
      "ems_server_ip": "",
      "ebx_box_1_client_ip": "",
      "ebx_box_2_client_ip": "",
      "subnet_mask": "",
      "gateway": "",
      "ems_mode": "client",
      "ems_port": 0,
      "ems_unit_id": 0,
      "ems_byte_word_order": "ABCD",
      "ems_poll_interval_ms": 0,
      "ems_timeout_ms": 0,
      "ems_batching": {
        "max_read_registers": 125,
        "max_read_gap_registers": 32,
        "max_write_registers": 123,
        "max_write_gap_registers": 0,
        "fill_write_gaps_from_shadow": false,
        "write_cache_ttl_seconds": 2
      }
    },
    "provider_company": "<string>",
    "ems_supports_modbus_tcp": false,
    "pq_submission_targeted": false,
    "ems_technical_contact": {
      "name": "<string>",
      "email": "name@example.com",
      "phone": "<string>"
    }
  },
  "responsible_contact": {
    "name": "<string>",
    "email": "<string>",
    "phone": "<string>",
    "company": "<string>"
  },
  "support_contact": {
    "name": "<string>",
    "email": "<string>",
    "phone": "<string>",
    "company": "<string>"
  },
  "onboarding_id": "<string>",
  "asset_id": "<string>",
  "asset_name": "<string>",
  "location": "<string>",
  "country": "<string>",
  "integration_type": "monitoring_only",
  "target_hc_date": "2026-01-01",
  "overall_status": "in_progress",
  "is_transition": false,
  "role": "asset_owner",
  "ems_network": {
    "ems_server_ip": "",
    "ebx_box_1_client_ip": "",
    "ebx_box_2_client_ip": "",
    "subnet_mask": "",
    "gateway": "",
    "ems_mode": "client",
    "ems_port": 0,
    "ems_unit_id": 0,
    "ems_byte_word_order": "ABCD",
    "ems_poll_interval_ms": 0,
    "ems_timeout_ms": 0,
    "ems_batching": {
      "max_read_registers": 125,
      "max_read_gap_registers": 32,
      "max_write_registers": 123,
      "max_write_gap_registers": 0,
      "fill_write_gaps_from_shadow": false,
      "write_cache_ttl_seconds": 2
    }
  },
  "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,
      "requirement_key": "<string>",
      "review_status": "accepted",
      "reviewed_at": "<string>",
      "reviewed_by_user_name": "<string>",
      "review_note": "<string>"
    }
  ],
  "branding": {
    "display_name": "<string>",
    "primary_color": "<string>",
    "support_email": "<string>",
    "logo_url": "<string>"
  },
  "updated_at": "<string>",
  "shared_notes": [
    {
      "id": "<string>",
      "body": "<string>",
      "visibility": "internal",
      "author_user_name": "<string>",
      "created_at": "<string>"
    }
  ],
  "shared_open_points": [
    {
      "id": "<string>",
      "title": "<string>",
      "status": "open",
      "owner": "asset_owner",
      "category": "grid_dso",
      "due_date": "2026-01-01",
      "decision": "<string>",
      "comments": [
        {
          "id": "<string>",
          "author_user_name": "<string>",
          "author_org_name": "<string>",
          "author_side": "ebx",
          "created_at": "<string>",
          "body": "<string>"
        }
      ],
      "created_at": "<string>",
      "updated_at": "<string>",
      "resolved_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

Required scopes: none (any authenticated caller)

Returns a short-lived presigned HTTP GET download URL for a document the caller can access through their assigned onboarding task. The URL serves the document as an attachment under its original filename, or inline for preview with inline=true.

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.
inline
booleandefault falseServe the document for in-browser preview instead of as an attachment. Only PDF, PNG, JPEG and WebP documents can be previewed; any other type returns 409.

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

Required scopes: none (any authenticated caller)

Marks a pending task evidence upload as available after the client has uploaded the file to the presigned upload URL.

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
{
  "archived_at": "<string>",
  "project_settings": {
    "deadline_overrides": "<string>",
    "contacts": {
      "asset_owner": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      },
      "epc": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      },
      "ems_provider": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      },
      "ebx": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      },
      "partner": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      }
    },
    "co_location": "<string>",
    "start": "2026-01-01",
    "original": "2026-01-01",
    "estimatedOverride": "2026-01-01"
  },
  "created_at": "<string>",
  "project_schedule": [
    {
      "definition_id": "mon_rfi",
      "status": "pending",
      "deadline": "2026-01-01",
      "passed_at": "<string>"
    }
  ],
  "hardware_requested_at": "<string>",
  "hardware_submitted_at": "<string>",
  "general_submitted_at": "<string>",
  "ems_submitted_at": "<string>",
  "hardware_ready": false,
  "ems_information": {
    "network": {
      "ems_server_ip": "",
      "ebx_box_1_client_ip": "",
      "ebx_box_2_client_ip": "",
      "subnet_mask": "",
      "gateway": "",
      "ems_mode": "client",
      "ems_port": 0,
      "ems_unit_id": 0,
      "ems_byte_word_order": "ABCD",
      "ems_poll_interval_ms": 0,
      "ems_timeout_ms": 0,
      "ems_batching": {
        "max_read_registers": 125,
        "max_read_gap_registers": 32,
        "max_write_registers": 123,
        "max_write_gap_registers": 0,
        "fill_write_gaps_from_shadow": false,
        "write_cache_ttl_seconds": 2
      }
    },
    "provider_company": "<string>",
    "ems_supports_modbus_tcp": false,
    "pq_submission_targeted": false,
    "ems_technical_contact": {
      "name": "<string>",
      "email": "name@example.com",
      "phone": "<string>"
    }
  },
  "responsible_contact": {
    "name": "<string>",
    "email": "<string>",
    "phone": "<string>",
    "company": "<string>"
  },
  "support_contact": {
    "name": "<string>",
    "email": "<string>",
    "phone": "<string>",
    "company": "<string>"
  },
  "onboarding_id": "<string>",
  "asset_id": "<string>",
  "asset_name": "<string>",
  "location": "<string>",
  "country": "<string>",
  "integration_type": "monitoring_only",
  "target_hc_date": "2026-01-01",
  "overall_status": "in_progress",
  "is_transition": false,
  "role": "asset_owner",
  "ems_network": {
    "ems_server_ip": "",
    "ebx_box_1_client_ip": "",
    "ebx_box_2_client_ip": "",
    "subnet_mask": "",
    "gateway": "",
    "ems_mode": "client",
    "ems_port": 0,
    "ems_unit_id": 0,
    "ems_byte_word_order": "ABCD",
    "ems_poll_interval_ms": 0,
    "ems_timeout_ms": 0,
    "ems_batching": {
      "max_read_registers": 125,
      "max_read_gap_registers": 32,
      "max_write_registers": 123,
      "max_write_gap_registers": 0,
      "fill_write_gaps_from_shadow": false,
      "write_cache_ttl_seconds": 2
    }
  },
  "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,
      "requirement_key": "<string>",
      "review_status": "accepted",
      "reviewed_at": "<string>",
      "reviewed_by_user_name": "<string>",
      "review_note": "<string>"
    }
  ],
  "branding": {
    "display_name": "<string>",
    "primary_color": "<string>",
    "support_email": "<string>",
    "logo_url": "<string>"
  },
  "updated_at": "<string>",
  "shared_notes": [
    {
      "id": "<string>",
      "body": "<string>",
      "visibility": "internal",
      "author_user_name": "<string>",
      "created_at": "<string>"
    }
  ],
  "shared_open_points": [
    {
      "id": "<string>",
      "title": "<string>",
      "status": "open",
      "owner": "asset_owner",
      "category": "grid_dso",
      "due_date": "2026-01-01",
      "decision": "<string>",
      "comments": [
        {
          "id": "<string>",
          "author_user_name": "<string>",
          "author_org_name": "<string>",
          "author_side": "ebx",
          "created_at": "<string>",
          "body": "<string>"
        }
      ],
      "created_at": "<string>",
      "updated_at": "<string>",
      "resolved_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

Required scopes: none (any authenticated caller)

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

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
requirement_key
stringThe requirement the file satisfies, e.g. contractor_confirmation. The file is then filed under that requirement's gate whatever gate_definition_id says. Without it the requirement is derived from the type and the rfi-<key>__ / pq-evidence-<slot>__ filename prefix, or the file stays unassigned.
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>","requirement_key":"<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

Required scopes: none (any authenticated caller)

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
{
  "archived_at": "<string>",
  "project_settings": {
    "deadline_overrides": "<string>",
    "contacts": {
      "asset_owner": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      },
      "epc": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      },
      "ems_provider": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      },
      "ebx": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      },
      "partner": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      }
    },
    "co_location": "<string>",
    "start": "2026-01-01",
    "original": "2026-01-01",
    "estimatedOverride": "2026-01-01"
  },
  "created_at": "<string>",
  "project_schedule": [
    {
      "definition_id": "mon_rfi",
      "status": "pending",
      "deadline": "2026-01-01",
      "passed_at": "<string>"
    }
  ],
  "hardware_requested_at": "<string>",
  "hardware_submitted_at": "<string>",
  "general_submitted_at": "<string>",
  "ems_submitted_at": "<string>",
  "hardware_ready": false,
  "ems_information": {
    "network": {
      "ems_server_ip": "",
      "ebx_box_1_client_ip": "",
      "ebx_box_2_client_ip": "",
      "subnet_mask": "",
      "gateway": "",
      "ems_mode": "client",
      "ems_port": 0,
      "ems_unit_id": 0,
      "ems_byte_word_order": "ABCD",
      "ems_poll_interval_ms": 0,
      "ems_timeout_ms": 0,
      "ems_batching": {
        "max_read_registers": 125,
        "max_read_gap_registers": 32,
        "max_write_registers": 123,
        "max_write_gap_registers": 0,
        "fill_write_gaps_from_shadow": false,
        "write_cache_ttl_seconds": 2
      }
    },
    "provider_company": "<string>",
    "ems_supports_modbus_tcp": false,
    "pq_submission_targeted": false,
    "ems_technical_contact": {
      "name": "<string>",
      "email": "name@example.com",
      "phone": "<string>"
    }
  },
  "responsible_contact": {
    "name": "<string>",
    "email": "<string>",
    "phone": "<string>",
    "company": "<string>"
  },
  "support_contact": {
    "name": "<string>",
    "email": "<string>",
    "phone": "<string>",
    "company": "<string>"
  },
  "onboarding_id": "<string>",
  "asset_id": "<string>",
  "asset_name": "<string>",
  "location": "<string>",
  "country": "<string>",
  "integration_type": "monitoring_only",
  "target_hc_date": "2026-01-01",
  "overall_status": "in_progress",
  "is_transition": false,
  "role": "asset_owner",
  "ems_network": {
    "ems_server_ip": "",
    "ebx_box_1_client_ip": "",
    "ebx_box_2_client_ip": "",
    "subnet_mask": "",
    "gateway": "",
    "ems_mode": "client",
    "ems_port": 0,
    "ems_unit_id": 0,
    "ems_byte_word_order": "ABCD",
    "ems_poll_interval_ms": 0,
    "ems_timeout_ms": 0,
    "ems_batching": {
      "max_read_registers": 125,
      "max_read_gap_registers": 32,
      "max_write_registers": 123,
      "max_write_gap_registers": 0,
      "fill_write_gaps_from_shadow": false,
      "write_cache_ttl_seconds": 2
    }
  },
  "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,
      "requirement_key": "<string>",
      "review_status": "accepted",
      "reviewed_at": "<string>",
      "reviewed_by_user_name": "<string>",
      "review_note": "<string>"
    }
  ],
  "branding": {
    "display_name": "<string>",
    "primary_color": "<string>",
    "support_email": "<string>",
    "logo_url": "<string>"
  },
  "updated_at": "<string>",
  "shared_notes": [
    {
      "id": "<string>",
      "body": "<string>",
      "visibility": "internal",
      "author_user_name": "<string>",
      "created_at": "<string>"
    }
  ],
  "shared_open_points": [
    {
      "id": "<string>",
      "title": "<string>",
      "status": "open",
      "owner": "asset_owner",
      "category": "grid_dso",
      "due_date": "2026-01-01",
      "decision": "<string>",
      "comments": [
        {
          "id": "<string>",
          "author_user_name": "<string>",
          "author_org_name": "<string>",
          "author_side": "ebx",
          "created_at": "<string>",
          "body": "<string>"
        }
      ],
      "created_at": "<string>",
      "updated_at": "<string>",
      "resolved_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

Required scopes: none (any authenticated caller)

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

Required scopes: none (any authenticated caller)

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
{
  "archived_at": "<string>",
  "project_settings": {
    "deadline_overrides": "<string>",
    "contacts": {
      "asset_owner": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      },
      "epc": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      },
      "ems_provider": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      },
      "ebx": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      },
      "partner": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      }
    },
    "co_location": "<string>",
    "start": "2026-01-01",
    "original": "2026-01-01",
    "estimatedOverride": "2026-01-01"
  },
  "created_at": "<string>",
  "project_schedule": [
    {
      "definition_id": "mon_rfi",
      "status": "pending",
      "deadline": "2026-01-01",
      "passed_at": "<string>"
    }
  ],
  "hardware_requested_at": "<string>",
  "hardware_submitted_at": "<string>",
  "general_submitted_at": "<string>",
  "ems_submitted_at": "<string>",
  "hardware_ready": false,
  "ems_information": {
    "network": {
      "ems_server_ip": "",
      "ebx_box_1_client_ip": "",
      "ebx_box_2_client_ip": "",
      "subnet_mask": "",
      "gateway": "",
      "ems_mode": "client",
      "ems_port": 0,
      "ems_unit_id": 0,
      "ems_byte_word_order": "ABCD",
      "ems_poll_interval_ms": 0,
      "ems_timeout_ms": 0,
      "ems_batching": {
        "max_read_registers": 125,
        "max_read_gap_registers": 32,
        "max_write_registers": 123,
        "max_write_gap_registers": 0,
        "fill_write_gaps_from_shadow": false,
        "write_cache_ttl_seconds": 2
      }
    },
    "provider_company": "<string>",
    "ems_supports_modbus_tcp": false,
    "pq_submission_targeted": false,
    "ems_technical_contact": {
      "name": "<string>",
      "email": "name@example.com",
      "phone": "<string>"
    }
  },
  "responsible_contact": {
    "name": "<string>",
    "email": "<string>",
    "phone": "<string>",
    "company": "<string>"
  },
  "support_contact": {
    "name": "<string>",
    "email": "<string>",
    "phone": "<string>",
    "company": "<string>"
  },
  "onboarding_id": "<string>",
  "asset_id": "<string>",
  "asset_name": "<string>",
  "location": "<string>",
  "country": "<string>",
  "integration_type": "monitoring_only",
  "target_hc_date": "2026-01-01",
  "overall_status": "in_progress",
  "is_transition": false,
  "role": "asset_owner",
  "ems_network": {
    "ems_server_ip": "",
    "ebx_box_1_client_ip": "",
    "ebx_box_2_client_ip": "",
    "subnet_mask": "",
    "gateway": "",
    "ems_mode": "client",
    "ems_port": 0,
    "ems_unit_id": 0,
    "ems_byte_word_order": "ABCD",
    "ems_poll_interval_ms": 0,
    "ems_timeout_ms": 0,
    "ems_batching": {
      "max_read_registers": 125,
      "max_read_gap_registers": 32,
      "max_write_registers": 123,
      "max_write_gap_registers": 0,
      "fill_write_gaps_from_shadow": false,
      "write_cache_ttl_seconds": 2
    }
  },
  "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,
      "requirement_key": "<string>",
      "review_status": "accepted",
      "reviewed_at": "<string>",
      "reviewed_by_user_name": "<string>",
      "review_note": "<string>"
    }
  ],
  "branding": {
    "display_name": "<string>",
    "primary_color": "<string>",
    "support_email": "<string>",
    "logo_url": "<string>"
  },
  "updated_at": "<string>",
  "shared_notes": [
    {
      "id": "<string>",
      "body": "<string>",
      "visibility": "internal",
      "author_user_name": "<string>",
      "created_at": "<string>"
    }
  ],
  "shared_open_points": [
    {
      "id": "<string>",
      "title": "<string>",
      "status": "open",
      "owner": "asset_owner",
      "category": "grid_dso",
      "due_date": "2026-01-01",
      "decision": "<string>",
      "comments": [
        {
          "id": "<string>",
          "author_user_name": "<string>",
          "author_org_name": "<string>",
          "author_side": "ebx",
          "created_at": "<string>",
          "body": "<string>"
        }
      ],
      "created_at": "<string>",
      "updated_at": "<string>",
      "resolved_at": "<string>"
    }
  ]
}
Can raise
  • 400malformed request
  • 404unknown or not visible
  • 409state conflict
  • 422validation failed
  • 429rate limited
ALL CODES →
PATCH/v1/onboarding-tasks/{onboarding_id}/ems-information

Save or submit early EMS information

Required scopes: none (any authenticated caller)

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

network
object
provider_company
string
ems_supports_modbus_tcp
booleandefault false
pq_submission_targeted
boolean
ems_technical_contact
object
submit
booleandefault false
Example value
curl -X PATCH "https://api.ebx.energy/v1/onboarding-tasks/00000000-0000-0000-0000-000000000000/ems-information" \
  -H "Authorization: Bearer $EBX_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"network":{"ems_server_ip":"","ebx_box_1_client_ip":"","ebx_box_2_client_ip":"","subnet_mask":"","gateway":"","ems_mode":"client","ems_port":0,"ems_unit_id":0,"ems_byte_word_order":"ABCD","ems_poll_interval_ms":0,"ems_timeout_ms":0,"ems_batching":{"max_read_registers":125,"max_read_gap_registers":32,"max_write_registers":123,"max_write_gap_registers":0,"fill_write_gaps_from_shadow":false,"write_cache_ttl_seconds":2}},"provider_company":"<string>","ems_supports_modbus_tcp":false,"pq_submission_targeted":false,"ems_technical_contact":{"name":"<string>","email":"name@example.com","phone":"<string>"},"submit":false}'
Example response200
{
  "archived_at": "<string>",
  "project_settings": {
    "deadline_overrides": "<string>",
    "contacts": {
      "asset_owner": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      },
      "epc": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      },
      "ems_provider": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      },
      "ebx": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      },
      "partner": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      }
    },
    "co_location": "<string>",
    "start": "2026-01-01",
    "original": "2026-01-01",
    "estimatedOverride": "2026-01-01"
  },
  "created_at": "<string>",
  "project_schedule": [
    {
      "definition_id": "mon_rfi",
      "status": "pending",
      "deadline": "2026-01-01",
      "passed_at": "<string>"
    }
  ],
  "hardware_requested_at": "<string>",
  "hardware_submitted_at": "<string>",
  "general_submitted_at": "<string>",
  "ems_submitted_at": "<string>",
  "hardware_ready": false,
  "ems_information": {
    "network": {
      "ems_server_ip": "",
      "ebx_box_1_client_ip": "",
      "ebx_box_2_client_ip": "",
      "subnet_mask": "",
      "gateway": "",
      "ems_mode": "client",
      "ems_port": 0,
      "ems_unit_id": 0,
      "ems_byte_word_order": "ABCD",
      "ems_poll_interval_ms": 0,
      "ems_timeout_ms": 0,
      "ems_batching": {
        "max_read_registers": 125,
        "max_read_gap_registers": 32,
        "max_write_registers": 123,
        "max_write_gap_registers": 0,
        "fill_write_gaps_from_shadow": false,
        "write_cache_ttl_seconds": 2
      }
    },
    "provider_company": "<string>",
    "ems_supports_modbus_tcp": false,
    "pq_submission_targeted": false,
    "ems_technical_contact": {
      "name": "<string>",
      "email": "name@example.com",
      "phone": "<string>"
    }
  },
  "responsible_contact": {
    "name": "<string>",
    "email": "<string>",
    "phone": "<string>",
    "company": "<string>"
  },
  "support_contact": {
    "name": "<string>",
    "email": "<string>",
    "phone": "<string>",
    "company": "<string>"
  },
  "onboarding_id": "<string>",
  "asset_id": "<string>",
  "asset_name": "<string>",
  "location": "<string>",
  "country": "<string>",
  "integration_type": "monitoring_only",
  "target_hc_date": "2026-01-01",
  "overall_status": "in_progress",
  "is_transition": false,
  "role": "asset_owner",
  "ems_network": {
    "ems_server_ip": "",
    "ebx_box_1_client_ip": "",
    "ebx_box_2_client_ip": "",
    "subnet_mask": "",
    "gateway": "",
    "ems_mode": "client",
    "ems_port": 0,
    "ems_unit_id": 0,
    "ems_byte_word_order": "ABCD",
    "ems_poll_interval_ms": 0,
    "ems_timeout_ms": 0,
    "ems_batching": {
      "max_read_registers": 125,
      "max_read_gap_registers": 32,
      "max_write_registers": 123,
      "max_write_gap_registers": 0,
      "fill_write_gaps_from_shadow": false,
      "write_cache_ttl_seconds": 2
    }
  },
  "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,
      "requirement_key": "<string>",
      "review_status": "accepted",
      "reviewed_at": "<string>",
      "reviewed_by_user_name": "<string>",
      "review_note": "<string>"
    }
  ],
  "branding": {
    "display_name": "<string>",
    "primary_color": "<string>",
    "support_email": "<string>",
    "logo_url": "<string>"
  },
  "updated_at": "<string>",
  "shared_notes": [
    {
      "id": "<string>",
      "body": "<string>",
      "visibility": "internal",
      "author_user_name": "<string>",
      "created_at": "<string>"
    }
  ],
  "shared_open_points": [
    {
      "id": "<string>",
      "title": "<string>",
      "status": "open",
      "owner": "asset_owner",
      "category": "grid_dso",
      "due_date": "2026-01-01",
      "decision": "<string>",
      "comments": [
        {
          "id": "<string>",
          "author_user_name": "<string>",
          "author_org_name": "<string>",
          "author_side": "ebx",
          "created_at": "<string>",
          "body": "<string>"
        }
      ],
      "created_at": "<string>",
      "updated_at": "<string>",
      "resolved_at": "<string>"
    }
  ]
}
Can raise
  • 400malformed request
  • 404unknown or not visible
  • 409state conflict
  • 422validation failed
  • 429rate limited
ALL CODES →
PATCH/v1/onboarding-tasks/{onboarding_id}/ems-network

Update EMS connection fields

Required scopes: none (any authenticated caller)

Merges only supplied Modbus network fields into the canonical RfI, authorized by the EMS task rather than asset-owner access.

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

ems_server_ip
stringdefault EMS Modbus server IPv4 address; an optional redundant controller is stored as a second address separated by a semicolon.
ebx_box_1_client_ip
stringdefault
ebx_box_2_client_ip
stringdefault
subnet_mask
stringdefault
gateway
stringdefault
ems_mode
enumclientserverPulse's terms: client = the boxes poll the EMS (the EMS is the Modbus server), server = the EMS connects to the boxes.
ems_port
integer
ems_unit_id
integer
ems_byte_word_order
enumABCDCDABBADCDCBAEMS-side byte/word order; the EBX side always uses ABCD.
ems_poll_interval_ms
integer
ems_timeout_ms
integer
ems_batching
object
Example value
curl -X PATCH "https://api.ebx.energy/v1/onboarding-tasks/00000000-0000-0000-0000-000000000000/ems-network" \
  -H "Authorization: Bearer $EBX_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"ems_server_ip":"","ebx_box_1_client_ip":"","ebx_box_2_client_ip":"","subnet_mask":"","gateway":"","ems_mode":"client","ems_port":0,"ems_unit_id":0,"ems_byte_word_order":"ABCD","ems_poll_interval_ms":0,"ems_timeout_ms":0,"ems_batching":{"max_read_registers":125,"max_read_gap_registers":32,"max_write_registers":123,"max_write_gap_registers":0,"fill_write_gaps_from_shadow":false,"write_cache_ttl_seconds":2}}'
Example response200
{
  "archived_at": "<string>",
  "project_settings": {
    "deadline_overrides": "<string>",
    "contacts": {
      "asset_owner": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      },
      "epc": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      },
      "ems_provider": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      },
      "ebx": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      },
      "partner": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      }
    },
    "co_location": "<string>",
    "start": "2026-01-01",
    "original": "2026-01-01",
    "estimatedOverride": "2026-01-01"
  },
  "created_at": "<string>",
  "project_schedule": [
    {
      "definition_id": "mon_rfi",
      "status": "pending",
      "deadline": "2026-01-01",
      "passed_at": "<string>"
    }
  ],
  "hardware_requested_at": "<string>",
  "hardware_submitted_at": "<string>",
  "general_submitted_at": "<string>",
  "ems_submitted_at": "<string>",
  "hardware_ready": false,
  "ems_information": {
    "network": {
      "ems_server_ip": "",
      "ebx_box_1_client_ip": "",
      "ebx_box_2_client_ip": "",
      "subnet_mask": "",
      "gateway": "",
      "ems_mode": "client",
      "ems_port": 0,
      "ems_unit_id": 0,
      "ems_byte_word_order": "ABCD",
      "ems_poll_interval_ms": 0,
      "ems_timeout_ms": 0,
      "ems_batching": {
        "max_read_registers": 125,
        "max_read_gap_registers": 32,
        "max_write_registers": 123,
        "max_write_gap_registers": 0,
        "fill_write_gaps_from_shadow": false,
        "write_cache_ttl_seconds": 2
      }
    },
    "provider_company": "<string>",
    "ems_supports_modbus_tcp": false,
    "pq_submission_targeted": false,
    "ems_technical_contact": {
      "name": "<string>",
      "email": "name@example.com",
      "phone": "<string>"
    }
  },
  "responsible_contact": {
    "name": "<string>",
    "email": "<string>",
    "phone": "<string>",
    "company": "<string>"
  },
  "support_contact": {
    "name": "<string>",
    "email": "<string>",
    "phone": "<string>",
    "company": "<string>"
  },
  "onboarding_id": "<string>",
  "asset_id": "<string>",
  "asset_name": "<string>",
  "location": "<string>",
  "country": "<string>",
  "integration_type": "monitoring_only",
  "target_hc_date": "2026-01-01",
  "overall_status": "in_progress",
  "is_transition": false,
  "role": "asset_owner",
  "ems_network": {
    "ems_server_ip": "",
    "ebx_box_1_client_ip": "",
    "ebx_box_2_client_ip": "",
    "subnet_mask": "",
    "gateway": "",
    "ems_mode": "client",
    "ems_port": 0,
    "ems_unit_id": 0,
    "ems_byte_word_order": "ABCD",
    "ems_poll_interval_ms": 0,
    "ems_timeout_ms": 0,
    "ems_batching": {
      "max_read_registers": 125,
      "max_read_gap_registers": 32,
      "max_write_registers": 123,
      "max_write_gap_registers": 0,
      "fill_write_gaps_from_shadow": false,
      "write_cache_ttl_seconds": 2
    }
  },
  "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,
      "requirement_key": "<string>",
      "review_status": "accepted",
      "reviewed_at": "<string>",
      "reviewed_by_user_name": "<string>",
      "review_note": "<string>"
    }
  ],
  "branding": {
    "display_name": "<string>",
    "primary_color": "<string>",
    "support_email": "<string>",
    "logo_url": "<string>"
  },
  "updated_at": "<string>",
  "shared_notes": [
    {
      "id": "<string>",
      "body": "<string>",
      "visibility": "internal",
      "author_user_name": "<string>",
      "created_at": "<string>"
    }
  ],
  "shared_open_points": [
    {
      "id": "<string>",
      "title": "<string>",
      "status": "open",
      "owner": "asset_owner",
      "category": "grid_dso",
      "due_date": "2026-01-01",
      "decision": "<string>",
      "comments": [
        {
          "id": "<string>",
          "author_user_name": "<string>",
          "author_org_name": "<string>",
          "author_side": "ebx",
          "created_at": "<string>",
          "body": "<string>"
        }
      ],
      "created_at": "<string>",
      "updated_at": "<string>",
      "resolved_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

Required scopes: none (any authenticated caller)

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

Required scopes: none (any authenticated caller)

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

rfi_submission
enumdefault generalhardwaregeneral
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 '{"rfi_submission":"hardware","note":"<string>","hardware":{"package_received_confirmed":false,"installation_confirmed":false,"notes":"<string>"}}'
Example response200
{
  "archived_at": "<string>",
  "project_settings": {
    "deadline_overrides": "<string>",
    "contacts": {
      "asset_owner": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      },
      "epc": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      },
      "ems_provider": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      },
      "ebx": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      },
      "partner": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      }
    },
    "co_location": "<string>",
    "start": "2026-01-01",
    "original": "2026-01-01",
    "estimatedOverride": "2026-01-01"
  },
  "created_at": "<string>",
  "project_schedule": [
    {
      "definition_id": "mon_rfi",
      "status": "pending",
      "deadline": "2026-01-01",
      "passed_at": "<string>"
    }
  ],
  "hardware_requested_at": "<string>",
  "hardware_submitted_at": "<string>",
  "general_submitted_at": "<string>",
  "ems_submitted_at": "<string>",
  "hardware_ready": false,
  "ems_information": {
    "network": {
      "ems_server_ip": "",
      "ebx_box_1_client_ip": "",
      "ebx_box_2_client_ip": "",
      "subnet_mask": "",
      "gateway": "",
      "ems_mode": "client",
      "ems_port": 0,
      "ems_unit_id": 0,
      "ems_byte_word_order": "ABCD",
      "ems_poll_interval_ms": 0,
      "ems_timeout_ms": 0,
      "ems_batching": {
        "max_read_registers": 125,
        "max_read_gap_registers": 32,
        "max_write_registers": 123,
        "max_write_gap_registers": 0,
        "fill_write_gaps_from_shadow": false,
        "write_cache_ttl_seconds": 2
      }
    },
    "provider_company": "<string>",
    "ems_supports_modbus_tcp": false,
    "pq_submission_targeted": false,
    "ems_technical_contact": {
      "name": "<string>",
      "email": "name@example.com",
      "phone": "<string>"
    }
  },
  "responsible_contact": {
    "name": "<string>",
    "email": "<string>",
    "phone": "<string>",
    "company": "<string>"
  },
  "support_contact": {
    "name": "<string>",
    "email": "<string>",
    "phone": "<string>",
    "company": "<string>"
  },
  "onboarding_id": "<string>",
  "asset_id": "<string>",
  "asset_name": "<string>",
  "location": "<string>",
  "country": "<string>",
  "integration_type": "monitoring_only",
  "target_hc_date": "2026-01-01",
  "overall_status": "in_progress",
  "is_transition": false,
  "role": "asset_owner",
  "ems_network": {
    "ems_server_ip": "",
    "ebx_box_1_client_ip": "",
    "ebx_box_2_client_ip": "",
    "subnet_mask": "",
    "gateway": "",
    "ems_mode": "client",
    "ems_port": 0,
    "ems_unit_id": 0,
    "ems_byte_word_order": "ABCD",
    "ems_poll_interval_ms": 0,
    "ems_timeout_ms": 0,
    "ems_batching": {
      "max_read_registers": 125,
      "max_read_gap_registers": 32,
      "max_write_registers": 123,
      "max_write_gap_registers": 0,
      "fill_write_gaps_from_shadow": false,
      "write_cache_ttl_seconds": 2
    }
  },
  "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,
      "requirement_key": "<string>",
      "review_status": "accepted",
      "reviewed_at": "<string>",
      "reviewed_by_user_name": "<string>",
      "review_note": "<string>"
    }
  ],
  "branding": {
    "display_name": "<string>",
    "primary_color": "<string>",
    "support_email": "<string>",
    "logo_url": "<string>"
  },
  "updated_at": "<string>",
  "shared_notes": [
    {
      "id": "<string>",
      "body": "<string>",
      "visibility": "internal",
      "author_user_name": "<string>",
      "created_at": "<string>"
    }
  ],
  "shared_open_points": [
    {
      "id": "<string>",
      "title": "<string>",
      "status": "open",
      "owner": "asset_owner",
      "category": "grid_dso",
      "due_date": "2026-01-01",
      "decision": "<string>",
      "comments": [
        {
          "id": "<string>",
          "author_user_name": "<string>",
          "author_org_name": "<string>",
          "author_side": "ebx",
          "created_at": "<string>",
          "body": "<string>"
        }
      ],
      "created_at": "<string>",
      "updated_at": "<string>",
      "resolved_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

Required scopes: none (any authenticated caller)

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":{"planned_cod":"2026-01-01","partners":"<string>","network_revision":0,"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":"","subnet_mask":"","gateway":"","ems_mode":"client","ems_port":0,"ems_unit_id":0,"ems_byte_word_order":"ABCD","ems_poll_interval_ms":0,"ems_timeout_ms":0,"ems_batching":{"max_read_registers":125,"max_read_gap_registers":32,"max_write_registers":123,"max_write_gap_registers":0,"fill_write_gaps_from_shadow":false,"write_cache_ttl_seconds":2}},"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_input_mode":"owner","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_selections":"<string>","pq_documents":"<string>","notes":"<string>"},"field_meta":"<string>"}}'
Example response200
{
  "archived_at": "<string>",
  "project_settings": {
    "deadline_overrides": "<string>",
    "contacts": {
      "asset_owner": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      },
      "epc": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      },
      "ems_provider": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      },
      "ebx": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      },
      "partner": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      }
    },
    "co_location": "<string>",
    "start": "2026-01-01",
    "original": "2026-01-01",
    "estimatedOverride": "2026-01-01"
  },
  "created_at": "<string>",
  "project_schedule": [
    {
      "definition_id": "mon_rfi",
      "status": "pending",
      "deadline": "2026-01-01",
      "passed_at": "<string>"
    }
  ],
  "hardware_requested_at": "<string>",
  "hardware_submitted_at": "<string>",
  "general_submitted_at": "<string>",
  "ems_submitted_at": "<string>",
  "hardware_ready": false,
  "ems_information": {
    "network": {
      "ems_server_ip": "",
      "ebx_box_1_client_ip": "",
      "ebx_box_2_client_ip": "",
      "subnet_mask": "",
      "gateway": "",
      "ems_mode": "client",
      "ems_port": 0,
      "ems_unit_id": 0,
      "ems_byte_word_order": "ABCD",
      "ems_poll_interval_ms": 0,
      "ems_timeout_ms": 0,
      "ems_batching": {
        "max_read_registers": 125,
        "max_read_gap_registers": 32,
        "max_write_registers": 123,
        "max_write_gap_registers": 0,
        "fill_write_gaps_from_shadow": false,
        "write_cache_ttl_seconds": 2
      }
    },
    "provider_company": "<string>",
    "ems_supports_modbus_tcp": false,
    "pq_submission_targeted": false,
    "ems_technical_contact": {
      "name": "<string>",
      "email": "name@example.com",
      "phone": "<string>"
    }
  },
  "responsible_contact": {
    "name": "<string>",
    "email": "<string>",
    "phone": "<string>",
    "company": "<string>"
  },
  "support_contact": {
    "name": "<string>",
    "email": "<string>",
    "phone": "<string>",
    "company": "<string>"
  },
  "onboarding_id": "<string>",
  "asset_id": "<string>",
  "asset_name": "<string>",
  "location": "<string>",
  "country": "<string>",
  "integration_type": "monitoring_only",
  "target_hc_date": "2026-01-01",
  "overall_status": "in_progress",
  "is_transition": false,
  "role": "asset_owner",
  "ems_network": {
    "ems_server_ip": "",
    "ebx_box_1_client_ip": "",
    "ebx_box_2_client_ip": "",
    "subnet_mask": "",
    "gateway": "",
    "ems_mode": "client",
    "ems_port": 0,
    "ems_unit_id": 0,
    "ems_byte_word_order": "ABCD",
    "ems_poll_interval_ms": 0,
    "ems_timeout_ms": 0,
    "ems_batching": {
      "max_read_registers": 125,
      "max_read_gap_registers": 32,
      "max_write_registers": 123,
      "max_write_gap_registers": 0,
      "fill_write_gaps_from_shadow": false,
      "write_cache_ttl_seconds": 2
    }
  },
  "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,
      "requirement_key": "<string>",
      "review_status": "accepted",
      "reviewed_at": "<string>",
      "reviewed_by_user_name": "<string>",
      "review_note": "<string>"
    }
  ],
  "branding": {
    "display_name": "<string>",
    "primary_color": "<string>",
    "support_email": "<string>",
    "logo_url": "<string>"
  },
  "updated_at": "<string>",
  "shared_notes": [
    {
      "id": "<string>",
      "body": "<string>",
      "visibility": "internal",
      "author_user_name": "<string>",
      "created_at": "<string>"
    }
  ],
  "shared_open_points": [
    {
      "id": "<string>",
      "title": "<string>",
      "status": "open",
      "owner": "asset_owner",
      "category": "grid_dso",
      "due_date": "2026-01-01",
      "decision": "<string>",
      "comments": [
        {
          "id": "<string>",
          "author_user_name": "<string>",
          "author_org_name": "<string>",
          "author_side": "ebx",
          "created_at": "<string>",
          "body": "<string>"
        }
      ],
      "created_at": "<string>",
      "updated_at": "<string>",
      "resolved_at": "<string>"
    }
  ]
}
Can raise
  • 400malformed request
  • 404unknown or not visible
  • 409state conflict
  • 422validation failed
  • 429rate limited
ALL CODES →
GET/v1/onboarding-tasks/{onboarding_id}/rfi-catalogues/{catalogue}

Read cached PQ choices for RfI

Required scopes: none (any authenticated caller)

Path parameters

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

Query parameters

query
stringdefault
dso
stringdefault DSO selection id; marks its balancing areas as suggested
tso
stringdefault

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/rfi-catalogues/tsos" \
  -H "Authorization: Bearer $EBX_TOKEN"
Example response200
{}
Can raise
  • 404unknown or not visible
  • 422validation failed
  • 429rate limited
ALL CODES →
POST/v1/onboarding-tasks/{onboarding_id}/rfi/fields/{field_key}/comments

Comment on an asset-owner RfI field

Required scopes: none (any authenticated caller)

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

Required scopes: none (any authenticated caller)

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 →
POST/v1/onboarding-tasks/{onboarding_id}/shared-open-points/{point_id}/comments

Reply on an open point EBX shared with the asset owner

Required scopes: none (any authenticated caller)

Appends a reply from the asset-owner contact to an open point EBX shared with them. Only open, shared points take replies: a point that is not shared answers 404, a closed one 409. Other task roles cannot reply.

Path parameters

onboarding_idREQUIRED
string<uuid>Stable onboarding identifier returned by the task list.
point_idREQUIRED
stringShared open-point identifier from the asset-owner 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/shared-open-points/op-77/comments" \
  -H "Authorization: Bearer $EBX_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"body":"<string>"}'
Example response200
{
  "id": "<string>",
  "title": "<string>",
  "status": "open",
  "owner": "asset_owner",
  "category": "grid_dso",
  "due_date": "2026-01-01",
  "decision": "<string>",
  "comments": [
    {
      "id": "<string>",
      "author_user_name": "<string>",
      "author_org_name": "<string>",
      "author_side": "ebx",
      "created_at": "<string>",
      "body": "<string>"
    }
  ],
  "created_at": "<string>",
  "updated_at": "<string>",
  "resolved_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

Required scopes: 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": [
    {
      "archived_at": "<string>",
      "project_settings": {
        "deadline_overrides": "<string>",
        "contacts": {
          "asset_owner": {
            "name": "<string>",
            "email": "<string>",
            "phone": "<string>",
            "company": "<string>",
            "notes": "<string>"
          },
          "epc": {
            "name": "<string>",
            "email": "<string>",
            "phone": "<string>",
            "company": "<string>",
            "notes": "<string>"
          },
          "ems_provider": {
            "name": "<string>",
            "email": "<string>",
            "phone": "<string>",
            "company": "<string>",
            "notes": "<string>"
          },
          "ebx": {
            "name": "<string>",
            "email": "<string>",
            "phone": "<string>",
            "company": "<string>",
            "notes": "<string>"
          },
          "partner": {
            "name": "<string>",
            "email": "<string>",
            "phone": "<string>",
            "company": "<string>",
            "notes": "<string>"
          }
        },
        "co_location": "<string>",
        "start": "2026-01-01",
        "original": "2026-01-01",
        "estimatedOverride": "2026-01-01"
      },
      "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,
      "is_transition": 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,
          "requirement_key": "<string>",
          "review_status": "accepted",
          "reviewed_at": "<string>",
          "reviewed_by_user_name": "<string>",
          "review_note": "<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>",
            "owner": "asset_owner",
            "due_date": "2026-01-01",
            "category": "grid_dso",
            "decision": "<string>",
            "resolved_by_user_name": "<string>",
            "visibility": "internal"
          }
        ],
        "applied_templates": [
          "<string>"
        ]
      },
      "notes": [
        {
          "id": "<string>",
          "body": "<string>",
          "visibility": "internal",
          "author_user_name": "<string>",
          "created_at": "<string>"
        }
      ],
      "shared_open_points": [
        {
          "id": "<string>",
          "title": "<string>",
          "status": "open",
          "owner": "asset_owner",
          "category": "grid_dso",
          "due_date": "2026-01-01",
          "decision": "<string>",
          "comments": [
            {
              "id": "<string>",
              "author_user_name": "<string>",
              "author_org_name": "<string>",
              "author_side": "ebx",
              "created_at": "<string>",
              "body": "<string>"
            }
          ],
          "created_at": "<string>",
          "updated_at": "<string>",
          "resolved_at": "<string>"
        }
      ]
    }
  ]
}
Can raise
  • 401no valid token
  • 403scope missing
  • 422validation failed
  • 429rate limited
ALL CODES →
POST/v1/onboardings

Create an onboarding workflow

onboarding.write

Required scopes: 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_date
string<date>
target_cod_date
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.
is_transition
booleandefault falseEBX only. Onboard an asset that is already live elsewhere (Transition Project) to produce its PQ application: links the existing asset_id (required, full_control only), skips the hardware, software and monitoring-test gates, and sends no invitations.
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","target_cod_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,"is_transition":false}'
Example response201
{
  "archived_at": "<string>",
  "project_settings": {
    "deadline_overrides": "<string>",
    "contacts": {
      "asset_owner": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      },
      "epc": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      },
      "ems_provider": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      },
      "ebx": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      },
      "partner": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      }
    },
    "co_location": "<string>",
    "start": "2026-01-01",
    "original": "2026-01-01",
    "estimatedOverride": "2026-01-01"
  },
  "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,
  "is_transition": 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,
      "requirement_key": "<string>",
      "review_status": "accepted",
      "reviewed_at": "<string>",
      "reviewed_by_user_name": "<string>",
      "review_note": "<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>",
        "owner": "asset_owner",
        "due_date": "2026-01-01",
        "category": "grid_dso",
        "decision": "<string>",
        "resolved_by_user_name": "<string>",
        "visibility": "internal"
      }
    ],
    "applied_templates": [
      "<string>"
    ]
  },
  "notes": [
    {
      "id": "<string>",
      "body": "<string>",
      "visibility": "internal",
      "author_user_name": "<string>",
      "created_at": "<string>"
    }
  ],
  "shared_open_points": [
    {
      "id": "<string>",
      "title": "<string>",
      "status": "open",
      "owner": "asset_owner",
      "category": "grid_dso",
      "due_date": "2026-01-01",
      "decision": "<string>",
      "comments": [
        {
          "id": "<string>",
          "author_user_name": "<string>",
          "author_org_name": "<string>",
          "author_side": "ebx",
          "created_at": "<string>",
          "body": "<string>"
        }
      ],
      "created_at": "<string>",
      "updated_at": "<string>",
      "resolved_at": "<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

Required scopes: onboarding.read

Returns the complete onboarding state for a visible onboarding, including the persisted process definition, current gate states, partner assignments, document metadata, 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
{
  "archived_at": "<string>",
  "project_settings": {
    "deadline_overrides": "<string>",
    "contacts": {
      "asset_owner": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      },
      "epc": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      },
      "ems_provider": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      },
      "ebx": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      },
      "partner": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      }
    },
    "co_location": "<string>",
    "start": "2026-01-01",
    "original": "2026-01-01",
    "estimatedOverride": "2026-01-01"
  },
  "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,
  "is_transition": 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,
      "requirement_key": "<string>",
      "review_status": "accepted",
      "reviewed_at": "<string>",
      "reviewed_by_user_name": "<string>",
      "review_note": "<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>",
        "owner": "asset_owner",
        "due_date": "2026-01-01",
        "category": "grid_dso",
        "decision": "<string>",
        "resolved_by_user_name": "<string>",
        "visibility": "internal"
      }
    ],
    "applied_templates": [
      "<string>"
    ]
  },
  "notes": [
    {
      "id": "<string>",
      "body": "<string>",
      "visibility": "internal",
      "author_user_name": "<string>",
      "created_at": "<string>"
    }
  ],
  "shared_open_points": [
    {
      "id": "<string>",
      "title": "<string>",
      "status": "open",
      "owner": "asset_owner",
      "category": "grid_dso",
      "due_date": "2026-01-01",
      "decision": "<string>",
      "comments": [
        {
          "id": "<string>",
          "author_user_name": "<string>",
          "author_org_name": "<string>",
          "author_side": "ebx",
          "created_at": "<string>",
          "body": "<string>"
        }
      ],
      "created_at": "<string>",
      "updated_at": "<string>",
      "resolved_at": "<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

Required scopes: 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

original_cod_override_reason
string
asset_name
string
location
string
country
string
project_settings
object
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 '{"original_cod_override_reason":"<string>","asset_name":"<string>","location":"<string>","country":"<string>","project_settings":{"deadline_overrides":"<string>","contacts":{"asset_owner":{"name":"<string>","email":"<string>","phone":"<string>","company":"<string>","notes":"<string>"},"epc":{"name":"<string>","email":"<string>","phone":"<string>","company":"<string>","notes":"<string>"},"ems_provider":{"name":"<string>","email":"<string>","phone":"<string>","company":"<string>","notes":"<string>"},"ebx":{"name":"<string>","email":"<string>","phone":"<string>","company":"<string>","notes":"<string>"},"partner":{"name":"<string>","email":"<string>","phone":"<string>","company":"<string>","notes":"<string>"}},"co_location":"<string>","start":"2026-01-01","original":"2026-01-01","estimatedOverride":"2026-01-01"},"target_hc_date":"2026-01-01","asset_id":"<string>"}'
Example response200
{
  "archived_at": "<string>",
  "project_settings": {
    "deadline_overrides": "<string>",
    "contacts": {
      "asset_owner": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      },
      "epc": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      },
      "ems_provider": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      },
      "ebx": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      },
      "partner": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      }
    },
    "co_location": "<string>",
    "start": "2026-01-01",
    "original": "2026-01-01",
    "estimatedOverride": "2026-01-01"
  },
  "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,
  "is_transition": 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,
      "requirement_key": "<string>",
      "review_status": "accepted",
      "reviewed_at": "<string>",
      "reviewed_by_user_name": "<string>",
      "review_note": "<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>",
        "owner": "asset_owner",
        "due_date": "2026-01-01",
        "category": "grid_dso",
        "decision": "<string>",
        "resolved_by_user_name": "<string>",
        "visibility": "internal"
      }
    ],
    "applied_templates": [
      "<string>"
    ]
  },
  "notes": [
    {
      "id": "<string>",
      "body": "<string>",
      "visibility": "internal",
      "author_user_name": "<string>",
      "created_at": "<string>"
    }
  ],
  "shared_open_points": [
    {
      "id": "<string>",
      "title": "<string>",
      "status": "open",
      "owner": "asset_owner",
      "category": "grid_dso",
      "due_date": "2026-01-01",
      "decision": "<string>",
      "comments": [
        {
          "id": "<string>",
          "author_user_name": "<string>",
          "author_org_name": "<string>",
          "author_side": "ebx",
          "created_at": "<string>",
          "body": "<string>"
        }
      ],
      "created_at": "<string>",
      "updated_at": "<string>",
      "resolved_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}/abort

Abort an onboarding

onboarding.write

Required scopes: onboarding.write

EBX only. Stops the onboarding for good and records the reason (and optionally its category) in the activity log. Refused while a Betriebsfahrt session drives the asset or a PQ request is in flight, and for an onboarding that is already completed or aborted.

Path parameters

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

Request body · required

reasonREQUIRED
string
category
enumgrid_dsohardware_siteems_data_pointscommercial_contractpq_tsoother
Example value
curl -X POST "https://api.ebx.energy/v1/onboardings/00000000-0000-0000-0000-000000000000/abort" \
  -H "Authorization: Bearer $EBX_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"reason":"<string>","category":"grid_dso"}'
Example response200
{
  "archived_at": "<string>",
  "project_settings": {
    "deadline_overrides": "<string>",
    "contacts": {
      "asset_owner": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      },
      "epc": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      },
      "ems_provider": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      },
      "ebx": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      },
      "partner": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      }
    },
    "co_location": "<string>",
    "start": "2026-01-01",
    "original": "2026-01-01",
    "estimatedOverride": "2026-01-01"
  },
  "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,
  "is_transition": 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,
      "requirement_key": "<string>",
      "review_status": "accepted",
      "reviewed_at": "<string>",
      "reviewed_by_user_name": "<string>",
      "review_note": "<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>",
        "owner": "asset_owner",
        "due_date": "2026-01-01",
        "category": "grid_dso",
        "decision": "<string>",
        "resolved_by_user_name": "<string>",
        "visibility": "internal"
      }
    ],
    "applied_templates": [
      "<string>"
    ]
  },
  "notes": [
    {
      "id": "<string>",
      "body": "<string>",
      "visibility": "internal",
      "author_user_name": "<string>",
      "created_at": "<string>"
    }
  ],
  "shared_open_points": [
    {
      "id": "<string>",
      "title": "<string>",
      "status": "open",
      "owner": "asset_owner",
      "category": "grid_dso",
      "due_date": "2026-01-01",
      "decision": "<string>",
      "comments": [
        {
          "id": "<string>",
          "author_user_name": "<string>",
          "author_org_name": "<string>",
          "author_side": "ebx",
          "created_at": "<string>",
          "body": "<string>"
        }
      ],
      "created_at": "<string>",
      "updated_at": "<string>",
      "resolved_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}/activity

List onboarding audit history

onboarding.read

Required scopes: onboarding.read

Returns audit entries newest first, independently of onboarding state. EBX admins can read any onboarding; other callers can read only onboardings owned by their organizations and cannot see internal tracker events. Follow next_cursor until null to retrieve the complete history. Audit entries are generated automatically by onboarding actions and cannot be edited through this endpoint.

Path parameters

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

Query parameters

limit
integerdefault 100
cursor
string
Example value
curl "https://api.ebx.energy/v1/onboardings/00000000-0000-0000-0000-000000000000/activity" \
  -H "Authorization: Bearer $EBX_TOKEN"
Example response200
{
  "items": [
    {
      "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>",
      "changes": [
        {
          "field": "<string>",
          "before": "<string>",
          "after": "<string>"
        }
      ],
      "changes_total": 0,
      "changed_sections": [
        "<string>"
      ],
      "acting_as_role": "<string>"
    }
  ],
  "next_cursor": "<string>"
}
Can raise
  • 401no valid token
  • 403scope missing
  • 404unknown or not visible
  • 422validation failed
  • 429rate limited
ALL CODES →
POST/v1/onboardings/{onboarding_id}/archive

Archive Onboarding

onboarding.write

Required scopes: onboarding.write

Path parameters

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

Request body · required

asset_nameREQUIRED
string
confirmedREQUIRED
boolean
Example value
curl -X POST "https://api.ebx.energy/v1/onboardings/00000000-0000-0000-0000-000000000000/archive" \
  -H "Authorization: Bearer $EBX_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"asset_name":"<string>","confirmed":false}'
Example response200
{
  "archived_at": "<string>",
  "project_settings": {
    "deadline_overrides": "<string>",
    "contacts": {
      "asset_owner": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      },
      "epc": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      },
      "ems_provider": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      },
      "ebx": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      },
      "partner": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      }
    },
    "co_location": "<string>",
    "start": "2026-01-01",
    "original": "2026-01-01",
    "estimatedOverride": "2026-01-01"
  },
  "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,
  "is_transition": 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,
      "requirement_key": "<string>",
      "review_status": "accepted",
      "reviewed_at": "<string>",
      "reviewed_by_user_name": "<string>",
      "review_note": "<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>",
        "owner": "asset_owner",
        "due_date": "2026-01-01",
        "category": "grid_dso",
        "decision": "<string>",
        "resolved_by_user_name": "<string>",
        "visibility": "internal"
      }
    ],
    "applied_templates": [
      "<string>"
    ]
  },
  "notes": [
    {
      "id": "<string>",
      "body": "<string>",
      "visibility": "internal",
      "author_user_name": "<string>",
      "created_at": "<string>"
    }
  ],
  "shared_open_points": [
    {
      "id": "<string>",
      "title": "<string>",
      "status": "open",
      "owner": "asset_owner",
      "category": "grid_dso",
      "due_date": "2026-01-01",
      "decision": "<string>",
      "comments": [
        {
          "id": "<string>",
          "author_user_name": "<string>",
          "author_org_name": "<string>",
          "author_side": "ebx",
          "created_at": "<string>",
          "body": "<string>"
        }
      ],
      "created_at": "<string>",
      "updated_at": "<string>",
      "resolved_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}/asset-owner-contact

Set or edit the asset-owner contact

onboarding.write

Required scopes: 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
{
  "archived_at": "<string>",
  "project_settings": {
    "deadline_overrides": "<string>",
    "contacts": {
      "asset_owner": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      },
      "epc": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      },
      "ems_provider": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      },
      "ebx": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      },
      "partner": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      }
    },
    "co_location": "<string>",
    "start": "2026-01-01",
    "original": "2026-01-01",
    "estimatedOverride": "2026-01-01"
  },
  "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,
  "is_transition": 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,
      "requirement_key": "<string>",
      "review_status": "accepted",
      "reviewed_at": "<string>",
      "reviewed_by_user_name": "<string>",
      "review_note": "<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>",
        "owner": "asset_owner",
        "due_date": "2026-01-01",
        "category": "grid_dso",
        "decision": "<string>",
        "resolved_by_user_name": "<string>",
        "visibility": "internal"
      }
    ],
    "applied_templates": [
      "<string>"
    ]
  },
  "notes": [
    {
      "id": "<string>",
      "body": "<string>",
      "visibility": "internal",
      "author_user_name": "<string>",
      "created_at": "<string>"
    }
  ],
  "shared_open_points": [
    {
      "id": "<string>",
      "title": "<string>",
      "status": "open",
      "owner": "asset_owner",
      "category": "grid_dso",
      "due_date": "2026-01-01",
      "decision": "<string>",
      "comments": [
        {
          "id": "<string>",
          "author_user_name": "<string>",
          "author_org_name": "<string>",
          "author_side": "ebx",
          "created_at": "<string>",
          "body": "<string>"
        }
      ],
      "created_at": "<string>",
      "updated_at": "<string>",
      "resolved_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}/asset-owner/access/revoke

Revoke asset-owner onboarding task access

onboarding.write

Required scopes: onboarding.write

Revokes active magic links, refresh sessions, and onboarding task access 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": {
    "archived_at": "<string>",
    "project_settings": {
      "deadline_overrides": "<string>",
      "contacts": {
        "asset_owner": {
          "name": "<string>",
          "email": "<string>",
          "phone": "<string>",
          "company": "<string>",
          "notes": "<string>"
        },
        "epc": {
          "name": "<string>",
          "email": "<string>",
          "phone": "<string>",
          "company": "<string>",
          "notes": "<string>"
        },
        "ems_provider": {
          "name": "<string>",
          "email": "<string>",
          "phone": "<string>",
          "company": "<string>",
          "notes": "<string>"
        },
        "ebx": {
          "name": "<string>",
          "email": "<string>",
          "phone": "<string>",
          "company": "<string>",
          "notes": "<string>"
        },
        "partner": {
          "name": "<string>",
          "email": "<string>",
          "phone": "<string>",
          "company": "<string>",
          "notes": "<string>"
        }
      },
      "co_location": "<string>",
      "start": "2026-01-01",
      "original": "2026-01-01",
      "estimatedOverride": "2026-01-01"
    },
    "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,
    "is_transition": 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,
        "requirement_key": "<string>",
        "review_status": "accepted",
        "reviewed_at": "<string>",
        "reviewed_by_user_name": "<string>",
        "review_note": "<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>",
          "owner": "asset_owner",
          "due_date": "2026-01-01",
          "category": "grid_dso",
          "decision": "<string>",
          "resolved_by_user_name": "<string>",
          "visibility": "internal"
        }
      ],
      "applied_templates": [
        "<string>"
      ]
    },
    "notes": [
      {
        "id": "<string>",
        "body": "<string>",
        "visibility": "internal",
        "author_user_name": "<string>",
        "created_at": "<string>"
      }
    ],
    "shared_open_points": [
      {
        "id": "<string>",
        "title": "<string>",
        "status": "open",
        "owner": "asset_owner",
        "category": "grid_dso",
        "due_date": "2026-01-01",
        "decision": "<string>",
        "comments": [
          {
            "id": "<string>",
            "author_user_name": "<string>",
            "author_org_name": "<string>",
            "author_side": "ebx",
            "created_at": "<string>",
            "body": "<string>"
          }
        ],
        "created_at": "<string>",
        "updated_at": "<string>",
        "resolved_at": "<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

Required scopes: 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": {
    "archived_at": "<string>",
    "project_settings": {
      "deadline_overrides": "<string>",
      "contacts": {
        "asset_owner": {
          "name": "<string>",
          "email": "<string>",
          "phone": "<string>",
          "company": "<string>",
          "notes": "<string>"
        },
        "epc": {
          "name": "<string>",
          "email": "<string>",
          "phone": "<string>",
          "company": "<string>",
          "notes": "<string>"
        },
        "ems_provider": {
          "name": "<string>",
          "email": "<string>",
          "phone": "<string>",
          "company": "<string>",
          "notes": "<string>"
        },
        "ebx": {
          "name": "<string>",
          "email": "<string>",
          "phone": "<string>",
          "company": "<string>",
          "notes": "<string>"
        },
        "partner": {
          "name": "<string>",
          "email": "<string>",
          "phone": "<string>",
          "company": "<string>",
          "notes": "<string>"
        }
      },
      "co_location": "<string>",
      "start": "2026-01-01",
      "original": "2026-01-01",
      "estimatedOverride": "2026-01-01"
    },
    "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,
    "is_transition": 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,
        "requirement_key": "<string>",
        "review_status": "accepted",
        "reviewed_at": "<string>",
        "reviewed_by_user_name": "<string>",
        "review_note": "<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>",
          "owner": "asset_owner",
          "due_date": "2026-01-01",
          "category": "grid_dso",
          "decision": "<string>",
          "resolved_by_user_name": "<string>",
          "visibility": "internal"
        }
      ],
      "applied_templates": [
        "<string>"
      ]
    },
    "notes": [
      {
        "id": "<string>",
        "body": "<string>",
        "visibility": "internal",
        "author_user_name": "<string>",
        "created_at": "<string>"
      }
    ],
    "shared_open_points": [
      {
        "id": "<string>",
        "title": "<string>",
        "status": "open",
        "owner": "asset_owner",
        "category": "grid_dso",
        "due_date": "2026-01-01",
        "decision": "<string>",
        "comments": [
          {
            "id": "<string>",
            "author_user_name": "<string>",
            "author_org_name": "<string>",
            "author_side": "ebx",
            "created_at": "<string>",
            "body": "<string>"
          }
        ],
        "created_at": "<string>",
        "updated_at": "<string>",
        "resolved_at": "<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

Required scopes: 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": {
    "archived_at": "<string>",
    "project_settings": {
      "deadline_overrides": "<string>",
      "contacts": {
        "asset_owner": {
          "name": "<string>",
          "email": "<string>",
          "phone": "<string>",
          "company": "<string>",
          "notes": "<string>"
        },
        "epc": {
          "name": "<string>",
          "email": "<string>",
          "phone": "<string>",
          "company": "<string>",
          "notes": "<string>"
        },
        "ems_provider": {
          "name": "<string>",
          "email": "<string>",
          "phone": "<string>",
          "company": "<string>",
          "notes": "<string>"
        },
        "ebx": {
          "name": "<string>",
          "email": "<string>",
          "phone": "<string>",
          "company": "<string>",
          "notes": "<string>"
        },
        "partner": {
          "name": "<string>",
          "email": "<string>",
          "phone": "<string>",
          "company": "<string>",
          "notes": "<string>"
        }
      },
      "co_location": "<string>",
      "start": "2026-01-01",
      "original": "2026-01-01",
      "estimatedOverride": "2026-01-01"
    },
    "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,
    "is_transition": 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,
        "requirement_key": "<string>",
        "review_status": "accepted",
        "reviewed_at": "<string>",
        "reviewed_by_user_name": "<string>",
        "review_note": "<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>",
          "owner": "asset_owner",
          "due_date": "2026-01-01",
          "category": "grid_dso",
          "decision": "<string>",
          "resolved_by_user_name": "<string>",
          "visibility": "internal"
        }
      ],
      "applied_templates": [
        "<string>"
      ]
    },
    "notes": [
      {
        "id": "<string>",
        "body": "<string>",
        "visibility": "internal",
        "author_user_name": "<string>",
        "created_at": "<string>"
      }
    ],
    "shared_open_points": [
      {
        "id": "<string>",
        "title": "<string>",
        "status": "open",
        "owner": "asset_owner",
        "category": "grid_dso",
        "due_date": "2026-01-01",
        "decision": "<string>",
        "comments": [
          {
            "id": "<string>",
            "author_user_name": "<string>",
            "author_org_name": "<string>",
            "author_side": "ebx",
            "created_at": "<string>",
            "body": "<string>"
          }
        ],
        "created_at": "<string>",
        "updated_at": "<string>",
        "resolved_at": "<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

Required scopes: 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-10-22T20:30:00Z",
  "preconditions": [
    {
      "key": "<string>",
      "label": "<string>",
      "status": "ok",
      "detail": "<string>"
    }
  ],
  "can_create_session": false,
  "dry_run_allowed": 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-10-22T20:30:00Z"
  },
  "session": {
    "id": "<string>",
    "onboarding_id": "<string>",
    "purpose": "onboarding",
    "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>"
      },
      "soc_energy_margin": "0.05",
      "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,
      "stated_products": [
        "<string>"
      ],
      "stated_capacity_mw": "<string>"
    },
    "findings": [
      {
        "code": "<string>",
        "severity": "blocker",
        "message": "<string>"
      }
    ],
    "planned_start": "2026-10-22T20:30:00Z",
    "planned_end": "2026-10-22T20: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-10-22T20:30:00Z",
            "end": "2026-10-22T20:30:00Z",
            "setpoint_mw": "<string>",
            "window_id": "<string>",
            "actual_start": "2026-10-22T20:30:00Z",
            "actual_end": "2026-10-22T20:30:00Z"
          }
        ],
        "status": "pending",
        "follow_checks": [
          {
            "phase_index": 0,
            "checked_at": "2026-10-22T20:30:00Z",
            "expected_mw": "<string>",
            "measured_mw": "<string>",
            "passed": false,
            "detail": "<string>"
          }
        ],
        "proofs": "<string>",
        "workbooks": "<string>",
        "uploads": "<string>",
        "verdicts": "<string>",
        "overrides": [
          {
            "product": "<string>",
            "reason": "<string>",
            "by_user_id": "<string>",
            "by_user_name": "<string>",
            "at": "2026-10-22T20:30:00Z"
          }
        ],
        "error": "<string>",
        "actual_start": "2026-10-22T20:30:00Z",
        "actual_end": "2026-10-22T20:30:00Z"
      }
    ],
    "driver": {
      "request_id": "<string>",
      "run_id": "<string>",
      "status": "<string>",
      "journal_written_at": "2026-10-22T20:30:00Z",
      "tracking_source": "<string>",
      "events": [
        "<string>"
      ]
    },
    "progress": {
      "current_run_index": 0,
      "current_phase_index": 0,
      "confidence": "confirmed",
      "remaining_seconds": 0
    },
    "actual_start": "2026-10-22T20:30:00Z",
    "actual_end": "2026-10-22T20:30:00Z",
    "confirmed_by_user_name": "<string>",
    "manual_zero_offered": false,
    "manual_action_required": "<string>",
    "handoff_at": "2026-10-22T20:30:00Z",
    "alarms": [
      {
        "rule_id": "TELEMETRY-001",
        "severity": "INFO",
        "message": "<string>",
        "opened_at": "2026-10-22T20:30:00Z",
        "resolved_at": "2026-10-22T20:30:00Z"
      }
    ],
    "state_of_charge": {
      "key": "<string>",
      "label": "<string>",
      "status": "ok",
      "detail": "<string>"
    },
    "confirmed_at": "2026-10-22T20:30:00Z",
    "aborted_at": "2026-10-22T20:30:00Z",
    "abort_reason": "<string>",
    "last_error": "<string>",
    "last_error_at": "2026-10-22T20:30:00Z",
    "row_version": 0,
    "created_at": "2026-10-22T20:30:00Z",
    "updated_at": "2026-10-22T20: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

Required scopes: onboarding.read

The onboarding's earlier sessions, newest first, superseded and ended ones included. The session at hand is not among them: it is the status document's.

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>",
    "purpose": "onboarding",
    "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>"
      },
      "soc_energy_margin": "0.05",
      "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,
      "stated_products": [
        "<string>"
      ],
      "stated_capacity_mw": "<string>"
    },
    "findings": [
      {
        "code": "<string>",
        "severity": "blocker",
        "message": "<string>"
      }
    ],
    "planned_start": "2026-10-22T20:30:00Z",
    "planned_end": "2026-10-22T20: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-10-22T20:30:00Z",
            "end": "2026-10-22T20:30:00Z",
            "setpoint_mw": "<string>",
            "window_id": "<string>",
            "actual_start": "2026-10-22T20:30:00Z",
            "actual_end": "2026-10-22T20:30:00Z"
          }
        ],
        "status": "pending",
        "follow_checks": [
          {
            "phase_index": 0,
            "checked_at": "2026-10-22T20:30:00Z",
            "expected_mw": "<string>",
            "measured_mw": "<string>",
            "passed": false,
            "detail": "<string>"
          }
        ],
        "proofs": "<string>",
        "workbooks": "<string>",
        "uploads": "<string>",
        "verdicts": "<string>",
        "overrides": [
          {
            "product": "<string>",
            "reason": "<string>",
            "by_user_id": "<string>",
            "by_user_name": "<string>",
            "at": "2026-10-22T20:30:00Z"
          }
        ],
        "error": "<string>",
        "actual_start": "2026-10-22T20:30:00Z",
        "actual_end": "2026-10-22T20:30:00Z"
      }
    ],
    "driver": {
      "request_id": "<string>",
      "run_id": "<string>",
      "status": "<string>",
      "journal_written_at": "2026-10-22T20:30:00Z",
      "tracking_source": "<string>",
      "events": [
        "<string>"
      ]
    },
    "progress": {
      "current_run_index": 0,
      "current_phase_index": 0,
      "confidence": "confirmed",
      "remaining_seconds": 0
    },
    "actual_start": "2026-10-22T20:30:00Z",
    "actual_end": "2026-10-22T20:30:00Z",
    "confirmed_by_user_name": "<string>",
    "manual_zero_offered": false,
    "manual_action_required": "<string>",
    "handoff_at": "2026-10-22T20:30:00Z",
    "alarms": [
      {
        "rule_id": "TELEMETRY-001",
        "severity": "INFO",
        "message": "<string>",
        "opened_at": "2026-10-22T20:30:00Z",
        "resolved_at": "2026-10-22T20:30:00Z"
      }
    ],
    "state_of_charge": {
      "key": "<string>",
      "label": "<string>",
      "status": "ok",
      "detail": "<string>"
    },
    "confirmed_at": "2026-10-22T20:30:00Z",
    "aborted_at": "2026-10-22T20:30:00Z",
    "abort_reason": "<string>",
    "last_error": "<string>",
    "last_error_at": "2026-10-22T20:30:00Z",
    "row_version": 0,
    "created_at": "2026-10-22T20:30:00Z",
    "updated_at": "2026-10-22T20: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

Required scopes: 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 the run's energy plus the margin in the battery, negative (charge) that much room. 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-10-22T20:30:00Z","single_direction":false,"execution_mode":"real"}'
Example response201
{
  "id": "<string>",
  "onboarding_id": "<string>",
  "purpose": "onboarding",
  "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>"
    },
    "soc_energy_margin": "0.05",
    "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,
    "stated_products": [
      "<string>"
    ],
    "stated_capacity_mw": "<string>"
  },
  "findings": [
    {
      "code": "<string>",
      "severity": "blocker",
      "message": "<string>"
    }
  ],
  "planned_start": "2026-10-22T20:30:00Z",
  "planned_end": "2026-10-22T20: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-10-22T20:30:00Z",
          "end": "2026-10-22T20:30:00Z",
          "setpoint_mw": "<string>",
          "window_id": "<string>",
          "actual_start": "2026-10-22T20:30:00Z",
          "actual_end": "2026-10-22T20:30:00Z"
        }
      ],
      "status": "pending",
      "follow_checks": [
        {
          "phase_index": 0,
          "checked_at": "2026-10-22T20:30:00Z",
          "expected_mw": "<string>",
          "measured_mw": "<string>",
          "passed": false,
          "detail": "<string>"
        }
      ],
      "proofs": "<string>",
      "workbooks": "<string>",
      "uploads": "<string>",
      "verdicts": "<string>",
      "overrides": [
        {
          "product": "<string>",
          "reason": "<string>",
          "by_user_id": "<string>",
          "by_user_name": "<string>",
          "at": "2026-10-22T20:30:00Z"
        }
      ],
      "error": "<string>",
      "actual_start": "2026-10-22T20:30:00Z",
      "actual_end": "2026-10-22T20:30:00Z"
    }
  ],
  "driver": {
    "request_id": "<string>",
    "run_id": "<string>",
    "status": "<string>",
    "journal_written_at": "2026-10-22T20:30:00Z",
    "tracking_source": "<string>",
    "events": [
      "<string>"
    ]
  },
  "progress": {
    "current_run_index": 0,
    "current_phase_index": 0,
    "confidence": "confirmed",
    "remaining_seconds": 0
  },
  "actual_start": "2026-10-22T20:30:00Z",
  "actual_end": "2026-10-22T20:30:00Z",
  "confirmed_by_user_name": "<string>",
  "manual_zero_offered": false,
  "manual_action_required": "<string>",
  "handoff_at": "2026-10-22T20:30:00Z",
  "alarms": [
    {
      "rule_id": "TELEMETRY-001",
      "severity": "INFO",
      "message": "<string>",
      "opened_at": "2026-10-22T20:30:00Z",
      "resolved_at": "2026-10-22T20:30:00Z"
    }
  ],
  "state_of_charge": {
    "key": "<string>",
    "label": "<string>",
    "status": "ok",
    "detail": "<string>"
  },
  "confirmed_at": "2026-10-22T20:30:00Z",
  "aborted_at": "2026-10-22T20:30:00Z",
  "abort_reason": "<string>",
  "last_error": "<string>",
  "last_error_at": "2026-10-22T20:30:00Z",
  "row_version": 0,
  "created_at": "2026-10-22T20:30:00Z",
  "updated_at": "2026-10-22T20: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

Required scopes: 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>",
  "purpose": "onboarding",
  "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>"
    },
    "soc_energy_margin": "0.05",
    "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,
    "stated_products": [
      "<string>"
    ],
    "stated_capacity_mw": "<string>"
  },
  "findings": [
    {
      "code": "<string>",
      "severity": "blocker",
      "message": "<string>"
    }
  ],
  "planned_start": "2026-10-22T20:30:00Z",
  "planned_end": "2026-10-22T20: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-10-22T20:30:00Z",
          "end": "2026-10-22T20:30:00Z",
          "setpoint_mw": "<string>",
          "window_id": "<string>",
          "actual_start": "2026-10-22T20:30:00Z",
          "actual_end": "2026-10-22T20:30:00Z"
        }
      ],
      "status": "pending",
      "follow_checks": [
        {
          "phase_index": 0,
          "checked_at": "2026-10-22T20:30:00Z",
          "expected_mw": "<string>",
          "measured_mw": "<string>",
          "passed": false,
          "detail": "<string>"
        }
      ],
      "proofs": "<string>",
      "workbooks": "<string>",
      "uploads": "<string>",
      "verdicts": "<string>",
      "overrides": [
        {
          "product": "<string>",
          "reason": "<string>",
          "by_user_id": "<string>",
          "by_user_name": "<string>",
          "at": "2026-10-22T20:30:00Z"
        }
      ],
      "error": "<string>",
      "actual_start": "2026-10-22T20:30:00Z",
      "actual_end": "2026-10-22T20:30:00Z"
    }
  ],
  "driver": {
    "request_id": "<string>",
    "run_id": "<string>",
    "status": "<string>",
    "journal_written_at": "2026-10-22T20:30:00Z",
    "tracking_source": "<string>",
    "events": [
      "<string>"
    ]
  },
  "progress": {
    "current_run_index": 0,
    "current_phase_index": 0,
    "confidence": "confirmed",
    "remaining_seconds": 0
  },
  "actual_start": "2026-10-22T20:30:00Z",
  "actual_end": "2026-10-22T20:30:00Z",
  "confirmed_by_user_name": "<string>",
  "manual_zero_offered": false,
  "manual_action_required": "<string>",
  "handoff_at": "2026-10-22T20:30:00Z",
  "alarms": [
    {
      "rule_id": "TELEMETRY-001",
      "severity": "INFO",
      "message": "<string>",
      "opened_at": "2026-10-22T20:30:00Z",
      "resolved_at": "2026-10-22T20:30:00Z"
    }
  ],
  "state_of_charge": {
    "key": "<string>",
    "label": "<string>",
    "status": "ok",
    "detail": "<string>"
  },
  "confirmed_at": "2026-10-22T20:30:00Z",
  "aborted_at": "2026-10-22T20:30:00Z",
  "abort_reason": "<string>",
  "last_error": "<string>",
  "last_error_at": "2026-10-22T20:30:00Z",
  "row_version": 0,
  "created_at": "2026-10-22T20:30:00Z",
  "updated_at": "2026-10-22T20: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

Required scopes: 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-10-22T20:30:00Z","execution_mode":"real","single_direction":false}'
Example response200
{
  "id": "<string>",
  "onboarding_id": "<string>",
  "purpose": "onboarding",
  "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>"
    },
    "soc_energy_margin": "0.05",
    "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,
    "stated_products": [
      "<string>"
    ],
    "stated_capacity_mw": "<string>"
  },
  "findings": [
    {
      "code": "<string>",
      "severity": "blocker",
      "message": "<string>"
    }
  ],
  "planned_start": "2026-10-22T20:30:00Z",
  "planned_end": "2026-10-22T20: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-10-22T20:30:00Z",
          "end": "2026-10-22T20:30:00Z",
          "setpoint_mw": "<string>",
          "window_id": "<string>",
          "actual_start": "2026-10-22T20:30:00Z",
          "actual_end": "2026-10-22T20:30:00Z"
        }
      ],
      "status": "pending",
      "follow_checks": [
        {
          "phase_index": 0,
          "checked_at": "2026-10-22T20:30:00Z",
          "expected_mw": "<string>",
          "measured_mw": "<string>",
          "passed": false,
          "detail": "<string>"
        }
      ],
      "proofs": "<string>",
      "workbooks": "<string>",
      "uploads": "<string>",
      "verdicts": "<string>",
      "overrides": [
        {
          "product": "<string>",
          "reason": "<string>",
          "by_user_id": "<string>",
          "by_user_name": "<string>",
          "at": "2026-10-22T20:30:00Z"
        }
      ],
      "error": "<string>",
      "actual_start": "2026-10-22T20:30:00Z",
      "actual_end": "2026-10-22T20:30:00Z"
    }
  ],
  "driver": {
    "request_id": "<string>",
    "run_id": "<string>",
    "status": "<string>",
    "journal_written_at": "2026-10-22T20:30:00Z",
    "tracking_source": "<string>",
    "events": [
      "<string>"
    ]
  },
  "progress": {
    "current_run_index": 0,
    "current_phase_index": 0,
    "confidence": "confirmed",
    "remaining_seconds": 0
  },
  "actual_start": "2026-10-22T20:30:00Z",
  "actual_end": "2026-10-22T20:30:00Z",
  "confirmed_by_user_name": "<string>",
  "manual_zero_offered": false,
  "manual_action_required": "<string>",
  "handoff_at": "2026-10-22T20:30:00Z",
  "alarms": [
    {
      "rule_id": "TELEMETRY-001",
      "severity": "INFO",
      "message": "<string>",
      "opened_at": "2026-10-22T20:30:00Z",
      "resolved_at": "2026-10-22T20:30:00Z"
    }
  ],
  "state_of_charge": {
    "key": "<string>",
    "label": "<string>",
    "status": "ok",
    "detail": "<string>"
  },
  "confirmed_at": "2026-10-22T20:30:00Z",
  "aborted_at": "2026-10-22T20:30:00Z",
  "abort_reason": "<string>",
  "last_error": "<string>",
  "last_error_at": "2026-10-22T20:30:00Z",
  "row_version": 0,
  "created_at": "2026-10-22T20:30:00Z",
  "updated_at": "2026-10-22T20: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

Required scopes: 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>",
  "purpose": "onboarding",
  "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>"
    },
    "soc_energy_margin": "0.05",
    "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,
    "stated_products": [
      "<string>"
    ],
    "stated_capacity_mw": "<string>"
  },
  "findings": [
    {
      "code": "<string>",
      "severity": "blocker",
      "message": "<string>"
    }
  ],
  "planned_start": "2026-10-22T20:30:00Z",
  "planned_end": "2026-10-22T20: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-10-22T20:30:00Z",
          "end": "2026-10-22T20:30:00Z",
          "setpoint_mw": "<string>",
          "window_id": "<string>",
          "actual_start": "2026-10-22T20:30:00Z",
          "actual_end": "2026-10-22T20:30:00Z"
        }
      ],
      "status": "pending",
      "follow_checks": [
        {
          "phase_index": 0,
          "checked_at": "2026-10-22T20:30:00Z",
          "expected_mw": "<string>",
          "measured_mw": "<string>",
          "passed": false,
          "detail": "<string>"
        }
      ],
      "proofs": "<string>",
      "workbooks": "<string>",
      "uploads": "<string>",
      "verdicts": "<string>",
      "overrides": [
        {
          "product": "<string>",
          "reason": "<string>",
          "by_user_id": "<string>",
          "by_user_name": "<string>",
          "at": "2026-10-22T20:30:00Z"
        }
      ],
      "error": "<string>",
      "actual_start": "2026-10-22T20:30:00Z",
      "actual_end": "2026-10-22T20:30:00Z"
    }
  ],
  "driver": {
    "request_id": "<string>",
    "run_id": "<string>",
    "status": "<string>",
    "journal_written_at": "2026-10-22T20:30:00Z",
    "tracking_source": "<string>",
    "events": [
      "<string>"
    ]
  },
  "progress": {
    "current_run_index": 0,
    "current_phase_index": 0,
    "confidence": "confirmed",
    "remaining_seconds": 0
  },
  "actual_start": "2026-10-22T20:30:00Z",
  "actual_end": "2026-10-22T20:30:00Z",
  "confirmed_by_user_name": "<string>",
  "manual_zero_offered": false,
  "manual_action_required": "<string>",
  "handoff_at": "2026-10-22T20:30:00Z",
  "alarms": [
    {
      "rule_id": "TELEMETRY-001",
      "severity": "INFO",
      "message": "<string>",
      "opened_at": "2026-10-22T20:30:00Z",
      "resolved_at": "2026-10-22T20:30:00Z"
    }
  ],
  "state_of_charge": {
    "key": "<string>",
    "label": "<string>",
    "status": "ok",
    "detail": "<string>"
  },
  "confirmed_at": "2026-10-22T20:30:00Z",
  "aborted_at": "2026-10-22T20:30:00Z",
  "abort_reason": "<string>",
  "last_error": "<string>",
  "last_error_at": "2026-10-22T20:30:00Z",
  "row_version": 0,
  "created_at": "2026-10-22T20:30:00Z",
  "updated_at": "2026-10-22T20: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

Required scopes: 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 battery must hold the first run's energy plus the margin (positive run first) or have that much room (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>",
  "purpose": "onboarding",
  "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>"
    },
    "soc_energy_margin": "0.05",
    "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,
    "stated_products": [
      "<string>"
    ],
    "stated_capacity_mw": "<string>"
  },
  "findings": [
    {
      "code": "<string>",
      "severity": "blocker",
      "message": "<string>"
    }
  ],
  "planned_start": "2026-10-22T20:30:00Z",
  "planned_end": "2026-10-22T20: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-10-22T20:30:00Z",
          "end": "2026-10-22T20:30:00Z",
          "setpoint_mw": "<string>",
          "window_id": "<string>",
          "actual_start": "2026-10-22T20:30:00Z",
          "actual_end": "2026-10-22T20:30:00Z"
        }
      ],
      "status": "pending",
      "follow_checks": [
        {
          "phase_index": 0,
          "checked_at": "2026-10-22T20:30:00Z",
          "expected_mw": "<string>",
          "measured_mw": "<string>",
          "passed": false,
          "detail": "<string>"
        }
      ],
      "proofs": "<string>",
      "workbooks": "<string>",
      "uploads": "<string>",
      "verdicts": "<string>",
      "overrides": [
        {
          "product": "<string>",
          "reason": "<string>",
          "by_user_id": "<string>",
          "by_user_name": "<string>",
          "at": "2026-10-22T20:30:00Z"
        }
      ],
      "error": "<string>",
      "actual_start": "2026-10-22T20:30:00Z",
      "actual_end": "2026-10-22T20:30:00Z"
    }
  ],
  "driver": {
    "request_id": "<string>",
    "run_id": "<string>",
    "status": "<string>",
    "journal_written_at": "2026-10-22T20:30:00Z",
    "tracking_source": "<string>",
    "events": [
      "<string>"
    ]
  },
  "progress": {
    "current_run_index": 0,
    "current_phase_index": 0,
    "confidence": "confirmed",
    "remaining_seconds": 0
  },
  "actual_start": "2026-10-22T20:30:00Z",
  "actual_end": "2026-10-22T20:30:00Z",
  "confirmed_by_user_name": "<string>",
  "manual_zero_offered": false,
  "manual_action_required": "<string>",
  "handoff_at": "2026-10-22T20:30:00Z",
  "alarms": [
    {
      "rule_id": "TELEMETRY-001",
      "severity": "INFO",
      "message": "<string>",
      "opened_at": "2026-10-22T20:30:00Z",
      "resolved_at": "2026-10-22T20:30:00Z"
    }
  ],
  "state_of_charge": {
    "key": "<string>",
    "label": "<string>",
    "status": "ok",
    "detail": "<string>"
  },
  "confirmed_at": "2026-10-22T20:30:00Z",
  "aborted_at": "2026-10-22T20:30:00Z",
  "abort_reason": "<string>",
  "last_error": "<string>",
  "last_error_at": "2026-10-22T20:30:00Z",
  "row_version": 0,
  "created_at": "2026-10-22T20:30:00Z",
  "updated_at": "2026-10-22T20: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

Required scopes: 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>",
  "purpose": "onboarding",
  "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>"
    },
    "soc_energy_margin": "0.05",
    "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,
    "stated_products": [
      "<string>"
    ],
    "stated_capacity_mw": "<string>"
  },
  "findings": [
    {
      "code": "<string>",
      "severity": "blocker",
      "message": "<string>"
    }
  ],
  "planned_start": "2026-10-22T20:30:00Z",
  "planned_end": "2026-10-22T20: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-10-22T20:30:00Z",
          "end": "2026-10-22T20:30:00Z",
          "setpoint_mw": "<string>",
          "window_id": "<string>",
          "actual_start": "2026-10-22T20:30:00Z",
          "actual_end": "2026-10-22T20:30:00Z"
        }
      ],
      "status": "pending",
      "follow_checks": [
        {
          "phase_index": 0,
          "checked_at": "2026-10-22T20:30:00Z",
          "expected_mw": "<string>",
          "measured_mw": "<string>",
          "passed": false,
          "detail": "<string>"
        }
      ],
      "proofs": "<string>",
      "workbooks": "<string>",
      "uploads": "<string>",
      "verdicts": "<string>",
      "overrides": [
        {
          "product": "<string>",
          "reason": "<string>",
          "by_user_id": "<string>",
          "by_user_name": "<string>",
          "at": "2026-10-22T20:30:00Z"
        }
      ],
      "error": "<string>",
      "actual_start": "2026-10-22T20:30:00Z",
      "actual_end": "2026-10-22T20:30:00Z"
    }
  ],
  "driver": {
    "request_id": "<string>",
    "run_id": "<string>",
    "status": "<string>",
    "journal_written_at": "2026-10-22T20:30:00Z",
    "tracking_source": "<string>",
    "events": [
      "<string>"
    ]
  },
  "progress": {
    "current_run_index": 0,
    "current_phase_index": 0,
    "confidence": "confirmed",
    "remaining_seconds": 0
  },
  "actual_start": "2026-10-22T20:30:00Z",
  "actual_end": "2026-10-22T20:30:00Z",
  "confirmed_by_user_name": "<string>",
  "manual_zero_offered": false,
  "manual_action_required": "<string>",
  "handoff_at": "2026-10-22T20:30:00Z",
  "alarms": [
    {
      "rule_id": "TELEMETRY-001",
      "severity": "INFO",
      "message": "<string>",
      "opened_at": "2026-10-22T20:30:00Z",
      "resolved_at": "2026-10-22T20:30:00Z"
    }
  ],
  "state_of_charge": {
    "key": "<string>",
    "label": "<string>",
    "status": "ok",
    "detail": "<string>"
  },
  "confirmed_at": "2026-10-22T20:30:00Z",
  "aborted_at": "2026-10-22T20:30:00Z",
  "abort_reason": "<string>",
  "last_error": "<string>",
  "last_error_at": "2026-10-22T20:30:00Z",
  "row_version": 0,
  "created_at": "2026-10-22T20:30:00Z",
  "updated_at": "2026-10-22T20: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

Required scopes: 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-10-22T20:30:00Z"}'
Example response200
{
  "id": "<string>",
  "onboarding_id": "<string>",
  "purpose": "onboarding",
  "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>"
    },
    "soc_energy_margin": "0.05",
    "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,
    "stated_products": [
      "<string>"
    ],
    "stated_capacity_mw": "<string>"
  },
  "findings": [
    {
      "code": "<string>",
      "severity": "blocker",
      "message": "<string>"
    }
  ],
  "planned_start": "2026-10-22T20:30:00Z",
  "planned_end": "2026-10-22T20: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-10-22T20:30:00Z",
          "end": "2026-10-22T20:30:00Z",
          "setpoint_mw": "<string>",
          "window_id": "<string>",
          "actual_start": "2026-10-22T20:30:00Z",
          "actual_end": "2026-10-22T20:30:00Z"
        }
      ],
      "status": "pending",
      "follow_checks": [
        {
          "phase_index": 0,
          "checked_at": "2026-10-22T20:30:00Z",
          "expected_mw": "<string>",
          "measured_mw": "<string>",
          "passed": false,
          "detail": "<string>"
        }
      ],
      "proofs": "<string>",
      "workbooks": "<string>",
      "uploads": "<string>",
      "verdicts": "<string>",
      "overrides": [
        {
          "product": "<string>",
          "reason": "<string>",
          "by_user_id": "<string>",
          "by_user_name": "<string>",
          "at": "2026-10-22T20:30:00Z"
        }
      ],
      "error": "<string>",
      "actual_start": "2026-10-22T20:30:00Z",
      "actual_end": "2026-10-22T20:30:00Z"
    }
  ],
  "driver": {
    "request_id": "<string>",
    "run_id": "<string>",
    "status": "<string>",
    "journal_written_at": "2026-10-22T20:30:00Z",
    "tracking_source": "<string>",
    "events": [
      "<string>"
    ]
  },
  "progress": {
    "current_run_index": 0,
    "current_phase_index": 0,
    "confidence": "confirmed",
    "remaining_seconds": 0
  },
  "actual_start": "2026-10-22T20:30:00Z",
  "actual_end": "2026-10-22T20:30:00Z",
  "confirmed_by_user_name": "<string>",
  "manual_zero_offered": false,
  "manual_action_required": "<string>",
  "handoff_at": "2026-10-22T20:30:00Z",
  "alarms": [
    {
      "rule_id": "TELEMETRY-001",
      "severity": "INFO",
      "message": "<string>",
      "opened_at": "2026-10-22T20:30:00Z",
      "resolved_at": "2026-10-22T20:30:00Z"
    }
  ],
  "state_of_charge": {
    "key": "<string>",
    "label": "<string>",
    "status": "ok",
    "detail": "<string>"
  },
  "confirmed_at": "2026-10-22T20:30:00Z",
  "aborted_at": "2026-10-22T20:30:00Z",
  "abort_reason": "<string>",
  "last_error": "<string>",
  "last_error_at": "2026-10-22T20:30:00Z",
  "row_version": 0,
  "created_at": "2026-10-22T20:30:00Z",
  "updated_at": "2026-10-22T20:30:00Z"
}
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}/documents/{document_id}

File a document under another requirement

onboarding.write

Required scopes: onboarding.write

Files an uploaded document under the requirement it satisfies, e.g. a supplier confirmation uploaded without its key, without uploading it again. Its type, gate and filename prefix follow the requirement and an earlier accept/reject verdict is withdrawn. It keeps its upload time: the newest upload of a requirement is the one that counts, so a re-filed older file counts once newer copies are rejected or removed. null unassigns it. EBX only; refused while the PQ application's inputs are frozen and for the proof workbook of a Betriebsfahrt run.

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.

Request body · required

requirement_keyREQUIRED
stringThe requirement to file the document under, or null to unassign it.
Example value
curl -X PATCH "https://api.ebx.energy/v1/onboardings/00000000-0000-0000-0000-000000000000/documents/00000000-0000-0000-0000-000000000000" \
  -H "Authorization: Bearer $EBX_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"requirement_key":"<string>"}'
Example response200
{
  "archived_at": "<string>",
  "project_settings": {
    "deadline_overrides": "<string>",
    "contacts": {
      "asset_owner": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      },
      "epc": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      },
      "ems_provider": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      },
      "ebx": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      },
      "partner": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      }
    },
    "co_location": "<string>",
    "start": "2026-01-01",
    "original": "2026-01-01",
    "estimatedOverride": "2026-01-01"
  },
  "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,
  "is_transition": 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,
      "requirement_key": "<string>",
      "review_status": "accepted",
      "reviewed_at": "<string>",
      "reviewed_by_user_name": "<string>",
      "review_note": "<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>",
        "owner": "asset_owner",
        "due_date": "2026-01-01",
        "category": "grid_dso",
        "decision": "<string>",
        "resolved_by_user_name": "<string>",
        "visibility": "internal"
      }
    ],
    "applied_templates": [
      "<string>"
    ]
  },
  "notes": [
    {
      "id": "<string>",
      "body": "<string>",
      "visibility": "internal",
      "author_user_name": "<string>",
      "created_at": "<string>"
    }
  ],
  "shared_open_points": [
    {
      "id": "<string>",
      "title": "<string>",
      "status": "open",
      "owner": "asset_owner",
      "category": "grid_dso",
      "due_date": "2026-01-01",
      "decision": "<string>",
      "comments": [
        {
          "id": "<string>",
          "author_user_name": "<string>",
          "author_org_name": "<string>",
          "author_side": "ebx",
          "created_at": "<string>",
          "body": "<string>"
        }
      ],
      "created_at": "<string>",
      "updated_at": "<string>",
      "resolved_at": "<string>"
    }
  ]
}
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

Required scopes: onboarding.write

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

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
{
  "archived_at": "<string>",
  "project_settings": {
    "deadline_overrides": "<string>",
    "contacts": {
      "asset_owner": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      },
      "epc": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      },
      "ems_provider": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      },
      "ebx": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      },
      "partner": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      }
    },
    "co_location": "<string>",
    "start": "2026-01-01",
    "original": "2026-01-01",
    "estimatedOverride": "2026-01-01"
  },
  "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,
  "is_transition": 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,
      "requirement_key": "<string>",
      "review_status": "accepted",
      "reviewed_at": "<string>",
      "reviewed_by_user_name": "<string>",
      "review_note": "<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>",
        "owner": "asset_owner",
        "due_date": "2026-01-01",
        "category": "grid_dso",
        "decision": "<string>",
        "resolved_by_user_name": "<string>",
        "visibility": "internal"
      }
    ],
    "applied_templates": [
      "<string>"
    ]
  },
  "notes": [
    {
      "id": "<string>",
      "body": "<string>",
      "visibility": "internal",
      "author_user_name": "<string>",
      "created_at": "<string>"
    }
  ],
  "shared_open_points": [
    {
      "id": "<string>",
      "title": "<string>",
      "status": "open",
      "owner": "asset_owner",
      "category": "grid_dso",
      "due_date": "2026-01-01",
      "decision": "<string>",
      "comments": [
        {
          "id": "<string>",
          "author_user_name": "<string>",
          "author_org_name": "<string>",
          "author_side": "ebx",
          "created_at": "<string>",
          "body": "<string>"
        }
      ],
      "created_at": "<string>",
      "updated_at": "<string>",
      "resolved_at": "<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

Required scopes: onboarding.read

Returns a short-lived presigned HTTP GET download URL for an available, non-deleted onboarding document. The API does not proxy document bytes. The URL serves the document as an attachment under its original filename, or inline for preview with inline=true.

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.

Query parameters

inline
booleandefault falseServe the document for in-browser preview instead of as an attachment. Only PDF, PNG, JPEG and WebP documents can be previewed; any other type returns 409.
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
  • 422validation failed
  • 429rate limited
ALL CODES →
POST/v1/onboardings/{onboarding_id}/documents/{document_id}/finalize

Finalize an uploaded document

onboarding.write

Required scopes: onboarding.write

Marks a pending document upload as available after the client has uploaded bytes to the presigned upload 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
{
  "archived_at": "<string>",
  "project_settings": {
    "deadline_overrides": "<string>",
    "contacts": {
      "asset_owner": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      },
      "epc": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      },
      "ems_provider": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      },
      "ebx": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      },
      "partner": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      }
    },
    "co_location": "<string>",
    "start": "2026-01-01",
    "original": "2026-01-01",
    "estimatedOverride": "2026-01-01"
  },
  "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,
  "is_transition": 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,
      "requirement_key": "<string>",
      "review_status": "accepted",
      "reviewed_at": "<string>",
      "reviewed_by_user_name": "<string>",
      "review_note": "<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>",
        "owner": "asset_owner",
        "due_date": "2026-01-01",
        "category": "grid_dso",
        "decision": "<string>",
        "resolved_by_user_name": "<string>",
        "visibility": "internal"
      }
    ],
    "applied_templates": [
      "<string>"
    ]
  },
  "notes": [
    {
      "id": "<string>",
      "body": "<string>",
      "visibility": "internal",
      "author_user_name": "<string>",
      "created_at": "<string>"
    }
  ],
  "shared_open_points": [
    {
      "id": "<string>",
      "title": "<string>",
      "status": "open",
      "owner": "asset_owner",
      "category": "grid_dso",
      "due_date": "2026-01-01",
      "decision": "<string>",
      "comments": [
        {
          "id": "<string>",
          "author_user_name": "<string>",
          "author_org_name": "<string>",
          "author_side": "ebx",
          "created_at": "<string>",
          "body": "<string>"
        }
      ],
      "created_at": "<string>",
      "updated_at": "<string>",
      "resolved_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}/documents/{document_id}/review

Accept or reject a document

onboarding.write

Required scopes: onboarding.write

Records EBX's verdict on one uploaded copy. A rejected copy no longer counts for its requirement anywhere: the Documents tab, the PQ readiness check and the PQ submission use the newest copy that is not rejected, or report the requirement as missing. An accepted copy can only be removed by EBX. A new upload starts unreviewed. status: null withdraws the verdict. A copy cannot be accepted while its upload link could still replace it (20 minutes after the upload started), and the last valid copy of a passed gate's required document cannot be rejected until the gate is reopened. EBX only.

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.

Request body · required

statusREQUIRED
enumacceptedrejectedaccepted, rejected, or null to withdraw the verdict.
note
stringWhy, e.g. what to fix; shown with a rejected document.
Example value
curl -X POST "https://api.ebx.energy/v1/onboardings/00000000-0000-0000-0000-000000000000/documents/00000000-0000-0000-0000-000000000000/review" \
  -H "Authorization: Bearer $EBX_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"status":"accepted","note":"<string>"}'
Example response200
{
  "archived_at": "<string>",
  "project_settings": {
    "deadline_overrides": "<string>",
    "contacts": {
      "asset_owner": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      },
      "epc": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      },
      "ems_provider": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      },
      "ebx": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      },
      "partner": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      }
    },
    "co_location": "<string>",
    "start": "2026-01-01",
    "original": "2026-01-01",
    "estimatedOverride": "2026-01-01"
  },
  "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,
  "is_transition": 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,
      "requirement_key": "<string>",
      "review_status": "accepted",
      "reviewed_at": "<string>",
      "reviewed_by_user_name": "<string>",
      "review_note": "<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>",
        "owner": "asset_owner",
        "due_date": "2026-01-01",
        "category": "grid_dso",
        "decision": "<string>",
        "resolved_by_user_name": "<string>",
        "visibility": "internal"
      }
    ],
    "applied_templates": [
      "<string>"
    ]
  },
  "notes": [
    {
      "id": "<string>",
      "body": "<string>",
      "visibility": "internal",
      "author_user_name": "<string>",
      "created_at": "<string>"
    }
  ],
  "shared_open_points": [
    {
      "id": "<string>",
      "title": "<string>",
      "status": "open",
      "owner": "asset_owner",
      "category": "grid_dso",
      "due_date": "2026-01-01",
      "decision": "<string>",
      "comments": [
        {
          "id": "<string>",
          "author_user_name": "<string>",
          "author_org_name": "<string>",
          "author_side": "ebx",
          "created_at": "<string>",
          "body": "<string>"
        }
      ],
      "created_at": "<string>",
      "updated_at": "<string>",
      "resolved_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}/documents/presigned-upload

Create a document upload URL

onboarding.write

Required scopes: onboarding.write

Creates pending document metadata and returns a short-lived presigned upload URL for HTTP PUT. Clients upload the file bytes directly to that URL, 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
requirement_key
stringThe requirement the file satisfies, e.g. contractor_confirmation. The file is then filed under that requirement's gate whatever gate_definition_id says. Without it the requirement is derived from the type and the rfi-<key>__ / pq-evidence-<slot>__ filename prefix, or the file stays unassigned.
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>","requirement_key":"<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

Required scopes: 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
{
  "archived_at": "<string>",
  "project_settings": {
    "deadline_overrides": "<string>",
    "contacts": {
      "asset_owner": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      },
      "epc": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      },
      "ems_provider": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      },
      "ebx": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      },
      "partner": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      }
    },
    "co_location": "<string>",
    "start": "2026-01-01",
    "original": "2026-01-01",
    "estimatedOverride": "2026-01-01"
  },
  "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,
  "is_transition": 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,
      "requirement_key": "<string>",
      "review_status": "accepted",
      "reviewed_at": "<string>",
      "reviewed_by_user_name": "<string>",
      "review_note": "<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>",
        "owner": "asset_owner",
        "due_date": "2026-01-01",
        "category": "grid_dso",
        "decision": "<string>",
        "resolved_by_user_name": "<string>",
        "visibility": "internal"
      }
    ],
    "applied_templates": [
      "<string>"
    ]
  },
  "notes": [
    {
      "id": "<string>",
      "body": "<string>",
      "visibility": "internal",
      "author_user_name": "<string>",
      "created_at": "<string>"
    }
  ],
  "shared_open_points": [
    {
      "id": "<string>",
      "title": "<string>",
      "status": "open",
      "owner": "asset_owner",
      "category": "grid_dso",
      "due_date": "2026-01-01",
      "decision": "<string>",
      "comments": [
        {
          "id": "<string>",
          "author_user_name": "<string>",
          "author_org_name": "<string>",
          "author_side": "ebx",
          "created_at": "<string>",
          "body": "<string>"
        }
      ],
      "created_at": "<string>",
      "updated_at": "<string>",
      "resolved_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}/dpl/rows/{row_id}/comments

Comment on a DPL row

onboarding.write

Required scopes: 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

Required scopes: 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

Required scopes: 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

Required scopes: 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
category
enumgrid_dsohardware_siteems_data_pointscommercial_contractpq_tsoother
waiting_on
enumasset_ownerepcems_providerebxentrixtso
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>","category":"grid_dso","waiting_on":"asset_owner"}'
Example response200
{
  "archived_at": "<string>",
  "project_settings": {
    "deadline_overrides": "<string>",
    "contacts": {
      "asset_owner": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      },
      "epc": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      },
      "ems_provider": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      },
      "ebx": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      },
      "partner": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      }
    },
    "co_location": "<string>",
    "start": "2026-01-01",
    "original": "2026-01-01",
    "estimatedOverride": "2026-01-01"
  },
  "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,
  "is_transition": 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,
      "requirement_key": "<string>",
      "review_status": "accepted",
      "reviewed_at": "<string>",
      "reviewed_by_user_name": "<string>",
      "review_note": "<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>",
        "owner": "asset_owner",
        "due_date": "2026-01-01",
        "category": "grid_dso",
        "decision": "<string>",
        "resolved_by_user_name": "<string>",
        "visibility": "internal"
      }
    ],
    "applied_templates": [
      "<string>"
    ]
  },
  "notes": [
    {
      "id": "<string>",
      "body": "<string>",
      "visibility": "internal",
      "author_user_name": "<string>",
      "created_at": "<string>"
    }
  ],
  "shared_open_points": [
    {
      "id": "<string>",
      "title": "<string>",
      "status": "open",
      "owner": "asset_owner",
      "category": "grid_dso",
      "due_date": "2026-01-01",
      "decision": "<string>",
      "comments": [
        {
          "id": "<string>",
          "author_user_name": "<string>",
          "author_org_name": "<string>",
          "author_side": "ebx",
          "created_at": "<string>",
          "body": "<string>"
        }
      ],
      "created_at": "<string>",
      "updated_at": "<string>",
      "resolved_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}/gates/{gate_id}/confirm-in-place

Confirm a skipped gate is in place

onboarding.write

Required scopes: onboarding.write

EBX only. On a transition onboarding, records who confirmed that a gate skipped at creation (hardware, software, monitoring test) is already in place for the running asset, with an activity entry. The gate stays skipped; the workflow does not change. A gate is confirmed once.

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
stringOptional note, e.g. what was checked.
Example value
curl -X POST "https://api.ebx.energy/v1/onboardings/00000000-0000-0000-0000-000000000000/gates/mon_rfi/confirm-in-place" \
  -H "Authorization: Bearer $EBX_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"note":"<string>"}'
Example response200
{
  "archived_at": "<string>",
  "project_settings": {
    "deadline_overrides": "<string>",
    "contacts": {
      "asset_owner": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      },
      "epc": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      },
      "ems_provider": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      },
      "ebx": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      },
      "partner": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      }
    },
    "co_location": "<string>",
    "start": "2026-01-01",
    "original": "2026-01-01",
    "estimatedOverride": "2026-01-01"
  },
  "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,
  "is_transition": 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,
      "requirement_key": "<string>",
      "review_status": "accepted",
      "reviewed_at": "<string>",
      "reviewed_by_user_name": "<string>",
      "review_note": "<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>",
        "owner": "asset_owner",
        "due_date": "2026-01-01",
        "category": "grid_dso",
        "decision": "<string>",
        "resolved_by_user_name": "<string>",
        "visibility": "internal"
      }
    ],
    "applied_templates": [
      "<string>"
    ]
  },
  "notes": [
    {
      "id": "<string>",
      "body": "<string>",
      "visibility": "internal",
      "author_user_name": "<string>",
      "created_at": "<string>"
    }
  ],
  "shared_open_points": [
    {
      "id": "<string>",
      "title": "<string>",
      "status": "open",
      "owner": "asset_owner",
      "category": "grid_dso",
      "due_date": "2026-01-01",
      "decision": "<string>",
      "comments": [
        {
          "id": "<string>",
          "author_user_name": "<string>",
          "author_org_name": "<string>",
          "author_side": "ebx",
          "created_at": "<string>",
          "body": "<string>"
        }
      ],
      "created_at": "<string>",
      "updated_at": "<string>",
      "resolved_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}/gates/{gate_id}/note

Update a gate note

onboarding.write

Required scopes: 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
{
  "archived_at": "<string>",
  "project_settings": {
    "deadline_overrides": "<string>",
    "contacts": {
      "asset_owner": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      },
      "epc": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      },
      "ems_provider": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      },
      "ebx": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      },
      "partner": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      }
    },
    "co_location": "<string>",
    "start": "2026-01-01",
    "original": "2026-01-01",
    "estimatedOverride": "2026-01-01"
  },
  "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,
  "is_transition": 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,
      "requirement_key": "<string>",
      "review_status": "accepted",
      "reviewed_at": "<string>",
      "reviewed_by_user_name": "<string>",
      "review_note": "<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>",
        "owner": "asset_owner",
        "due_date": "2026-01-01",
        "category": "grid_dso",
        "decision": "<string>",
        "resolved_by_user_name": "<string>",
        "visibility": "internal"
      }
    ],
    "applied_templates": [
      "<string>"
    ]
  },
  "notes": [
    {
      "id": "<string>",
      "body": "<string>",
      "visibility": "internal",
      "author_user_name": "<string>",
      "created_at": "<string>"
    }
  ],
  "shared_open_points": [
    {
      "id": "<string>",
      "title": "<string>",
      "status": "open",
      "owner": "asset_owner",
      "category": "grid_dso",
      "due_date": "2026-01-01",
      "decision": "<string>",
      "comments": [
        {
          "id": "<string>",
          "author_user_name": "<string>",
          "author_org_name": "<string>",
          "author_side": "ebx",
          "created_at": "<string>",
          "body": "<string>"
        }
      ],
      "created_at": "<string>",
      "updated_at": "<string>",
      "resolved_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}/gates/{gate_id}/pass

Pass a workflow gate

onboarding.write

Required scopes: 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
{
  "archived_at": "<string>",
  "project_settings": {
    "deadline_overrides": "<string>",
    "contacts": {
      "asset_owner": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      },
      "epc": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      },
      "ems_provider": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      },
      "ebx": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      },
      "partner": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      }
    },
    "co_location": "<string>",
    "start": "2026-01-01",
    "original": "2026-01-01",
    "estimatedOverride": "2026-01-01"
  },
  "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,
  "is_transition": 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,
      "requirement_key": "<string>",
      "review_status": "accepted",
      "reviewed_at": "<string>",
      "reviewed_by_user_name": "<string>",
      "review_note": "<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>",
        "owner": "asset_owner",
        "due_date": "2026-01-01",
        "category": "grid_dso",
        "decision": "<string>",
        "resolved_by_user_name": "<string>",
        "visibility": "internal"
      }
    ],
    "applied_templates": [
      "<string>"
    ]
  },
  "notes": [
    {
      "id": "<string>",
      "body": "<string>",
      "visibility": "internal",
      "author_user_name": "<string>",
      "created_at": "<string>"
    }
  ],
  "shared_open_points": [
    {
      "id": "<string>",
      "title": "<string>",
      "status": "open",
      "owner": "asset_owner",
      "category": "grid_dso",
      "due_date": "2026-01-01",
      "decision": "<string>",
      "comments": [
        {
          "id": "<string>",
          "author_user_name": "<string>",
          "author_org_name": "<string>",
          "author_side": "ebx",
          "created_at": "<string>",
          "body": "<string>"
        }
      ],
      "created_at": "<string>",
      "updated_at": "<string>",
      "resolved_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}/gates/{gate_id}/reopen

Reopen a workflow gate

onboarding.write

Required scopes: 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
{
  "archived_at": "<string>",
  "project_settings": {
    "deadline_overrides": "<string>",
    "contacts": {
      "asset_owner": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      },
      "epc": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      },
      "ems_provider": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      },
      "ebx": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      },
      "partner": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      }
    },
    "co_location": "<string>",
    "start": "2026-01-01",
    "original": "2026-01-01",
    "estimatedOverride": "2026-01-01"
  },
  "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,
  "is_transition": 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,
      "requirement_key": "<string>",
      "review_status": "accepted",
      "reviewed_at": "<string>",
      "reviewed_by_user_name": "<string>",
      "review_note": "<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>",
        "owner": "asset_owner",
        "due_date": "2026-01-01",
        "category": "grid_dso",
        "decision": "<string>",
        "resolved_by_user_name": "<string>",
        "visibility": "internal"
      }
    ],
    "applied_templates": [
      "<string>"
    ]
  },
  "notes": [
    {
      "id": "<string>",
      "body": "<string>",
      "visibility": "internal",
      "author_user_name": "<string>",
      "created_at": "<string>"
    }
  ],
  "shared_open_points": [
    {
      "id": "<string>",
      "title": "<string>",
      "status": "open",
      "owner": "asset_owner",
      "category": "grid_dso",
      "due_date": "2026-01-01",
      "decision": "<string>",
      "comments": [
        {
          "id": "<string>",
          "author_user_name": "<string>",
          "author_org_name": "<string>",
          "author_side": "ebx",
          "created_at": "<string>",
          "body": "<string>"
        }
      ],
      "created_at": "<string>",
      "updated_at": "<string>",
      "resolved_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}/gates/{gate_id}/structured-data

Update gate structured data

onboarding.write

Required scopes: 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
{
  "archived_at": "<string>",
  "project_settings": {
    "deadline_overrides": "<string>",
    "contacts": {
      "asset_owner": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      },
      "epc": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      },
      "ems_provider": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      },
      "ebx": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      },
      "partner": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      }
    },
    "co_location": "<string>",
    "start": "2026-01-01",
    "original": "2026-01-01",
    "estimatedOverride": "2026-01-01"
  },
  "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,
  "is_transition": 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,
      "requirement_key": "<string>",
      "review_status": "accepted",
      "reviewed_at": "<string>",
      "reviewed_by_user_name": "<string>",
      "review_note": "<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>",
        "owner": "asset_owner",
        "due_date": "2026-01-01",
        "category": "grid_dso",
        "decision": "<string>",
        "resolved_by_user_name": "<string>",
        "visibility": "internal"
      }
    ],
    "applied_templates": [
      "<string>"
    ]
  },
  "notes": [
    {
      "id": "<string>",
      "body": "<string>",
      "visibility": "internal",
      "author_user_name": "<string>",
      "created_at": "<string>"
    }
  ],
  "shared_open_points": [
    {
      "id": "<string>",
      "title": "<string>",
      "status": "open",
      "owner": "asset_owner",
      "category": "grid_dso",
      "due_date": "2026-01-01",
      "decision": "<string>",
      "comments": [
        {
          "id": "<string>",
          "author_user_name": "<string>",
          "author_org_name": "<string>",
          "author_side": "ebx",
          "created_at": "<string>",
          "body": "<string>"
        }
      ],
      "created_at": "<string>",
      "updated_at": "<string>",
      "resolved_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}/internal-tracker/open-points

Add an internal tracker open point

onboarding.write

Required scopes: onboarding.write

Adds an EBX-internal open point with the party that owns it, a topic category, and an optional due date. It can be linked to a gate, RfI field, or DPL row and carry a first comment.

Path parameters

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

Request body · required

titleREQUIRED
string
ownerREQUIRED
enumasset_ownerepcems_providerebxentrixtsoThe party that has to act on an open point. A party, not a person: there is no per-user assignment.
categoryREQUIRED
enumgrid_dsohardware_siteems_data_pointscommercial_contractpq_tsootherA fixed topic list, so recurring issues and how they were decided can be analysed across onboardings.
due_date
string<date>
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>","owner":"asset_owner","category":"grid_dso","due_date":"2026-01-01","ref":{"kind":"<string>","gate_definition_id":"mon_rfi"},"body":"<string>"}'
Example response201
{
  "archived_at": "<string>",
  "project_settings": {
    "deadline_overrides": "<string>",
    "contacts": {
      "asset_owner": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      },
      "epc": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      },
      "ems_provider": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      },
      "ebx": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      },
      "partner": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      }
    },
    "co_location": "<string>",
    "start": "2026-01-01",
    "original": "2026-01-01",
    "estimatedOverride": "2026-01-01"
  },
  "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,
  "is_transition": 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,
      "requirement_key": "<string>",
      "review_status": "accepted",
      "reviewed_at": "<string>",
      "reviewed_by_user_name": "<string>",
      "review_note": "<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>",
        "owner": "asset_owner",
        "due_date": "2026-01-01",
        "category": "grid_dso",
        "decision": "<string>",
        "resolved_by_user_name": "<string>",
        "visibility": "internal"
      }
    ],
    "applied_templates": [
      "<string>"
    ]
  },
  "notes": [
    {
      "id": "<string>",
      "body": "<string>",
      "visibility": "internal",
      "author_user_name": "<string>",
      "created_at": "<string>"
    }
  ],
  "shared_open_points": [
    {
      "id": "<string>",
      "title": "<string>",
      "status": "open",
      "owner": "asset_owner",
      "category": "grid_dso",
      "due_date": "2026-01-01",
      "decision": "<string>",
      "comments": [
        {
          "id": "<string>",
          "author_user_name": "<string>",
          "author_org_name": "<string>",
          "author_side": "ebx",
          "created_at": "<string>",
          "body": "<string>"
        }
      ],
      "created_at": "<string>",
      "updated_at": "<string>",
      "resolved_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}/internal-tracker/open-points/{point_id}

Update, resolve, or reopen an internal tracker open point

onboarding.write

Required scopes: onboarding.write

Partial update: only the fields in the body change. Resolving requires a one-line decision and records an internal activity entry; reopening clears the decision.

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

status
enumopenresolved
decision
string
title
string
owner
enumasset_ownerepcems_providerebxentrixtso
category
enumgrid_dsohardware_siteems_data_pointscommercial_contractpq_tsoother
due_date
string<date>
visibility
enuminternalshared
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","decision":"<string>","title":"<string>","owner":"asset_owner","category":"grid_dso","due_date":"2026-01-01","visibility":"internal"}'
Example response200
{
  "archived_at": "<string>",
  "project_settings": {
    "deadline_overrides": "<string>",
    "contacts": {
      "asset_owner": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      },
      "epc": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      },
      "ems_provider": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      },
      "ebx": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      },
      "partner": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      }
    },
    "co_location": "<string>",
    "start": "2026-01-01",
    "original": "2026-01-01",
    "estimatedOverride": "2026-01-01"
  },
  "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,
  "is_transition": 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,
      "requirement_key": "<string>",
      "review_status": "accepted",
      "reviewed_at": "<string>",
      "reviewed_by_user_name": "<string>",
      "review_note": "<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>",
        "owner": "asset_owner",
        "due_date": "2026-01-01",
        "category": "grid_dso",
        "decision": "<string>",
        "resolved_by_user_name": "<string>",
        "visibility": "internal"
      }
    ],
    "applied_templates": [
      "<string>"
    ]
  },
  "notes": [
    {
      "id": "<string>",
      "body": "<string>",
      "visibility": "internal",
      "author_user_name": "<string>",
      "created_at": "<string>"
    }
  ],
  "shared_open_points": [
    {
      "id": "<string>",
      "title": "<string>",
      "status": "open",
      "owner": "asset_owner",
      "category": "grid_dso",
      "due_date": "2026-01-01",
      "decision": "<string>",
      "comments": [
        {
          "id": "<string>",
          "author_user_name": "<string>",
          "author_org_name": "<string>",
          "author_side": "ebx",
          "created_at": "<string>",
          "body": "<string>"
        }
      ],
      "created_at": "<string>",
      "updated_at": "<string>",
      "resolved_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}/internal-tracker/open-points/{point_id}/comments

Comment on an internal tracker open point

onboarding.write

Required scopes: onboarding.write

Appends an EBX comment to an open point. On a shared point the comment is part of the thread the asset owner reads and replies to. 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
{
  "archived_at": "<string>",
  "project_settings": {
    "deadline_overrides": "<string>",
    "contacts": {
      "asset_owner": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      },
      "epc": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      },
      "ems_provider": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      },
      "ebx": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      },
      "partner": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      }
    },
    "co_location": "<string>",
    "start": "2026-01-01",
    "original": "2026-01-01",
    "estimatedOverride": "2026-01-01"
  },
  "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,
  "is_transition": 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,
      "requirement_key": "<string>",
      "review_status": "accepted",
      "reviewed_at": "<string>",
      "reviewed_by_user_name": "<string>",
      "review_note": "<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>",
        "owner": "asset_owner",
        "due_date": "2026-01-01",
        "category": "grid_dso",
        "decision": "<string>",
        "resolved_by_user_name": "<string>",
        "visibility": "internal"
      }
    ],
    "applied_templates": [
      "<string>"
    ]
  },
  "notes": [
    {
      "id": "<string>",
      "body": "<string>",
      "visibility": "internal",
      "author_user_name": "<string>",
      "created_at": "<string>"
    }
  ],
  "shared_open_points": [
    {
      "id": "<string>",
      "title": "<string>",
      "status": "open",
      "owner": "asset_owner",
      "category": "grid_dso",
      "due_date": "2026-01-01",
      "decision": "<string>",
      "comments": [
        {
          "id": "<string>",
          "author_user_name": "<string>",
          "author_org_name": "<string>",
          "author_side": "ebx",
          "created_at": "<string>",
          "body": "<string>"
        }
      ],
      "created_at": "<string>",
      "updated_at": "<string>",
      "resolved_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}/internal-tracker/tasks

Add an internal tracker task

onboarding.write

Required scopes: onboarding.write

Adds an EBX-internal task to the onboarding's internal tracker. Tasks are never shared: they are not included in the external /onboarding-tasks responses, and onboarding responses return internal_tracker to 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
{
  "archived_at": "<string>",
  "project_settings": {
    "deadline_overrides": "<string>",
    "contacts": {
      "asset_owner": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      },
      "epc": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      },
      "ems_provider": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      },
      "ebx": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      },
      "partner": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      }
    },
    "co_location": "<string>",
    "start": "2026-01-01",
    "original": "2026-01-01",
    "estimatedOverride": "2026-01-01"
  },
  "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,
  "is_transition": 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,
      "requirement_key": "<string>",
      "review_status": "accepted",
      "reviewed_at": "<string>",
      "reviewed_by_user_name": "<string>",
      "review_note": "<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>",
        "owner": "asset_owner",
        "due_date": "2026-01-01",
        "category": "grid_dso",
        "decision": "<string>",
        "resolved_by_user_name": "<string>",
        "visibility": "internal"
      }
    ],
    "applied_templates": [
      "<string>"
    ]
  },
  "notes": [
    {
      "id": "<string>",
      "body": "<string>",
      "visibility": "internal",
      "author_user_name": "<string>",
      "created_at": "<string>"
    }
  ],
  "shared_open_points": [
    {
      "id": "<string>",
      "title": "<string>",
      "status": "open",
      "owner": "asset_owner",
      "category": "grid_dso",
      "due_date": "2026-01-01",
      "decision": "<string>",
      "comments": [
        {
          "id": "<string>",
          "author_user_name": "<string>",
          "author_org_name": "<string>",
          "author_side": "ebx",
          "created_at": "<string>",
          "body": "<string>"
        }
      ],
      "created_at": "<string>",
      "updated_at": "<string>",
      "resolved_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}/internal-tracker/tasks/{task_id}

Update an internal tracker task status

onboarding.write

Required scopes: 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
{
  "archived_at": "<string>",
  "project_settings": {
    "deadline_overrides": "<string>",
    "contacts": {
      "asset_owner": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      },
      "epc": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      },
      "ems_provider": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      },
      "ebx": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      },
      "partner": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      }
    },
    "co_location": "<string>",
    "start": "2026-01-01",
    "original": "2026-01-01",
    "estimatedOverride": "2026-01-01"
  },
  "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,
  "is_transition": 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,
      "requirement_key": "<string>",
      "review_status": "accepted",
      "reviewed_at": "<string>",
      "reviewed_by_user_name": "<string>",
      "review_note": "<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>",
        "owner": "asset_owner",
        "due_date": "2026-01-01",
        "category": "grid_dso",
        "decision": "<string>",
        "resolved_by_user_name": "<string>",
        "visibility": "internal"
      }
    ],
    "applied_templates": [
      "<string>"
    ]
  },
  "notes": [
    {
      "id": "<string>",
      "body": "<string>",
      "visibility": "internal",
      "author_user_name": "<string>",
      "created_at": "<string>"
    }
  ],
  "shared_open_points": [
    {
      "id": "<string>",
      "title": "<string>",
      "status": "open",
      "owner": "asset_owner",
      "category": "grid_dso",
      "due_date": "2026-01-01",
      "decision": "<string>",
      "comments": [
        {
          "id": "<string>",
          "author_user_name": "<string>",
          "author_org_name": "<string>",
          "author_side": "ebx",
          "created_at": "<string>",
          "body": "<string>"
        }
      ],
      "created_at": "<string>",
      "updated_at": "<string>",
      "resolved_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}/notes

Add a note to an onboarding

onboarding.write

Required scopes: onboarding.write

Appends a free-text note for information outside the standard process. Only EBX users can add notes, and each note starts internal. A note EBX shares appears to the asset owner in notes on onboarding responses and in shared_notes on their onboarding task detail.

Path parameters

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

Request body · required

bodyREQUIRED
string
Example value
curl -X POST "https://api.ebx.energy/v1/onboardings/00000000-0000-0000-0000-000000000000/notes" \
  -H "Authorization: Bearer $EBX_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"body":"<string>"}'
Example response201
{
  "archived_at": "<string>",
  "project_settings": {
    "deadline_overrides": "<string>",
    "contacts": {
      "asset_owner": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      },
      "epc": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      },
      "ems_provider": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      },
      "ebx": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      },
      "partner": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      }
    },
    "co_location": "<string>",
    "start": "2026-01-01",
    "original": "2026-01-01",
    "estimatedOverride": "2026-01-01"
  },
  "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,
  "is_transition": 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,
      "requirement_key": "<string>",
      "review_status": "accepted",
      "reviewed_at": "<string>",
      "reviewed_by_user_name": "<string>",
      "review_note": "<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>",
        "owner": "asset_owner",
        "due_date": "2026-01-01",
        "category": "grid_dso",
        "decision": "<string>",
        "resolved_by_user_name": "<string>",
        "visibility": "internal"
      }
    ],
    "applied_templates": [
      "<string>"
    ]
  },
  "notes": [
    {
      "id": "<string>",
      "body": "<string>",
      "visibility": "internal",
      "author_user_name": "<string>",
      "created_at": "<string>"
    }
  ],
  "shared_open_points": [
    {
      "id": "<string>",
      "title": "<string>",
      "status": "open",
      "owner": "asset_owner",
      "category": "grid_dso",
      "due_date": "2026-01-01",
      "decision": "<string>",
      "comments": [
        {
          "id": "<string>",
          "author_user_name": "<string>",
          "author_org_name": "<string>",
          "author_side": "ebx",
          "created_at": "<string>",
          "body": "<string>"
        }
      ],
      "created_at": "<string>",
      "updated_at": "<string>",
      "resolved_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}/notes/{note_id}

Share a note with the asset owner, or take it back

onboarding.write

Required scopes: onboarding.write

Sets a note's visibility. A shared note appears on the asset owner's onboarding page and task page; the change is recorded in the activity log without the note text. EBX-only.

Path parameters

onboarding_idREQUIRED
string<uuid>Stable onboarding identifier returned by create and list operations.
note_idREQUIRED
string<uuid>Note identifier from the onboarding response.

Request body · required

visibilityREQUIRED
enuminternalsharedWho reads a note or an open point: internal is read by EBX, shared by EBX and the asset owner. Notes and open points start internal, and EBX shares them individually.
Example value
curl -X PATCH "https://api.ebx.energy/v1/onboardings/00000000-0000-0000-0000-000000000000/notes/00000000-0000-0000-0000-000000000000" \
  -H "Authorization: Bearer $EBX_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"visibility":"internal"}'
Example response200
{
  "archived_at": "<string>",
  "project_settings": {
    "deadline_overrides": "<string>",
    "contacts": {
      "asset_owner": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      },
      "epc": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      },
      "ems_provider": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      },
      "ebx": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      },
      "partner": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      }
    },
    "co_location": "<string>",
    "start": "2026-01-01",
    "original": "2026-01-01",
    "estimatedOverride": "2026-01-01"
  },
  "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,
  "is_transition": 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,
      "requirement_key": "<string>",
      "review_status": "accepted",
      "reviewed_at": "<string>",
      "reviewed_by_user_name": "<string>",
      "review_note": "<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>",
        "owner": "asset_owner",
        "due_date": "2026-01-01",
        "category": "grid_dso",
        "decision": "<string>",
        "resolved_by_user_name": "<string>",
        "visibility": "internal"
      }
    ],
    "applied_templates": [
      "<string>"
    ]
  },
  "notes": [
    {
      "id": "<string>",
      "body": "<string>",
      "visibility": "internal",
      "author_user_name": "<string>",
      "created_at": "<string>"
    }
  ],
  "shared_open_points": [
    {
      "id": "<string>",
      "title": "<string>",
      "status": "open",
      "owner": "asset_owner",
      "category": "grid_dso",
      "due_date": "2026-01-01",
      "decision": "<string>",
      "comments": [
        {
          "id": "<string>",
          "author_user_name": "<string>",
          "author_org_name": "<string>",
          "author_side": "ebx",
          "created_at": "<string>",
          "body": "<string>"
        }
      ],
      "created_at": "<string>",
      "updated_at": "<string>",
      "resolved_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}/partners

Add a partner assignment

onboarding.write

Required scopes: 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
{
  "archived_at": "<string>",
  "project_settings": {
    "deadline_overrides": "<string>",
    "contacts": {
      "asset_owner": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      },
      "epc": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      },
      "ems_provider": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      },
      "ebx": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      },
      "partner": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      }
    },
    "co_location": "<string>",
    "start": "2026-01-01",
    "original": "2026-01-01",
    "estimatedOverride": "2026-01-01"
  },
  "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,
  "is_transition": 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,
      "requirement_key": "<string>",
      "review_status": "accepted",
      "reviewed_at": "<string>",
      "reviewed_by_user_name": "<string>",
      "review_note": "<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>",
        "owner": "asset_owner",
        "due_date": "2026-01-01",
        "category": "grid_dso",
        "decision": "<string>",
        "resolved_by_user_name": "<string>",
        "visibility": "internal"
      }
    ],
    "applied_templates": [
      "<string>"
    ]
  },
  "notes": [
    {
      "id": "<string>",
      "body": "<string>",
      "visibility": "internal",
      "author_user_name": "<string>",
      "created_at": "<string>"
    }
  ],
  "shared_open_points": [
    {
      "id": "<string>",
      "title": "<string>",
      "status": "open",
      "owner": "asset_owner",
      "category": "grid_dso",
      "due_date": "2026-01-01",
      "decision": "<string>",
      "comments": [
        {
          "id": "<string>",
          "author_user_name": "<string>",
          "author_org_name": "<string>",
          "author_side": "ebx",
          "created_at": "<string>",
          "body": "<string>"
        }
      ],
      "created_at": "<string>",
      "updated_at": "<string>",
      "resolved_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}/partners/{assignment_id}

Edit or replace a partner contact

onboarding.write

Required scopes: 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
{
  "archived_at": "<string>",
  "project_settings": {
    "deadline_overrides": "<string>",
    "contacts": {
      "asset_owner": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      },
      "epc": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      },
      "ems_provider": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      },
      "ebx": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      },
      "partner": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      }
    },
    "co_location": "<string>",
    "start": "2026-01-01",
    "original": "2026-01-01",
    "estimatedOverride": "2026-01-01"
  },
  "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,
  "is_transition": 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,
      "requirement_key": "<string>",
      "review_status": "accepted",
      "reviewed_at": "<string>",
      "reviewed_by_user_name": "<string>",
      "review_note": "<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>",
        "owner": "asset_owner",
        "due_date": "2026-01-01",
        "category": "grid_dso",
        "decision": "<string>",
        "resolved_by_user_name": "<string>",
        "visibility": "internal"
      }
    ],
    "applied_templates": [
      "<string>"
    ]
  },
  "notes": [
    {
      "id": "<string>",
      "body": "<string>",
      "visibility": "internal",
      "author_user_name": "<string>",
      "created_at": "<string>"
    }
  ],
  "shared_open_points": [
    {
      "id": "<string>",
      "title": "<string>",
      "status": "open",
      "owner": "asset_owner",
      "category": "grid_dso",
      "due_date": "2026-01-01",
      "decision": "<string>",
      "comments": [
        {
          "id": "<string>",
          "author_user_name": "<string>",
          "author_org_name": "<string>",
          "author_side": "ebx",
          "created_at": "<string>",
          "body": "<string>"
        }
      ],
      "created_at": "<string>",
      "updated_at": "<string>",
      "resolved_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}/partners/{assignment_id}/access/revoke

Revoke partner onboarding task access

onboarding.write

Required scopes: onboarding.write

Revokes active magic links, refresh sessions, and onboarding task access 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": {
    "archived_at": "<string>",
    "project_settings": {
      "deadline_overrides": "<string>",
      "contacts": {
        "asset_owner": {
          "name": "<string>",
          "email": "<string>",
          "phone": "<string>",
          "company": "<string>",
          "notes": "<string>"
        },
        "epc": {
          "name": "<string>",
          "email": "<string>",
          "phone": "<string>",
          "company": "<string>",
          "notes": "<string>"
        },
        "ems_provider": {
          "name": "<string>",
          "email": "<string>",
          "phone": "<string>",
          "company": "<string>",
          "notes": "<string>"
        },
        "ebx": {
          "name": "<string>",
          "email": "<string>",
          "phone": "<string>",
          "company": "<string>",
          "notes": "<string>"
        },
        "partner": {
          "name": "<string>",
          "email": "<string>",
          "phone": "<string>",
          "company": "<string>",
          "notes": "<string>"
        }
      },
      "co_location": "<string>",
      "start": "2026-01-01",
      "original": "2026-01-01",
      "estimatedOverride": "2026-01-01"
    },
    "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,
    "is_transition": 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,
        "requirement_key": "<string>",
        "review_status": "accepted",
        "reviewed_at": "<string>",
        "reviewed_by_user_name": "<string>",
        "review_note": "<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>",
          "owner": "asset_owner",
          "due_date": "2026-01-01",
          "category": "grid_dso",
          "decision": "<string>",
          "resolved_by_user_name": "<string>",
          "visibility": "internal"
        }
      ],
      "applied_templates": [
        "<string>"
      ]
    },
    "notes": [
      {
        "id": "<string>",
        "body": "<string>",
        "visibility": "internal",
        "author_user_name": "<string>",
        "created_at": "<string>"
      }
    ],
    "shared_open_points": [
      {
        "id": "<string>",
        "title": "<string>",
        "status": "open",
        "owner": "asset_owner",
        "category": "grid_dso",
        "due_date": "2026-01-01",
        "decision": "<string>",
        "comments": [
          {
            "id": "<string>",
            "author_user_name": "<string>",
            "author_org_name": "<string>",
            "author_side": "ebx",
            "created_at": "<string>",
            "body": "<string>"
          }
        ],
        "created_at": "<string>",
        "updated_at": "<string>",
        "resolved_at": "<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

Required scopes: 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": {
    "archived_at": "<string>",
    "project_settings": {
      "deadline_overrides": "<string>",
      "contacts": {
        "asset_owner": {
          "name": "<string>",
          "email": "<string>",
          "phone": "<string>",
          "company": "<string>",
          "notes": "<string>"
        },
        "epc": {
          "name": "<string>",
          "email": "<string>",
          "phone": "<string>",
          "company": "<string>",
          "notes": "<string>"
        },
        "ems_provider": {
          "name": "<string>",
          "email": "<string>",
          "phone": "<string>",
          "company": "<string>",
          "notes": "<string>"
        },
        "ebx": {
          "name": "<string>",
          "email": "<string>",
          "phone": "<string>",
          "company": "<string>",
          "notes": "<string>"
        },
        "partner": {
          "name": "<string>",
          "email": "<string>",
          "phone": "<string>",
          "company": "<string>",
          "notes": "<string>"
        }
      },
      "co_location": "<string>",
      "start": "2026-01-01",
      "original": "2026-01-01",
      "estimatedOverride": "2026-01-01"
    },
    "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,
    "is_transition": 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,
        "requirement_key": "<string>",
        "review_status": "accepted",
        "reviewed_at": "<string>",
        "reviewed_by_user_name": "<string>",
        "review_note": "<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>",
          "owner": "asset_owner",
          "due_date": "2026-01-01",
          "category": "grid_dso",
          "decision": "<string>",
          "resolved_by_user_name": "<string>",
          "visibility": "internal"
        }
      ],
      "applied_templates": [
        "<string>"
      ]
    },
    "notes": [
      {
        "id": "<string>",
        "body": "<string>",
        "visibility": "internal",
        "author_user_name": "<string>",
        "created_at": "<string>"
      }
    ],
    "shared_open_points": [
      {
        "id": "<string>",
        "title": "<string>",
        "status": "open",
        "owner": "asset_owner",
        "category": "grid_dso",
        "due_date": "2026-01-01",
        "decision": "<string>",
        "comments": [
          {
            "id": "<string>",
            "author_user_name": "<string>",
            "author_org_name": "<string>",
            "author_side": "ebx",
            "created_at": "<string>",
            "body": "<string>"
          }
        ],
        "created_at": "<string>",
        "updated_at": "<string>",
        "resolved_at": "<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

Required scopes: 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": {
    "archived_at": "<string>",
    "project_settings": {
      "deadline_overrides": "<string>",
      "contacts": {
        "asset_owner": {
          "name": "<string>",
          "email": "<string>",
          "phone": "<string>",
          "company": "<string>",
          "notes": "<string>"
        },
        "epc": {
          "name": "<string>",
          "email": "<string>",
          "phone": "<string>",
          "company": "<string>",
          "notes": "<string>"
        },
        "ems_provider": {
          "name": "<string>",
          "email": "<string>",
          "phone": "<string>",
          "company": "<string>",
          "notes": "<string>"
        },
        "ebx": {
          "name": "<string>",
          "email": "<string>",
          "phone": "<string>",
          "company": "<string>",
          "notes": "<string>"
        },
        "partner": {
          "name": "<string>",
          "email": "<string>",
          "phone": "<string>",
          "company": "<string>",
          "notes": "<string>"
        }
      },
      "co_location": "<string>",
      "start": "2026-01-01",
      "original": "2026-01-01",
      "estimatedOverride": "2026-01-01"
    },
    "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,
    "is_transition": 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,
        "requirement_key": "<string>",
        "review_status": "accepted",
        "reviewed_at": "<string>",
        "reviewed_by_user_name": "<string>",
        "review_note": "<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>",
          "owner": "asset_owner",
          "due_date": "2026-01-01",
          "category": "grid_dso",
          "decision": "<string>",
          "resolved_by_user_name": "<string>",
          "visibility": "internal"
        }
      ],
      "applied_templates": [
        "<string>"
      ]
    },
    "notes": [
      {
        "id": "<string>",
        "body": "<string>",
        "visibility": "internal",
        "author_user_name": "<string>",
        "created_at": "<string>"
      }
    ],
    "shared_open_points": [
      {
        "id": "<string>",
        "title": "<string>",
        "status": "open",
        "owner": "asset_owner",
        "category": "grid_dso",
        "due_date": "2026-01-01",
        "decision": "<string>",
        "comments": [
          {
            "id": "<string>",
            "author_user_name": "<string>",
            "author_org_name": "<string>",
            "author_side": "ebx",
            "created_at": "<string>",
            "body": "<string>"
          }
        ],
        "created_at": "<string>",
        "updated_at": "<string>",
        "resolved_at": "<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 →
GET/v1/onboardings/{onboarding_id}/pq-official/anb

Get Anb

onboarding.read

Required scopes: onboarding.read

Path parameters

onboarding_idREQUIRED
string<uuid>
Example value
curl "https://api.ebx.energy/v1/onboardings/00000000-0000-0000-0000-000000000000/pq-official/anb" \
  -H "Authorization: Bearer $EBX_TOKEN"
Example response200
{}
Can raise
  • 401no valid token
  • 403scope missing
  • 404unknown or not visible
  • 429rate limited
ALL CODES →
POST/v1/onboardings/{onboarding_id}/pq-official/anb/{confirmation_id}/recall

Recall Anb

onboarding.write

Required scopes: onboarding.write

Path parameters

onboarding_idREQUIRED
string<uuid>
confirmation_idREQUIRED
string<uuid>

Request body · required

confirm_recallREQUIRED
boolean
asset_name_confirmationREQUIRED
string
reasonREQUIRED
string
Example value
curl -X POST "https://api.ebx.energy/v1/onboardings/00000000-0000-0000-0000-000000000000/pq-official/anb/00000000-0000-0000-0000-000000000000/recall" \
  -H "Authorization: Bearer $EBX_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"confirm_recall":false,"asset_name_confirmation":"<string>","reason":"<string>"}'
Example response200
{}
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-official/connection

Get Connection

onboarding.read

Required scopes: onboarding.read

Path parameters

onboarding_idREQUIRED
string<uuid>
Example value
curl "https://api.ebx.energy/v1/onboardings/00000000-0000-0000-0000-000000000000/pq-official/connection" \
  -H "Authorization: Bearer $EBX_TOKEN"
Example response200
{}
Can raise
  • 401no valid token
  • 403scope missing
  • 404unknown or not visible
  • 429rate limited
ALL CODES →
GET/v1/onboardings/{onboarding_id}/pq-official/contracts

Get Contracts

onboarding.read

Required scopes: onboarding.read

Path parameters

onboarding_idREQUIRED
string<uuid>
Example value
curl "https://api.ebx.energy/v1/onboardings/00000000-0000-0000-0000-000000000000/pq-official/contracts" \
  -H "Authorization: Bearer $EBX_TOKEN"
Example response200
{
  "portal_env": "training",
  "refreshed_at": "2026-01-01T00:00:00Z",
  "reserve_unit_id": "<string>",
  "requirements": [
    {
      "reserve_type": "FrequencyContainmentReserve",
      "selected_contract_id": "<string>",
      "options": [
        {
          "id": "<string>",
          "number": "<string>",
          "state": "Planned",
          "selectable": false,
          "portal_url": "<string>",
          "proofs": [
            {
              "id": "<string>",
              "name": "<string>",
              "state": "Planned",
              "version": 0
            }
          ]
        }
      ],
      "status": "unselected",
      "checked_at": "2026-01-01T00:00:00Z"
    }
  ],
  "error": "<string>"
}
Can raise
  • 401no valid token
  • 403scope missing
  • 404unknown or not visible
  • 429rate limited
ALL CODES →
PUT/v1/onboardings/{onboarding_id}/pq-official/contracts/{reserve_type}

Select Contract

onboarding.write

Required scopes: onboarding.write

Path parameters

onboarding_idREQUIRED
string<uuid>
reserve_typeREQUIRED
enumFrequencyContainmentReserveAutomaticFrequencyRestorationReserveManualFrequencyRestorationReserveInertiaReserve

Request body · required

contract_idREQUIRED
string<uuid>
Example value
curl -X PUT "https://api.ebx.energy/v1/onboardings/00000000-0000-0000-0000-000000000000/pq-official/contracts/FrequencyContainmentReserve" \
  -H "Authorization: Bearer $EBX_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"contract_id":"00000000-0000-0000-0000-000000000000"}'
Example response200
{
  "portal_env": "training",
  "refreshed_at": "2026-01-01T00:00:00Z",
  "reserve_unit_id": "<string>",
  "requirements": [
    {
      "reserve_type": "FrequencyContainmentReserve",
      "selected_contract_id": "<string>",
      "options": [
        {
          "id": "<string>",
          "number": "<string>",
          "state": "Planned",
          "selectable": false,
          "portal_url": "<string>",
          "proofs": [
            {
              "id": "<string>",
              "name": "<string>",
              "state": "Planned",
              "version": 0
            }
          ]
        }
      ],
      "status": "unselected",
      "checked_at": "2026-01-01T00:00:00Z"
    }
  ],
  "error": "<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-official/contracts/refresh

Refresh Contracts

onboarding.write

Required scopes: onboarding.write

Path parameters

onboarding_idREQUIRED
string<uuid>
Example value
curl -X POST "https://api.ebx.energy/v1/onboardings/00000000-0000-0000-0000-000000000000/pq-official/contracts/refresh" \
  -H "Authorization: Bearer $EBX_TOKEN"
Example response200
{
  "portal_env": "training",
  "refreshed_at": "2026-01-01T00:00:00Z",
  "reserve_unit_id": "<string>",
  "requirements": [
    {
      "reserve_type": "FrequencyContainmentReserve",
      "selected_contract_id": "<string>",
      "options": [
        {
          "id": "<string>",
          "number": "<string>",
          "state": "Planned",
          "selectable": false,
          "portal_url": "<string>",
          "proofs": [
            {
              "id": "<string>",
              "name": "<string>",
              "state": "Planned",
              "version": 0
            }
          ]
        }
      ],
      "status": "unselected",
      "checked_at": "2026-01-01T00:00:00Z"
    }
  ],
  "error": "<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}/pq-official/status

Get Application Status

onboarding.read

Required scopes: onboarding.read

Path parameters

onboarding_idREQUIRED
string<uuid>
Example value
curl "https://api.ebx.energy/v1/onboardings/00000000-0000-0000-0000-000000000000/pq-official/status" \
  -H "Authorization: Bearer $EBX_TOKEN"
Example response200
{}
Can raise
  • 401no valid token
  • 403scope missing
  • 404unknown or not visible
  • 429rate limited
ALL CODES →
POST/v1/onboardings/{onboarding_id}/pq-official/sync

Sync Official

onboarding.write

Required scopes: onboarding.write

Path parameters

onboarding_idREQUIRED
string<uuid>

Request body · required

review_idREQUIRED
string<uuid>
scopeREQUIRED
enumdataevidence
confirm_hierarchy_repair
booleandefault false
confirm_resource_recreation
booleandefault false
signoff_reason
string
confirm_anb_requests
booleandefault false
Example value
curl -X POST "https://api.ebx.energy/v1/onboardings/00000000-0000-0000-0000-000000000000/pq-official/sync" \
  -H "Authorization: Bearer $EBX_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"review_id":"00000000-0000-0000-0000-000000000000","scope":"data","confirm_hierarchy_repair":false,"confirm_resource_recreation":false,"signoff_reason":"<string>","confirm_anb_requests":false}'
Example response202
{
  "input_issues": [
    "<string>"
  ],
  "id": "00000000-0000-0000-0000-000000000000",
  "status": "queued",
  "stage": "<string>",
  "stale": false,
  "evidence_current": false,
  "started_at": "2026-01-01T00:00:00Z",
  "finished_at": "2026-01-01T00:00:00Z",
  "last_sync_requested_at": "2026-01-01T00:00:00Z",
  "last_synced_at": "2026-01-01T00:00:00Z",
  "slot": "<string>",
  "document_id": "00000000-0000-0000-0000-000000000000",
  "scope": "data",
  "result": "<string>",
  "error": "<string>",
  "pending_curves": [
    "<string>"
  ],
  "curve_failures": [
    "<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-official/sync-review

Review Sync

onboarding.write

Required scopes: onboarding.write

Path parameters

onboarding_idREQUIRED
string<uuid>

Query parameters

scope
enumdefault evidencedataevidenceThe official sync this comparison prepares; a data comparison does not read the evidence files.
Example value
curl -X POST "https://api.ebx.energy/v1/onboardings/00000000-0000-0000-0000-000000000000/pq-official/sync-review" \
  -H "Authorization: Bearer $EBX_TOKEN"
Example response202
{
  "input_issues": [
    "<string>"
  ],
  "id": "00000000-0000-0000-0000-000000000000",
  "status": "queued",
  "result": {
    "input_issues": [
      "<string>"
    ],
    "official_check": "<string>",
    "training_check": "<string>",
    "id": "00000000-0000-0000-0000-000000000000",
    "first_sync": false,
    "expires_at": "2026-01-01T00:00:00Z",
    "changes": [
      "<string>"
    ],
    "blockers": [
      "<string>"
    ],
    "missing_fields": [
      "<string>"
    ],
    "manual_follow_ups": [
      "<string>"
    ],
    "hierarchy_repair": "reconnect",
    "resource_recovery": {
      "missing_resources": "<string>"
    },
    "dso": "<string>",
    "anb": {
      "will_request": false,
      "dso_id": "<string>",
      "dso_name": "<string>",
      "previous_dso_name": "<string>",
      "dso_changes": false,
      "reserves": [
        {
          "product": "<string>",
          "reserve_type": "<string>",
          "reserve_direction": "<string>",
          "state": "<string>",
          "selected": true,
          "will_request": false
        }
      ]
    }
  },
  "error": "<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-official/sync-review/{job_id}

Get Review

onboarding.read

Required scopes: onboarding.read

Path parameters

onboarding_idREQUIRED
string<uuid>
job_idREQUIRED
string<uuid>
Example value
curl "https://api.ebx.energy/v1/onboardings/00000000-0000-0000-0000-000000000000/pq-official/sync-review/00000000-0000-0000-0000-000000000000" \
  -H "Authorization: Bearer $EBX_TOKEN"
Example response200
{
  "input_issues": [
    "<string>"
  ],
  "id": "00000000-0000-0000-0000-000000000000",
  "status": "queued",
  "result": {
    "input_issues": [
      "<string>"
    ],
    "official_check": "<string>",
    "training_check": "<string>",
    "id": "00000000-0000-0000-0000-000000000000",
    "first_sync": false,
    "expires_at": "2026-01-01T00:00:00Z",
    "changes": [
      "<string>"
    ],
    "blockers": [
      "<string>"
    ],
    "missing_fields": [
      "<string>"
    ],
    "manual_follow_ups": [
      "<string>"
    ],
    "hierarchy_repair": "reconnect",
    "resource_recovery": {
      "missing_resources": "<string>"
    },
    "dso": "<string>",
    "anb": {
      "will_request": false,
      "dso_id": "<string>",
      "dso_name": "<string>",
      "previous_dso_name": "<string>",
      "dso_changes": false,
      "reserves": [
        {
          "product": "<string>",
          "reserve_type": "<string>",
          "reserve_direction": "<string>",
          "state": "<string>",
          "selected": true,
          "will_request": false
        }
      ]
    }
  },
  "error": "<string>"
}
Can raise
  • 401no valid token
  • 403scope missing
  • 404unknown or not visible
  • 429rate limited
ALL CODES →
PUT/v1/onboardings/{onboarding_id}/pq-official/target

Set Target

onboarding.write

Required scopes: onboarding.write

Path parameters

onboarding_idREQUIRED
string<uuid>

Request body · required

technical_unit_idREQUIRED
string<uuid>
reserve_unit_idREQUIRED
string<uuid>
Example value
curl -X PUT "https://api.ebx.energy/v1/onboardings/00000000-0000-0000-0000-000000000000/pq-official/target" \
  -H "Authorization: Bearer $EBX_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"technical_unit_id":"00000000-0000-0000-0000-000000000000","reserve_unit_id":"00000000-0000-0000-0000-000000000000"}'
Example response200
{}
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-official/targets

Get Targets

onboarding.read

Required scopes: onboarding.read

Path parameters

onboarding_idREQUIRED
string<uuid>
Example value
curl "https://api.ebx.energy/v1/onboardings/00000000-0000-0000-0000-000000000000/pq-official/targets" \
  -H "Authorization: Bearer $EBX_TOKEN"
Example response200
{}
Can raise
  • 401no valid token
  • 403scope missing
  • 404unknown or not visible
  • 429rate limited
ALL CODES →
GET/v1/onboardings/{onboarding_id}/pq-official/workspace

Get Workspace

onboarding.read

Required scopes: onboarding.read

Path parameters

onboarding_idREQUIRED
string<uuid>
Example value
curl "https://api.ebx.energy/v1/onboardings/00000000-0000-0000-0000-000000000000/pq-official/workspace" \
  -H "Authorization: Bearer $EBX_TOKEN"
Example response200
{}
Can raise
  • 401no valid token
  • 403scope missing
  • 404unknown or not visible
  • 429rate limited
ALL CODES →
POST/v1/onboardings/{onboarding_id}/pq-proofs

Generate the PQ Portal proof workbook for a Betriebsfahrt run

onboarding.write

Required scopes: 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-10-22T20:30:00Z",
    "end": "2026-10-22T20:30:00Z",
    "operating_point_mw": "0",
    "requested_capacity_mw": "<string>",
    "setpoint_schedule": [
      {
        "start": "2026-10-22T20:30:00Z",
        "end": "2026-10-22T20: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

Required scopes: 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-10-22T20:30:00Z",
    "end": "2026-10-22T20:30:00Z",
    "operating_point_mw": "0",
    "requested_capacity_mw": "<string>",
    "setpoint_schedule": [
      {
        "start": "2026-10-22T20:30:00Z",
        "end": "2026-10-22T20: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 →
POST/v1/onboardings/{onboarding_id}/pq-proofs/import

Create a Betriebsfahrt run from an uploaded workbook

onboarding.write

Required scopes: onboarding.write

Path parameters

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

Request body · required

document_idREQUIRED
string<uuid>
productREQUIRED
enumfcrafrrmfrr
direction
enumpositivenegative
Example value
curl -X POST "https://api.ebx.energy/v1/onboardings/00000000-0000-0000-0000-000000000000/pq-proofs/import" \
  -H "Authorization: Bearer $EBX_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"document_id":"00000000-0000-0000-0000-000000000000","product":"fcr","direction":"positive"}'
Example response200
{
  "run_index": 0,
  "run": {
    "product": "fcr",
    "direction": "positive",
    "start": "2026-10-22T20:30:00Z",
    "end": "2026-10-22T20:30:00Z",
    "operating_point_mw": "0",
    "requested_capacity_mw": "<string>",
    "setpoint_schedule": [
      {
        "start": "2026-10-22T20:30:00Z",
        "end": "2026-10-22T20: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

Required scopes: 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>",
    "reserve_unit_concept_name": "<string>",
    "products": [
      "<string>"
    ],
    "power_caps_mw": "<string>",
    "delivery_duration_caps_hours": "<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

Required scopes: 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

Required scopes: 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

Required scopes: 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>",
    "reserve_unit_concept_name": "<string>",
    "products": [
      "<string>"
    ],
    "power_caps_mw": "<string>",
    "delivery_duration_caps_hours": "<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

Required scopes: 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, reads the digital DSO confirmations without requesting them, uploads the proof workbooks, waits for the portal's analysis, sets the requested values and reads the portal's evaluation. ANB requests require an explicit engineer action in the PQ portal. 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>",
    "reserve_unit_concept_name": "<string>",
    "products": [
      "<string>"
    ],
    "power_caps_mw": "<string>",
    "delivery_duration_caps_hours": "<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

Required scopes: 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
reserve_unit_concept_name
string
products
array[string]
power_caps_mw
object
delivery_duration_caps_hours
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>","reserve_unit_concept_name":"<string>","products":["<string>"],"power_caps_mw":"<string>","delivery_duration_caps_hours":"<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>",
    "reserve_unit_concept_name": "<string>",
    "products": [
      "<string>"
    ],
    "power_caps_mw": "<string>",
    "delivery_duration_caps_hours": "<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

Required scopes: 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

Required scopes: 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>",
    "reserve_unit_concept_name": "<string>",
    "products": [
      "<string>"
    ],
    "power_caps_mw": "<string>",
    "delivery_duration_caps_hours": "<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

Required scopes: 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>",
    "reserve_unit_concept_name": "<string>",
    "products": [
      "<string>"
    ],
    "power_caps_mw": "<string>",
    "delivery_duration_caps_hours": "<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

Required scopes: 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>",
    "reserve_unit_concept_name": "<string>",
    "products": [
      "<string>"
    ],
    "power_caps_mw": "<string>",
    "delivery_duration_caps_hours": "<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-training/connection

Get Connection

onboarding.read

Required scopes: onboarding.read

Path parameters

onboarding_idREQUIRED
string<uuid>
Example value
curl "https://api.ebx.energy/v1/onboardings/00000000-0000-0000-0000-000000000000/pq-training/connection" \
  -H "Authorization: Bearer $EBX_TOKEN"
Example response200
{}
Can raise
  • 401no valid token
  • 403scope missing
  • 404unknown or not visible
  • 429rate limited
ALL CODES →
GET/v1/onboardings/{onboarding_id}/pq-training/contracts

Get Contracts

onboarding.read

Required scopes: onboarding.read

Path parameters

onboarding_idREQUIRED
string<uuid>
Example value
curl "https://api.ebx.energy/v1/onboardings/00000000-0000-0000-0000-000000000000/pq-training/contracts" \
  -H "Authorization: Bearer $EBX_TOKEN"
Example response200
{
  "portal_env": "training",
  "refreshed_at": "2026-01-01T00:00:00Z",
  "reserve_unit_id": "<string>",
  "requirements": [
    {
      "reserve_type": "FrequencyContainmentReserve",
      "selected_contract_id": "<string>",
      "options": [
        {
          "id": "<string>",
          "number": "<string>",
          "state": "Planned",
          "selectable": false,
          "portal_url": "<string>",
          "proofs": [
            {
              "id": "<string>",
              "name": "<string>",
              "state": "Planned",
              "version": 0
            }
          ]
        }
      ],
      "status": "unselected",
      "checked_at": "2026-01-01T00:00:00Z"
    }
  ],
  "error": "<string>"
}
Can raise
  • 401no valid token
  • 403scope missing
  • 404unknown or not visible
  • 429rate limited
ALL CODES →
PUT/v1/onboardings/{onboarding_id}/pq-training/contracts/{reserve_type}

Select Contract

onboarding.write

Required scopes: onboarding.write

Path parameters

onboarding_idREQUIRED
string<uuid>
reserve_typeREQUIRED
enumFrequencyContainmentReserveAutomaticFrequencyRestorationReserveManualFrequencyRestorationReserveInertiaReserve

Request body · required

contract_idREQUIRED
string<uuid>
Example value
curl -X PUT "https://api.ebx.energy/v1/onboardings/00000000-0000-0000-0000-000000000000/pq-training/contracts/FrequencyContainmentReserve" \
  -H "Authorization: Bearer $EBX_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"contract_id":"00000000-0000-0000-0000-000000000000"}'
Example response200
{
  "portal_env": "training",
  "refreshed_at": "2026-01-01T00:00:00Z",
  "reserve_unit_id": "<string>",
  "requirements": [
    {
      "reserve_type": "FrequencyContainmentReserve",
      "selected_contract_id": "<string>",
      "options": [
        {
          "id": "<string>",
          "number": "<string>",
          "state": "Planned",
          "selectable": false,
          "portal_url": "<string>",
          "proofs": [
            {
              "id": "<string>",
              "name": "<string>",
              "state": "Planned",
              "version": 0
            }
          ]
        }
      ],
      "status": "unselected",
      "checked_at": "2026-01-01T00:00:00Z"
    }
  ],
  "error": "<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-training/contracts/refresh

Refresh Contracts

onboarding.write

Required scopes: onboarding.write

Path parameters

onboarding_idREQUIRED
string<uuid>
Example value
curl -X POST "https://api.ebx.energy/v1/onboardings/00000000-0000-0000-0000-000000000000/pq-training/contracts/refresh" \
  -H "Authorization: Bearer $EBX_TOKEN"
Example response200
{
  "portal_env": "training",
  "refreshed_at": "2026-01-01T00:00:00Z",
  "reserve_unit_id": "<string>",
  "requirements": [
    {
      "reserve_type": "FrequencyContainmentReserve",
      "selected_contract_id": "<string>",
      "options": [
        {
          "id": "<string>",
          "number": "<string>",
          "state": "Planned",
          "selectable": false,
          "portal_url": "<string>",
          "proofs": [
            {
              "id": "<string>",
              "name": "<string>",
              "state": "Planned",
              "version": 0
            }
          ]
        }
      ],
      "status": "unselected",
      "checked_at": "2026-01-01T00:00:00Z"
    }
  ],
  "error": "<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}/pq-training/evidence/{slot}/analysis

Get Analysis

onboarding.read

Required scopes: onboarding.read

Path parameters

onboarding_idREQUIRED
string<uuid>
slotREQUIRED
string
Example value
curl "https://api.ebx.energy/v1/onboardings/00000000-0000-0000-0000-000000000000/pq-training/evidence/fcr-positive/analysis" \
  -H "Authorization: Bearer $EBX_TOKEN"
Example response200
{
  "slot": "<string>",
  "document_id": "00000000-0000-0000-0000-000000000000",
  "portal_version_id": "<string>",
  "analysis": "<string>",
  "chart": "<string>",
  "chart_error": "<string>"
}
Can raise
  • 401no valid token
  • 403scope missing
  • 404unknown or not visible
  • 429rate limited
ALL CODES →
POST/v1/onboardings/{onboarding_id}/pq-training/evidence/{slot}/tests

Start Curve

onboarding.write

Required scopes: onboarding.write

Path parameters

onboarding_idREQUIRED
string<uuid>
slotREQUIRED
string

Query parameters

document_idREQUIRED
string<uuid>
Example value
curl -X POST "https://api.ebx.energy/v1/onboardings/00000000-0000-0000-0000-000000000000/pq-training/evidence/fcr-positive/tests?document_id=00000000-0000-0000-0000-000000000000" \
  -H "Authorization: Bearer $EBX_TOKEN"
Example response202
{
  "input_issues": [
    "<string>"
  ],
  "id": "00000000-0000-0000-0000-000000000000",
  "status": "queued",
  "stage": "<string>",
  "stale": false,
  "evidence_current": false,
  "started_at": "2026-01-01T00:00:00Z",
  "finished_at": "2026-01-01T00:00:00Z",
  "last_sync_requested_at": "2026-01-01T00:00:00Z",
  "last_synced_at": "2026-01-01T00:00:00Z",
  "slot": "<string>",
  "document_id": "00000000-0000-0000-0000-000000000000",
  "scope": "data",
  "result": "<string>",
  "error": "<string>",
  "pending_curves": [
    "<string>"
  ],
  "curve_failures": [
    "<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-training/sync-review

Review Sync

onboarding.write

Required scopes: onboarding.write

Path parameters

onboarding_idREQUIRED
string<uuid>
Example value
curl -X POST "https://api.ebx.energy/v1/onboardings/00000000-0000-0000-0000-000000000000/pq-training/sync-review" \
  -H "Authorization: Bearer $EBX_TOKEN"
Example response202
{
  "input_issues": [
    "<string>"
  ],
  "id": "00000000-0000-0000-0000-000000000000",
  "status": "queued",
  "result": {
    "input_issues": [
      "<string>"
    ],
    "official_check": "<string>",
    "training_check": "<string>",
    "id": "00000000-0000-0000-0000-000000000000",
    "first_sync": false,
    "expires_at": "2026-01-01T00:00:00Z",
    "changes": [
      "<string>"
    ],
    "blockers": [
      "<string>"
    ],
    "missing_fields": [
      "<string>"
    ],
    "manual_follow_ups": [
      "<string>"
    ],
    "hierarchy_repair": "reconnect",
    "resource_recovery": {
      "missing_resources": "<string>"
    },
    "dso": "<string>",
    "anb": {
      "will_request": false,
      "dso_id": "<string>",
      "dso_name": "<string>",
      "previous_dso_name": "<string>",
      "dso_changes": false,
      "reserves": [
        {
          "product": "<string>",
          "reserve_type": "<string>",
          "reserve_direction": "<string>",
          "state": "<string>",
          "selected": true,
          "will_request": false
        }
      ]
    }
  },
  "error": "<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}/pq-training/sync-review/{job_id}

Get Review

onboarding.read

Required scopes: onboarding.read

Path parameters

onboarding_idREQUIRED
string<uuid>
job_idREQUIRED
string<uuid>
Example value
curl "https://api.ebx.energy/v1/onboardings/00000000-0000-0000-0000-000000000000/pq-training/sync-review/00000000-0000-0000-0000-000000000000" \
  -H "Authorization: Bearer $EBX_TOKEN"
Example response200
{
  "input_issues": [
    "<string>"
  ],
  "id": "00000000-0000-0000-0000-000000000000",
  "status": "queued",
  "result": {
    "input_issues": [
      "<string>"
    ],
    "official_check": "<string>",
    "training_check": "<string>",
    "id": "00000000-0000-0000-0000-000000000000",
    "first_sync": false,
    "expires_at": "2026-01-01T00:00:00Z",
    "changes": [
      "<string>"
    ],
    "blockers": [
      "<string>"
    ],
    "missing_fields": [
      "<string>"
    ],
    "manual_follow_ups": [
      "<string>"
    ],
    "hierarchy_repair": "reconnect",
    "resource_recovery": {
      "missing_resources": "<string>"
    },
    "dso": "<string>",
    "anb": {
      "will_request": false,
      "dso_id": "<string>",
      "dso_name": "<string>",
      "previous_dso_name": "<string>",
      "dso_changes": false,
      "reserves": [
        {
          "product": "<string>",
          "reserve_type": "<string>",
          "reserve_direction": "<string>",
          "state": "<string>",
          "selected": true,
          "will_request": false
        }
      ]
    }
  },
  "error": "<string>"
}
Can raise
  • 401no valid token
  • 403scope missing
  • 404unknown or not visible
  • 429rate limited
ALL CODES →
PATCH/v1/onboardings/{onboarding_id}/pq-training/sync-review/{review_id}/inputs

Save Inputs

onboarding.write

Required scopes: onboarding.write

Path parameters

onboarding_idREQUIRED
string<uuid>
review_idREQUIRED
string<uuid>

Request body · required

fieldsREQUIRED
object
Example value
curl -X PATCH "https://api.ebx.energy/v1/onboardings/00000000-0000-0000-0000-000000000000/pq-training/sync-review/00000000-0000-0000-0000-000000000000/inputs" \
  -H "Authorization: Bearer $EBX_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"fields":"<string>"}'
Example response200
{
  "review": {
    "input_issues": [
      "<string>"
    ],
    "official_check": "<string>",
    "training_check": "<string>",
    "id": "00000000-0000-0000-0000-000000000000",
    "first_sync": false,
    "expires_at": "2026-01-01T00:00:00Z",
    "changes": [
      "<string>"
    ],
    "blockers": [
      "<string>"
    ],
    "missing_fields": [
      "<string>"
    ],
    "manual_follow_ups": [
      "<string>"
    ],
    "hierarchy_repair": "reconnect",
    "resource_recovery": {
      "missing_resources": "<string>"
    },
    "dso": "<string>",
    "anb": {
      "will_request": false,
      "dso_id": "<string>",
      "dso_name": "<string>",
      "previous_dso_name": "<string>",
      "dso_changes": false,
      "reserves": [
        {
          "product": "<string>",
          "reserve_type": "<string>",
          "reserve_direction": "<string>",
          "state": "<string>",
          "selected": true,
          "will_request": false
        }
      ]
    }
  },
  "onboarding": {
    "archived_at": "<string>",
    "project_settings": {
      "deadline_overrides": "<string>",
      "contacts": {
        "asset_owner": {
          "name": "<string>",
          "email": "<string>",
          "phone": "<string>",
          "company": "<string>",
          "notes": "<string>"
        },
        "epc": {
          "name": "<string>",
          "email": "<string>",
          "phone": "<string>",
          "company": "<string>",
          "notes": "<string>"
        },
        "ems_provider": {
          "name": "<string>",
          "email": "<string>",
          "phone": "<string>",
          "company": "<string>",
          "notes": "<string>"
        },
        "ebx": {
          "name": "<string>",
          "email": "<string>",
          "phone": "<string>",
          "company": "<string>",
          "notes": "<string>"
        },
        "partner": {
          "name": "<string>",
          "email": "<string>",
          "phone": "<string>",
          "company": "<string>",
          "notes": "<string>"
        }
      },
      "co_location": "<string>",
      "start": "2026-01-01",
      "original": "2026-01-01",
      "estimatedOverride": "2026-01-01"
    },
    "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,
    "is_transition": 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,
        "requirement_key": "<string>",
        "review_status": "accepted",
        "reviewed_at": "<string>",
        "reviewed_by_user_name": "<string>",
        "review_note": "<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>",
          "owner": "asset_owner",
          "due_date": "2026-01-01",
          "category": "grid_dso",
          "decision": "<string>",
          "resolved_by_user_name": "<string>",
          "visibility": "internal"
        }
      ],
      "applied_templates": [
        "<string>"
      ]
    },
    "notes": [
      {
        "id": "<string>",
        "body": "<string>",
        "visibility": "internal",
        "author_user_name": "<string>",
        "created_at": "<string>"
      }
    ],
    "shared_open_points": [
      {
        "id": "<string>",
        "title": "<string>",
        "status": "open",
        "owner": "asset_owner",
        "category": "grid_dso",
        "due_date": "2026-01-01",
        "decision": "<string>",
        "comments": [
          {
            "id": "<string>",
            "author_user_name": "<string>",
            "author_org_name": "<string>",
            "author_side": "ebx",
            "created_at": "<string>",
            "body": "<string>"
          }
        ],
        "created_at": "<string>",
        "updated_at": "<string>",
        "resolved_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-training/tests

Get Test

onboarding.read

Required scopes: onboarding.read

Path parameters

onboarding_idREQUIRED
string<uuid>

Query parameters

refresh_evaluations
booleandefault true
Example value
curl "https://api.ebx.energy/v1/onboardings/00000000-0000-0000-0000-000000000000/pq-training/tests" \
  -H "Authorization: Bearer $EBX_TOKEN"
Example response200
{
  "input_issues": [
    "<string>"
  ],
  "id": "00000000-0000-0000-0000-000000000000",
  "status": "queued",
  "stage": "<string>",
  "stale": false,
  "evidence_current": false,
  "started_at": "2026-01-01T00:00:00Z",
  "finished_at": "2026-01-01T00:00:00Z",
  "last_sync_requested_at": "2026-01-01T00:00:00Z",
  "last_synced_at": "2026-01-01T00:00:00Z",
  "slot": "<string>",
  "document_id": "00000000-0000-0000-0000-000000000000",
  "scope": "data",
  "result": "<string>",
  "error": "<string>",
  "pending_curves": [
    "<string>"
  ],
  "curve_failures": [
    "<string>"
  ]
}
Can raise
  • 401no valid token
  • 403scope missing
  • 404unknown or not visible
  • 422validation failed
  • 429rate limited
ALL CODES →
POST/v1/onboardings/{onboarding_id}/pq-training/tests

Start Test

onboarding.write

Required scopes: onboarding.write

Path parameters

onboarding_idREQUIRED
string<uuid>

Query parameters

review_idREQUIRED
string<uuid>
allow_hierarchy_repair
booleandefault false
allow_resource_recreation
booleandefault false
Example value
curl -X POST "https://api.ebx.energy/v1/onboardings/00000000-0000-0000-0000-000000000000/pq-training/tests?review_id=00000000-0000-0000-0000-000000000000" \
  -H "Authorization: Bearer $EBX_TOKEN"
Example response202
{
  "input_issues": [
    "<string>"
  ],
  "id": "00000000-0000-0000-0000-000000000000",
  "status": "queued",
  "stage": "<string>",
  "stale": false,
  "evidence_current": false,
  "started_at": "2026-01-01T00:00:00Z",
  "finished_at": "2026-01-01T00:00:00Z",
  "last_sync_requested_at": "2026-01-01T00:00:00Z",
  "last_synced_at": "2026-01-01T00:00:00Z",
  "slot": "<string>",
  "document_id": "00000000-0000-0000-0000-000000000000",
  "scope": "data",
  "result": "<string>",
  "error": "<string>",
  "pending_curves": [
    "<string>"
  ],
  "curve_failures": [
    "<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-training/workspace

Get Workspace

onboarding.read

Required scopes: onboarding.read

Path parameters

onboarding_idREQUIRED
string<uuid>
Example value
curl "https://api.ebx.energy/v1/onboardings/00000000-0000-0000-0000-000000000000/pq-training/workspace" \
  -H "Authorization: Bearer $EBX_TOKEN"
Example response200
{
  "profile": {
    "balance_group_responsible_name": "<string>",
    "balance_group_eic_x": "<string>",
    "contractor_name": "<string>",
    "connection_type_control_system_name": "<string>",
    "reserve_unit_concept_name": "<string>",
    "products": [
      "<string>"
    ],
    "power_caps_mw": "<string>",
    "delivery_duration_caps_hours": "<string>"
  },
  "derived_products": [
    "<string>"
  ],
  "integration_enabled": false
}
Can raise
  • 401no valid token
  • 403scope missing
  • 404unknown or not visible
  • 429rate limited
ALL CODES →
PATCH/v1/onboardings/{onboarding_id}/rfi

Update the RfI on behalf of the asset owner

onboarding.write

Required scopes: 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":{"planned_cod":"2026-01-01","partners":"<string>","network_revision":0,"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":"","subnet_mask":"","gateway":"","ems_mode":"client","ems_port":0,"ems_unit_id":0,"ems_byte_word_order":"ABCD","ems_poll_interval_ms":0,"ems_timeout_ms":0,"ems_batching":{"max_read_registers":125,"max_read_gap_registers":32,"max_write_registers":123,"max_write_gap_registers":0,"fill_write_gaps_from_shadow":false,"write_cache_ttl_seconds":2}},"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_input_mode":"owner","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_selections":"<string>","pq_documents":"<string>","notes":"<string>"},"field_meta":"<string>"}}'
Example response200
{
  "archived_at": "<string>",
  "project_settings": {
    "deadline_overrides": "<string>",
    "contacts": {
      "asset_owner": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      },
      "epc": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      },
      "ems_provider": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      },
      "ebx": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      },
      "partner": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      }
    },
    "co_location": "<string>",
    "start": "2026-01-01",
    "original": "2026-01-01",
    "estimatedOverride": "2026-01-01"
  },
  "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,
  "is_transition": 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,
      "requirement_key": "<string>",
      "review_status": "accepted",
      "reviewed_at": "<string>",
      "reviewed_by_user_name": "<string>",
      "review_note": "<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>",
        "owner": "asset_owner",
        "due_date": "2026-01-01",
        "category": "grid_dso",
        "decision": "<string>",
        "resolved_by_user_name": "<string>",
        "visibility": "internal"
      }
    ],
    "applied_templates": [
      "<string>"
    ]
  },
  "notes": [
    {
      "id": "<string>",
      "body": "<string>",
      "visibility": "internal",
      "author_user_name": "<string>",
      "created_at": "<string>"
    }
  ],
  "shared_open_points": [
    {
      "id": "<string>",
      "title": "<string>",
      "status": "open",
      "owner": "asset_owner",
      "category": "grid_dso",
      "due_date": "2026-01-01",
      "decision": "<string>",
      "comments": [
        {
          "id": "<string>",
          "author_user_name": "<string>",
          "author_org_name": "<string>",
          "author_side": "ebx",
          "created_at": "<string>",
          "body": "<string>"
        }
      ],
      "created_at": "<string>",
      "updated_at": "<string>",
      "resolved_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}/rfi-catalogues/{catalogue}

Read cached PQ choices for RfI

onboarding.read

Required scopes: onboarding.read

Path parameters

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

Query parameters

query
stringdefault
dso
stringdefault DSO selection id; marks its balancing areas as suggested
tso
stringdefault
Example value
curl "https://api.ebx.energy/v1/onboardings/00000000-0000-0000-0000-000000000000/rfi-catalogues/tsos" \
  -H "Authorization: Bearer $EBX_TOKEN"
Example response200
{}
Can raise
  • 401no valid token
  • 403scope missing
  • 404unknown or not visible
  • 422validation failed
  • 429rate limited
ALL CODES →
POST/v1/onboardings/{onboarding_id}/rfi/fields/{field_key}/comments

Comment on an RfI field

onboarding.write

Required scopes: 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

Required scopes: 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}/rfi/pq-data/{field_key}

Update a single RfI PQ-workbook field

onboarding.write

Required scopes: onboarding.write

Sets one control.pq_data field on the RFI gate and leaves every other RfI value at its stored state. For surfaces that edit a single PQ field outside the RfI form, where sending the whole payload would revert concurrent form edits. Only the PQ fields a single-field surface registers are writable here; any other key is rejected with 422. Also 422 on monitoring-only onboardings, which have no control section, and 409 once the PQ application has frozen its inputs.

Path parameters

onboarding_idREQUIRED
string<uuid>Stable onboarding identifier returned by create and list operations.
field_keyREQUIRED
stringPQ-workbook field key inside the RfI control section, for example planned_cod.

Request body · required

valueREQUIRED
stringNew value for the PQ-workbook field, or null to clear it.
Example value
curl -X PATCH "https://api.ebx.energy/v1/onboardings/00000000-0000-0000-0000-000000000000/rfi/pq-data/m_device.shipping_address" \
  -H "Authorization: Bearer $EBX_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"value":"<string>"}'
Example response200
{
  "archived_at": "<string>",
  "project_settings": {
    "deadline_overrides": "<string>",
    "contacts": {
      "asset_owner": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      },
      "epc": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      },
      "ems_provider": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      },
      "ebx": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      },
      "partner": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      }
    },
    "co_location": "<string>",
    "start": "2026-01-01",
    "original": "2026-01-01",
    "estimatedOverride": "2026-01-01"
  },
  "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,
  "is_transition": 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,
      "requirement_key": "<string>",
      "review_status": "accepted",
      "reviewed_at": "<string>",
      "reviewed_by_user_name": "<string>",
      "review_note": "<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>",
        "owner": "asset_owner",
        "due_date": "2026-01-01",
        "category": "grid_dso",
        "decision": "<string>",
        "resolved_by_user_name": "<string>",
        "visibility": "internal"
      }
    ],
    "applied_templates": [
      "<string>"
    ]
  },
  "notes": [
    {
      "id": "<string>",
      "body": "<string>",
      "visibility": "internal",
      "author_user_name": "<string>",
      "created_at": "<string>"
    }
  ],
  "shared_open_points": [
    {
      "id": "<string>",
      "title": "<string>",
      "status": "open",
      "owner": "asset_owner",
      "category": "grid_dso",
      "due_date": "2026-01-01",
      "decision": "<string>",
      "comments": [
        {
          "id": "<string>",
          "author_user_name": "<string>",
          "author_org_name": "<string>",
          "author_side": "ebx",
          "created_at": "<string>",
          "body": "<string>"
        }
      ],
      "created_at": "<string>",
      "updated_at": "<string>",
      "resolved_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}/shared-open-points/{point_id}/comments

Reply on an open point EBX shared

onboarding.write

Required scopes: onboarding.write

Appends a reply from the asset owner to an open point EBX shared with them. Only open, shared points take replies: a point that is not shared answers 404, a closed one 409 (EBX closes points with their decision).

Path parameters

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

Request body · required

bodyREQUIRED
string
Example value
curl -X POST "https://api.ebx.energy/v1/onboardings/00000000-0000-0000-0000-000000000000/shared-open-points/op-77/comments" \
  -H "Authorization: Bearer $EBX_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"body":"<string>"}'
Example response200
{
  "id": "<string>",
  "title": "<string>",
  "status": "open",
  "owner": "asset_owner",
  "category": "grid_dso",
  "due_date": "2026-01-01",
  "decision": "<string>",
  "comments": [
    {
      "id": "<string>",
      "author_user_name": "<string>",
      "author_org_name": "<string>",
      "author_side": "ebx",
      "created_at": "<string>",
      "body": "<string>"
    }
  ],
  "created_at": "<string>",
  "updated_at": "<string>",
  "resolved_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

Required scopes: 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
{
  "archived_at": "<string>",
  "project_settings": {
    "deadline_overrides": "<string>",
    "contacts": {
      "asset_owner": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      },
      "epc": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      },
      "ems_provider": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      },
      "ebx": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      },
      "partner": {
        "name": "<string>",
        "email": "<string>",
        "phone": "<string>",
        "company": "<string>",
        "notes": "<string>"
      }
    },
    "co_location": "<string>",
    "start": "2026-01-01",
    "original": "2026-01-01",
    "estimatedOverride": "2026-01-01"
  },
  "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,
  "is_transition": 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,
      "requirement_key": "<string>",
      "review_status": "accepted",
      "reviewed_at": "<string>",
      "reviewed_by_user_name": "<string>",
      "review_note": "<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>",
        "owner": "asset_owner",
        "due_date": "2026-01-01",
        "category": "grid_dso",
        "decision": "<string>",
        "resolved_by_user_name": "<string>",
        "visibility": "internal"
      }
    ],
    "applied_templates": [
      "<string>"
    ]
  },
  "notes": [
    {
      "id": "<string>",
      "body": "<string>",
      "visibility": "internal",
      "author_user_name": "<string>",
      "created_at": "<string>"
    }
  ],
  "shared_open_points": [
    {
      "id": "<string>",
      "title": "<string>",
      "status": "open",
      "owner": "asset_owner",
      "category": "grid_dso",
      "due_date": "2026-01-01",
      "decision": "<string>",
      "comments": [
        {
          "id": "<string>",
          "author_user_name": "<string>",
          "author_org_name": "<string>",
          "author_side": "ebx",
          "created_at": "<string>",
          "body": "<string>"
        }
      ],
      "created_at": "<string>",
      "updated_at": "<string>",
      "resolved_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/standards/dpl

List standard DPL templates

onboarding.read

Required scopes: 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

Required scopes: 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/onboardings/summaries

List visible onboardings as summaries

onboarding.read

Required scopes: onboarding.read

Returns the same onboardings as GET /onboardings, with the same filters and visibility, but only where each one stands: asset, overall status, current gate, and every gate's status and deadline in process order. Use it to find an onboarding, then fetch its full record by id.

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/summaries" \
  -H "Authorization: Bearer $EBX_TOKEN"
Example response200
{
  "onboardings": [
    {
      "archived_at": "<string>",
      "id": "<string>",
      "asset_id": "<string>",
      "asset_name": "<string>",
      "location": "<string>",
      "country": "<string>",
      "tso": "<string>",
      "integration_type": "monitoring_only",
      "target_hc_date": "2026-01-01",
      "overall_status": "in_progress",
      "current_gate_definition_id": "mon_rfi",
      "asset_owner_org_name": "<string>",
      "is_transition": false,
      "gates": [
        {
          "definition_id": "mon_rfi",
          "title": "<string>",
          "status": "pending",
          "deadline": "2026-01-01"
        }
      ],
      "updated_at": "2026-10-22T20:30:00Z"
    }
  ]
}
Can raise
  • 401no valid token
  • 403scope missing
  • 422validation failed
  • 429rate limited
ALL CODES →
GET/v1/public/onboarding-branding/{organization_id}/email-banner

Get a whitelabel onboarding email banner

Authentication: none

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