Postfinder Postcodes API

Postcode lookup, in both directions.

Operations 2

GET /v1/countries/{country}/postcodes Every postcode in a country, grouped by region #
GET /v1/countries/{country}/postcodes/{postcode} Resolve one postcode to the suburbs it covers #

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/postfinder-io:postfinder-io-postcodes-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

postfinder-io-postcodes-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: PostFinder Postcodes API
  version: 1.0.0
  description: 'The directory behind postfinder.io, as an API: post offices, post boxes, parcel lockers, drop off and collection points in Australia, New Zealand, the United Kingdom, the United States and Canada, and the suburbs and postcodes they sit in.'
  contact:
    name: PostFinder
    url: https://postfinder.io/en/contact/
servers:
- url: https://api.postfinder.io
  description: Production
security: []
tags:
- name: Postcodes
  description: Postcode lookup, in both directions.
paths:
  /v1/countries/{country}/postcodes:
    get:
      tags:
      - Postcodes
      operationId: postcodes
      summary: Every postcode in a country, grouped by region
      description: 'The whole index in one response, which is how a postcode list is read and what makes it cacheable. Large for a big country: fetch it once and keep it rather than asking per keystroke.'
      parameters:
      - name: country
        in: path
        required: true
        description: 'Country slug as the site''s URLs use it: australia, new-zealand, united-kingdom, united-states, canada.'
        example: australia
        schema:
          type: string
      responses:
        '200':
          description: The index.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PostcodesResponse'
        '404':
          description: No postcodes held for that country.
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Problem'
  /v1/countries/{country}/postcodes/{postcode}:
    get:
      tags:
      - Postcodes
      operationId: postcodeDetail
      summary: Resolve one postcode to the suburbs it covers
      description: A postcode is not a suburb. 3058 is Coburg, Coburg North and Merlynston, and an address in any of them is written with the same four digits, so this returns all of them, busiest first.
      parameters:
      - name: country
        in: path
        required: true
        description: 'Country slug as the site''s URLs use it: australia, new-zealand, united-kingdom, united-states, canada.'
        example: australia
        schema:
          type: string
      - name: postcode
        in: path
        required: true
        description: Three to five digits.
        example: '3058'
        schema:
          type: string
          pattern: ^[0-9]{3,5}$
      responses:
        '200':
          description: The suburbs this postcode covers.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PostcodeResponse'
        '404':
          description: Not a postcode, or nothing is filed under it.
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Problem'
components:
  schemas:
    PostcodeResponse:
      type: object
      description: One postcode.
      properties:
        data:
          $ref: '#/components/schemas/PostcodeDetail'
        generated_at:
          type: string
          description: When the answer was made. Answers are cached at the edge, so it can be up to an hour old.
          format: date-time
      required:
      - data
      - generated_at
      additionalProperties: false
    PostcodeEntry:
      type: object
      description: A suburb and the postcode people write for it.
      properties:
        postcode:
          type: string
          description: The postcode.
        slug:
          type: string
          description: The URL segment this row has on postfinder.io.
        name:
          type: string
          description: The suburb's name.
        place_count:
          type: integer
          description: Locations held.
      required:
      - postcode
      - slug
      - name
      - place_count
      additionalProperties: false
    PostcodeIndex:
      type: object
      description: Every postcode in a country, grouped by region.
      properties:
        country:
          $ref: '#/components/schemas/Country'
        total:
          type: integer
          description: How many suburbs are listed.
        regions:
          type: array
          description: By region.
          items:
            $ref: '#/components/schemas/RegionPostcodes'
      required:
      - country
      - total
      - regions
      additionalProperties: false
    Country:
      type: object
      description: A country the directory covers.
      properties:
        iso2:
          type: string
          description: ISO 3166-1 alpha-2 code.
        slug:
          type: string
          description: 'The country as postfinder.io''s URLs write it: australia, new-zealand.'
        name:
          type: string
          description: The country's name.
      required:
      - iso2
      - slug
      - name
      additionalProperties: false
    RegionPostcodes:
      type: object
      description: One region's postcodes.
      properties:
        region:
          $ref: '#/components/schemas/Region'
        entries:
          type: array
          description: Its suburbs and their postcodes.
          items:
            $ref: '#/components/schemas/PostcodeEntry'
      required:
      - region
      - entries
      additionalProperties: false
    PostcodeDetail:
      type: object
      description: One postcode and the suburbs it covers.
      properties:
        country:
          $ref: '#/components/schemas/Country'
        region:
          $ref: '#/components/schemas/Region'
        postcode:
          type: string
          description: The postcode.
        total:
          type: integer
          description: Places across every suburb it covers.
        localities:
          type: array
          description: The suburbs it covers, busiest first.
          items:
            $ref: '#/components/schemas/LocalityLink'
      required:
      - country
      - region
      - postcode
      - total
      - localities
      additionalProperties: false
    Region:
      type: object
      description: A state, province or other first level division.
      properties:
        slug:
          type: string
          description: The URL segment this row has on postfinder.io.
        code:
          type: string
          description: 'The short code, where the country has them: VIC, NSW. Absent where it has none.'
        name:
          type: string
          description: The region's name.
      required:
      - slug
      - name
      additionalProperties: false
    PostcodesResponse:
      type: object
      description: The postcode index.
      properties:
        data:
          $ref: '#/components/schemas/PostcodeIndex'
        generated_at:
          type: string
          description: When the answer was made. Answers are cached at the edge, so it can be up to an hour old.
          format: date-time
      required:
      - data
      - generated_at
      additionalProperties: false
    Problem:
      type: object
      description: An RFC 7807 problem. The title says what went wrong and the detail, when present, what to do about it.
      properties:
        type:
          type: string
          description: Always about:blank.
        title:
          type: string
          description: What went wrong, in a few words.
        status:
          type: integer
          description: The HTTP status, repeated.
        detail:
          type: string
          description: What to do about it. May be empty.
      required:
      - type
      - title
      - status
      - detail
      additionalProperties: false
    LocalityLink:
      type: object
      description: Another suburb, with enough to link to its page.
      properties:
        country:
          type: string
          description: Country slug.
        region:
          type: string
          description: Region slug.
        slug:
          type: string
          description: The URL segment this row has on postfinder.io.
        name:
          type: string
          description: The suburb's name.
        place_count:
          type: integer
          description: Locations held.
        distance_km:
          type: number
          description: Distance in kilometres from the suburb asked about; 0 where distance is not the ordering.
      required:
      - country
      - region
      - slug
      - name
      - place_count
      - distance_km
      additionalProperties: false
x-provenance:
  method: harvested
  publisher: Postfinder
  source: https://api.postfinder.io/v1/openapi.json
  note: split by refine-openapis from the provider's own published document, verified by fetch (openapi/_original/*.fetch.json);
    stamped by stamp-openapi-provenance.py (roadmap#793)