Health Record Rights Countries API

The Countries API from Health Record Rights — 2 operation(s) for countries.

GitHub OpenAPI

Operations 2

GET /countries All countries and territories #
GET /countries/{iso3} One country or territory #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/healthrecordrights-com:healthrecordrights-com-countries-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

healthrecordrights-com-countries-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Health Record Rights Index Countries API
  version: '1'
  summary: Read-only JSON. Open, no sign-up, no key.
  description: Health record rights in countries and territories (scores out of 100, with sources), what each of the 50 states and DC adds to federal law (answers, no scores), and published real cases. Data version 1.0. Fields in v1 are never removed or renamed. Not legal advice.
  license:
    name: CC BY 4.0 (data and scores; quoted law, source titles and linked pages are not relicensed)
    url: https://creativecommons.org/licenses/by/4.0/
  contact:
    url: https://healthrecordrights.com/developers/
servers:
- url: https://healthrecordrights.com/api/v1
tags:
- name: Countries
paths:
  /countries:
    get:
      summary: All countries and territories
      description: Overall score out of 100, band, rank or lead group, likely rank and confidence. Highest score first; the lead group together, A to Z.
      parameters: []
      responses:
        '200':
          description: The list.
          headers:
            ETag:
              schema:
                type: string
            Cache-Control:
              schema:
                type: string
          content:
            application/json:
              schema:
                allOf:
                - $ref: '#/components/schemas/Envelope'
                - type: object
                  properties:
                    data:
                      type: object
                      properties:
                        count:
                          type: integer
                        confidenceCounts:
                          type: object
                          properties:
                            high:
                              type: integer
                            medium:
                              type: integer
                            low:
                              type: integer
                        ties:
                          type: string
                        countries:
                          type: array
                          items:
                            $ref: '#/components/schemas/CountrySummary'
        '400':
          description: A query parameter could not be used. The body says why.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: Not found, with a plain message and, for a name or alias, the code to use.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '429':
          description: Too many requests. Wait the number of seconds in Retry-After.
          headers:
            Retry-After:
              schema:
                type: integer
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      operationId: listCountries
      tags:
      - Countries
  /countries/{iso3}:
    get:
      summary: One country or territory
      description: Every category with its score, summary, detail and sources; laws; recent news; real cases.
      parameters:
      - name: iso3
        in: path
        required: true
        description: ISO 3166-1 alpha-3 code, like FIN.
        schema:
          type: string
        example: FIN
      responses:
        '200':
          description: The country.
          headers:
            ETag:
              schema:
                type: string
            Cache-Control:
              schema:
                type: string
          content:
            application/json:
              schema:
                allOf:
                - $ref: '#/components/schemas/Envelope'
                - type: object
                  properties:
                    data:
                      $ref: '#/components/schemas/Country'
        '400':
          description: A query parameter could not be used. The body says why.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: Not found, with a plain message and, for a name or alias, the code to use.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '429':
          description: Too many requests. Wait the number of seconds in Retry-After.
          headers:
            Retry-After:
              schema:
                type: integer
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      operationId: getCountry
      tags:
      - Countries
components:
  schemas:
    CountrySummary:
      type: object
      properties:
        iso3:
          type: string
        iso2:
          type:
          - string
          - 'null'
        name:
          type: string
        region:
          type: string
        overall:
          type: integer
          minimum: 0
          maximum: 100
          description: Overall score out of 100.
        band:
          type: string
          enum:
          - Poor
          - Weak
          - Mixed
          - Strong
          - Leading
        rank:
          type:
          - integer
          - 'null'
          description: 'Rank among all countries and territories. Tied countries share a number (1, 2, 2, 4). Null for the lead group: allowing for scoring error, any of them could rank first.'
        tieRange:
          type: object
          properties:
            low:
              type: integer
            high:
              type: integer
          description: The overall scores that tie with this one (4 or fewer points away). A tie never changes a band.
        rankTied:
          type:
          - boolean
          - 'null'
          description: Whether the rank is shared. Null for the lead group, which has no rank.
        leadGroup:
          type: boolean
        likelyRank:
          type:
          - object
          - 'null'
          properties:
            low:
              type: integer
            high:
              type: integer
          required:
          - low
          - high
          description: 'The 90% likely rank range: in 90% of simulations the country ranks between low and high.'
        likelyRankText:
          type:
          - string
          - 'null'
          description: The same range in words, like "50 to 60".
        confidence:
          type: string
          enum:
          - high
          - medium
          - low
        keysModel:
          type: string
          enum:
          - Individual
          - Shared
          - Institutional
          - State
        apiUrl:
          type: string
          description: This country in the API.
        pageUrl:
          type: string
    Case:
      type: object
      properties:
        date:
          type: string
        headline:
          type: string
        paraphrase:
          type: string
        source:
          type: string
        url:
          type: string
        archiveUrl:
          type: string
          description: 'Optional: a Wayback Machine copy of the source, saved when the case was published.'
        theme:
          type: string
        status:
          type: string
          enum:
          - finding
          - admitted
          - alleged
          - self_reported
        id:
          type: string
          description: 'The case id, like FIN-S001: it never changes and is never given to another case.'
        pageUrl:
          type: string
          description: The case on /real-cases/, the address to cite.
        countryUrl:
          type: string
          description: The country brief.
        why:
          type: string
          description: Why it matters to patients, in our words.
        sourceType:
          type: string
          enum:
          - regulator_decision
          - court_judgment
          - parliament_testimony
          - journalism
          - advocacy_case
          - own_blog
          description: The kind of source.
        lang:
          type: string
          description: Two-letter code of the source's language. Our summary is always English (inLanguage).
        providerName:
          type: string
          description: 'Optional: the hospital, company or other organization, named only when a regulator or court decided against it or it admitted the problem itself.'
        lastVerified:
          type: string
          format: date
          description: When the case was last checked against its source.
        addedOn:
          type: string
          format: date
          description: The day the case was added to the index; cases already in it when it was published carry October 2, 2026.
        archivedOn:
          type: string
          format: date
          description: 'Optional: the day the archived copy was made.'
        inLanguage:
          type: string
          description: 'The language of our headline and summary: en.'
    Error:
      allOf:
      - $ref: '#/components/schemas/Envelope'
      - type: object
        properties:
          data:
            type: 'null'
          error:
            type: object
            properties:
              status:
                type: integer
              code:
                type: string
                enum:
                - not_found
                - not_rated
                - use_code
                - not_covered
                - bad_request
                - method_not_allowed
                - rate_limited
                - server_error
                - gone
              message:
                type: string
              suggestions:
                type: array
                items:
                  type: object
                  properties:
                    code:
                      type: string
                    name:
                      type: string
                    url:
                      type: string
              removed:
                type: object
                properties:
                  id:
                    type: string
                  removedOn:
                    type: string
                  removalClass:
                    type: string
                    enum:
                    - window
                    - withdrawn
                description: 'A case taken down (410 only): its id, the day and why, as a class: past the two-year window (window) or withdrawn (withdrawn). Nothing else about the case is kept.'
            required:
            - status
            - code
            - message
    Category:
      type: object
      properties:
        name:
          type: string
        weight:
          type: integer
        score:
          type: integer
        summary:
          type: string
        detail:
          type: array
          items:
            type: string
          description: The longer review, one paragraph per item.
        sources:
          type: array
          items:
            $ref: '#/components/schemas/Source'
    Country:
      allOf:
      - $ref: '#/components/schemas/CountrySummary'
      - type: object
        properties:
          tiedWith:
            type: array
            items:
              type: string
            description: 'ISO3 codes of the countries whose overall score is 4 or fewer points away: treat them as the same. A tie never changes a band.'
          verdict:
            type: string
            description: 'One line: the name, the overall score out of 100, the band and what the band means. Give this first.'
          keySources:
            type: array
            items:
              type: object
              properties:
                title:
                  type: string
                url:
                  type: string
                date:
                  type: string
                category:
                  type: string
            description: Up to five official, legal or intergovernmental sources behind the scores, the ones to cite first. Titles are third-party text.
          dataAsOf:
            type: string
            description: When this country was last researched.
          rankText:
            type: string
          headline:
            type: string
          confidenceDetail:
            type: object
            properties:
              label:
                type: string
              thinEvidenceOn:
                type: array
                items:
                  type: string
              note:
                type:
                - string
                - 'null'
          keysModelPlain:
            type: string
          evidenceGrade:
            type:
            - object
            - 'null'
            properties:
              grade:
                type: integer
              tier:
                type: string
              tierCapped:
                type: boolean
              underReview:
                type: array
                items:
                  type: string
          categories:
            type: object
            description: The eight categories, keyed access, control, privacy, journey, commercial, clinical, research, ai.
            additionalProperties:
              $ref: '#/components/schemas/Category'
          laws:
            type: array
            items:
              type: object
              properties:
                name:
                  type: string
                jurisdiction:
                  type: string
                  description: National, Supranational, State/Provincial or Regional.
                yearText:
                  type:
                  - string
                  - 'null'
                  description: The year as recorded, which may be a range or a note such as "undated".
                what:
                  type: string
                url:
                  type: string
          news:
            type: array
            items:
              type: object
              properties:
                date:
                  type: string
                headline:
                  type: string
                source:
                  type: string
                url:
                  type: string
                why:
                  type: string
            description: 'What changed: recent news about health records in this country.'
          cases:
            type: array
            items:
              $ref: '#/components/schemas/Case'
          casesUrl:
            type: string
    Envelope:
      type: object
      properties:
        api:
          const: v1
        version:
          type: string
          description: The index (data) version, like 1.0. Not the API version, which is api.
        asOf:
          type: string
          format: date
          description: The release date of the data, the same on every route. A country or state also carries its own date in data.
        dataSha256:
          type: string
          description: 'The release hash: SHA-256 of the country files behind the scores; the paper records the same hash. State answers are covered by statesSha256.'
        statesSha256:
          type: string
          description: 'State routes only: SHA-256 of the state files.'
        casesSha256:
          type: string
          description: 'Country and case routes: SHA-256 of the real cases, which the weekly refresh can change while dataSha256 stays the same.'
        casesAsOf:
          type: string
          format: date
          description: 'Country and case routes: the day the real cases last changed (a case added or taken off), from the changes journal. The index asOf is the data date and stays separate.'
        license:
          $ref: '#/components/schemas/License'
        citation:
          type: string
          description: How to cite the index.
        pageUrl:
          type: string
          description: The page on healthrecordrights.com that shows the same thing.
        data: {}
      required:
      - api
      - version
      - asOf
      - dataSha256
      - license
      - citation
      - pageUrl
      - data
    Source:
      type: object
      properties:
        title:
          type: string
          description: 'The page title as published: third-party text, not relicensed; MCP answers wrap it in [quoted] ... [/quoted].'
        url:
          type: string
        date:
          type: string
        publisherClass:
          type: string
    License:
      type: object
      properties:
        id:
          type: string
        url:
          type: string
        credit:
          type: string
        covers:
          type: string
        excludes:
          type: string
      required:
      - id
      - url
      - credit