openapi: 3.1.0 info: title: Metalenz Taxonomy API version: wp/v2 description: 'Public, unauthenticated read access to the two taxonomies that classify the metalenz.com newsroom — the `category` taxonomy (one term, `uncategorized`, carrying all 26 posts) and the `post_tag` taxonomy (two terms, `polar-3d` and `new-products`). Anonymous access is read-only: the collection answers `Allow: GET` without credentials. Write methods exist on the same routes but require WordPress application-password authentication and are not part of the public surface.' contact: name: Metalenz url: https://metalenz.com/contact-us/ x-derived-from: https://metalenz.com/wp-json/ route index + per-route HTTP OPTIONS schema documents x-derived-on: '2026-08-25' x-api-evangelist-note: Third-party profile. Metalenz is a fabless metasurface-optics (meta-optics) semiconductor company and publishes no developer program, no developer portal and no API documentation; this documents the anonymously readable WordPress REST content API behind metalenz.com. Every path, parameter, enum and property here was read from the server's own published route index and OPTIONS schema documents on 2026-08-25 — nothing is invented. servers: - url: https://metalenz.com/wp-json description: Metalenz WordPress REST API tags: - name: Taxonomy description: Categories and tags applied to metalenz.com press releases. paths: /wp/v2/categories: get: operationId: listCategories summary: List categories tags: - Taxonomy description: Retrieve the category terms registered on metalenz.com (1 at capture). parameters: - name: context in: query schema: type: string enum: - view - embed - edit default: view description: Scope under which the request is made; determines fields present in response. - name: exclude in: query schema: type: array items: type: integer default: [] description: Ensure result set excludes specific IDs. - name: hide_empty in: query schema: type: boolean default: false description: Whether to hide terms not assigned to any posts. - name: include in: query schema: type: array items: type: integer default: [] description: Limit result set to specific IDs. - name: order in: query schema: type: string enum: - asc - desc default: asc description: Order sort attribute ascending or descending. - name: orderby in: query schema: type: string enum: - id - include - name - slug - include_slugs - term_group - description - count default: name description: Sort collection by term attribute. - name: page in: query schema: type: integer minimum: 1 default: 1 description: Current page of the collection. - name: parent in: query schema: type: integer description: Limit result set to terms assigned to a specific parent. - name: per_page in: query schema: type: integer minimum: 1 maximum: 100 default: 10 description: Maximum number of items to be returned in result set. - name: post in: query schema: type: integer description: Limit result set to terms assigned to a specific post. - name: search in: query schema: type: string description: Limit results to those matching a string. - name: slug in: query schema: type: array items: type: string description: Limit result set to terms with one or more specific slugs. responses: '200': description: List categories headers: &id001 X-WP-Total: description: Total number of records matching the query. schema: type: integer X-WP-TotalPages: description: Total number of pages available at the current per_page. schema: type: integer Link: description: RFC 8288 pagination links (rel="next" / rel="prev"). schema: type: string content: application/json: schema: type: array items: $ref: '#/components/schemas/Category' '400': description: Invalid parameter(s) — rest_invalid_param. content: application/json: schema: $ref: '#/components/schemas/Error' '401': description: Authentication required or insufficient permission — rest_forbidden. content: application/json: schema: $ref: '#/components/schemas/Error' /wp/v2/categories/{id}: get: operationId: getCategory summary: Get category tags: - Taxonomy description: Retrieve a single category term by its numeric term ID. parameters: - name: id in: path required: true schema: type: integer description: Unique identifier for the term. - name: context in: query schema: type: string enum: - view - embed - edit default: view description: Scope under which the request is made; determines fields present in response. responses: '200': description: Get category content: application/json: schema: $ref: '#/components/schemas/Category' '400': description: Invalid parameter(s) — rest_invalid_param. content: application/json: schema: $ref: '#/components/schemas/Error' '404': description: No category exists with that ID — rest_term_invalid. content: application/json: schema: $ref: '#/components/schemas/Error' /wp/v2/tags: get: operationId: listTags summary: List tags tags: - Taxonomy description: Retrieve the post_tag terms registered on metalenz.com (2 at capture). parameters: - name: context in: query schema: type: string enum: - view - embed - edit default: view description: Scope under which the request is made; determines fields present in response. - name: exclude in: query schema: type: array items: type: integer default: [] description: Ensure result set excludes specific IDs. - name: hide_empty in: query schema: type: boolean default: false description: Whether to hide terms not assigned to any posts. - name: include in: query schema: type: array items: type: integer default: [] description: Limit result set to specific IDs. - name: offset in: query schema: type: integer description: Offset the result set by a specific number of items. - name: order in: query schema: type: string enum: - asc - desc default: asc description: Order sort attribute ascending or descending. - name: orderby in: query schema: type: string enum: - id - include - name - slug - include_slugs - term_group - description - count default: name description: Sort collection by term attribute. - name: page in: query schema: type: integer minimum: 1 default: 1 description: Current page of the collection. - name: per_page in: query schema: type: integer minimum: 1 maximum: 100 default: 10 description: Maximum number of items to be returned in result set. - name: post in: query schema: type: integer description: Limit result set to terms assigned to a specific post. - name: search in: query schema: type: string description: Limit results to those matching a string. - name: slug in: query schema: type: array items: type: string description: Limit result set to terms with one or more specific slugs. responses: '200': description: List tags headers: *id001 content: application/json: schema: type: array items: $ref: '#/components/schemas/Tag' '400': description: Invalid parameter(s) — rest_invalid_param. content: application/json: schema: $ref: '#/components/schemas/Error' '401': description: Authentication required or insufficient permission — rest_forbidden. content: application/json: schema: $ref: '#/components/schemas/Error' /wp/v2/tags/{id}: get: operationId: getTag summary: Get tag tags: - Taxonomy description: Retrieve a single tag term by its numeric term ID. parameters: - name: id in: path required: true schema: type: integer description: Unique identifier for the term. - name: context in: query schema: type: string enum: - view - embed - edit default: view description: Scope under which the request is made; determines fields present in response. responses: '200': description: Get tag content: application/json: schema: $ref: '#/components/schemas/Tag' '400': description: Invalid parameter(s) — rest_invalid_param. content: application/json: schema: $ref: '#/components/schemas/Error' '404': description: No tag exists with that ID — rest_term_invalid. content: application/json: schema: $ref: '#/components/schemas/Error' components: schemas: Error: type: object description: The WordPress REST API error envelope returned on every 4xx/5xx. properties: code: type: string description: Machine-readable error code, e.g. rest_post_invalid_id. message: type: string description: Human-readable error message. data: type: object properties: status: type: integer description: The HTTP status code. params: type: object description: Per-parameter validation messages (rest_invalid_param only). details: type: object description: Per-parameter validation detail (rest_invalid_param only). required: - code - message Category: title: category type: object properties: id: description: Unique identifier for the term. type: integer readOnly: true count: description: Number of published posts for the term. type: integer readOnly: true description: description: HTML description of the term. type: string link: description: URL of the term. type: string format: uri readOnly: true name: description: HTML title for the term. type: string slug: description: An alphanumeric identifier for the term unique to its type. type: string taxonomy: description: Type attribution for the term. type: string enum: - category readOnly: true parent: description: The parent term ID. type: integer meta: description: Meta fields. type: object acf: description: ACF field data type: object Tag: title: post_tag type: object properties: id: description: Unique identifier for the term. type: integer readOnly: true count: description: Number of published posts for the term. type: integer readOnly: true description: description: HTML description of the term. type: string link: description: URL of the term. type: string format: uri readOnly: true name: description: HTML title for the term. type: string slug: description: An alphanumeric identifier for the term unique to its type. type: string taxonomy: description: Type attribution for the term. type: string enum: - post_tag readOnly: true meta: description: Meta fields. type: object