Page Introduction

Ratings namespace

This namespace page contains request/response examples, endpoint matrix, and implementation-ready method details for frontend API clients.

  • Use quick index for direct navigation to endpoint details.
  • Use matrix view to verify auth and method-path combinations.
  • Test namespace calls in Workshop Try-It before integrating UI actions.

Workshop Namespace

Ratings

Owner-facing endpoints to list, inspect, summarize, and delete ratings received by the workshop.

7Endpoint methods

Endpoint Quick Index

Click an endpoint to jump to details and code examples.

Endpoint Matrix

MethodPathAuthSummary
GET/api/ws/ratingsBearerList workshop ratings
GET/api/ws/ratings/summaryBearerGet ratings summary
GET/api/ws/ratings/:rating_idBearerGet rating detail
DELETE/api/ws/ratings/:rating_idBearerDelete rating
POST/api/ws/ratings/:rating_id/replyBearerCreate workshop reply to rating
PUT/api/ws/ratings/:rating_id/replyBearerUpdate workshop reply to rating (deprecated alias)
DELETE/api/ws/ratings/bulk-deleteBearerBulk delete ratings

Detailed Endpoints

GET/api/ws/ratings

List workshop ratings

Returns a paginated list of ratings for the authenticated workshop. Filters - q: search in review text - rating_min / rating_max: rating range - date_from / date_to: date range (YYYY-MM-DD) - only_public: filter public co...

Auth: BearerSource: API-DOC/workshop-rules/ratings.md

Request Example

This endpoint does not use a JSON body. Send path/query parameters and required headers.

Response Example

{
  "data": {
    "id": 123
  }
}
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_WS_ACCESS_TOKEN ?? "YOUR_BEARER_TOKEN";

async function run() {
  const response = await axios({
    method: "get",
    url: `${BASE_URL}/api/ws/ratings`,
    headers: {
      "Content-Type": "application/json",
      Authorization: `Bearer ${ACCESS_TOKEN}`,
    },
    timeout: 20000,
  });

  console.log(response.data);
}

run().catch((error) => {
  console.error(error.response?.data ?? error.message);
});
cURL example
BASE_URL="${MINBIL_API_BASE_URL:-http://localhost:5000}"
API_KEY="${MINBIL_API_KEY:-YOUR_API_KEY}"
ACCESS_TOKEN="${MINBIL_WS_ACCESS_TOKEN:-YOUR_BEARER_TOKEN}"

curl -X GET "${BASE_URL}/api/ws/ratings" \\
  -H "Content-Type: 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_WS_ACCESS_TOKEN ?? "YOUR_BEARER_TOKEN";

const response = await fetch(`${BASE_URL}/api/ws/ratings`, {
  method: "GET",
  headers: {
    "Content-Type": "application/json",
    Authorization: `Bearer ${ACCESS_TOKEN}`,
  },
});

const data = await response.json();
console.log(data);
GET/api/ws/ratings/summary

Get ratings summary

Returns aggregated rating statistics for the workshop (average, count, last rating, distribution).

Auth: BearerSource: API-DOC/workshop-rules/ratings.md

Request Example

This endpoint does not use a JSON body. Send path/query parameters and required headers.

Response Example

{
  "data": {
    "id": 123
  }
}
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_WS_ACCESS_TOKEN ?? "YOUR_BEARER_TOKEN";

async function run() {
  const response = await axios({
    method: "get",
    url: `${BASE_URL}/api/ws/ratings/summary`,
    headers: {
      "Content-Type": "application/json",
      Authorization: `Bearer ${ACCESS_TOKEN}`,
    },
    timeout: 20000,
  });

  console.log(response.data);
}

run().catch((error) => {
  console.error(error.response?.data ?? error.message);
});
cURL example
BASE_URL="${MINBIL_API_BASE_URL:-http://localhost:5000}"
API_KEY="${MINBIL_API_KEY:-YOUR_API_KEY}"
ACCESS_TOKEN="${MINBIL_WS_ACCESS_TOKEN:-YOUR_BEARER_TOKEN}"

curl -X GET "${BASE_URL}/api/ws/ratings/summary" \\
  -H "Content-Type: 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_WS_ACCESS_TOKEN ?? "YOUR_BEARER_TOKEN";

const response = await fetch(`${BASE_URL}/api/ws/ratings/summary`, {
  method: "GET",
  headers: {
    "Content-Type": "application/json",
    Authorization: `Bearer ${ACCESS_TOKEN}`,
  },
});

const data = await response.json();
console.log(data);
GET/api/ws/ratings/:rating_id

Get rating detail

Fetches a single rating by id.

Auth: BearerSource: API-DOC/workshop-rules/ratings.md

Request Example

This endpoint does not use a JSON body. Send path/query parameters and required headers.

Response Example

{
  "data": {
    "id": 123
  }
}
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_WS_ACCESS_TOKEN ?? "YOUR_BEARER_TOKEN";

async function run() {
  // Replace path params before calling endpoint: rating_id
  const response = await axios({
    method: "get",
    url: `${BASE_URL}/api/ws/ratings/:rating_id`,
    headers: {
      "Content-Type": "application/json",
      Authorization: `Bearer ${ACCESS_TOKEN}`,
    },
    timeout: 20000,
  });

  console.log(response.data);
}

run().catch((error) => {
  console.error(error.response?.data ?? error.message);
});
cURL example
BASE_URL="${MINBIL_API_BASE_URL:-http://localhost:5000}"
API_KEY="${MINBIL_API_KEY:-YOUR_API_KEY}"
ACCESS_TOKEN="${MINBIL_WS_ACCESS_TOKEN:-YOUR_BEARER_TOKEN}"

curl -X GET "${BASE_URL}/api/ws/ratings/:rating_id" \\
  -H "Content-Type: 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_WS_ACCESS_TOKEN ?? "YOUR_BEARER_TOKEN";

const response = await fetch(`${BASE_URL}/api/ws/ratings/:rating_id`, {
  method: "GET",
  headers: {
    "Content-Type": "application/json",
    Authorization: `Bearer ${ACCESS_TOKEN}`,
  },
});

const data = await response.json();
console.log(data);
DELETE/api/ws/ratings/:rating_id

Delete rating

Deletes a rating by id. Optional reason can be provided via ?reason= or JSON body.

Auth: BearerSource: API-DOC/workshop-rules/ratings.md

Request Example

{
  "path_params": {
    "rating_id": 123
  },
  "body": {
    "example_field": "example_value"
  }
}

Response Example

{
  "success": true,
  "message": "Operation completed"
}
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_WS_ACCESS_TOKEN ?? "YOUR_BEARER_TOKEN";

async function run() {
  // Replace path params before calling endpoint: rating_id
  const response = await axios({
    method: "delete",
    url: `${BASE_URL}/api/ws/ratings/:rating_id`,
    headers: {
      "Content-Type": "application/json",
      Authorization: `Bearer ${ACCESS_TOKEN}`,
    },
    data: {
      "example_field": "example_value"
    },
    timeout: 20000,
  });

  console.log(response.data);
}

run().catch((error) => {
  console.error(error.response?.data ?? error.message);
});
cURL example
BASE_URL="${MINBIL_API_BASE_URL:-http://localhost:5000}"
API_KEY="${MINBIL_API_KEY:-YOUR_API_KEY}"
ACCESS_TOKEN="${MINBIL_WS_ACCESS_TOKEN:-YOUR_BEARER_TOKEN}"

curl -X DELETE "${BASE_URL}/api/ws/ratings/:rating_id" \\
  -H "Content-Type: application/json" \\
  -H "Authorization: Bearer ${ACCESS_TOKEN}" \\
  -d '{
  "example_field": "example_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_WS_ACCESS_TOKEN ?? "YOUR_BEARER_TOKEN";

const response = await fetch(`${BASE_URL}/api/ws/ratings/:rating_id`, {
  method: "DELETE",
  headers: {
    "Content-Type": "application/json",
    Authorization: `Bearer ${ACCESS_TOKEN}`,
  },
  body: JSON.stringify({
    "example_field": "example_value"
  }),
});

const data = await response.json();
console.log(data);
POST/api/ws/ratings/:rating_id/reply

Create workshop reply to rating

Creates or updates a workshop reply for the given rating.

Auth: BearerSource: API-DOC/workshop-rules/ratings.md

Request Example

{
  "path_params": {
    "rating_id": 123
  },
  "body": {
    "example_field": "example_value"
  }
}

Response Example

{
  "success": true,
  "message": "Operation completed"
}
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_WS_ACCESS_TOKEN ?? "YOUR_BEARER_TOKEN";

async function run() {
  // Replace path params before calling endpoint: rating_id
  const response = await axios({
    method: "post",
    url: `${BASE_URL}/api/ws/ratings/:rating_id/reply`,
    headers: {
      "Content-Type": "application/json",
      Authorization: `Bearer ${ACCESS_TOKEN}`,
    },
    data: {
      "example_field": "example_value"
    },
    timeout: 20000,
  });

  console.log(response.data);
}

run().catch((error) => {
  console.error(error.response?.data ?? error.message);
});
cURL example
BASE_URL="${MINBIL_API_BASE_URL:-http://localhost:5000}"
API_KEY="${MINBIL_API_KEY:-YOUR_API_KEY}"
ACCESS_TOKEN="${MINBIL_WS_ACCESS_TOKEN:-YOUR_BEARER_TOKEN}"

curl -X POST "${BASE_URL}/api/ws/ratings/:rating_id/reply" \\
  -H "Content-Type: application/json" \\
  -H "Authorization: Bearer ${ACCESS_TOKEN}" \\
  -d '{
  "example_field": "example_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_WS_ACCESS_TOKEN ?? "YOUR_BEARER_TOKEN";

const response = await fetch(`${BASE_URL}/api/ws/ratings/:rating_id/reply`, {
  method: "POST",
  headers: {
    "Content-Type": "application/json",
    Authorization: `Bearer ${ACCESS_TOKEN}`,
  },
  body: JSON.stringify({
    "example_field": "example_value"
  }),
});

const data = await response.json();
console.log(data);
PUT/api/ws/ratings/:rating_id/reply

Update workshop reply to rating (deprecated alias)

Deprecated alias. Use POST /api/ws/ratings/{rating_id}/reply.

Auth: BearerSource: API-DOC/workshop-rules/ratings.md

Request Example

{
  "path_params": {
    "rating_id": 123
  },
  "body": {
    "example_field": "example_value"
  }
}

Response Example

{
  "success": true,
  "message": "Operation completed"
}
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_WS_ACCESS_TOKEN ?? "YOUR_BEARER_TOKEN";

async function run() {
  // Replace path params before calling endpoint: rating_id
  const response = await axios({
    method: "put",
    url: `${BASE_URL}/api/ws/ratings/:rating_id/reply`,
    headers: {
      "Content-Type": "application/json",
      Authorization: `Bearer ${ACCESS_TOKEN}`,
    },
    data: {
      "example_field": "example_value"
    },
    timeout: 20000,
  });

  console.log(response.data);
}

run().catch((error) => {
  console.error(error.response?.data ?? error.message);
});
cURL example
BASE_URL="${MINBIL_API_BASE_URL:-http://localhost:5000}"
API_KEY="${MINBIL_API_KEY:-YOUR_API_KEY}"
ACCESS_TOKEN="${MINBIL_WS_ACCESS_TOKEN:-YOUR_BEARER_TOKEN}"

curl -X PUT "${BASE_URL}/api/ws/ratings/:rating_id/reply" \\
  -H "Content-Type: application/json" \\
  -H "Authorization: Bearer ${ACCESS_TOKEN}" \\
  -d '{
  "example_field": "example_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_WS_ACCESS_TOKEN ?? "YOUR_BEARER_TOKEN";

const response = await fetch(`${BASE_URL}/api/ws/ratings/:rating_id/reply`, {
  method: "PUT",
  headers: {
    "Content-Type": "application/json",
    Authorization: `Bearer ${ACCESS_TOKEN}`,
  },
  body: JSON.stringify({
    "example_field": "example_value"
  }),
});

const data = await response.json();
console.log(data);
DELETE/api/ws/ratings/bulk-delete

Bulk delete ratings

Deletes multiple ratings in one request.

Auth: BearerSource: API-DOC/workshop-rules/ratings.md

Request Example

{
  "body": {
    "example_field": "example_value"
  }
}

Response Example

{
  "success": true,
  "message": "Operation completed"
}
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_WS_ACCESS_TOKEN ?? "YOUR_BEARER_TOKEN";

async function run() {
  const response = await axios({
    method: "delete",
    url: `${BASE_URL}/api/ws/ratings/bulk-delete`,
    headers: {
      "Content-Type": "application/json",
      Authorization: `Bearer ${ACCESS_TOKEN}`,
    },
    data: {
      "example_field": "example_value"
    },
    timeout: 20000,
  });

  console.log(response.data);
}

run().catch((error) => {
  console.error(error.response?.data ?? error.message);
});
cURL example
BASE_URL="${MINBIL_API_BASE_URL:-http://localhost:5000}"
API_KEY="${MINBIL_API_KEY:-YOUR_API_KEY}"
ACCESS_TOKEN="${MINBIL_WS_ACCESS_TOKEN:-YOUR_BEARER_TOKEN}"

curl -X DELETE "${BASE_URL}/api/ws/ratings/bulk-delete" \\
  -H "Content-Type: application/json" \\
  -H "Authorization: Bearer ${ACCESS_TOKEN}" \\
  -d '{
  "example_field": "example_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_WS_ACCESS_TOKEN ?? "YOUR_BEARER_TOKEN";

const response = await fetch(`${BASE_URL}/api/ws/ratings/bulk-delete`, {
  method: "DELETE",
  headers: {
    "Content-Type": "application/json",
    Authorization: `Bearer ${ACCESS_TOKEN}`,
  },
  body: JSON.stringify({
    "example_field": "example_value"
  }),
});

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