findadoctor-si Gp Practices API

The Gp Practices API from findadoctor-si — 1 operation(s) for gp practices.

Operations 1

GET /api/v1/gp-practices New Zealand general practices near a place, with enrolment status and fees #

Documentation

Specifications

Schemas & Data

Other Resources

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/findadoctor-si:findadoctor-si-gp-practices-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

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

findadoctor-si-gp-practices-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: FindADoctor.si New Zealand Gp Practices API
  version: nz-2026-10-15.2
  description: Read-only JSON API with the same tools as the MCP server. No sign-up needed. Not medical advice; in an emergency call 111. Responses list the main fields (components.schemas); other fields may appear, so ignore fields you do not know. Fields without data are left out.
  x-llms-txt: https://api-nz.findadoctor.si/llms.txt
servers:
- url: https://api-nz.findadoctor.si
security:
- {}
- accountKey: []
tags:
- name: Gp Practices
paths:
  /api/v1/gp-practices:
    get:
      operationId: searchGpPractices
      summary: New Zealand general practices near a place, with enrolment status and fees
      description: 'Free list of New Zealand general practices (GP clinics), or urgent care clinics, near a place, from Healthpoint. Use it when the person needs a GP, wants to enrol with a practice, or needs urgent but not emergency care. Each practice: whether it says it is enrolling new patients (yes; restricted = only some people, e.g. family of patients or people living nearby; no; does not apply = urgent care that does not enrol; unknown = the page does not say), the practice''s own enrolment note, its fee table (the first fee table on its page, usually fees for enrolled patients by age, without and with a Community Services Card; with age, the row for that age), addresses, phone numbers, website, online booking link, languages, hours, the doctors listed there (doctor_ids for get_doctor) and the date Healthpoint says the page was last updated. In New Zealand most people enrol with one general practice: visits cost less once enrolled, and a GP referral is the usual way to a public specialist. Give place or name. Practices are not doctors, so this does not count toward the daily doctor limit. Enrolment and fees change often: tell the person to phone the practice to confirm.'
      parameters:
      - name: place
        in: query
        required: false
        description: New Zealand city, suburb or region (e.g. 'Papanui', 'Hamilton', 'North Shore', 'Canterbury').
        schema:
          type: string
          maxLength: 200
      - name: name
        in: query
        required: false
        description: Practice name or part of it, to check a named practice.
        schema:
          type: string
          maxLength: 200
      - name: enrolling
        in: query
        required: false
        description: yes = only practices that say they are enrolling new patients; yes_or_restricted also keeps practices enrolling only some people (read enrolling_note). Default any (enrolling practices come first).
        schema:
          type: string
          enum:
          - any
          - 'yes'
          - yes_or_restricted
      - name: age
        in: query
        required: false
        description: 'The patient''s age: each result then shows the fee row for that age.'
        schema:
          type: integer
          minimum: 0
          maximum: 120
      - name: language
        in: query
        required: false
        description: Language other than English the practice lists, e.g. 'Mandarin', 'Samoan', 'te reo Maori'.
        schema:
          type: string
          maxLength: 200
      - name: kind
        in: query
        required: false
        description: gp = general practices (default; also nurse-led, online, student and rest-home practices, named so in each result's kind); urgent_care = accident and urgent medical care and after-hours clinics (no enrolment needed); any = both.
        schema:
          type: string
          enum:
          - gp
          - urgent_care
          - any
      - name: limit
        in: query
        required: false
        description: Default 10.
        schema:
          type: integer
          minimum: 1
          maximum: 10
      - name: offset
        in: query
        required: false
        description: For paging (at most 40).
        schema:
          type: integer
          minimum: 0
          maximum: 40
      responses:
        '200':
          description: JSON result (same as the MCP tool's result)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GpResult'
        '400':
          description: 'bad arguments, or the search was too broad (too_slow): the message says what to change'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: 'the Authorization header was sent but is invalid or expired (invalid_token): send no header or a valid account key'
          headers:
            WWW-Authenticate:
              schema:
                type: string
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '429':
          description: rate_limited (too many requests) or daily_limit (daily doctor limit reached); the message says when it resets
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
          headers:
            Retry-After:
              description: seconds to wait
              schema:
                type: integer
        '500':
          description: internal error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '503':
          description: 'busy or starting (busy, unavailable): retry after Retry-After'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
          headers:
            Retry-After:
              description: seconds to wait
              schema:
                type: integer
      tags:
      - Gp Practices
components:
  schemas:
    GpResult:
      type: object
      properties:
        provider:
          $ref: '#/components/schemas/Provider'
        total_matches:
          type: integer
        offset:
          type: integer
        enrolling_counts:
          type: object
          description: matches by enrolling status
        results:
          type: array
          items:
            $ref: '#/components/schemas/GpPractice'
        explain:
          type: string
        next_step:
          type: string
        note:
          type: string
    Error:
      type: object
      properties:
        error:
          type: string
          description: bad_args, too_slow, daily_limit, rate_limited, busy, unavailable, sign_in_required, invalid_token, cross_site, not_found, internal
        message:
          type: string
          description: what to change or when to retry
    GpPractice:
      type: object
      properties:
        rank:
          type: integer
        practice:
          type: string
        kind:
          type: string
          enum:
          - general practice
          - urgent care
        enrolling:
          type: string
          enum:
          - 'yes'
          - restricted
          - 'no'
          - does not apply
          - unknown
          description: yes, restricted (only some people), no, does not apply (urgent care), unknown
        enrolling_note:
          type: string
          description: the practice's own words about enrolment
        place_match:
          type: string
          enum:
          - city_or_address
          - city_in_region
          - address_contains
          - region_page_only
        locations:
          type: array
          items:
            type: object
            properties:
              address:
                type: string
              region:
                type: string
              phone:
                type: string
              website:
                type: string
        fees:
          type: array
          items:
            $ref: '#/components/schemas/FeeRow'
        fee_for_age:
          type: object
          description: 'with age: the fee row for that age'
        online_booking:
          type: string
        website:
          type: string
        hours:
          type: array
          items:
            type: string
        languages:
          type: array
          items:
            type: string
        languages_note:
          type: string
        doctors:
          type: array
          items:
            type: object
            properties:
              doctor_id:
                type: string
                pattern: ^nz_[0-9a-z]{12}$
                description: use with get_doctor
              name:
                type: string
        doctors_listed:
          type: integer
        healthpoint:
          type: string
          description: the practice's Healthpoint page
        page_last_updated:
          type: string
    Provider:
      type: object
      properties:
        name:
          type: string
        url:
          type: string
        data_version:
          type: string
      description: who publishes this data and which build
    FeeRow:
      type: object
      properties:
        ages:
          type: string
        without_csc:
          type: string
        with_csc:
          type: string
          description: Community Services Card holders
      description: one row of the practice's fee table (usually fees for enrolled patients)
  securitySchemes:
    accountKey:
      type: http
      scheme: bearer
      description: Optional account key (dk_...); accounts are by invitation during the trial.