# 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.

## Authentication

- GET `/v1/users/{userId}/apiKeys`: Retrieves the collection of Api Keys resources.
- POST `/v1/users/{userId}/apiKeys`: Creates an Api Key.
- GET `/v1/users/{userId}/apiKeys/{apiKeyId}`: Retrieves an Api Key resource.
- POST `/v1/apiKeys/reset-credits`: Resets credits on every key whose billing period has elapsed.
- PATCH `/v1/users/{userId}/apiKeys/{apiKeyId}/disable`: Disables an Api Key.

## Career

- GET `/v1/organisations/{organisationId}/careers`: Retrieves the collection of Career resources.
- POST `/v1/organisations/{organisationId}/careers`: Creates a Career resource.
- GET `/v1/organisations/{organisationId}/users/{userId}/careers`: Retrieves the collection of Career resources.
- GET `/v1/organisations/{organisationId}/careers/{careerId}`: Retrieves a Career resource.
- PUT `/v1/organisations/{organisationId}/careers/{careerId}`: Replaces a Career resource.
- DELETE `/v1/organisations/{organisationId}/careers/{careerId}`: Removes a Career resource.

## CareerUser

- GET `/v1/organisations/{organisationId}/careers/{careerId}/careerUsers`: Retrieves the collection of CareerUser resources.
- POST `/v1/organisations/{organisationId}/careers/{careerId}/careerUsers`: Creates a CareerUser resource.
- GET `/v1/organisations/{organisationId}/users/{userId}/careerUsers`: Retrieves the collection of CareerUser resources of a user
- GET `/v1/organisations/{organisationId}/careers/{careerId}/careerUsers/{careerUserId}`: Retrieves a CareerUser resource.
- PUT `/v1/organisations/{organisationId}/careers/{careerId}/careerUsers/{careerUserId}`: Replaces a CareerUser resource.
- DELETE `/v1/organisations/{organisationId}/careers/{careerId}/careerUsers/{careerUserId}`: Removes a CareerUser resource.

## Certificates

- GET `/v1/users/{userId}/certificates`: Retrieves the collection of UserCertificate resources.
- POST `/v1/users/{userId}/certificates`: Creates a UserCertificate resource.
- GET `/v1/users/{userId}/certificates/{certificateId}`: Retrieves a UserCertificate resource.
- PUT `/v1/users/{userId}/certificates/{certificateId}`: Replaces a UserCertificate resource.
- DELETE `/v1/users/{userId}/certificates/{certificateId}`: Removes a UserCertificate resource.
- GET `/v1/organisations/{organisationId}/users/{userId}/certificates`: Retrieves the collection of UserCertificate resources.
- POST `/v1/organisations/{organisationId}/users/{userId}/certificates`: Creates a UserCertificate resource.
- GET `/v1/organisations/{organisationId}/users/{userId}/certificates/{certificateId}`: Retrieves a UserCertificate resource.
- PUT `/v1/organisations/{organisationId}/users/{userId}/certificates/{certificateId}`: Replaces a UserCertificate resource.
- DELETE `/v1/organisations/{organisationId}/users/{userId}/certificates/{certificateId}`: Removes a UserCertificate resource.

## Course

- GET `/v1/organisations/{organisationId}/courses`: Retrieves the collection of Course resources.
- POST `/v1/organisations/{organisationId}/courses`: Creates a Course resource.
- GET `/v1/organisations/{organisationId}/courses/{courseId}`: Retrieves a Course resource.
- PUT `/v1/organisations/{organisationId}/courses/{courseId}`: Replaces a Course resource.
- DELETE `/v1/organisations/{organisationId}/courses/{courseId}`: Removes a Course resource.

## Document

- POST `/v1/organisations/{organisationId}/users/{userId}/rawDocuments/treat`: Creates a Raw Document resource, treat it and creates a Treated Document resource.
- 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.
- POST `/v1/organisations/{organisationId}/users/{userId}/treatedDocuments/{treatedDocumentId}/correctedTreatedDocuments`: Creates a Corrected Treated Document resource.
- PUT `/v1/organisations/{organisationId}/users/{userId}/correctedTreatedDocuments/{correctedTreatedDocumentId}`: Replaces a Corrected Treated Document resource.
- POST `/v1/organisations/{organisationId}/users/{userId}/correctedTreatedDocuments/{correctedTreatedDocumentId}/enrich`: Enrich a Corrected Treated Document resource and creates a Enriched Document resource.
- POST `/v1/organisations/{organisationId}/users/{userId}/enrichedDocuments/{enrichedDocumentId}/correctedEnrichedDocuments`: Creates a Corrected Enriched Document resource.
- PUT `/v1/organisations/{organisationId}/users/{userId}/correctedEnrichedDocuments/{correctedEnrichedDocumentId}`: Replaces a Corrected Enriched Document resource.
- POST `/v1/users/{userId}/rawDocuments/treat`: Creates a Raw Document resource, treat it and creates a Treated Document resource.
- 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.
- POST `/v1/users/{userId}/treatedDocuments/{treatedDocumentId}/correctedTreatedDocuments`: Creates a Corrected Treated Document resource.
- POST `/v1/users/{userId}/correctedTreatedDocuments/{correctedTreatedDocumentId}/enrich`: Enrich a Corrected Treated Document resource and creates a Enriched Document resource.
- POST `/v1/users/{userId}/enrichedDocuments/{enrichedDocumentId}/correctedEnrichedDocuments`: Creates a Corrected Enriched Document resource.
- GET `/v1/users/{userId}/correctedTreatedDocuments/{correctedTreatedDocumentId}`: Retrieves a Corrected Treated Document resource.
- PUT `/v1/users/{userId}/correctedTreatedDocuments/{correctedTreatedDocumentId}`: Replaces a Corrected Treated Document resource.
- GET `/v1/users/{userId}/correctedEnrichedDocuments/{correctedEnrichedDocumentId}`: Retrieves a Corrected Enriched Document resource.
- PUT `/v1/users/{userId}/correctedEnrichedDocuments/{correctedEnrichedDocumentId}`: Replaces a Corrected Enriched Document resource.

## Evaluation

- GET `/v1/users/{userId}/evaluations`: Retrieves the collection of Evaluation resources.
- GET `/v1/users/{userId}/evaluations/{evaluationId}`: Retrieves an Evaluation resource.
- GET `/v1/organisations/{organisationId}/users/{userId}/evaluations`: Retrieves the collection of Evaluation resources.
- POST `/v1/organisations/{organisationId}/users/{userId}/evaluations`: Creates an Evaluation resource.
- GET `/v1/organisations/{organisationId}/users/{userId}/evaluations/{evaluationId}`: Retrieves an Evaluation resource.
- PUT `/v1/organisations/{organisationId}/users/{userId}/evaluations/{evaluationId}`: Replaces an Evaluation resource.
- DELETE `/v1/organisations/{organisationId}/users/{userId}/evaluations/{evaluationId}`: Removes an Evaluation resource.

## JobPosting

- GET `/v1/organisations/{organisationId}/jobPostings`: Retrieves the collection of JobPosting resources.
- POST `/v1/organisations/{organisationId}/jobPostings`: Creates a JobPosting resource.
- GET `/v1/organisations/{organisationId}/jobPostings/{jobPostingId}`: Retrieves a JobPosting resource.
- PUT `/v1/organisations/{organisationId}/jobPostings/{jobPostingId}`: Replaces a JobPosting resource.
- PATCH `/v1/organisations/{organisationId}/jobPostings/{jobPostingId}`: Updates a JobPosting resource.
- DELETE `/v1/organisations/{organisationId}/jobPostings/{jobPostingId}`: Removes a JobPosting resource.
- GET `/v1/organisations/{organisationId}/jobPostings/{jobPostingId}/organisationJobPosting`: Retrieves the OrganisationJobPosting link for a JobPosting.
- PUT `/v1/organisations/{organisationId}/jobPostings/{jobPostingId}/organisationJobPosting`: Replaces the OrganisationJobPosting link for a JobPosting.
- PATCH `/v1/organisations/{organisationId}/jobPostings/{jobPostingId}/organisationJobPosting`: Updates the OrganisationJobPosting link for a JobPosting.

## Mission

- GET `/v1/organisations/{organisationId}/teams/{teamId}/projects/{projectId}/missions`: Retrieves the collection of Mission resources.
- POST `/v1/organisations/{organisationId}/teams/{teamId}/projects/{projectId}/missions`: Creates a Mission resource.
- GET `/v1/organisations/{organisationId}/teams/{teamId}/projects/{projectId}/missions/{missionId}`: Retrieves a Mission resource.
- PUT `/v1/organisations/{organisationId}/teams/{teamId}/projects/{projectId}/missions/{missionId}`: Replaces a Mission resource.
- DELETE `/v1/organisations/{organisationId}/teams/{teamId}/projects/{projectId}/missions/{missionId}`: Removes a Mission resource.

## Offer

- GET `/v1/offers`: Retrieves the collection of Offer resources.
- GET `/v1/offers/{offerId}`: Retrieves an Offer resource.
- GET `/v1/organisations/{organisationId}/offers`: Retrieves the collection of Offer resources.
- POST `/v1/organisations/{organisationId}/offers`: Creates an Offer resource.
- GET `/v1/organisations/{organisationId}/offers/{offerId}`: Retrieves an Offer resource.
- PUT `/v1/organisations/{organisationId}/offers/{offerId}`: Replaces an Offer resource.
- DELETE `/v1/organisations/{organisationId}/offers/{offerId}`: Removes an Offer resource.
- GET `/v1/organisations/{organisationId}/offers/{offerId}/compatibilities`: Retrieves a Compatibility resource.

## OfferUser

- GET `/v1/organisations/{organisationId}/offers/{offerId}/offerUsers`: Retrieves the collection of OfferUser resources.
- POST `/v1/organisations/{organisationId}/offers/{offerId}/offerUsers`: Creates a OfferUser resource.
- GET `/v1/organisations/{organisationId}/offers/{offerId}/offerUsers/{offerUserId}`: Retrieves a OfferUser resource.
- PUT `/v1/organisations/{organisationId}/offers/{offerId}/offerUsers/{offerUserId}`: Replaces a OfferUser resource.
- DELETE `/v1/organisations/{organisationId}/offers/{offerId}/offerUsers/{offerUserId}`: Removes a OfferUser resource.

## Organisation

- GET `/v1/organisations`: Retrieves the collection of Organisation resources.
- POST `/v1/organisations`: Creates an Organisation resource.
- GET `/v1/organisations/{organisationId}`: Retrieves an Organisation resource.
- PUT `/v1/organisations/{organisationId}`: Replaces an Organisation resource.
- PATCH `/v1/organisations/{organisationId}`: Partially updates an Organisation resource (only the provided fields).
- DELETE `/v1/organisations/{organisationId}`: Removes an Organisation resource.
- GET `/v1/users/{userId}/organisations`: Retrieves the collection of Organisation resources.

## OrganisationPlans

- GET `/v1/organisations/{organisationId}/organisationPlans`: Retrieves the OrganisationPlan history of an organisation (chained via previous_organisation_plan_id, ordered by creation date asc).
- GET `/v1/organisations/{organisationId}/organisationPlans/current`: Retrieves the active OrganisationPlan (the one with ended_at = null). 404 if no maillon courant exists yet.
- GET `/v1/organisations/{organisationId}/organisationPlans/{organisationPlanId}`: Retrieves a single OrganisationPlan by ID.
- 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.
- 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.

## 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.
- 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.
- PATCH `/v1/organisations/{organisationId}/payment-organisation`: Patch the billing identity for an organisation. Same upsert primitive as PUT — unset fields stay untouched.

## Plans

- GET `/v1/plans`: Retrieves the collection of Plan resources.
- GET `/v1/plans/public`: Lists publicly-visible plans for the marketing site. No authentication required. Returns pricing-safe fields only (no route_access).
- GET `/v1/plans/{code}`: Retrieves a Plan resource by code.

## Program

- GET `/v1/organisations/{organisationId}/programs`: Retrieves the collection of Program resources.
- POST `/v1/organisations/{organisationId}/programs`: Creates a Program resource.
- GET `/v1/organisations/{organisationId}/programs/{programId}`: Retrieves a Program resource.
- PUT `/v1/organisations/{organisationId}/programs/{programId}`: Replaces a Program resource.
- DELETE `/v1/organisations/{organisationId}/programs/{programId}`: Removes a Program resource.

## Project

- GET `/v1/organisations/{organisationId}/teams/{teamId}/projects`: Retrieves the collection of Project resources.
- POST `/v1/organisations/{organisationId}/teams/{teamId}/projects`: Creates a Project resource.
- GET `/v1/organisations/{organisationId}/teams/{teamId}/projects/{projectId}`: Retrieves a Project resource.
- PUT `/v1/organisations/{organisationId}/teams/{teamId}/projects/{projectId}`: Replaces a Project resource.
- DELETE `/v1/organisations/{organisationId}/teams/{teamId}/projects/{projectId}`: Removes a Project resource.

## Public API — Account

- GET `/v1/credits`: Get the calling API key's credit balance

## Public API — Analyse

- POST `/v1/parse/cv`: Parse a CV into structured skills, experience, education.
- POST `/v1/parse/job-offer`: Parse a job offer into required/desired skills.
- POST `/v1/skills/extract`: Full skill profile of an occupation (essential/optional).
- POST `/v1/skills/recommend`: Recommend relevant skills via knowledge-graph intelligence.
- POST `/v1/cv/score`: Score a CV: composite quality score + improvement axes.

## Public API — Consultation

- GET `/v1/search/skill`: Search skills by keyword or associated occupation.
- GET `/v1/search/occupation`: Search occupations by keyword, sector, framework or ISCO id.
- GET `/v1/search/sector`: Browse activity sectors / ISCO groups by framework.
- GET `/v1/taxonomy/browse`: Navigate the multi-framework taxonomy with cross-references.
- GET `/v1/mapping/crosswalk`: Map a node across référentiels (ESCO, ROME, O*NET, Singapore, KLDB, ONS).

## Public API — Intelligence

- POST `/v1/match/occupation`: Match a job title cross-framework (ESCO/ROME/O*NET).
- POST `/v1/enrich/job-offer`: Enrich a job offer: parsing + implicit skill inference.
- POST `/v1/enrich/cv`: Enrich a CV: parsing + implicit skill inference (knowledge graph).
- POST `/v1/match/cvs-vs-job`: Reverse matching: one job vs a pool of pre-indexed CVs.
- POST `/v1/match/jobs-vs-cv`: Reverse matching: one CV vs a pool of pre-indexed jobs.
- POST `/v1/skills/gap`: Gap analysis: missing skills + training-time estimate.
- POST `/v1/workforce/map`: Bulk-map a full job architecture to a target framework. (Beta)
- POST `/v1/career/transitions`: Career pathways: transitions with % shared skills. (Beta)

## Roles

- GET `/v1/roles`: Retrieves the collection of Role resources.

## Session

- GET `/v1/organisations/{organisationId}/sessions`: Retrieves the collection of Session resources.
- POST `/v1/organisations/{organisationId}/sessions`: Creates a Session resource.
- GET `/v1/organisations/{organisationId}/sessions/{sessionId}`: Retrieves a Session resource.
- PUT `/v1/organisations/{organisationId}/sessions/{sessionId}`: Replaces a Session resource.
- DELETE `/v1/organisations/{organisationId}/sessions/{sessionId}`: Removes a Session resource.

## SkillbergAI

- GET `/v1/SkillbergAIs/skills/search`: Semantic search across the Skillberg knowledge graph skills.
- GET `/v1/SkillbergAIs/skills/{skill_uuid}`: Get a skill entity by its Skillberg UUID.

## SkillSet

- GET `/v1/users/{userId}/skillSets/{skillSetId}`: Retrieves a SkillSet resource.
- PUT `/v1/users/{userId}/skillSets/{skillSetId}`: Replaces a SkillSet resource.
- POST `/v1/users/{userId}/skillSets`: Creates a SkillSet resource.
- POST `/v1/organisations/{organisationId}/offers/{offerId}/skillSets`: Creates a SkillSet resource.

## 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.
- PATCH `/v1/users/{userId}/sonarUser`: Updates the Sonar-specific profile for a user (onboarded_at, role).

## Team

- GET `/v1/organisations/{organisationId}/users/{userId}/teams`: Retrieves the collection of Team resources.
- GET `/v1/organisations/{organisationId}/teams`: Retrieves the collection of Team resources.
- POST `/v1/organisations/{organisationId}/teams`: Creates a Team resource.
- GET `/v1/organisations/{organisationId}/teams/{teamId}`: Retrieves a Team resource.
- PUT `/v1/organisations/{organisationId}/teams/{teamId}`: Replaces a Team resource.
- PATCH `/v1/organisations/{organisationId}/teams/{teamId}`: Updates a Team resource.
- DELETE `/v1/organisations/{organisationId}/teams/{teamId}`: Removes a Team resource.

## Usage

- GET `/v1/organisations/{organisationId}/usage/summary`: Aggregated usage summary for an organisation in the given time window. Defaults to the last 30 days.
- GET `/v1/organisations/{organisationId}/usage/daily`: Daily usage breakdown (calls + credits per day) for an organisation. Defaults to the last 30 days.
- 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.
- 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.
- 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.

## User

- GET `/v1/users`: Retrieves the collection of User resources.
- POST `/v1/users`: Creates a User resource.
- GET `/v1/users/{userId}`: Retrieves a User resource.
- PUT `/v1/users/{userId}`: Replaces a User resource.
- DELETE `/v1/users/{userId}`: Removes a User resource.
- GET `/v1/organisations/{organisationId}/users`: Retrieves the collection of User resources.
- POST `/v1/organisations/{organisationId}/users`: Creates a User resource.
- GET `/v1/organisations/{organisationId}/teams/{teamId}/users`: Retrieves the collection of User resources.
- GET `/v1/organisations/{organisationId}/offers/{offerId}/users`: Retrieves the collection of User resources.
- POST `/v1/users/jobs/{jobId}/matching`: Generates a matching score between users and a job.
- POST `/v1/users/{userId}/completion`: Generates a completion score for a given user.

## UserAward

- GET `/v1/users/{userId}/awards`: Retrieves the collection of UserAward resources.
- POST `/v1/users/{userId}/awards`: Creates a UserAward resource.
- GET `/v1/users/{userId}/awards/{awardId}`: Retrieves a UserAward resource.
- PUT `/v1/users/{userId}/awards/{awardId}`: Replaces a UserAward resource.
- DELETE `/v1/users/{userId}/awards/{awardId}`: Removes a UserAward resource.
- GET `/v1/organisations/{organisationId}/users/{userId}/awards`: Retrieves the collection of UserAward resources.
- POST `/v1/organisations/{organisationId}/users/{userId}/awards`: Creates a UserAward resource.
- GET `/v1/organisations/{organisationId}/users/{userId}/awards/{awardId}`: Retrieves a UserAward resource.
- PUT `/v1/organisations/{organisationId}/users/{userId}/awards/{awardId}`: Replaces a UserAward resource.
- DELETE `/v1/organisations/{organisationId}/users/{userId}/awards/{awardId}`: Removes a UserAward resource.

## UserEducation

- GET `/v1/users/{userId}/educations`: Retrieves the collection of UserEducation resources.
- POST `/v1/users/{userId}/educations`: Creates a UserEducation resource.
- GET `/v1/users/{userId}/educations/{educationId}`: Retrieves a UserEducation resource.
- PUT `/v1/users/{userId}/educations/{educationId}`: Replaces a UserEducation resource.
- DELETE `/v1/users/{userId}/educations/{educationId}`: Removes a UserEducation resource.
- GET `/v1/organisations/{organisationId}/users/{userId}/educations`: Retrieves the collection of UserEducation resources.
- POST `/v1/organisations/{organisationId}/users/{userId}/educations`: Creates a UserEducation resource.
- GET `/v1/organisations/{organisationId}/users/{userId}/educations/{educationId}`: Retrieves a UserEducation resource.
- PUT `/v1/organisations/{organisationId}/users/{userId}/educations/{educationId}`: Replaces a UserEducation resource.
- DELETE `/v1/organisations/{organisationId}/users/{userId}/educations/{educationId}`: Removes a UserEducation resource.

## UserInterest

- GET `/v1/users/{userId}/interests`: Retrieves the collection of UserInterest resources.
- POST `/v1/users/{userId}/interests`: Creates a UserInterest resource.
- GET `/v1/users/{userId}/interests/{interestId}`: Retrieves a UserInterest resource.
- PUT `/v1/users/{userId}/interests/{interestId}`: Replaces a UserInterest resource.
- DELETE `/v1/users/{userId}/interests/{interestId}`: Removes a UserInterest resource.
- GET `/v1/organisations/{organisationId}/users/{userId}/interests`: Retrieves the collection of UserInterest resources.
- POST `/v1/organisations/{organisationId}/users/{userId}/interests`: Creates a UserInterest resource.
- GET `/v1/organisations/{organisationId}/users/{userId}/interests/{interestId}`: Retrieves a UserInterest resource.
- PUT `/v1/organisations/{organisationId}/users/{userId}/interests/{interestId}`: Replaces a UserInterest resource.
- DELETE `/v1/organisations/{organisationId}/users/{userId}/interests/{interestId}`: Removes a UserInterest resource.

## UserLanguage

- GET `/v1/users/{userId}/languages`: Retrieves the collection of UserLanguage resources.
- POST `/v1/users/{userId}/languages`: Creates a UserLanguage resource.
- GET `/v1/users/{userId}/languages/{languageId}`: Retrieves a UserLanguage resource.
- PUT `/v1/users/{userId}/languages/{languageId}`: Replaces a UserLanguage resource.
- DELETE `/v1/users/{userId}/languages/{languageId}`: Removes a UserLanguage resource.
- GET `/v1/organisations/{organisationId}/users/{userId}/languages`: Retrieves the collection of UserLanguage resources.
- POST `/v1/organisations/{organisationId}/users/{userId}/languages`: Creates a UserLanguage resource.
- GET `/v1/organisations/{organisationId}/users/{userId}/languages/{languageId}`: Retrieves a UserLanguage resource.
- PUT `/v1/organisations/{organisationId}/users/{userId}/languages/{languageId}`: Replaces a UserLanguage resource.
- DELETE `/v1/organisations/{organisationId}/users/{userId}/languages/{languageId}`: Removes a UserLanguage resource.

## UserProject

- GET `/v1/users/{userId}/projects`: Retrieves the collection of UserProject resources.
- POST `/v1/users/{userId}/projects`: Creates a UserProject resource.
- GET `/v1/users/{userId}/projects/{projectId}`: Retrieves a UserProject resource.
- PUT `/v1/users/{userId}/projects/{projectId}`: Replaces a UserProject resource.
- DELETE `/v1/users/{userId}/projects/{projectId}`: Removes a UserProject resource.
- GET `/v1/organisations/{organisationId}/users/{userId}/projects`: Retrieves the collection of UserProject resources.
- POST `/v1/organisations/{organisationId}/users/{userId}/projects`: Creates a UserProject resource.
- GET `/v1/organisations/{organisationId}/users/{userId}/projects/{projectId}`: Retrieves a UserProject resource.
- PUT `/v1/organisations/{organisationId}/users/{userId}/projects/{projectId}`: Replaces a UserProject resource.
- DELETE `/v1/organisations/{organisationId}/users/{userId}/projects/{projectId}`: Removes a UserProject resource.

## UserPublication

- GET `/v1/users/{userId}/publications`: Retrieves the collection of UserPublication resources.
- POST `/v1/users/{userId}/publications`: Creates a UserPublication resource.
- GET `/v1/users/{userId}/publications/{publicationId}`: Retrieves a UserPublication resource.
- PUT `/v1/users/{userId}/publications/{publicationId}`: Replaces a UserPublication resource.
- DELETE `/v1/users/{userId}/publications/{publicationId}`: Removes a UserPublication resource.
- GET `/v1/organisations/{organisationId}/users/{userId}/publications`: Retrieves the collection of UserPublication resources.
- POST `/v1/organisations/{organisationId}/users/{userId}/publications`: Creates a UserPublication resource.
- GET `/v1/organisations/{organisationId}/users/{userId}/publications/{publicationId}`: Retrieves a UserPublication resource.
- PUT `/v1/organisations/{organisationId}/users/{userId}/publications/{publicationId}`: Replaces a UserPublication resource.
- DELETE `/v1/organisations/{organisationId}/users/{userId}/publications/{publicationId}`: Removes a UserPublication resource.

## UserReference

- GET `/v1/users/{userId}/references`: Retrieves the collection of UserReference resources.
- POST `/v1/users/{userId}/references`: Creates a UserReference resource.
- GET `/v1/users/{userId}/references/{referenceId}`: Retrieves a UserReference resource.
- PUT `/v1/users/{userId}/references/{referenceId}`: Replaces a UserReference resource.
- DELETE `/v1/users/{userId}/references/{referenceId}`: Removes a UserReference resource.
- GET `/v1/organisations/{organisationId}/users/{userId}/references`: Retrieves the collection of UserReference resources.
- POST `/v1/organisations/{organisationId}/users/{userId}/references`: Creates a UserReference resource.
- GET `/v1/organisations/{organisationId}/users/{userId}/references/{referenceId}`: Retrieves a UserReference resource.
- PUT `/v1/organisations/{organisationId}/users/{userId}/references/{referenceId}`: Replaces a UserReference resource.
- DELETE `/v1/organisations/{organisationId}/users/{userId}/references/{referenceId}`: Removes a UserReference resource.

## UserSkill

- GET `/v1/users/{userId}/skills`: Retrieves the collection of UserSkill resources.
- POST `/v1/users/{userId}/skills`: Creates a UserSkill resource.
- GET `/v1/users/{userId}/skills/{skillId}`: Retrieves a UserSkill resource.
- PUT `/v1/users/{userId}/skills/{skillId}`: Replaces a UserSkill resource.
- DELETE `/v1/users/{userId}/skills/{skillId}`: Removes a UserSkill resource.
- GET `/v1/organisations/{organisationId}/users/{userId}/skills`: Retrieves the collection of UserSkill resources.
- POST `/v1/organisations/{organisationId}/users/{userId}/skills`: Creates a UserSkill resource.
- GET `/v1/organisations/{organisationId}/users/{userId}/skills/{skillId}`: Retrieves a UserSkill resource.
- PUT `/v1/organisations/{organisationId}/users/{userId}/skills/{skillId}`: Replaces a UserSkill resource.
- DELETE `/v1/organisations/{organisationId}/users/{userId}/skills/{skillId}`: Removes a UserSkill resource.

## UserTitle

- GET `/v1/users/{userId}/userTitles`: Retrieves a UserTitle collection.
- POST `/v1/users/{userId}/userTitles`: Creates a UserTitle resource.
- GET `/v1/users/{userId}/userTitles/{userTitleId}`: Retrieves a UserTitle resource.
- PUT `/v1/users/{userId}/userTitles/{userTitleId}`: Replaces a UserTitle resource.
- DELETE `/v1/users/{userId}/userTitles/{userTitleId}`: Removes a UserTitle resource.
- GET `/v1/organisations/{organisationId}/users/{userId}/userTitles/{userTitleId}`: Retrieves a UserTitle resource.
- PUT `/v1/organisations/{organisationId}/users/{userId}/userTitles/{userTitleId}`: Replaces a UserTitle resource.
- DELETE `/v1/organisations/{organisationId}/users/{userId}/userTitles/{userTitleId}`: Removes a UserTitle resource.
- GET `/v1/organisations/{organisationId}/users/{userId}/userTitles`: Retrieves the collection of UserTitle resources.
- POST `/v1/organisations/{organisationId}/users/{userId}/userTitles`: Creates a UserTitle resource.

## UserVolunteer

- GET `/v1/users/{userId}/volunteers`: Retrieves the collection of UserVolunteer resources.
- POST `/v1/users/{userId}/volunteers`: Creates a UserVolunteer resource.
- GET `/v1/users/{userId}/volunteers/{volunteerId}`: Retrieves a UserVolunteer resource.
- PUT `/v1/users/{userId}/volunteers/{volunteerId}`: Replaces a UserVolunteer resource.
- DELETE `/v1/users/{userId}/volunteers/{volunteerId}`: Removes a UserVolunteer resource.
- GET `/v1/organisations/{organisationId}/users/{userId}/volunteers`: Retrieves the collection of UserVolunteer resources.
- POST `/v1/organisations/{organisationId}/users/{userId}/volunteers`: Creates a UserVolunteer resource.
- GET `/v1/organisations/{organisationId}/users/{userId}/volunteers/{volunteerId}`: Retrieves a UserVolunteer resource.
- PUT `/v1/organisations/{organisationId}/users/{userId}/volunteers/{volunteerId}`: Replaces a UserVolunteer resource.
- DELETE `/v1/organisations/{organisationId}/users/{userId}/volunteers/{volunteerId}`: Removes a UserVolunteer resource.

## UserWork

- GET `/v1/users/{userId}/works`: Retrieves the collection of UserWork resources.
- POST `/v1/users/{userId}/works`: Creates a UserWork resource.
- GET `/v1/users/{userId}/works/{workId}`: Retrieves a UserWork resource.
- PUT `/v1/users/{userId}/works/{workId}`: Replaces a UserWork resource.
- DELETE `/v1/users/{userId}/works/{workId}`: Removes a UserWork resource.
- GET `/v1/organisations/{organisationId}/users/{userId}/works`: Retrieves the collection of UserWork resources.
- POST `/v1/organisations/{organisationId}/users/{userId}/works`: Creates a UserWork resource.
- GET `/v1/organisations/{organisationId}/users/{userId}/works/{workId}`: Retrieves a UserWork resource.
- PUT `/v1/organisations/{organisationId}/users/{userId}/works/{workId}`: Replaces a UserWork resource.
- DELETE `/v1/organisations/{organisationId}/users/{userId}/works/{workId}`: Removes a UserWork resource.
