Organisations and Brands
Retrieve and update top-level tenant organisations and manage brand settings including logos and invoice images.
Auth required: Yes (auth:api) for all endpoints.
Model Properties
Organisation
| Property | Type | Required | Description |
|---|---|---|---|
id |
integer | auto | Unique identifier |
name |
string | Yes | Organisation name (min 2 chars) |
registration_number |
string | No | Company registration number |
tax_registration_number |
string | No | VAT number |
slogan |
string | No | Organisation slogan |
organisation_type |
string | No | Legal type (e.g. SAS, SARL, SA) |
capital |
string | No | Share capital |
activity_code |
string | No | NAF/APE activity code |
main_contact_first_name |
string | No | Main contact first name |
main_contact_last_name |
string | No | Main contact last name |
accountant_first_name |
string | No | Accountant first name |
accountant_last_name |
string | No | Accountant last name |
main_address_line1 |
string | No | Address line 1 |
main_address_line2 |
string | No | Address line 2 |
main_address_postal_code |
string | No | Postal code |
main_address_city |
string | No | City |
main_address_country |
string | No | Country |
email_address |
string | No | Main email address |
send_invoices_from_email_address |
string | No | Email address used to send invoices |
send_external_messages_from_email_address |
string | No | Email address for external messages |
send_internal_message_from_email_address |
string | No | Email address for internal messages |
website |
string | No | Website URL |
phone |
string | No | Phone number |
mobile_phone |
string | No | Mobile phone number |
fax |
string | No | Fax number |
term_nb_days |
integer | No | Default payment term in days |
quote_nb_days |
integer | No | Number of days a quote is valid |
iban |
string | No | Organisation IBAN (for SEPA direct debit collections) |
bic |
string | No | Organisation BIC/SWIFT code |
ics |
string | No | SEPA creditor identifier |
journal_bank |
string | No | Accounting journal code for bank |
journal_purchases |
string | No | Accounting journal code for purchases |
journal_sales |
string | No | Accounting journal code for sales |
accounts_chars |
string | No | Accounting chart of accounts prefix |
account_bank |
string | No | Bank account number in chart of accounts |
account_bank_name |
string | No | Bank account name in chart of accounts |
r |
integer | No | Brand color red component (0-255) |
g |
integer | No | Brand color green component (0-255) |
b |
integer | No | Brand color blue component (0-255) |
terms_and_conditions |
text | No | Terms and conditions text |
contact_us |
text | No | "Contact us" section text for customer portal |
mention |
text | No | Legal mentions on invoices |
prorata_temporis_mention |
text | No | Prorata temporis mention text |
mention_footer |
text | No | Footer mentions |
footer |
text | No | Invoice footer text |
footer_for_quotes_and_contracts |
text | No | Footer text for quotes and contracts |
mention_for_contracts |
text | No | Legal mentions for contracts |
footer_on_all_pages |
boolean | No | Whether to show the footer on all invoice pages |
esign_default_body |
text | No | Default email body for e-signature requests |
default_deposit_method |
string | No | Default deposit method (enum: deposit_method) |
default_payment_method |
string | No | Default payment method (enum: payment_method) |
hide_buying_prices_from_sales |
boolean | No | Hide buying prices from sales users |
ticketing_new_contact_customer_area_enabled |
boolean | No | Allow new contact creation from customer area ticketing |
ticketing_auto_closure_enabled |
boolean | No | Enable automatic ticket closure |
ticketing_auto_closure_alerts |
array | No | Configuration for auto-closure alerts |
welcome_title1 |
string | No | Customer portal welcome section title 1 |
welcome_text1 |
text | No | Customer portal welcome section text 1 |
welcome_title2 |
string | No | Customer portal welcome section title 2 |
welcome_text2 |
text | No | Customer portal welcome section text 2 |
welcome_title3 |
string | No | Customer portal welcome section title 3 |
welcome_text3 |
text | No | Customer portal welcome section text 3 |
social_facebook |
string | No | Facebook page URL |
social_linked_in |
string | No | LinkedIn page URL |
social_twitter |
string | No | Twitter/X profile URL |
newsletter_logo |
string | No | Newsletter logo image path |
newsletter_unsubscribe_title |
string | No | Newsletter unsubscribe page title |
newsletter_unsubscribe_text |
text | No | Newsletter unsubscribe page text |
created_at |
datetime | auto | Creation timestamp |
updated_at |
datetime | auto | Last update timestamp |
Organisations
Base URL: /api/v1/organisations
Organisations are the top-level tenant entities in BlueRockTEL. There is typically only one or a few organisations per installation.
GET /v1/organisations
List all organisations.
Response 200: Array of organisation objects (organisation_resource collection, all records, no pagination).
Examples:
curl -s -X GET "https://your-instance.bluerocktel.net/api/v1/organisations" \
-H "Authorization: Bearer $TOKEN" \
-H "Accept: application/json"
import requests
response = requests.get(
"https://your-instance.bluerocktel.net/api/v1/organisations",
headers={"Authorization": f"Bearer {token}", "Accept": "application/json"},
)
organisations = response.json()
use Illuminate\Support\Facades\Http;
$response = Http::withToken($token)
->acceptJson()
->get('https://your-instance.bluerocktel.net/api/v1/organisations');
$organisations = $response->json();
const response = await fetch(
"https://your-instance.bluerocktel.net/api/v1/organisations",
{
headers: {
Authorization: `Bearer ${token}`,
Accept: "application/json",
},
}
);
const organisations = await response.json();
GET /v1/organisations/{id}
Get a single organisation by ID.
URL parameters:
| Parameter | Type | Description |
|---|---|---|
id |
integer | Organisation ID |
Response 200: Organisation object. Response 404: Not found.
PUT /v1/organisations/{id}
Update an organisation. Only fields listed in Organisation::updatable() are updated.
URL parameters:
| Parameter | Type | Description |
|---|---|---|
id |
integer | Organisation ID |
Body (JSON): Validated via Organisation::attributes('common').
Response 201: Updated organisation object. Response 404: Not found. Response 422/500: Error.
Brands
Base URL: /api/v1/brands
Brands are sub-entities of organisations. Each customer file can be linked to a brand (affects invoice styling, logos, etc.).
Note: creating and deleting brands is not available via the API.
GET /v1/brands
List all brands.
Response 200: Array of all brand objects.
GET /v1/brands/{id}
Get a single brand by ID.
URL parameters:
| Parameter | Type | Description |
|---|---|---|
id |
integer | Brand ID |
Response 200: Brand object. Response 404: Not found.
PUT /v1/brands/{id}
Update a brand. Handles image uploads:
logo: resized to max 500px width, stored on Swift and FTP disks.message_on_invoice: resized to 2126x709px, stored on Swift and FTP disks.
URL parameters:
| Parameter | Type | Description |
|---|---|---|
id |
integer | Brand ID |
Body (multipart/form-data or JSON): Validated via Brand::attributes('common').
| Field | Type | Description |
|---|---|---|
logo |
file/image | Brand logo (optional) |
message_on_invoice |
file/image | Invoice message image (optional) |
| ... | ... | Other brand fields |
Response 201: Updated brand object. Response 404: Not found. Response 422/500: Error.
Examples:
curl -s -X PUT "https://your-instance.bluerocktel.net/api/v1/brands/1" \
-H "Authorization: Bearer $TOKEN" \
-H "Accept: application/json" \
-F "logo=@/path/to/logo.png" \
-F "message_on_invoice=@/path/to/invoice-banner.png"
import requests
with open("logo.png", "rb") as logo, open("invoice-banner.png", "rb") as banner:
response = requests.put(
"https://your-instance.bluerocktel.net/api/v1/brands/1",
files={
"logo": ("logo.png", logo, "image/png"),
"message_on_invoice": ("invoice-banner.png", banner, "image/png"),
},
headers={"Authorization": f"Bearer {token}", "Accept": "application/json"},
)
brand = response.json()
$response = Http::withToken($token)
->acceptJson()
->attach('logo', file_get_contents('/path/to/logo.png'), 'logo.png')
->attach('message_on_invoice', file_get_contents('/path/to/invoice-banner.png'), 'invoice-banner.png')
->put('https://your-instance.bluerocktel.net/api/v1/brands/1');
$brand = $response->json();
const formData = new FormData();
formData.append("logo", logoFile);
formData.append("message_on_invoice", invoiceBannerFile);
const response = await fetch(
"https://your-instance.bluerocktel.net/api/v1/brands/1",
{
method: "PUT",
headers: {
Authorization: `Bearer ${token}`,
Accept: "application/json",
},
body: formData,
}
);
const brand = await response.json();
On this page