# API Skillberg

> 
[Skillberg](https://skillberg.app) is a deeptech HR platform that helps organisations manage talent through AI-powered document processing, skill extraction, and career management. This is the reference documentation for **Skillberg's API**.

---

## Who is this API for?

| Audience | Use case |
|---|---|
| **Partner integrations** | Third-party systems that connect via API key to push/pull HR data |
| **Internal services** | AI pipeline that processes CVs and enriches candidate profiles |

---

## Authentication

All endpoints require one of the following:

- **Bearer Token** — JWT issued by Auth0. Used by logged-in users via the frontend. Pass it as `Authorization: Bearer <token>`.
- **API Key** — Static key for service-to-service calls. Pass it as the `x-api-key` header.

Some endpoints accept either method. Check the lock icon on each endpoint to see which schemes apply.

---

## Response format

All responses follow the **JSON-LD / Hydra** standard:

**Single resource:**
```json
{
  "@context": "/contexts/User",
  "@type": "User",
  "@id": "/users/60f7...",
  "id": "60f7...",
  "email": "jane@example.com"
}
```

**Collection (paginated):**
```json
{
  "@context": "/contexts/User",
  "@type": "hydra:Collection",
  "hydra:totalItems": 42,
  "hydra:member": [ ... ],
  "hydra:view": {
    "hydra:first": "/users?page=1",
    "hydra:last": "/users?page=5",
    "hydra:next": "/users?page=3"
  }
}
```

Pagination is controlled via the `page` and `itemsPerPage` query parameters.

**Errors** (`/v1` routes) follow a single, flat envelope:
```json
{
  "error": {
    "code": "not_found",
    "message": "Resource not found",
    "request_id": "3f1c9b8e-2a4d-4e7f-9c0a-1b2c3d4e5f60"
  }
}
```

Every response — success or error — carries an `X-Request-Id` header; quote its
value (mirrored in `request_id` on errors) when contacting support. Routes
served outside the `/v1` prefix (auth flow, health probe) still return the
legacy `hydra:Error` shape.

---

## Main resource groups

### Organisation & users
Manage organisations, their users, roles, and teams.
- **Organisation** — CRUD for organisations
- **User** — User profiles and account management
- **Auth0** — Authentication and token handling
- **Roles** — Permission management (bit-flag based)
- **Team** — Team structure within organisations

### Document processing pipeline
The core AI pipeline that extracts structured data from CVs and resumes:

```
PDF Upload → Document (raw) → Treat (via AI) → TreatedDocument
    → CorrectedTreatedDocument (manual corrections)
        → Enrich (via AI) → EnrichedDocument
            → CorrectedEnrichedDocument (assign sector/job UUIDs)
                → User entities (UserWork, UserEducation, UserSkill...)
```

- **Document** — Upload, treat, enrich, correct documents through the full pipeline

### User profile entities
Structured data extracted from documents or entered manually:
- **UserWork** — Work experience
- **UserEducation** — Education history
- **UserSkill** — Skills
- **UserVolunteer** — Volunteer experience
- **UserInterest** — Interests
- **UserProject** — Projects
- **UserAward** — Awards
- **UserCertificate** — Certificates
- **UserPublication** — Publications
- **UserLanguage** — Languages
- **UserReference** — References
- **UserTitle** — Job titles (extracted best matches)

### Talent management
- **Offer** — Job offers published by organisations
- **OfferUser** — Candidate–offer matching and applications
- **Career** — Career paths and frameworks
- **CareerUser** — User progression within career paths
- **Evaluation** — Skill and performance evaluations
- **SkillSet** — Curated sets of skills for matching

### Platform structure
- **Program** — Training programs
- **Project** — Organisational projects
- **Course** — Learning courses
- **Mission** — Missions and assignments
- **Session** — Training or evaluation sessions

### AI & utilities
- **SkillbergAI** — AI-powered features (matching, recommendations)
- **Api** — Health checks and API metadata

---

## Route conventions

Most resources are nested under organisations and users:

```
/organisations/:orgId/users/:userId/works      → Org manages a user's work entries
/users/:userId/works                            → User manages their own work entries
```

Both route families provide the same functionality but differ in authorization:
- **Organisation routes** use `PermissionsGuard` (role-based access)
- **User routes** use `IsSelfGuard` (the authenticated user can only access their own data)
 Version 1.1.0.
> Uses JSON-LD (Hydra) responses, Bearer token and API key authentication (x-api-key header).

## Authentication

This API supports two authentication methods:

### Bearer Token
Pass a JWT token in the Authorization header:
```
Authorization: Bearer <your-jwt-token>
```

### API Key
Pass your API key in the x-api-key header:
```
x-api-key: <your-api-key>
```

## Response Format

All responses use `application/ld+json` content type following JSON-LD and Hydra standards.

### Single Resource
Single resource responses include `@context`, `@id`, and `@type` fields.

### Collection (Paginated)
Collection responses follow the Hydra paginator format:
- `hydra:member`: Array of resource items
- `hydra:totalItems`: Total count of items
- `hydra:view`: Pagination navigation (first, last, previous, next)
- `hydra:search`: Available search/filter parameters

### Error Response
Error responses follow the Hydra error format:
- `@context`: `/api/contexts/Error`
- `@type`: `hydra:Error`
- `hydra:title`: Error type (e.g., "Bad Request")
- `hydra:description`: Error message details
- `hydra:statusCode`: HTTP status code

## Api

### GET /health

Health check endpoint.

Checks service health and Gyre connectivity. Health status values can be: "healthy", "unhealthy", or "unknown". Returns a status-only summary; internal callers presenting the `X-Internal-Token` header receive extended diagnostics (timestamps, host, full Gyre internals).

**Responses:**

- `200`: Service is healthy and operational.
  - `status` (string): 
  - `gyre` (object): 
  - `mongodb` (object): 
- `500`: Service health check failed due to internal server error or critical system failure.
  - `status` (string): 
  - `gyre` (object): 
  - `mongodb` (object): 

---

## Authentication

### GET /v1/users/{userId}/apiKeys

Retrieves the collection of Api Keys resources.

**Authentication:** Bearer Token

**Parameters:**

- `userId` (path, string, required): 
- `page` (query, number): The collection page number
- `itemsPerPage` (query, number): The number of items per page
- `name` (query, string): 
- `active` (query, boolean): 

**Responses:**

- `200`: Api Key collection
  - `@context` (string): 
  - `@id` (string): 
  - `@type` (string): 
  - `hydra:member` (array): 
  - `hydra:totalItems` (number): 
  - `hydra:view` (string): 
  - `hydra:search` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### POST /v1/users/{userId}/apiKeys

Creates an Api Key.

**Authentication:** Bearer Token

**Parameters:**

- `userId` (path, string, required): 

**Request Body:**

- `name` (string, required): 
- `expiration_date` (object, required): 
- `permissions` (number, required): 
- `organisation_id` (string, required): 

**Responses:**

- `201`: Api Key resource created
  - `id` (string): 
  - `created_at` (string): 
  - `updated_at` (string): 
  - `user_id` (string): 
  - `organisation_id` (string): 
  - `name` (string): 
  - `key` (string): Plaintext API key. Returned ONCE on the create response; absent on every subsequent read.
  - `key_hash` (string): SHA-256 hash of the raw key. Internal.
  - `key_prefix` (string): 
  - `key_last4` (string): 
  - `expiration_date` (object): 
  - `permissions` (number): 
  - `active` (boolean): 
  - `origin` (string): Provenance of the key: 'api' (public API) or 'mcp' (Claude MCP connector).
  - `credits_remaining` (number): Credits left in the current period.
  - ... (see schema for full list)
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### GET /v1/users/{userId}/apiKeys/{apiKeyId}

Retrieves an Api Key resource.

**Authentication:** Bearer Token

**Parameters:**

- `userId` (path, string, required): 
- `apiKeyId` (path, string, required): 

**Responses:**

- `200`: Api Key resource
  - `id` (string): 
  - `created_at` (string): 
  - `updated_at` (string): 
  - `user_id` (string): 
  - `organisation_id` (string): 
  - `name` (string): 
  - `key` (string): Plaintext API key. Returned ONCE on the create response; absent on every subsequent read.
  - `key_hash` (string): SHA-256 hash of the raw key. Internal.
  - `key_prefix` (string): 
  - `key_last4` (string): 
  - `expiration_date` (object): 
  - `permissions` (number): 
  - `active` (boolean): 
  - `origin` (string): Provenance of the key: 'api' (public API) or 'mcp' (Claude MCP connector).
  - `credits_remaining` (number): Credits left in the current period.
  - ... (see schema for full list)
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `404`: Not found
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### POST /v1/apiKeys/reset-credits

Resets credits on every key whose billing period has elapsed.

Admin/ops route (master key). Idempotent — only keys with an elapsed period are reset, so it is safe to run on any cadence. Intended trigger: a monthly external scheduler (e.g. Scaleway cron). Pass dry_run=true to preview without mutating.

**Authentication:** API Key

**Parameters:**

- `dry_run` (query, boolean): 

**Responses:**

- `200`: Reset summary
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### PATCH /v1/users/{userId}/apiKeys/{apiKeyId}/disable

Disables an Api Key.

**Authentication:** Bearer Token

**Parameters:**

- `userId` (path, string, required): 
- `apiKeyId` (path, string, required): 

**Responses:**

- `200`: Api Key resource updated
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

## Career

### GET /v1/organisations/{organisationId}/careers

Retrieves the collection of Career resources.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `organisationId` (path, string, required): 
- `page` (query, number): The collection page number
- `itemsPerPage` (query, number): The number of items per page
- `name` (query, string): 
- `sector_uuid` (query, string): 
- `job_uuid` (query, string): 
- `orderBy[name]` (query, string (enum: asc|desc)): 

**Responses:**

- `200`: Career collection
  - `@context` (string): 
  - `@id` (string): 
  - `@type` (string): 
  - `hydra:member` (array): 
  - `hydra:totalItems` (number): 
  - `hydra:view` (string): 
  - `hydra:search` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### POST /v1/organisations/{organisationId}/careers

Creates a Career resource.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `organisationId` (path, string, required): 

**Request Body:**

- `name` (string, required): 
- `description` (object, required): 
- `sector_uuid` (string, required): 
- `job_uuid` (string, required): 

**Responses:**

- `201`: Career resource created
  - `id` (string): 
  - `created_at` (string): 
  - `updated_at` (string): 
  - `name` (string): 
  - `description` (object): 
  - `sector_uuid` (string): 
  - `job_uuid` (string): 
  - `organisation` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### GET /v1/organisations/{organisationId}/users/{userId}/careers

Retrieves the collection of Career resources.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `organisationId` (path, string, required): 
- `userId` (path, string, required): 
- `page` (query, number): The collection page number
- `itemsPerPage` (query, number): The number of items per page
- `name` (query, string): 
- `sector_uuid` (query, string): 
- `job_uuid` (query, string): 
- `orderBy[name]` (query, string (enum: asc|desc)): 

**Responses:**

- `200`: Career identifier
  - `@context` (string): 
  - `@id` (string): 
  - `@type` (string): 
  - `hydra:member` (array): 
  - `hydra:totalItems` (number): 
  - `hydra:view` (string): 
  - `hydra:search` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `404`: Not found
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### GET /v1/organisations/{organisationId}/careers/{careerId}

Retrieves a Career resource.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `organisationId` (path, string, required): 
- `careerId` (path, string, required): 

**Responses:**

- `200`: Career identifier
  - `id` (string): 
  - `created_at` (string): 
  - `updated_at` (string): 
  - `name` (string): 
  - `description` (object): 
  - `sector_uuid` (string): 
  - `job_uuid` (string): 
  - `organisation` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `404`: Not found
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### PUT /v1/organisations/{organisationId}/careers/{careerId}

Replaces a Career resource.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `organisationId` (path, string, required): 
- `careerId` (path, string, required): 

**Request Body:**

- `name` (string, required): 
- `description` (object, required): 
- `sector_uuid` (string, required): 
- `job_uuid` (string, required): 

**Responses:**

- `200`: Career resource replaced
  - `id` (string): 
  - `created_at` (string): 
  - `updated_at` (string): 
  - `name` (string): 
  - `description` (object): 
  - `sector_uuid` (string): 
  - `job_uuid` (string): 
  - `organisation` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `404`: Not found
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### DELETE /v1/organisations/{organisationId}/careers/{careerId}

Removes a Career resource.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `organisationId` (path, string, required): 
- `careerId` (path, string, required): 

**Responses:**

- `204`: Career resource deleted
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `404`: Not found
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

## CareerUser

### GET /v1/organisations/{organisationId}/careers/{careerId}/careerUsers

Retrieves the collection of CareerUser resources.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `organisationId` (path, string, required): 
- `careerId` (path, string, required): 
- `page` (query, number): The collection page number
- `itemsPerPage` (query, number): The number of items per page
- `user_id` (query, string): 

**Responses:**

- `200`: CareerUser collection
  - `@context` (string): 
  - `@id` (string): 
  - `@type` (string): 
  - `hydra:member` (array): 
  - `hydra:totalItems` (number): 
  - `hydra:view` (string): 
  - `hydra:search` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### POST /v1/organisations/{organisationId}/careers/{careerId}/careerUsers

Creates a CareerUser resource.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `organisationId` (path, string, required): 
- `careerId` (path, string, required): 

**Request Body:**

- `user_id` (string, required): 
- `start_date` (string, required): 
- `end_date` (string, required): 

**Responses:**

- `201`: CareerUser resource created
  - `id` (string): 
  - `created_at` (string): 
  - `updated_at` (string): 
  - `start_date` (string): 
  - `end_date` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### GET /v1/organisations/{organisationId}/users/{userId}/careerUsers

Retrieves the collection of CareerUser resources of a user

**Authentication:** Bearer Token, API Key

**Parameters:**

- `organisationId` (path, string, required): 
- `userId` (path, string, required): 
- `page` (query, number): The collection page number
- `itemsPerPage` (query, number): The number of items per page
- `user_id` (query, string): 

**Responses:**

- `200`: CareerUser collection
  - `@context` (string): 
  - `@id` (string): 
  - `@type` (string): 
  - `hydra:member` (array): 
  - `hydra:totalItems` (number): 
  - `hydra:view` (string): 
  - `hydra:search` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### GET /v1/organisations/{organisationId}/careers/{careerId}/careerUsers/{careerUserId}

Retrieves a CareerUser resource.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `organisationId` (path, string, required): 
- `careerId` (path, string, required): 
- `careerUserId` (path, string, required): 

**Responses:**

- `200`: CareerUser identifier
  - `id` (string): 
  - `created_at` (string): 
  - `updated_at` (string): 
  - `start_date` (string): 
  - `end_date` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `404`: Not found
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### PUT /v1/organisations/{organisationId}/careers/{careerId}/careerUsers/{careerUserId}

Replaces a CareerUser resource.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `organisationId` (path, string, required): 
- `careerId` (path, string, required): 
- `careerUserId` (path, string, required): 

**Request Body:**

- `user_id` (string, required): 
- `start_date` (string, required): 
- `end_date` (string, required): 

**Responses:**

- `200`: CareerUser resource replaced
  - `id` (string): 
  - `created_at` (string): 
  - `updated_at` (string): 
  - `start_date` (string): 
  - `end_date` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `404`: Not found
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### DELETE /v1/organisations/{organisationId}/careers/{careerId}/careerUsers/{careerUserId}

Removes a CareerUser resource.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `organisationId` (path, string, required): 
- `careerId` (path, string, required): 
- `careerUserId` (path, string, required): 

**Responses:**

- `204`: CareerUser resource deleted
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `404`: Not found
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

## Certificates

### GET /v1/users/{userId}/certificates

Retrieves the collection of UserCertificate resources.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `page` (query, number): The collection page number
- `itemsPerPage` (query, number): The number of items per page
- `name` (query, string): 
- `issuer` (query, string): 
- `orderBy[name]` (query, string (enum: asc|desc)): 
- `orderBy[issuer]` (query, string (enum: asc|desc)): 
- `userId` (path, string, required): 

**Responses:**

- `200`: UserCertificate collection
  - `@context` (string): 
  - `@id` (string): 
  - `@type` (string): 
  - `hydra:member` (array): 
  - `hydra:totalItems` (number): 
  - `hydra:view` (string): 
  - `hydra:search` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### POST /v1/users/{userId}/certificates

Creates a UserCertificate resource.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `userId` (path, string, required): 

**Request Body:**

- `name` (string, required): 
- `date` (string, required): 
- `url` (string, required): 
- `issuer` (string, required): 

**Responses:**

- `201`: UserCertificate resource created
  - `id` (string): 
  - `created_at` (string): 
  - `updated_at` (string): 
  - `name` (string): 
  - `date` (string): 
  - `url` (string): 
  - `issuer` (string): 
  - `user` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### GET /v1/users/{userId}/certificates/{certificateId}

Retrieves a UserCertificate resource.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `userId` (path, string, required): 
- `certificateId` (path, string, required): 

**Responses:**

- `200`: UserCertificate resource
  - `id` (string): 
  - `created_at` (string): 
  - `updated_at` (string): 
  - `name` (string): 
  - `date` (string): 
  - `url` (string): 
  - `issuer` (string): 
  - `user` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `404`: Not found
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### PUT /v1/users/{userId}/certificates/{certificateId}

Replaces a UserCertificate resource.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `userId` (path, string, required): 
- `certificateId` (path, string, required): 

**Request Body:**

- `name` (string, required): 
- `date` (string, required): 
- `url` (string, required): 
- `issuer` (string, required): 

**Responses:**

- `200`: UserCertificate resource replaced
  - `id` (string): 
  - `created_at` (string): 
  - `updated_at` (string): 
  - `name` (string): 
  - `date` (string): 
  - `url` (string): 
  - `issuer` (string): 
  - `user` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `404`: Not found
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### DELETE /v1/users/{userId}/certificates/{certificateId}

Removes a UserCertificate resource.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `userId` (path, string, required): 
- `certificateId` (path, string, required): 

**Responses:**

- `204`: UserCertificate resource deleted
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `404`: Not found
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### GET /v1/organisations/{organisationId}/users/{userId}/certificates

Retrieves the collection of UserCertificate resources.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `page` (query, number): The collection page number
- `itemsPerPage` (query, number): The number of items per page
- `name` (query, string): 
- `issuer` (query, string): 
- `orderBy[name]` (query, string (enum: asc|desc)): 
- `orderBy[issuer]` (query, string (enum: asc|desc)): 
- `organisationId` (path, string, required): 
- `userId` (path, string, required): 

**Responses:**

- `200`: UserCertificate collection
  - `@context` (string): 
  - `@id` (string): 
  - `@type` (string): 
  - `hydra:member` (array): 
  - `hydra:totalItems` (number): 
  - `hydra:view` (string): 
  - `hydra:search` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### POST /v1/organisations/{organisationId}/users/{userId}/certificates

Creates a UserCertificate resource.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `organisationId` (path, string, required): 
- `userId` (path, string, required): 

**Request Body:**

- `name` (string, required): 
- `date` (string, required): 
- `url` (string, required): 
- `issuer` (string, required): 

**Responses:**

- `201`: UserCertificate resource created
  - `id` (string): 
  - `created_at` (string): 
  - `updated_at` (string): 
  - `name` (string): 
  - `date` (string): 
  - `url` (string): 
  - `issuer` (string): 
  - `user` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### GET /v1/organisations/{organisationId}/users/{userId}/certificates/{certificateId}

Retrieves a UserCertificate resource.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `organisationId` (path, string, required): 
- `userId` (path, string, required): 
- `certificateId` (path, string, required): 

**Responses:**

- `200`: UserCertificate resource
  - `id` (string): 
  - `created_at` (string): 
  - `updated_at` (string): 
  - `name` (string): 
  - `date` (string): 
  - `url` (string): 
  - `issuer` (string): 
  - `user` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `404`: Not found
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### PUT /v1/organisations/{organisationId}/users/{userId}/certificates/{certificateId}

Replaces a UserCertificate resource.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `organisationId` (path, string, required): 
- `userId` (path, string, required): 
- `certificateId` (path, string, required): 

**Request Body:**

- `name` (string, required): 
- `date` (string, required): 
- `url` (string, required): 
- `issuer` (string, required): 

**Responses:**

- `200`: UserCertificate resource replaced
  - `id` (string): 
  - `created_at` (string): 
  - `updated_at` (string): 
  - `name` (string): 
  - `date` (string): 
  - `url` (string): 
  - `issuer` (string): 
  - `user` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `404`: Not found
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### DELETE /v1/organisations/{organisationId}/users/{userId}/certificates/{certificateId}

Removes a UserCertificate resource.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `organisationId` (path, string, required): 
- `userId` (path, string, required): 
- `certificateId` (path, string, required): 

**Responses:**

- `204`: UserCertificate resource deleted
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `404`: Not found
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

## Course

### GET /v1/organisations/{organisationId}/courses

Retrieves the collection of Course resources.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `organisationId` (path, string, required): 
- `page` (query, number): The collection page number
- `itemsPerPage` (query, number): The number of items per page
- `name` (query, string): 
- `orderBy[name]` (query, string (enum: asc|desc)): 

**Responses:**

- `200`: Course collection
  - `@context` (string): 
  - `@id` (string): 
  - `@type` (string): 
  - `hydra:member` (array): 
  - `hydra:totalItems` (number): 
  - `hydra:view` (string): 
  - `hydra:search` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### POST /v1/organisations/{organisationId}/courses

Creates a Course resource.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `organisationId` (path, string, required): 

**Request Body:**

- `name` (string, required): 
- `program_id` (object): 

**Responses:**

- `201`: Course resource created
  - `id` (string): 
  - `created_at` (string): 
  - `updated_at` (string): 
  - `organisation_id` (string): 
  - `name` (string): 
  - `program_id` (object): 
  - `skillSet` (object): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `404`: Not found
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### GET /v1/organisations/{organisationId}/courses/{courseId}

Retrieves a Course resource.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `organisationId` (path, string, required): 
- `courseId` (path, string, required): 

**Responses:**

- `200`: Course resource
  - `id` (string): 
  - `created_at` (string): 
  - `updated_at` (string): 
  - `organisation_id` (string): 
  - `name` (string): 
  - `program_id` (object): 
  - `skillSet` (object): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `404`: Not found
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### PUT /v1/organisations/{organisationId}/courses/{courseId}

Replaces a Course resource.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `organisationId` (path, string, required): 
- `courseId` (path, string, required): 

**Request Body:**

- `name` (string, required): 
- `program_id` (object): 

**Responses:**

- `200`: Course resource replaced
  - `id` (string): 
  - `created_at` (string): 
  - `updated_at` (string): 
  - `organisation_id` (string): 
  - `name` (string): 
  - `program_id` (object): 
  - `skillSet` (object): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `404`: Not found
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### DELETE /v1/organisations/{organisationId}/courses/{courseId}

Removes a Course resource.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `organisationId` (path, string, required): 
- `courseId` (path, string, required): 

**Responses:**

- `204`: Course resource deleted
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `404`: Not found
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

## Document

### POST /v1/organisations/{organisationId}/users/{userId}/rawDocuments/treat

Creates a Raw Document resource, treat it and creates a Treated Document resource.

With a CV in pdf given and a userId given (which must be part of your organisation), a [jsonResume schema](https://jsonresume.org/schema) will be extracted and saved into a TreatedDocument resource

**Authentication:** Bearer Token, API Key

**Parameters:**

- `organisationId` (path, string, required): 
- `userId` (path, string, required): 

**Request Body:**

- `files` (array): 

**Responses:**

- `201`: Treated Document resource
  - `id` (string): 
  - `created_at` (string): 
  - `updated_at` (string): 
  - `rawDocument` (string): 
  - `user` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### POST /v1/organisations/{organisationId}/users/{userId}/rawDocuments/enrich

Creates a Raw Document resource for a given user, treat it, creates a Treated Document resource, then enrich it and creates an Enriched Document Resource.


        With a CV in pdf given and a userId given (which must be part of your organisation), a [jsonResume schema](https://jsonresume.org/schema) will be extracted and saved into a TreatedDocument resource.
        Then, a Skillberg enrichment will be proceeded and will assign skills to the resume based on the extracted jsonResume schema.
        This will then be saved into an EnrichedDocument resource

**Authentication:** Bearer Token, API Key

**Parameters:**

- `organisationId` (path, string, required): 
- `userId` (path, string, required): 

**Request Body:**

- `files` (array): 

**Responses:**

- `201`: Treated Document resource
  - `id` (string): 
  - `created_at` (string): 
  - `updated_at` (string): 
  - `rawDocument` (string): 
  - `user` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### POST /v1/organisations/{organisationId}/users/{userId}/treatedDocuments/{treatedDocumentId}/correctedTreatedDocuments

Creates a Corrected Treated Document resource.

With a previously given Treated Document resource, creates a Corrected Treated Document resource for a given user. 
      Be careful, after posting this Corrected Treated Document you won't be able to edit it anymore

**Authentication:** Bearer Token, API Key

**Parameters:**

- `treatedDocumentId` (path, string, required): 
- `organisationId` (path, string, required): 
- `userId` (path, string, required): 

**Request Body:**

- `json_resume` (string, required): 

**Responses:**

- `201`: Corrected Treated Document resource
  - `id` (string): 
  - `created_at` (string): 
  - `updated_at` (string): 
  - `treatedDocument` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### PUT /v1/organisations/{organisationId}/users/{userId}/correctedTreatedDocuments/{correctedTreatedDocumentId}

Replaces a Corrected Treated Document resource.

With a Corrected Treated Document id, replace the data linked to the id. Be careful, one the operation is done the data won't be available for reading/updating anymore

**Authentication:** Bearer Token, API Key

**Parameters:**

- `correctedTreatedDocumentId` (path, string, required): 
- `organisationId` (path, string, required): 
- `userId` (path, string, required): 

**Request Body:**

- `json_resume` (string, required): 

**Responses:**

- `200`: Corrected Treated Document resource
  - `id` (string): 
  - `created_at` (string): 
  - `updated_at` (string): 
  - `treatedDocument` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### POST /v1/organisations/{organisationId}/users/{userId}/correctedTreatedDocuments/{correctedTreatedDocumentId}/enrich

Enrich a Corrected Treated Document resource and creates a Enriched Document resource.

From a given user's Corrected Treated Document, a Skillberg enrichment will be proceeded and will assign skills to the resume based on the extracted jsonResume schema.
        This will then be saved into an EnrichedDocument resource

**Authentication:** Bearer Token, API Key

**Parameters:**

- `correctedTreatedDocumentId` (path, string, required): 
- `organisationId` (path, string, required): 
- `userId` (path, string, required): 

**Responses:**

- `201`: Enriched Document resource
  - `id` (string): 
  - `created_at` (string): 
  - `updated_at` (string): 
  - `treatedDocument` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### POST /v1/organisations/{organisationId}/users/{userId}/enrichedDocuments/{enrichedDocumentId}/correctedEnrichedDocuments

Creates a Corrected Enriched Document resource.

With a previously given Enriched Document resource, creates a Corrected Enriched Document resource for a given user. 
      Be careful, after posting this Corrected Enriched Document you won't be able to edit it anymore

**Authentication:** Bearer Token, API Key

**Parameters:**

- `enrichedDocumentId` (path, string, required): 
- `organisationId` (path, string, required): 
- `userId` (path, string, required): 

**Request Body:**

- `json_resume` (string, required): 
- `nodes` (string, required): 

**Responses:**

- `201`: Corrected Enriched Document resource
  - `id` (string): 
  - `created_at` (string): 
  - `updated_at` (string): 
  - `enrichedDocument` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### PUT /v1/organisations/{organisationId}/users/{userId}/correctedEnrichedDocuments/{correctedEnrichedDocumentId}

Replaces a Corrected Enriched Document resource.

With a Corrected Enriched Document id, replace the data linked to the id. Be careful, one the operation is done the data won't be available for reading/updating anymore

**Authentication:** Bearer Token, API Key

**Parameters:**

- `correctedEnrichedDocumentId` (path, string, required): 
- `organisationId` (path, string, required): 
- `userId` (path, string, required): 

**Request Body:**

- `json_resume` (string, required): 
- `nodes` (string, required): 

**Responses:**

- `200`: Corrected Enriched Document resource
  - `id` (string): 
  - `created_at` (string): 
  - `updated_at` (string): 
  - `enrichedDocument` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### POST /v1/users/{userId}/rawDocuments/treat

Creates a Raw Document resource, treat it and creates a Treated Document resource.


        With a CV in pdf given, a [jsonResume schema](https://jsonresume.org/schema) will be extracted and saved into a TreatedDocument resource.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `userId` (path, string, required): 

**Request Body:**

- `files` (array): 

**Responses:**

- `201`: Treated Document resource
  - `id` (string): 
  - `created_at` (string): 
  - `updated_at` (string): 
  - `rawDocument` (string): 
  - `user` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### POST /v1/users/{userId}/rawDocuments/enrich

Creates a Raw Document resource, treat it, creates a Treated Document resource, then enrich it and creates an Enriched Document Resource.


        With a CV in pdf given, a [jsonResume schema](https://jsonresume.org/schema) will be extracted and saved into a TreatedDocument resource.
        Then, a Skillberg enrichment will be proceeded and will assign skills to the resume based on the extracted jsonResume schema.
        This will then be saved into an EnrichedDocument resource

**Authentication:** Bearer Token, API Key

**Parameters:**

- `userId` (path, string, required): 

**Request Body:**

- `files` (array): 

**Responses:**

- `201`: Treated Document resource
  - `id` (string): 
  - `created_at` (string): 
  - `updated_at` (string): 
  - `rawDocument` (string): 
  - `user` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### POST /v1/users/{userId}/treatedDocuments/{treatedDocumentId}/correctedTreatedDocuments

Creates a Corrected Treated Document resource.

With a previously given Treated Document resource, creates a Corrected Treated Document resource. 
      Be careful, after posting this Corrected Treated Document you won't be able to edit it anymore

**Authentication:** Bearer Token, API Key

**Parameters:**

- `treatedDocumentId` (path, string, required): 
- `userId` (path, string, required): 

**Request Body:**

- `json_resume` (string, required): 

**Responses:**

- `201`: Corrected Treated Document resource
  - `id` (string): 
  - `created_at` (string): 
  - `updated_at` (string): 
  - `treatedDocument` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### POST /v1/users/{userId}/correctedTreatedDocuments/{correctedTreatedDocumentId}/enrich

Enrich a Corrected Treated Document resource and creates a Enriched Document resource.

From your Corrected Treated Document, a Skillberg enrichment will be proceeded and will assign skills to the resume based on the extracted jsonResume schema.
        This will then be saved into an EnrichedDocument resource

**Authentication:** Bearer Token, API Key

**Parameters:**

- `correctedTreatedDocumentId` (path, string, required): 
- `userId` (path, string, required): 

**Responses:**

- `201`: Enriched Document resource
  - `id` (string): 
  - `created_at` (string): 
  - `updated_at` (string): 
  - `treatedDocument` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### POST /v1/users/{userId}/enrichedDocuments/{enrichedDocumentId}/correctedEnrichedDocuments

Creates a Corrected Enriched Document resource.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `enrichedDocumentId` (path, string, required): 
- `userId` (path, string, required): 

**Request Body:**

- `json_resume` (string, required): 
- `nodes` (string, required): 

**Responses:**

- `201`: Corrected Enriched Document resource
  - `id` (string): 
  - `created_at` (string): 
  - `updated_at` (string): 
  - `enrichedDocument` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### GET /v1/users/{userId}/correctedTreatedDocuments/{correctedTreatedDocumentId}

Retrieves a Corrected Treated Document resource.

With a Corrected Treated Document id, retrieve the data linked to the id.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `correctedTreatedDocumentId` (path, string, required): 
- `userId` (path, string, required): 

**Responses:**

- `201`: Corrected Treated Document resource
  - `id` (string): 
  - `created_at` (string): 
  - `updated_at` (string): 
  - `treatedDocument` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### PUT /v1/users/{userId}/correctedTreatedDocuments/{correctedTreatedDocumentId}

Replaces a Corrected Treated Document resource.

With a Corrected Treated Document id, replace the data linked to the id. Be careful, one the operation is done the data won't be available for reading/updating anymore

**Authentication:** Bearer Token, API Key

**Parameters:**

- `correctedTreatedDocumentId` (path, string, required): 
- `userId` (path, string, required): 

**Request Body:**

- `json_resume` (string, required): 

**Responses:**

- `200`: Corrected Treated Document resource
  - `id` (string): 
  - `created_at` (string): 
  - `updated_at` (string): 
  - `treatedDocument` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### GET /v1/users/{userId}/correctedEnrichedDocuments/{correctedEnrichedDocumentId}

Retrieves a Corrected Enriched Document resource.

With a Corrected Enriched Document id, retrieve the data linked to the id.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `correctedEnrichedDocumentId` (path, string, required): 
- `userId` (path, string, required): 

**Responses:**

- `201`: Corrected Enriched Document resource
  - `id` (string): 
  - `created_at` (string): 
  - `updated_at` (string): 
  - `enrichedDocument` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### PUT /v1/users/{userId}/correctedEnrichedDocuments/{correctedEnrichedDocumentId}

Replaces a Corrected Enriched Document resource.

With a Corrected Enriched Document id, replace the data linked to the id. Be careful, one the operation is done the data won't be available for reading/updating anymore

**Authentication:** Bearer Token, API Key

**Parameters:**

- `correctedEnrichedDocumentId` (path, string, required): 
- `userId` (path, string, required): 

**Request Body:**

- `json_resume` (string, required): 
- `nodes` (string, required): 

**Responses:**

- `200`: Corrected Enriched Document resource
  - `id` (string): 
  - `created_at` (string): 
  - `updated_at` (string): 
  - `enrichedDocument` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

## Evaluation

### GET /v1/users/{userId}/evaluations

Retrieves the collection of Evaluation resources.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `userId` (path, string, required): 
- `page` (query, number): The collection page number
- `itemsPerPage` (query, number): The number of items per page
- `date` (query, string): Evaluation's date
- `type` (query, string (enum: Bilan annuel|Bilan trimestriel|Évaluation de compétence|Debrief de projet)): Evaluation's type
- `issuer_id` (query, string): Evaluation's issuer
- `status` (query, string (enum: draft|done)): Evaluation's status
- `orderBy[date]` (query, string (enum: asc|desc)): 

**Responses:**

- `200`: Evaluation collection
  - `@context` (string): 
  - `@id` (string): 
  - `@type` (string): 
  - `hydra:member` (array): 
  - `hydra:totalItems` (number): 
  - `hydra:view` (string): 
  - `hydra:search` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### GET /v1/users/{userId}/evaluations/{evaluationId}

Retrieves an Evaluation resource.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `userId` (path, string, required): 
- `evaluationId` (path, string, required): 

**Responses:**

- `200`: Evaluation resource
  - `id` (string): 
  - `created_at` (string): 
  - `updated_at` (string): 
  - `date` (string): 
  - `type` (string): 
  - `status` (string): 
  - `issuer` (string): 
  - `user` (string): 
  - `skills` (array): 
  - `comment` (object): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `404`: Not found
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### GET /v1/organisations/{organisationId}/users/{userId}/evaluations

Retrieves the collection of Evaluation resources.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `organisationId` (path, string, required): 
- `userId` (path, string, required): 
- `page` (query, number): The collection page number
- `itemsPerPage` (query, number): The number of items per page
- `date` (query, string): Evaluation's date
- `type` (query, string (enum: Bilan annuel|Bilan trimestriel|Évaluation de compétence|Debrief de projet)): Evaluation's type
- `issuer_id` (query, string): Evaluation's issuer
- `status` (query, string (enum: draft|done)): Evaluation's status
- `orderBy[date]` (query, string (enum: asc|desc)): 

**Responses:**

- `200`: Evaluation collection
  - `@context` (string): 
  - `@id` (string): 
  - `@type` (string): 
  - `hydra:member` (array): 
  - `hydra:totalItems` (number): 
  - `hydra:view` (string): 
  - `hydra:search` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### POST /v1/organisations/{organisationId}/users/{userId}/evaluations

Creates an Evaluation resource.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `organisationId` (path, string, required): 
- `userId` (path, string, required): 

**Request Body:**

- `date` (string): Evaluation's date
- `type` (string, required (enum: Bilan annuel|Bilan trimestriel|Évaluation de compétence|Debrief de projet)): Evaluation's type
- `issuer_id` (string, required): Evaluation's issuer

**Responses:**

- `201`: Evaluation resource created
  - `id` (string): 
  - `created_at` (string): 
  - `updated_at` (string): 
  - `date` (string): 
  - `type` (string): 
  - `status` (string): 
  - `issuer` (string): 
  - `user` (string): 
  - `skills` (array): 
  - `comment` (object): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `404`: Not found
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### GET /v1/organisations/{organisationId}/users/{userId}/evaluations/{evaluationId}

Retrieves an Evaluation resource.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `organisationId` (path, string, required): 
- `userId` (path, string, required): 
- `evaluationId` (path, string, required): 

**Responses:**

- `200`: Evaluation resource
  - `id` (string): 
  - `created_at` (string): 
  - `updated_at` (string): 
  - `date` (string): 
  - `type` (string): 
  - `status` (string): 
  - `issuer` (string): 
  - `user` (string): 
  - `skills` (array): 
  - `comment` (object): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `404`: Not found
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### PUT /v1/organisations/{organisationId}/users/{userId}/evaluations/{evaluationId}

Replaces an Evaluation resource.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `organisationId` (path, string, required): 
- `userId` (path, string, required): 
- `evaluationId` (path, string, required): 

**Request Body:**

- `date` (string): Evaluation's date
- `type` (string, required (enum: Bilan annuel|Bilan trimestriel|Évaluation de compétence|Debrief de projet)): Evaluation's type
- `issuer_id` (string, required): Evaluation's issuer
- `status` (string, required (enum: draft|done)): Evaluation's status
- `skills` (array, required): SkillbergSkills' array
- `comment` (object): Comment regarding the evaluation

**Responses:**

- `200`: Evaluation resource updated
  - `id` (string): 
  - `created_at` (string): 
  - `updated_at` (string): 
  - `date` (string): 
  - `type` (string): 
  - `status` (string): 
  - `issuer` (string): 
  - `user` (string): 
  - `skills` (array): 
  - `comment` (object): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `404`: Not found
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### DELETE /v1/organisations/{organisationId}/users/{userId}/evaluations/{evaluationId}

Removes an Evaluation resource.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `organisationId` (path, string, required): 
- `userId` (path, string, required): 
- `evaluationId` (path, string, required): 

**Responses:**

- `204`: 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `404`: Not found
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

## JobPosting

### GET /v1/organisations/{organisationId}/jobPostings

Retrieves the collection of JobPosting resources.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `organisationId` (path, string, required): 
- `page` (query, number): The collection page number
- `itemsPerPage` (query, number): The number of items per page
- `title` (query, string): Job title
- `orderBy[title]` (query, string (enum: asc|desc)): 

**Responses:**

- `200`: JobPosting collection
  - `@context` (string): 
  - `@id` (string): 
  - `@type` (string): 
  - `hydra:member` (array): 
  - `hydra:totalItems` (number): 
  - `hydra:view` (string): 
  - `hydra:search` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### POST /v1/organisations/{organisationId}/jobPostings

Creates a JobPosting resource.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `organisationId` (path, string, required): 

**Request Body:**

- `title` (string, required): Job title
- `description` (string, required): Job description
- `alternate_name` (array): Alternative job titles
- `identifier` (string, required): Unique identifier (slug, UUID, ...)
- `date_posted` (string, required): Publication date
- `valid_through` (string, required): Posting expiration date
- `hiring_organization` (string, required): Recruiting company
- `employment_unit` (string, required): Department / unit concerned
- `job_location` (string, required): Workplace
- `job_location_type` (string, required): Remote/work arrangement type, e.g. TELECOMMUTE
- `applicant_location_requirements` (string, required): Allowed geographic areas (remote work)
- `employment_type` (string, required): Contract type (full-time, part-time, ...)
- `work_hours` (string, required): Typical hours
- `job_immediate_start` (boolean, required): Immediate start?
- `job_start_date` (string, required): Expected start date
- `total_job_openings` (number, required): Number of open positions
- `base_salary` (string, required): Base salary
- `estimated_salary` (string, required): Estimated salary
- `salary_currency` (string, required): Main currency (ISO 4217)
- `incentive_compensation` (string, required): Bonuses / commissions
- `job_benefits` (string, required): Benefits
- `industry` (string, required): Industry sector
- `occupational_category` (string, required): Occupational category (O*NET, ISCO, ...)
- `qualifications` (string, required): Required diploma / certification / qualifications
- `education_requirements` (string, required): Required education level
- `experience_requirements` (string, required): Required experience
- `experience_in_place_of_education` (boolean, required): Experience accepted in lieu of degree?
- `responsibilities` (array): Job responsibilities / tasks
- `skills` (array): Sought-after skills
- `physical_requirement` (string, required): Physical requirements
- `sensory_requirement` (string, required): Sensory requirements
- `security_clearance_requirement` (string, required): Security clearances
- `eligibility_to_work_requirement` (string, required): Legal work conditions (visa, ...)
- `employer_overview` (string, required): Employer presentation
- `special_commitments` (string, required): Special commitments (VeteranCommit, ...)
- `application_contact` (string, required): Contact point for the application
- `direct_apply` (boolean, required): Does the posting allow direct application?
- `relevant_occupation` (string, required): Related occupation (free text)
- `url` (string, required): Canonical URL of the posting
- `same_as` (string, required): Reference URL for identity
- `image` (string, required): Image URL
- `career_id` (string, required): 
- `status` (string, required (enum: DRAFT|OPEN|CLOSED)): 

**Responses:**

- `201`: JobPosting resource created
  - `id` (string): 
  - `created_at` (string): 
  - `updated_at` (string): 
  - `title` (string): Job title
  - `description` (string): Job description
  - `alternate_name` (array): Alternative job titles
  - `identifier` (string): Unique identifier (slug, UUID, ...)
  - `date_posted` (string): Publication date
  - `valid_through` (string): Posting expiration date
  - `hiring_organization` (string): Recruiting company
  - `employment_unit` (string): Department / unit concerned
  - `job_location` (string): Workplace
  - `job_location_type` (string): Remote/work arrangement type, e.g. TELECOMMUTE
  - `applicant_location_requirements` (string): Allowed geographic areas (remote work)
  - `employment_type` (string): Contract type (full-time, part-time, ...)
  - ... (see schema for full list)
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### GET /v1/organisations/{organisationId}/jobPostings/{jobPostingId}

Retrieves a JobPosting resource.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `organisationId` (path, string, required): 
- `jobPostingId` (path, string, required): 

**Responses:**

- `200`: JobPosting resource
  - `id` (string): 
  - `created_at` (string): 
  - `updated_at` (string): 
  - `title` (string): Job title
  - `description` (string): Job description
  - `alternate_name` (array): Alternative job titles
  - `identifier` (string): Unique identifier (slug, UUID, ...)
  - `date_posted` (string): Publication date
  - `valid_through` (string): Posting expiration date
  - `hiring_organization` (string): Recruiting company
  - `employment_unit` (string): Department / unit concerned
  - `job_location` (string): Workplace
  - `job_location_type` (string): Remote/work arrangement type, e.g. TELECOMMUTE
  - `applicant_location_requirements` (string): Allowed geographic areas (remote work)
  - `employment_type` (string): Contract type (full-time, part-time, ...)
  - ... (see schema for full list)
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `404`: Not found
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### PUT /v1/organisations/{organisationId}/jobPostings/{jobPostingId}

Replaces a JobPosting resource.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `organisationId` (path, string, required): 
- `jobPostingId` (path, string, required): 

**Request Body:**

- `title` (string, required): Job title
- `description` (string, required): Job description
- `alternate_name` (array): Alternative job titles
- `identifier` (string, required): Unique identifier (slug, UUID, ...)
- `date_posted` (string, required): Publication date
- `valid_through` (string, required): Posting expiration date
- `hiring_organization` (string, required): Recruiting company
- `employment_unit` (string, required): Department / unit concerned
- `job_location` (string, required): Workplace
- `job_location_type` (string, required): Remote/work arrangement type, e.g. TELECOMMUTE
- `applicant_location_requirements` (string, required): Allowed geographic areas (remote work)
- `employment_type` (string, required): Contract type (full-time, part-time, ...)
- `work_hours` (string, required): Typical hours
- `job_immediate_start` (boolean, required): Immediate start?
- `job_start_date` (string, required): Expected start date
- `total_job_openings` (number, required): Number of open positions
- `base_salary` (string, required): Base salary
- `estimated_salary` (string, required): Estimated salary
- `salary_currency` (string, required): Main currency (ISO 4217)
- `incentive_compensation` (string, required): Bonuses / commissions
- `job_benefits` (string, required): Benefits
- `industry` (string, required): Industry sector
- `occupational_category` (string, required): Occupational category (O*NET, ISCO, ...)
- `qualifications` (string, required): Required diploma / certification / qualifications
- `education_requirements` (string, required): Required education level
- `experience_requirements` (string, required): Required experience
- `experience_in_place_of_education` (boolean, required): Experience accepted in lieu of degree?
- `responsibilities` (array): Job responsibilities / tasks
- `skills` (array): Sought-after skills
- `physical_requirement` (string, required): Physical requirements
- `sensory_requirement` (string, required): Sensory requirements
- `security_clearance_requirement` (string, required): Security clearances
- `eligibility_to_work_requirement` (string, required): Legal work conditions (visa, ...)
- `employer_overview` (string, required): Employer presentation
- `special_commitments` (string, required): Special commitments (VeteranCommit, ...)
- `application_contact` (string, required): Contact point for the application
- `direct_apply` (boolean, required): Does the posting allow direct application?
- `relevant_occupation` (string, required): Related occupation (free text)
- `url` (string, required): Canonical URL of the posting
- `same_as` (string, required): Reference URL for identity
- `image` (string, required): Image URL

**Responses:**

- `200`: JobPosting resource replaced
  - `id` (string): 
  - `created_at` (string): 
  - `updated_at` (string): 
  - `title` (string): Job title
  - `description` (string): Job description
  - `alternate_name` (array): Alternative job titles
  - `identifier` (string): Unique identifier (slug, UUID, ...)
  - `date_posted` (string): Publication date
  - `valid_through` (string): Posting expiration date
  - `hiring_organization` (string): Recruiting company
  - `employment_unit` (string): Department / unit concerned
  - `job_location` (string): Workplace
  - `job_location_type` (string): Remote/work arrangement type, e.g. TELECOMMUTE
  - `applicant_location_requirements` (string): Allowed geographic areas (remote work)
  - `employment_type` (string): Contract type (full-time, part-time, ...)
  - ... (see schema for full list)
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `404`: Not found
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### PATCH /v1/organisations/{organisationId}/jobPostings/{jobPostingId}

Updates a JobPosting resource.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `organisationId` (path, string, required): 
- `jobPostingId` (path, string, required): 

**Request Body:**

- `title` (string): Job title
- `description` (string): Job description
- `alternate_name` (array): Alternative job titles
- `identifier` (string): Unique identifier (slug, UUID, ...)
- `date_posted` (string): Publication date
- `valid_through` (string): Posting expiration date
- `hiring_organization` (string): Recruiting company
- `employment_unit` (string): Department / unit concerned
- `job_location` (string): Workplace
- `job_location_type` (string): Remote/work arrangement type, e.g. TELECOMMUTE
- `applicant_location_requirements` (string): Allowed geographic areas (remote work)
- `employment_type` (string): Contract type (full-time, part-time, ...)
- `work_hours` (string): Typical hours
- `job_immediate_start` (boolean): Immediate start?
- `job_start_date` (string): Expected start date
- `total_job_openings` (number): Number of open positions
- `base_salary` (string): Base salary
- `estimated_salary` (string): Estimated salary
- `salary_currency` (string): Main currency (ISO 4217)
- `incentive_compensation` (string): Bonuses / commissions
- `job_benefits` (string): Benefits
- `industry` (string): Industry sector
- `occupational_category` (string): Occupational category (O*NET, ISCO, ...)
- `qualifications` (string): Required diploma / certification / qualifications
- `education_requirements` (string): Required education level
- `experience_requirements` (string): Required experience
- `experience_in_place_of_education` (boolean): Experience accepted in lieu of degree?
- `responsibilities` (array): Job responsibilities / tasks
- `skills` (array): Sought-after skills
- `physical_requirement` (string): Physical requirements
- `sensory_requirement` (string): Sensory requirements
- `security_clearance_requirement` (string): Security clearances
- `eligibility_to_work_requirement` (string): Legal work conditions (visa, ...)
- `employer_overview` (string): Employer presentation
- `special_commitments` (string): Special commitments (VeteranCommit, ...)
- `application_contact` (string): Contact point for the application
- `direct_apply` (boolean): Does the posting allow direct application?
- `relevant_occupation` (string): Related occupation (free text)
- `url` (string): Canonical URL of the posting
- `same_as` (string): Reference URL for identity
- `image` (string): Image URL

**Responses:**

- `200`: JobPosting resource updated
  - `id` (string): 
  - `created_at` (string): 
  - `updated_at` (string): 
  - `title` (string): Job title
  - `description` (string): Job description
  - `alternate_name` (array): Alternative job titles
  - `identifier` (string): Unique identifier (slug, UUID, ...)
  - `date_posted` (string): Publication date
  - `valid_through` (string): Posting expiration date
  - `hiring_organization` (string): Recruiting company
  - `employment_unit` (string): Department / unit concerned
  - `job_location` (string): Workplace
  - `job_location_type` (string): Remote/work arrangement type, e.g. TELECOMMUTE
  - `applicant_location_requirements` (string): Allowed geographic areas (remote work)
  - `employment_type` (string): Contract type (full-time, part-time, ...)
  - ... (see schema for full list)
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `404`: Not found
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### DELETE /v1/organisations/{organisationId}/jobPostings/{jobPostingId}

Removes a JobPosting resource.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `organisationId` (path, string, required): 
- `jobPostingId` (path, string, required): 

**Responses:**

- `204`: JobPosting resource deleted
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `404`: Not found
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### GET /v1/organisations/{organisationId}/jobPostings/{jobPostingId}/organisationJobPosting

Retrieves the OrganisationJobPosting link for a JobPosting.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `organisationId` (path, string, required): 
- `jobPostingId` (path, string, required): 

**Responses:**

- `200`: OrganisationJobPosting resource
  - `id` (string): 
  - `created_at` (string): 
  - `updated_at` (string): 
  - `organisation` (string): 
  - `jobPosting` (string): 
  - `career` (string): 
  - `status` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `404`: Not found
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### PUT /v1/organisations/{organisationId}/jobPostings/{jobPostingId}/organisationJobPosting

Replaces the OrganisationJobPosting link for a JobPosting.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `organisationId` (path, string, required): 
- `jobPostingId` (path, string, required): 

**Request Body:**

- `career_id` (string, required): 
- `status` (string, required (enum: DRAFT|OPEN|CLOSED)): 

**Responses:**

- `200`: OrganisationJobPosting resource replaced
  - `id` (string): 
  - `created_at` (string): 
  - `updated_at` (string): 
  - `organisation` (string): 
  - `jobPosting` (string): 
  - `career` (string): 
  - `status` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `404`: Not found
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### PATCH /v1/organisations/{organisationId}/jobPostings/{jobPostingId}/organisationJobPosting

Updates the OrganisationJobPosting link for a JobPosting.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `organisationId` (path, string, required): 
- `jobPostingId` (path, string, required): 

**Request Body:**

- `career_id` (string): 
- `status` (string (enum: DRAFT|OPEN|CLOSED)): 

**Responses:**

- `200`: OrganisationJobPosting resource updated
  - `id` (string): 
  - `created_at` (string): 
  - `updated_at` (string): 
  - `organisation` (string): 
  - `jobPosting` (string): 
  - `career` (string): 
  - `status` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `404`: Not found
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

## Mission

### GET /v1/organisations/{organisationId}/teams/{teamId}/projects/{projectId}/missions

Retrieves the collection of Mission resources.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `organisationId` (path, string, required): 
- `teamId` (path, string, required): 
- `projectId` (path, string, required): 
- `page` (query, number): The collection page number
- `itemsPerPage` (query, number): The number of items per page
- `name` (query, string): 
- `orderBy[name]` (query, string (enum: asc|desc)): 

**Responses:**

- `200`: Mission collection
  - `@context` (string): 
  - `@id` (string): 
  - `@type` (string): 
  - `hydra:member` (array): 
  - `hydra:totalItems` (number): 
  - `hydra:view` (string): 
  - `hydra:search` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### POST /v1/organisations/{organisationId}/teams/{teamId}/projects/{projectId}/missions

Creates a Mission resource.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `organisationId` (path, string, required): 
- `teamId` (path, string, required): 
- `projectId` (path, string, required): 

**Request Body:**

- `name` (string, required): 
- `description` (string, required): 
- `start_date` (string, required): 
- `end_date` (string, required): 
- `priority` (string, required (enum: low|medium|high)): 
- `size` (string, required (enum: small|medium|large)): 

**Responses:**

- `201`: Mission resource
  - `id` (string): 
  - `created_at` (string): 
  - `updated_at` (string): 
  - `project` (string): 
  - `name` (string): 
  - `description` (string): 
  - `start_date` (string): 
  - `end_date` (string): 
  - `priority` (string): 
  - `size` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `404`: Not found
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### GET /v1/organisations/{organisationId}/teams/{teamId}/projects/{projectId}/missions/{missionId}

Retrieves a Mission resource.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `organisationId` (path, string, required): 
- `teamId` (path, string, required): 
- `projectId` (path, string, required): 
- `missionId` (path, string, required): 

**Responses:**

- `200`: Mission resource
  - `id` (string): 
  - `created_at` (string): 
  - `updated_at` (string): 
  - `project` (string): 
  - `name` (string): 
  - `description` (string): 
  - `start_date` (string): 
  - `end_date` (string): 
  - `priority` (string): 
  - `size` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `404`: Not found
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### PUT /v1/organisations/{organisationId}/teams/{teamId}/projects/{projectId}/missions/{missionId}

Replaces a Mission resource.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `organisationId` (path, string, required): 
- `teamId` (path, string, required): 
- `projectId` (path, string, required): 
- `missionId` (path, string, required): 

**Request Body:**

- `name` (string, required): 
- `description` (string, required): 
- `start_date` (string, required): 
- `end_date` (string, required): 
- `priority` (string, required (enum: low|medium|high)): 
- `size` (string, required (enum: small|medium|large)): 

**Responses:**

- `200`: Mission resource
  - `id` (string): 
  - `created_at` (string): 
  - `updated_at` (string): 
  - `project` (string): 
  - `name` (string): 
  - `description` (string): 
  - `start_date` (string): 
  - `end_date` (string): 
  - `priority` (string): 
  - `size` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `404`: Not found
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### DELETE /v1/organisations/{organisationId}/teams/{teamId}/projects/{projectId}/missions/{missionId}

Removes a Mission resource.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `organisationId` (path, string, required): 
- `teamId` (path, string, required): 
- `projectId` (path, string, required): 
- `missionId` (path, string, required): 

**Responses:**

- `204`: Mission resource
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `404`: Not found
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

## Offer

### GET /v1/offers

Retrieves the collection of Offer resources.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `page` (query, number): The collection page number
- `itemsPerPage` (query, number): The number of items per page
- `name` (query, string): 
- `orderBy[name]` (query, string (enum: asc|desc)): 

**Responses:**

- `200`: Offer collection
  - `@context` (string): 
  - `@id` (string): 
  - `@type` (string): 
  - `hydra:member` (array): 
  - `hydra:totalItems` (number): 
  - `hydra:view` (string): 
  - `hydra:search` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### GET /v1/offers/{offerId}

Retrieves an Offer resource.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `offerId` (path, string, required): 

**Responses:**

- `200`: Offer resource
  - `id` (string): 
  - `created_at` (string): 
  - `updated_at` (string): 
  - `organisation` (string): 
  - `name` (string): 
  - `skillSet` (object): 
  - `candidates` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `404`: Not found
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### GET /v1/organisations/{organisationId}/offers

Retrieves the collection of Offer resources.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `organisationId` (path, string, required): 
- `page` (query, number): The collection page number
- `itemsPerPage` (query, number): The number of items per page
- `name` (query, string): 
- `orderBy[name]` (query, string (enum: asc|desc)): 

**Responses:**

- `200`: Offer collection
  - `@context` (string): 
  - `@id` (string): 
  - `@type` (string): 
  - `hydra:member` (array): 
  - `hydra:totalItems` (number): 
  - `hydra:view` (string): 
  - `hydra:search` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### POST /v1/organisations/{organisationId}/offers

Creates an Offer resource.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `organisationId` (path, string, required): 

**Request Body:**

- `name` (string, required): 

**Responses:**

- `201`: Offer resource created
  - `id` (string): 
  - `created_at` (string): 
  - `updated_at` (string): 
  - `organisation` (string): 
  - `name` (string): 
  - `skillSet` (object): 
  - `candidates` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `404`: Not found
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### GET /v1/organisations/{organisationId}/offers/{offerId}

Retrieves an Offer resource.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `organisationId` (path, string, required): 
- `offerId` (path, string, required): 

**Responses:**

- `200`: Offer resource
  - `id` (string): 
  - `created_at` (string): 
  - `updated_at` (string): 
  - `organisation` (string): 
  - `name` (string): 
  - `skillSet` (object): 
  - `candidates` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `404`: Not found
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### PUT /v1/organisations/{organisationId}/offers/{offerId}

Replaces an Offer resource.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `organisationId` (path, string, required): 
- `offerId` (path, string, required): 

**Request Body:**

- `name` (string, required): 

**Responses:**

- `200`: Offer resource replaced
  - `id` (string): 
  - `created_at` (string): 
  - `updated_at` (string): 
  - `organisation` (string): 
  - `name` (string): 
  - `skillSet` (object): 
  - `candidates` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `404`: Not found
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### DELETE /v1/organisations/{organisationId}/offers/{offerId}

Removes an Offer resource.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `organisationId` (path, string, required): 
- `offerId` (path, string, required): 

**Responses:**

- `204`: Offer resource deleted
  - `id` (string): 
  - `created_at` (string): 
  - `updated_at` (string): 
  - `organisation` (string): 
  - `name` (string): 
  - `skillSet` (object): 
  - `candidates` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `404`: Not found
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### GET /v1/organisations/{organisationId}/offers/{offerId}/compatibilities

Retrieves a Compatibility resource.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `organisationId` (path, string, required): 
- `offerId` (path, string, required): 

**Responses:**

- `200`: Compatibility resource
  - `id` (string): 
  - `compatibilities` (array): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `404`: Not found
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

## OfferUser

### GET /v1/organisations/{organisationId}/offers/{offerId}/offerUsers

Retrieves the collection of OfferUser resources.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `organisationId` (path, string, required): 
- `offerId` (path, string, required): 
- `page` (query, number): The collection page number
- `itemsPerPage` (query, number): The number of items per page
- `user_id` (query, string): 

**Responses:**

- `200`: OfferUser collection
  - `@context` (string): 
  - `@id` (string): 
  - `@type` (string): 
  - `hydra:member` (array): 
  - `hydra:totalItems` (number): 
  - `hydra:view` (string): 
  - `hydra:search` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### POST /v1/organisations/{organisationId}/offers/{offerId}/offerUsers

Creates a OfferUser resource.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `organisationId` (path, string, required): 
- `offerId` (path, string, required): 

**Request Body:**

- `user_id` (string, required): 

**Responses:**

- `201`: OfferUser resource created
  - `id` (string): 
  - `created_at` (string): 
  - `updated_at` (string): 
  - `offer` (string): 
  - `user_id` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### GET /v1/organisations/{organisationId}/offers/{offerId}/offerUsers/{offerUserId}

Retrieves a OfferUser resource.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `organisationId` (path, string, required): 
- `offerId` (path, string, required): 
- `offerUserId` (path, string, required): 

**Responses:**

- `200`: OfferUser identifier
  - `id` (string): 
  - `created_at` (string): 
  - `updated_at` (string): 
  - `offer` (string): 
  - `user_id` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `404`: Not found
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### PUT /v1/organisations/{organisationId}/offers/{offerId}/offerUsers/{offerUserId}

Replaces a OfferUser resource.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `organisationId` (path, string, required): 
- `offerId` (path, string, required): 
- `offerUserId` (path, string, required): 

**Request Body:**

- `user_id` (string, required): 

**Responses:**

- `200`: OfferUser resource replaced
  - `id` (string): 
  - `created_at` (string): 
  - `updated_at` (string): 
  - `offer` (string): 
  - `user_id` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `404`: Not found
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### DELETE /v1/organisations/{organisationId}/offers/{offerId}/offerUsers/{offerUserId}

Removes a OfferUser resource.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `organisationId` (path, string, required): 
- `offerId` (path, string, required): 
- `offerUserId` (path, string, required): 

**Responses:**

- `204`: OfferUser resource deleted
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `404`: Not found
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

## Organisation

### GET /v1/organisations

Retrieves the collection of Organisation resources.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `page` (query, number): The collection page number
- `itemsPerPage` (query, number): The number of items per page
- `name` (query, string): 
- `orderBy[name]` (query, string (enum: asc|desc)): 

**Responses:**

- `200`: Organisation collection
  - `@context` (string): 
  - `@id` (string): 
  - `@type` (string): 
  - `hydra:member` (array): 
  - `hydra:totalItems` (number): 
  - `hydra:view` (string): 
  - `hydra:search` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### POST /v1/organisations

Creates an Organisation resource.

**Authentication:** Bearer Token

**Request Body:**

- `name` (string, required): 
- `location` (string, required): 
- `link` (string, required): 
- `activity_list` (array, required): 
- `cap_at_quota` (boolean, required): When true, API calls beyond the current period quota are rejected by the API gateway. Default false (overage allowed, billed per credit).

**Responses:**

- `201`: Organisation resource created
  - `id` (string): 
  - `created_at` (string): 
  - `updated_at` (string): 
  - `name` (string): 
  - `location` (string): 
  - `link` (string): 
  - `activity_list` (array): 
  - `cap_at_quota` (boolean): When true, API calls beyond the current period quota are rejected by the API gateway. Default false (overage allowed, billed per credit).
  - `offers` (string): 
  - `courses` (string): 
  - `sessions` (string): 
  - `programs` (string): 
  - `teams` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### GET /v1/organisations/{organisationId}

Retrieves an Organisation resource.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `organisationId` (path, string, required): 

**Responses:**

- `200`: Organisation resource
  - `id` (string): 
  - `created_at` (string): 
  - `updated_at` (string): 
  - `name` (string): 
  - `location` (string): 
  - `link` (string): 
  - `activity_list` (array): 
  - `cap_at_quota` (boolean): When true, API calls beyond the current period quota are rejected by the API gateway. Default false (overage allowed, billed per credit).
  - `offers` (string): 
  - `courses` (string): 
  - `sessions` (string): 
  - `programs` (string): 
  - `teams` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `404`: Not found
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### PUT /v1/organisations/{organisationId}

Replaces an Organisation resource.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `organisationId` (path, string, required): 

**Request Body:**

- `name` (string, required): 
- `location` (string, required): 
- `link` (string, required): 
- `activity_list` (array, required): 
- `cap_at_quota` (boolean, required): When true, API calls beyond the current period quota are rejected by the API gateway. Default false (overage allowed, billed per credit).

**Responses:**

- `200`: Organisation resource replaced
  - `id` (string): 
  - `created_at` (string): 
  - `updated_at` (string): 
  - `name` (string): 
  - `location` (string): 
  - `link` (string): 
  - `activity_list` (array): 
  - `cap_at_quota` (boolean): When true, API calls beyond the current period quota are rejected by the API gateway. Default false (overage allowed, billed per credit).
  - `offers` (string): 
  - `courses` (string): 
  - `sessions` (string): 
  - `programs` (string): 
  - `teams` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `404`: Not found
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### PATCH /v1/organisations/{organisationId}

Partially updates an Organisation resource (only the provided fields).

**Authentication:** Bearer Token, API Key

**Parameters:**

- `organisationId` (path, string, required): 

**Request Body:**

- `name` (string): 
- `location` (string): 
- `link` (string): 
- `activity_list` (array): 
- `cap_at_quota` (boolean): When true, API calls beyond the current period quota are rejected by the API gateway. Default false (overage allowed, billed per credit).

**Responses:**

- `200`: Organisation resource updated
  - `id` (string): 
  - `created_at` (string): 
  - `updated_at` (string): 
  - `name` (string): 
  - `location` (string): 
  - `link` (string): 
  - `activity_list` (array): 
  - `cap_at_quota` (boolean): When true, API calls beyond the current period quota are rejected by the API gateway. Default false (overage allowed, billed per credit).
  - `offers` (string): 
  - `courses` (string): 
  - `sessions` (string): 
  - `programs` (string): 
  - `teams` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `404`: Not found
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### DELETE /v1/organisations/{organisationId}

Removes an Organisation resource.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `organisationId` (path, string, required): 

**Responses:**

- `204`: Organisation resource deleted
  - `id` (string): 
  - `created_at` (string): 
  - `updated_at` (string): 
  - `name` (string): 
  - `location` (string): 
  - `link` (string): 
  - `activity_list` (array): 
  - `cap_at_quota` (boolean): When true, API calls beyond the current period quota are rejected by the API gateway. Default false (overage allowed, billed per credit).
  - `offers` (string): 
  - `courses` (string): 
  - `sessions` (string): 
  - `programs` (string): 
  - `teams` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `404`: Not found
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### GET /v1/users/{userId}/organisations

Retrieves the collection of Organisation resources.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `userId` (path, string, required): 
- `page` (query, number): The collection page number
- `itemsPerPage` (query, number): The number of items per page
- `name` (query, string): 
- `orderBy[name]` (query, string (enum: asc|desc)): 

**Responses:**

- `200`: Organisation collection
  - `@context` (string): 
  - `@id` (string): 
  - `@type` (string): 
  - `hydra:member` (array): 
  - `hydra:totalItems` (number): 
  - `hydra:view` (string): 
  - `hydra:search` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

## OrganisationPlans

### GET /v1/organisations/{organisationId}/organisationPlans

Retrieves the OrganisationPlan history of an organisation (chained via previous_organisation_plan_id, ordered by creation date asc).

**Authentication:** Bearer Token, API Key

**Parameters:**

- `organisationId` (path, string, required): 
- `page` (query, number): The collection page number
- `itemsPerPage` (query, number): The number of items per page
- `billing_cycle` (query, string (enum: monthly|annual)): 
- `status` (query, string (enum: payment_pending|active|past_due|unpaid|canceled|incomplete_expired|superseded)): 
- `orderBy[created_at]` (query, string (enum: asc|desc)): 
- `orderBy[started_at]` (query, string (enum: asc|desc)): 

**Responses:**

- `200`: OrganisationPlan collection
  - `@context` (string): 
  - `@id` (string): 
  - `@type` (string): 
  - `hydra:member` (array): 
  - `hydra:totalItems` (number): 
  - `hydra:view` (string): 
  - `hydra:search` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### GET /v1/organisations/{organisationId}/organisationPlans/current

Retrieves the active OrganisationPlan (the one with ended_at = null). 404 if no maillon courant exists yet.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `organisationId` (path, string, required): 

**Responses:**

- `200`: Current OrganisationPlan
  - `id` (string): 
  - `created_at` (string): 
  - `updated_at` (string): 
  - `organisation` (string): 
  - `plan_id` (string): Mongo _id of the Plan. Resolve via the cached /plans collection on the client (Plan.code is the human-readable key).
  - `previous_organisation_plan` (object): 
  - `pending_plan_id` (object): Set by schedule-mollie-switch when a customer queues a plan change. At current_period_end, the next Mollie subscription payment triggers mollie-confirm which supersedes this maillon and creates a new active one. UI uses this to render "switching to X on YYYY-MM-DD" on the current maillon.
  - `billing_cycle` (string): 
  - `status` (string): 
  - `current_period_start` (string): 
  - `current_period_end` (string): 
  - `started_at` (string): 
  - `canceled_at` (string): 
  - `ended_at` (string): Date à laquelle le maillon a été terminé (superseded ou fin de période après cancel). null = maillon courant.
  - `cancel_at_period_end` (boolean): 
  - ... (see schema for full list)
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `404`: Not found
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### GET /v1/organisations/{organisationId}/organisationPlans/{organisationPlanId}

Retrieves a single OrganisationPlan by ID.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `organisationId` (path, string, required): 
- `organisationPlanId` (path, string, required): 

**Responses:**

- `200`: OrganisationPlan
  - `id` (string): 
  - `created_at` (string): 
  - `updated_at` (string): 
  - `organisation` (string): 
  - `plan_id` (string): Mongo _id of the Plan. Resolve via the cached /plans collection on the client (Plan.code is the human-readable key).
  - `previous_organisation_plan` (object): 
  - `pending_plan_id` (object): Set by schedule-mollie-switch when a customer queues a plan change. At current_period_end, the next Mollie subscription payment triggers mollie-confirm which supersedes this maillon and creates a new active one. UI uses this to render "switching to X on YYYY-MM-DD" on the current maillon.
  - `billing_cycle` (string): 
  - `status` (string): 
  - `current_period_start` (string): 
  - `current_period_end` (string): 
  - `started_at` (string): 
  - `canceled_at` (string): 
  - `ended_at` (string): Date à laquelle le maillon a été terminé (superseded ou fin de période après cancel). null = maillon courant.
  - `cancel_at_period_end` (boolean): 
  - ... (see schema for full list)
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `404`: Not found
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### POST /v1/organisations/{organisationId}/organisationPlans/dev-checkout

Dev-only : simule un checkout Stripe réussi (crée un nouveau maillon, supersede l'ancien). 403 en production.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `organisationId` (path, string, required): 

**Request Body:**

- `plan_code` (string, required (enum: discovery|builder|scale|partner|omni)): 
- `billing_cycle` (string (enum: monthly|annual)): 

**Responses:**

- `201`: Newly created OrganisationPlan
  - `id` (string): 
  - `created_at` (string): 
  - `updated_at` (string): 
  - `organisation` (string): 
  - `plan_id` (string): Mongo _id of the Plan. Resolve via the cached /plans collection on the client (Plan.code is the human-readable key).
  - `previous_organisation_plan` (object): 
  - `pending_plan_id` (object): Set by schedule-mollie-switch when a customer queues a plan change. At current_period_end, the next Mollie subscription payment triggers mollie-confirm which supersedes this maillon and creates a new active one. UI uses this to render "switching to X on YYYY-MM-DD" on the current maillon.
  - `billing_cycle` (string): 
  - `status` (string): 
  - `current_period_start` (string): 
  - `current_period_end` (string): 
  - `started_at` (string): 
  - `canceled_at` (string): 
  - `ended_at` (string): Date à laquelle le maillon a été terminé (superseded ou fin de période après cancel). null = maillon courant.
  - `cancel_at_period_end` (boolean): 
  - ... (see schema for full list)
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `404`: Not found
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### POST /v1/organisations/{organisationId}/organisationPlans/downgrade-to-free

Switches the organisation to a free plan (Discovery today). Rejects with 400 if the target plan is paid — the only way to land on a paid plan is via the Mollie checkout flow.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `organisationId` (path, string, required): 

**Request Body:**

- `plan_code` (string, required (enum: discovery|builder|scale|partner|omni)): Target free plan (price_monthly_eur null or 0). Service rejects with 400 if the plan is paid — keeps the safety promise that no paid plan is ever assigned without going through Mollie.
- `billing_cycle` (string (enum: monthly|annual)): 

**Responses:**

- `201`: Newly created free OrganisationPlan
  - `id` (string): 
  - `created_at` (string): 
  - `updated_at` (string): 
  - `organisation` (string): 
  - `plan_id` (string): Mongo _id of the Plan. Resolve via the cached /plans collection on the client (Plan.code is the human-readable key).
  - `previous_organisation_plan` (object): 
  - `pending_plan_id` (object): Set by schedule-mollie-switch when a customer queues a plan change. At current_period_end, the next Mollie subscription payment triggers mollie-confirm which supersedes this maillon and creates a new active one. UI uses this to render "switching to X on YYYY-MM-DD" on the current maillon.
  - `billing_cycle` (string): 
  - `status` (string): 
  - `current_period_start` (string): 
  - `current_period_end` (string): 
  - `started_at` (string): 
  - `canceled_at` (string): 
  - `ended_at` (string): Date à laquelle le maillon a été terminé (superseded ou fin de période après cancel). null = maillon courant.
  - `cancel_at_period_end` (boolean): 
  - ... (see schema for full list)
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `404`: Not found
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

## PaymentOrganisation

### GET /v1/organisations/{organisationId}/payment-organisation

Get the billing identity (legal_name, siret, billing_email, billing_address, payment provider/customer) for an organisation. Returns 404 if no billing identity has been set up yet — that is a normal state for fresh orgs.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `organisationId` (path, string, required): 

**Responses:**

- `200`: PaymentOrganisation record
  - `id` (string): 
  - `created_at` (string): 
  - `updated_at` (string): 
  - `organisation_id` (string): 
  - `organisation` (string): 
  - `legal_name` (string): Legal/registered company name used on invoices and PSP records. Null falls back to Organisation.name in the invoice generator.
  - `siret` (string): French SIRET (14-digit company registration). Validated softly as a non-empty string; tighter format check lives in the invoice generator once VAT rules expand.
  - `billing_email` (string): Email used for billing notifications and invoice delivery.
  - `billing_address` (string): 
  - `payment_provider` (string): Active payment provider for this organisation. Null until the first billing action lands.
  - `payment_customer_id` (string): Provider-side customer ID (Mollie/Stripe/...). Lazy-created on first billing action. Read-only — managed by Bummock through link-mollie-customer.
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `404`: Not found
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### PUT /v1/organisations/{organisationId}/payment-organisation

Replace the billing identity for an organisation (legal_name, siret, billing_email, billing_address). Upserts on first call — the row is created lazily. Does not touch payment_provider / payment_customer_id; those are managed by the internal link-mollie-customer route.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `organisationId` (path, string, required): 

**Request Body:**

- `legal_name` (string, required): Legal/registered company name used on invoices and PSP records. Null falls back to Organisation.name in the invoice generator.
- `siret` (string, required): French SIRET (14-digit company registration). Validated softly as a non-empty string; tighter format check lives in the invoice generator once VAT rules expand.
- `billing_email` (string, required): Email used for billing notifications and invoice delivery.
- `billing_address` (string, required): 

**Responses:**

- `200`: Upserted PaymentOrganisation
  - `id` (string): 
  - `created_at` (string): 
  - `updated_at` (string): 
  - `organisation_id` (string): 
  - `organisation` (string): 
  - `legal_name` (string): Legal/registered company name used on invoices and PSP records. Null falls back to Organisation.name in the invoice generator.
  - `siret` (string): French SIRET (14-digit company registration). Validated softly as a non-empty string; tighter format check lives in the invoice generator once VAT rules expand.
  - `billing_email` (string): Email used for billing notifications and invoice delivery.
  - `billing_address` (string): 
  - `payment_provider` (string): Active payment provider for this organisation. Null until the first billing action lands.
  - `payment_customer_id` (string): Provider-side customer ID (Mollie/Stripe/...). Lazy-created on first billing action. Read-only — managed by Bummock through link-mollie-customer.
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `404`: Not found
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### PATCH /v1/organisations/{organisationId}/payment-organisation

Patch the billing identity for an organisation. Same upsert primitive as PUT — unset fields stay untouched.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `organisationId` (path, string, required): 

**Request Body:**

- `legal_name` (string): Legal/registered company name used on invoices and PSP records. Null falls back to Organisation.name in the invoice generator.
- `siret` (string): French SIRET (14-digit company registration). Validated softly as a non-empty string; tighter format check lives in the invoice generator once VAT rules expand.
- `billing_email` (string): Email used for billing notifications and invoice delivery.
- `billing_address` (string): 

**Responses:**

- `200`: Upserted PaymentOrganisation
  - `id` (string): 
  - `created_at` (string): 
  - `updated_at` (string): 
  - `organisation_id` (string): 
  - `organisation` (string): 
  - `legal_name` (string): Legal/registered company name used on invoices and PSP records. Null falls back to Organisation.name in the invoice generator.
  - `siret` (string): French SIRET (14-digit company registration). Validated softly as a non-empty string; tighter format check lives in the invoice generator once VAT rules expand.
  - `billing_email` (string): Email used for billing notifications and invoice delivery.
  - `billing_address` (string): 
  - `payment_provider` (string): Active payment provider for this organisation. Null until the first billing action lands.
  - `payment_customer_id` (string): Provider-side customer ID (Mollie/Stripe/...). Lazy-created on first billing action. Read-only — managed by Bummock through link-mollie-customer.
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `404`: Not found
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

## Plans

### GET /v1/plans

Retrieves the collection of Plan resources.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `page` (query, number): The collection page number
- `itemsPerPage` (query, number): The number of items per page
- `code` (query, string (enum: discovery|builder|scale|partner|omni)): 
- `is_public` (query, boolean): 
- `orderBy[sort_order]` (query, string (enum: asc|desc)): 
- `orderBy[price_monthly_eur]` (query, string (enum: asc|desc)): 

**Responses:**

- `200`: Plan collection
  - `@context` (string): 
  - `@id` (string): 
  - `@type` (string): 
  - `hydra:member` (array): 
  - `hydra:totalItems` (number): 
  - `hydra:view` (string): 
  - `hydra:search` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### GET /v1/plans/public

Lists publicly-visible plans for the marketing site. No authentication required. Returns pricing-safe fields only (no route_access).

**Responses:**

- `200`: Marketing-safe plan list

---

### GET /v1/plans/{code}

Retrieves a Plan resource by code.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `code` (path, string, required (enum: discovery|builder|scale|partner|omni)): Plan code

**Responses:**

- `200`: Plan resource
  - `id` (string): 
  - `created_at` (string): 
  - `updated_at` (string): 
  - `code` (string): 
  - `name` (string): 
  - `price_monthly_eur` (number): 
  - `credits_per_month` (number): 
  - `overage_price_eur` (number): 
  - `daily_rate_limit` (number): 
  - `top_results_limit` (number): 
  - `engagement_min_months` (number): 
  - `route_access` (string): 
  - `features` (array): 
  - `sla_uptime_pct` (number): 
  - `support_tier` (string): 
  - ... (see schema for full list)
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `404`: Not found
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

## Program

### GET /v1/organisations/{organisationId}/programs

Retrieves the collection of Program resources.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `organisationId` (path, string, required): 
- `page` (query, number): The collection page number
- `itemsPerPage` (query, number): The number of items per page
- `name` (query, string): 
- `orderBy[name]` (query, string (enum: asc|desc)): 

**Responses:**

- `200`: Program collection
  - `@context` (string): 
  - `@id` (string): 
  - `@type` (string): 
  - `hydra:member` (array): 
  - `hydra:totalItems` (number): 
  - `hydra:view` (string): 
  - `hydra:search` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### POST /v1/organisations/{organisationId}/programs

Creates a Program resource.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `organisationId` (path, string, required): 

**Request Body:**

- `name` (string, required): 

**Responses:**

- `201`: Program resource created
  - `id` (string): 
  - `created_at` (string): 
  - `updated_at` (string): 
  - `organisation` (string): 
  - `name` (string): 
  - `courses` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `404`: Not found
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### GET /v1/organisations/{organisationId}/programs/{programId}

Retrieves a Program resource.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `organisationId` (path, string, required): 
- `programId` (path, string, required): 

**Responses:**

- `200`: Program resource
  - `id` (string): 
  - `created_at` (string): 
  - `updated_at` (string): 
  - `organisation` (string): 
  - `name` (string): 
  - `courses` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `404`: Not found
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### PUT /v1/organisations/{organisationId}/programs/{programId}

Replaces a Program resource.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `organisationId` (path, string, required): 
- `programId` (path, string, required): 

**Request Body:**

- `name` (string, required): 

**Responses:**

- `200`: Program resource replaced
  - `id` (string): 
  - `created_at` (string): 
  - `updated_at` (string): 
  - `organisation` (string): 
  - `name` (string): 
  - `courses` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `404`: Not found
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### DELETE /v1/organisations/{organisationId}/programs/{programId}

Removes a Program resource.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `organisationId` (path, string, required): 
- `programId` (path, string, required): 

**Responses:**

- `204`: Program resource deleted
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `404`: Not found
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

## Project

### GET /v1/organisations/{organisationId}/teams/{teamId}/projects

Retrieves the collection of Project resources.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `organisationId` (path, string, required): 
- `teamId` (path, string, required): 
- `page` (query, number): The collection page number
- `itemsPerPage` (query, number): The number of items per page
- `name` (query, string): 
- `orderBy[name]` (query, string (enum: asc|desc)): 

**Responses:**

- `200`: Project collection
  - `@context` (string): 
  - `@id` (string): 
  - `@type` (string): 
  - `hydra:member` (array): 
  - `hydra:totalItems` (number): 
  - `hydra:view` (string): 
  - `hydra:search` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### POST /v1/organisations/{organisationId}/teams/{teamId}/projects

Creates a Project resource.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `organisationId` (path, string, required): 
- `teamId` (path, string, required): 

**Request Body:**

- `name` (string, required): 
- `description` (string, required): 
- `active` (boolean, required): 
- `start_date` (string, required): 
- `end_date` (string, required): 

**Responses:**

- `201`: Project resource
  - `id` (string): 
  - `created_at` (string): 
  - `updated_at` (string): 
  - `team` (string): 
  - `name` (string): 
  - `description` (string): 
  - `active` (boolean): 
  - `start_date` (string): 
  - `end_date` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `404`: Not found
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### GET /v1/organisations/{organisationId}/teams/{teamId}/projects/{projectId}

Retrieves a Project resource.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `organisationId` (path, string, required): 
- `teamId` (path, string, required): 
- `projectId` (path, string, required): 

**Responses:**

- `200`: Project resource
  - `id` (string): 
  - `created_at` (string): 
  - `updated_at` (string): 
  - `team` (string): 
  - `name` (string): 
  - `description` (string): 
  - `active` (boolean): 
  - `start_date` (string): 
  - `end_date` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `404`: Not found
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### PUT /v1/organisations/{organisationId}/teams/{teamId}/projects/{projectId}

Replaces a Project resource.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `organisationId` (path, string, required): 
- `teamId` (path, string, required): 
- `projectId` (path, string, required): 

**Request Body:**

- `name` (string, required): 
- `description` (string, required): 
- `active` (boolean, required): 
- `start_date` (string, required): 
- `end_date` (string, required): 

**Responses:**

- `200`: Project resource
  - `id` (string): 
  - `created_at` (string): 
  - `updated_at` (string): 
  - `team` (string): 
  - `name` (string): 
  - `description` (string): 
  - `active` (boolean): 
  - `start_date` (string): 
  - `end_date` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `404`: Not found
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### DELETE /v1/organisations/{organisationId}/teams/{teamId}/projects/{projectId}

Removes a Project resource.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `organisationId` (path, string, required): 
- `teamId` (path, string, required): 
- `projectId` (path, string, required): 

**Responses:**

- `204`: Project resource
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `404`: Not found
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

## Public API — Account

### GET /v1/credits

Get the calling API key's credit balance

**Responses:**

- `200`: 
  - `credits_remaining` (number): Credits left in the current period.
  - `monthly_credits` (number): Credits granted per period.
  - `credits_used_this_period` (number): Credits consumed so far this period.
  - `period_start` (string): Start of the current billing period.
  - `period_end` (string): End of the current billing period.
  - `overage_price_eur` (number): Per-credit price charged once in overage (€).
  - `unlimited` (boolean): Present (true) only for the master key, which is not metered. Absent for a normal key.

---

## Public API — Analyse

### POST /v1/parse/cv

Parse a CV into structured skills, experience, education.

**Authentication:** API Key

**Request Body:**

- `file` (string): 

**Responses:**

- `200`: Parsed CV
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `501`: 

---

### POST /v1/parse/job-offer

Parse a job offer into required/desired skills.

**Authentication:** API Key

**Request Body:**

- `file` (string): 

**Responses:**

- `200`: Parsed job offer
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `501`: 

---

### POST /v1/skills/extract

Full skill profile of an occupation (essential/optional).

**Authentication:** API Key

**Request Body:**

- `occupation` (string, required): Occupation URI or title to extract the skill profile for

**Responses:**

- `200`: Skill profile
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `501`: 

---

### POST /v1/skills/recommend

Recommend relevant skills via knowledge-graph intelligence.

**Authentication:** API Key

**Request Body:**

- `skills` (array, required): Seed skill URIs to expand from

**Responses:**

- `200`: Recommended skills
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `501`: 

---

### POST /v1/cv/score

Score a CV: composite quality score + improvement axes.

**Authentication:** API Key

**Request Body:**

- `resume` (object, required): Enriched CV (json_resume) to score. (Contract pending — see route TODO.)
- `section_weights` (object): Optional per-section weights (basics/work/education/skills…), normalized by Gyre.

**Responses:**

- `200`: CV score
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `501`: 

---

## Public API — Consultation

### GET /v1/search/skill

Search skills by keyword or associated occupation.

**Authentication:** API Key

**Parameters:**

- `q` (query, string, required): Free-text search query
- `limit` (query, number): 
- `threshold` (query, number): 

**Responses:**

- `200`: Matching skills ranked by cosine similarity
  - `results` (array): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `503`: 

---

### GET /v1/search/occupation

Search occupations by keyword, sector, framework or ISCO id.

**Authentication:** API Key

**Parameters:**

- `q` (query, string, required): Free-text search query
- `limit` (query, number): 

**Responses:**

- `200`: Matching occupations
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `501`: 

---

### GET /v1/search/sector

Browse activity sectors / ISCO groups by framework.

**Authentication:** API Key

**Parameters:**

- `q` (query, string, required): Free-text search query
- `limit` (query, number): 

**Responses:**

- `200`: Sector catalogue
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `501`: 

---

### GET /v1/taxonomy/browse

Navigate the multi-framework taxonomy with cross-references.

**Authentication:** API Key

**Parameters:**

- `uri` (query, string): Parent node URI to expand; omit for taxonomy roots
- `framework` (query, string): Framework to browse (ESCO, ROME, ONET, SSF...)

**Responses:**

- `200`: Taxonomy nodes
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `501`: 

---

### GET /v1/mapping/crosswalk

Map a node across référentiels (ESCO, ROME, O*NET, Singapore, KLDB, ONS).

**Authentication:** API Key

**Parameters:**

- `uri` (query, string, required): Source node URI to map
- `target_taxonomy` (query, string, required): Target taxonomy (ESCO, ROME, ONET, SSF, KLDB, ONS)

**Responses:**

- `200`: Crosswalk correspondences
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `501`: 

---

## Public API — Intelligence

### POST /v1/match/occupation

Match a job title cross-framework (ESCO/ROME/O*NET).

**Authentication:** API Key

**Request Body:**

- `title` (string, required): Job title to match cross-framework

**Responses:**

- `200`: Occupation matches
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `501`: 

---

### POST /v1/enrich/job-offer

Enrich a job offer: parsing + implicit skill inference.

**Authentication:** API Key

**Request Body:**

- `jsonJob` (object, required): Job offer (Skillberg_jobPosting object) to enrich with implicit skills. Proxied to Gyre /bummock/jsonJob/enrich.

**Responses:**

- `200`: Enriched job offer
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `500`: Internal Server Error
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### POST /v1/enrich/cv

Enrich a CV: parsing + implicit skill inference (knowledge graph).

**Authentication:** API Key

**Request Body:**

- `resume` (object, required): Treated CV (json_resume object) to enrich with implicit skills. Proxied to Gyre /bummock/jsonResume/enrich.

**Responses:**

- `200`: Enriched CV (json_resume)
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `500`: Internal Server Error
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### POST /v1/match/cvs-vs-job

Reverse matching: one job vs a pool of pre-indexed CVs.

**Authentication:** API Key

**Request Body:**

- `profiles` (object, required): Pre-indexed candidate profiles. (Contract pending — see route TODO.)
- `target_jobs` (object, required): Target job(s) with weights.

**Responses:**

- `200`: Ranked CVs
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `501`: 

---

### POST /v1/match/jobs-vs-cv

Reverse matching: one CV vs a pool of pre-indexed jobs.

**Authentication:** API Key

**Request Body:**

- `profile` (object, required): Single candidate profile. (Contract pending — see route TODO.)
- `target_jobs` (object, required): Pool of target jobs with weights.

**Responses:**

- `200`: Ranked jobs
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `501`: 

---

### POST /v1/skills/gap

Gap analysis: missing skills + training-time estimate.

**Authentication:** API Key

**Request Body:**

- `profile` (object, required): Candidate profile.
- `target_occupation` (string, required): Target occupation URI

**Responses:**

- `200`: Skill gap
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `501`: 

---

### POST /v1/workforce/map

Bulk-map a full job architecture to a target framework. (Beta)

**Authentication:** API Key

**Request Body:**

- `architecture` (object, required): Bulk occupation architecture to map.
- `target_framework` (string, required): Target framework

**Responses:**

- `200`: Workforce map
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `501`: 

---

### POST /v1/career/transitions

Career pathways: transitions with % shared skills. (Beta)

**Authentication:** API Key

**Request Body:**

- `from_occupation` (string, required): Origin occupation URI

**Responses:**

- `200`: Career transitions
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `501`: 

---

## Roles

### GET /v1/roles

Retrieves the collection of Role resources.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `page` (query, number): The collection page number
- `itemsPerPage` (query, number): The number of items per page
- `name` (query, string): 
- `orderBy[name]` (query, string (enum: asc|desc)): 

**Responses:**

- `200`: Role collection
  - `@context` (string): 
  - `@id` (string): 
  - `@type` (string): 
  - `hydra:member` (array): 
  - `hydra:totalItems` (number): 
  - `hydra:view` (string): 
  - `hydra:search` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

## Session

### GET /v1/organisations/{organisationId}/sessions

Retrieves the collection of Session resources.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `organisationId` (path, string, required): 
- `page` (query, number): The collection page number
- `itemsPerPage` (query, number): The number of items per page
- `name` (query, string): 
- `orderBy[name]` (query, string (enum: asc|desc)): 

**Responses:**

- `200`: Session collection
  - `@context` (string): 
  - `@id` (string): 
  - `@type` (string): 
  - `hydra:member` (array): 
  - `hydra:totalItems` (number): 
  - `hydra:view` (string): 
  - `hydra:search` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### POST /v1/organisations/{organisationId}/sessions

Creates a Session resource.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `organisationId` (path, string, required): 

**Request Body:**

- `name` (string, required): 
- `start_date` (string, required): 
- `end_date` (string, required): 

**Responses:**

- `201`: Session resource created
  - `id` (string): 
  - `created_at` (string): 
  - `updated_at` (string): 
  - `organisation` (string): 
  - `program` (object): 
  - `name` (string): 
  - `start_date` (string): 
  - `end_date` (string): 
  - `learners` (string): 
  - `programs` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `404`: Not found
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### GET /v1/organisations/{organisationId}/sessions/{sessionId}

Retrieves a Session resource.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `organisationId` (path, string, required): 
- `sessionId` (path, string, required): 

**Responses:**

- `200`: Session resource
  - `id` (string): 
  - `created_at` (string): 
  - `updated_at` (string): 
  - `organisation` (string): 
  - `program` (object): 
  - `name` (string): 
  - `start_date` (string): 
  - `end_date` (string): 
  - `learners` (string): 
  - `programs` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `404`: Not found
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### PUT /v1/organisations/{organisationId}/sessions/{sessionId}

Replaces a Session resource.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `organisationId` (path, string, required): 
- `sessionId` (path, string, required): 

**Request Body:**

- `name` (string, required): 
- `start_date` (string, required): 
- `end_date` (string, required): 

**Responses:**

- `200`: Session resource replaced
  - `id` (string): 
  - `created_at` (string): 
  - `updated_at` (string): 
  - `organisation` (string): 
  - `program` (object): 
  - `name` (string): 
  - `start_date` (string): 
  - `end_date` (string): 
  - `learners` (string): 
  - `programs` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `404`: Not found
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### DELETE /v1/organisations/{organisationId}/sessions/{sessionId}

Removes a Session resource.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `organisationId` (path, string, required): 
- `sessionId` (path, string, required): 

**Responses:**

- `204`: Session resource deleted
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `404`: Not found
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

## SkillbergAI

### GET /v1/SkillbergAIs/skills/search

Semantic search across the Skillberg knowledge graph skills.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `q` (query, string, required): Free-text search query
- `limit` (query, number): 
- `threshold` (query, number): 

**Responses:**

- `200`: Matching skills ranked by cosine similarity
  - `results` (array): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `503`: 

---

### GET /v1/SkillbergAIs/skills/{skill_uuid}

Get a skill entity by its Skillberg UUID.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `skill_uuid` (path, string, required): Skill UUID in the Skillberg knowledge graph

**Responses:**

- `200`: Skill entity
  - `uri` (string): 
  - `uuid` (string): 
  - `name` (string): 
  - `labels` (array): 
  - `description` (object): 
  - `proficiency_description` (object): 
  - `proficiency_level_num` (object): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `404`: Not found
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `503`: 

---

## SkillSet

### GET /v1/users/{userId}/skillSets/{skillSetId}

Retrieves a SkillSet resource.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `userId` (path, string, required): 
- `skillSetId` (path, string, required): 

**Responses:**

- `200`: SkillSet resource
  - `id` (string): 
  - `created_at` (string): 
  - `updated_at` (string): 
  - `key_skills_list` (array): 
  - `skills_list` (array): 
  - `edges_list` (array): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `404`: Not found
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### PUT /v1/users/{userId}/skillSets/{skillSetId}

Replaces a SkillSet resource.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `userId` (path, string, required): 
- `skillSetId` (path, string, required): 

**Request Body:**

- `key_skills_list` (array, required): 
- `skills_list` (array, required): 
- `edges_list` (array, required): 

**Responses:**

- `200`: SkillSet resource
  - `id` (string): 
  - `created_at` (string): 
  - `updated_at` (string): 
  - `key_skills_list` (array): 
  - `skills_list` (array): 
  - `edges_list` (array): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `404`: Not found
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### POST /v1/users/{userId}/skillSets

Creates a SkillSet resource.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `userId` (path, string, required): 

**Request Body:**

- `key_skills_list` (array, required): 
- `skills_list` (array, required): 
- `edges_list` (array, required): 

**Responses:**

- `201`: SkillSet resource
  - `id` (string): 
  - `created_at` (string): 
  - `updated_at` (string): 
  - `key_skills_list` (array): 
  - `skills_list` (array): 
  - `edges_list` (array): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `404`: Not found
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### POST /v1/organisations/{organisationId}/offers/{offerId}/skillSets

Creates a SkillSet resource.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `organisationId` (path, string, required): 
- `offerId` (path, string, required): 

**Request Body:**

- `key_skills_list` (array, required): 
- `skills_list` (array, required): 
- `edges_list` (array, required): 

**Responses:**

- `201`: SkillSet resource
  - `id` (string): 
  - `created_at` (string): 
  - `updated_at` (string): 
  - `key_skills_list` (array): 
  - `skills_list` (array): 
  - `edges_list` (array): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `404`: Not found
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

## SonarUser

### GET /v1/users/{userId}/sonarUser

Retrieves the Sonar-specific profile for a user. Lazy-creates the document on first read so its created_at marks the user's first contact with Sonar.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `userId` (path, string, required): 

**Responses:**

- `200`: SonarUser resource
  - `id` (string): 
  - `created_at` (string): 
  - `updated_at` (string): 
  - `user` (string): 
  - `onboarded_at` (string): 
  - `role` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `404`: Not found
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### PATCH /v1/users/{userId}/sonarUser

Updates the Sonar-specific profile for a user (onboarded_at, role).

**Authentication:** Bearer Token, API Key

**Parameters:**

- `userId` (path, string, required): 

**Request Body:**

- `onboarded_at` (string): 
- `role` (string): 

**Responses:**

- `200`: SonarUser resource updated
  - `id` (string): 
  - `created_at` (string): 
  - `updated_at` (string): 
  - `user` (string): 
  - `onboarded_at` (string): 
  - `role` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `404`: Not found
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

## Team

### GET /v1/organisations/{organisationId}/users/{userId}/teams

Retrieves the collection of Team resources.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `organisationId` (path, string, required): 
- `userId` (path, string, required): 
- `page` (query, number): The collection page number
- `itemsPerPage` (query, number): The number of items per page
- `name` (query, string): 
- `orderBy[name]` (query, string (enum: asc|desc)): 

**Responses:**

- `200`: Team collection
  - `@context` (string): 
  - `@id` (string): 
  - `@type` (string): 
  - `hydra:member` (array): 
  - `hydra:totalItems` (number): 
  - `hydra:view` (string): 
  - `hydra:search` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### GET /v1/organisations/{organisationId}/teams

Retrieves the collection of Team resources.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `organisationId` (path, string, required): 
- `page` (query, number): The collection page number
- `itemsPerPage` (query, number): The number of items per page
- `name` (query, string): 
- `orderBy[name]` (query, string (enum: asc|desc)): 

**Responses:**

- `200`: Team collection
  - `@context` (string): 
  - `@id` (string): 
  - `@type` (string): 
  - `hydra:member` (array): 
  - `hydra:totalItems` (number): 
  - `hydra:view` (string): 
  - `hydra:search` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### POST /v1/organisations/{organisationId}/teams

Creates a Team resource.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `organisationId` (path, string, required): 

**Request Body:**

- `name` (string, required): 
- `description` (string, required): 

**Responses:**

- `201`: Team resource
  - `id` (string): 
  - `created_at` (string): 
  - `updated_at` (string): 
  - `organisation` (string): 
  - `name` (string): 
  - `description` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `404`: Not found
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### GET /v1/organisations/{organisationId}/teams/{teamId}

Retrieves a Team resource.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `organisationId` (path, string, required): 
- `teamId` (path, string, required): 

**Responses:**

- `200`: Team resource
  - `id` (string): 
  - `created_at` (string): 
  - `updated_at` (string): 
  - `organisation` (string): 
  - `name` (string): 
  - `description` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `404`: Not found
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### PUT /v1/organisations/{organisationId}/teams/{teamId}

Replaces a Team resource.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `organisationId` (path, string, required): 
- `teamId` (path, string, required): 

**Request Body:**

- `name` (string, required): 
- `description` (string, required): 

**Responses:**

- `200`: Team resource
  - `id` (string): 
  - `created_at` (string): 
  - `updated_at` (string): 
  - `organisation` (string): 
  - `name` (string): 
  - `description` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `404`: Not found
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### PATCH /v1/organisations/{organisationId}/teams/{teamId}

Updates a Team resource.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `organisationId` (path, string, required): 
- `teamId` (path, string, required): 

**Request Body:**

- `name` (string): 
- `description` (string): 

**Responses:**

- `200`: Team resource
  - `id` (string): 
  - `created_at` (string): 
  - `updated_at` (string): 
  - `organisation` (string): 
  - `name` (string): 
  - `description` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `404`: Not found
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### DELETE /v1/organisations/{organisationId}/teams/{teamId}

Removes a Team resource.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `organisationId` (path, string, required): 
- `teamId` (path, string, required): 

**Responses:**

- `204`: Team resource
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `404`: Not found
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

## Usage

### GET /v1/organisations/{organisationId}/usage/summary

Aggregated usage summary for an organisation in the given time window. Defaults to the last 30 days.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `organisationId` (path, string, required): 
- `from` (query, string): Start of the window (ISO-8601). Defaults to 30 days before `to`.
- `to` (query, string): End of the window (ISO-8601, exclusive). Defaults to now.

**Responses:**

- `200`: Usage summary
  - `from` (string): Window start (ISO-8601).
  - `to` (string): Window end (ISO-8601, exclusive).
  - `total_calls` (number): Total API calls in the window.
  - `total_credits` (number): Total credits consumed in the window.
  - `avg_latency_ms` (number): Mean duration in milliseconds across successful calls only (status < 400). 0 if no successful calls.
  - `error_rate` (number): Fraction of calls that returned a 4xx/5xx (0..1).
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### GET /v1/organisations/{organisationId}/usage/daily

Daily usage breakdown (calls + credits per day) for an organisation. Defaults to the last 30 days.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `organisationId` (path, string, required): 
- `from` (query, string): Start of the window (ISO-8601). Defaults to 30 days before `to`.
- `to` (query, string): End of the window (ISO-8601, exclusive). Defaults to now.
- `tz` (query, string): IANA timezone for day bucketing (e.g. "Europe/Paris"). Defaults to UTC.

**Responses:**

- `200`: Daily usage entries
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### GET /v1/organisations/{organisationId}/usage/top-routes

Top API routes by call volume for an organisation in the given time window. Defaults to top 5 over the last 30 days.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `organisationId` (path, string, required): 
- `from` (query, string): Start of the window (ISO-8601). Defaults to 30 days before `to`.
- `to` (query, string): End of the window (ISO-8601, exclusive). Defaults to now.
- `limit` (query, number): Maximum number of routes to return (1..50).

**Responses:**

- `200`: Top routes by volume
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### GET /v1/organisations/{organisationId}/usage/by-key

Usage grouped by ApiKey for an organisation in the given window. Returns an entry per key that had at least one call. Sorted by credits desc.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `organisationId` (path, string, required): 
- `from` (query, string): Start of the window (ISO-8601). Defaults to 30 days before `to`.
- `to` (query, string): End of the window (ISO-8601, exclusive). Defaults to now.

**Responses:**

- `200`: Per-key usage breakdown
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### GET /v1/organisations/{organisationId}/usage/by-family

Usage grouped by route family (consultation/analyse/intelligence). Sorted by credits desc. Defaults to the last 30 days.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `organisationId` (path, string, required): 
- `from` (query, string): Start of the window (ISO-8601). Defaults to 30 days before `to`.
- `to` (query, string): End of the window (ISO-8601, exclusive). Defaults to now.

**Responses:**

- `200`: Per-family usage breakdown
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

## User

### GET /v1/users

Retrieves the collection of User resources.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `page` (query, number): The collection page number
- `itemsPerPage` (query, number): The number of items per page
- `email` (query, string): 
- `name` (query, string): 
- `surname` (query, string): 
- `username` (query, string): 
- `date_of_birth` (query, string): 
- `orderBy[name]` (query, string (enum: asc|desc)): 
- `orderBy[surname]` (query, string (enum: asc|desc)): 
- `orderBy[username]` (query, string (enum: asc|desc)): 
- `orderBy[email]` (query, string (enum: asc|desc)): 
- `skillSet_id` (query, string): 

**Responses:**

- `200`: User collection
  - `@context` (string): 
  - `@id` (string): 
  - `@type` (string): 
  - `hydra:member` (array): 
  - `hydra:totalItems` (number): 
  - `hydra:view` (string): 
  - `hydra:search` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### POST /v1/users

Creates a User resource.

**Authentication:** Bearer Token, API Key

**Request Body:**

- `email` (string, required): 
- `name` (string, required): 
- `surname` (string, required): 
- `username` (string, required): 
- `date_of_birth` (string, required): 
- `social_links` (object, required): 
- `motivations` (object, required): 
- `skillSet_id` (string, required): 

**Responses:**

- `201`: User resource created
  - `id` (string): 
  - `created_at` (string): 
  - `updated_at` (string): 
  - `email` (string): 
  - `name` (string): 
  - `surname` (string): 
  - `username` (string): 
  - `date_of_birth` (string): 
  - `social_links` (string): 
  - `motivations` (string): 
  - `skillSet` (object): 
  - `evaluations` (string): 
  - `titles` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### GET /v1/users/{userId}

Retrieves a User resource.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `userId` (path, string, required): 

**Responses:**

- `200`: User resource
  - `id` (string): 
  - `created_at` (string): 
  - `updated_at` (string): 
  - `email` (string): 
  - `name` (string): 
  - `surname` (string): 
  - `username` (string): 
  - `date_of_birth` (string): 
  - `social_links` (string): 
  - `motivations` (string): 
  - `skillSet` (object): 
  - `evaluations` (string): 
  - `titles` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `404`: Not found
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### PUT /v1/users/{userId}

Replaces a User resource.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `userId` (path, string, required): 

**Request Body:**

- `email` (string, required): 
- `name` (string, required): 
- `surname` (string, required): 
- `username` (string, required): 
- `date_of_birth` (string, required): 
- `social_links` (object, required): 
- `motivations` (object, required): 
- `skillSet_id` (string, required): 

**Responses:**

- `200`: User resource replaced
  - `id` (string): 
  - `created_at` (string): 
  - `updated_at` (string): 
  - `email` (string): 
  - `name` (string): 
  - `surname` (string): 
  - `username` (string): 
  - `date_of_birth` (string): 
  - `social_links` (string): 
  - `motivations` (string): 
  - `skillSet` (object): 
  - `evaluations` (string): 
  - `titles` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `404`: Not found
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### DELETE /v1/users/{userId}

Removes a User resource.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `userId` (path, string, required): 

**Responses:**

- `204`: User resource deleted
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `404`: Not found
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### GET /v1/organisations/{organisationId}/users

Retrieves the collection of User resources.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `organisationId` (path, string, required): 
- `page` (query, number): The collection page number
- `itemsPerPage` (query, number): The number of items per page
- `email` (query, string): 
- `name` (query, string): 
- `surname` (query, string): 
- `username` (query, string): 
- `date_of_birth` (query, string): 
- `orderBy[name]` (query, string (enum: asc|desc)): 
- `orderBy[surname]` (query, string (enum: asc|desc)): 
- `orderBy[username]` (query, string (enum: asc|desc)): 
- `orderBy[email]` (query, string (enum: asc|desc)): 
- `skillSet_id` (query, string): 
- `role_id_list` (query, array): 
- `user_id` (query, array): 

**Responses:**

- `200`: User collection
  - `@context` (string): 
  - `@id` (string): 
  - `@type` (string): 
  - `hydra:member` (array): 
  - `hydra:totalItems` (number): 
  - `hydra:view` (string): 
  - `hydra:search` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### POST /v1/organisations/{organisationId}/users

Creates a User resource.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `organisationId` (path, string, required): 

**Request Body:**

- `email` (string, required): 
- `name` (string, required): 
- `surname` (string, required): 
- `username` (string, required): 
- `date_of_birth` (string, required): 
- `social_links` (object, required): 
- `motivations` (object, required): 
- `skillSet_id` (string, required): 

**Responses:**

- `201`: User resource created
  - `id` (string): 
  - `created_at` (string): 
  - `updated_at` (string): 
  - `email` (string): 
  - `name` (string): 
  - `surname` (string): 
  - `username` (string): 
  - `date_of_birth` (string): 
  - `social_links` (string): 
  - `motivations` (string): 
  - `skillSet` (object): 
  - `evaluations` (string): 
  - `titles` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### GET /v1/organisations/{organisationId}/teams/{teamId}/users

Retrieves the collection of User resources.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `organisationId` (path, string, required): 
- `teamId` (path, string, required): 
- `page` (query, number): The collection page number
- `itemsPerPage` (query, number): The number of items per page
- `email` (query, string): 
- `name` (query, string): 
- `surname` (query, string): 
- `username` (query, string): 
- `date_of_birth` (query, string): 
- `orderBy[name]` (query, string (enum: asc|desc)): 
- `orderBy[surname]` (query, string (enum: asc|desc)): 
- `orderBy[username]` (query, string (enum: asc|desc)): 
- `orderBy[email]` (query, string (enum: asc|desc)): 
- `skillSet_id` (query, string): 

**Responses:**

- `200`: User collection
  - `@context` (string): 
  - `@id` (string): 
  - `@type` (string): 
  - `hydra:member` (array): 
  - `hydra:totalItems` (number): 
  - `hydra:view` (string): 
  - `hydra:search` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### GET /v1/organisations/{organisationId}/offers/{offerId}/users

Retrieves the collection of User resources.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `organisationId` (path, string, required): 
- `offerId` (path, string, required): 
- `page` (query, number): The collection page number
- `itemsPerPage` (query, number): The number of items per page
- `email` (query, string): 
- `name` (query, string): 
- `surname` (query, string): 
- `username` (query, string): 
- `date_of_birth` (query, string): 
- `orderBy[name]` (query, string (enum: asc|desc)): 
- `orderBy[surname]` (query, string (enum: asc|desc)): 
- `orderBy[username]` (query, string (enum: asc|desc)): 
- `orderBy[email]` (query, string (enum: asc|desc)): 
- `skillSet_id` (query, string): 

**Responses:**

- `200`: User collection
  - `@context` (string): 
  - `@id` (string): 
  - `@type` (string): 
  - `hydra:member` (array): 
  - `hydra:totalItems` (number): 
  - `hydra:view` (string): 
  - `hydra:search` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### POST /v1/users/jobs/{jobId}/matching

Generates a matching score between users and a job.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `jobId` (path, string, required): 

**Request Body:**

- `user_id_list` (array, required): 

**Responses:**

- `201`: Matching score generated
  - `@context` (string): 
  - `@id` (string): 
  - `@type` (string): 
  - `job_id` (string): 
  - `resume` (object): 
  - `query` (string): 
  - `skillbergSkills` (array): 
  - `gyre_response` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### POST /v1/users/{userId}/completion

Generates a completion score for a given user.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `userId` (path, string, required): 

**Request Body:**

- `basics` (number): 
- `work` (number): 
- `education` (number): 
- `skills` (number): 
- `projects` (number): 
- `volunteer` (number): 
- `awards` (number): 
- `publications` (number): 

**Responses:**

- `201`: Completion score generated
  - `completion_score` (number): 
  - `section_score` (object): 
  - `missing_sections` (array): 
  - `comments` (object): 
  - `ranking` (object): 
  - `scoring_weights` (object): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `404`: Not found
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

## UserAward

### GET /v1/users/{userId}/awards

Retrieves the collection of UserAward resources.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `page` (query, number): The collection page number
- `itemsPerPage` (query, number): The number of items per page
- `title` (query, string): 
- `awarder` (query, string): 
- `orderBy[title]` (query, string (enum: asc|desc)): 
- `orderBy[awarder]` (query, string (enum: asc|desc)): 
- `userId` (path, string, required): 

**Responses:**

- `200`: UserAward collection
  - `@context` (string): 
  - `@id` (string): 
  - `@type` (string): 
  - `hydra:member` (array): 
  - `hydra:totalItems` (number): 
  - `hydra:view` (string): 
  - `hydra:search` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### POST /v1/users/{userId}/awards

Creates a UserAward resource.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `userId` (path, string, required): 

**Request Body:**

- `title` (string, required): 
- `date` (string, required): 
- `awarder` (string, required): 
- `summary` (string, required): 

**Responses:**

- `201`: UserAward resource created
  - `id` (string): 
  - `created_at` (string): 
  - `updated_at` (string): 
  - `title` (string): 
  - `date` (string): 
  - `awarder` (string): 
  - `summary` (string): 
  - `user` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### GET /v1/users/{userId}/awards/{awardId}

Retrieves a UserAward resource.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `userId` (path, string, required): 
- `awardId` (path, string, required): 

**Responses:**

- `200`: UserAward resource
  - `id` (string): 
  - `created_at` (string): 
  - `updated_at` (string): 
  - `title` (string): 
  - `date` (string): 
  - `awarder` (string): 
  - `summary` (string): 
  - `user` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `404`: Not found
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### PUT /v1/users/{userId}/awards/{awardId}

Replaces a UserAward resource.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `userId` (path, string, required): 
- `awardId` (path, string, required): 

**Request Body:**

- `title` (string, required): 
- `date` (string, required): 
- `awarder` (string, required): 
- `summary` (string, required): 

**Responses:**

- `200`: UserAward resource replaced
  - `id` (string): 
  - `created_at` (string): 
  - `updated_at` (string): 
  - `title` (string): 
  - `date` (string): 
  - `awarder` (string): 
  - `summary` (string): 
  - `user` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `404`: Not found
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### DELETE /v1/users/{userId}/awards/{awardId}

Removes a UserAward resource.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `userId` (path, string, required): 
- `awardId` (path, string, required): 

**Responses:**

- `204`: UserAward resource deleted
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `404`: Not found
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### GET /v1/organisations/{organisationId}/users/{userId}/awards

Retrieves the collection of UserAward resources.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `page` (query, number): The collection page number
- `itemsPerPage` (query, number): The number of items per page
- `title` (query, string): 
- `awarder` (query, string): 
- `orderBy[title]` (query, string (enum: asc|desc)): 
- `orderBy[awarder]` (query, string (enum: asc|desc)): 
- `organisationId` (path, string, required): 
- `userId` (path, string, required): 

**Responses:**

- `200`: UserAward collection
  - `@context` (string): 
  - `@id` (string): 
  - `@type` (string): 
  - `hydra:member` (array): 
  - `hydra:totalItems` (number): 
  - `hydra:view` (string): 
  - `hydra:search` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### POST /v1/organisations/{organisationId}/users/{userId}/awards

Creates a UserAward resource.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `organisationId` (path, string, required): 
- `userId` (path, string, required): 

**Request Body:**

- `title` (string, required): 
- `date` (string, required): 
- `awarder` (string, required): 
- `summary` (string, required): 

**Responses:**

- `201`: UserAward resource created
  - `id` (string): 
  - `created_at` (string): 
  - `updated_at` (string): 
  - `title` (string): 
  - `date` (string): 
  - `awarder` (string): 
  - `summary` (string): 
  - `user` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### GET /v1/organisations/{organisationId}/users/{userId}/awards/{awardId}

Retrieves a UserAward resource.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `organisationId` (path, string, required): 
- `userId` (path, string, required): 
- `awardId` (path, string, required): 

**Responses:**

- `200`: UserAward resource
  - `id` (string): 
  - `created_at` (string): 
  - `updated_at` (string): 
  - `title` (string): 
  - `date` (string): 
  - `awarder` (string): 
  - `summary` (string): 
  - `user` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `404`: Not found
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### PUT /v1/organisations/{organisationId}/users/{userId}/awards/{awardId}

Replaces a UserAward resource.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `organisationId` (path, string, required): 
- `userId` (path, string, required): 
- `awardId` (path, string, required): 

**Request Body:**

- `title` (string, required): 
- `date` (string, required): 
- `awarder` (string, required): 
- `summary` (string, required): 

**Responses:**

- `200`: UserAward resource replaced
  - `id` (string): 
  - `created_at` (string): 
  - `updated_at` (string): 
  - `title` (string): 
  - `date` (string): 
  - `awarder` (string): 
  - `summary` (string): 
  - `user` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `404`: Not found
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### DELETE /v1/organisations/{organisationId}/users/{userId}/awards/{awardId}

Removes a UserAward resource.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `organisationId` (path, string, required): 
- `userId` (path, string, required): 
- `awardId` (path, string, required): 

**Responses:**

- `204`: UserAward resource deleted
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `404`: Not found
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

## UserEducation

### GET /v1/users/{userId}/educations

Retrieves the collection of UserEducation resources.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `page` (query, number): The collection page number
- `itemsPerPage` (query, number): The number of items per page
- `institution` (query, string): 
- `studyType` (query, string): 
- `orderBy[institution]` (query, string (enum: asc|desc)): 
- `orderBy[studyType]` (query, string (enum: asc|desc)): 
- `userId` (path, string, required): 

**Responses:**

- `200`: UserEducation collection
  - `@context` (string): 
  - `@id` (string): 
  - `@type` (string): 
  - `hydra:member` (array): 
  - `hydra:totalItems` (number): 
  - `hydra:view` (string): 
  - `hydra:search` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### POST /v1/users/{userId}/educations

Creates a UserEducation resource.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `userId` (path, string, required): 

**Request Body:**

- `institution` (string, required): 
- `url` (string, required): 
- `area` (string, required): 
- `studyType` (string, required): 
- `startDate` (string, required): 
- `endDate` (string, required): 
- `score` (string, required): 
- `courses` (array, required): 
- `sector_uuid` (string, required): 
- `job_uuid` (string, required): 

**Responses:**

- `201`: UserEducation resource created
  - `id` (string): 
  - `created_at` (string): 
  - `updated_at` (string): 
  - `institution` (string): 
  - `url` (string): 
  - `area` (string): 
  - `studyType` (string): 
  - `startDate` (string): 
  - `endDate` (string): 
  - `score` (string): 
  - `courses` (array): 
  - `sector_uuid` (string): 
  - `job_uuid` (string): 
  - `user` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### GET /v1/users/{userId}/educations/{educationId}

Retrieves a UserEducation resource.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `userId` (path, string, required): 
- `educationId` (path, string, required): 

**Responses:**

- `200`: UserEducation resource
  - `id` (string): 
  - `created_at` (string): 
  - `updated_at` (string): 
  - `institution` (string): 
  - `url` (string): 
  - `area` (string): 
  - `studyType` (string): 
  - `startDate` (string): 
  - `endDate` (string): 
  - `score` (string): 
  - `courses` (array): 
  - `sector_uuid` (string): 
  - `job_uuid` (string): 
  - `user` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `404`: Not found
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### PUT /v1/users/{userId}/educations/{educationId}

Replaces a UserEducation resource.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `userId` (path, string, required): 
- `educationId` (path, string, required): 

**Request Body:**

- `institution` (string, required): 
- `url` (string, required): 
- `area` (string, required): 
- `studyType` (string, required): 
- `startDate` (string, required): 
- `endDate` (string, required): 
- `score` (string, required): 
- `courses` (array, required): 
- `sector_uuid` (string, required): 
- `job_uuid` (string, required): 

**Responses:**

- `200`: UserEducation resource replaced
  - `id` (string): 
  - `created_at` (string): 
  - `updated_at` (string): 
  - `institution` (string): 
  - `url` (string): 
  - `area` (string): 
  - `studyType` (string): 
  - `startDate` (string): 
  - `endDate` (string): 
  - `score` (string): 
  - `courses` (array): 
  - `sector_uuid` (string): 
  - `job_uuid` (string): 
  - `user` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `404`: Not found
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### DELETE /v1/users/{userId}/educations/{educationId}

Removes a UserEducation resource.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `userId` (path, string, required): 
- `educationId` (path, string, required): 

**Responses:**

- `204`: UserEducation resource deleted
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `404`: Not found
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### GET /v1/organisations/{organisationId}/users/{userId}/educations

Retrieves the collection of UserEducation resources.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `page` (query, number): The collection page number
- `itemsPerPage` (query, number): The number of items per page
- `institution` (query, string): 
- `studyType` (query, string): 
- `orderBy[institution]` (query, string (enum: asc|desc)): 
- `orderBy[studyType]` (query, string (enum: asc|desc)): 
- `organisationId` (path, string, required): 
- `userId` (path, string, required): 

**Responses:**

- `200`: UserEducation collection
  - `@context` (string): 
  - `@id` (string): 
  - `@type` (string): 
  - `hydra:member` (array): 
  - `hydra:totalItems` (number): 
  - `hydra:view` (string): 
  - `hydra:search` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### POST /v1/organisations/{organisationId}/users/{userId}/educations

Creates a UserEducation resource.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `organisationId` (path, string, required): 
- `userId` (path, string, required): 

**Request Body:**

- `institution` (string, required): 
- `url` (string, required): 
- `area` (string, required): 
- `studyType` (string, required): 
- `startDate` (string, required): 
- `endDate` (string, required): 
- `score` (string, required): 
- `courses` (array, required): 
- `sector_uuid` (string, required): 
- `job_uuid` (string, required): 

**Responses:**

- `201`: UserEducation resource created
  - `id` (string): 
  - `created_at` (string): 
  - `updated_at` (string): 
  - `institution` (string): 
  - `url` (string): 
  - `area` (string): 
  - `studyType` (string): 
  - `startDate` (string): 
  - `endDate` (string): 
  - `score` (string): 
  - `courses` (array): 
  - `sector_uuid` (string): 
  - `job_uuid` (string): 
  - `user` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### GET /v1/organisations/{organisationId}/users/{userId}/educations/{educationId}

Retrieves a UserEducation resource.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `organisationId` (path, string, required): 
- `userId` (path, string, required): 
- `educationId` (path, string, required): 

**Responses:**

- `200`: UserEducation resource
  - `id` (string): 
  - `created_at` (string): 
  - `updated_at` (string): 
  - `institution` (string): 
  - `url` (string): 
  - `area` (string): 
  - `studyType` (string): 
  - `startDate` (string): 
  - `endDate` (string): 
  - `score` (string): 
  - `courses` (array): 
  - `sector_uuid` (string): 
  - `job_uuid` (string): 
  - `user` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `404`: Not found
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### PUT /v1/organisations/{organisationId}/users/{userId}/educations/{educationId}

Replaces a UserEducation resource.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `organisationId` (path, string, required): 
- `userId` (path, string, required): 
- `educationId` (path, string, required): 

**Request Body:**

- `institution` (string, required): 
- `url` (string, required): 
- `area` (string, required): 
- `studyType` (string, required): 
- `startDate` (string, required): 
- `endDate` (string, required): 
- `score` (string, required): 
- `courses` (array, required): 
- `sector_uuid` (string, required): 
- `job_uuid` (string, required): 

**Responses:**

- `200`: UserEducation resource replaced
  - `id` (string): 
  - `created_at` (string): 
  - `updated_at` (string): 
  - `institution` (string): 
  - `url` (string): 
  - `area` (string): 
  - `studyType` (string): 
  - `startDate` (string): 
  - `endDate` (string): 
  - `score` (string): 
  - `courses` (array): 
  - `sector_uuid` (string): 
  - `job_uuid` (string): 
  - `user` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `404`: Not found
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### DELETE /v1/organisations/{organisationId}/users/{userId}/educations/{educationId}

Removes a UserEducation resource.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `organisationId` (path, string, required): 
- `userId` (path, string, required): 
- `educationId` (path, string, required): 

**Responses:**

- `204`: UserEducation resource deleted
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `404`: Not found
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

## UserInterest

### GET /v1/users/{userId}/interests

Retrieves the collection of UserInterest resources.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `page` (query, number): The collection page number
- `itemsPerPage` (query, number): The number of items per page
- `name` (query, string): 
- `orderBy[name]` (query, string (enum: asc|desc)): 
- `userId` (path, string, required): 

**Responses:**

- `200`: UserInterest collection
  - `@context` (string): 
  - `@id` (string): 
  - `@type` (string): 
  - `hydra:member` (array): 
  - `hydra:totalItems` (number): 
  - `hydra:view` (string): 
  - `hydra:search` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### POST /v1/users/{userId}/interests

Creates a UserInterest resource.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `userId` (path, string, required): 

**Request Body:**

- `name` (string, required): 
- `keywords` (array, required): 
- `sector_uuid` (string, required): 
- `job_uuid` (string, required): 

**Responses:**

- `201`: UserInterest resource created
  - `id` (string): 
  - `created_at` (string): 
  - `updated_at` (string): 
  - `name` (string): 
  - `keywords` (array): 
  - `sector_uuid` (string): 
  - `job_uuid` (string): 
  - `user` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### GET /v1/users/{userId}/interests/{interestId}

Retrieves a UserInterest resource.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `userId` (path, string, required): 
- `interestId` (path, string, required): 

**Responses:**

- `200`: UserInterest resource
  - `id` (string): 
  - `created_at` (string): 
  - `updated_at` (string): 
  - `name` (string): 
  - `keywords` (array): 
  - `sector_uuid` (string): 
  - `job_uuid` (string): 
  - `user` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `404`: Not found
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### PUT /v1/users/{userId}/interests/{interestId}

Replaces a UserInterest resource.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `userId` (path, string, required): 
- `interestId` (path, string, required): 

**Request Body:**

- `name` (string, required): 
- `keywords` (array, required): 
- `sector_uuid` (string, required): 
- `job_uuid` (string, required): 

**Responses:**

- `200`: UserInterest resource replaced
  - `id` (string): 
  - `created_at` (string): 
  - `updated_at` (string): 
  - `name` (string): 
  - `keywords` (array): 
  - `sector_uuid` (string): 
  - `job_uuid` (string): 
  - `user` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `404`: Not found
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### DELETE /v1/users/{userId}/interests/{interestId}

Removes a UserInterest resource.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `userId` (path, string, required): 
- `interestId` (path, string, required): 

**Responses:**

- `204`: UserInterest resource deleted
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `404`: Not found
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### GET /v1/organisations/{organisationId}/users/{userId}/interests

Retrieves the collection of UserInterest resources.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `page` (query, number): The collection page number
- `itemsPerPage` (query, number): The number of items per page
- `name` (query, string): 
- `orderBy[name]` (query, string (enum: asc|desc)): 
- `organisationId` (path, string, required): 
- `userId` (path, string, required): 

**Responses:**

- `200`: UserInterest collection
  - `@context` (string): 
  - `@id` (string): 
  - `@type` (string): 
  - `hydra:member` (array): 
  - `hydra:totalItems` (number): 
  - `hydra:view` (string): 
  - `hydra:search` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### POST /v1/organisations/{organisationId}/users/{userId}/interests

Creates a UserInterest resource.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `organisationId` (path, string, required): 
- `userId` (path, string, required): 

**Request Body:**

- `name` (string, required): 
- `keywords` (array, required): 
- `sector_uuid` (string, required): 
- `job_uuid` (string, required): 

**Responses:**

- `201`: UserInterest resource created
  - `id` (string): 
  - `created_at` (string): 
  - `updated_at` (string): 
  - `name` (string): 
  - `keywords` (array): 
  - `sector_uuid` (string): 
  - `job_uuid` (string): 
  - `user` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### GET /v1/organisations/{organisationId}/users/{userId}/interests/{interestId}

Retrieves a UserInterest resource.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `organisationId` (path, string, required): 
- `userId` (path, string, required): 
- `interestId` (path, string, required): 

**Responses:**

- `200`: UserInterest resource
  - `id` (string): 
  - `created_at` (string): 
  - `updated_at` (string): 
  - `name` (string): 
  - `keywords` (array): 
  - `sector_uuid` (string): 
  - `job_uuid` (string): 
  - `user` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `404`: Not found
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### PUT /v1/organisations/{organisationId}/users/{userId}/interests/{interestId}

Replaces a UserInterest resource.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `organisationId` (path, string, required): 
- `userId` (path, string, required): 
- `interestId` (path, string, required): 

**Request Body:**

- `name` (string, required): 
- `keywords` (array, required): 
- `sector_uuid` (string, required): 
- `job_uuid` (string, required): 

**Responses:**

- `200`: UserInterest resource replaced
  - `id` (string): 
  - `created_at` (string): 
  - `updated_at` (string): 
  - `name` (string): 
  - `keywords` (array): 
  - `sector_uuid` (string): 
  - `job_uuid` (string): 
  - `user` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `404`: Not found
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### DELETE /v1/organisations/{organisationId}/users/{userId}/interests/{interestId}

Removes a UserInterest resource.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `organisationId` (path, string, required): 
- `userId` (path, string, required): 
- `interestId` (path, string, required): 

**Responses:**

- `204`: UserInterest resource deleted
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `404`: Not found
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

## UserLanguage

### GET /v1/users/{userId}/languages

Retrieves the collection of UserLanguage resources.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `page` (query, number): The collection page number
- `itemsPerPage` (query, number): The number of items per page
- `language` (query, string): 
- `fluency` (query, string): 
- `orderBy[language]` (query, string (enum: asc|desc)): 
- `orderBy[fluency]` (query, string (enum: asc|desc)): 
- `userId` (path, string, required): 

**Responses:**

- `200`: UserLanguage collection
  - `@context` (string): 
  - `@id` (string): 
  - `@type` (string): 
  - `hydra:member` (array): 
  - `hydra:totalItems` (number): 
  - `hydra:view` (string): 
  - `hydra:search` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### POST /v1/users/{userId}/languages

Creates a UserLanguage resource.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `userId` (path, string, required): 

**Request Body:**

- `language` (string, required): 
- `fluency` (string, required): 

**Responses:**

- `201`: UserLanguage resource created
  - `id` (string): 
  - `created_at` (string): 
  - `updated_at` (string): 
  - `language` (string): 
  - `fluency` (string): 
  - `user` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### GET /v1/users/{userId}/languages/{languageId}

Retrieves a UserLanguage resource.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `userId` (path, string, required): 
- `languageId` (path, string, required): 

**Responses:**

- `200`: UserLanguage resource
  - `id` (string): 
  - `created_at` (string): 
  - `updated_at` (string): 
  - `language` (string): 
  - `fluency` (string): 
  - `user` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `404`: Not found
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### PUT /v1/users/{userId}/languages/{languageId}

Replaces a UserLanguage resource.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `userId` (path, string, required): 
- `languageId` (path, string, required): 

**Request Body:**

- `language` (string, required): 
- `fluency` (string, required): 

**Responses:**

- `200`: UserLanguage resource replaced
  - `id` (string): 
  - `created_at` (string): 
  - `updated_at` (string): 
  - `language` (string): 
  - `fluency` (string): 
  - `user` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `404`: Not found
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### DELETE /v1/users/{userId}/languages/{languageId}

Removes a UserLanguage resource.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `userId` (path, string, required): 
- `languageId` (path, string, required): 

**Responses:**

- `204`: UserLanguage resource deleted
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `404`: Not found
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### GET /v1/organisations/{organisationId}/users/{userId}/languages

Retrieves the collection of UserLanguage resources.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `page` (query, number): The collection page number
- `itemsPerPage` (query, number): The number of items per page
- `language` (query, string): 
- `fluency` (query, string): 
- `orderBy[language]` (query, string (enum: asc|desc)): 
- `orderBy[fluency]` (query, string (enum: asc|desc)): 
- `organisationId` (path, string, required): 
- `userId` (path, string, required): 

**Responses:**

- `200`: UserLanguage collection
  - `@context` (string): 
  - `@id` (string): 
  - `@type` (string): 
  - `hydra:member` (array): 
  - `hydra:totalItems` (number): 
  - `hydra:view` (string): 
  - `hydra:search` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### POST /v1/organisations/{organisationId}/users/{userId}/languages

Creates a UserLanguage resource.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `organisationId` (path, string, required): 
- `userId` (path, string, required): 

**Request Body:**

- `language` (string, required): 
- `fluency` (string, required): 

**Responses:**

- `201`: UserLanguage resource created
  - `id` (string): 
  - `created_at` (string): 
  - `updated_at` (string): 
  - `language` (string): 
  - `fluency` (string): 
  - `user` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### GET /v1/organisations/{organisationId}/users/{userId}/languages/{languageId}

Retrieves a UserLanguage resource.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `organisationId` (path, string, required): 
- `userId` (path, string, required): 
- `languageId` (path, string, required): 

**Responses:**

- `200`: UserLanguage resource
  - `id` (string): 
  - `created_at` (string): 
  - `updated_at` (string): 
  - `language` (string): 
  - `fluency` (string): 
  - `user` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `404`: Not found
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### PUT /v1/organisations/{organisationId}/users/{userId}/languages/{languageId}

Replaces a UserLanguage resource.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `organisationId` (path, string, required): 
- `userId` (path, string, required): 
- `languageId` (path, string, required): 

**Request Body:**

- `language` (string, required): 
- `fluency` (string, required): 

**Responses:**

- `200`: UserLanguage resource replaced
  - `id` (string): 
  - `created_at` (string): 
  - `updated_at` (string): 
  - `language` (string): 
  - `fluency` (string): 
  - `user` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `404`: Not found
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### DELETE /v1/organisations/{organisationId}/users/{userId}/languages/{languageId}

Removes a UserLanguage resource.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `organisationId` (path, string, required): 
- `userId` (path, string, required): 
- `languageId` (path, string, required): 

**Responses:**

- `204`: UserLanguage resource deleted
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `404`: Not found
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

## UserProject

### GET /v1/users/{userId}/projects

Retrieves the collection of UserProject resources.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `page` (query, number): The collection page number
- `itemsPerPage` (query, number): The number of items per page
- `name` (query, string): 
- `description` (query, string): 
- `orderBy[name]` (query, string (enum: asc|desc)): 
- `orderBy[description]` (query, string (enum: asc|desc)): 
- `userId` (path, string, required): 

**Responses:**

- `200`: UserProject collection
  - `@context` (string): 
  - `@id` (string): 
  - `@type` (string): 
  - `hydra:member` (array): 
  - `hydra:totalItems` (number): 
  - `hydra:view` (string): 
  - `hydra:search` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### POST /v1/users/{userId}/projects

Creates a UserProject resource.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `userId` (path, string, required): 

**Request Body:**

- `name` (string, required): 
- `description` (string, required): 
- `highlights` (array, required): 
- `keywords` (array, required): 
- `startDate` (string, required): 
- `endDate` (string, required): 
- `url` (string, required): 
- `roles` (array, required): 
- `entity` (string, required): 
- `type` (string, required): 
- `sector_uuid` (string, required): 
- `job_uuid` (string, required): 

**Responses:**

- `201`: UserProject resource created
  - `id` (string): 
  - `created_at` (string): 
  - `updated_at` (string): 
  - `name` (string): 
  - `description` (string): 
  - `highlights` (array): 
  - `keywords` (array): 
  - `startDate` (string): 
  - `endDate` (string): 
  - `url` (string): 
  - `roles` (array): 
  - `entity` (string): 
  - `type` (string): 
  - `sector_uuid` (string): 
  - `job_uuid` (string): 
  - ... (see schema for full list)
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### GET /v1/users/{userId}/projects/{projectId}

Retrieves a UserProject resource.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `userId` (path, string, required): 
- `projectId` (path, string, required): 

**Responses:**

- `200`: UserProject resource
  - `id` (string): 
  - `created_at` (string): 
  - `updated_at` (string): 
  - `name` (string): 
  - `description` (string): 
  - `highlights` (array): 
  - `keywords` (array): 
  - `startDate` (string): 
  - `endDate` (string): 
  - `url` (string): 
  - `roles` (array): 
  - `entity` (string): 
  - `type` (string): 
  - `sector_uuid` (string): 
  - `job_uuid` (string): 
  - ... (see schema for full list)
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `404`: Not found
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### PUT /v1/users/{userId}/projects/{projectId}

Replaces a UserProject resource.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `userId` (path, string, required): 
- `projectId` (path, string, required): 

**Request Body:**

- `name` (string, required): 
- `description` (string, required): 
- `highlights` (array, required): 
- `keywords` (array, required): 
- `startDate` (string, required): 
- `endDate` (string, required): 
- `url` (string, required): 
- `roles` (array, required): 
- `entity` (string, required): 
- `type` (string, required): 
- `sector_uuid` (string, required): 
- `job_uuid` (string, required): 

**Responses:**

- `200`: UserProject resource replaced
  - `id` (string): 
  - `created_at` (string): 
  - `updated_at` (string): 
  - `name` (string): 
  - `description` (string): 
  - `highlights` (array): 
  - `keywords` (array): 
  - `startDate` (string): 
  - `endDate` (string): 
  - `url` (string): 
  - `roles` (array): 
  - `entity` (string): 
  - `type` (string): 
  - `sector_uuid` (string): 
  - `job_uuid` (string): 
  - ... (see schema for full list)
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `404`: Not found
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### DELETE /v1/users/{userId}/projects/{projectId}

Removes a UserProject resource.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `userId` (path, string, required): 
- `projectId` (path, string, required): 

**Responses:**

- `204`: UserProject resource deleted
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `404`: Not found
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### GET /v1/organisations/{organisationId}/users/{userId}/projects

Retrieves the collection of UserProject resources.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `page` (query, number): The collection page number
- `itemsPerPage` (query, number): The number of items per page
- `name` (query, string): 
- `description` (query, string): 
- `orderBy[name]` (query, string (enum: asc|desc)): 
- `orderBy[description]` (query, string (enum: asc|desc)): 
- `organisationId` (path, string, required): 
- `userId` (path, string, required): 

**Responses:**

- `200`: UserProject collection
  - `@context` (string): 
  - `@id` (string): 
  - `@type` (string): 
  - `hydra:member` (array): 
  - `hydra:totalItems` (number): 
  - `hydra:view` (string): 
  - `hydra:search` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### POST /v1/organisations/{organisationId}/users/{userId}/projects

Creates a UserProject resource.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `organisationId` (path, string, required): 
- `userId` (path, string, required): 

**Request Body:**

- `name` (string, required): 
- `description` (string, required): 
- `highlights` (array, required): 
- `keywords` (array, required): 
- `startDate` (string, required): 
- `endDate` (string, required): 
- `url` (string, required): 
- `roles` (array, required): 
- `entity` (string, required): 
- `type` (string, required): 
- `sector_uuid` (string, required): 
- `job_uuid` (string, required): 

**Responses:**

- `201`: UserProject resource created
  - `id` (string): 
  - `created_at` (string): 
  - `updated_at` (string): 
  - `name` (string): 
  - `description` (string): 
  - `highlights` (array): 
  - `keywords` (array): 
  - `startDate` (string): 
  - `endDate` (string): 
  - `url` (string): 
  - `roles` (array): 
  - `entity` (string): 
  - `type` (string): 
  - `sector_uuid` (string): 
  - `job_uuid` (string): 
  - ... (see schema for full list)
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### GET /v1/organisations/{organisationId}/users/{userId}/projects/{projectId}

Retrieves a UserProject resource.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `organisationId` (path, string, required): 
- `userId` (path, string, required): 
- `projectId` (path, string, required): 

**Responses:**

- `200`: UserProject resource
  - `id` (string): 
  - `created_at` (string): 
  - `updated_at` (string): 
  - `name` (string): 
  - `description` (string): 
  - `highlights` (array): 
  - `keywords` (array): 
  - `startDate` (string): 
  - `endDate` (string): 
  - `url` (string): 
  - `roles` (array): 
  - `entity` (string): 
  - `type` (string): 
  - `sector_uuid` (string): 
  - `job_uuid` (string): 
  - ... (see schema for full list)
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `404`: Not found
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### PUT /v1/organisations/{organisationId}/users/{userId}/projects/{projectId}

Replaces a UserProject resource.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `organisationId` (path, string, required): 
- `userId` (path, string, required): 
- `projectId` (path, string, required): 

**Request Body:**

- `name` (string, required): 
- `description` (string, required): 
- `highlights` (array, required): 
- `keywords` (array, required): 
- `startDate` (string, required): 
- `endDate` (string, required): 
- `url` (string, required): 
- `roles` (array, required): 
- `entity` (string, required): 
- `type` (string, required): 
- `sector_uuid` (string, required): 
- `job_uuid` (string, required): 

**Responses:**

- `200`: UserProject resource replaced
  - `id` (string): 
  - `created_at` (string): 
  - `updated_at` (string): 
  - `name` (string): 
  - `description` (string): 
  - `highlights` (array): 
  - `keywords` (array): 
  - `startDate` (string): 
  - `endDate` (string): 
  - `url` (string): 
  - `roles` (array): 
  - `entity` (string): 
  - `type` (string): 
  - `sector_uuid` (string): 
  - `job_uuid` (string): 
  - ... (see schema for full list)
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `404`: Not found
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### DELETE /v1/organisations/{organisationId}/users/{userId}/projects/{projectId}

Removes a UserProject resource.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `organisationId` (path, string, required): 
- `userId` (path, string, required): 
- `projectId` (path, string, required): 

**Responses:**

- `204`: UserProject resource deleted
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `404`: Not found
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

## UserPublication

### GET /v1/users/{userId}/publications

Retrieves the collection of UserPublication resources.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `page` (query, number): The collection page number
- `itemsPerPage` (query, number): The number of items per page
- `name` (query, string): 
- `publisher` (query, string): 
- `orderBy[name]` (query, string (enum: asc|desc)): 
- `orderBy[publisher]` (query, string (enum: asc|desc)): 
- `userId` (path, string, required): 

**Responses:**

- `200`: UserPublication collection
  - `@context` (string): 
  - `@id` (string): 
  - `@type` (string): 
  - `hydra:member` (array): 
  - `hydra:totalItems` (number): 
  - `hydra:view` (string): 
  - `hydra:search` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### POST /v1/users/{userId}/publications

Creates a UserPublication resource.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `userId` (path, string, required): 

**Request Body:**

- `name` (string, required): 
- `publisher` (string, required): 
- `releaseDate` (string, required): 
- `url` (string, required): 
- `summary` (string, required): 

**Responses:**

- `201`: UserPublication resource created
  - `id` (string): 
  - `created_at` (string): 
  - `updated_at` (string): 
  - `name` (string): 
  - `publisher` (string): 
  - `releaseDate` (string): 
  - `url` (string): 
  - `summary` (string): 
  - `user` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### GET /v1/users/{userId}/publications/{publicationId}

Retrieves a UserPublication resource.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `userId` (path, string, required): 
- `publicationId` (path, string, required): 

**Responses:**

- `200`: UserPublication resource
  - `id` (string): 
  - `created_at` (string): 
  - `updated_at` (string): 
  - `name` (string): 
  - `publisher` (string): 
  - `releaseDate` (string): 
  - `url` (string): 
  - `summary` (string): 
  - `user` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `404`: Not found
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### PUT /v1/users/{userId}/publications/{publicationId}

Replaces a UserPublication resource.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `userId` (path, string, required): 
- `publicationId` (path, string, required): 

**Request Body:**

- `name` (string, required): 
- `publisher` (string, required): 
- `releaseDate` (string, required): 
- `url` (string, required): 
- `summary` (string, required): 

**Responses:**

- `200`: UserPublication resource replaced
  - `id` (string): 
  - `created_at` (string): 
  - `updated_at` (string): 
  - `name` (string): 
  - `publisher` (string): 
  - `releaseDate` (string): 
  - `url` (string): 
  - `summary` (string): 
  - `user` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `404`: Not found
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### DELETE /v1/users/{userId}/publications/{publicationId}

Removes a UserPublication resource.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `userId` (path, string, required): 
- `publicationId` (path, string, required): 

**Responses:**

- `204`: UserPublication resource deleted
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `404`: Not found
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### GET /v1/organisations/{organisationId}/users/{userId}/publications

Retrieves the collection of UserPublication resources.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `page` (query, number): The collection page number
- `itemsPerPage` (query, number): The number of items per page
- `name` (query, string): 
- `publisher` (query, string): 
- `orderBy[name]` (query, string (enum: asc|desc)): 
- `orderBy[publisher]` (query, string (enum: asc|desc)): 
- `organisationId` (path, string, required): 
- `userId` (path, string, required): 

**Responses:**

- `200`: UserPublication collection
  - `@context` (string): 
  - `@id` (string): 
  - `@type` (string): 
  - `hydra:member` (array): 
  - `hydra:totalItems` (number): 
  - `hydra:view` (string): 
  - `hydra:search` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### POST /v1/organisations/{organisationId}/users/{userId}/publications

Creates a UserPublication resource.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `organisationId` (path, string, required): 
- `userId` (path, string, required): 

**Request Body:**

- `name` (string, required): 
- `publisher` (string, required): 
- `releaseDate` (string, required): 
- `url` (string, required): 
- `summary` (string, required): 

**Responses:**

- `201`: UserPublication resource created
  - `id` (string): 
  - `created_at` (string): 
  - `updated_at` (string): 
  - `name` (string): 
  - `publisher` (string): 
  - `releaseDate` (string): 
  - `url` (string): 
  - `summary` (string): 
  - `user` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### GET /v1/organisations/{organisationId}/users/{userId}/publications/{publicationId}

Retrieves a UserPublication resource.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `organisationId` (path, string, required): 
- `userId` (path, string, required): 
- `publicationId` (path, string, required): 

**Responses:**

- `200`: UserPublication resource
  - `id` (string): 
  - `created_at` (string): 
  - `updated_at` (string): 
  - `name` (string): 
  - `publisher` (string): 
  - `releaseDate` (string): 
  - `url` (string): 
  - `summary` (string): 
  - `user` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `404`: Not found
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### PUT /v1/organisations/{organisationId}/users/{userId}/publications/{publicationId}

Replaces a UserPublication resource.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `organisationId` (path, string, required): 
- `userId` (path, string, required): 
- `publicationId` (path, string, required): 

**Request Body:**

- `name` (string, required): 
- `publisher` (string, required): 
- `releaseDate` (string, required): 
- `url` (string, required): 
- `summary` (string, required): 

**Responses:**

- `200`: UserPublication resource replaced
  - `id` (string): 
  - `created_at` (string): 
  - `updated_at` (string): 
  - `name` (string): 
  - `publisher` (string): 
  - `releaseDate` (string): 
  - `url` (string): 
  - `summary` (string): 
  - `user` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `404`: Not found
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### DELETE /v1/organisations/{organisationId}/users/{userId}/publications/{publicationId}

Removes a UserPublication resource.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `organisationId` (path, string, required): 
- `userId` (path, string, required): 
- `publicationId` (path, string, required): 

**Responses:**

- `204`: UserPublication resource deleted
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `404`: Not found
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

## UserReference

### GET /v1/users/{userId}/references

Retrieves the collection of UserReference resources.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `page` (query, number): The collection page number
- `itemsPerPage` (query, number): The number of items per page
- `name` (query, string): 
- `orderBy[name]` (query, string (enum: asc|desc)): 
- `userId` (path, string, required): 

**Responses:**

- `200`: UserReference collection
  - `@context` (string): 
  - `@id` (string): 
  - `@type` (string): 
  - `hydra:member` (array): 
  - `hydra:totalItems` (number): 
  - `hydra:view` (string): 
  - `hydra:search` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### POST /v1/users/{userId}/references

Creates a UserReference resource.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `userId` (path, string, required): 

**Request Body:**

- `name` (string, required): 
- `reference` (string, required): 

**Responses:**

- `201`: UserReference resource created
  - `id` (string): 
  - `created_at` (string): 
  - `updated_at` (string): 
  - `name` (string): 
  - `reference` (string): 
  - `user` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### GET /v1/users/{userId}/references/{referenceId}

Retrieves a UserReference resource.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `userId` (path, string, required): 
- `referenceId` (path, string, required): 

**Responses:**

- `200`: UserReference resource
  - `id` (string): 
  - `created_at` (string): 
  - `updated_at` (string): 
  - `name` (string): 
  - `reference` (string): 
  - `user` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `404`: Not found
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### PUT /v1/users/{userId}/references/{referenceId}

Replaces a UserReference resource.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `userId` (path, string, required): 
- `referenceId` (path, string, required): 

**Request Body:**

- `name` (string, required): 
- `reference` (string, required): 

**Responses:**

- `200`: UserReference resource replaced
  - `id` (string): 
  - `created_at` (string): 
  - `updated_at` (string): 
  - `name` (string): 
  - `reference` (string): 
  - `user` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `404`: Not found
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### DELETE /v1/users/{userId}/references/{referenceId}

Removes a UserReference resource.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `userId` (path, string, required): 
- `referenceId` (path, string, required): 

**Responses:**

- `204`: UserReference resource deleted
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `404`: Not found
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### GET /v1/organisations/{organisationId}/users/{userId}/references

Retrieves the collection of UserReference resources.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `page` (query, number): The collection page number
- `itemsPerPage` (query, number): The number of items per page
- `name` (query, string): 
- `orderBy[name]` (query, string (enum: asc|desc)): 
- `organisationId` (path, string, required): 
- `userId` (path, string, required): 

**Responses:**

- `200`: UserReference collection
  - `@context` (string): 
  - `@id` (string): 
  - `@type` (string): 
  - `hydra:member` (array): 
  - `hydra:totalItems` (number): 
  - `hydra:view` (string): 
  - `hydra:search` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### POST /v1/organisations/{organisationId}/users/{userId}/references

Creates a UserReference resource.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `organisationId` (path, string, required): 
- `userId` (path, string, required): 

**Request Body:**

- `name` (string, required): 
- `reference` (string, required): 

**Responses:**

- `201`: UserReference resource created
  - `id` (string): 
  - `created_at` (string): 
  - `updated_at` (string): 
  - `name` (string): 
  - `reference` (string): 
  - `user` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### GET /v1/organisations/{organisationId}/users/{userId}/references/{referenceId}

Retrieves a UserReference resource.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `organisationId` (path, string, required): 
- `userId` (path, string, required): 
- `referenceId` (path, string, required): 

**Responses:**

- `200`: UserReference resource
  - `id` (string): 
  - `created_at` (string): 
  - `updated_at` (string): 
  - `name` (string): 
  - `reference` (string): 
  - `user` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `404`: Not found
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### PUT /v1/organisations/{organisationId}/users/{userId}/references/{referenceId}

Replaces a UserReference resource.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `organisationId` (path, string, required): 
- `userId` (path, string, required): 
- `referenceId` (path, string, required): 

**Request Body:**

- `name` (string, required): 
- `reference` (string, required): 

**Responses:**

- `200`: UserReference resource replaced
  - `id` (string): 
  - `created_at` (string): 
  - `updated_at` (string): 
  - `name` (string): 
  - `reference` (string): 
  - `user` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `404`: Not found
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### DELETE /v1/organisations/{organisationId}/users/{userId}/references/{referenceId}

Removes a UserReference resource.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `organisationId` (path, string, required): 
- `userId` (path, string, required): 
- `referenceId` (path, string, required): 

**Responses:**

- `204`: UserReference resource deleted
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `404`: Not found
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

## UserSkill

### GET /v1/users/{userId}/skills

Retrieves the collection of UserSkill resources.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `page` (query, number): The collection page number
- `itemsPerPage` (query, number): The number of items per page
- `name` (query, string): 
- `level` (query, string): 
- `orderBy[name]` (query, string (enum: asc|desc)): 
- `orderBy[level]` (query, string (enum: asc|desc)): 
- `userId` (path, string, required): 

**Responses:**

- `200`: UserSkill collection
  - `@context` (string): 
  - `@id` (string): 
  - `@type` (string): 
  - `hydra:member` (array): 
  - `hydra:totalItems` (number): 
  - `hydra:view` (string): 
  - `hydra:search` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### POST /v1/users/{userId}/skills

Creates a UserSkill resource.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `userId` (path, string, required): 

**Request Body:**

- `name` (string, required): 
- `level` (string, required): 
- `keywords` (array, required): 
- `sector_uuid` (string, required): 
- `job_uuid` (string, required): 

**Responses:**

- `201`: UserSkill resource created
  - `id` (string): 
  - `created_at` (string): 
  - `updated_at` (string): 
  - `name` (string): 
  - `level` (string): 
  - `keywords` (array): 
  - `sector_uuid` (string): 
  - `job_uuid` (string): 
  - `user` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### GET /v1/users/{userId}/skills/{skillId}

Retrieves a UserSkill resource.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `userId` (path, string, required): 
- `skillId` (path, string, required): 

**Responses:**

- `200`: UserSkill resource
  - `id` (string): 
  - `created_at` (string): 
  - `updated_at` (string): 
  - `name` (string): 
  - `level` (string): 
  - `keywords` (array): 
  - `sector_uuid` (string): 
  - `job_uuid` (string): 
  - `user` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `404`: Not found
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### PUT /v1/users/{userId}/skills/{skillId}

Replaces a UserSkill resource.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `userId` (path, string, required): 
- `skillId` (path, string, required): 

**Request Body:**

- `name` (string, required): 
- `level` (string, required): 
- `keywords` (array, required): 
- `sector_uuid` (string, required): 
- `job_uuid` (string, required): 

**Responses:**

- `200`: UserSkill resource replaced
  - `id` (string): 
  - `created_at` (string): 
  - `updated_at` (string): 
  - `name` (string): 
  - `level` (string): 
  - `keywords` (array): 
  - `sector_uuid` (string): 
  - `job_uuid` (string): 
  - `user` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `404`: Not found
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### DELETE /v1/users/{userId}/skills/{skillId}

Removes a UserSkill resource.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `userId` (path, string, required): 
- `skillId` (path, string, required): 

**Responses:**

- `204`: UserSkill resource deleted
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `404`: Not found
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### GET /v1/organisations/{organisationId}/users/{userId}/skills

Retrieves the collection of UserSkill resources.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `page` (query, number): The collection page number
- `itemsPerPage` (query, number): The number of items per page
- `name` (query, string): 
- `level` (query, string): 
- `orderBy[name]` (query, string (enum: asc|desc)): 
- `orderBy[level]` (query, string (enum: asc|desc)): 
- `organisationId` (path, string, required): 
- `userId` (path, string, required): 

**Responses:**

- `200`: UserSkill collection
  - `@context` (string): 
  - `@id` (string): 
  - `@type` (string): 
  - `hydra:member` (array): 
  - `hydra:totalItems` (number): 
  - `hydra:view` (string): 
  - `hydra:search` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### POST /v1/organisations/{organisationId}/users/{userId}/skills

Creates a UserSkill resource.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `organisationId` (path, string, required): 
- `userId` (path, string, required): 

**Request Body:**

- `name` (string, required): 
- `level` (string, required): 
- `keywords` (array, required): 
- `sector_uuid` (string, required): 
- `job_uuid` (string, required): 

**Responses:**

- `201`: UserSkill resource created
  - `id` (string): 
  - `created_at` (string): 
  - `updated_at` (string): 
  - `name` (string): 
  - `level` (string): 
  - `keywords` (array): 
  - `sector_uuid` (string): 
  - `job_uuid` (string): 
  - `user` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### GET /v1/organisations/{organisationId}/users/{userId}/skills/{skillId}

Retrieves a UserSkill resource.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `organisationId` (path, string, required): 
- `userId` (path, string, required): 
- `skillId` (path, string, required): 

**Responses:**

- `200`: UserSkill resource
  - `id` (string): 
  - `created_at` (string): 
  - `updated_at` (string): 
  - `name` (string): 
  - `level` (string): 
  - `keywords` (array): 
  - `sector_uuid` (string): 
  - `job_uuid` (string): 
  - `user` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `404`: Not found
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### PUT /v1/organisations/{organisationId}/users/{userId}/skills/{skillId}

Replaces a UserSkill resource.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `organisationId` (path, string, required): 
- `userId` (path, string, required): 
- `skillId` (path, string, required): 

**Request Body:**

- `name` (string, required): 
- `level` (string, required): 
- `keywords` (array, required): 
- `sector_uuid` (string, required): 
- `job_uuid` (string, required): 

**Responses:**

- `200`: UserSkill resource replaced
  - `id` (string): 
  - `created_at` (string): 
  - `updated_at` (string): 
  - `name` (string): 
  - `level` (string): 
  - `keywords` (array): 
  - `sector_uuid` (string): 
  - `job_uuid` (string): 
  - `user` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `404`: Not found
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### DELETE /v1/organisations/{organisationId}/users/{userId}/skills/{skillId}

Removes a UserSkill resource.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `organisationId` (path, string, required): 
- `userId` (path, string, required): 
- `skillId` (path, string, required): 

**Responses:**

- `204`: UserSkill resource deleted
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `404`: Not found
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

## UserTitle

### GET /v1/users/{userId}/userTitles

Retrieves a UserTitle collection.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `userId` (path, string, required): 
- `page` (query, number): The collection page number
- `itemsPerPage` (query, number): The number of items per page
- `orderBy[level]` (query, string (enum: asc|desc)): 

**Responses:**

- `200`: UserTitle resource
  - `@context` (string): 
  - `@id` (string): 
  - `@type` (string): 
  - `hydra:member` (array): 
  - `hydra:totalItems` (number): 
  - `hydra:view` (string): 
  - `hydra:search` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `404`: Not found
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### POST /v1/users/{userId}/userTitles

Creates a UserTitle resource.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `userId` (path, string, required): 

**Request Body:**

- `title_uuid` (string, required): 
- `alias` (string, required): 
- `level` (number, required): 

**Responses:**

- `201`: UserTitle resource created
  - `id` (string): 
  - `created_at` (string): 
  - `updated_at` (string): 
  - `title_uuid` (string): 
  - `user` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### GET /v1/users/{userId}/userTitles/{userTitleId}

Retrieves a UserTitle resource.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `userId` (path, string, required): 
- `userTitleId` (path, string, required): 

**Responses:**

- `200`: UserTitle resource
  - `id` (string): 
  - `created_at` (string): 
  - `updated_at` (string): 
  - `title_uuid` (string): 
  - `user` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `404`: Not found
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### PUT /v1/users/{userId}/userTitles/{userTitleId}

Replaces a UserTitle resource.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `userId` (path, string, required): 
- `userTitleId` (path, string, required): 

**Request Body:**

- `title_uuid` (string, required): 
- `alias` (string, required): 
- `level` (number, required): 

**Responses:**

- `200`: UserTitle resource replaced
  - `id` (string): 
  - `created_at` (string): 
  - `updated_at` (string): 
  - `title_uuid` (string): 
  - `user` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `404`: Not found
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### DELETE /v1/users/{userId}/userTitles/{userTitleId}

Removes a UserTitle resource.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `userId` (path, string, required): 
- `userTitleId` (path, string, required): 

**Responses:**

- `204`: UserTitle resource deleted
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `404`: Not found
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### GET /v1/organisations/{organisationId}/users/{userId}/userTitles/{userTitleId}

Retrieves a UserTitle resource.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `organisationId` (path, string, required): 
- `userId` (path, string, required): 
- `userTitleId` (path, string, required): 

**Responses:**

- `200`: UserTitle resource
  - `id` (string): 
  - `created_at` (string): 
  - `updated_at` (string): 
  - `title_uuid` (string): 
  - `user` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### PUT /v1/organisations/{organisationId}/users/{userId}/userTitles/{userTitleId}

Replaces a UserTitle resource.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `organisationId` (path, string, required): 
- `userId` (path, string, required): 
- `userTitleId` (path, string, required): 

**Request Body:**

- `title_uuid` (string, required): 
- `alias` (string, required): 
- `level` (number, required): 

**Responses:**

- `200`: UserTitle resource replaced
  - `id` (string): 
  - `created_at` (string): 
  - `updated_at` (string): 
  - `title_uuid` (string): 
  - `user` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `404`: Not found
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### DELETE /v1/organisations/{organisationId}/users/{userId}/userTitles/{userTitleId}

Removes a UserTitle resource.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `organisationId` (path, string, required): 
- `userId` (path, string, required): 
- `userTitleId` (path, string, required): 

**Responses:**

- `204`: UserTitle resource deleted
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `404`: Not found
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### GET /v1/organisations/{organisationId}/users/{userId}/userTitles

Retrieves the collection of UserTitle resources.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `organisationId` (path, string, required): 
- `userId` (path, string, required): 
- `page` (query, number): The collection page number
- `itemsPerPage` (query, number): The number of items per page
- `orderBy[level]` (query, string (enum: asc|desc)): 

**Responses:**

- `200`: UserTitle collection
  - `@context` (string): 
  - `@id` (string): 
  - `@type` (string): 
  - `hydra:member` (array): 
  - `hydra:totalItems` (number): 
  - `hydra:view` (string): 
  - `hydra:search` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### POST /v1/organisations/{organisationId}/users/{userId}/userTitles

Creates a UserTitle resource.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `organisationId` (path, string, required): 
- `userId` (path, string, required): 

**Request Body:**

- `title_uuid` (string, required): 
- `alias` (string, required): 
- `level` (number, required): 

**Responses:**

- `201`: UserTitle resource created
  - `id` (string): 
  - `created_at` (string): 
  - `updated_at` (string): 
  - `title_uuid` (string): 
  - `user` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

## UserVolunteer

### GET /v1/users/{userId}/volunteers

Retrieves the collection of UserVolunteer resources.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `page` (query, number): The collection page number
- `itemsPerPage` (query, number): The number of items per page
- `position` (query, string): 
- `orderBy[position]` (query, string (enum: asc|desc)): 
- `userId` (path, string, required): 

**Responses:**

- `200`: UserVolunteer collection
  - `@context` (string): 
  - `@id` (string): 
  - `@type` (string): 
  - `hydra:member` (array): 
  - `hydra:totalItems` (number): 
  - `hydra:view` (string): 
  - `hydra:search` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### POST /v1/users/{userId}/volunteers

Creates a UserVolunteer resource.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `userId` (path, string, required): 

**Request Body:**

- `summary` (string, required): 
- `position` (string, required): 
- `url` (string, required): 
- `startDate` (string, required): 
- `endDate` (string, required): 
- `highlights` (array, required): 
- `organization` (string, required): 
- `sector_uuid` (string, required): 
- `job_uuid` (string, required): 

**Responses:**

- `201`: UserVolunteer resource created
  - `id` (string): 
  - `created_at` (string): 
  - `updated_at` (string): 
  - `summary` (string): 
  - `position` (string): 
  - `url` (string): 
  - `startDate` (string): 
  - `endDate` (string): 
  - `highlights` (array): 
  - `organization` (string): 
  - `sector_uuid` (string): 
  - `job_uuid` (string): 
  - `user` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### GET /v1/users/{userId}/volunteers/{volunteerId}

Retrieves a UserVolunteer resource.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `userId` (path, string, required): 
- `volunteerId` (path, string, required): 

**Responses:**

- `200`: UserVolunteer resource
  - `id` (string): 
  - `created_at` (string): 
  - `updated_at` (string): 
  - `summary` (string): 
  - `position` (string): 
  - `url` (string): 
  - `startDate` (string): 
  - `endDate` (string): 
  - `highlights` (array): 
  - `organization` (string): 
  - `sector_uuid` (string): 
  - `job_uuid` (string): 
  - `user` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `404`: Not found
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### PUT /v1/users/{userId}/volunteers/{volunteerId}

Replaces a UserVolunteer resource.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `userId` (path, string, required): 
- `volunteerId` (path, string, required): 

**Request Body:**

- `summary` (string, required): 
- `position` (string, required): 
- `url` (string, required): 
- `startDate` (string, required): 
- `endDate` (string, required): 
- `highlights` (array, required): 
- `organization` (string, required): 
- `sector_uuid` (string, required): 
- `job_uuid` (string, required): 

**Responses:**

- `200`: UserVolunteer resource replaced
  - `id` (string): 
  - `created_at` (string): 
  - `updated_at` (string): 
  - `summary` (string): 
  - `position` (string): 
  - `url` (string): 
  - `startDate` (string): 
  - `endDate` (string): 
  - `highlights` (array): 
  - `organization` (string): 
  - `sector_uuid` (string): 
  - `job_uuid` (string): 
  - `user` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `404`: Not found
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### DELETE /v1/users/{userId}/volunteers/{volunteerId}

Removes a UserVolunteer resource.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `userId` (path, string, required): 
- `volunteerId` (path, string, required): 

**Responses:**

- `204`: UserVolunteer resource deleted
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `404`: Not found
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### GET /v1/organisations/{organisationId}/users/{userId}/volunteers

Retrieves the collection of UserVolunteer resources.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `page` (query, number): The collection page number
- `itemsPerPage` (query, number): The number of items per page
- `position` (query, string): 
- `orderBy[position]` (query, string (enum: asc|desc)): 
- `organisationId` (path, string, required): 
- `userId` (path, string, required): 

**Responses:**

- `200`: UserVolunteer collection
  - `@context` (string): 
  - `@id` (string): 
  - `@type` (string): 
  - `hydra:member` (array): 
  - `hydra:totalItems` (number): 
  - `hydra:view` (string): 
  - `hydra:search` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### POST /v1/organisations/{organisationId}/users/{userId}/volunteers

Creates a UserVolunteer resource.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `organisationId` (path, string, required): 
- `userId` (path, string, required): 

**Request Body:**

- `summary` (string, required): 
- `position` (string, required): 
- `url` (string, required): 
- `startDate` (string, required): 
- `endDate` (string, required): 
- `highlights` (array, required): 
- `organization` (string, required): 
- `sector_uuid` (string, required): 
- `job_uuid` (string, required): 

**Responses:**

- `201`: UserVolunteer resource created
  - `id` (string): 
  - `created_at` (string): 
  - `updated_at` (string): 
  - `summary` (string): 
  - `position` (string): 
  - `url` (string): 
  - `startDate` (string): 
  - `endDate` (string): 
  - `highlights` (array): 
  - `organization` (string): 
  - `sector_uuid` (string): 
  - `job_uuid` (string): 
  - `user` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### GET /v1/organisations/{organisationId}/users/{userId}/volunteers/{volunteerId}

Retrieves a UserVolunteer resource.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `organisationId` (path, string, required): 
- `userId` (path, string, required): 
- `volunteerId` (path, string, required): 

**Responses:**

- `200`: UserVolunteer resource
  - `id` (string): 
  - `created_at` (string): 
  - `updated_at` (string): 
  - `summary` (string): 
  - `position` (string): 
  - `url` (string): 
  - `startDate` (string): 
  - `endDate` (string): 
  - `highlights` (array): 
  - `organization` (string): 
  - `sector_uuid` (string): 
  - `job_uuid` (string): 
  - `user` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `404`: Not found
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### PUT /v1/organisations/{organisationId}/users/{userId}/volunteers/{volunteerId}

Replaces a UserVolunteer resource.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `organisationId` (path, string, required): 
- `userId` (path, string, required): 
- `volunteerId` (path, string, required): 

**Request Body:**

- `summary` (string, required): 
- `position` (string, required): 
- `url` (string, required): 
- `startDate` (string, required): 
- `endDate` (string, required): 
- `highlights` (array, required): 
- `organization` (string, required): 
- `sector_uuid` (string, required): 
- `job_uuid` (string, required): 

**Responses:**

- `200`: UserVolunteer resource replaced
  - `id` (string): 
  - `created_at` (string): 
  - `updated_at` (string): 
  - `summary` (string): 
  - `position` (string): 
  - `url` (string): 
  - `startDate` (string): 
  - `endDate` (string): 
  - `highlights` (array): 
  - `organization` (string): 
  - `sector_uuid` (string): 
  - `job_uuid` (string): 
  - `user` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `404`: Not found
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### DELETE /v1/organisations/{organisationId}/users/{userId}/volunteers/{volunteerId}

Removes a UserVolunteer resource.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `organisationId` (path, string, required): 
- `userId` (path, string, required): 
- `volunteerId` (path, string, required): 

**Responses:**

- `204`: UserVolunteer resource deleted
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `404`: Not found
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

## UserWork

### GET /v1/users/{userId}/works

Retrieves the collection of UserWork resources.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `page` (query, number): The collection page number
- `itemsPerPage` (query, number): The number of items per page
- `position` (query, string): 
- `orderBy[position]` (query, string (enum: asc|desc)): 
- `userId` (path, string, required): 

**Responses:**

- `200`: UserWork collection
  - `@context` (string): 
  - `@id` (string): 
  - `@type` (string): 
  - `hydra:member` (array): 
  - `hydra:totalItems` (number): 
  - `hydra:view` (string): 
  - `hydra:search` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### POST /v1/users/{userId}/works

Creates a UserWork resource.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `userId` (path, string, required): 

**Request Body:**

- `summary` (string, required): 
- `position` (string, required): 
- `url` (string, required): 
- `startDate` (string, required): 
- `endDate` (string, required): 
- `highlights` (array, required): 
- `name` (string, required): 
- `sector_uuid` (string, required): 
- `job_uuid` (string, required): 

**Responses:**

- `201`: UserWork resource created
  - `id` (string): 
  - `created_at` (string): 
  - `updated_at` (string): 
  - `summary` (string): 
  - `position` (string): 
  - `url` (string): 
  - `startDate` (string): 
  - `endDate` (string): 
  - `highlights` (array): 
  - `name` (string): 
  - `sector_uuid` (string): 
  - `job_uuid` (string): 
  - `user` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### GET /v1/users/{userId}/works/{workId}

Retrieves a UserWork resource.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `userId` (path, string, required): 
- `workId` (path, string, required): 

**Responses:**

- `200`: UserWork resource
  - `id` (string): 
  - `created_at` (string): 
  - `updated_at` (string): 
  - `summary` (string): 
  - `position` (string): 
  - `url` (string): 
  - `startDate` (string): 
  - `endDate` (string): 
  - `highlights` (array): 
  - `name` (string): 
  - `sector_uuid` (string): 
  - `job_uuid` (string): 
  - `user` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `404`: Not found
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### PUT /v1/users/{userId}/works/{workId}

Replaces a UserWork resource.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `userId` (path, string, required): 
- `workId` (path, string, required): 

**Request Body:**

- `summary` (string, required): 
- `position` (string, required): 
- `url` (string, required): 
- `startDate` (string, required): 
- `endDate` (string, required): 
- `highlights` (array, required): 
- `name` (string, required): 
- `sector_uuid` (string, required): 
- `job_uuid` (string, required): 

**Responses:**

- `200`: UserWork resource replaced
  - `id` (string): 
  - `created_at` (string): 
  - `updated_at` (string): 
  - `summary` (string): 
  - `position` (string): 
  - `url` (string): 
  - `startDate` (string): 
  - `endDate` (string): 
  - `highlights` (array): 
  - `name` (string): 
  - `sector_uuid` (string): 
  - `job_uuid` (string): 
  - `user` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `404`: Not found
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### DELETE /v1/users/{userId}/works/{workId}

Removes a UserWork resource.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `userId` (path, string, required): 
- `workId` (path, string, required): 

**Responses:**

- `204`: UserWork resource deleted
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `404`: Not found
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### GET /v1/organisations/{organisationId}/users/{userId}/works

Retrieves the collection of UserWork resources.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `page` (query, number): The collection page number
- `itemsPerPage` (query, number): The number of items per page
- `position` (query, string): 
- `orderBy[position]` (query, string (enum: asc|desc)): 
- `organisationId` (path, string, required): 
- `userId` (path, string, required): 

**Responses:**

- `200`: UserWork collection
  - `@context` (string): 
  - `@id` (string): 
  - `@type` (string): 
  - `hydra:member` (array): 
  - `hydra:totalItems` (number): 
  - `hydra:view` (string): 
  - `hydra:search` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### POST /v1/organisations/{organisationId}/users/{userId}/works

Creates a UserWork resource.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `organisationId` (path, string, required): 
- `userId` (path, string, required): 

**Request Body:**

- `summary` (string, required): 
- `position` (string, required): 
- `url` (string, required): 
- `startDate` (string, required): 
- `endDate` (string, required): 
- `highlights` (array, required): 
- `name` (string, required): 
- `sector_uuid` (string, required): 
- `job_uuid` (string, required): 

**Responses:**

- `201`: UserWork resource created
  - `id` (string): 
  - `created_at` (string): 
  - `updated_at` (string): 
  - `summary` (string): 
  - `position` (string): 
  - `url` (string): 
  - `startDate` (string): 
  - `endDate` (string): 
  - `highlights` (array): 
  - `name` (string): 
  - `sector_uuid` (string): 
  - `job_uuid` (string): 
  - `user` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### GET /v1/organisations/{organisationId}/users/{userId}/works/{workId}

Retrieves a UserWork resource.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `organisationId` (path, string, required): 
- `userId` (path, string, required): 
- `workId` (path, string, required): 

**Responses:**

- `200`: UserWork resource
  - `id` (string): 
  - `created_at` (string): 
  - `updated_at` (string): 
  - `summary` (string): 
  - `position` (string): 
  - `url` (string): 
  - `startDate` (string): 
  - `endDate` (string): 
  - `highlights` (array): 
  - `name` (string): 
  - `sector_uuid` (string): 
  - `job_uuid` (string): 
  - `user` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `404`: Not found
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### PUT /v1/organisations/{organisationId}/users/{userId}/works/{workId}

Replaces a UserWork resource.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `organisationId` (path, string, required): 
- `userId` (path, string, required): 
- `workId` (path, string, required): 

**Request Body:**

- `summary` (string, required): 
- `position` (string, required): 
- `url` (string, required): 
- `startDate` (string, required): 
- `endDate` (string, required): 
- `highlights` (array, required): 
- `name` (string, required): 
- `sector_uuid` (string, required): 
- `job_uuid` (string, required): 

**Responses:**

- `200`: UserWork resource replaced
  - `id` (string): 
  - `created_at` (string): 
  - `updated_at` (string): 
  - `summary` (string): 
  - `position` (string): 
  - `url` (string): 
  - `startDate` (string): 
  - `endDate` (string): 
  - `highlights` (array): 
  - `name` (string): 
  - `sector_uuid` (string): 
  - `job_uuid` (string): 
  - `user` (string): 
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `404`: Not found
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

### DELETE /v1/organisations/{organisationId}/users/{userId}/works/{workId}

Removes a UserWork resource.

**Authentication:** Bearer Token, API Key

**Parameters:**

- `organisationId` (path, string, required): 
- `userId` (path, string, required): 
- `workId` (path, string, required): 

**Responses:**

- `204`: UserWork resource deleted
- `400`: Bad request
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `401`: Unauthorized
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `403`: Forbidden
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error
- `404`: Not found
  - `@context` (string): 
  - `@type` (string): 
  - `hydra:title` (string): The title of the error
  - `hydra:description` (string): The detail of the error
  - `hydra:statusCode` (number): The status code of the error

---

## Schemas

### SkillHitDto

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `uri` | string | Yes | skillberg://skill/a1b2c3... |
| `uuid` | string | Yes |  |
| `name` | string | Yes |  |
| `labels` | string[] | Yes | Skill,Hardskill,Item |
| `score` | number | Yes | Cosine similarity score (0-1) |

### SkillSearchResponse

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `results` | SkillHitDto[] | Yes |  |

### SkillEntityDto

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `uri` | string | Yes |  |
| `uuid` | string | Yes |  |
| `name` | string | Yes |  |
| `labels` | string[] | Yes |  |
| `description` | object | No |  |
| `proficiency_description` | object | No |  |
| `proficiency_level_num` | object | No |  |

### SkillsExtractRequestDto

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `occupation` | string | Yes | Occupation URI or title to extract the skill profile for |

### SkillsRecommendRequestDto

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `skills` | string[] | Yes | Seed skill URIs to expand from |

### CvScoreRequestDto

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `resume` | object | Yes | Enriched CV (json_resume) to score. (Contract pending — see route TODO.) |
| `section_weights` | object | No | Optional per-section weights (basics/work/education/skills…), normalized by Gyre. |

### MatchOccupationRequestDto

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `title` | string | Yes | Job title to match cross-framework |

### EnrichJobOfferRequestDto

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `jsonJob` | object | Yes | Job offer (Skillberg_jobPosting object) to enrich with implicit skills. Proxied to Gyre /bummock/jsonJob/enrich. |

### EnrichCvRequestDto

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `resume` | object | Yes | Treated CV (json_resume object) to enrich with implicit skills. Proxied to Gyre /bummock/jsonResume/enrich. |

### MatchCvsVsJobRequestDto

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `profiles` | object | Yes | Pre-indexed candidate profiles. (Contract pending — see route TODO.) |
| `target_jobs` | object | Yes | Target job(s) with weights. |

### MatchJobsVsCvRequestDto

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `profile` | object | Yes | Single candidate profile. (Contract pending — see route TODO.) |
| `target_jobs` | object | Yes | Pool of target jobs with weights. |

### SkillsGapRequestDto

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `profile` | object | Yes | Candidate profile. |
| `target_occupation` | string | Yes | Target occupation URI |

### WorkforceMapRequestDto

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `architecture` | object | Yes | Bulk occupation architecture to map. |
| `target_framework` | string | Yes | Target framework |

### CareerTransitionsRequestDto

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `from_occupation` | string | Yes | Origin occupation URI |

### AccountCreditsResponse

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `credits_remaining` | number | Yes | Credits left in the current period. |
| `monthly_credits` | number | Yes | Credits granted per period. |
| `credits_used_this_period` | number | Yes | Credits consumed so far this period. |
| `period_start` | string | Yes | Start of the current billing period. |
| `period_end` | string | Yes | End of the current billing period. |
| `overage_price_eur` | number | Yes | Per-credit price charged once in overage (€). |
| `unlimited` | boolean | No | Present (true) only for the master key, which is not metered. Absent for a normal key. |

### CareerEntity

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `id` | string | Yes | 507f1f77bcf86cd799439011 |
| `created_at` | string | Yes | Mon Jun 15 2026 10:27:53 GMT+0200 (Central European Summer Time) |
| `updated_at` | string | Yes | Mon Jun 15 2026 10:27:53 GMT+0200 (Central European Summer Time) |
| `name` | string | Yes |  |
| `description` | object | Yes |  |
| `sector_uuid` | string | Yes |  |
| `job_uuid` | string | Yes |  |
| `organisation` | string | Yes | /organisations/507f1f77bcf86cd799439011 |

### PostCareerDto

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `name` | string | Yes |  |
| `description` | object | Yes |  |
| `sector_uuid` | string | Yes |  |
| `job_uuid` | string | Yes |  |

### PutCareerDto

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `name` | string | Yes |  |
| `description` | object | Yes |  |
| `sector_uuid` | string | Yes |  |
| `job_uuid` | string | Yes |  |

### CareerUserEntity

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `id` | string | Yes | 507f1f77bcf86cd799439011 |
| `created_at` | string | Yes | Mon Jun 15 2026 10:27:53 GMT+0200 (Central European Summer Time) |
| `updated_at` | string | Yes | Mon Jun 15 2026 10:27:53 GMT+0200 (Central European Summer Time) |
| `start_date` | string | Yes |  |
| `end_date` | string | Yes |  |

### PostCareerUserDto

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `user_id` | string | Yes |  |
| `start_date` | string | Yes |  |
| `end_date` | string | Yes |  |

### PutCareerUserDto

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `user_id` | string | Yes |  |
| `start_date` | string | Yes |  |
| `end_date` | string | Yes |  |

### SocialLinksSchema

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `github` | object | Yes |  |
| `gitlab` | object | Yes |  |
| `linkedin` | object | Yes |  |

### MotivationsSchema

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `dev` | string[] | Yes |  |
| `rh` | string[] | Yes |  |
| `of` | string[] | Yes |  |

### HydraRelation

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `@context` | string | Yes |  |
| `@id` | string | Yes |  |
| `@type` | string | Yes |  |
| `hydra:title` | string | Yes |  |
| `hydra:description` | string | Yes |  |
| `hydra:totalItems` | number | Yes |  |

### UserEntity

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `id` | string | Yes | 507f1f77bcf86cd799439011 |
| `created_at` | string | Yes | Mon Jun 15 2026 10:27:53 GMT+0200 (Central European Summer Time) |
| `updated_at` | string | Yes | Mon Jun 15 2026 10:27:53 GMT+0200 (Central European Summer Time) |
| `email` | string | Yes |  |
| `name` | string | Yes |  |
| `surname` | string | Yes |  |
| `username` | string | Yes |  |
| `date_of_birth` | string | Yes |  |
| `social_links` | object | Yes |  |
| `motivations` | object | Yes |  |
| `skillSet` | object | Yes | /skillSets/507f1f77bcf86cd799439011 |
| `evaluations` | object | Yes |  |
| `titles` | object | Yes |  |

### PostUserDto

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `email` | string | Yes |  |
| `name` | string | Yes |  |
| `surname` | string | Yes |  |
| `username` | string | Yes |  |
| `date_of_birth` | string | Yes |  |
| `social_links` | object | Yes |  |
| `motivations` | object | Yes |  |
| `skillSet_id` | string | Yes |  |

### PutUserDto

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `email` | string | Yes |  |
| `name` | string | Yes |  |
| `surname` | string | Yes |  |
| `username` | string | Yes |  |
| `date_of_birth` | string | Yes |  |
| `social_links` | object | Yes |  |
| `motivations` | object | Yes |  |
| `skillSet_id` | string | Yes |  |

### UsersToCompareDto

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `user_id_list` | string[] | Yes |  |

### GyreRecommendedItem

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `UUID` | string | Yes |  |
| `name` | string | Yes |  |
| `labels` | string | Yes |  |
| `finalScore` | number | Yes |  |
| `scoreSkillberg` | object | Yes |  |

### GyreAlternativeItem

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `UUID` | string | Yes |  |
| `name` | string | Yes |  |
| `cosineScores` | string[] | Yes |  |
| `labels` | string[] | Yes |  |
| `finalScore` | number | Yes |  |

### GyrePositionMatch

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `original` | string | Yes |  |
| `recommended` | GyreRecommendedItem[] | Yes |  |
| `alternatives` | GyreAlternativeItem[] | Yes |  |

### GyreSummaryMatch

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `original` | string | Yes |  |
| `recommended` | GyreRecommendedItem[] | Yes |  |
| `alternatives` | GyreAlternativeItem[] | Yes |  |

### GyreHighlightMatch

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `original` | string | Yes |  |
| `recommended` | GyreRecommendedItem[] | Yes |  |
| `alternatives` | GyreAlternativeItem[] | Yes |  |

### GyreWorkMatch

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `position` | object | Yes |  |
| `summary` | object | Yes |  |
| `highlights` | GyreHighlightMatch[] | Yes |  |

### GyreSkillOriginal

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `name` | string | Yes |  |
| `level` | string | Yes |  |
| `keywords` | string[] | Yes |  |

### GyreSkillMatch

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `original` | object | Yes |  |
| `recommended` | GyreRecommendedItem[] | Yes |  |
| `alternatives` | GyreAlternativeItem[] | Yes |  |

### GyreMatchingResponse

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `work` | GyreWorkMatch[] | Yes |  |
| `skills` | GyreSkillMatch[] | Yes |  |

### MatchingScoreResponse

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `@context` | string | Yes |  |
| `@id` | string | Yes |  |
| `@type` | string | Yes |  |
| `job_id` | string | Yes |  |
| `resume` | object | Yes |  |
| `query` | string | Yes |  |
| `skillbergSkills` | string[] | Yes |  |
| `gyre_response` | object | No |  |

### CompletionWeightsDto

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `basics` | number | No |  |
| `work` | number | No |  |
| `education` | number | No |  |
| `skills` | number | No |  |
| `projects` | number | No |  |
| `volunteer` | number | No |  |
| `awards` | number | No |  |
| `publications` | number | No |  |

### CompletionScoreResponse

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `completion_score` | number | Yes |  |
| `section_score` | object | Yes |  |
| `missing_sections` | string[] | Yes |  |
| `comments` | object | Yes |  |
| `ranking` | object | Yes |  |
| `scoring_weights` | object | Yes |  |

### BaseVertexType

| Property | Type | Required | Description |
|----------|------|----------|-------------|

### BaseEdgeType

| Property | Type | Required | Description |
|----------|------|----------|-------------|

### SkillSetEntity

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `id` | string | Yes | 507f1f77bcf86cd799439011 |
| `created_at` | string | Yes | Mon Jun 15 2026 10:27:53 GMT+0200 (Central European Summer Time) |
| `updated_at` | string | Yes | Mon Jun 15 2026 10:27:53 GMT+0200 (Central European Summer Time) |
| `key_skills_list` | BaseVertexType[] | Yes |  |
| `skills_list` | BaseVertexType[] | Yes |  |
| `edges_list` | BaseEdgeType[] | Yes |  |

### BaseVertexDto

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `aws_id` | string | Yes |  |
| `label` | string | Yes |  |
| `name` | string | Yes |  |

### BaseEdgeDto

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `source` | string | Yes |  |
| `target` | string | Yes |  |
| `label` | string | Yes |  |

### PostSkillSetDto

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `key_skills_list` | BaseVertexDto[] | Yes |  |
| `skills_list` | BaseVertexDto[] | Yes |  |
| `edges_list` | BaseEdgeDto[] | Yes |  |

### PutSkillSetDto

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `key_skills_list` | BaseVertexDto[] | Yes |  |
| `skills_list` | BaseVertexDto[] | Yes |  |
| `edges_list` | BaseEdgeDto[] | Yes |  |

### SessionEntity

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `id` | string | Yes | 507f1f77bcf86cd799439011 |
| `created_at` | string | Yes | Mon Jun 15 2026 10:27:53 GMT+0200 (Central European Summer Time) |
| `updated_at` | string | Yes | Mon Jun 15 2026 10:27:53 GMT+0200 (Central European Summer Time) |
| `organisation` | string | Yes | /organisations/507f1f77bcf86cd799439011 |
| `program` | object | Yes | /programs/507f1f77bcf86cd799439011 |
| `name` | string | Yes |  |
| `start_date` | string | Yes |  |
| `end_date` | string | Yes |  |
| `learners` | object | Yes |  |
| `programs` | object | Yes |  |

### PostSessionDto

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `name` | string | Yes |  |
| `start_date` | string | Yes |  |
| `end_date` | string | Yes |  |

### PutSessionDto

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `name` | string | Yes |  |
| `start_date` | string | Yes |  |
| `end_date` | string | Yes |  |

### LoginDto

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `user_id` | string | Yes |  |

### AuthenticationResponse

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `access_token` | string | Yes |  |
| `refresh_token` | string | Yes |  |

### RefreshTokenDto

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `user_id` | string | Yes |  |

### ApiKeyEntity

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `id` | string | Yes | 507f1f77bcf86cd799439011 |
| `created_at` | string | Yes | Mon Jun 15 2026 10:27:53 GMT+0200 (Central European Summer Time) |
| `updated_at` | string | Yes | Mon Jun 15 2026 10:27:53 GMT+0200 (Central European Summer Time) |
| `user_id` | string | Yes | 507f1f77bcf86cd799439011 |
| `organisation_id` | string | Yes | 507f1f77bcf86cd799439011 |
| `name` | string | Yes |  |
| `key` | string | Yes | Plaintext API key. Returned ONCE on the create response; absent on every subsequent read. |
| `key_hash` | string | Yes | SHA-256 hash of the raw key. Internal. |
| `key_prefix` | string | Yes |  |
| `key_last4` | string | Yes |  |
| `expiration_date` | object | Yes |  |
| `permissions` | number | Yes |  |
| `active` | boolean | Yes |  |
| `origin` | enum(api\|mcp) | Yes | Provenance of the key: 'api' (public API) or 'mcp' (Claude MCP connector). |
| `credits_remaining` | number | Yes | Credits left in the current period. |
| `monthly_credits` | number | Yes | Credits granted per period. Seed 10000 = Builder-equivalent. |
| `overage_price_eur` | number | Yes | Per-credit price charged once in overage (€). |
| `period_start` | string | Yes | Start of the current billing period. |
| `period_end` | string | Yes | End of the current billing period. |
| `credits_used_this_period` | number | Yes | Credits consumed so far this period. |

### PostApiKeyDto

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `name` | string | Yes |  |
| `expiration_date` | object | Yes |  |
| `permissions` | number | Yes |  |
| `organisation_id` | string | Yes |  |

### TeamEntity

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `id` | string | Yes | 507f1f77bcf86cd799439011 |
| `created_at` | string | Yes | Mon Jun 15 2026 10:27:53 GMT+0200 (Central European Summer Time) |
| `updated_at` | string | Yes | Mon Jun 15 2026 10:27:53 GMT+0200 (Central European Summer Time) |
| `organisation` | string | Yes | /organisations/507f1f77bcf86cd799439011 |
| `name` | string | Yes |  |
| `description` | string | Yes |  |

### PostTeamDto

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `name` | string | Yes |  |
| `description` | string | Yes |  |

### PutTeamDto

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `name` | string | Yes |  |
| `description` | string | Yes |  |

### PatchTeamDto

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `name` | string | No |  |
| `description` | string | No |  |

### OfferEntity

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `id` | string | Yes | 507f1f77bcf86cd799439011 |
| `created_at` | string | Yes | Mon Jun 15 2026 10:27:53 GMT+0200 (Central European Summer Time) |
| `updated_at` | string | Yes | Mon Jun 15 2026 10:27:53 GMT+0200 (Central European Summer Time) |
| `organisation` | string | Yes | /organisations/507f1f77bcf86cd799439011 |
| `name` | string | Yes |  |
| `skillSet` | object | Yes | /skillSets/507f1f77bcf86cd799439011 |
| `candidates` | object | Yes |  |

### CompatibilityResponse

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `id` | string | Yes | 507f1f77bcf86cd799439011 |
| `compatibilities` | string[] | Yes |  |

### PostOfferDto

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `name` | string | Yes |  |

### PutOfferDto

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `name` | string | Yes |  |

### ObjectId

| Property | Type | Required | Description |
|----------|------|----------|-------------|

### OfferUserEntity

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `id` | string | Yes | 507f1f77bcf86cd799439011 |
| `created_at` | string | Yes | Mon Jun 15 2026 10:27:53 GMT+0200 (Central European Summer Time) |
| `updated_at` | string | Yes | Mon Jun 15 2026 10:27:53 GMT+0200 (Central European Summer Time) |
| `offer` | string | Yes | /offers/507f1f77bcf86cd799439011 |
| `user_id` | object | Yes |  |

### PostOfferUserDto

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `user_id` | string | Yes |  |

### PutOfferUserDto

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `user_id` | string | Yes |  |

### OrganisationEntity

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `id` | string | Yes | 507f1f77bcf86cd799439011 |
| `created_at` | string | Yes | Mon Jun 15 2026 10:27:53 GMT+0200 (Central European Summer Time) |
| `updated_at` | string | Yes | Mon Jun 15 2026 10:27:53 GMT+0200 (Central European Summer Time) |
| `name` | string | Yes |  |
| `location` | string | Yes |  |
| `link` | string | Yes |  |
| `activity_list` | string[] | Yes |  |
| `cap_at_quota` | boolean | Yes | When true, API calls beyond the current period quota are rejected by the API gateway. Default false (overage allowed, billed per credit). |
| `offers` | object | Yes |  |
| `courses` | object | Yes |  |
| `sessions` | object | Yes |  |
| `programs` | object | Yes |  |
| `teams` | object | Yes |  |

### PostOrganisationDto

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `name` | string | Yes |  |
| `location` | string | Yes |  |
| `link` | string | Yes |  |
| `activity_list` | string[] | Yes |  |
| `cap_at_quota` | boolean | Yes | When true, API calls beyond the current period quota are rejected by the API gateway. Default false (overage allowed, billed per credit). |

### PutOrganisationDto

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `name` | string | Yes |  |
| `location` | string | Yes |  |
| `link` | string | Yes |  |
| `activity_list` | string[] | Yes |  |
| `cap_at_quota` | boolean | Yes | When true, API calls beyond the current period quota are rejected by the API gateway. Default false (overage allowed, billed per credit). |

### PatchOrganisationDto

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `name` | string | No |  |
| `location` | string | No |  |
| `link` | string | No |  |
| `activity_list` | string[] | No |  |
| `cap_at_quota` | boolean | No | When true, API calls beyond the current period quota are rejected by the API gateway. Default false (overage allowed, billed per credit). |

### OrganisationPlanEntity

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `id` | string | Yes | 507f1f77bcf86cd799439011 |
| `created_at` | string | Yes | Mon Jun 15 2026 10:27:53 GMT+0200 (Central European Summer Time) |
| `updated_at` | string | Yes | Mon Jun 15 2026 10:27:53 GMT+0200 (Central European Summer Time) |
| `organisation` | string | Yes | /organisations/507f1f77bcf86cd799439011 |
| `plan_id` | object | Yes |  |
| `previous_organisation_plan` | object | Yes | /organisationPlans/507f1f77bcf86cd799439011 |
| `pending_plan_id` | object | Yes | Set by schedule-mollie-switch when a customer queues a plan change. At current_period_end, the next Mollie subscription payment triggers mollie-confirm which supersedes this maillon and creates a new active one. UI uses this to render "switching to X on YYYY-MM-DD" on the current maillon. |
| `billing_cycle` | enum(monthly\|annual) | Yes |  |
| `status` | enum(payment_pending\|active\|past_due\|unpaid\|canceled\|incomplete_expired\|superseded) | Yes |  |
| `current_period_start` | string | Yes |  |
| `current_period_end` | string | Yes |  |
| `started_at` | string | Yes |  |
| `canceled_at` | string | Yes |  |
| `ended_at` | string | Yes | Date à laquelle le maillon a été terminé (superseded ou fin de période après cancel). null = maillon courant. |
| `cancel_at_period_end` | boolean | Yes |  |
| `payment_provider` | enum(paddle\|stripe\|mollie\|manual) | Yes | Payment provider that fulfilled this maillon. Null pour Discovery ou tout maillon gratuit hors PSP. |
| `payment_subscription_id` | string | Yes | Provider-side subscription ID (Paddle/Stripe/Mollie/...). Null pour Discovery ou paiement manuel. |
| `payment_customer_id` | string | Yes | Provider-side customer ID dénormalisé pour le routing webhook. |

### DevCheckoutDto

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `plan_code` | enum(discovery\|builder\|scale\|partner\|omni) | Yes |  |
| `billing_cycle` | enum(monthly\|annual) | No |  |

### DowngradeToFreeDto

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `plan_code` | enum(discovery\|builder\|scale\|partner\|omni) | Yes | Target free plan (price_monthly_eur null or 0). Service rejects with 400 if the plan is paid — keeps the safety promise that no paid plan is ever assigned without going through Mollie. |
| `billing_cycle` | enum(monthly\|annual) | No |  |

### RouteAccessEntity

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `consultation` | enum(none\|limited\|full\|priority) | Yes |  |
| `analyse` | enum(none\|limited\|full\|priority) | Yes |  |
| `intelligence` | enum(none\|limited\|full\|priority) | Yes |  |
| `beta` | enum(none\|limited\|full\|priority) | Yes |  |

### PspPriceIdsEntity

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `paddle_monthly` | string | Yes | Paddle Price ID for the monthly billing cycle. |
| `stripe_monthly` | string | Yes | Stripe price_id for the monthly billing cycle. |
| `mollie_monthly` | string | Yes | Mollie subscription template / price ID for the monthly billing cycle. |

### PlanEntity

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `id` | string | Yes | 507f1f77bcf86cd799439011 |
| `created_at` | string | Yes | Mon Jun 15 2026 10:27:53 GMT+0200 (Central European Summer Time) |
| `updated_at` | string | Yes | Mon Jun 15 2026 10:27:53 GMT+0200 (Central European Summer Time) |
| `code` | enum(discovery\|builder\|scale\|partner\|omni) | Yes |  |
| `name` | string | Yes |  |
| `price_monthly_eur` | number | Yes |  |
| `credits_per_month` | number | Yes |  |
| `overage_price_eur` | number | Yes |  |
| `daily_rate_limit` | number | Yes |  |
| `top_results_limit` | number | Yes |  |
| `engagement_min_months` | number | Yes |  |
| `route_access` | object | Yes |  |
| `features` | string[] | Yes |  |
| `sla_uptime_pct` | number | Yes |  |
| `support_tier` | enum(self_service\|email_48h\|email_24h\|csm_4h) | Yes |  |
| `is_public` | boolean | Yes |  |
| `psp_price_ids` | object | Yes |  |
| `sort_order` | number | Yes |  |

### PublicPlanDto

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `code` | enum(discovery\|builder\|scale\|partner\|omni) | Yes |  |
| `name` | string | Yes |  |
| `price_monthly_eur` | number | Yes |  |
| `credits_per_month` | number | Yes |  |
| `overage_price_eur` | number | Yes |  |
| `daily_rate_limit` | number | Yes |  |
| `top_results_limit` | number | Yes |  |
| `engagement_min_months` | number | Yes |  |
| `features` | string[] | Yes |  |

### InvoiceEntity

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `id` | string | Yes | 507f1f77bcf86cd799439011 |
| `created_at` | string | Yes | Mon Jun 15 2026 10:27:53 GMT+0200 (Central European Summer Time) |
| `updated_at` | string | Yes | Mon Jun 15 2026 10:27:53 GMT+0200 (Central European Summer Time) |
| `organisation_id` | object | Yes |  |
| `organisation` | string | Yes | /organisations/507f1f77bcf86cd799439011 |
| `organisation_plan_id` | object | Yes | OrganisationPlan maillon this invoice covers. Nullable for back-fills. |
| `payment_id` | string | Yes | Mollie payment id that triggered the invoice. Unique — same payment delivered twice via webhook retry creates one invoice. |
| `provider` | enum(pennylane) | Yes |  |
| `status` | enum(pending\|issued\|failed) | Yes |  |
| `provider_invoice_number` | object | Yes | Pennylane's invoice_number (e.g. F-2026-04101020). Null while status=pending or failed. |
| `pdf_url` | object | Yes | Pennylane's hosted PDF URL. Null until the invoice is issued. |
| `total_amount_eur` | string | Yes | Gross amount including VAT, decimal string in EUR (e.g. "490.00"). |
| `vat_amount_eur` | object | Yes | VAT amount, decimal string in EUR. |
| `reason` | object | Yes | Free-form context, e.g. failure reason when status=failed. |

### RoleEntity

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `id` | string | Yes | 507f1f77bcf86cd799439011 |
| `created_at` | string | Yes | Mon Jun 15 2026 10:27:53 GMT+0200 (Central European Summer Time) |
| `updated_at` | string | Yes | Mon Jun 15 2026 10:27:53 GMT+0200 (Central European Summer Time) |
| `name` | string | Yes |  |
| `permissions` | number | Yes |  |
| `rank` | number | Yes |  |

### ProjectEntity

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `id` | string | Yes | 507f1f77bcf86cd799439011 |
| `created_at` | string | Yes | Mon Jun 15 2026 10:27:53 GMT+0200 (Central European Summer Time) |
| `updated_at` | string | Yes | Mon Jun 15 2026 10:27:53 GMT+0200 (Central European Summer Time) |
| `team` | string | Yes | /organisations/507f1f77bcf86cd799439011/teams/507f1f77bcf86cd799439011 |
| `name` | string | Yes |  |
| `description` | string | Yes |  |
| `active` | boolean | Yes |  |
| `start_date` | string | Yes |  |
| `end_date` | string | Yes |  |

### PostProjectDto

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `name` | string | Yes |  |
| `description` | string | Yes |  |
| `active` | boolean | Yes |  |
| `start_date` | string | Yes |  |
| `end_date` | string | Yes |  |

### PutProjectDto

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `name` | string | Yes |  |
| `description` | string | Yes |  |
| `active` | boolean | Yes |  |
| `start_date` | string | Yes |  |
| `end_date` | string | Yes |  |

### Auth0Entity

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `id` | string | Yes | 507f1f77bcf86cd799439011 |
| `created_at` | string | Yes | Mon Jun 15 2026 10:27:53 GMT+0200 (Central European Summer Time) |
| `updated_at` | string | Yes | Mon Jun 15 2026 10:27:53 GMT+0200 (Central European Summer Time) |
| `auth0_id` | string | Yes |  |
| `token` | string | Yes |  |
| `user` | string | Yes | /users/507f1f77bcf86cd799439011 |
| `data_created_at` | string | Yes |  |
| `connection_logs` | string[] | Yes |  |
| `access_token` | string | Yes |  |

### ProgramEntity

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `id` | string | Yes | 507f1f77bcf86cd799439011 |
| `created_at` | string | Yes | Mon Jun 15 2026 10:27:53 GMT+0200 (Central European Summer Time) |
| `updated_at` | string | Yes | Mon Jun 15 2026 10:27:53 GMT+0200 (Central European Summer Time) |
| `organisation` | string | Yes | /organisations/507f1f77bcf86cd799439011 |
| `name` | string | Yes |  |
| `courses` | object | Yes |  |

### PostProgramDto

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `name` | string | Yes |  |

### PutProgramDto

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `name` | string | Yes |  |

### SkillEvaluation

| Property | Type | Required | Description |
|----------|------|----------|-------------|

### EvaluationEntity

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `id` | string | Yes | 507f1f77bcf86cd799439011 |
| `created_at` | string | Yes | Mon Jun 15 2026 10:27:53 GMT+0200 (Central European Summer Time) |
| `updated_at` | string | Yes | Mon Jun 15 2026 10:27:53 GMT+0200 (Central European Summer Time) |
| `date` | string | Yes |  |
| `type` | enum(Bilan annuel\|Bilan trimestriel\|Évaluation de compétence\|Debrief de projet) | Yes |  |
| `status` | enum(draft\|done) | Yes |  |
| `issuer` | string | Yes | /users/507f1f77bcf86cd799439011 |
| `user` | string | Yes | /users/507f1f77bcf86cd799439011 |
| `skills` | SkillEvaluation[] | Yes |  |
| `comment` | object | Yes |  |

### PostEvaluationDto

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `date` | string | No | Evaluation's date |
| `type` | enum(Bilan annuel\|Bilan trimestriel\|Évaluation de compétence\|Debrief de projet) | Yes | Evaluation's type |
| `issuer_id` | string | Yes | Evaluation's issuer |

### SkillEvaluationDto

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `userTitle_id` | string | Yes | SkillbergSkill's id to be evaluated |
| `level` | number | Yes | User's current level regarding this SkillbergSkill |
| `target_level` | object | No | User's target level regarding this SkillbergSkill |
| `target_date` | object | No | User's target date to reach the target_level |
| `comment` | string | No | Comment regarding this SkillbergSkill's evaluation |

### PutEvaluationDto

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `date` | string | No | Evaluation's date |
| `type` | enum(Bilan annuel\|Bilan trimestriel\|Évaluation de compétence\|Debrief de projet) | Yes | Evaluation's type |
| `issuer_id` | string | Yes | Evaluation's issuer |
| `status` | enum(draft\|done) | Yes | Evaluation's status |
| `skills` | SkillEvaluationDto[] | Yes | SkillbergSkills' array |
| `comment` | object | No | Comment regarding the evaluation |

### CourseEntity

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `id` | string | Yes | 507f1f77bcf86cd799439011 |
| `created_at` | string | Yes | Mon Jun 15 2026 10:27:53 GMT+0200 (Central European Summer Time) |
| `updated_at` | string | Yes | Mon Jun 15 2026 10:27:53 GMT+0200 (Central European Summer Time) |
| `organisation_id` | object | Yes |  |
| `name` | string | Yes |  |
| `program_id` | object | No |  |
| `skillSet` | object | Yes | /courses/507f1f77bcf86cd799439011/skillSets/507f1f77bcf86cd799439011 |

### PostCourseDto

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `name` | string | Yes |  |
| `program_id` | object | No |  |

### PutCourseDto

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `name` | string | Yes |  |
| `program_id` | object | No |  |

### TreatedDocumentEntity

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `id` | string | Yes | 507f1f77bcf86cd799439011 |
| `created_at` | string | Yes | Mon Jun 15 2026 10:27:53 GMT+0200 (Central European Summer Time) |
| `updated_at` | string | Yes | Mon Jun 15 2026 10:27:53 GMT+0200 (Central European Summer Time) |
| `rawDocument` | string | Yes | /rawDocuments/507f1f77bcf86cd799439011 |
| `user` | string | Yes | /users/507f1f77bcf86cd799439011 |

### PostUserLocationDto

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `address` | string | Yes |  |
| `postalCode` | string | Yes |  |
| `city` | string | Yes |  |
| `countryCode` | string | Yes |  |
| `region` | string | Yes |  |

### PostUserProfileDto

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `network` | string | Yes |  |
| `username` | string | Yes |  |
| `url` | string | Yes |  |

### PostUserBasicsDto

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `name` | string | Yes |  |
| `label` | string | Yes |  |
| `image` | string | Yes |  |
| `email` | string | Yes |  |
| `phone` | string | Yes |  |
| `url` | string | Yes |  |
| `summary` | string | Yes |  |
| `location` | object | Yes |  |
| `profiles` | PostUserProfileDto[] | Yes |  |

### PostTreatedWorkDto

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `summary` | string | Yes |  |
| `position` | string | Yes |  |
| `url` | string | Yes |  |
| `startDate` | string | Yes |  |
| `endDate` | string | Yes |  |
| `highlights` | string[] | Yes |  |
| `name` | string | Yes |  |

### PostTreatedVolunteerDto

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `summary` | string | Yes |  |
| `position` | string | Yes |  |
| `url` | string | Yes |  |
| `startDate` | string | Yes |  |
| `endDate` | string | Yes |  |
| `highlights` | string[] | Yes |  |
| `organization` | string | Yes |  |

### PostTreatedEducationDto

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `institution` | string | Yes |  |
| `url` | string | Yes |  |
| `area` | string | Yes |  |
| `studyType` | string | Yes |  |
| `startDate` | string | Yes |  |
| `endDate` | string | Yes |  |
| `score` | string | Yes |  |
| `courses` | string[] | Yes |  |

### PostUserAwardDto

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `title` | string | Yes |  |
| `date` | string | Yes |  |
| `awarder` | string | Yes |  |
| `summary` | string | Yes |  |

### PostUserCertificateDto

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `name` | string | Yes |  |
| `date` | string | Yes |  |
| `url` | string | Yes |  |
| `issuer` | string | Yes |  |

### PostUserPublicationDto

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `name` | string | Yes |  |
| `publisher` | string | Yes |  |
| `releaseDate` | string | Yes |  |
| `url` | string | Yes |  |
| `summary` | string | Yes |  |

### PostTreatedSkillDto

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `name` | string | Yes |  |
| `level` | string | Yes |  |
| `keywords` | string[] | Yes |  |

### PostUserLanguageDto

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `language` | string | Yes |  |
| `fluency` | string | Yes |  |

### PostTreatedInterestDto

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `name` | string | Yes |  |
| `keywords` | string[] | Yes |  |

### PostUserReferenceDto

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `name` | string | Yes |  |
| `reference` | string | Yes |  |

### PostTreatedProjectDto

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `name` | string | Yes |  |
| `description` | string | Yes |  |
| `highlights` | string[] | Yes |  |
| `keywords` | string[] | Yes |  |
| `startDate` | string | Yes |  |
| `endDate` | string | Yes |  |
| `url` | string | Yes |  |
| `roles` | string[] | Yes |  |
| `entity` | string | Yes |  |
| `type` | string | Yes |  |

### PostTreatedJsonResumeDto

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `basics` | object | Yes |  |
| `work` | PostTreatedWorkDto[] | Yes |  |
| `volunteer` | PostTreatedVolunteerDto[] | Yes |  |
| `education` | PostTreatedEducationDto[] | Yes |  |
| `awards` | PostUserAwardDto[] | Yes |  |
| `certificates` | PostUserCertificateDto[] | Yes |  |
| `publications` | PostUserPublicationDto[] | Yes |  |
| `skills` | PostTreatedSkillDto[] | Yes |  |
| `languages` | PostUserLanguageDto[] | Yes |  |
| `interests` | PostTreatedInterestDto[] | Yes |  |
| `references` | PostUserReferenceDto[] | Yes |  |
| `projects` | PostTreatedProjectDto[] | Yes |  |

### PostCorrectedTreatedDocumentDto

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `json_resume` | object | Yes |  |

### CorrectedTreatedDocumentEntity

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `id` | string | Yes | 507f1f77bcf86cd799439011 |
| `created_at` | string | Yes | Mon Jun 15 2026 10:27:53 GMT+0200 (Central European Summer Time) |
| `updated_at` | string | Yes | Mon Jun 15 2026 10:27:53 GMT+0200 (Central European Summer Time) |
| `treatedDocument` | string | Yes | /treatedDocuments/507f1f77bcf86cd799439011 |

### PutCorrectedTreatedDocumentDto

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `json_resume` | object | Yes |  |

### EnrichedDocumentEntity

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `id` | string | Yes | 507f1f77bcf86cd799439011 |
| `created_at` | string | Yes | Mon Jun 15 2026 10:27:53 GMT+0200 (Central European Summer Time) |
| `updated_at` | string | Yes | Mon Jun 15 2026 10:27:53 GMT+0200 (Central European Summer Time) |
| `treatedDocument` | string | Yes | /treatedDocuments/507f1f77bcf86cd799439011 |

### PostUserWorkDto

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `summary` | string | Yes |  |
| `position` | string | Yes |  |
| `url` | string | Yes |  |
| `startDate` | string | Yes |  |
| `endDate` | string | Yes |  |
| `highlights` | string[] | Yes |  |
| `name` | string | Yes |  |
| `sector_uuid` | string | Yes |  |
| `job_uuid` | string | Yes |  |

### PropertyUsedDto

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `fieldsUsed` | string[] | Yes |  |
| `recommendedAttributesUsed` | string[] | Yes |  |
| `priority` | number | Yes |  |

### SectorTitleNodeContextDto

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `yearsExperience` | number | Yes |  |
| `sectors` | object | Yes |  |

### SectorRecommendationDto

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `cosineScore` | number | Yes |  |
| `nodeUuid` | string | Yes |  |
| `propertyUsed` | object | Yes |  |
| `context` | object | Yes |  |

### SectorRefDto

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `UUID` | string | Yes |  |
| `name` | string | Yes |  |

### JobNodeContextDto

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `yearsExperience` | number | Yes |  |
| `sectors` | SectorRefDto[] | Yes |  |

### JobRecommendationDto

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `cosineScore` | number | Yes |  |
| `nodeUuid` | string | Yes |  |
| `propertyUsed` | object | Yes |  |
| `context` | object | Yes |  |

### TitleRecommendationDto

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `cosineScore` | number | Yes |  |
| `nodeUuid` | string | Yes |  |
| `propertyUsed` | object | Yes |  |
| `context` | object | Yes |  |

### EnrichedWorkDto

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `original` | object | Yes |  |
| `recommendedSectors` | SectorRecommendationDto[] | Yes |  |
| `recommendedJobs` | JobRecommendationDto[] | Yes |  |
| `recommendedTitles` | TitleRecommendationDto[] | Yes |  |

### PostUserVolunteerDto

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `summary` | string | Yes |  |
| `position` | string | Yes |  |
| `url` | string | Yes |  |
| `startDate` | string | Yes |  |
| `endDate` | string | Yes |  |
| `highlights` | string[] | Yes |  |
| `organization` | string | Yes |  |
| `sector_uuid` | string | Yes |  |
| `job_uuid` | string | Yes |  |

### EnrichedVolunteerDto

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `original` | object | Yes |  |
| `recommendedSectors` | SectorRecommendationDto[] | Yes |  |
| `recommendedJobs` | JobRecommendationDto[] | Yes |  |
| `recommendedTitles` | TitleRecommendationDto[] | Yes |  |

### PostUserEducationDto

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `institution` | string | Yes |  |
| `url` | string | Yes |  |
| `area` | string | Yes |  |
| `studyType` | string | Yes |  |
| `startDate` | string | Yes |  |
| `endDate` | string | Yes |  |
| `score` | string | Yes |  |
| `courses` | string[] | Yes |  |
| `sector_uuid` | string | Yes |  |
| `job_uuid` | string | Yes |  |

### EnrichedEducationDto

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `original` | object | Yes |  |
| `recommendedSectors` | SectorRecommendationDto[] | Yes |  |
| `recommendedJobs` | JobRecommendationDto[] | Yes |  |
| `recommendedTitles` | TitleRecommendationDto[] | Yes |  |

### PostUserSkillDto

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `name` | string | Yes |  |
| `level` | string | Yes |  |
| `keywords` | string[] | Yes |  |
| `sector_uuid` | string | Yes |  |
| `job_uuid` | string | Yes |  |

### EnrichedSkillDto

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `original` | object | Yes |  |
| `recommendedSectors` | SectorRecommendationDto[] | Yes |  |
| `recommendedJobs` | JobRecommendationDto[] | Yes |  |
| `recommendedTitles` | TitleRecommendationDto[] | Yes |  |

### PostUserInterestDto

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `name` | string | Yes |  |
| `keywords` | string[] | Yes |  |
| `sector_uuid` | string | Yes |  |
| `job_uuid` | string | Yes |  |

### EnrichedInterestDto

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `original` | object | Yes |  |
| `recommendedSectors` | SectorRecommendationDto[] | Yes |  |
| `recommendedJobs` | JobRecommendationDto[] | Yes |  |
| `recommendedTitles` | TitleRecommendationDto[] | Yes |  |

### PostUserProjectDto

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `name` | string | Yes |  |
| `description` | string | Yes |  |
| `highlights` | string[] | Yes |  |
| `keywords` | string[] | Yes |  |
| `startDate` | string | Yes |  |
| `endDate` | string | Yes |  |
| `url` | string | Yes |  |
| `roles` | string[] | Yes |  |
| `entity` | string | Yes |  |
| `type` | string | Yes |  |
| `sector_uuid` | string | Yes |  |
| `job_uuid` | string | Yes |  |

### EnrichedProjectDto

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `original` | object | Yes |  |
| `recommendedSectors` | SectorRecommendationDto[] | Yes |  |
| `recommendedJobs` | JobRecommendationDto[] | Yes |  |
| `recommendedTitles` | TitleRecommendationDto[] | Yes |  |

### EnrichedJsonResumeDto

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `basics` | object | Yes |  |
| `work` | EnrichedWorkDto[] | Yes |  |
| `volunteer` | EnrichedVolunteerDto[] | Yes |  |
| `education` | EnrichedEducationDto[] | Yes |  |
| `certificates` | PostUserCertificateDto[] | Yes |  |
| `publications` | PostUserPublicationDto[] | Yes |  |
| `skills` | EnrichedSkillDto[] | Yes |  |
| `languages` | PostUserLanguageDto[] | Yes |  |
| `interests` | EnrichedInterestDto[] | Yes |  |
| `projects` | EnrichedProjectDto[] | Yes |  |
| `references` | PostUserReferenceDto[] | Yes |  |
| `awards` | PostUserAwardDto[] | Yes |  |

### SectorNodeDto

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `UUID` | string | Yes |  |
| `labels` | string[] | Yes |  |
| `name` | string | Yes |  |

### JobNodeDto

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `UUID` | string | Yes |  |
| `labels` | string[] | Yes |  |
| `name` | string | Yes |  |
| `description` | string | Yes |  |

### TitleNodeDto

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `UUID` | string | Yes |  |
| `labels` | string[] | Yes |  |
| `name` | string | Yes |  |
| `description` | string | Yes |  |
| `proficiency_description` | string | Yes |  |
| `proficiency_level_num` | number | Yes |  |

### NodesDto

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `sector` | SectorNodeDto[] | Yes |  |
| `job` | JobNodeDto[] | Yes |  |
| `title` | TitleNodeDto[] | Yes |  |

### PostCorrectedEnrichedDocumentDto

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `json_resume` | object | Yes |  |
| `nodes` | object | Yes |  |

### CorrectedEnrichedDocumentEntity

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `id` | string | Yes | 507f1f77bcf86cd799439011 |
| `created_at` | string | Yes | Mon Jun 15 2026 10:27:53 GMT+0200 (Central European Summer Time) |
| `updated_at` | string | Yes | Mon Jun 15 2026 10:27:53 GMT+0200 (Central European Summer Time) |
| `enrichedDocument` | string | Yes | /enrichedDocuments/507f1f77bcf86cd799439011 |

### PutCorrectedEnrichedDocumentDto

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `json_resume` | object | Yes |  |
| `nodes` | object | Yes |  |

### MissionEntity

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `id` | string | Yes | 507f1f77bcf86cd799439011 |
| `created_at` | string | Yes | Mon Jun 15 2026 10:27:53 GMT+0200 (Central European Summer Time) |
| `updated_at` | string | Yes | Mon Jun 15 2026 10:27:53 GMT+0200 (Central European Summer Time) |
| `project` | string | Yes | /organisations/507f1f77bcf86cd799439011/teams/507f1f77bcf86cd799439011/projects/507f1f77bcf86cd799439011 |
| `name` | string | Yes |  |
| `description` | string | Yes |  |
| `start_date` | string | Yes |  |
| `end_date` | string | Yes |  |
| `priority` | enum(low\|medium\|high) | Yes |  |
| `size` | enum(small\|medium\|large) | Yes |  |

### PostMissionDto

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `name` | string | Yes |  |
| `description` | string | Yes |  |
| `start_date` | string | Yes |  |
| `end_date` | string | Yes |  |
| `priority` | enum(low\|medium\|high) | Yes |  |
| `size` | enum(small\|medium\|large) | Yes |  |

### PutMissionDto

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `name` | string | Yes |  |
| `description` | string | Yes |  |
| `start_date` | string | Yes |  |
| `end_date` | string | Yes |  |
| `priority` | enum(low\|medium\|high) | Yes |  |
| `size` | enum(small\|medium\|large) | Yes |  |

### UserWorkEntity

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `id` | string | Yes | 507f1f77bcf86cd799439011 |
| `created_at` | string | Yes | Mon Jun 15 2026 10:27:53 GMT+0200 (Central European Summer Time) |
| `updated_at` | string | Yes | Mon Jun 15 2026 10:27:53 GMT+0200 (Central European Summer Time) |
| `summary` | string | Yes |  |
| `position` | string | Yes |  |
| `url` | string | Yes |  |
| `startDate` | string | Yes |  |
| `endDate` | string | Yes |  |
| `highlights` | string[] | Yes |  |
| `name` | string | Yes |  |
| `sector_uuid` | string | Yes |  |
| `job_uuid` | string | Yes |  |
| `user` | string | Yes | /users/507f1f77bcf86cd799439011 |

### PutUserWorkDto

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `summary` | string | Yes |  |
| `position` | string | Yes |  |
| `url` | string | Yes |  |
| `startDate` | string | Yes |  |
| `endDate` | string | Yes |  |
| `highlights` | string[] | Yes |  |
| `name` | string | Yes |  |
| `sector_uuid` | string | Yes |  |
| `job_uuid` | string | Yes |  |

### UserProjectEntity

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `id` | string | Yes | 507f1f77bcf86cd799439011 |
| `created_at` | string | Yes | Mon Jun 15 2026 10:27:53 GMT+0200 (Central European Summer Time) |
| `updated_at` | string | Yes | Mon Jun 15 2026 10:27:53 GMT+0200 (Central European Summer Time) |
| `name` | string | Yes |  |
| `description` | string | Yes |  |
| `highlights` | string[] | Yes |  |
| `keywords` | string[] | Yes |  |
| `startDate` | string | Yes |  |
| `endDate` | string | Yes |  |
| `url` | string | Yes |  |
| `roles` | string[] | Yes |  |
| `entity` | string | Yes |  |
| `type` | string | Yes |  |
| `sector_uuid` | string | Yes |  |
| `job_uuid` | string | Yes |  |
| `user` | string | Yes | /users/507f1f77bcf86cd799439011 |

### PutUserProjectDto

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `name` | string | Yes |  |
| `description` | string | Yes |  |
| `highlights` | string[] | Yes |  |
| `keywords` | string[] | Yes |  |
| `startDate` | string | Yes |  |
| `endDate` | string | Yes |  |
| `url` | string | Yes |  |
| `roles` | string[] | Yes |  |
| `entity` | string | Yes |  |
| `type` | string | Yes |  |
| `sector_uuid` | string | Yes |  |
| `job_uuid` | string | Yes |  |

### UserVolunteerEntity

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `id` | string | Yes | 507f1f77bcf86cd799439011 |
| `created_at` | string | Yes | Mon Jun 15 2026 10:27:53 GMT+0200 (Central European Summer Time) |
| `updated_at` | string | Yes | Mon Jun 15 2026 10:27:53 GMT+0200 (Central European Summer Time) |
| `summary` | string | Yes |  |
| `position` | string | Yes |  |
| `url` | string | Yes |  |
| `startDate` | string | Yes |  |
| `endDate` | string | Yes |  |
| `highlights` | string[] | Yes |  |
| `organization` | string | Yes |  |
| `sector_uuid` | string | Yes |  |
| `job_uuid` | string | Yes |  |
| `user` | string | Yes | /users/507f1f77bcf86cd799439011 |

### PutUserVolunteerDto

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `summary` | string | Yes |  |
| `position` | string | Yes |  |
| `url` | string | Yes |  |
| `startDate` | string | Yes |  |
| `endDate` | string | Yes |  |
| `highlights` | string[] | Yes |  |
| `organization` | string | Yes |  |
| `sector_uuid` | string | Yes |  |
| `job_uuid` | string | Yes |  |

### UserAwardEntity

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `id` | string | Yes | 507f1f77bcf86cd799439011 |
| `created_at` | string | Yes | Mon Jun 15 2026 10:27:53 GMT+0200 (Central European Summer Time) |
| `updated_at` | string | Yes | Mon Jun 15 2026 10:27:53 GMT+0200 (Central European Summer Time) |
| `title` | string | Yes |  |
| `date` | string | Yes |  |
| `awarder` | string | Yes |  |
| `summary` | string | Yes |  |
| `user` | string | Yes | /users/507f1f77bcf86cd799439011 |

### PutUserAwardDto

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `title` | string | Yes |  |
| `date` | string | Yes |  |
| `awarder` | string | Yes |  |
| `summary` | string | Yes |  |

### UserSkillEntity

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `id` | string | Yes | 507f1f77bcf86cd799439011 |
| `created_at` | string | Yes | Mon Jun 15 2026 10:27:53 GMT+0200 (Central European Summer Time) |
| `updated_at` | string | Yes | Mon Jun 15 2026 10:27:53 GMT+0200 (Central European Summer Time) |
| `name` | string | Yes |  |
| `level` | string | Yes |  |
| `keywords` | string[] | Yes |  |
| `sector_uuid` | string | Yes |  |
| `job_uuid` | string | Yes |  |
| `user` | string | Yes | /users/507f1f77bcf86cd799439011 |

### PutUserSkillDto

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `name` | string | Yes |  |
| `level` | string | Yes |  |
| `keywords` | string[] | Yes |  |
| `sector_uuid` | string | Yes |  |
| `job_uuid` | string | Yes |  |

### UserInterestEntity

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `id` | string | Yes | 507f1f77bcf86cd799439011 |
| `created_at` | string | Yes | Mon Jun 15 2026 10:27:53 GMT+0200 (Central European Summer Time) |
| `updated_at` | string | Yes | Mon Jun 15 2026 10:27:53 GMT+0200 (Central European Summer Time) |
| `name` | string | Yes |  |
| `keywords` | string[] | Yes |  |
| `sector_uuid` | string | Yes |  |
| `job_uuid` | string | Yes |  |
| `user` | string | Yes | /users/507f1f77bcf86cd799439011 |

### PutUserInterestDto

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `name` | string | Yes |  |
| `keywords` | string[] | Yes |  |
| `sector_uuid` | string | Yes |  |
| `job_uuid` | string | Yes |  |

### UserLanguageEntity

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `id` | string | Yes | 507f1f77bcf86cd799439011 |
| `created_at` | string | Yes | Mon Jun 15 2026 10:27:53 GMT+0200 (Central European Summer Time) |
| `updated_at` | string | Yes | Mon Jun 15 2026 10:27:53 GMT+0200 (Central European Summer Time) |
| `language` | string | Yes |  |
| `fluency` | string | Yes |  |
| `user` | string | Yes | /users/507f1f77bcf86cd799439011 |

### PutUserLanguageDto

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `language` | string | Yes |  |
| `fluency` | string | Yes |  |

### UserEducationEntity

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `id` | string | Yes | 507f1f77bcf86cd799439011 |
| `created_at` | string | Yes | Mon Jun 15 2026 10:27:53 GMT+0200 (Central European Summer Time) |
| `updated_at` | string | Yes | Mon Jun 15 2026 10:27:53 GMT+0200 (Central European Summer Time) |
| `institution` | string | Yes |  |
| `url` | string | Yes |  |
| `area` | string | Yes |  |
| `studyType` | string | Yes |  |
| `startDate` | string | Yes |  |
| `endDate` | string | Yes |  |
| `score` | string | Yes |  |
| `courses` | string[] | Yes |  |
| `sector_uuid` | string | Yes |  |
| `job_uuid` | string | Yes |  |
| `user` | string | Yes | /users/507f1f77bcf86cd799439011 |

### PutUserEducationDto

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `institution` | string | Yes |  |
| `url` | string | Yes |  |
| `area` | string | Yes |  |
| `studyType` | string | Yes |  |
| `startDate` | string | Yes |  |
| `endDate` | string | Yes |  |
| `score` | string | Yes |  |
| `courses` | string[] | Yes |  |
| `sector_uuid` | string | Yes |  |
| `job_uuid` | string | Yes |  |

### UserReferenceEntity

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `id` | string | Yes | 507f1f77bcf86cd799439011 |
| `created_at` | string | Yes | Mon Jun 15 2026 10:27:53 GMT+0200 (Central European Summer Time) |
| `updated_at` | string | Yes | Mon Jun 15 2026 10:27:53 GMT+0200 (Central European Summer Time) |
| `name` | string | Yes |  |
| `reference` | string | Yes |  |
| `user` | string | Yes | /users/507f1f77bcf86cd799439011 |

### PutUserReferenceDto

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `name` | string | Yes |  |
| `reference` | string | Yes |  |

### UserCertificateEntity

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `id` | string | Yes | 507f1f77bcf86cd799439011 |
| `created_at` | string | Yes | Mon Jun 15 2026 10:27:53 GMT+0200 (Central European Summer Time) |
| `updated_at` | string | Yes | Mon Jun 15 2026 10:27:53 GMT+0200 (Central European Summer Time) |
| `name` | string | Yes |  |
| `date` | string | Yes |  |
| `url` | string | Yes |  |
| `issuer` | string | Yes |  |
| `user` | string | Yes | /users/507f1f77bcf86cd799439011 |

### PutUserCertificateDto

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `name` | string | Yes |  |
| `date` | string | Yes |  |
| `url` | string | Yes |  |
| `issuer` | string | Yes |  |

### UserPublicationEntity

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `id` | string | Yes | 507f1f77bcf86cd799439011 |
| `created_at` | string | Yes | Mon Jun 15 2026 10:27:53 GMT+0200 (Central European Summer Time) |
| `updated_at` | string | Yes | Mon Jun 15 2026 10:27:53 GMT+0200 (Central European Summer Time) |
| `name` | string | Yes |  |
| `publisher` | string | Yes |  |
| `releaseDate` | string | Yes |  |
| `url` | string | Yes |  |
| `summary` | string | Yes |  |
| `user` | string | Yes | /users/507f1f77bcf86cd799439011 |

### PutUserPublicationDto

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `name` | string | Yes |  |
| `publisher` | string | Yes |  |
| `releaseDate` | string | Yes |  |
| `url` | string | Yes |  |
| `summary` | string | Yes |  |

### UserTitleEntity

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `id` | string | Yes | 507f1f77bcf86cd799439011 |
| `created_at` | string | Yes | Mon Jun 15 2026 10:27:53 GMT+0200 (Central European Summer Time) |
| `updated_at` | string | Yes | Mon Jun 15 2026 10:27:53 GMT+0200 (Central European Summer Time) |
| `title_uuid` | string | Yes | /skillbergAi/titles/28cb3ab4-3781-4061-9bae-2ba2c34bad6d |
| `user` | string | Yes | /users/507f1f77bcf86cd799439011 |

### PostUserTitleDto

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `title_uuid` | string | Yes |  |
| `alias` | string | Yes |  |
| `level` | number | Yes |  |

### PutUserTitleDto

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `title_uuid` | string | Yes |  |
| `alias` | string | Yes |  |
| `level` | number | Yes |  |

### UsageSummaryDto

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `from` | string | Yes | Window start (ISO-8601). |
| `to` | string | Yes | Window end (ISO-8601, exclusive). |
| `total_calls` | number | Yes | Total API calls in the window. |
| `total_credits` | number | Yes | Total credits consumed in the window. |
| `avg_latency_ms` | number | Yes | Mean duration in milliseconds across successful calls only (status < 400). 0 if no successful calls. |
| `error_rate` | number | Yes | Fraction of calls that returned a 4xx/5xx (0..1). |

### UsageDailyEntryDto

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `date` | string | Yes | Day bucket (ISO date YYYY-MM-DD). |
| `calls` | number | Yes | Calls for the day. |
| `credits` | number | Yes | Credits consumed for the day. |

### UsageTopRouteDto

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `path` | string | Yes | Canonical route path (without query string). |
| `method` | string | Yes | HTTP method. |
| `calls` | number | Yes | Calls for this route in the window. |
| `credits` | number | Yes | Credits consumed by this route in the window. |

### UsageByKeyEntryDto

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `apiKey_id` | string | Yes | ApiKey _id. |
| `name` | string | Yes | Human-readable name set by the org admin. |
| `origin` | enum(api\|mcp) | Yes | Provenance of the key: 'api' (public API) or 'mcp' (Claude MCP connector). |
| `calls` | number | Yes | Calls for this key in the window. |
| `credits` | number | Yes | Credits consumed by this key in the window. |

### UsageByFamilyEntryDto

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `family` | string | Yes | Route family (consultation \| analyse \| intelligence). |
| `calls` | number | Yes | Calls for this family in the window. |
| `credits` | number | Yes | Credits consumed by this family in the window. |

### SonarUserEntity

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `id` | string | Yes | 507f1f77bcf86cd799439011 |
| `created_at` | string | Yes | Mon Jun 15 2026 10:27:53 GMT+0200 (Central European Summer Time) |
| `updated_at` | string | Yes | Mon Jun 15 2026 10:27:53 GMT+0200 (Central European Summer Time) |
| `user` | string | Yes | /users/507f1f77bcf86cd799439011 |
| `onboarded_at` | string | Yes |  |
| `role` | string | Yes |  |

### PatchSonarUserDto

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `onboarded_at` | string | No |  |
| `role` | string | No |  |

### BillingAddressEntity

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `line1` | string | Yes |  |
| `line2` | string | Yes |  |
| `city` | string | Yes |  |
| `postal_code` | string | Yes |  |
| `country` | string | Yes | ISO 3166-1 alpha-2 country code (e.g. FR, BE, DE) |
| `vat_number` | string | Yes |  |

### PaymentOrganisationEntity

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `id` | string | Yes | 507f1f77bcf86cd799439011 |
| `created_at` | string | Yes | Mon Jun 15 2026 10:27:53 GMT+0200 (Central European Summer Time) |
| `updated_at` | string | Yes | Mon Jun 15 2026 10:27:53 GMT+0200 (Central European Summer Time) |
| `organisation_id` | object | Yes |  |
| `organisation` | string | Yes | /organisations/507f1f77bcf86cd799439011 |
| `legal_name` | string | Yes | Legal/registered company name used on invoices and PSP records. Null falls back to Organisation.name in the invoice generator. |
| `siret` | string | Yes | French SIRET (14-digit company registration). Validated softly as a non-empty string; tighter format check lives in the invoice generator once VAT rules expand. |
| `billing_email` | string | Yes | Email used for billing notifications and invoice delivery. |
| `billing_address` | object | Yes |  |
| `payment_provider` | enum(paddle\|stripe\|mollie\|manual) | Yes | Active payment provider for this organisation. Null until the first billing action lands. |
| `payment_customer_id` | string | Yes | Provider-side customer ID (Mollie/Stripe/...). Lazy-created on first billing action. Read-only — managed by Bummock through link-mollie-customer. |

### PutPaymentOrganisationDto

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `legal_name` | string | Yes | Legal/registered company name used on invoices and PSP records. Null falls back to Organisation.name in the invoice generator. |
| `siret` | string | Yes | French SIRET (14-digit company registration). Validated softly as a non-empty string; tighter format check lives in the invoice generator once VAT rules expand. |
| `billing_email` | string | Yes | Email used for billing notifications and invoice delivery. |
| `billing_address` | object | Yes |  |

### PatchPaymentOrganisationDto

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `legal_name` | string | No | Legal/registered company name used on invoices and PSP records. Null falls back to Organisation.name in the invoice generator. |
| `siret` | string | No | French SIRET (14-digit company registration). Validated softly as a non-empty string; tighter format check lives in the invoice generator once VAT rules expand. |
| `billing_email` | string | No | Email used for billing notifications and invoice delivery. |
| `billing_address` | object | No |  |

### OrganizationSubEntity

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `name` | string | Yes |  |
| `url` | string | Yes |  |
| `description` | string | Yes |  |

### PostalAddressSubEntity

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `street_address` | string | Yes |  |
| `address_locality` | string | Yes |  |
| `address_region` | string | Yes |  |
| `postal_code` | string | Yes |  |
| `address_country` | string | Yes |  |

### PlaceSubEntity

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `name` | string | Yes |  |
| `address` | object | Yes |  |

### MonetaryAmountSubEntity

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `currency` | string | Yes |  |
| `value` | number | Yes |  |
| `min_value` | number | Yes |  |
| `max_value` | number | Yes |  |

### EducationalOccupationalCredentialSubEntity

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `name` | string | Yes |  |
| `description` | string | Yes |  |
| `credential_category` | string | Yes |  |
| `about` | string | Yes |  |
| `recognized_by` | object | Yes |  |

### OccupationalExperienceRequirementsSubEntity

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `months_of_experience` | number | Yes |  |
| `description` | string | Yes |  |

### SkillSubEntity

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `name` | string | Yes |  |
| `description` | string | Yes |  |
| `type` | enum(softskill\|knowledge\|ability) | Yes |  |
| `level` | enum(novice\|intermediate\|expert) | Yes |  |
| `keywords` | string[] | No |  |

### ContactPointSubEntity

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `contact_type` | string | Yes |  |
| `email` | string | Yes |  |
| `telephone` | string | Yes |  |

### JobPostingEntity

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `id` | string | Yes | 507f1f77bcf86cd799439011 |
| `created_at` | string | Yes | Mon Jun 15 2026 10:27:53 GMT+0200 (Central European Summer Time) |
| `updated_at` | string | Yes | Mon Jun 15 2026 10:27:53 GMT+0200 (Central European Summer Time) |
| `title` | string | Yes | Job title |
| `description` | string | Yes | Job description |
| `alternate_name` | string[] | No | Alternative job titles |
| `identifier` | string | Yes | Unique identifier (slug, UUID, ...) |
| `date_posted` | string | Yes | Publication date |
| `valid_through` | string | Yes | Posting expiration date |
| `hiring_organization` | object | Yes |  |
| `employment_unit` | object | Yes |  |
| `job_location` | object | Yes |  |
| `job_location_type` | string | Yes | Remote/work arrangement type, e.g. TELECOMMUTE |
| `applicant_location_requirements` | string | Yes | Allowed geographic areas (remote work) |
| `employment_type` | string | Yes | Contract type (full-time, part-time, ...) |
| `work_hours` | string | Yes | Typical hours |
| `job_immediate_start` | boolean | Yes | Immediate start? |
| `job_start_date` | string | Yes | Expected start date |
| `total_job_openings` | number | Yes | Number of open positions |
| `base_salary` | object | Yes |  |
| `estimated_salary` | object | Yes |  |
| `salary_currency` | string | Yes | Main currency (ISO 4217) |
| `incentive_compensation` | string | Yes | Bonuses / commissions |
| `job_benefits` | string | Yes | Benefits |
| `industry` | string | Yes | Industry sector |
| `occupational_category` | string | Yes | Occupational category (O*NET, ISCO, ...) |
| `qualifications` | object | Yes |  |
| `education_requirements` | object | Yes |  |
| `experience_requirements` | object | Yes |  |
| `experience_in_place_of_education` | boolean | Yes | Experience accepted in lieu of degree? |
| `responsibilities` | string[] | No | Job responsibilities / tasks |
| `skills` | SkillSubEntity[] | No | Sought-after skills |
| `physical_requirement` | string | Yes | Physical requirements |
| `sensory_requirement` | string | Yes | Sensory requirements |
| `security_clearance_requirement` | string | Yes | Security clearances |
| `eligibility_to_work_requirement` | string | Yes | Legal work conditions (visa, ...) |
| `employer_overview` | string | Yes | Employer presentation |
| `special_commitments` | string | Yes | Special commitments (VeteranCommit, ...) |
| `application_contact` | object | Yes |  |
| `direct_apply` | boolean | Yes | Does the posting allow direct application? |
| `relevant_occupation` | string | Yes | Related occupation (free text) |
| `url` | string | Yes | Canonical URL of the posting |
| `same_as` | string | Yes | Reference URL for identity |
| `image` | string | Yes | Image URL |

### PostOrganisationJobPostingDto

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `title` | string | Yes | Job title |
| `description` | string | Yes | Job description |
| `alternate_name` | string[] | No | Alternative job titles |
| `identifier` | string | Yes | Unique identifier (slug, UUID, ...) |
| `date_posted` | string | Yes | Publication date |
| `valid_through` | string | Yes | Posting expiration date |
| `hiring_organization` | object | Yes |  |
| `employment_unit` | object | Yes |  |
| `job_location` | object | Yes |  |
| `job_location_type` | string | Yes | Remote/work arrangement type, e.g. TELECOMMUTE |
| `applicant_location_requirements` | string | Yes | Allowed geographic areas (remote work) |
| `employment_type` | string | Yes | Contract type (full-time, part-time, ...) |
| `work_hours` | string | Yes | Typical hours |
| `job_immediate_start` | boolean | Yes | Immediate start? |
| `job_start_date` | string | Yes | Expected start date |
| `total_job_openings` | number | Yes | Number of open positions |
| `base_salary` | object | Yes |  |
| `estimated_salary` | object | Yes |  |
| `salary_currency` | string | Yes | Main currency (ISO 4217) |
| `incentive_compensation` | string | Yes | Bonuses / commissions |
| `job_benefits` | string | Yes | Benefits |
| `industry` | string | Yes | Industry sector |
| `occupational_category` | string | Yes | Occupational category (O*NET, ISCO, ...) |
| `qualifications` | object | Yes |  |
| `education_requirements` | object | Yes |  |
| `experience_requirements` | object | Yes |  |
| `experience_in_place_of_education` | boolean | Yes | Experience accepted in lieu of degree? |
| `responsibilities` | string[] | No | Job responsibilities / tasks |
| `skills` | SkillSubEntity[] | No | Sought-after skills |
| `physical_requirement` | string | Yes | Physical requirements |
| `sensory_requirement` | string | Yes | Sensory requirements |
| `security_clearance_requirement` | string | Yes | Security clearances |
| `eligibility_to_work_requirement` | string | Yes | Legal work conditions (visa, ...) |
| `employer_overview` | string | Yes | Employer presentation |
| `special_commitments` | string | Yes | Special commitments (VeteranCommit, ...) |
| `application_contact` | object | Yes |  |
| `direct_apply` | boolean | Yes | Does the posting allow direct application? |
| `relevant_occupation` | string | Yes | Related occupation (free text) |
| `url` | string | Yes | Canonical URL of the posting |
| `same_as` | string | Yes | Reference URL for identity |
| `image` | string | Yes | Image URL |
| `career_id` | string | Yes |  |
| `status` | enum(DRAFT\|OPEN\|CLOSED) | Yes |  |

### PutJobPostingDto

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `title` | string | Yes | Job title |
| `description` | string | Yes | Job description |
| `alternate_name` | string[] | No | Alternative job titles |
| `identifier` | string | Yes | Unique identifier (slug, UUID, ...) |
| `date_posted` | string | Yes | Publication date |
| `valid_through` | string | Yes | Posting expiration date |
| `hiring_organization` | object | Yes |  |
| `employment_unit` | object | Yes |  |
| `job_location` | object | Yes |  |
| `job_location_type` | string | Yes | Remote/work arrangement type, e.g. TELECOMMUTE |
| `applicant_location_requirements` | string | Yes | Allowed geographic areas (remote work) |
| `employment_type` | string | Yes | Contract type (full-time, part-time, ...) |
| `work_hours` | string | Yes | Typical hours |
| `job_immediate_start` | boolean | Yes | Immediate start? |
| `job_start_date` | string | Yes | Expected start date |
| `total_job_openings` | number | Yes | Number of open positions |
| `base_salary` | object | Yes |  |
| `estimated_salary` | object | Yes |  |
| `salary_currency` | string | Yes | Main currency (ISO 4217) |
| `incentive_compensation` | string | Yes | Bonuses / commissions |
| `job_benefits` | string | Yes | Benefits |
| `industry` | string | Yes | Industry sector |
| `occupational_category` | string | Yes | Occupational category (O*NET, ISCO, ...) |
| `qualifications` | object | Yes |  |
| `education_requirements` | object | Yes |  |
| `experience_requirements` | object | Yes |  |
| `experience_in_place_of_education` | boolean | Yes | Experience accepted in lieu of degree? |
| `responsibilities` | string[] | No | Job responsibilities / tasks |
| `skills` | SkillSubEntity[] | No | Sought-after skills |
| `physical_requirement` | string | Yes | Physical requirements |
| `sensory_requirement` | string | Yes | Sensory requirements |
| `security_clearance_requirement` | string | Yes | Security clearances |
| `eligibility_to_work_requirement` | string | Yes | Legal work conditions (visa, ...) |
| `employer_overview` | string | Yes | Employer presentation |
| `special_commitments` | string | Yes | Special commitments (VeteranCommit, ...) |
| `application_contact` | object | Yes |  |
| `direct_apply` | boolean | Yes | Does the posting allow direct application? |
| `relevant_occupation` | string | Yes | Related occupation (free text) |
| `url` | string | Yes | Canonical URL of the posting |
| `same_as` | string | Yes | Reference URL for identity |
| `image` | string | Yes | Image URL |

### PatchJobPostingDto

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `title` | string | No | Job title |
| `description` | string | No | Job description |
| `alternate_name` | string[] | No | Alternative job titles |
| `identifier` | string | No | Unique identifier (slug, UUID, ...) |
| `date_posted` | string | No | Publication date |
| `valid_through` | string | No | Posting expiration date |
| `hiring_organization` | object | No |  |
| `employment_unit` | object | No |  |
| `job_location` | object | No |  |
| `job_location_type` | string | No | Remote/work arrangement type, e.g. TELECOMMUTE |
| `applicant_location_requirements` | string | No | Allowed geographic areas (remote work) |
| `employment_type` | string | No | Contract type (full-time, part-time, ...) |
| `work_hours` | string | No | Typical hours |
| `job_immediate_start` | boolean | No | Immediate start? |
| `job_start_date` | string | No | Expected start date |
| `total_job_openings` | number | No | Number of open positions |
| `base_salary` | object | No |  |
| `estimated_salary` | object | No |  |
| `salary_currency` | string | No | Main currency (ISO 4217) |
| `incentive_compensation` | string | No | Bonuses / commissions |
| `job_benefits` | string | No | Benefits |
| `industry` | string | No | Industry sector |
| `occupational_category` | string | No | Occupational category (O*NET, ISCO, ...) |
| `qualifications` | object | No |  |
| `education_requirements` | object | No |  |
| `experience_requirements` | object | No |  |
| `experience_in_place_of_education` | boolean | No | Experience accepted in lieu of degree? |
| `responsibilities` | string[] | No | Job responsibilities / tasks |
| `skills` | SkillSubEntity[] | No | Sought-after skills |
| `physical_requirement` | string | No | Physical requirements |
| `sensory_requirement` | string | No | Sensory requirements |
| `security_clearance_requirement` | string | No | Security clearances |
| `eligibility_to_work_requirement` | string | No | Legal work conditions (visa, ...) |
| `employer_overview` | string | No | Employer presentation |
| `special_commitments` | string | No | Special commitments (VeteranCommit, ...) |
| `application_contact` | object | No |  |
| `direct_apply` | boolean | No | Does the posting allow direct application? |
| `relevant_occupation` | string | No | Related occupation (free text) |
| `url` | string | No | Canonical URL of the posting |
| `same_as` | string | No | Reference URL for identity |
| `image` | string | No | Image URL |

### OrganisationJobPostingEntity

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `id` | string | Yes | 507f1f77bcf86cd799439011 |
| `created_at` | string | Yes | Mon Jun 15 2026 10:27:53 GMT+0200 (Central European Summer Time) |
| `updated_at` | string | Yes | Mon Jun 15 2026 10:27:53 GMT+0200 (Central European Summer Time) |
| `organisation` | string | Yes | /organisations/507f1f77bcf86cd799439011 |
| `jobPosting` | string | Yes | /organisations/507f1f77bcf86cd799439011/jobPostings/507f1f77bcf86cd799439012 |
| `career` | string | Yes | /organisations/507f1f77bcf86cd799439011/careers/507f1f77bcf86cd799439013 |
| `status` | enum(DRAFT\|OPEN\|CLOSED) | Yes |  |

### PutOrganisationJobPostingDto

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `career_id` | string | Yes |  |
| `status` | enum(DRAFT\|OPEN\|CLOSED) | Yes |  |

### PatchOrganisationJobPostingDto

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `career_id` | string | No |  |
| `status` | enum(DRAFT\|OPEN\|CLOSED) | No |  |

### HydraView

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `@context` | string | Yes |  |
| `@id` | string | Yes |  |
| `@type` | string | Yes |  |
| `hydra:first` | string | Yes |  |
| `hydra:last` | string | Yes |  |
| `hydra:previous` | string | Yes |  |
| `hydra:next` | string | Yes |  |

### HydraSearch

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `@context` | string | Yes |  |
| `@id` | string | Yes |  |
| `@type` | string | Yes |  |
| `hydra:template` | string | Yes |  |
| `hydra:variableRepresentation` | string | Yes |  |
| `hydra:mapping` | string[] | Yes |  |

### HydraPaginator

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `@context` | string | Yes |  |
| `@id` | string | Yes |  |
| `@type` | string | Yes |  |
| `hydra:member` | object[] | Yes |  |
| `hydra:totalItems` | number | Yes |  |
| `hydra:view` | object | Yes |  |
| `hydra:search` | object | Yes |  |

### HydraError

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `@context` | string | Yes |  |
| `@type` | string | Yes |  |
| `hydra:title` | string | Yes | The title of the error |
| `hydra:description` | string | Yes | The detail of the error |
| `hydra:statusCode` | number | Yes | The status code of the error |
