openapi: 3.2.0 info: title: Ginnie Mae Content Disclosure API version: 1.0.0 summary: The public, unauthenticated JSON:API 1.0 content surface behind ginniemae.gov. description: Ginnie Mae serves its public website (www.ginniemae.gov) as an Angular single-page application against a Drupal 10 back end, and that back end exposes a **public, unauthenticated JSON:API 1.0 surface at `https://www.ginniemae.gov/api/v1/`** plus a set of Views REST exports and RFC 9264 linkset documents. contact: name: Ginnie Mae url: https://www.ginniemae.gov/contact-us license: name: U.S. Government Work (17 U.S.C. § 105) url: https://www.ginniemae.gov/site-policies/site-policies/disclaimer servers: - url: https://www.ginniemae.gov description: Production tags: - name: Disclosure paths: /api/v1/bulk-notifications: get: operationId: listBulkNotifications summary: List disclosure-download notifications description: 'Operational notices surfaced on the Disclosure Data Download application (bulk.ginniemae.gov). Verified live 2026-09-12: empty array (no active notice).' tags: - Disclosure parameters: - name: page in: query required: false description: Zero-based page index; the response `pager` member reports `current_page`, `items_per_page`, `total_pages` and `total_results`. schema: type: integer minimum: 0 - name: items_per_page in: query required: false description: Page size. schema: type: integer minimum: 1 responses: '200': description: A bare JSON array of rows. content: application/json: schema: type: array items: type: object additionalProperties: true '400': $ref: '#/components/responses/BadRequest' '404': $ref: '#/components/responses/NotFound' components: schemas: JsonApiError: type: object properties: title: type: string examples: - Bad Request status: type: string examples: - '400' detail: type: string examples: - Invalid nested filtering. The field `nope`, given in the path `nope`, does not exist. links: type: object properties: via: type: object properties: href: type: string format: uri info: type: object properties: href: type: string format: uri JsonApiVersion: type: object properties: version: type: string examples: - '1.0' meta: type: object additionalProperties: true JsonApiErrorDocument: type: object required: - errors properties: jsonapi: $ref: '#/components/schemas/JsonApiVersion' errors: type: array items: $ref: '#/components/schemas/JsonApiError' responses: BadRequest: description: Malformed query — for example an unknown filter field. Returned as a JSON:API error document. content: application/vnd.api+json: schema: $ref: '#/components/schemas/JsonApiErrorDocument' NotFound: description: 'No such resource. NOTE: an unknown resource TYPE under /api/v1 is answered by Drupal with an HTML 404 page rather than a JSON:API error document (observed 2026-09-12).' content: application/vnd.api+json: schema: $ref: '#/components/schemas/JsonApiErrorDocument' text/html: schema: type: string externalDocs: description: JSON:API 1.0 specification (the contract this surface conforms to) url: https://jsonapi.org/format/1.0/ x-generated-from: method: generated by: API Evangelist enrichment pipeline (local-v3) generated: '2026-09-12' sources: - https://www.ginniemae.gov/api/v1/ (JSON:API 1.0 entrypoint document, HTTP 200, 120 resource types) - https://www.ginniemae.gov/assets/config/config.prod.json (the SPA runtime configuration that names the API base) - https://bulk.ginniemae.gov/assets/config/config.prod.json - live anonymous GET probes of every path described, 2026-09-12 not_published_by_provider: true verification: Every path carries a 2026-09-12 anonymous HTTP 200. Query parameters are either JSON:API 1.0 members verified against the live surface (page[limit], page[offset], sort, filter, fields) or exposed-filter names the endpoint declares about itself in its own response `filters` member. caveat: 'robots.txt on www.ginniemae.gov carries "Disallow: /api/" for crawlers. The surface is not authenticated and not rate-limited in any advertised way, but it is also not an advertised developer product.'