Release an unused reservation
curl --request POST \
--url https://api.contazen.ro/v1/invoice-series/reservations/{token}/release \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.contazen.ro/v1/invoice-series/reservations/{token}/release"
headers = {"Authorization": "Bearer <token>"}
response = requests.post(url, headers=headers)
print(response.text)const options = {method: 'POST', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.contazen.ro/v1/invoice-series/reservations/{token}/release', 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.contazen.ro/v1/invoice-series/reservations/{token}/release",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.contazen.ro/v1/invoice-series/reservations/{token}/release"
req, _ := http.NewRequest("POST", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
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.contazen.ro/v1/invoice-series/reservations/{token}/release")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.contazen.ro/v1/invoice-series/reservations/{token}/release")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"success": true,
"data": {
"object": "number_reservation",
"token": "<string>",
"series_id": "<string>",
"number": 123,
"device_id": "<string>",
"reserved_at": 123,
"expires_at": 123,
"consumed_at": 123,
"client_local_uuid": "<string>"
},
"meta": {
"version": "v1",
"request_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"response_time": "23.45ms"
}
}{
"success": false,
"error": {
"message": "<string>",
"code": "<string>",
"param": "<string>",
"doc_url": "<string>"
},
"meta": {
"version": "v1",
"request_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"response_time": "23.45ms"
}
}{
"success": false,
"error": {
"message": "<string>",
"code": "<string>",
"param": "<string>",
"doc_url": "<string>"
},
"meta": {
"version": "v1",
"request_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"response_time": "23.45ms"
}
}{
"success": false,
"error": {
"message": "<string>",
"code": "<string>",
"param": "<string>",
"doc_url": "<string>"
},
"meta": {
"version": "v1",
"request_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"response_time": "23.45ms"
}
}Invoice Series
Release Reservation
Give up a pending reservation the device no longer plans to use.
POST
/
invoice-series
/
reservations
/
{token}
/
release
Release an unused reservation
curl --request POST \
--url https://api.contazen.ro/v1/invoice-series/reservations/{token}/release \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.contazen.ro/v1/invoice-series/reservations/{token}/release"
headers = {"Authorization": "Bearer <token>"}
response = requests.post(url, headers=headers)
print(response.text)const options = {method: 'POST', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.contazen.ro/v1/invoice-series/reservations/{token}/release', 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.contazen.ro/v1/invoice-series/reservations/{token}/release",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.contazen.ro/v1/invoice-series/reservations/{token}/release"
req, _ := http.NewRequest("POST", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
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.contazen.ro/v1/invoice-series/reservations/{token}/release")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.contazen.ro/v1/invoice-series/reservations/{token}/release")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"success": true,
"data": {
"object": "number_reservation",
"token": "<string>",
"series_id": "<string>",
"number": 123,
"device_id": "<string>",
"reserved_at": 123,
"expires_at": 123,
"consumed_at": 123,
"client_local_uuid": "<string>"
},
"meta": {
"version": "v1",
"request_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"response_time": "23.45ms"
}
}{
"success": false,
"error": {
"message": "<string>",
"code": "<string>",
"param": "<string>",
"doc_url": "<string>"
},
"meta": {
"version": "v1",
"request_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"response_time": "23.45ms"
}
}{
"success": false,
"error": {
"message": "<string>",
"code": "<string>",
"param": "<string>",
"doc_url": "<string>"
},
"meta": {
"version": "v1",
"request_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"response_time": "23.45ms"
}
}{
"success": false,
"error": {
"message": "<string>",
"code": "<string>",
"param": "<string>",
"doc_url": "<string>"
},
"meta": {
"version": "v1",
"request_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"response_time": "23.45ms"
}
}Overview
Flips apending reservation to released. Called by the mobile app when the user discards an offline draft before it was synced.
Releasing does not return the number to the pool — the series counter already advanced when the reservation was allocated. Released reservations become documented gaps (same outcome as expired ones). Release primarily exists so the server can tell the difference between “device will retry this invoice later” and “user cancelled it intentionally” — useful for audit trails and for other devices that may come back online and expect accurate pool sizes.
Path parameters
string
required
The
reservation_token returned by Reserve Numbers.Response
Returns the updated reservation object withstatus = 'released'.
Errors
| Code | Meaning |
|---|---|
resource_missing | Token does not exist or belongs to another firm. |
forbidden | Token belongs to a different device — only the owning device can release. |
Was this page helpful?
⌘I