GET/api/co/filters/search?q=string_value&query=string_valueEndpoint operation.
Free text search across workshops, addresses, services, and service categories.
Auth: Bearer token (`Authorization: Bearer <token>`)Source: CAROWNER-API-COMPLETE.md
Response Example
{
"results": [
{
"org_nr": "921460929",
"name": "string_value",
"address_line": "string_value",
"city": "string_value",
"postal_code": "string_value",
"latitude": 499.0,
"longitude": 499.0,
"distance_km": 499.0,
"logo": [
{}
],
"categories": [
{}
],
"avg_rating": 499.0,
"total_reviews": 1,
"cheapest_service_price": 499.0,
"services_count": 1
}
],
"count": 1,
"query": "string_value"
}
Node.js Axios example
import axios from "axios";
const BASE_URL = process.env.MINBIL_API_BASE_URL ?? "http://localhost:5000";
const API_KEY = process.env.MINBIL_API_KEY ?? "YOUR_API_KEY";
const ACCESS_TOKEN = process.env.MINBIL_ACCESS_TOKEN ?? "YOUR_BEARER_TOKEN";
async function run() {
const response = await axios({
method: "get",
url: BASE_URL + "/api/co/filters/search?q=string_value&query=string_value",
headers: {
"Content-Type": "application/json",
Authorization: "Bearer " + ACCESS_TOKEN,
},
timeout: 20000,
});
console.log(response.status, response.data);
}
run().catch((error) => {
console.error(error.response?.status, error.response?.data ?? error.message);
});
cURL example
curl -X GET 'https://api.minbil.no/api/co/filters/search?q=string_value&query=string_value'\
-H 'Accept: application/json'\
-H 'Authorization: Bearer <access-token>'
Fetch example
const BASE_URL = process.env.MINBIL_API_BASE_URL ?? "http://localhost:5000";
const API_KEY = process.env.MINBIL_API_KEY ?? "YOUR_API_KEY";
const ACCESS_TOKEN = process.env.MINBIL_ACCESS_TOKEN ?? "YOUR_BEARER_TOKEN";
const response = await fetch(BASE_URL + "/api/co/filters/search?q=string_value&query=string_value", {
method: "GET",
headers: {
"Content-Type": "application/json",
Authorization: "Bearer " + ACCESS_TOKEN,
},
});
const data = await response.json();
console.log(response.status, data);
GET/api/co/messages/inbox?page=string_value&page_size=string_value&q=string_valueEndpoint operation.
Fetches list of message threads (per booking). Sorted by last activity (newest first).
Auth: Bearer token (`Authorization: Bearer <token>`)Source: CAROWNER-API-COMPLETE.md
Response Example
{
"data": [
{
"id": 123,
"thread_id": "string_value",
"booking_id": 1,
"workshop_org_nr": "921460929",
"workshop_name": "string_value",
"org_nr": "921460929",
"last_message": {},
"unread_count": 1,
"total_messages": 1,
"updated_at": "2026-02-12",
"read_at": "string_value"
}
],
"meta": {
"page": 1,
"page_size": 1,
"total": 1,
"total_pages": 1,
"has_next": true,
"has_prev": true,
"unread_total": 1
},
"links": {
"self": "string_value",
"first": "string_value",
"prev": "string_value",
"next": "string_value",
"last": "string_value"
}
}
Node.js Axios example
import axios from "axios";
const BASE_URL = process.env.MINBIL_API_BASE_URL ?? "http://localhost:5000";
const API_KEY = process.env.MINBIL_API_KEY ?? "YOUR_API_KEY";
const ACCESS_TOKEN = process.env.MINBIL_ACCESS_TOKEN ?? "YOUR_BEARER_TOKEN";
async function run() {
const response = await axios({
method: "get",
url: BASE_URL + "/api/co/messages/inbox?page=string_value&page_size=string_value&q=string_value",
headers: {
"Content-Type": "application/json",
Authorization: "Bearer " + ACCESS_TOKEN,
},
timeout: 20000,
});
console.log(response.status, response.data);
}
run().catch((error) => {
console.error(error.response?.status, error.response?.data ?? error.message);
});
cURL example
curl -X GET 'https://api.minbil.no/api/co/messages/inbox?page=string_value&page_size=string_value&q=string_value'\
-H 'Accept: application/json'\
-H 'Authorization: Bearer <access-token>'
Fetch example
const BASE_URL = process.env.MINBIL_API_BASE_URL ?? "http://localhost:5000";
const API_KEY = process.env.MINBIL_API_KEY ?? "YOUR_API_KEY";
const ACCESS_TOKEN = process.env.MINBIL_ACCESS_TOKEN ?? "YOUR_BEARER_TOKEN";
const response = await fetch(BASE_URL + "/api/co/messages/inbox?page=string_value&page_size=string_value&q=string_value", {
method: "GET",
headers: {
"Content-Type": "application/json",
Authorization: "Bearer " + ACCESS_TOKEN,
},
});
const data = await response.json();
console.log(response.status, data);
OPTIONS/api/co/messages/inbox?page=string_value&page_size=string_value&q=string_valueEndpoint operation.
Fetches list of message threads (per booking). Sorted by last activity (newest first).
Auth: Bearer token (`Authorization: Bearer <token>`)Source: CAROWNER-API-COMPLETE.md
Response Example
{
"data": {},
"meta": {
"request_id": "f59ee325-0445-4bd0-9bf1-73edcd7da151",
"generated_at": "2026-02-12T10:00:00Z"
}
}
Node.js Axios example
import axios from "axios";
const BASE_URL = process.env.MINBIL_API_BASE_URL ?? "http://localhost:5000";
const API_KEY = process.env.MINBIL_API_KEY ?? "YOUR_API_KEY";
const ACCESS_TOKEN = process.env.MINBIL_ACCESS_TOKEN ?? "YOUR_BEARER_TOKEN";
async function run() {
const response = await axios({
method: "options",
url: BASE_URL + "/api/co/messages/inbox?page=string_value&page_size=string_value&q=string_value",
headers: {
"Content-Type": "application/json",
Authorization: "Bearer " + ACCESS_TOKEN,
},
timeout: 20000,
});
console.log(response.status, response.data);
}
run().catch((error) => {
console.error(error.response?.status, error.response?.data ?? error.message);
});
cURL example
curl -X OPTIONS 'https://api.minbil.no/api/co/messages/inbox?page=string_value&page_size=string_value&q=string_value'\
-H 'Accept: application/json'\
-H 'Authorization: Bearer <access-token>'
Fetch example
const BASE_URL = process.env.MINBIL_API_BASE_URL ?? "http://localhost:5000";
const API_KEY = process.env.MINBIL_API_KEY ?? "YOUR_API_KEY";
const ACCESS_TOKEN = process.env.MINBIL_ACCESS_TOKEN ?? "YOUR_BEARER_TOKEN";
const response = await fetch(BASE_URL + "/api/co/messages/inbox?page=string_value&page_size=string_value&q=string_value", {
method: "OPTIONS",
headers: {
"Content-Type": "application/json",
Authorization: "Bearer " + ACCESS_TOKEN,
},
});
const data = await response.json();
console.log(response.status, data);
OPTIONS/api/co/messages/mark-readEndpoint operation.
Marks workshop→car owner messages as read. Body { `thread_id`, `last_read_id?`, `last_read_at?` }
Auth: Bearer token (`Authorization: Bearer <token>`)Source: CAROWNER-API-COMPLETE.md
Response Example
{
"data": {},
"meta": {
"request_id": "f59ee325-0445-4bd0-9bf1-73edcd7da151",
"generated_at": "2026-02-12T10:00:00Z"
}
}
Node.js Axios example
import axios from "axios";
const BASE_URL = process.env.MINBIL_API_BASE_URL ?? "http://localhost:5000";
const API_KEY = process.env.MINBIL_API_KEY ?? "YOUR_API_KEY";
const ACCESS_TOKEN = process.env.MINBIL_ACCESS_TOKEN ?? "YOUR_BEARER_TOKEN";
async function run() {
const response = await axios({
method: "options",
url: BASE_URL + "/api/co/messages/mark-read",
headers: {
"Content-Type": "application/json",
Authorization: "Bearer " + ACCESS_TOKEN,
},
timeout: 20000,
});
console.log(response.status, response.data);
}
run().catch((error) => {
console.error(error.response?.status, error.response?.data ?? error.message);
});
cURL example
curl -X OPTIONS 'https://api.minbil.no/api/co/messages/mark-read'\
-H 'Accept: application/json'\
-H 'Authorization: Bearer <access-token>'
Fetch example
const BASE_URL = process.env.MINBIL_API_BASE_URL ?? "http://localhost:5000";
const API_KEY = process.env.MINBIL_API_KEY ?? "YOUR_API_KEY";
const ACCESS_TOKEN = process.env.MINBIL_ACCESS_TOKEN ?? "YOUR_BEARER_TOKEN";
const response = await fetch(BASE_URL + "/api/co/messages/mark-read", {
method: "OPTIONS",
headers: {
"Content-Type": "application/json",
Authorization: "Bearer " + ACCESS_TOKEN,
},
});
const data = await response.json();
console.log(response.status, data);
POST/api/co/messages/mark-readEndpoint operation.
Marks workshop→car owner messages as read. Body { `thread_id`, `last_read_id?`, `last_read_at?` }
Auth: Bearer token (`Authorization: Bearer <token>`)Source: CAROWNER-API-COMPLETE.md
Request Example
{
"thread_id": "string_value",
"last_read_id": 1,
"last_read_at": "string_value"
}
Response Example
{
"updated": 1,
"json_updated": 1,
"unread_count": 1,
"read_at": "string_value"
}
Node.js Axios example
import axios from "axios";
const BASE_URL = process.env.MINBIL_API_BASE_URL ?? "http://localhost:5000";
const API_KEY = process.env.MINBIL_API_KEY ?? "YOUR_API_KEY";
const ACCESS_TOKEN = process.env.MINBIL_ACCESS_TOKEN ?? "YOUR_BEARER_TOKEN";
async function run() {
const response = await axios({
method: "post",
url: BASE_URL + "/api/co/messages/mark-read",
headers: {
"Content-Type": "application/json",
Authorization: "Bearer " + ACCESS_TOKEN,
},
data: {
"thread_id": "string_value",
"last_read_id": 1,
"last_read_at": "string_value"
},
timeout: 20000,
});
console.log(response.status, response.data);
}
run().catch((error) => {
console.error(error.response?.status, error.response?.data ?? error.message);
});
cURL example
curl -X POST 'https://api.minbil.no/api/co/messages/mark-read'\
-H 'Accept: application/json'\
-H 'Authorization: Bearer <access-token>'\
-H 'Content-Type: application/json'\
-d '{"thread_id": "string_value", "last_read_id": 1, "last_read_at": "string_value"}'
Fetch example
const BASE_URL = process.env.MINBIL_API_BASE_URL ?? "http://localhost:5000";
const API_KEY = process.env.MINBIL_API_KEY ?? "YOUR_API_KEY";
const ACCESS_TOKEN = process.env.MINBIL_ACCESS_TOKEN ?? "YOUR_BEARER_TOKEN";
const response = await fetch(BASE_URL + "/api/co/messages/mark-read", {
method: "POST",
headers: {
"Content-Type": "application/json",
Authorization: "Bearer " + ACCESS_TOKEN,
},
body: JSON.stringify({
"thread_id": "string_value",
"last_read_id": 1,
"last_read_at": "string_value"
}),
});
const data = await response.json();
console.log(response.status, data);
OPTIONS/api/co/messages/sendEndpoint operation.
Sends a message in the booking thread as the car owner. Payloads - JSON: `{ thread_id, message?, attachments?[] }` - multipart/form-data: `thread_id`, `message` (optional), `files` (1..n) Notes - At least one of `message` or attachment is required.
Auth: Bearer token (`Authorization: Bearer <token>`)Source: CAROWNER-API-COMPLETE.md
Response Example
{
"data": {},
"meta": {
"request_id": "f59ee325-0445-4bd0-9bf1-73edcd7da151",
"generated_at": "2026-02-12T10:00:00Z"
}
}
Node.js Axios example
import axios from "axios";
const BASE_URL = process.env.MINBIL_API_BASE_URL ?? "http://localhost:5000";
const API_KEY = process.env.MINBIL_API_KEY ?? "YOUR_API_KEY";
const ACCESS_TOKEN = process.env.MINBIL_ACCESS_TOKEN ?? "YOUR_BEARER_TOKEN";
async function run() {
const response = await axios({
method: "options",
url: BASE_URL + "/api/co/messages/send",
headers: {
"Content-Type": "application/json",
Authorization: "Bearer " + ACCESS_TOKEN,
},
timeout: 20000,
});
console.log(response.status, response.data);
}
run().catch((error) => {
console.error(error.response?.status, error.response?.data ?? error.message);
});
cURL example
curl -X OPTIONS 'https://api.minbil.no/api/co/messages/send'\
-H 'Accept: application/json'\
-H 'Authorization: Bearer <access-token>'
Fetch example
const BASE_URL = process.env.MINBIL_API_BASE_URL ?? "http://localhost:5000";
const API_KEY = process.env.MINBIL_API_KEY ?? "YOUR_API_KEY";
const ACCESS_TOKEN = process.env.MINBIL_ACCESS_TOKEN ?? "YOUR_BEARER_TOKEN";
const response = await fetch(BASE_URL + "/api/co/messages/send", {
method: "OPTIONS",
headers: {
"Content-Type": "application/json",
Authorization: "Bearer " + ACCESS_TOKEN,
},
});
const data = await response.json();
console.log(response.status, data);
POST/api/co/messages/sendEndpoint operation.
Sends a message in the booking thread as the car owner. Payloads - JSON: `{ thread_id, message?, attachments?[] }` - multipart/form-data: `thread_id`, `message` (optional), `files` (1..n) Notes - At least one of `message` or attachment is required.
Auth: Bearer token (`Authorization: Bearer <token>`)Source: CAROWNER-API-COMPLETE.md
Request Example
{
"thread_id": "string_value",
"message": "string_value",
"org_nr": "921460929",
"attachments": [
{
"url": "string_value",
"content_type": "string_value",
"name": "string_value",
"size": 1
}
]
}
Response Example
{
"message": {
"id": 1,
"booking_id": 1,
"workshop_org_nr": "921460929",
"sender_type": "string_value",
"message_text": "string_value",
"attachments": [
{}
],
"is_read": true,
"created_at": "string_value",
"text": "string_value",
"message": "string_value",
"content": "string_value",
"sender_role": "string_value",
"from": "string_value",
"unread": true
},
"unread_count": 1
}
Node.js Axios example
import axios from "axios";
const BASE_URL = process.env.MINBIL_API_BASE_URL ?? "http://localhost:5000";
const API_KEY = process.env.MINBIL_API_KEY ?? "YOUR_API_KEY";
const ACCESS_TOKEN = process.env.MINBIL_ACCESS_TOKEN ?? "YOUR_BEARER_TOKEN";
async function run() {
const response = await axios({
method: "post",
url: BASE_URL + "/api/co/messages/send",
headers: {
"Content-Type": "application/json",
Authorization: "Bearer " + ACCESS_TOKEN,
},
data: {
"thread_id": "string_value",
"message": "string_value",
"org_nr": "921460929",
"attachments": [
{
"url": "string_value",
"content_type": "string_value",
"name": "string_value",
"size": 1
}
]
},
timeout: 20000,
});
console.log(response.status, response.data);
}
run().catch((error) => {
console.error(error.response?.status, error.response?.data ?? error.message);
});
cURL example
curl -X POST 'https://api.minbil.no/api/co/messages/send'\
-H 'Accept: application/json'\
-H 'Authorization: Bearer <access-token>'\
-H 'Content-Type: application/json'\
-d '{"thread_id": "string_value", "message": "string_value", "org_nr": "921460929", "attachments": [{"url": "string_value", "content_type": "string_value", "name": "string_value", "size": 1}]}'
Fetch example
const BASE_URL = process.env.MINBIL_API_BASE_URL ?? "http://localhost:5000";
const API_KEY = process.env.MINBIL_API_KEY ?? "YOUR_API_KEY";
const ACCESS_TOKEN = process.env.MINBIL_ACCESS_TOKEN ?? "YOUR_BEARER_TOKEN";
const response = await fetch(BASE_URL + "/api/co/messages/send", {
method: "POST",
headers: {
"Content-Type": "application/json",
Authorization: "Bearer " + ACCESS_TOKEN,
},
body: JSON.stringify({
"thread_id": "string_value",
"message": "string_value",
"org_nr": "921460929",
"attachments": [
{
"url": "string_value",
"content_type": "string_value",
"name": "string_value",
"size": 1
}
]
}),
});
const data = await response.json();
console.log(response.status, data);
GET/api/co/messages/thread/123?page=string_value&size=string_valueEndpoint operation.
Fetches messages in a booking thread (newest at the bottom). Sort: `created_at` ASC, `id` ASC. Notes - Alias routes: `/messages/thread/{booking_id}` and `/messages/{booking_id}`.
Auth: Bearer token (`Authorization: Bearer <token>`)Source: CAROWNER-API-COMPLETE.md
Response Example
{
"data": [
{
"id": 1,
"booking_id": 1,
"workshop_org_nr": "921460929",
"sender_type": "string_value",
"message_text": "string_value",
"attachments": [
{}
],
"is_read": true,
"created_at": "string_value",
"text": "string_value",
"message": "string_value",
"content": "string_value",
"sender_role": "string_value",
"from": "string_value",
"unread": true
}
],
"meta": {
"org_nr": "921460929",
"page": 1,
"page_size": 1,
"total": 1,
"total_pages": 1,
"has_next": true,
"has_prev": true,
"unread_count": 1
},
"links": {
"self": "string_value",
"first": "string_value",
"prev": "string_value",
"next": "string_value",
"last": "string_value"
}
}
Node.js Axios example
import axios from "axios";
const BASE_URL = process.env.MINBIL_API_BASE_URL ?? "http://localhost:5000";
const API_KEY = process.env.MINBIL_API_KEY ?? "YOUR_API_KEY";
const ACCESS_TOKEN = process.env.MINBIL_ACCESS_TOKEN ?? "YOUR_BEARER_TOKEN";
async function run() {
const response = await axios({
method: "get",
url: BASE_URL + "/api/co/messages/thread/123?page=string_value&size=string_value",
headers: {
"Content-Type": "application/json",
Authorization: "Bearer " + ACCESS_TOKEN,
},
timeout: 20000,
});
console.log(response.status, response.data);
}
run().catch((error) => {
console.error(error.response?.status, error.response?.data ?? error.message);
});
cURL example
curl -X GET 'https://api.minbil.no/api/co/messages/thread/123?page=string_value&size=string_value'\
-H 'Accept: application/json'\
-H 'Authorization: Bearer <access-token>'
Fetch example
const BASE_URL = process.env.MINBIL_API_BASE_URL ?? "http://localhost:5000";
const API_KEY = process.env.MINBIL_API_KEY ?? "YOUR_API_KEY";
const ACCESS_TOKEN = process.env.MINBIL_ACCESS_TOKEN ?? "YOUR_BEARER_TOKEN";
const response = await fetch(BASE_URL + "/api/co/messages/thread/123?page=string_value&size=string_value", {
method: "GET",
headers: {
"Content-Type": "application/json",
Authorization: "Bearer " + ACCESS_TOKEN,
},
});
const data = await response.json();
console.log(response.status, data);
OPTIONS/api/co/messages/thread/123?page=string_value&size=string_valueEndpoint operation.
Fetches messages in a booking thread (newest at the bottom). Sort: `created_at` ASC, `id` ASC. Notes - Alias routes: `/messages/thread/{booking_id}` and `/messages/{booking_id}`.
Auth: Bearer token (`Authorization: Bearer <token>`)Source: CAROWNER-API-COMPLETE.md
Response Example
{
"data": {},
"meta": {
"request_id": "f59ee325-0445-4bd0-9bf1-73edcd7da151",
"generated_at": "2026-02-12T10:00:00Z"
}
}
Node.js Axios example
import axios from "axios";
const BASE_URL = process.env.MINBIL_API_BASE_URL ?? "http://localhost:5000";
const API_KEY = process.env.MINBIL_API_KEY ?? "YOUR_API_KEY";
const ACCESS_TOKEN = process.env.MINBIL_ACCESS_TOKEN ?? "YOUR_BEARER_TOKEN";
async function run() {
const response = await axios({
method: "options",
url: BASE_URL + "/api/co/messages/thread/123?page=string_value&size=string_value",
headers: {
"Content-Type": "application/json",
Authorization: "Bearer " + ACCESS_TOKEN,
},
timeout: 20000,
});
console.log(response.status, response.data);
}
run().catch((error) => {
console.error(error.response?.status, error.response?.data ?? error.message);
});
cURL example
curl -X OPTIONS 'https://api.minbil.no/api/co/messages/thread/123?page=string_value&size=string_value'\
-H 'Accept: application/json'\
-H 'Authorization: Bearer <access-token>'
Fetch example
const BASE_URL = process.env.MINBIL_API_BASE_URL ?? "http://localhost:5000";
const API_KEY = process.env.MINBIL_API_KEY ?? "YOUR_API_KEY";
const ACCESS_TOKEN = process.env.MINBIL_ACCESS_TOKEN ?? "YOUR_BEARER_TOKEN";
const response = await fetch(BASE_URL + "/api/co/messages/thread/123?page=string_value&size=string_value", {
method: "OPTIONS",
headers: {
"Content-Type": "application/json",
Authorization: "Bearer " + ACCESS_TOKEN,
},
});
const data = await response.json();
console.log(response.status, data);
OPTIONS/api/co/messages/thread/123/read-up-toEndpoint operation.
Marks workshop→car owner messages as read up to and including the given message ID. Notes - Optional `last_read_at` applies to JSON thread messages.
Auth: Bearer token (`Authorization: Bearer <token>`)Source: CAROWNER-API-COMPLETE.md
Response Example
{
"data": {},
"meta": {
"request_id": "f59ee325-0445-4bd0-9bf1-73edcd7da151",
"generated_at": "2026-02-12T10:00:00Z"
}
}
Node.js Axios example
import axios from "axios";
const BASE_URL = process.env.MINBIL_API_BASE_URL ?? "http://localhost:5000";
const API_KEY = process.env.MINBIL_API_KEY ?? "YOUR_API_KEY";
const ACCESS_TOKEN = process.env.MINBIL_ACCESS_TOKEN ?? "YOUR_BEARER_TOKEN";
async function run() {
const response = await axios({
method: "options",
url: BASE_URL + "/api/co/messages/thread/123/read-up-to",
headers: {
"Content-Type": "application/json",
Authorization: "Bearer " + ACCESS_TOKEN,
},
timeout: 20000,
});
console.log(response.status, response.data);
}
run().catch((error) => {
console.error(error.response?.status, error.response?.data ?? error.message);
});
cURL example
curl -X OPTIONS 'https://api.minbil.no/api/co/messages/thread/123/read-up-to'\
-H 'Accept: application/json'\
-H 'Authorization: Bearer <access-token>'
Fetch example
const BASE_URL = process.env.MINBIL_API_BASE_URL ?? "http://localhost:5000";
const API_KEY = process.env.MINBIL_API_KEY ?? "YOUR_API_KEY";
const ACCESS_TOKEN = process.env.MINBIL_ACCESS_TOKEN ?? "YOUR_BEARER_TOKEN";
const response = await fetch(BASE_URL + "/api/co/messages/thread/123/read-up-to", {
method: "OPTIONS",
headers: {
"Content-Type": "application/json",
Authorization: "Bearer " + ACCESS_TOKEN,
},
});
const data = await response.json();
console.log(response.status, data);
POST/api/co/messages/thread/123/read-up-toEndpoint operation.
Marks workshop→car owner messages as read up to and including the given message ID. Notes - Optional `last_read_at` applies to JSON thread messages.
Auth: Bearer token (`Authorization: Bearer <token>`)Source: CAROWNER-API-COMPLETE.md
Request Example
{
"last_read_id": 1,
"last_read_at": "string_value"
}
Response Example
{
"updated": 1,
"json_updated": 1,
"unread_count": 1,
"read_at": "string_value"
}
Node.js Axios example
import axios from "axios";
const BASE_URL = process.env.MINBIL_API_BASE_URL ?? "http://localhost:5000";
const API_KEY = process.env.MINBIL_API_KEY ?? "YOUR_API_KEY";
const ACCESS_TOKEN = process.env.MINBIL_ACCESS_TOKEN ?? "YOUR_BEARER_TOKEN";
async function run() {
const response = await axios({
method: "post",
url: BASE_URL + "/api/co/messages/thread/123/read-up-to",
headers: {
"Content-Type": "application/json",
Authorization: "Bearer " + ACCESS_TOKEN,
},
data: {
"last_read_id": 1,
"last_read_at": "string_value"
},
timeout: 20000,
});
console.log(response.status, response.data);
}
run().catch((error) => {
console.error(error.response?.status, error.response?.data ?? error.message);
});
cURL example
curl -X POST 'https://api.minbil.no/api/co/messages/thread/123/read-up-to'\
-H 'Accept: application/json'\
-H 'Authorization: Bearer <access-token>'\
-H 'Content-Type: application/json'\
-d '{"last_read_id": 1, "last_read_at": "string_value"}'
Fetch example
const BASE_URL = process.env.MINBIL_API_BASE_URL ?? "http://localhost:5000";
const API_KEY = process.env.MINBIL_API_KEY ?? "YOUR_API_KEY";
const ACCESS_TOKEN = process.env.MINBIL_ACCESS_TOKEN ?? "YOUR_BEARER_TOKEN";
const response = await fetch(BASE_URL + "/api/co/messages/thread/123/read-up-to", {
method: "POST",
headers: {
"Content-Type": "application/json",
Authorization: "Bearer " + ACCESS_TOKEN,
},
body: JSON.stringify({
"last_read_id": 1,
"last_read_at": "string_value"
}),
});
const data = await response.json();
console.log(response.status, data);
GET/api/co/messages/123?page=string_value&size=string_valueEndpoint operation.
Fetches messages in a booking thread (newest at the bottom). Sort: `created_at` ASC, `id` ASC. Notes - Alias routes: `/messages/thread/{booking_id}` and `/messages/{booking_id}`.
Auth: Bearer token (`Authorization: Bearer <token>`)Source: CAROWNER-API-COMPLETE.md
Response Example
{
"data": [
{
"id": 1,
"booking_id": 1,
"workshop_org_nr": "921460929",
"sender_type": "string_value",
"message_text": "string_value",
"attachments": [
{}
],
"is_read": true,
"created_at": "string_value",
"text": "string_value",
"message": "string_value",
"content": "string_value",
"sender_role": "string_value",
"from": "string_value",
"unread": true
}
],
"meta": {
"org_nr": "921460929",
"page": 1,
"page_size": 1,
"total": 1,
"total_pages": 1,
"has_next": true,
"has_prev": true,
"unread_count": 1
},
"links": {
"self": "string_value",
"first": "string_value",
"prev": "string_value",
"next": "string_value",
"last": "string_value"
}
}
Node.js Axios example
import axios from "axios";
const BASE_URL = process.env.MINBIL_API_BASE_URL ?? "http://localhost:5000";
const API_KEY = process.env.MINBIL_API_KEY ?? "YOUR_API_KEY";
const ACCESS_TOKEN = process.env.MINBIL_ACCESS_TOKEN ?? "YOUR_BEARER_TOKEN";
async function run() {
const response = await axios({
method: "get",
url: BASE_URL + "/api/co/messages/123?page=string_value&size=string_value",
headers: {
"Content-Type": "application/json",
Authorization: "Bearer " + ACCESS_TOKEN,
},
timeout: 20000,
});
console.log(response.status, response.data);
}
run().catch((error) => {
console.error(error.response?.status, error.response?.data ?? error.message);
});
cURL example
curl -X GET 'https://api.minbil.no/api/co/messages/123?page=string_value&size=string_value'\
-H 'Accept: application/json'\
-H 'Authorization: Bearer <access-token>'
Fetch example
const BASE_URL = process.env.MINBIL_API_BASE_URL ?? "http://localhost:5000";
const API_KEY = process.env.MINBIL_API_KEY ?? "YOUR_API_KEY";
const ACCESS_TOKEN = process.env.MINBIL_ACCESS_TOKEN ?? "YOUR_BEARER_TOKEN";
const response = await fetch(BASE_URL + "/api/co/messages/123?page=string_value&size=string_value", {
method: "GET",
headers: {
"Content-Type": "application/json",
Authorization: "Bearer " + ACCESS_TOKEN,
},
});
const data = await response.json();
console.log(response.status, data);
OPTIONS/api/co/messages/123?page=string_value&size=string_valueEndpoint operation.
Fetches messages in a booking thread (newest at the bottom). Sort: `created_at` ASC, `id` ASC. Notes - Alias routes: `/messages/thread/{booking_id}` and `/messages/{booking_id}`.
Auth: Bearer token (`Authorization: Bearer <token>`)Source: CAROWNER-API-COMPLETE.md
Response Example
{
"data": {},
"meta": {
"request_id": "f59ee325-0445-4bd0-9bf1-73edcd7da151",
"generated_at": "2026-02-12T10:00:00Z"
}
}
Node.js Axios example
import axios from "axios";
const BASE_URL = process.env.MINBIL_API_BASE_URL ?? "http://localhost:5000";
const API_KEY = process.env.MINBIL_API_KEY ?? "YOUR_API_KEY";
const ACCESS_TOKEN = process.env.MINBIL_ACCESS_TOKEN ?? "YOUR_BEARER_TOKEN";
async function run() {
const response = await axios({
method: "options",
url: BASE_URL + "/api/co/messages/123?page=string_value&size=string_value",
headers: {
"Content-Type": "application/json",
Authorization: "Bearer " + ACCESS_TOKEN,
},
timeout: 20000,
});
console.log(response.status, response.data);
}
run().catch((error) => {
console.error(error.response?.status, error.response?.data ?? error.message);
});
cURL example
curl -X OPTIONS 'https://api.minbil.no/api/co/messages/123?page=string_value&size=string_value'\
-H 'Accept: application/json'\
-H 'Authorization: Bearer <access-token>'
Fetch example
const BASE_URL = process.env.MINBIL_API_BASE_URL ?? "http://localhost:5000";
const API_KEY = process.env.MINBIL_API_KEY ?? "YOUR_API_KEY";
const ACCESS_TOKEN = process.env.MINBIL_ACCESS_TOKEN ?? "YOUR_BEARER_TOKEN";
const response = await fetch(BASE_URL + "/api/co/messages/123?page=string_value&size=string_value", {
method: "OPTIONS",
headers: {
"Content-Type": "application/json",
Authorization: "Bearer " + ACCESS_TOKEN,
},
});
const data = await response.json();
console.log(response.status, data);
GET/api/co/messages/123/messages?page=string_value&size=string_valueEndpoint operation.
Fetches messages in a booking thread (newest at the bottom). Sort: `created_at` ASC, `id` ASC. Notes - Alias routes: `/messages/thread/{booking_id}` and `/messages/{booking_id}`.
Auth: Bearer token (`Authorization: Bearer <token>`)Source: CAROWNER-API-COMPLETE.md
Response Example
{
"data": [
{
"id": 1,
"booking_id": 1,
"workshop_org_nr": "921460929",
"sender_type": "string_value",
"message_text": "string_value",
"attachments": [
{}
],
"is_read": true,
"created_at": "string_value",
"text": "string_value",
"message": "string_value",
"content": "string_value",
"sender_role": "string_value",
"from": "string_value",
"unread": true
}
],
"meta": {
"org_nr": "921460929",
"page": 1,
"page_size": 1,
"total": 1,
"total_pages": 1,
"has_next": true,
"has_prev": true,
"unread_count": 1
},
"links": {
"self": "string_value",
"first": "string_value",
"prev": "string_value",
"next": "string_value",
"last": "string_value"
}
}
Node.js Axios example
import axios from "axios";
const BASE_URL = process.env.MINBIL_API_BASE_URL ?? "http://localhost:5000";
const API_KEY = process.env.MINBIL_API_KEY ?? "YOUR_API_KEY";
const ACCESS_TOKEN = process.env.MINBIL_ACCESS_TOKEN ?? "YOUR_BEARER_TOKEN";
async function run() {
const response = await axios({
method: "get",
url: BASE_URL + "/api/co/messages/123/messages?page=string_value&size=string_value",
headers: {
"Content-Type": "application/json",
Authorization: "Bearer " + ACCESS_TOKEN,
},
timeout: 20000,
});
console.log(response.status, response.data);
}
run().catch((error) => {
console.error(error.response?.status, error.response?.data ?? error.message);
});
cURL example
curl -X GET 'https://api.minbil.no/api/co/messages/123/messages?page=string_value&size=string_value'\
-H 'Accept: application/json'\
-H 'Authorization: Bearer <access-token>'
Fetch example
const BASE_URL = process.env.MINBIL_API_BASE_URL ?? "http://localhost:5000";
const API_KEY = process.env.MINBIL_API_KEY ?? "YOUR_API_KEY";
const ACCESS_TOKEN = process.env.MINBIL_ACCESS_TOKEN ?? "YOUR_BEARER_TOKEN";
const response = await fetch(BASE_URL + "/api/co/messages/123/messages?page=string_value&size=string_value", {
method: "GET",
headers: {
"Content-Type": "application/json",
Authorization: "Bearer " + ACCESS_TOKEN,
},
});
const data = await response.json();
console.log(response.status, data);
OPTIONS/api/co/messages/123/messages?page=string_value&size=string_valueEndpoint operation.
Fetches messages in a booking thread (newest at the bottom). Sort: `created_at` ASC, `id` ASC. Notes - Alias routes: `/messages/thread/{booking_id}` and `/messages/{booking_id}`.
Auth: Bearer token (`Authorization: Bearer <token>`)Source: CAROWNER-API-COMPLETE.md
Response Example
{
"data": {},
"meta": {
"request_id": "f59ee325-0445-4bd0-9bf1-73edcd7da151",
"generated_at": "2026-02-12T10:00:00Z"
}
}
Node.js Axios example
import axios from "axios";
const BASE_URL = process.env.MINBIL_API_BASE_URL ?? "http://localhost:5000";
const API_KEY = process.env.MINBIL_API_KEY ?? "YOUR_API_KEY";
const ACCESS_TOKEN = process.env.MINBIL_ACCESS_TOKEN ?? "YOUR_BEARER_TOKEN";
async function run() {
const response = await axios({
method: "options",
url: BASE_URL + "/api/co/messages/123/messages?page=string_value&size=string_value",
headers: {
"Content-Type": "application/json",
Authorization: "Bearer " + ACCESS_TOKEN,
},
timeout: 20000,
});
console.log(response.status, response.data);
}
run().catch((error) => {
console.error(error.response?.status, error.response?.data ?? error.message);
});
cURL example
curl -X OPTIONS 'https://api.minbil.no/api/co/messages/123/messages?page=string_value&size=string_value'\
-H 'Accept: application/json'\
-H 'Authorization: Bearer <access-token>'
Fetch example
const BASE_URL = process.env.MINBIL_API_BASE_URL ?? "http://localhost:5000";
const API_KEY = process.env.MINBIL_API_KEY ?? "YOUR_API_KEY";
const ACCESS_TOKEN = process.env.MINBIL_ACCESS_TOKEN ?? "YOUR_BEARER_TOKEN";
const response = await fetch(BASE_URL + "/api/co/messages/123/messages?page=string_value&size=string_value", {
method: "OPTIONS",
headers: {
"Content-Type": "application/json",
Authorization: "Bearer " + ACCESS_TOKEN,
},
});
const data = await response.json();
console.log(response.status, data);
OPTIONS/api/co/messages/123/messages/read-up-toEndpoint operation.
Marks workshop→car owner messages as read up to and including the given message ID. Notes - Optional `last_read_at` applies to JSON thread messages.
Auth: Bearer token (`Authorization: Bearer <token>`)Source: CAROWNER-API-COMPLETE.md
Response Example
{
"data": {},
"meta": {
"request_id": "f59ee325-0445-4bd0-9bf1-73edcd7da151",
"generated_at": "2026-02-12T10:00:00Z"
}
}
Node.js Axios example
import axios from "axios";
const BASE_URL = process.env.MINBIL_API_BASE_URL ?? "http://localhost:5000";
const API_KEY = process.env.MINBIL_API_KEY ?? "YOUR_API_KEY";
const ACCESS_TOKEN = process.env.MINBIL_ACCESS_TOKEN ?? "YOUR_BEARER_TOKEN";
async function run() {
const response = await axios({
method: "options",
url: BASE_URL + "/api/co/messages/123/messages/read-up-to",
headers: {
"Content-Type": "application/json",
Authorization: "Bearer " + ACCESS_TOKEN,
},
timeout: 20000,
});
console.log(response.status, response.data);
}
run().catch((error) => {
console.error(error.response?.status, error.response?.data ?? error.message);
});
cURL example
curl -X OPTIONS 'https://api.minbil.no/api/co/messages/123/messages/read-up-to'\
-H 'Accept: application/json'\
-H 'Authorization: Bearer <access-token>'
Fetch example
const BASE_URL = process.env.MINBIL_API_BASE_URL ?? "http://localhost:5000";
const API_KEY = process.env.MINBIL_API_KEY ?? "YOUR_API_KEY";
const ACCESS_TOKEN = process.env.MINBIL_ACCESS_TOKEN ?? "YOUR_BEARER_TOKEN";
const response = await fetch(BASE_URL + "/api/co/messages/123/messages/read-up-to", {
method: "OPTIONS",
headers: {
"Content-Type": "application/json",
Authorization: "Bearer " + ACCESS_TOKEN,
},
});
const data = await response.json();
console.log(response.status, data);