openapi: 3.2.0 info: title: Addis Energy Media API version: wp/v2 description: Public, unauthenticated read access to the media library behind addisenergy.com — site photography, diagrams, team headshots and press assets with their generated size variants (73 attachments at capture) — via the WordPress core REST API. Anonymous access is read-only. contact: name: Addis Energy url: https://addisenergy.com/contact/ x-derived-from: https://addisenergy.com/wp-json/ route index (218 routes across 9 namespaces, captured 2026-09-07) x-derived-on: '2026-09-07' x-api-evangelist-note: Third-party profile. Addis Energy publishes no developer program, no developer portal and no SDKs. This documents the anonymously readable WordPress core REST content API behind addisenergy.com. Every path, parameter and error shape here was read from the server's own published route-index document and verified against live anonymous responses on 2026-09-07 — nothing is invented. servers: - url: https://addisenergy.com/wp-json description: Addis Energy WordPress REST API tags: - name: Media description: Media library attachments and their generated size variants. paths: /wp/v2/media: get: operationId: listMedia summary: List media description: Retrieve a paginated collection of media attachments. Total count is returned in `X-WP-Total`. tags: - Media parameters: - name: after in: query description: Limit response to posts published 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 items: type: integer default: [] - name: author_exclude in: query description: Ensure result set excludes posts assigned to specific authors. schema: type: array items: type: integer default: [] - name: before in: query description: Limit response to posts published before a given ISO8601 compliant date. schema: type: string format: date-time - 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: exclude in: query description: Ensure result set excludes specific IDs. schema: type: array items: type: integer default: [] - name: include in: query description: Limit result set to specific IDs. schema: type: array items: type: integer default: [] - name: media_type in: query description: Limit result set to attachments of a particular media type or media types. schema: type: array items: type: string enum: - image - video - text - application - audio - name: mime_type in: query description: Limit result set to attachments of a particular MIME type or MIME types. schema: type: array items: type: string - name: modified_after in: query description: Limit response to posts modified after 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: 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: page in: query description: Current page of the collection. schema: type: integer default: 1 minimum: 1 - name: parent in: query description: Limit result set to items with particular parent IDs. schema: type: array items: type: integer default: [] - name: parent_exclude in: query description: Limit result set to all items except those of a particular parent ID. schema: type: array items: type: integer default: [] - 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: search_columns in: query description: Array of column names to be searched. schema: type: array items: type: string enum: - post_title - post_content - post_excerpt default: [] - name: search_semantics in: query description: How to interpret the search input. schema: type: string enum: - exact - 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 items: type: string enum: - inherit - private - trash default: inherit responses: '200': description: A collection of media attachments. content: application/json: schema: type: array items: $ref: '#/components/schemas/MediaItem' '400': &id001 description: Invalid parameter. content: application/json: schema: $ref: '#/components/schemas/WPError' '404': &id002 description: No route or resource matched the request. content: application/json: schema: $ref: '#/components/schemas/WPError' /wp/v2/media/{id}: get: operationId: getMediaItem summary: Get a media item description: Retrieve a single media attachment by its numeric identifier. tags: - Media parameters: - name: id in: path required: true description: Unique identifier for the attachment. schema: type: integer - 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 responses: '200': description: A single media attachment. content: application/json: schema: $ref: '#/components/schemas/MediaItem' '400': *id001 '404': *id002 components: schemas: WPError: type: object description: The WordPress REST error envelope returned on every 4xx/5xx. Observed live on 2026-09-07. properties: code: type: string description: Machine-readable error slug, e.g. rest_post_invalid_page_number. examples: - rest_no_route message: type: string description: Human-readable message. examples: - No route was found matching the URL and request method. data: type: object description: Error detail; always carries the HTTP status. properties: status: type: integer examples: - 404 required: - code - message - data MediaItem: type: object description: A media library attachment behind addisenergy.com — site photography, diagrams, team headshots and press assets, with their generated size variants. properties: id: type: integer date: type: string format: date-time slug: type: string type: type: string examples: - attachment link: type: string format: uri title: type: object properties: &id003 rendered: type: string description: A WordPress rendered-content object. author: type: integer caption: type: object properties: *id003 description: A WordPress rendered-content object. alt_text: type: string description: Alternative text to display when attachment is not displayed. media_type: type: string enum: - image - file mime_type: type: string examples: - image/jpeg - image/png - image/svg+xml media_details: type: object description: Width, height, filesize and the generated size variants for the attachment. source_url: type: string format: uri description: URL to the original attachment file. _links: type: object