Safe Isolation Provider (SIP) API v2

The Safe Isolation Providor (SIP) API enables Installers, including Electric Vehicle (EV) charging, solar, battery and Heat Pump installation companies, to install isolators and send regulatory market messages following de-energisation and re-energisation.

The service notifies Energy Suppliers and Distribution Network Operators (DNOs) of any faults, ensuring essential communication with Suppliers, DNOs, and Asset Managers via the market messaging system. This helps maintain compliance with regulations, streamlines operations, and enhances reliability in the EV charging infrastructure.

<aside> ❗ You need an integration token to interact with the SIP API. You can find an integration token after you create an integration on the integration settings page.

</aside>

SIP API v2 Scenario Blocks

The following table outlines the suggested blocks for each scenario in the SIP API v2. An "X" indicates that the block is required or relevant for that scenario.

Scenario job_details contact meter readings dno_issue tampering additional_info maintenance failure_reason site_visit_issue_code
S1 X X X
S2 X X X X X X
S3 X X X X
S4 X X X X X X X
S5 X X X X X
S6 X X X X X X X
S7 X X X X X X X
S8 X X X X X X X
S9 X X X X X X X

Scenario Key:

API Endpoint

POST /v2/job-data

Request Headers

Block Definitions

  1. job_details (Required for all scenarios)
{
  "job_id": string,
  "outcome_code": "CO" | "IP" | "AB",
  "sip_id": string,
  "supplier_mpid": string,
  "mpan": string,
  "date_of_action": string // YYYY-MM-DD
}

  1. contact (Required for all scenarios)
{
  "name": string,
  "telephone": string
}

  1. meter
{
  "serial_number": string,
  "location": string,
  "register_id": string,
  "smart_meter": boolean,
  "fault": boolean
}

  1. readings
{
  "readings": [
    {
      "type": string,
      "value": number
    }
  ]
}

  1. dno_issue
{
  "code": "A" | "B" | "C",
  "comment": string
}

  1. tampering
{
  "code": string,
  "description": string
}

  1. additional_info
{
  "additional_info": string
}

  1. maintenance
{
  "date": string, // YYYY-MM-DD
  "nature": string,
  "site_visit_check_code": string
}

  1. failure_reason
{
  "failure_reason": string
}

  1. site_visit_issue_code
{
  "site_visit_issue_code": string
}

Scenarios and JSON Examples

1. Job Completed Within a Day Without Issues (S1)

Required Blocks: job_details, contact, additional_info

{
  "job_id": "JOB123456",
  "outcome_code": "CO",
  "sip_id": "ABCD",
  "supplier_mpid": "SUPP",
  "mpan": "1234567890123",
  "date_of_action": "2024-08-23",
  "address": {
    "line1": "123 Electric Avenue",
    "line2": "Powertown",
    "city": "Voltagecity",
    "county": "Energyshire",
    "postcode": "EL1 2CT"
  },
  "contact": {
    "name": "John Doe",
    "telephone": "07123456789"
  },
  "meter": {
    "serial_number": "MSN123456",
    "location": "Outside, north wall",
    "register_id": "01",
    "smart_meter": true,
    "fault": false
  },
  "readings": [
    {
      "type": "N",
      "value": 12345
    }
  ],
  "additional_info": "EV charger installed successfully",
  "sip_ani": {
    "medical": false,
    "third_party_presence": false
  },
  "maintenance": {
    "date": "2024-08-23",
    "nature": "Standard installation and testing",
    "site_visit_check_code": "42"
  }
}

2. Job Completed Within a Day With Metering Issues (S2)

Required Blocks: job_details, contact, meter, readings, site_visit_issue_code, additional_info

{
  "job_id": "JOB789012",
  "outcome_code": "CO",
  "sip_id": "EFGH",
  "supplier_mpid": "SUPP",
  "mpan": "9876543210987",
  "date_of_action": "2024-08-23",
  "address": {
    "line1": "456 Voltage Street",
    "line2": "Ampere District",
    "city": "Circuitville",
    "county": "Ohmsshire",
    "postcode": "CV1 2AC"
  },
  "contact": {
    "name": "Jane Smith",
    "telephone": "07987654321"
  },
  "meter": {
    "serial_number": "MSN789012",
    "location": "Inside, utility room",
    "register_id": "02",
    "smart_meter": true,
    "fault": true
  },
  "readings": [
    {
      "type": "N",
      "value": 54321
    }
  ],
  "additional_info": "EV charger installed successfully. Meter displaying incorrect readings.",
  "sip_ani": {
    "medical": false,
    "third_party_presence": false
  },
  "maintenance": {
    "date": "2024-08-23",
    "nature": "EV charger installation and meter fault investigation",
    "site_visit_check_code": "05"
  }
}

3. Job Completed With DNO C Issues (S3)

Required Blocks: job_details, contact, dno_issue, additional_info

{
  "job_id": "JOB345678",
  "outcome_code": "CO",
  "sip_id": "IJKL",
  "supplier_mpid": "SUPP",
  "mpan": "5678901234567",
  "date_of_action": "2024-08-23",
  "address": {
    "line1": "789 Grid Road",
    "line2": "Substation Quarter",
    "city": "Transformertown",
    "county": "Gridshire",
    "postcode": "TF1 3DN"
  },
  "contact": {
    "name": "Alice Johnson",
    "telephone": "07456789012"
  },
  "meter": {
    "serial_number": "MSN345678",
    "location": "Outside, east wall",
    "register_id": "03",
    "smart_meter": true,
    "fault": false
  },
  "readings": [
    {
      "type": "N",
      "value": 67890
    }
  ],
  "dno_issue": {
    "code": "C",
    "comment": "Voltage fluctuation detected. DNO notified for further investigation."
  },
  "additional_info": "EV charger installed successfully. Customer advised about potential network issues.",
  "sip_ani": {
    "medical": false,
    "third_party_presence": false
  },
  "maintenance": {
    "date": "2024-08-23",
    "nature": "EV charger installation and DNO issue reporting",
    "site_visit_check_code": "51"
  }
}

4. Job Incomplete Within a Day (S4)

Required Blocks: job_details, contact, meter, readings, failure_reason, site_visit_issue_code, additional_info

{
  "job_id": "JOB345678",
  "outcome_code": "IP",
  "sip_id": "IJKL",
  "supplier_mpid": "SUPP",
  "mpan": "5678901234567",
  "date_of_action": "2024-08-23",
  "address": {
    "line1": "789 Grid Road",
    "line2": "Substation Quarter",
    "city": "Transformertown",
    "county": "Gridshire",
    "postcode": "TF1 3DN"
  },
  "contact": {
    "name": "Alice Johnson",
    "telephone": "07456789012"
  },
  "meter": {
    "serial_number": "MSN345678",
    "location": "Outside, east wall",
    "register_id": "03",
    "smart_meter": true,
    "fault": false
  },
  "readings": [
    {
      "type": "N",
      "value": 67890
    }
  ],
  "dno_issue": {
    "code": "C",
    "comment": "Voltage fluctuation detected. DNO notified for further investigation."
  },
  "additional_info": "EV charger installed successfully. Customer advised about potential network issues.",
  "sip_ani": {
    "medical": false,
    "third_party_presence": false
  },
  "maintenance": {
    "date": "2024-08-23",
    "nature": "EV charger installation and DNO issue reporting",
    "site_visit_check_code": "51"
  }
}

5. Job Completed on the Second Day (S5)

Required Blocks: job_details, contact, maintenance, site_visit_issue_code, additional_info

{
  "job_id": "JOB678901",
  "outcome_code": "CO",
  "sip_id": "QRST",
  "supplier_mpid": "SUPP",
  "mpan": "2345678901234",
  "date_of_action": "2024-08-24",
  "address": {
    "line1": "202 Return Visit Avenue",
    "line2": "Second Chance District",
    "city": "Persistenceville",
    "county": "Determinationshire",
    "postcode": "RV2 4SD"
  },
  "contact": {
    "name": "Charlie Brown",
    "telephone": "07345678901"
  },
  "meter": {
    "serial_number": "MSN678901",
    "location": "Outside, south wall",
    "register_id": "05",
    "smart_meter": true,
    "fault": false
  },
  "readings": [
    {
      "type": "N",
      "value": 54321
    }
  ],
  "additional_info": "EV charger installation completed on second visit. Additional parts were required and installed.",
  "sip_ani": {
    "medical": false,
    "third_party_presence": false
  },
  "maintenance": {
    "date": "2024-08-24",
    "nature": "EV charger installation completion and testing",
    "site_visit_check_code": "42"
  },
  "return_work": {
    "initial_visit_date": "2024-08-23",
    "reason": "Additional parts required for installation",
    "work_completed": "Installation of missing parts and final testing of EV charger"
  }
}

6. Job Aborted Due to Suspected Tampering (S6)

Required Blocks: job_details, contact, meter, readings, tampering, site_visit_issue_code, additional_info

{
  "job_id": "JOB789012",
  "outcome_code": "AB",
  "sip_id": "UVWX",
  "supplier_mpid": "SUPP",
  "mpan": "4567890123456",
  "date_of_action": "2024-08-23",
  "address": {
    "line1": "303 Suspicious Circuit",
    "line2": "Caution Zone",
    "city": "Vigilantville",
    "county": "Safeguardshire",
    "postcode": "VG1 3ST"
  },
  "contact": {
    "name": "David Smith",
    "telephone": "07456789012"
  },
  "meter": {
    "serial_number": "MSN789012",
    "location": "Inside, under stairs",
    "register_id": "06",
    "smart_meter": false,
    "fault": false
  },
  "readings": [
    {
      "type": "N",
      "value": 87654
    }
  ],
  "additional_info": "EV charger installation aborted due to suspected meter tampering.",
  "sip_ani": {
    "medical": false,
    "third_party_presence": false
  },
  "tampering": {
    "code": "02",
    "description": "Terminal cover damaged and signs of interference with meter connections."
  },
  "maintenance": {
    "date": "2024-08-23",
    "nature": "Inspection only - job aborted due to suspected tampering",
    "site_visit_check_code": "06"
  },
  "failure_reason": "Suspected meter tampering. Installation cannot proceed until investigation is complete."
}

7. Job Aborted Due to Metering Issues (S7)

Required Blocks: job_details, contact, meter, readings, failure_reason, site_visit_issue_code, additional_info

{
  "job_id": "JOB890123",
  "outcome_code": "AB",
  "sip_id": "YZAB",
  "supplier_mpid": "SUPP",
  "mpan": "5678901234567",
  "date_of_action": "2024-08-23",
  "address": {
    "line1": "404 Faulty Meter Lane",
    "line2": "Malfunction District",
    "city": "Errorville",
    "county": "Troubleshootshire",
    "postcode": "FM1 4ME"
  },
  "contact": {
    "name": "Eva Johnson",
    "telephone": "07567890123"
  },
  "meter": {
    "serial_number": "MSN890123",
    "location": "Outside, north wall",
    "register_id": "07",
    "smart_meter": true,
    "fault": true
  },
  "readings": [
    {
      "type": "E",
      "value": 99999
    }
  ],
  "additional_info": "EV charger installation aborted due to critical meter fault detected.",
  "sip_ani": {
    "medical": false,
    "third_party_presence": false
  },
  "maintenance": {
    "date": "2024-08-23",
    "nature": "Meter fault diagnosis and job abortion",
    "site_visit_check_code": "05"
  },
  "failure_reason": "Critical meter fault detected. Installation cannot proceed until meter is replaced or repaired.",
  "meter_fault_details": {
    "fault_type": "Communication failure",
    "description": "Smart meter unable to communicate with central systems. Display showing error code E004.",
    "action_required": "Meter replacement needed before EV charger installation can proceed."
  }
}

8. Job Aborted Due to DNO Issues (Category A) (S8)

Required Blocks: job_details, contact, dno_issue, meter, readings, site_visit_issue_code, additional_info

{
  "job_id": "JOB901234",
  "outcome_code": "AB",
  "sip_id": "CDEF",
  "supplier_mpid": "SUPP",
  "mpan": "6789012345678",
  "date_of_action": "2024-08-23",
  "address": {
    "line1": "505 Grid Problem Street",
    "line2": "Network Issues Zone",
    "city": "Gridlockville",
    "county": "Poweroutshire",
    "postcode": "GP1 5NO"
  },
  "contact": {
    "name": "Frank Wilson",
    "telephone": "07678901234"
  },
  "meter": {
    "serial_number": "MSN901234",
    "location": "Outside, east wall",
    "register_id": "08",
    "smart_meter": true,
    "fault": false
  },
  "readings": [
    {
      "type": "N",
      "value": 76543
    }
  ],
  "additional_info": "EV charger installation aborted due to critical DNO issue detected.",
  "sip_ani": {
    "medical": true,
    "third_party_presence": false
  },
  "maintenance": {
    "date": "2024-08-23",
    "nature": "DNO issue identification and job abortion",
    "site_visit_check_code": "50"
  },
  "failure_reason": "Critical DNO issue detected. Installation cannot proceed until DNO resolves the problem.",
  "dno_issue": {
    "code": "A",
    "comment": "Dangerous voltage fluctuations detected at the property. Immediate DNO intervention required."
  }
}

9. Job Aborted Due to DNO Issues (Category B) (S9)

Required Blocks: job_details, contact, dno_issue, meter, readings, site_visit_issue_code, additional_info

{
  "job_id": "JOB012345",
  "outcome_code": "AB",
  "sip_id": "GHIJ",
  "supplier_mpid": "SUPP",
  "mpan": "7890123456789",
  "date_of_action": "2024-08-23",
  "address": {
    "line1": "606 Network Concern Avenue",
    "line2": "Grid Attention Area",
    "city": "Infrastructureville",
    "county": "Maintenanceshire",
    "postcode": "NC1 6DN"
  },
  "contact": {
    "name": "Grace Taylor",
    "telephone": "07789012345"
  },
  "meter": {
    "serial_number": "MSN012345",
    "location": "Inside, hallway",
    "register_id": "09",
    "smart_meter": true,
    "fault": false
  },
  "readings": [
    {
      "type": "N",
      "value": 65432
    }
  ],
  "additional_info": "EV charger installation aborted due to significant DNO issue detected.",
  "sip_ani": {
    "medical": false,
    "third_party_presence": false
  },
  "maintenance": {
    "date": "2024-08-23",
    "nature": "DNO issue identification and job abortion",
    "site_visit_check_code": "51"
  },
  "failure_reason": "Significant DNO issue detected. Installation cannot proceed until DNO assesses and potentially upgrades the local network.",
  "dno_issue": {
    "code": "B",
    "comment": "Insufficient network capacity detected for EV charger installation. Local transformer may require upgrading."
  }
}

Responses

Success Response

{
  "status": "success",
  "message": "Data has been successfully processed."
}

Error Response

{
  "status": "error",
  "message": "Validation failed",
  "errors": [
    {
      "field": "field_name",
      "error": "Error description"
    }
  ]
}

Conventions

The base URL for all API requests is https://api.shocking.energy. HTTPS is required for all API requests.

JSON Conventions

Authentication

The SIP API uses API keys for authentication. Include the API key in the request headers for authentication:

Authorization: Bearer $SE_API_KEY

Rate Limits

The API employs rate limiting to ensure fair usage and prevent abuse. The rate limit policy is as follows:

If the rate limit is exceeded, the API will return a 429 Too Many Requests response. Ensure your application handles this response appropriately, typically by implementing a retry mechanism with exponential backoff.

Making Requests

You can paste the command below into your terminal to run your first API request. Make sure to replace $SE_API_KEY with your secret API key.

curl <https://api.shocking.energy/v2/job-data> \\\\
-H "Content-Type: application/json" \\\\
-H "Authorization: Bearer $SE_API_KEY" \\\\
-d '{
  "job_details": {
    "job_id": "JOB123456",
    "outcome_code": "CO",
    "sip_id": "ABCD",
    "supplier_mpid": "SUP1",
    "mpan": "1234567890123",
    "date_of_action": "2024-06-24"
  },
  "contact": {
    "name": "John Doe",
    "telephone": "01234567890"
  },
  "additional_info": "Job completed successfully without any issues"
}'

Webhook

1. Define the Webhook Endpoint

First, you need to define a URL endpoint on your server that can accept HTTP POST requests. This endpoint will be the receiver of the JSON payloads.

2. Secure the Endpoint

It is crucial to secure your webhook endpoint. This can be achieved by:

3. Register the Webhook with Our System

Provide us with the URL of your webhook endpoint. This URL should be accessible from our system and be prepared to handle incoming JSON payloads.

4. Handle Incoming JSON Payloads

Ensure your server is configured to handle incoming JSON payloads correctly. The incoming requests will be in the form of HTTP POST with a JSON body. Your server should:

5. Test the Webhook Integration

We recommend testing the integration to verify that your webhook endpoint is correctly set up and can handle incoming JSON payloads. You can use a tool like curl to simulate an incoming request:

curl -X POST -H "Content-Type: application/json" -d '{}' <https://your-webhook-endpoint.com/path>

Replace https://your-webhook-endpoint.com/path with the actual URL of your webhook endpoint.

Field Validation Rules

| --- | --- | --- | --- | --- |

Notes

Market Domain Data (MDD)

Outcome Codes

| --- | --- |

Requested action code

| --- | --- |