openapi: 3.2.0 info: title: Habiteo Site Content API (WordPress REST wp-json) Taxonomy API version: wp-json summary: Anonymous read surface of the WordPress REST API that www.habiteo.com serves. description: 'Habiteo publishes www.habiteo.com on WordPress, which exposes the WordPress REST API at https://www.habiteo.com/wp-json/. The wp/v2 namespace is anonymously readable and returns the company''s news posts, marketing pages, portfolio entries, media library, taxonomies and users as JSON. This document was DERIVED mechanically by API Evangelist from the route-discovery document served at https://www.habiteo.com/wp-json/ on 2026-08-17 — every path, method and parameter below is taken verbatim from that descriptor. Habiteo publishes no OpenAPI, no developer portal and no API documentation of its own, and THIS IS NOT A HABITEO PRODUCT API: it is the content API the CMS exposes. Habiteo''s actual products (myHabiteo, the 3D configurator, the MegaWidget) have no published contract. Write operations exist on these routes but require WordPress authentication (Application Passwords over HTTP Basic, or a cookie + nonce).' contact: name: Habiteo url: https://www.habiteo.com/ x-derived-by: API Evangelist enrichment pipeline x-derived-from: https://www.habiteo.com/wp-json/ x-derived-on: '2026-08-17' x-provider-published: false servers: - url: https://www.habiteo.com/wp-json description: Production tags: - name: Taxonomy paths: /wp/v2/categories: get: operationId: getWpV2Categories summary: GET /wp/v2/categories tags: - Taxonomy parameters: - name: context in: query required: false schema: type: string enum: - view - embed - edit default: view description: Le contexte dans lequel la requête est faite ; cela détermine les champs renvoyés. - name: page in: query required: false schema: type: integer default: 1 description: Page courante dans la collection. - name: per_page in: query required: false schema: type: integer default: 10 description: Nombre maximal d’éléments à renvoyer dans le groupe de résultats. - name: search in: query required: false schema: type: string description: Limiter les résultats à ceux qui correspondent à une chaîne de caractères. - name: exclude in: query required: false schema: type: array default: [] items: type: integer description: S’assure que le jeu de résultats exclut des ID spécifiques. - name: include in: query required: false schema: type: array default: [] items: type: integer description: Limiter le groupe de résultats aux ID spécifiés. - name: order in: query required: false schema: type: string enum: - asc - desc default: asc description: Le paramètre order trie les attributs dans l’ordre croissant ou décroissant. - name: orderby in: query required: false schema: type: string enum: - id - include - name - slug - term_group - description - count default: name description: Trier la collection par attributs de terme. - name: hide_empty in: query required: false schema: type: boolean default: false description: Que ce soit pour masquer des termes non affectées à des articles. - name: parent in: query required: false schema: type: integer description: Résultats limités aux termes ayant un parent spécifique. - name: post in: query required: false schema: type: integer description: Limiter le résultat aux termes assignés à un article spécifique. - name: slug in: query required: false schema: type: array items: type: string description: Limiter le résultat aux termes avec un identifiant spécifique. responses: '200': description: Successful response. content: application/json: schema: type: object '400': description: Invalid parameter. content: application/json: schema: $ref: '#/components/schemas/WPError' '401': description: Not authenticated. content: application/json: schema: $ref: '#/components/schemas/WPError' '403': description: rest_forbidden — the anonymous caller may not perform this action. content: application/json: schema: $ref: '#/components/schemas/WPError' '404': description: No route or resource matched. content: application/json: schema: $ref: '#/components/schemas/WPError' post: operationId: postWpV2Categories summary: POST /wp/v2/categories tags: - Taxonomy requestBody: required: true content: application/json: schema: type: object properties: description: type: string description: Description HTML du terme. name: type: string description: Titre HTML pour le terme. slug: type: string description: Un identificateur alphanumérique pour le terme, propre au type de la ressource. parent: type: integer description: L’ID du terme parent. meta: type: object description: Champs métas. required: - name responses: '200': description: Successful response. content: application/json: schema: type: object '400': description: Invalid parameter. content: application/json: schema: $ref: '#/components/schemas/WPError' '401': description: Not authenticated. content: application/json: schema: $ref: '#/components/schemas/WPError' '403': description: rest_forbidden — the anonymous caller may not perform this action. content: application/json: schema: $ref: '#/components/schemas/WPError' '404': description: No route or resource matched. content: application/json: schema: $ref: '#/components/schemas/WPError' security: - basicAuth: [] - cookieNonce: [] /wp/v2/categories/{id}: parameters: - name: id in: path required: true schema: type: string description: Route parameter `id` declared by the WordPress route index. get: operationId: getWpV2CategoriesId summary: GET /wp/v2/categories/{id} tags: - Taxonomy parameters: - name: context in: query required: false schema: type: string enum: - view - embed - edit default: view description: Le contexte dans lequel la requête est faite ; cela détermine les champs renvoyés. responses: '200': description: Successful response. content: application/json: schema: type: object '400': description: Invalid parameter. content: application/json: schema: $ref: '#/components/schemas/WPError' '401': description: Not authenticated. content: application/json: schema: $ref: '#/components/schemas/WPError' '403': description: rest_forbidden — the anonymous caller may not perform this action. content: application/json: schema: $ref: '#/components/schemas/WPError' '404': description: No route or resource matched. content: application/json: schema: $ref: '#/components/schemas/WPError' post: operationId: postWpV2CategoriesId summary: POST /wp/v2/categories/{id} tags: - Taxonomy requestBody: required: false content: application/json: schema: type: object properties: description: type: string description: Description HTML du terme. name: type: string description: Titre HTML pour le terme. slug: type: string description: Un identificateur alphanumérique pour le terme, propre au type de la ressource. parent: type: integer description: L’ID du terme parent. meta: type: object description: Champs métas. responses: '200': description: Successful response. content: application/json: schema: type: object '400': description: Invalid parameter. content: application/json: schema: $ref: '#/components/schemas/WPError' '401': description: Not authenticated. content: application/json: schema: $ref: '#/components/schemas/WPError' '403': description: rest_forbidden — the anonymous caller may not perform this action. content: application/json: schema: $ref: '#/components/schemas/WPError' '404': description: No route or resource matched. content: application/json: schema: $ref: '#/components/schemas/WPError' security: - basicAuth: [] - cookieNonce: [] delete: operationId: deleteWpV2CategoriesId summary: DELETE /wp/v2/categories/{id} tags: - Taxonomy parameters: - name: force in: query required: false schema: type: boolean default: false description: 'Nécessite la valeur "true", car les termes ne supportent pas la suppression forcée. ' responses: '200': description: Successful response. content: application/json: schema: type: object '400': description: Invalid parameter. content: application/json: schema: $ref: '#/components/schemas/WPError' '401': description: Not authenticated. content: application/json: schema: $ref: '#/components/schemas/WPError' '403': description: rest_forbidden — the anonymous caller may not perform this action. content: application/json: schema: $ref: '#/components/schemas/WPError' '404': description: No route or resource matched. content: application/json: schema: $ref: '#/components/schemas/WPError' security: - basicAuth: [] - cookieNonce: [] /wp/v2/portfolio_category: get: operationId: getWpV2Portfoliocategory summary: GET /wp/v2/portfolio_category tags: - Taxonomy parameters: - name: context in: query required: false schema: type: string enum: - view - embed - edit default: view description: Le contexte dans lequel la requête est faite ; cela détermine les champs renvoyés. - name: page in: query required: false schema: type: integer default: 1 description: Page courante dans la collection. - name: per_page in: query required: false schema: type: integer default: 10 description: Nombre maximal d’éléments à renvoyer dans le groupe de résultats. - name: search in: query required: false schema: type: string description: Limiter les résultats à ceux qui correspondent à une chaîne de caractères. - name: exclude in: query required: false schema: type: array default: [] items: type: integer description: S’assure que le jeu de résultats exclut des ID spécifiques. - name: include in: query required: false schema: type: array default: [] items: type: integer description: Limiter le groupe de résultats aux ID spécifiés. - name: order in: query required: false schema: type: string enum: - asc - desc default: asc description: Le paramètre order trie les attributs dans l’ordre croissant ou décroissant. - name: orderby in: query required: false schema: type: string enum: - id - include - name - slug - term_group - description - count default: name description: Trier la collection par attributs de terme. - name: hide_empty in: query required: false schema: type: boolean default: false description: Que ce soit pour masquer des termes non affectées à des articles. - name: parent in: query required: false schema: type: integer description: Résultats limités aux termes ayant un parent spécifique. - name: post in: query required: false schema: type: integer description: Limiter le résultat aux termes assignés à un article spécifique. - name: slug in: query required: false schema: type: array items: type: string description: Limiter le résultat aux termes avec un identifiant spécifique. responses: '200': description: Successful response. content: application/json: schema: type: object '400': description: Invalid parameter. content: application/json: schema: $ref: '#/components/schemas/WPError' '401': description: Not authenticated. content: application/json: schema: $ref: '#/components/schemas/WPError' '403': description: rest_forbidden — the anonymous caller may not perform this action. content: application/json: schema: $ref: '#/components/schemas/WPError' '404': description: No route or resource matched. content: application/json: schema: $ref: '#/components/schemas/WPError' post: operationId: postWpV2Portfoliocategory summary: POST /wp/v2/portfolio_category tags: - Taxonomy requestBody: required: true content: application/json: schema: type: object properties: description: type: string description: Description HTML du terme. name: type: string description: Titre HTML pour le terme. slug: type: string description: Un identificateur alphanumérique pour le terme, propre au type de la ressource. parent: type: integer description: L’ID du terme parent. meta: type: object description: Champs métas. required: - name responses: '200': description: Successful response. content: application/json: schema: type: object '400': description: Invalid parameter. content: application/json: schema: $ref: '#/components/schemas/WPError' '401': description: Not authenticated. content: application/json: schema: $ref: '#/components/schemas/WPError' '403': description: rest_forbidden — the anonymous caller may not perform this action. content: application/json: schema: $ref: '#/components/schemas/WPError' '404': description: No route or resource matched. content: application/json: schema: $ref: '#/components/schemas/WPError' security: - basicAuth: [] - cookieNonce: [] /wp/v2/portfolio_category/{id}: parameters: - name: id in: path required: true schema: type: string description: Route parameter `id` declared by the WordPress route index. get: operationId: getWpV2PortfoliocategoryId summary: GET /wp/v2/portfolio_category/{id} tags: - Taxonomy parameters: - name: context in: query required: false schema: type: string enum: - view - embed - edit default: view description: Le contexte dans lequel la requête est faite ; cela détermine les champs renvoyés. responses: '200': description: Successful response. content: application/json: schema: type: object '400': description: Invalid parameter. content: application/json: schema: $ref: '#/components/schemas/WPError' '401': description: Not authenticated. content: application/json: schema: $ref: '#/components/schemas/WPError' '403': description: rest_forbidden — the anonymous caller may not perform this action. content: application/json: schema: $ref: '#/components/schemas/WPError' '404': description: No route or resource matched. content: application/json: schema: $ref: '#/components/schemas/WPError' post: operationId: postWpV2PortfoliocategoryId summary: POST /wp/v2/portfolio_category/{id} tags: - Taxonomy requestBody: required: false content: application/json: schema: type: object properties: description: type: string description: Description HTML du terme. name: type: string description: Titre HTML pour le terme. slug: type: string description: Un identificateur alphanumérique pour le terme, propre au type de la ressource. parent: type: integer description: L’ID du terme parent. meta: type: object description: Champs métas. responses: '200': description: Successful response. content: application/json: schema: type: object '400': description: Invalid parameter. content: application/json: schema: $ref: '#/components/schemas/WPError' '401': description: Not authenticated. content: application/json: schema: $ref: '#/components/schemas/WPError' '403': description: rest_forbidden — the anonymous caller may not perform this action. content: application/json: schema: $ref: '#/components/schemas/WPError' '404': description: No route or resource matched. content: application/json: schema: $ref: '#/components/schemas/WPError' security: - basicAuth: [] - cookieNonce: [] delete: operationId: deleteWpV2PortfoliocategoryId summary: DELETE /wp/v2/portfolio_category/{id} tags: - Taxonomy parameters: - name: force in: query required: false schema: type: boolean default: false description: 'Nécessite la valeur "true", car les termes ne supportent pas la suppression forcée. ' responses: '200': description: Successful response. content: application/json: schema: type: object '400': description: Invalid parameter. content: application/json: schema: $ref: '#/components/schemas/WPError' '401': description: Not authenticated. content: application/json: schema: $ref: '#/components/schemas/WPError' '403': description: rest_forbidden — the anonymous caller may not perform this action. content: application/json: schema: $ref: '#/components/schemas/WPError' '404': description: No route or resource matched. content: application/json: schema: $ref: '#/components/schemas/WPError' security: - basicAuth: [] - cookieNonce: [] /wp/v2/tags: get: operationId: getWpV2Tags summary: GET /wp/v2/tags tags: - Taxonomy parameters: - name: context in: query required: false schema: type: string enum: - view - embed - edit default: view description: Le contexte dans lequel la requête est faite ; cela détermine les champs renvoyés. - name: page in: query required: false schema: type: integer default: 1 description: Page courante dans la collection. - name: per_page in: query required: false schema: type: integer default: 10 description: Nombre maximal d’éléments à renvoyer dans le groupe de résultats. - name: search in: query required: false schema: type: string description: Limiter les résultats à ceux qui correspondent à une chaîne de caractères. - name: exclude in: query required: false schema: type: array default: [] items: type: integer description: S’assure que le jeu de résultats exclut des ID spécifiques. - name: include in: query required: false schema: type: array default: [] items: type: integer description: Limiter le groupe de résultats aux ID spécifiés. - name: offset in: query required: false schema: type: integer description: Ignorer un nombre spécifique d’éléments au sein du jeu de résultats. - name: order in: query required: false schema: type: string enum: - asc - desc default: asc description: Le paramètre order trie les attributs dans l’ordre croissant ou décroissant. - name: orderby in: query required: false schema: type: string enum: - id - include - name - slug - term_group - description - count default: name description: Trier la collection par attributs de terme. - name: hide_empty in: query required: false schema: type: boolean default: false description: Que ce soit pour masquer des termes non affectées à des articles. - name: post in: query required: false schema: type: integer description: Limiter le résultat aux termes assignés à un article spécifique. - name: slug in: query required: false schema: type: array items: type: string description: Limiter le résultat aux termes avec un identifiant spécifique. responses: '200': description: Successful response. content: application/json: schema: type: object '400': description: Invalid parameter. content: application/json: schema: $ref: '#/components/schemas/WPError' '401': description: Not authenticated. content: application/json: schema: $ref: '#/components/schemas/WPError' '403': description: rest_forbidden — the anonymous caller may not perform this action. content: application/json: schema: $ref: '#/components/schemas/WPError' '404': description: No route or resource matched. content: application/json: schema: $ref: '#/components/schemas/WPError' post: operationId: postWpV2Tags summary: POST /wp/v2/tags tags: - Taxonomy requestBody: required: true content: application/json: schema: type: object properties: description: type: string description: Description HTML du terme. name: type: string description: Titre HTML pour le terme. slug: type: string description: Un identificateur alphanumérique pour le terme, propre au type de la ressource. meta: type: object description: Champs métas. required: - name responses: '200': description: Successful response. content: application/json: schema: type: object '400': description: Invalid parameter. content: application/json: schema: $ref: '#/components/schemas/WPError' '401': description: Not authenticated. content: application/json: schema: $ref: '#/components/schemas/WPError' '403': description: rest_forbidden — the anonymous caller may not perform this action. content: application/json: schema: $ref: '#/components/schemas/WPError' '404': description: No route or resource matched. content: application/json: schema: $ref: '#/components/schemas/WPError' security: - basicAuth: [] - cookieNonce: [] /wp/v2/tags/{id}: parameters: - name: id in: path required: true schema: type: string description: Route parameter `id` declared by the WordPress route index. get: operationId: getWpV2TagsId summary: GET /wp/v2/tags/{id} tags: - Taxonomy parameters: - name: context in: query required: false schema: type: string enum: - view - embed - edit default: view description: Le contexte dans lequel la requête est faite ; cela détermine les champs renvoyés. responses: '200': description: Successful response. content: application/json: schema: type: object '400': description: Invalid parameter. content: application/json: schema: $ref: '#/components/schemas/WPError' '401': description: Not authenticated. content: application/json: schema: $ref: '#/components/schemas/WPError' '403': description: rest_forbidden — the anonymous caller may not perform this action. content: application/json: schema: $ref: '#/components/schemas/WPError' '404': description: No route or resource matched. content: application/json: schema: $ref: '#/components/schemas/WPError' post: operationId: postWpV2TagsId summary: POST /wp/v2/tags/{id} tags: - Taxonomy requestBody: required: false content: application/json: schema: type: object properties: description: type: string description: Description HTML du terme. name: type: string description: Titre HTML pour le terme. slug: type: string description: Un identificateur alphanumérique pour le terme, propre au type de la ressource. meta: type: object description: Champs métas. responses: '200': description: Successful response. content: application/json: schema: type: object '400': description: Invalid parameter. content: application/json: schema: $ref: '#/components/schemas/WPError' '401': description: Not authenticated. content: application/json: schema: $ref: '#/components/schemas/WPError' '403': description: rest_forbidden — the anonymous caller may not perform this action. content: application/json: schema: $ref: '#/components/schemas/WPError' '404': description: No route or resource matched. content: application/json: schema: $ref: '#/components/schemas/WPError' security: - basicAuth: [] - cookieNonce: [] delete: operationId: deleteWpV2TagsId summary: DELETE /wp/v2/tags/{id} tags: - Taxonomy parameters: - name: force in: query required: false schema: type: boolean default: false description: 'Nécessite la valeur "true", car les termes ne supportent pas la suppression forcée. ' responses: '200': description: Successful response. content: application/json: schema: type: object '400': description: Invalid parameter. content: application/json: schema: $ref: '#/components/schemas/WPError' '401': description: Not authenticated. content: application/json: schema: $ref: '#/components/schemas/WPError' '403': description: rest_forbidden — the anonymous caller may not perform this action. content: application/json: schema: $ref: '#/components/schemas/WPError' '404': description: No route or resource matched. content: application/json: schema: $ref: '#/components/schemas/WPError' security: - basicAuth: [] - cookieNonce: [] /wp/v2/taxonomies: get: operationId: getWpV2Taxonomies summary: GET /wp/v2/taxonomies tags: - Taxonomy parameters: - name: context in: query required: false schema: type: string enum: - view - embed - edit default: view description: Le contexte dans lequel la requête est faite ; cela détermine les champs renvoyés. - name: type in: query required: false schema: type: string description: Limiter les résultats aux taxinomies associées un type de contenu spécifique. responses: '200': description: Successful response. content: application/json: schema: type: object '400': description: Invalid parameter. content: application/json: schema: $ref: '#/components/schemas/WPError' '401': description: Not authenticated. content: application/json: schema: $ref: '#/components/schemas/WPError' '403': description: rest_forbidden — the anonymous caller may not perform this action. content: application/json: schema: $ref: '#/components/schemas/WPError' '404': description: No route or resource matched. content: application/json: schema: $ref: '#/components/schemas/WPError' /wp/v2/taxonomies/{taxonomy}: parameters: - name: taxonomy in: path required: true schema: type: string description: Route parameter `taxonomy` declared by the WordPress route index. get: operationId: getWpV2TaxonomiesTaxonomy summary: GET /wp/v2/taxonomies/{taxonomy} tags: - Taxonomy parameters: - name: context in: query required: false schema: type: string enum: - view - embed - edit default: view description: Le contexte dans lequel la requête est faite ; cela détermine les champs renvoyés. responses: '200': description: Successful response. content: application/json: schema: type: object '400': description: Invalid parameter. content: application/json: schema: $ref: '#/components/schemas/WPError' '401': description: Not authenticated. content: application/json: schema: $ref: '#/components/schemas/WPError' '403': description: rest_forbidden — the anonymous caller may not perform this action. content: application/json: schema: $ref: '#/components/schemas/WPError' '404': description: No route or resource matched. content: application/json: schema: $ref: '#/components/schemas/WPError' components: securitySchemes: basicAuth: type: http scheme: basic description: WordPress Application Passwords over HTTP Basic. Required for every write operation. cookieNonce: type: apiKey in: header name: X-WP-Nonce description: WordPress logged-in cookie plus an X-WP-Nonce header, used by first-party admin clients. schemas: WPError: type: object description: The WordPress REST error envelope. Not RFC 9457 problem+json. properties: code: type: string description: Machine-readable error code, e.g. rest_post_invalid_id. message: type: string description: Human-readable message. Localized — this install answers in French. data: type: object properties: status: type: integer description: HTTP status repeated in the body.