{
    "openapi": "3.1.0",
    "info": {
        "title": "OurHouse API for agencies and agents",
        "version": "1.0.0",
        "description": "Search listings on OurHouse and look up neighbourhood data such as nearby schools, shops and transport, for your own tools and listing material.\n\n## Getting an API key\n\n1. Log in to OurHouse and go to **Account settings \u2192 API keys**.\n2. Name the key, choose when it expires and pick its scopes.\n3. Copy the key straight away. It's only shown once.\n\nSend it with every request:\n\n```\nAuthorization: Bearer <your key>\nAccept: application/json\n```\n\nPress **Authorize** and paste your key to try requests on this page. **Try it out** sends real requests to your account, so anything you create is really created.\n\n## Scopes\n\nEach key only does what its scopes allow. A request outside them gets a `403`.\n\n| Scope | Allows |\n|---|---|\n| `watchlists:read` | Watchlists (read) |\n| `watchlists:write` | Watchlists (write) |\n| `properties:read` | Properties (read) |\n| `properties:write` | Properties (write) |\n| `pois:read` | Points of interest (read) |\n\n## Responses and errors\n\nEverything is JSON. Errors always have a `message` you can show to a person:\n\n- `401`. The key is missing, wrong, revoked or expired.\n- `403`. The key lacks a scope, you can't change that thing, or a plan limit was reached (with `plan_limit` and `upgrade_url`).\n- `404`. It doesn't exist, or you can't see it.\n- `422`. Validation failed; `errors` lists the problems for each field.\n- `429`. Too many requests; wait a minute and retry.\n\nEach key's requests are logged, and you can see its usage in Account settings \u2192 API keys.\n\n## What agency accounts can do\n\nAgency owners, admins and agents create keys in the same place, under their own login. Today the API covers searching listings and neighbourhood data. Managing listings, open homes, agents, branches and appraisal leads isn't available through the API yet. Use the agency pages in the app for those. New endpoints will appear here as they're added.",
        "contact": {
            "name": "OurHouse",
            "url": "https://visitourhouse.nz"
        }
    },
    "servers": [
        {
            "url": "https://visitourhouse.nz/api",
            "description": "OurHouse"
        }
    ],
    "tags": [
        {
            "name": "Account",
            "description": "Who the API key belongs to, and creating more keys."
        },
        {
            "name": "Properties",
            "description": "Searching properties, and saving private ones."
        },
        {
            "name": "Places nearby",
            "description": "Points of interest from OpenStreetMap: schools, shops, parks, transport and more."
        },
        {
            "name": "Status",
            "description": "Checking the API is up."
        }
    ],
    "paths": {
        "/health": {
            "get": {
                "operationId": "api.health",
                "tags": [
                    "Status"
                ],
                "summary": "Check the API is up",
                "description": "Doesn't need an API key. Returns 200 while the API is serving requests.",
                "responses": {
                    "200": {
                        "description": "The API is up.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Health"
                                }
                            }
                        }
                    }
                },
                "security": [],
                "x-scopes": []
            }
        },
        "/me": {
            "get": {
                "operationId": "api.me",
                "tags": [
                    "Account"
                ],
                "summary": "Get the account the key belongs to",
                "description": "Works with any valid API key, whatever its scopes. Useful for checking a key and showing whose account is connected.",
                "responses": {
                    "200": {
                        "description": "The account.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/User"
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthenticated"
                    }
                },
                "x-scopes": []
            }
        },
        "/api-keys": {
            "post": {
                "operationId": "api.api-keys.store",
                "tags": [
                    "Account"
                ],
                "summary": "Create another API key",
                "description": "Creates a new key for the same account. For example so each device or tool has its own key you can revoke separately.\n\nThe new key is returned **once**, in `token`. Store it securely. If you leave out `abilities`, the key gets every scope.\n\nA key can't create other keys. Calls that use an API key get a `403`; create new keys from Account settings instead.",
                "requestBody": {
                    "required": false,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "name": {
                                        "type": "string",
                                        "maxLength": 80,
                                        "description": "A label you'll recognise in Account settings. Defaults to `chrome-app`.",
                                        "example": "Spreadsheet sync"
                                    },
                                    "expires_at": {
                                        "type": "string",
                                        "format": "date-time",
                                        "description": "When the key stops working. Leave out for a key that doesn't expire.",
                                        "example": "2027-01-31T00:00:00+13:00"
                                    },
                                    "abilities": {
                                        "type": "array",
                                        "items": {
                                            "$ref": "#/components/schemas/Scope"
                                        },
                                        "description": "The scopes to give the key.",
                                        "example": [
                                            "watchlists:read",
                                            "properties:read"
                                        ]
                                    }
                                }
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "The key was created.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/NewApiKey"
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthenticated"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "422": {
                        "$ref": "#/components/responses/ValidationFailed"
                    }
                },
                "x-scopes": []
            }
        },
        "/properties": {
            "get": {
                "operationId": "api.properties.index",
                "tags": [
                    "Properties"
                ],
                "summary": "Search properties",
                "description": "Every public property, plus private properties you created, newest first. `search` matches the address, title, suburb, region and tags.\n\n**Scopes needed:** `properties:read`.",
                "parameters": [
                    {
                        "name": "search",
                        "in": "query",
                        "required": false,
                        "schema": {
                            "type": "string",
                            "maxLength": 120
                        },
                        "example": "Ponsonby"
                    },
                    {
                        "name": "per_page",
                        "in": "query",
                        "required": false,
                        "schema": {
                            "type": "integer",
                            "minimum": 1,
                            "maximum": 50,
                            "default": 20
                        }
                    },
                    {
                        "name": "page",
                        "in": "query",
                        "required": false,
                        "schema": {
                            "type": "integer",
                            "minimum": 1,
                            "default": 1
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "A page of properties.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "required": [
                                        "data",
                                        "meta"
                                    ],
                                    "properties": {
                                        "data": {
                                            "type": "array",
                                            "items": {
                                                "$ref": "#/components/schemas/Property"
                                            }
                                        },
                                        "meta": {
                                            "$ref": "#/components/schemas/PageMeta"
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthenticated"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "422": {
                        "$ref": "#/components/responses/ValidationFailed"
                    }
                },
                "x-scopes": [
                    "properties:read"
                ]
            }
        },
        "/pois": {
            "get": {
                "operationId": "api.pois.index",
                "tags": [
                    "Places nearby"
                ],
                "summary": "Find places near a point",
                "description": "Points of interest within `radius` metres of a point, nearest first. Filter by `categories` and/or `subcategories` (comma-separated).\n\nData \u00a9 OpenStreetMap contributors. Show the `meta.attribution` text wherever you display the results.\n\n**Scopes needed:** `pois:read`.",
                "parameters": [
                    {
                        "name": "lat",
                        "in": "query",
                        "required": true,
                        "description": "Latitude.",
                        "schema": {
                            "type": "number",
                            "minimum": -90,
                            "maximum": 90
                        },
                        "example": -36.8485
                    },
                    {
                        "name": "lon",
                        "in": "query",
                        "required": true,
                        "description": "Longitude.",
                        "schema": {
                            "type": "number",
                            "minimum": -180,
                            "maximum": 180
                        },
                        "example": 174.7633
                    },
                    {
                        "name": "radius",
                        "in": "query",
                        "required": false,
                        "description": "Search radius in metres.",
                        "schema": {
                            "type": "integer",
                            "minimum": 1,
                            "maximum": 20000,
                            "default": 2000
                        }
                    },
                    {
                        "name": "categories",
                        "in": "query",
                        "required": false,
                        "description": "Comma-separated categories. Allowed: `food_drink`, `shopping`, `transport`, `automotive`, `essential_services`, `health`, `accommodation`, `attractions`, `culture`, `heritage`, `nature`, `outdoor_recreation`, `family`, `sport`, `leisure`, `camping`, `wildlife`, `beauty_wellness`, `business`, `education`, `religion`, `agriculture`.",
                        "schema": {
                            "type": "string"
                        },
                        "example": "education,food_drink"
                    },
                    {
                        "name": "subcategories",
                        "in": "query",
                        "required": false,
                        "description": "Comma-separated subcategories. See the `Subcategory` schema for allowed values.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "limit",
                        "in": "query",
                        "required": false,
                        "description": "Most results to return.",
                        "schema": {
                            "type": "integer",
                            "minimum": 1,
                            "maximum": 200,
                            "default": 50
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Places nearby.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "required": [
                                        "data",
                                        "meta"
                                    ],
                                    "properties": {
                                        "data": {
                                            "type": "array",
                                            "items": {
                                                "$ref": "#/components/schemas/Poi"
                                            }
                                        },
                                        "meta": {
                                            "$ref": "#/components/schemas/PoiSearchMeta"
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthenticated"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "422": {
                        "$ref": "#/components/responses/ValidationFailed"
                    }
                },
                "x-scopes": [
                    "pois:read"
                ]
            }
        },
        "/pois/nearest": {
            "get": {
                "operationId": "api.pois.nearest",
                "tags": [
                    "Places nearby"
                ],
                "summary": "Find the nearest place of one kind",
                "description": "The single nearest point of interest of a subcategory. For example the nearest supermarket or primary school. Within `radius` metres. `data` is `null` when there isn't one.\n\n**Scopes needed:** `pois:read`.",
                "parameters": [
                    {
                        "name": "lat",
                        "in": "query",
                        "required": true,
                        "description": "Latitude.",
                        "schema": {
                            "type": "number",
                            "minimum": -90,
                            "maximum": 90
                        },
                        "example": -36.8485
                    },
                    {
                        "name": "lon",
                        "in": "query",
                        "required": true,
                        "description": "Longitude.",
                        "schema": {
                            "type": "number",
                            "minimum": -180,
                            "maximum": 180
                        },
                        "example": 174.7633
                    },
                    {
                        "name": "subcategory",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "$ref": "#/components/schemas/Subcategory"
                        }
                    },
                    {
                        "name": "radius",
                        "in": "query",
                        "required": false,
                        "description": "Search radius in metres.",
                        "schema": {
                            "type": "integer",
                            "minimum": 1,
                            "maximum": 20000,
                            "default": 20000
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "The nearest place, or null.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "required": [
                                        "data",
                                        "meta"
                                    ],
                                    "properties": {
                                        "data": {
                                            "oneOf": [
                                                {
                                                    "$ref": "#/components/schemas/Poi"
                                                },
                                                {
                                                    "type": "null"
                                                }
                                            ]
                                        },
                                        "meta": {
                                            "$ref": "#/components/schemas/PoiNearestMeta"
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#/components/responses/Unauthenticated"
                    },
                    "403": {
                        "$ref": "#/components/responses/Forbidden"
                    },
                    "422": {
                        "$ref": "#/components/responses/ValidationFailed"
                    }
                },
                "x-scopes": [
                    "pois:read"
                ]
            }
        }
    },
    "components": {
        "securitySchemes": {
            "apiKey": {
                "type": "http",
                "scheme": "bearer",
                "bearerFormat": "OurHouse API key",
                "description": "Create a key in Account settings \u2192 API keys, then send it as `Authorization: Bearer <key>`."
            }
        },
        "schemas": {
            "Category": {
                "type": "string",
                "enum": [
                    "food_drink",
                    "shopping",
                    "transport",
                    "automotive",
                    "essential_services",
                    "health",
                    "accommodation",
                    "attractions",
                    "culture",
                    "heritage",
                    "nature",
                    "outdoor_recreation",
                    "family",
                    "sport",
                    "leisure",
                    "camping",
                    "wildlife",
                    "beauty_wellness",
                    "business",
                    "education",
                    "religion",
                    "agriculture"
                ],
                "description": "A point-of-interest category."
            },
            "Error": {
                "type": "object",
                "required": [
                    "message"
                ],
                "properties": {
                    "message": {
                        "type": "string",
                        "description": "A sentence you can show to a person."
                    }
                }
            },
            "Health": {
                "type": "object",
                "required": [
                    "status",
                    "app",
                    "time"
                ],
                "properties": {
                    "status": {
                        "type": "string",
                        "enum": [
                            "ok"
                        ]
                    },
                    "app": {
                        "type": "string",
                        "example": "OurHouse"
                    },
                    "time": {
                        "type": "string",
                        "format": "date-time"
                    }
                }
            },
            "NewApiKey": {
                "type": "object",
                "required": [
                    "token",
                    "token_id",
                    "name",
                    "abilities",
                    "expires_at"
                ],
                "properties": {
                    "token": {
                        "type": "string",
                        "description": "The key. Shown only this once.",
                        "example": "42|8hN2\u2026"
                    },
                    "token_id": {
                        "type": "integer"
                    },
                    "name": {
                        "type": "string"
                    },
                    "abilities": {
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/Scope"
                        }
                    },
                    "expires_at": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "format": "date-time"
                    }
                }
            },
            "PageMeta": {
                "type": "object",
                "required": [
                    "current_page",
                    "last_page",
                    "per_page",
                    "total"
                ],
                "properties": {
                    "current_page": {
                        "type": "integer"
                    },
                    "last_page": {
                        "type": "integer"
                    },
                    "per_page": {
                        "type": "integer"
                    },
                    "total": {
                        "type": "integer"
                    }
                }
            },
            "Poi": {
                "type": "object",
                "required": [
                    "id",
                    "name",
                    "category",
                    "subcategory",
                    "location",
                    "distance_m",
                    "address",
                    "contact",
                    "links",
                    "opening_hours",
                    "features",
                    "source"
                ],
                "properties": {
                    "id": {
                        "type": "string"
                    },
                    "name": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "example": "Ponsonby Primary School"
                    },
                    "category": {
                        "oneOf": [
                            {
                                "$ref": "#/components/schemas/Category"
                            },
                            {
                                "type": "null"
                            }
                        ]
                    },
                    "subcategory": {
                        "oneOf": [
                            {
                                "$ref": "#/components/schemas/Subcategory"
                            },
                            {
                                "type": "null"
                            }
                        ]
                    },
                    "location": {
                        "type": "object",
                        "required": [
                            "latitude",
                            "longitude"
                        ],
                        "properties": {
                            "latitude": {
                                "type": "number"
                            },
                            "longitude": {
                                "type": "number"
                            }
                        }
                    },
                    "distance_m": {
                        "type": "integer",
                        "description": "Metres from the point you searched from."
                    },
                    "address": {
                        "type": "object",
                        "required": [
                            "street",
                            "suburb",
                            "city",
                            "postcode"
                        ],
                        "properties": {
                            "street": {
                                "type": [
                                    "string",
                                    "null"
                                ]
                            },
                            "suburb": {
                                "type": [
                                    "string",
                                    "null"
                                ]
                            },
                            "city": {
                                "type": [
                                    "string",
                                    "null"
                                ]
                            },
                            "postcode": {
                                "type": [
                                    "string",
                                    "null"
                                ]
                            }
                        }
                    },
                    "contact": {
                        "type": "object",
                        "required": [
                            "phone"
                        ],
                        "properties": {
                            "phone": {
                                "type": [
                                    "string",
                                    "null"
                                ]
                            }
                        }
                    },
                    "links": {
                        "type": "object",
                        "required": [
                            "website"
                        ],
                        "properties": {
                            "website": {
                                "oneOf": [
                                    {
                                        "$ref": "#/components/schemas/PoiWebsite"
                                    },
                                    {
                                        "type": "null"
                                    }
                                ]
                            }
                        }
                    },
                    "opening_hours": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "description": "In OpenStreetMap `opening_hours` format.",
                        "example": "Mo-Fr 08:30-15:00"
                    },
                    "features": {
                        "type": "object",
                        "additionalProperties": true,
                        "description": "Extra OpenStreetMap tags, such as wheelchair access."
                    },
                    "source": {
                        "type": "object",
                        "required": [
                            "provider",
                            "id",
                            "osm_type",
                            "osm_id"
                        ],
                        "properties": {
                            "provider": {
                                "type": [
                                    "string",
                                    "null"
                                ],
                                "example": "osm"
                            },
                            "id": {
                                "type": [
                                    "string",
                                    "null"
                                ]
                            },
                            "osm_type": {
                                "type": [
                                    "string",
                                    "null"
                                ]
                            },
                            "osm_id": {
                                "type": [
                                    "integer",
                                    "null"
                                ]
                            }
                        }
                    }
                }
            },
            "PoiNearestMeta": {
                "type": "object",
                "required": [
                    "lat",
                    "lon",
                    "radius_m",
                    "attribution"
                ],
                "properties": {
                    "lat": {
                        "type": "number"
                    },
                    "lon": {
                        "type": "number"
                    },
                    "radius_m": {
                        "type": "integer"
                    },
                    "attribution": {
                        "type": "string"
                    }
                }
            },
            "PoiSearchMeta": {
                "type": "object",
                "required": [
                    "lat",
                    "lon",
                    "radius_m",
                    "count",
                    "attribution"
                ],
                "properties": {
                    "lat": {
                        "type": "number"
                    },
                    "lon": {
                        "type": "number"
                    },
                    "radius_m": {
                        "type": "integer"
                    },
                    "count": {
                        "type": "integer"
                    },
                    "attribution": {
                        "type": "string",
                        "example": "\u00a9 OpenStreetMap contributors"
                    }
                }
            },
            "PoiWebsite": {
                "type": "object",
                "required": [
                    "url",
                    "canonical_url"
                ],
                "properties": {
                    "url": {
                        "type": "string",
                        "format": "uri",
                        "description": "Link to use, which tells the site the visitor came from OurHouse."
                    },
                    "canonical_url": {
                        "type": "string",
                        "format": "uri",
                        "description": "The website exactly as recorded."
                    }
                }
            },
            "Property": {
                "type": "object",
                "required": [
                    "id",
                    "title",
                    "address",
                    "suburb",
                    "region",
                    "property_type",
                    "bedrooms",
                    "bathrooms",
                    "build_decade",
                    "asking_price",
                    "primary_image",
                    "latitude",
                    "longitude",
                    "is_private",
                    "created_at"
                ],
                "properties": {
                    "id": {
                        "type": "string",
                        "format": "uuid"
                    },
                    "title": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "address": {
                        "type": "string",
                        "example": "12 Example Street, Ponsonby, Auckland"
                    },
                    "suburb": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "example": "Ponsonby"
                    },
                    "region": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "example": "Auckland"
                    },
                    "property_type": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "example": "House"
                    },
                    "bedrooms": {
                        "type": [
                            "integer",
                            "null"
                        ]
                    },
                    "bathrooms": {
                        "type": [
                            "integer",
                            "null"
                        ]
                    },
                    "build_decade": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "example": "1920s"
                    },
                    "asking_price": {
                        "type": [
                            "string",
                            "number",
                            "null"
                        ],
                        "description": "Asking price in NZD. Usually a decimal string such as `\"950000.00\"`.",
                        "example": "950000.00"
                    },
                    "primary_image": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "description": "Path or URL of the main photo."
                    },
                    "latitude": {
                        "type": [
                            "number",
                            "null"
                        ]
                    },
                    "longitude": {
                        "type": [
                            "number",
                            "null"
                        ]
                    },
                    "is_private": {
                        "type": "boolean",
                        "description": "True for private properties only you can see."
                    },
                    "created_at": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "format": "date-time"
                    }
                }
            },
            "Scope": {
                "type": "string",
                "enum": [
                    "watchlists:read",
                    "watchlists:write",
                    "properties:read",
                    "properties:write",
                    "pois:read"
                ],
                "description": "An API key scope."
            },
            "Subcategory": {
                "type": "string",
                "enum": [
                    "restaurant",
                    "cafe",
                    "fast_food",
                    "bar",
                    "pub",
                    "bakery",
                    "supermarket",
                    "convenience_store",
                    "department_store",
                    "shopping_centre",
                    "clothing_store",
                    "electronics_store",
                    "furniture_store",
                    "other_shop",
                    "bus_stop",
                    "bus_station",
                    "train_station",
                    "train_halt",
                    "tram_stop",
                    "ferry_terminal",
                    "airport",
                    "taxi_stand",
                    "petrol_station",
                    "ev_charger",
                    "car_park",
                    "car_wash",
                    "car_repair",
                    "car_dealership",
                    "car_rental",
                    "bank",
                    "atm",
                    "post_office",
                    "police_station",
                    "fire_station",
                    "toilets",
                    "government_office",
                    "doctor",
                    "dentist",
                    "pharmacy",
                    "hospital",
                    "medical_centre",
                    "veterinary",
                    "hotel",
                    "motel",
                    "hostel",
                    "guest_house",
                    "apartment",
                    "viewpoint",
                    "theme_park",
                    "attraction",
                    "museum",
                    "art_gallery",
                    "theatre",
                    "cinema",
                    "library",
                    "community_centre",
                    "arts_centre",
                    "monument",
                    "memorial",
                    "castle",
                    "archaeological_site",
                    "historic_site",
                    "beach",
                    "waterfall",
                    "forest",
                    "park",
                    "recreation_ground",
                    "hiking",
                    "picnic_site",
                    "playground",
                    "water_park",
                    "golf",
                    "gym",
                    "swimming_pool",
                    "sports_centre",
                    "stadium",
                    "bowling_alley",
                    "amusement_arcade",
                    "nightclub",
                    "casino",
                    "campsite",
                    "caravan_park",
                    "zoo",
                    "aquarium",
                    "nature_reserve",
                    "wildlife_hide",
                    "hairdresser",
                    "beauty_salon",
                    "spa",
                    "massage",
                    "office",
                    "coworking_space",
                    "real_estate_agency",
                    "insurance_office",
                    "school",
                    "kindergarten",
                    "childcare",
                    "university",
                    "college",
                    "place_of_worship",
                    "cemetery",
                    "farm_shop",
                    "winery",
                    "vineyard"
                ],
                "description": "A point-of-interest subcategory."
            },
            "User": {
                "type": "object",
                "required": [
                    "id",
                    "name",
                    "first_name",
                    "last_name",
                    "email",
                    "city",
                    "country",
                    "avatar_url",
                    "created_at",
                    "updated_at"
                ],
                "properties": {
                    "id": {
                        "type": "string",
                        "format": "uuid"
                    },
                    "name": {
                        "type": "string",
                        "example": "Aroha Smith"
                    },
                    "first_name": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "example": "Aroha"
                    },
                    "last_name": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "example": "Smith"
                    },
                    "email": {
                        "type": "string",
                        "format": "email"
                    },
                    "city": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "example": "Auckland"
                    },
                    "country": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "example": "New Zealand"
                    },
                    "avatar_url": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "format": "uri"
                    },
                    "created_at": {
                        "type": "string",
                        "format": "date-time"
                    },
                    "updated_at": {
                        "type": "string",
                        "format": "date-time"
                    }
                }
            },
            "ValidationError": {
                "type": "object",
                "required": [
                    "message",
                    "errors"
                ],
                "properties": {
                    "message": {
                        "type": "string"
                    },
                    "errors": {
                        "type": "object",
                        "description": "Messages for each field that failed, keyed by field name.",
                        "additionalProperties": {
                            "type": "array",
                            "items": {
                                "type": "string"
                            }
                        },
                        "example": {
                            "name": [
                                "Watchlist name is required."
                            ]
                        }
                    }
                }
            }
        },
        "responses": {
            "Unauthenticated": {
                "description": "The API key is missing, wrong, revoked or expired.",
                "content": {
                    "application/json": {
                        "schema": {
                            "$ref": "#/components/schemas/Error"
                        }
                    }
                }
            },
            "Forbidden": {
                "description": "The API key doesn't have the scope this needs.",
                "content": {
                    "application/json": {
                        "schema": {
                            "$ref": "#/components/schemas/Error"
                        }
                    }
                }
            },
            "ValidationFailed": {
                "description": "Something in the request wasn't valid.",
                "content": {
                    "application/json": {
                        "schema": {
                            "$ref": "#/components/schemas/ValidationError"
                        }
                    }
                }
            }
        }
    },
    "security": [
        {
            "apiKey": []
        }
    ]
}