Enectiva REST API - Librarian
HomeEnectivaUser ManualEnerfis
HomeEnectivaUser ManualEnerfis
  1. Profiles to Enectiva
  • Introduction
  • Access tokens
    • Create a new access token
      POST
  • Data points from Enectiva
    • List data points of a data series
      GET
  • Deltas
    • Introduction to Deltas
    • List monthly deltas of an entity
      GET
    • List monthly deltas of a meter
      GET
    • List monthly deltas of a virtual meter
      GET
  • Data points to Enectiva
    • Latest data point
      GET
    • Create a new data point
      POST
    • Delete a data point by ID
      DELETE
    • Delete a data point by time
      DELETE
  • Profiles to Enectiva
    • Latest profile
      GET
    • Create a new/update an existing profile
      POST
    • Delete a profile by ID
      DELETE
    • Delete a profile by time range
      DELETE
  • Readings to Enectiva
    • Latest reading
      GET
    • Create a new reading
      POST
    • Delete a reading by ID
      DELETE
    • Delete a reading by time
      DELETE
  • Entities from Enectiva
    • List entities
      GET
    • Entity
      GET
  • Readings from Enectiva
    • List readings of a meter
      GET
  • Meters from Enectiva
    • List meters
    • Meter
  • Received energy invoices
    • Create a new invoice
  1. Profiles to Enectiva

Create a new/update an existing profile

POST
https://api.enectiva.cz//import/profiles/{customerId}
Last modified:2025-09-03 18:35:46
This endpoint enables clients to add new profiles or update existing ones in Enectiva. Each profile is sent in a separate HTTP request. Sending profiles from multiple servers might hit rate limiting limits.
Profiles should be sent in chronological order and at constant intervals if possible. Older profiles will be accepted, but might not be used by Enectiva.
Each profile is validated against these rules:
from, to, value and import_id are required fields and must be non-empty
from and to must conform to time format defined in RFC3339, the time will be truncated to whole seconds
import_id is limited to 255 characters, it is case-sensitive, must not contain spaces
value has to be a floating point number; we recommend sending only reasonable number of digits after the decimal point
unit is an optional attribute limited to 50 case-sensitive characters; we recommend sending it when available because it is useful when debugging
sender is a case-sensitive string limited to 255 characters used for debugging and verification
suit is an optional string identifying the series of readings, if not provided default will be used, must not contain spaces
time range of a profile defined by from and to must not overlap with other profiles on the meter specified by import_id and suit. Time range excludes the upper bound [from, to), so insertion of 2 profiles with time ranges [time_1, time_2) and [time_2, time_3) do not fail on overlap conflict.
profiles must be in the past
when a time range exactly matches an existing profile's range (for the same import_id, suit and matching time range from and to), it will update the existing profile without creating a new one
Each profile might be flagged as suspicious by the API and not processed further to avoid problems further down the line. The typical cause for flagging is an unexpected unit. If profiles are flagged incorrectly, please let us know.
Profiles can be sent for any meter without any prior setup. The client is responsible for keeping the meter IDs unique. The same meter IDs are then used in Enectiva to identify the source of readings. In case multiple series of values are associated with a single meter ID, they can be differentiated with suit field.
For testing integration of a new client, we recommend using dummy meter IDs (e.g. test).
The status code for a new profile is 201, while for an updated profile, it is 200.
Repeated attempts to insert an identical or overlapping profile (the same import_id, suit and overlapping time range from and to) result in 409 status code. Client must stop sending the overlapping profile over and over again (and move to the next one), not doing so would result in a stuck import series and potentially rate limiting.
This endpoint requires an import token, not an access token.

Request

Authorization
OAuth 2.0
Authorization Code
Add the parameter
Authorization
to Headers
,whose value is to concatenate the Token after the Bearer.
Example:
Authorization: Bearer ********************
Authorize URL: https://app.enectiva.cz/en/api/dashboard
Token URL: No token URL is provided. Use "Import token" from the Auth URL
or
Path Params

Header Params

Body Params application/vnd.api+json

Example
{
  "data": {
    "type": "profiles",
    "attributes": {
      "from": "2015-11-18T09:54:23+01:00",
      "to": "2015-11-18T09:59:23+01:00",
      "value": 123456.78,
      "import_id": "40AABB_007",
      "unit": "kW",
      "suit": "default"
    }
  }
}

Request Code Samples

Shell
JavaScript
Java
Swift
Go
PHP
Python
HTTP
C
C#
Objective-C
Ruby
OCaml
Dart
R
Request Request Example
Shell
JavaScript
Java
Swift
curl --location --request POST 'https://api.enectiva.cz//import/profiles/' \
--header 'Accept: application/vnd.api+json' \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/vnd.api+json' \
--data-raw '{
  "data": {
    "type": "profiles",
    "attributes": {
      "from": "2015-11-18T09:54:23+01:00",
      "to": "2015-11-18T09:59:23+01:00",
      "value": 123456.78,
      "import_id": "40AABB_007",
      "unit": "kW",
      "suit": "default"
    }
  }
}'

Responses

🟢200OK
application/vnd.api+json
OK
Body

Example
{
    "data": {
        "attributes": {
            "customer_uuid": "11e7e767-6f74-4994-b607-158ff7f7445e",
            "from": "2015-11-18T09:54:23+01:00",
            "import_id": "40AABB_007",
            "suit": "default",
            "to": "2015-11-18T09:59:23+01:00",
            "unit": "kW",
            "value": 123456.78
        },
        "id": "1",
        "type": "profiles"
    }
}
🟢201Created
🟠400Bad Request
🟠401Unauthorized
🟠403Forbidden
🟠404Record Not Found
🟠406Not Acceptable
🟠409Conflict
🟠415Unsupported Media Type
🟠429Too Many Requests
🔴500Server Error
Modified at 2025-09-03 18:35:46
Previous
Latest profile
Next
Delete a profile by ID
Built with