curl --request POST \
--url https://api.nomos.energy/subscriptions/{id}/terminate \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"reason": "ORDINARY",
"intended_end_at": "2026-12-31T00:00:00+01:00"
}
'import requests
url = "https://api.nomos.energy/subscriptions/{id}/terminate"
payload = {
"reason": "ORDINARY",
"intended_end_at": "2026-12-31T00:00:00+01:00"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({reason: 'ORDINARY', intended_end_at: '2026-12-31T00:00:00+01:00'})
};
fetch('https://api.nomos.energy/subscriptions/{id}/terminate', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.nomos.energy/subscriptions/{id}/terminate",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'reason' => 'ORDINARY',
'intended_end_at' => '2026-12-31T00:00:00+01:00'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.nomos.energy/subscriptions/{id}/terminate"
payload := strings.NewReader("{\n \"reason\": \"ORDINARY\",\n \"intended_end_at\": \"2026-12-31T00:00:00+01:00\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.nomos.energy/subscriptions/{id}/terminate")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"reason\": \"ORDINARY\",\n \"intended_end_at\": \"2026-12-31T00:00:00+01:00\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.nomos.energy/subscriptions/{id}/terminate")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"reason\": \"ORDINARY\",\n \"intended_end_at\": \"2026-12-31T00:00:00+01:00\"\n}"
response = http.request(request)
puts response.read_body{
"intended_end_at": "2026-12-31T00:00:00+01:00"
}{
"code": "BAD_REQUEST",
"message": "invalid_type in 'end': Required",
"requestId": "37a04f8f-e791-491c-81e1-86cd304649bb",
"docs": "https://docs.nomos.energy/api-references/errors/BAD_REQUEST",
"errors": [
{
"code": "invalid_type",
"field": "favoriteNumbers.1",
"message": "Invalid input: expected string, received number"
}
]
}{
"code": "UNAUTHORIZED",
"message": "Invalid or malformed token",
"requestId": "37a04f8f-e791-491c-81e1-86cd304649bb",
"docs": "https://docs.nomos.energy/api-references/errors/UNAUTHORIZED",
"errors": [
{
"code": "invalid_type",
"field": "favoriteNumbers.1",
"message": "Invalid input: expected string, received number"
}
]
}{
"code": "PAYMENT_REQUIRED",
"message": "Payment required",
"requestId": "37a04f8f-e791-491c-81e1-86cd304649bb",
"docs": "https://docs.nomos.energy/api-references/errors/PAYMENT_REQUIRED",
"errors": [
{
"code": "invalid_type",
"field": "favoriteNumbers.1",
"message": "Invalid input: expected string, received number"
}
]
}{
"code": "FORBIDDEN",
"message": "You are not allowed to access this resource",
"requestId": "37a04f8f-e791-491c-81e1-86cd304649bb",
"docs": "https://docs.nomos.energy/api-references/errors/FORBIDDEN",
"errors": [
{
"code": "invalid_type",
"field": "favoriteNumbers.1",
"message": "Invalid input: expected string, received number"
}
]
}{
"code": "NOT_FOUND",
"message": "Resource not found",
"requestId": "37a04f8f-e791-491c-81e1-86cd304649bb",
"docs": "https://docs.nomos.energy/api-references/errors/NOT_FOUND",
"errors": [
{
"code": "invalid_type",
"field": "favoriteNumbers.1",
"message": "Invalid input: expected string, received number"
}
]
}{
"code": "METHOD_NOT_ALLOWED",
"message": "Method not allowed",
"requestId": "37a04f8f-e791-491c-81e1-86cd304649bb",
"docs": "https://docs.nomos.energy/api-references/errors/METHOD_NOT_ALLOWED",
"errors": [
{
"code": "invalid_type",
"field": "favoriteNumbers.1",
"message": "Invalid input: expected string, received number"
}
]
}{
"code": "CONFLICT",
"message": "Resource already exists",
"requestId": "37a04f8f-e791-491c-81e1-86cd304649bb",
"docs": "https://docs.nomos.energy/api-references/errors/CONFLICT",
"errors": [
{
"code": "invalid_type",
"field": "favoriteNumbers.1",
"message": "Invalid input: expected string, received number"
}
]
}{
"code": "UNPROCESSABLE_ENTITY",
"message": "invalid_enum_value in 'status': Invalid enum value. Expected 'pending' | 'active' | 'ended'",
"requestId": "37a04f8f-e791-491c-81e1-86cd304649bb",
"docs": "https://docs.nomos.energy/api-references/errors/UNPROCESSABLE_ENTITY",
"errors": [
{
"code": "invalid_type",
"field": "favoriteNumbers.1",
"message": "Invalid input: expected string, received number"
}
]
}{
"code": "TOO_MANY_REQUESTS",
"message": "Wait 30 seconds before retrying.",
"requestId": "37a04f8f-e791-491c-81e1-86cd304649bb",
"docs": "https://docs.nomos.energy/api-references/errors/TOO_MANY_REQUESTS",
"errors": [
{
"code": "invalid_type",
"field": "favoriteNumbers.1",
"message": "Invalid input: expected string, received number"
}
]
}{
"code": "INTERNAL_SERVER_ERROR",
"message": "Internal Server Error",
"requestId": "37a04f8f-e791-491c-81e1-86cd304649bb",
"docs": "https://docs.nomos.energy/api-references/errors/INTERNAL_SERVER_ERROR",
"errors": [
{
"code": "invalid_type",
"field": "favoriteNumbers.1",
"message": "Invalid input: expected string, received number"
}
]
}Terminate a subscription
Terminate a subscription. Three reasons are supported:
ORDINARY: regular termination.intended_end_atis optional; when omitted, the plan’s cancellation period applies.MOVE_OUT: special termination right tied to a move-out date.intended_end_atis mandatory and still has to leave the grid operator a few working days of notice.WITHDRAWAL: 14-day cooling-off period (Widerruf) after contract confirmation. The end date is calculated to comply with grid-operator notice periods.
All end dates in the request and response are exclusive midnight Europe/Berlin: from that moment the customer is no longer supplied. The customer’s last day of supply is the day before the named date.
Every termination reason has to clear the grid operator’s working-day notice; ORDINARY additionally has to respect the plan’s cancellation period.
Conflict responses (409) carry a dedicated errors[].code:
invalid_termination_date— the requested date is in the past or violates the plan’s / grid operator’s notice period.withdrawal_not_allowed— the 14-day withdrawal window has elapsed (or the subscription has no confirmed_at to count from).
curl --request POST \
--url https://api.nomos.energy/subscriptions/{id}/terminate \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"reason": "ORDINARY",
"intended_end_at": "2026-12-31T00:00:00+01:00"
}
'import requests
url = "https://api.nomos.energy/subscriptions/{id}/terminate"
payload = {
"reason": "ORDINARY",
"intended_end_at": "2026-12-31T00:00:00+01:00"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({reason: 'ORDINARY', intended_end_at: '2026-12-31T00:00:00+01:00'})
};
fetch('https://api.nomos.energy/subscriptions/{id}/terminate', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.nomos.energy/subscriptions/{id}/terminate",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'reason' => 'ORDINARY',
'intended_end_at' => '2026-12-31T00:00:00+01:00'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.nomos.energy/subscriptions/{id}/terminate"
payload := strings.NewReader("{\n \"reason\": \"ORDINARY\",\n \"intended_end_at\": \"2026-12-31T00:00:00+01:00\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.nomos.energy/subscriptions/{id}/terminate")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"reason\": \"ORDINARY\",\n \"intended_end_at\": \"2026-12-31T00:00:00+01:00\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.nomos.energy/subscriptions/{id}/terminate")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"reason\": \"ORDINARY\",\n \"intended_end_at\": \"2026-12-31T00:00:00+01:00\"\n}"
response = http.request(request)
puts response.read_body{
"intended_end_at": "2026-12-31T00:00:00+01:00"
}{
"code": "BAD_REQUEST",
"message": "invalid_type in 'end': Required",
"requestId": "37a04f8f-e791-491c-81e1-86cd304649bb",
"docs": "https://docs.nomos.energy/api-references/errors/BAD_REQUEST",
"errors": [
{
"code": "invalid_type",
"field": "favoriteNumbers.1",
"message": "Invalid input: expected string, received number"
}
]
}{
"code": "UNAUTHORIZED",
"message": "Invalid or malformed token",
"requestId": "37a04f8f-e791-491c-81e1-86cd304649bb",
"docs": "https://docs.nomos.energy/api-references/errors/UNAUTHORIZED",
"errors": [
{
"code": "invalid_type",
"field": "favoriteNumbers.1",
"message": "Invalid input: expected string, received number"
}
]
}{
"code": "PAYMENT_REQUIRED",
"message": "Payment required",
"requestId": "37a04f8f-e791-491c-81e1-86cd304649bb",
"docs": "https://docs.nomos.energy/api-references/errors/PAYMENT_REQUIRED",
"errors": [
{
"code": "invalid_type",
"field": "favoriteNumbers.1",
"message": "Invalid input: expected string, received number"
}
]
}{
"code": "FORBIDDEN",
"message": "You are not allowed to access this resource",
"requestId": "37a04f8f-e791-491c-81e1-86cd304649bb",
"docs": "https://docs.nomos.energy/api-references/errors/FORBIDDEN",
"errors": [
{
"code": "invalid_type",
"field": "favoriteNumbers.1",
"message": "Invalid input: expected string, received number"
}
]
}{
"code": "NOT_FOUND",
"message": "Resource not found",
"requestId": "37a04f8f-e791-491c-81e1-86cd304649bb",
"docs": "https://docs.nomos.energy/api-references/errors/NOT_FOUND",
"errors": [
{
"code": "invalid_type",
"field": "favoriteNumbers.1",
"message": "Invalid input: expected string, received number"
}
]
}{
"code": "METHOD_NOT_ALLOWED",
"message": "Method not allowed",
"requestId": "37a04f8f-e791-491c-81e1-86cd304649bb",
"docs": "https://docs.nomos.energy/api-references/errors/METHOD_NOT_ALLOWED",
"errors": [
{
"code": "invalid_type",
"field": "favoriteNumbers.1",
"message": "Invalid input: expected string, received number"
}
]
}{
"code": "CONFLICT",
"message": "Resource already exists",
"requestId": "37a04f8f-e791-491c-81e1-86cd304649bb",
"docs": "https://docs.nomos.energy/api-references/errors/CONFLICT",
"errors": [
{
"code": "invalid_type",
"field": "favoriteNumbers.1",
"message": "Invalid input: expected string, received number"
}
]
}{
"code": "UNPROCESSABLE_ENTITY",
"message": "invalid_enum_value in 'status': Invalid enum value. Expected 'pending' | 'active' | 'ended'",
"requestId": "37a04f8f-e791-491c-81e1-86cd304649bb",
"docs": "https://docs.nomos.energy/api-references/errors/UNPROCESSABLE_ENTITY",
"errors": [
{
"code": "invalid_type",
"field": "favoriteNumbers.1",
"message": "Invalid input: expected string, received number"
}
]
}{
"code": "TOO_MANY_REQUESTS",
"message": "Wait 30 seconds before retrying.",
"requestId": "37a04f8f-e791-491c-81e1-86cd304649bb",
"docs": "https://docs.nomos.energy/api-references/errors/TOO_MANY_REQUESTS",
"errors": [
{
"code": "invalid_type",
"field": "favoriteNumbers.1",
"message": "Invalid input: expected string, received number"
}
]
}{
"code": "INTERNAL_SERVER_ERROR",
"message": "Internal Server Error",
"requestId": "37a04f8f-e791-491c-81e1-86cd304649bb",
"docs": "https://docs.nomos.energy/api-references/errors/INTERNAL_SERVER_ERROR",
"errors": [
{
"code": "invalid_type",
"field": "favoriteNumbers.1",
"message": "Invalid input: expected string, received number"
}
]
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Path Parameters
"sub_mi4f0oda6x9m7gcsvjk0ole1"
Body
The termination request
- Option 1
- Option 2
- Option 3
ORDINARY Optional exclusive end timestamp. Must be exactly midnight Europe/Berlin (any zone offset accepted as long as the instant is 00:00 Berlin). From that moment the customer is no longer supplied; the last day of supply is the day before. When omitted, the plan's cancellation period applies.
"2026-12-31T00:00:00+01:00"
Response
The subscription's termination details
Was this page helpful?