openapi: 3.1.0 info: title: Impossible Metals Posts API version: wp/v2 description: 'Public, unauthenticated read access to the Impossible Metals news, blog and press archive (247 published posts at capture on 2026-08-23) via the WordPress core REST API. 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: Impossible Metals url: https://impossiblemetals.com/contact/ x-derived-from: https://impossiblemetals.com/wp-json/ route index + per-route HTTP OPTIONS schema documents x-derived-on: '2026-08-23' x-api-evangelist-note: Third-party profile. Impossible Metals publishes no developer program. This document describes the anonymously readable WordPress REST content API served from impossiblemetals.com. Every path, parameter and schema was read from the server's own published route index and OPTIONS documents on 2026-08-23 — nothing is invented. servers: - url: https://impossiblemetals.com/wp-json description: Impossible Metals WordPress REST API tags: - name: Posts description: Impossible Metals blog posts, press releases and announcements on deep-sea mineral collection, policy and the Eureka programme. paths: /wp/v2/posts: get: operationId: listPosts summary: List posts description: Retrieve a paginated collection of published Impossible Metals posts. 247 posts were live at capture. tags: - Posts parameters: - name: context in: query description: Scope under which the request is made; determines fields present in response. schema: type: string enum: - view - embed - edit default: view - name: page in: query description: Current page of the collection. schema: type: integer default: 1 minimum: 1 - name: per_page in: query description: Maximum number of items to be returned in result set. schema: type: integer default: 10 minimum: 1 maximum: 100 - name: search in: query description: Limit results to those matching a string. schema: type: string - name: after in: query description: Limit response to posts published after a given ISO8601 compliant date. schema: type: string format: date-time - name: modified_after in: query description: Limit response to posts modified after a given ISO8601 compliant date. schema: type: string format: date-time - name: author in: query description: Limit result set to posts assigned to specific authors. schema: type: array default: [] items: type: integer - name: author_exclude in: query description: Ensure result set excludes posts assigned to specific authors. schema: type: array default: [] items: type: integer - name: before in: query description: Limit response to posts published before a given ISO8601 compliant date. schema: type: string format: date-time - name: modified_before in: query description: Limit response to posts modified before a given ISO8601 compliant date. schema: type: string format: date-time - name: exclude in: query description: Ensure result set excludes specific IDs. schema: type: array default: [] items: type: integer - name: include in: query description: Limit result set to specific IDs. schema: type: array default: [] items: type: integer - name: search_semantics in: query description: How to interpret the search input. schema: type: string enum: - exact - name: offset in: query description: Offset the result set by a specific number of items. schema: type: integer - name: order in: query description: Order sort attribute ascending or descending. schema: type: string enum: - asc - desc default: desc - name: orderby in: query description: Sort collection by post attribute. schema: type: string enum: - author - date - id - include - modified - parent - relevance - slug - include_slugs - title default: date - name: search_columns in: query description: Array of column names to be searched. schema: type: array default: [] items: enum: - post_title - post_content - post_excerpt type: string - name: slug in: query description: Limit result set to posts with one or more specific slugs. schema: type: array items: type: string - name: status in: query description: Limit result set to posts assigned one or more statuses. schema: type: array default: publish items: enum: - publish - future - draft - pending - private - trash - auto-draft - inherit - request-pending - request-confirmed - request-failed - request-completed - tribe-ea-success - tribe-ea-failed - tribe-ea-schedule - tribe-ea-pending - tribe-ea-draft - tribe-ignored - any type: string - name: tax_relation in: query description: Limit result set based on relationship between multiple taxonomies. schema: type: string enum: - AND - OR - name: categories in: query description: Limit result set to items with specific terms assigned in the categories taxonomy. schema: type: object - name: categories_exclude in: query description: Limit result set to items except those with specific terms assigned in the categories taxonomy. schema: type: object - name: tags in: query description: Limit result set to items with specific terms assigned in the tags taxonomy. schema: type: object - name: tags_exclude in: query description: Limit result set to items except those with specific terms assigned in the tags taxonomy. schema: type: object - name: sticky in: query description: Limit result set to items that are sticky. schema: type: boolean - name: ignore_sticky in: query description: Whether to ignore sticky posts or not. schema: type: boolean default: true - name: format in: query description: Limit result set to items assigned one or more given formats. schema: type: array items: enum: - standard - aside - chat - gallery - link - image - quote - status - video - audio type: string responses: '200': description: List posts — success. headers: X-WP-Total: description: Total number of items in the unpaginated collection. schema: type: integer X-WP-TotalPages: description: Total number of pages available at the requested per_page size. 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/Post' '400': &id001 description: Invalid parameter. content: application/json: schema: $ref: '#/components/schemas/RestError' examples: invalidParam: value: code: rest_invalid_param message: 'Invalid parameter(s): per_page' data: status: 400 params: per_page: per_page must be between 1 (inclusive) and 100 (inclusive) '404': &id002 description: WordPress REST error envelope. content: application/json: schema: $ref: '#/components/schemas/RestError' examples: invalidId: value: code: rest_post_invalid_id message: Invalid post ID. data: status: 404 /wp/v2/posts/{id}: get: operationId: getPost summary: Get a post description: Retrieve a single published Impossible Metals post by its numeric identifier. tags: - Posts parameters: - name: id in: path description: Unique identifier for the post. schema: type: integer required: true - name: context in: query description: Scope under which the request is made; determines fields present in response. schema: type: string enum: - view - embed - edit default: view - name: excerpt_length in: query description: Override the default excerpt length. schema: type: integer - name: password in: query description: The password for the post if it is password protected. schema: type: string responses: '200': description: Get a post — success. content: application/json: schema: type: object '400': *id001 '404': *id002 components: schemas: RestError: type: object description: The WordPress REST API error envelope. Not RFC 9457 problem+json — it is served as application/json with a WordPress-specific code/message/data shape. required: - code - message - data properties: code: type: string description: Machine-readable WordPress error code, e.g. rest_post_invalid_id. message: type: string description: Human-readable message. data: type: object properties: status: type: integer description: HTTP status code. params: type: object description: Per-parameter validation messages, present on rest_invalid_param. Post: type: object properties: date: type: string description: The date the post was published, in the site's timezone. format: date-time date_gmt: type: string description: The date the post was published, as GMT. format: date-time guid: type: object description: The globally unique identifier for the post. readOnly: true properties: raw: type: string description: GUID for the post, as it exists in the database. readOnly: true rendered: type: string description: GUID for the post, transformed for display. readOnly: true id: type: integer description: Unique identifier for the post. readOnly: true link: type: string description: URL to the post. format: uri readOnly: true modified: type: string description: The date the post was last modified, in the site's timezone. format: date-time readOnly: true modified_gmt: type: string description: The date the post was last modified, as GMT. format: date-time readOnly: true slug: type: string description: An alphanumeric identifier for the post unique to its type. status: type: string description: A named status for the post. enum: - publish - future - draft - pending - private - tribe-ea-success - tribe-ea-failed - tribe-ea-schedule - tribe-ea-pending - tribe-ea-draft - tribe-ignored type: type: string description: Type of post. readOnly: true password: type: string description: A password to protect access to the content and excerpt. permalink_template: type: string description: Permalink template for the post. readOnly: true generated_slug: type: string description: Slug automatically generated from the post title. readOnly: true class_list: type: array description: An array of the class names for the post container element. readOnly: true items: type: string title: type: object description: The title for the post. properties: raw: type: string description: Title for the post, as it exists in the database. rendered: type: string description: HTML title for the post, transformed for display. readOnly: true content: type: object description: The content for the post. properties: raw: type: string description: Content for the post, as it exists in the database. rendered: type: string description: HTML content for the post, transformed for display. readOnly: true block_version: type: integer description: Version of the content block format used by the post. readOnly: true protected: type: boolean description: Whether the content is protected with a password. readOnly: true author: type: integer description: The ID for the author of the post. excerpt: type: object description: The excerpt for the post. properties: raw: type: string description: Excerpt for the post, as it exists in the database. rendered: type: string description: HTML excerpt for the post, transformed for display. readOnly: true protected: type: boolean description: Whether the excerpt is protected with a password. readOnly: true featured_media: type: integer description: The ID of the featured media for the post. comment_status: type: string description: Whether or not comments are open on the post. enum: - open - closed ping_status: type: string description: Whether or not the post can be pinged. enum: - open - closed format: type: string description: The format for the post. enum: - standard - aside - chat - gallery - link - image - quote - status - video - audio meta: type: object description: Meta fields. properties: inline_featured_image: type: boolean footnotes: type: string sticky: type: boolean description: Whether or not the post should be treated as sticky. template: type: string description: The theme file to use to display the post. categories: type: array description: The terms assigned to the post in the category taxonomy. items: type: integer tags: type: array description: The terms assigned to the post in the post_tag taxonomy. items: type: integer