Voxbi Cockpit APIs
All endpoints

Register an Odoo installation (pbx)

Registers (upserts) the Odoo integration for the authenticated PBX and queues the installation job. Consumed by the Voxbi Installer module running inside a customer's Odoo. The PBX is resolved from the API key, so it is never part of the request body. Requires an API key carrying the odoo-installer ability.

HTTP: IntegrationApiKey

API key created on the Cockpit Integrations page (an "API key" integration). It is a bearer token owned by the customer's PBX and limited to the scopes selected when the key was created (e.g. phone-numbers, push-configuration).

Send it in the Authorization header:

Authorization: Bearer <api_key>

Manage keys (create / reveal / revoke) from Integrations → New integration → API key.

HTTP Authorization Scheme
bearer
accept header · string
example: application/json

Request body · required

Request schema
odoo_url*string
Base URL of the customer's Odoo instance.
length: 0–255
example: https://erp.example.com
odoo_db*string
length: 0–128
example: example_prod
odoo_version*string
length: 0–16
example: 17.0
service_user*string
Login of the Odoo service account.
length: 0–128
example: svc_voxbi
service_key*string
Odoo service account API key. Stored encrypted and never returned.
length: 0–255write-only
example: s3cr3t-service-key
service_uid*integer
Numeric Odoo user id of the service account.
example: 7
sync_sip_configurationsboolean
When true, SIP configurations are pushed to Odoo VoIP.
default: false
example: 1
is_activeboolean
default: true
example: 1
installer_module_versionstring
length: 0–32
example: 1.2.0

Responses

Created. The integration is registered and the install job is queued.
Response schema
integration_idstring · uuid
status_urlstring · uri
Poll this URL for the install status.
Authorization Token Missing. This error is returned when the authorization token is missing.
Response schema
errorstring
Error message
example: Authorization Token is missing
Unprocessable Parameters. This error is returned when a parameter is not valid.
Response schema
messagestring
example: The given data was invalid.
errorsobject
filterarray<string>
[]string
sortarray<string>
[]string
pagearray<string>
[]string
per_pagearray<string>
[]string
Server error. An unexpected condition was encountered on the server and the request could not be completed. The body is a generic JSON envelope with a `message` field. The response is logged on the server side; quote the request URL + timestamp when reporting an issue.
Response schema
messagestring
exceptionstring
Only present in non-production environments.
filestring
Only present in non-production environments.
lineinteger
Only present in non-production environments.
post https://cockpit.voxbi.com/api/v1/odoo-installer/register-install
Base URL
Request sample
curl -X POST 'https://cockpit.voxbi.com/api/v1/odoo-installer/register-install' \
  -H 'Authorization: Bearer YOUR_TOKEN' \
  -H 'Content-Type: application/json' \
  --data '{"odoo_url":"https://erp.example.com","odoo_db":"example_prod","odoo_version":"17.0","service_user":"svc_voxbi","service_key":"s3cr3t-service-key","service_uid":7,"sync_sip_configurations":true,"is_active":true,"installer_module_version":"1.2.0"}'
const response = await fetch('https://cockpit.voxbi.com/api/v1/odoo-installer/register-install', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'Authorization': `Bearer ${YOUR_TOKEN}`,
  },
  body: JSON.stringify({
    "odoo_url": "https://erp.example.com",
    "odoo_db": "example_prod",
    "odoo_version": "17.0",
    "service_user": "svc_voxbi",
    "service_key": "s3cr3t-service-key",
    "service_uid": 7,
    "sync_sip_configurations": true,
    "is_active": true,
    "installer_module_version": "1.2.0"
}),
});

const data = await response.json();
console.log(data);
import requests

response = requests.post('https://cockpit.voxbi.com/api/v1/odoo-installer/register-install',
    headers={'Authorization': f'Bearer {YOUR_TOKEN}'},
    json={
    "odoo_url": "https://erp.example.com",
    "odoo_db": "example_prod",
    "odoo_version": "17.0",
    "service_user": "svc_voxbi",
    "service_key": "s3cr3t-service-key",
    "service_uid": 7,
    "sync_sip_configurations": true,
    "is_active": true,
    "installer_module_version": "1.2.0"
}
)
response.raise_for_status()
data = response.json()
print(data)
<?php
$context = stream_context_create([
    'http' => [
        'method'  => 'POST',
        'header'  => "Content-Type: application/json\r\nAuthorization: Bearer YOUR_TOKEN",
        'content' => '{
    \"odoo_url\": \"https://erp.example.com\",
    \"odoo_db\": \"example_prod\",
    \"odoo_version\": \"17.0\",
    \"service_user\": \"svc_voxbi\",
    \"service_key\": \"s3cr3t-service-key\",
    \"service_uid\": 7,
    \"sync_sip_configurations\": true,
    \"is_active\": true,
    \"installer_module_version\": \"1.2.0\"
}',
    ],
]);

$response = file_get_contents('https://cockpit.voxbi.com/api/v1/odoo-installer/register-install', false, $context);
$data = json_decode($response, true);
print_r($data);
Sample request
{}
"odoo_url": "https://erp.example.com",
"odoo_db": "example_prod",
"odoo_version": "17.0",
"service_user": "svc_voxbi",
"service_key": "s3cr3t-service-key",
"service_uid": 7,
"sync_sip_configurations": true,
"is_active": true,
"installer_module_version": "1.2.0"
}
{}
"integration_id": "550e8400-e29b-41d4-a716-446655440000",
"status_url": "https://cockpit.voxbi.com/api/v1/odoo-installer/install-status"
}
{}
"error": "Authorization Token is missing"
}
Cache-Control string
example: private, must-revalidate
Connection string
example: keep-alive
Content-Type string
example: application/json
Vary string
example: Origin
X-RateLimit-Limit integer
Max requests allowed in the current rate-limit window.
example: 60
X-RateLimit-Remaining integer
Requests remaining in the current rate-limit window.
example: 57
{}
"errors": {}
"filter": [],
"The filter field must be an array."
],
"sort": [],
"The sort field must be a string."
],
"page": [],
"The page field must be an integer."
],
"per_page": []
"The per page field must be an integer."
]
}
}
Cache-Control string
example: private, must-revalidate
Connection string
example: keep-alive
Content-Type string
example: application/json
Vary string
example: Origin
X-RateLimit-Limit integer
Max requests allowed in the current rate-limit window.
example: 60
X-RateLimit-Remaining integer
Requests remaining in the current rate-limit window.
example: 57
{}
"message": "Server Error"
}