{
  "openapi": "3.1.0",
  "info": {
    "title": "Australian home loan rates",
    "version": "1.0.0",
    "summary": "Home loan rates from each Australian bank's own published product data, refreshed daily, with some terms that data leaves out read from the bank's own pages; ranked per purpose, repayment type, LVR, loan amount and rate type.",
    "description": "Rates are published by each bank as public product reference data, as the Consumer Data Right requires, and are reproduced here as reference data with the source URL and the bank's own last-updated timestamp on every row. Rates change without notice and the rate a borrower is offered depends on the bank's assessment; check the bank's page before acting. This is not financial advice. The comparison rate is the bank's own figure. Australian law requires it to be calculated on a $150,000 secured loan over 25 years, including most fees, so it understates the effect of fees on a larger loan.",
    "license": {
      "name": "Deep Almanac's own work CC BY 4.0; source data under its own terms, listed in licences in each index.json",
      "url": "https://deepalmanac.com/terms#data-licences"
    }
  },
  "servers": [
    {
      "url": "https://deepalmanac.com"
    }
  ],
  "security": [],
  "tags": [
    {
      "name": "home-loans",
      "description": "Australian home loan rates from each bank's own published product data."
    }
  ],
  "paths": {
    "/v1/compare/home-loans": {
      "get": {
        "summary": "The best rates at the reader's exact loan and LVR, as JSON",
        "description": "Ranks rows/<purpose>/<repayment>/<kind>.json at the reader's own LVR and loan by the same rule as the best/ slices (each bank's lowest qualifying rate, then comparison rate, then name), gives our comparison rate at that loan and the monthly repayment, and lists every bank left out, with why. Replies 200 with JSON directly, echoing the query; at the published LVRs and loans it gives the same ranking as best/<purpose>/<repayment>/<lvr>/<loan>/<kind>.json.",
        "parameters": [
          {
            "name": "loan",
            "in": "query",
            "required": true,
            "description": "Dollars to borrow.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "price",
            "in": "query",
            "required": false,
            "description": "Property value, for the LVR; or give lvr or deposit.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "purpose",
            "in": "query",
            "required": false,
            "description": "owner_occupied (default) or investment.",
            "schema": {
              "type": "string",
              "enum": [
                "owner_occupied",
                "investment"
              ]
            }
          },
          {
            "name": "repayment",
            "in": "query",
            "required": false,
            "description": "principal_and_interest (default) or interest_only.",
            "schema": {
              "type": "string",
              "enum": [
                "principal_and_interest",
                "interest_only"
              ]
            }
          },
          {
            "name": "rate",
            "in": "query",
            "required": false,
            "description": "variable (default), or fixed with years 1 to 5.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "include",
            "in": "query",
            "required": false,
            "description": "broker, occupation or all: rates left out by default.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "How many banks to return.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 10
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The ranking: query, method_note, banks_ranked, not_ranked, field_notes (what eligibility, who_can_open, conditions and record_stale do and do not say) and results, each with a summary.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "description": "A parameter could not be read; the reply says which and gives an example."
          }
        }
      }
    },
    "/au/finance/home-loans/v1/index.json": {
      "get": {
        "tags": [
          "home-loans"
        ],
        "summary": "Dataset index: files, timestamps and every per-bank file",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "dataset": {
                      "type": "string",
                      "description": "Dataset name."
                    },
                    "page": {
                      "type": "string",
                      "description": "Human-readable page for the dataset.",
                      "format": "uri"
                    },
                    "start_here": {
                      "type": [
                        "object",
                        "null"
                      ],
                      "description": "The small file that answers most questions here: answer_file (a URL template), inputs (how to fill it), example (a filled-in URL) and sometimes also (the next file for a common variant).",
                      "properties": {
                        "answer_file": {
                          "type": "string",
                          "description": "URL template of the answer file."
                        },
                        "inputs": {
                          "type": "string",
                          "description": "What each placeholder takes."
                        },
                        "example": {
                          "type": "string",
                          "description": "A filled-in answer file URL.",
                          "format": "uri"
                        },
                        "also": {
                          "type": "string",
                          "description": "Another file for a common variant of the question."
                        },
                        "lookup": {
                          "type": "string",
                          "description": "Where present: a /v1/lookup URL that takes the reader's own numbers, applies the bucket rules and redirects to the answer file.",
                          "format": "uri"
                        },
                        "compare": {
                          "type": "string",
                          "description": "Where present: a /v1/compare URL that ranks every rate at the reader's exact amount and answers with JSON directly.",
                          "format": "uri"
                        }
                      }
                    },
                    "generated_at": {
                      "type": "string",
                      "description": "When this index was written, UTC, YYYY-MM-DDTHH:MM:SSZ.",
                      "format": "date-time",
                      "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}Z$"
                    },
                    "fetched_at": {
                      "type": "string",
                      "description": "When the source was last fetched, UTC, YYYY-MM-DDTHH:MM:SSZ.",
                      "format": "date-time",
                      "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}Z$"
                    },
                    "data_as_of": {
                      "type": "string",
                      "description": "How current the data is: a date (YYYY-MM-DD) or a UTC timestamp (YYYY-MM-DDTHH:MM:SSZ); data_as_of_basis says what it means here.",
                      "pattern": "^\\d{4}-\\d{2}-\\d{2}(T\\d{2}:\\d{2}:\\d{2}Z)?$"
                    },
                    "data_as_of_basis": {
                      "type": "string",
                      "description": "One sentence saying what data_as_of means for this dataset."
                    },
                    "source": {
                      "type": "string",
                      "description": "Data source statement."
                    },
                    "licence_note": {
                      "type": "string",
                      "description": "Terms of reuse and the not-advice note."
                    },
                    "licences": {
                      "type": "array",
                      "description": "What may be reused and on what terms, layer by layer: each layer's source, the fields it covers, its licence and the attribution it asks for. The last layer is Deep Almanac's own work (CC BY 4.0), covering every field no other layer names. Reusing a field means meeting the terms of the layer that covers it.",
                      "items": {
                        "type": "object",
                        "required": [
                          "layer",
                          "covers",
                          "licence",
                          "licence_url",
                          "attribution"
                        ],
                        "properties": {
                          "layer": {
                            "type": "string",
                            "description": "The source."
                          },
                          "covers": {
                            "type": "string",
                            "description": "The fields it covers."
                          },
                          "licence": {
                            "type": "string",
                            "description": "Its licence, or why there is none."
                          },
                          "licence_url": {
                            "type": [
                              "string",
                              "null"
                            ],
                            "format": "uri",
                            "description": "The licence's own page, where it has one."
                          },
                          "attribution": {
                            "type": "string",
                            "description": "The credit the layer asks for."
                          }
                        }
                      }
                    },
                    "questions": {
                      "type": "string",
                      "description": "This dataset's questions.json: what to ask the reader first and which file answers each.",
                      "format": "uri"
                    },
                    "openapi": {
                      "type": "string",
                      "description": "This dataset's OpenAPI document.",
                      "format": "uri"
                    },
                    "status": {
                      "type": "string",
                      "description": "https://deepalmanac.com/status.json: when every dataset was last fetched and when it counts as overdue.",
                      "format": "uri"
                    },
                    "llms": {
                      "type": "string",
                      "description": "https://deepalmanac.com/llms.txt: the site's guide for language models.",
                      "format": "uri"
                    },
                    "files": {
                      "type": "array",
                      "description": "Every top-level file this dataset publishes, as absolute URLs.",
                      "items": {
                        "type": "string",
                        "format": "uri"
                      }
                    },
                    "file_guide": {
                      "type": "array",
                      "description": "What each of those files holds, in the same order.",
                      "items": {
                        "type": "object",
                        "properties": {
                          "file": {
                            "type": "string"
                          },
                          "url": {
                            "type": "string",
                            "format": "uri"
                          },
                          "description": {
                            "type": "string"
                          }
                        }
                      }
                    },
                    "cash_rate_change": {
                      "type": "object",
                      "description": "The Reserve Bank's latest cash rate move."
                    },
                    "before_answering": {
                      "type": "string"
                    },
                    "answering": {
                      "type": "object"
                    },
                    "best_dir": {
                      "type": "object",
                      "properties": {
                        "url_template": {
                          "type": "string"
                        }
                      }
                    },
                    "top_dir": {
                      "type": "object",
                      "properties": {
                        "url_template": {
                          "type": "string"
                        }
                      }
                    },
                    "brands_dir": {
                      "type": "object",
                      "properties": {
                        "path": {
                          "type": "string"
                        },
                        "url_template": {
                          "type": "string"
                        },
                        "page_template": {
                          "type": "string"
                        },
                        "description": {
                          "type": "string"
                        },
                        "count": {
                          "type": "integer"
                        },
                        "brands": {
                          "type": "array",
                          "items": {
                            "type": "object",
                            "properties": {
                              "brand_slug": {
                                "type": "string"
                              },
                              "url": {
                                "type": "string",
                                "format": "uri"
                              },
                              "page": {
                                "type": "string",
                                "format": "uri"
                              }
                            }
                          }
                        }
                      }
                    },
                    "source_dir": {
                      "type": "object",
                      "properties": {
                        "path": {
                          "type": "string"
                        },
                        "url_template": {
                          "type": "string"
                        },
                        "description": {
                          "type": "string"
                        },
                        "count": {
                          "type": "integer"
                        }
                      }
                    }
                  },
                  "required": [
                    "dataset",
                    "page",
                    "start_here",
                    "generated_at",
                    "fetched_at",
                    "data_as_of",
                    "data_as_of_basis",
                    "source",
                    "licence_note",
                    "licences",
                    "questions",
                    "openapi",
                    "status",
                    "llms",
                    "files",
                    "brands_dir"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/au/finance/home-loans/v1/questions.json": {
      "get": {
        "tags": [
          "home-loans"
        ],
        "summary": "What to ask a reader before answering a home loan question, and which file answers it (read first)",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "note",
                    "questions",
                    "commentary",
                    "commentary_note",
                    "what_it_cannot_answer_yet",
                    "context_this_dataset_does_not_hold",
                    "not_advice"
                  ],
                  "properties": {
                    "note": {
                      "type": "string"
                    },
                    "questions": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "question": {
                            "type": "string"
                          },
                          "also_asked_as": {
                            "type": "array",
                            "items": {
                              "type": "string"
                            }
                          },
                          "has_no_single_answer": {
                            "type": "boolean",
                            "description": "True when the inputs below change the answer."
                          },
                          "ask_the_reader_first": {
                            "type": "array",
                            "items": {
                              "type": "object",
                              "properties": {
                                "input": {
                                  "type": "string"
                                },
                                "why": {
                                  "type": "string"
                                },
                                "how_much_it_moves_the_answer": {
                                  "type": "string",
                                  "description": "Computed from today's data."
                                }
                              }
                            }
                          },
                          "then_read": {
                            "type": "object",
                            "additionalProperties": {
                              "type": "string"
                            },
                            "description": "Label to URL or URL template; fill {placeholders} from the inputs."
                          },
                          "say_as_well": {
                            "type": "array",
                            "items": {
                              "type": "string"
                            }
                          }
                        }
                      }
                    },
                    "commentary": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "topic": {
                            "type": "string"
                          },
                          "what_you_will_see": {
                            "type": "string"
                          },
                          "why_it_is_correct": {
                            "type": "string"
                          },
                          "what_it_actually_means": {
                            "type": "string"
                          },
                          "say_this_as_well": {
                            "type": "string"
                          },
                          "do_not": {
                            "type": "string"
                          },
                          "check_it_yourself": {
                            "type": "string"
                          }
                        }
                      }
                    },
                    "commentary_note": {
                      "type": "string"
                    },
                    "what_it_cannot_answer_yet": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "question": {
                            "type": "string"
                          },
                          "why": {
                            "type": "string"
                          },
                          "where_to_send_the_reader": {
                            "type": "string"
                          }
                        }
                      }
                    },
                    "context_this_dataset_does_not_hold": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "not_advice": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/au/finance/home-loans/v1/best/{purpose}/{repayment}/{lvr}/{loan}/{kind}.json": {
      "get": {
        "tags": [
          "home-loans"
        ],
        "summary": "Every bank ranked for one bucket (prefer this to best.json)",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "entries": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "rank": {
                            "type": "integer"
                          },
                          "brand": {},
                          "brand_label": {},
                          "brand_slug": {},
                          "product_id": {},
                          "product_name": {},
                          "product_label": {},
                          "product_url": {},
                          "terms_url": {
                            "type": [
                              "string",
                              "null"
                            ],
                            "description": "The loan's terms document: the bank's own link from its product data, or one found by hand on the bank's site where it links none or only an index page (the bank's file says which, as terms_url_source)"
                          },
                          "rate_kind": {},
                          "lending_rate_type": {},
                          "fixed_months": {},
                          "kind": {
                            "type": [
                              "string",
                              "null"
                            ],
                            "enum": [
                              "variable",
                              "fixed_1",
                              "fixed_2",
                              "fixed_3",
                              "fixed_4",
                              "fixed_5",
                              null
                            ]
                          },
                          "purpose": {
                            "type": [
                              "string",
                              "null"
                            ],
                            "enum": [
                              "owner_occupied",
                              "investment",
                              "any",
                              null
                            ]
                          },
                          "repayment": {
                            "type": [
                              "string",
                              "null"
                            ],
                            "enum": [
                              "principal_and_interest",
                              "interest_only",
                              "any",
                              null
                            ]
                          },
                          "rate": {
                            "type": "number",
                            "description": "Annual rate as a fraction (0.0594 = 5.94% p.a.)."
                          },
                          "rate_pct": {
                            "type": "number"
                          },
                          "comparison_rate": {
                            "type": [
                              "number",
                              "null"
                            ],
                            "description": "The comparison rate is the bank's own figure. Australian law requires it to be calculated on a $150,000 secured loan over 25 years, including most fees, so it understates the effect of fees on a larger loan."
                          },
                          "comparison_rate_pct": {
                            "type": [
                              "number",
                              "null"
                            ]
                          },
                          "comparison_rate_at_loan_pct": {
                            "type": [
                              "number",
                              "null"
                            ],
                            "description": "comparison_rate_at_loan_pct is our calculation, not the bank's: the National Credit Code method (monthly principal and interest repayments over 25 years at the rate; upfront_fees paid at the start, annual_fee spread monthly, exit_fees paid at the end; the monthly rate solving present value of payments = amount borrowed, times 12, to two decimals) at this file's loan amount. A fixed rate holds for its fixed period and then revert_rate applies: the product's own variable rate where the feed ties one to it (revert_rate_basis linked), else our inference (revert_rate_basis inferred), the bank's variable rate chosen because it reproduces the bank's own comparison rate. Interest-only rows are calculated as principal and interest over 25 years, since the regulation defines no interest-only treatment. Penalty fees, break costs, government charges and lenders mortgage insurance are not in it. It is null when comparison_check failed (ours at $150,000 more than 0.05 points from the bank's own comparison_rate_pct, so the fee inputs are evidently incomplete), when the bank publishes no comparison rate, or when a fixed rate's revert rate is not known ('revert rate not published', 'revert rate ambiguous' or 'no variable rate reproduces the bank's figure'); comparison_check.reason says which."
                          },
                          "lvr_min": {
                            "type": [
                              "number",
                              "null"
                            ],
                            "description": "Percent; the band runs above this."
                          },
                          "lvr_max": {
                            "type": [
                              "number",
                              "null"
                            ],
                            "description": "Percent; the band runs up to and including this."
                          },
                          "lvr_source": {
                            "type": [
                              "string",
                              "null"
                            ],
                            "enum": [
                              "tier",
                              "text",
                              "product",
                              null
                            ],
                            "description": "Where the LVR band came from; null when the bank states none."
                          },
                          "loan_min": {},
                          "loan_max": {},
                          "offset": {},
                          "redraw": {},
                          "annual_fee": {
                            "type": [
                              "number",
                              "null"
                            ],
                            "description": "Ongoing fees per year: every periodic fee the bank lists, monthly and other periods converted to a yearly amount, penalty fees excluded. Null means none was listed, not necessarily none charged."
                          },
                          "upfront_fees": {
                            "type": [
                              "number",
                              "null"
                            ],
                            "description": "The total of the fixed fees the bank lists as charged when the loan is set up (establishment, application, valuation, settlement, legal and the like). Null means none was listed, not that there are none; check the bank's fee list."
                          },
                          "exit_fees": {
                            "type": [
                              "number",
                              "null"
                            ],
                            "description": "The total of the fixed fees the bank lists as charged to close the loan (discharge of mortgage, discharge settlement or legal fees, exit fees). Break costs and early repayment costs are not included. Null means none was listed, not that there are none; check the bank's fee list."
                          },
                          "revert_rate": {
                            "type": [
                              "number",
                              "null"
                            ],
                            "description": "Fixed rates only: the rate the loan reverts to after fixed_months, as a fraction. Where the feed ties one to it unambiguously (the product's own variable rate of the same purpose and repayment type), revert_rate_basis is linked. Otherwise, for principal and interest, it may be inferred: An inferred revert rate is our inference, not the bank's statement: the bank's own variable rate of the same purpose and repayment type whose LVR band covers the fixed rate's, chosen because with it our calculation reproduces the bank's own comparison rate at $150,000 (which by law assumes the rate the loan reverts to). Null where neither gives one rate."
                          },
                          "revert_rate_basis": {
                            "type": [
                              "string",
                              "null"
                            ],
                            "enum": [
                              "linked",
                              "inferred",
                              null
                            ],
                            "description": "How revert_rate was found: linked (the feed ties it to the fixed rate's product) or inferred (our inference: the bank's variable rate with which our calculation reproduces the bank's own comparison rate); null where revert_rate is null."
                          },
                          "comparison_check": {
                            "type": [
                              "object",
                              "null"
                            ],
                            "description": "Ranked rows only: our comparison rate at $150,000 over 25 years against the bank's comparison_rate_pct. ok is true when they are within 0.05 points; reason says why not otherwise ('revert rate not published', 'revert rate ambiguous', 'no variable rate reproduces the bank's figure', 'no bank comparison rate', or the inputs are incomplete).",
                            "properties": {
                              "ok": {
                                "type": "boolean"
                              },
                              "ours_at_150k": {
                                "type": [
                                  "number",
                                  "null"
                                ]
                              },
                              "bank": {
                                "type": [
                                  "number",
                                  "null"
                                ]
                              },
                              "reason": {
                                "type": "string"
                              }
                            },
                            "required": [
                              "ok",
                              "ours_at_150k",
                              "bank"
                            ]
                          },
                          "restrictions": {
                            "type": "array",
                            "items": {
                              "type": "string",
                              "enum": [
                                "above_max_lvr",
                                "bridging",
                                "broker_only",
                                "business",
                                "construction",
                                "dhoas",
                                "existing_customers",
                                "first_home_buyer",
                                "green",
                                "guarantor",
                                "interest_prepaid",
                                "introductory",
                                "land",
                                "line_of_credit",
                                "low_doc",
                                "non_resident",
                                "offer_ended",
                                "package",
                                "personal_loan",
                                "profession",
                                "refinance_only",
                                "relocation",
                                "restricted_membership",
                                "retiree",
                                "reverse_mortgage",
                                "revert_rate",
                                "rural",
                                "single_parent",
                                "smsf",
                                "staff"
                              ]
                            }
                          },
                          "eligibility": {
                            "type": [
                              "object",
                              "null"
                            ],
                            "description": "Set when the bank's product data or its own membership terms limit the product to a named occupation or employer group (and usually their families); null otherwise. Such rates are left out of entries and top, and ranked in entries_with_restricted and entries_all.",
                            "properties": {
                              "restricted": {
                                "type": "boolean",
                                "const": true
                              },
                              "who": {
                                "type": "string",
                                "description": "Our short label for who can borrow."
                              },
                              "quote": {
                                "type": "string",
                                "description": "The bank's own sentence, verbatim from the product's eligibility or the bank's page."
                              },
                              "source_url": {
                                "type": [
                                  "string",
                                  "null"
                                ],
                                "format": "uri",
                                "description": "Where the quote is from: the bank's product record, or the bank's own page when the record does not say."
                              }
                            },
                            "required": [
                              "restricted",
                              "who",
                              "quote",
                              "source_url"
                            ]
                          },
                          "conditions": {},
                          "record_stale": {},
                          "record_correction": {},
                          "source_url": {},
                          "source_snapshot": {
                            "type": "string",
                            "description": "Site-relative path of our verbatim snapshot of the bank's product detail response."
                          },
                          "bank_last_updated": {
                            "type": [
                              "string",
                              "null"
                            ],
                            "format": "date-time"
                          }
                        }
                      },
                      "description": "The default ranking: broker-only and restricted-membership rates left out."
                    },
                    "entries_with_broker": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "rank": {
                            "type": "integer"
                          },
                          "brand": {},
                          "brand_label": {},
                          "brand_slug": {},
                          "product_id": {},
                          "product_name": {},
                          "product_label": {},
                          "product_url": {},
                          "terms_url": {
                            "type": [
                              "string",
                              "null"
                            ],
                            "description": "The loan's terms document: the bank's own link from its product data, or one found by hand on the bank's site where it links none or only an index page (the bank's file says which, as terms_url_source)"
                          },
                          "rate_kind": {},
                          "lending_rate_type": {},
                          "fixed_months": {},
                          "kind": {
                            "type": [
                              "string",
                              "null"
                            ],
                            "enum": [
                              "variable",
                              "fixed_1",
                              "fixed_2",
                              "fixed_3",
                              "fixed_4",
                              "fixed_5",
                              null
                            ]
                          },
                          "purpose": {
                            "type": [
                              "string",
                              "null"
                            ],
                            "enum": [
                              "owner_occupied",
                              "investment",
                              "any",
                              null
                            ]
                          },
                          "repayment": {
                            "type": [
                              "string",
                              "null"
                            ],
                            "enum": [
                              "principal_and_interest",
                              "interest_only",
                              "any",
                              null
                            ]
                          },
                          "rate": {
                            "type": "number",
                            "description": "Annual rate as a fraction (0.0594 = 5.94% p.a.)."
                          },
                          "rate_pct": {
                            "type": "number"
                          },
                          "comparison_rate": {
                            "type": [
                              "number",
                              "null"
                            ],
                            "description": "The comparison rate is the bank's own figure. Australian law requires it to be calculated on a $150,000 secured loan over 25 years, including most fees, so it understates the effect of fees on a larger loan."
                          },
                          "comparison_rate_pct": {
                            "type": [
                              "number",
                              "null"
                            ]
                          },
                          "comparison_rate_at_loan_pct": {
                            "type": [
                              "number",
                              "null"
                            ],
                            "description": "comparison_rate_at_loan_pct is our calculation, not the bank's: the National Credit Code method (monthly principal and interest repayments over 25 years at the rate; upfront_fees paid at the start, annual_fee spread monthly, exit_fees paid at the end; the monthly rate solving present value of payments = amount borrowed, times 12, to two decimals) at this file's loan amount. A fixed rate holds for its fixed period and then revert_rate applies: the product's own variable rate where the feed ties one to it (revert_rate_basis linked), else our inference (revert_rate_basis inferred), the bank's variable rate chosen because it reproduces the bank's own comparison rate. Interest-only rows are calculated as principal and interest over 25 years, since the regulation defines no interest-only treatment. Penalty fees, break costs, government charges and lenders mortgage insurance are not in it. It is null when comparison_check failed (ours at $150,000 more than 0.05 points from the bank's own comparison_rate_pct, so the fee inputs are evidently incomplete), when the bank publishes no comparison rate, or when a fixed rate's revert rate is not known ('revert rate not published', 'revert rate ambiguous' or 'no variable rate reproduces the bank's figure'); comparison_check.reason says which."
                          },
                          "lvr_min": {
                            "type": [
                              "number",
                              "null"
                            ],
                            "description": "Percent; the band runs above this."
                          },
                          "lvr_max": {
                            "type": [
                              "number",
                              "null"
                            ],
                            "description": "Percent; the band runs up to and including this."
                          },
                          "lvr_source": {
                            "type": [
                              "string",
                              "null"
                            ],
                            "enum": [
                              "tier",
                              "text",
                              "product",
                              null
                            ],
                            "description": "Where the LVR band came from; null when the bank states none."
                          },
                          "loan_min": {},
                          "loan_max": {},
                          "offset": {},
                          "redraw": {},
                          "annual_fee": {
                            "type": [
                              "number",
                              "null"
                            ],
                            "description": "Ongoing fees per year: every periodic fee the bank lists, monthly and other periods converted to a yearly amount, penalty fees excluded. Null means none was listed, not necessarily none charged."
                          },
                          "upfront_fees": {
                            "type": [
                              "number",
                              "null"
                            ],
                            "description": "The total of the fixed fees the bank lists as charged when the loan is set up (establishment, application, valuation, settlement, legal and the like). Null means none was listed, not that there are none; check the bank's fee list."
                          },
                          "exit_fees": {
                            "type": [
                              "number",
                              "null"
                            ],
                            "description": "The total of the fixed fees the bank lists as charged to close the loan (discharge of mortgage, discharge settlement or legal fees, exit fees). Break costs and early repayment costs are not included. Null means none was listed, not that there are none; check the bank's fee list."
                          },
                          "revert_rate": {
                            "type": [
                              "number",
                              "null"
                            ],
                            "description": "Fixed rates only: the rate the loan reverts to after fixed_months, as a fraction. Where the feed ties one to it unambiguously (the product's own variable rate of the same purpose and repayment type), revert_rate_basis is linked. Otherwise, for principal and interest, it may be inferred: An inferred revert rate is our inference, not the bank's statement: the bank's own variable rate of the same purpose and repayment type whose LVR band covers the fixed rate's, chosen because with it our calculation reproduces the bank's own comparison rate at $150,000 (which by law assumes the rate the loan reverts to). Null where neither gives one rate."
                          },
                          "revert_rate_basis": {
                            "type": [
                              "string",
                              "null"
                            ],
                            "enum": [
                              "linked",
                              "inferred",
                              null
                            ],
                            "description": "How revert_rate was found: linked (the feed ties it to the fixed rate's product) or inferred (our inference: the bank's variable rate with which our calculation reproduces the bank's own comparison rate); null where revert_rate is null."
                          },
                          "comparison_check": {
                            "type": [
                              "object",
                              "null"
                            ],
                            "description": "Ranked rows only: our comparison rate at $150,000 over 25 years against the bank's comparison_rate_pct. ok is true when they are within 0.05 points; reason says why not otherwise ('revert rate not published', 'revert rate ambiguous', 'no variable rate reproduces the bank's figure', 'no bank comparison rate', or the inputs are incomplete).",
                            "properties": {
                              "ok": {
                                "type": "boolean"
                              },
                              "ours_at_150k": {
                                "type": [
                                  "number",
                                  "null"
                                ]
                              },
                              "bank": {
                                "type": [
                                  "number",
                                  "null"
                                ]
                              },
                              "reason": {
                                "type": "string"
                              }
                            },
                            "required": [
                              "ok",
                              "ours_at_150k",
                              "bank"
                            ]
                          },
                          "restrictions": {
                            "type": "array",
                            "items": {
                              "type": "string",
                              "enum": [
                                "above_max_lvr",
                                "bridging",
                                "broker_only",
                                "business",
                                "construction",
                                "dhoas",
                                "existing_customers",
                                "first_home_buyer",
                                "green",
                                "guarantor",
                                "interest_prepaid",
                                "introductory",
                                "land",
                                "line_of_credit",
                                "low_doc",
                                "non_resident",
                                "offer_ended",
                                "package",
                                "personal_loan",
                                "profession",
                                "refinance_only",
                                "relocation",
                                "restricted_membership",
                                "retiree",
                                "reverse_mortgage",
                                "revert_rate",
                                "rural",
                                "single_parent",
                                "smsf",
                                "staff"
                              ]
                            }
                          },
                          "eligibility": {
                            "type": [
                              "object",
                              "null"
                            ],
                            "description": "Set when the bank's product data or its own membership terms limit the product to a named occupation or employer group (and usually their families); null otherwise. Such rates are left out of entries and top, and ranked in entries_with_restricted and entries_all.",
                            "properties": {
                              "restricted": {
                                "type": "boolean",
                                "const": true
                              },
                              "who": {
                                "type": "string",
                                "description": "Our short label for who can borrow."
                              },
                              "quote": {
                                "type": "string",
                                "description": "The bank's own sentence, verbatim from the product's eligibility or the bank's page."
                              },
                              "source_url": {
                                "type": [
                                  "string",
                                  "null"
                                ],
                                "format": "uri",
                                "description": "Where the quote is from: the bank's product record, or the bank's own page when the record does not say."
                              }
                            },
                            "required": [
                              "restricted",
                              "who",
                              "quote",
                              "source_url"
                            ]
                          },
                          "conditions": {},
                          "record_stale": {},
                          "record_correction": {},
                          "source_url": {},
                          "source_snapshot": {
                            "type": "string",
                            "description": "Site-relative path of our verbatim snapshot of the bank's product detail response."
                          },
                          "bank_last_updated": {
                            "type": [
                              "string",
                              "null"
                            ],
                            "format": "date-time"
                          }
                        }
                      },
                      "description": "Broker-only rates in; restricted-membership rates still out."
                    },
                    "entries_with_restricted": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "rank": {
                            "type": "integer"
                          },
                          "brand": {},
                          "brand_label": {},
                          "brand_slug": {},
                          "product_id": {},
                          "product_name": {},
                          "product_label": {},
                          "product_url": {},
                          "terms_url": {
                            "type": [
                              "string",
                              "null"
                            ],
                            "description": "The loan's terms document: the bank's own link from its product data, or one found by hand on the bank's site where it links none or only an index page (the bank's file says which, as terms_url_source)"
                          },
                          "rate_kind": {},
                          "lending_rate_type": {},
                          "fixed_months": {},
                          "kind": {
                            "type": [
                              "string",
                              "null"
                            ],
                            "enum": [
                              "variable",
                              "fixed_1",
                              "fixed_2",
                              "fixed_3",
                              "fixed_4",
                              "fixed_5",
                              null
                            ]
                          },
                          "purpose": {
                            "type": [
                              "string",
                              "null"
                            ],
                            "enum": [
                              "owner_occupied",
                              "investment",
                              "any",
                              null
                            ]
                          },
                          "repayment": {
                            "type": [
                              "string",
                              "null"
                            ],
                            "enum": [
                              "principal_and_interest",
                              "interest_only",
                              "any",
                              null
                            ]
                          },
                          "rate": {
                            "type": "number",
                            "description": "Annual rate as a fraction (0.0594 = 5.94% p.a.)."
                          },
                          "rate_pct": {
                            "type": "number"
                          },
                          "comparison_rate": {
                            "type": [
                              "number",
                              "null"
                            ],
                            "description": "The comparison rate is the bank's own figure. Australian law requires it to be calculated on a $150,000 secured loan over 25 years, including most fees, so it understates the effect of fees on a larger loan."
                          },
                          "comparison_rate_pct": {
                            "type": [
                              "number",
                              "null"
                            ]
                          },
                          "comparison_rate_at_loan_pct": {
                            "type": [
                              "number",
                              "null"
                            ],
                            "description": "comparison_rate_at_loan_pct is our calculation, not the bank's: the National Credit Code method (monthly principal and interest repayments over 25 years at the rate; upfront_fees paid at the start, annual_fee spread monthly, exit_fees paid at the end; the monthly rate solving present value of payments = amount borrowed, times 12, to two decimals) at this file's loan amount. A fixed rate holds for its fixed period and then revert_rate applies: the product's own variable rate where the feed ties one to it (revert_rate_basis linked), else our inference (revert_rate_basis inferred), the bank's variable rate chosen because it reproduces the bank's own comparison rate. Interest-only rows are calculated as principal and interest over 25 years, since the regulation defines no interest-only treatment. Penalty fees, break costs, government charges and lenders mortgage insurance are not in it. It is null when comparison_check failed (ours at $150,000 more than 0.05 points from the bank's own comparison_rate_pct, so the fee inputs are evidently incomplete), when the bank publishes no comparison rate, or when a fixed rate's revert rate is not known ('revert rate not published', 'revert rate ambiguous' or 'no variable rate reproduces the bank's figure'); comparison_check.reason says which."
                          },
                          "lvr_min": {
                            "type": [
                              "number",
                              "null"
                            ],
                            "description": "Percent; the band runs above this."
                          },
                          "lvr_max": {
                            "type": [
                              "number",
                              "null"
                            ],
                            "description": "Percent; the band runs up to and including this."
                          },
                          "lvr_source": {
                            "type": [
                              "string",
                              "null"
                            ],
                            "enum": [
                              "tier",
                              "text",
                              "product",
                              null
                            ],
                            "description": "Where the LVR band came from; null when the bank states none."
                          },
                          "loan_min": {},
                          "loan_max": {},
                          "offset": {},
                          "redraw": {},
                          "annual_fee": {
                            "type": [
                              "number",
                              "null"
                            ],
                            "description": "Ongoing fees per year: every periodic fee the bank lists, monthly and other periods converted to a yearly amount, penalty fees excluded. Null means none was listed, not necessarily none charged."
                          },
                          "upfront_fees": {
                            "type": [
                              "number",
                              "null"
                            ],
                            "description": "The total of the fixed fees the bank lists as charged when the loan is set up (establishment, application, valuation, settlement, legal and the like). Null means none was listed, not that there are none; check the bank's fee list."
                          },
                          "exit_fees": {
                            "type": [
                              "number",
                              "null"
                            ],
                            "description": "The total of the fixed fees the bank lists as charged to close the loan (discharge of mortgage, discharge settlement or legal fees, exit fees). Break costs and early repayment costs are not included. Null means none was listed, not that there are none; check the bank's fee list."
                          },
                          "revert_rate": {
                            "type": [
                              "number",
                              "null"
                            ],
                            "description": "Fixed rates only: the rate the loan reverts to after fixed_months, as a fraction. Where the feed ties one to it unambiguously (the product's own variable rate of the same purpose and repayment type), revert_rate_basis is linked. Otherwise, for principal and interest, it may be inferred: An inferred revert rate is our inference, not the bank's statement: the bank's own variable rate of the same purpose and repayment type whose LVR band covers the fixed rate's, chosen because with it our calculation reproduces the bank's own comparison rate at $150,000 (which by law assumes the rate the loan reverts to). Null where neither gives one rate."
                          },
                          "revert_rate_basis": {
                            "type": [
                              "string",
                              "null"
                            ],
                            "enum": [
                              "linked",
                              "inferred",
                              null
                            ],
                            "description": "How revert_rate was found: linked (the feed ties it to the fixed rate's product) or inferred (our inference: the bank's variable rate with which our calculation reproduces the bank's own comparison rate); null where revert_rate is null."
                          },
                          "comparison_check": {
                            "type": [
                              "object",
                              "null"
                            ],
                            "description": "Ranked rows only: our comparison rate at $150,000 over 25 years against the bank's comparison_rate_pct. ok is true when they are within 0.05 points; reason says why not otherwise ('revert rate not published', 'revert rate ambiguous', 'no variable rate reproduces the bank's figure', 'no bank comparison rate', or the inputs are incomplete).",
                            "properties": {
                              "ok": {
                                "type": "boolean"
                              },
                              "ours_at_150k": {
                                "type": [
                                  "number",
                                  "null"
                                ]
                              },
                              "bank": {
                                "type": [
                                  "number",
                                  "null"
                                ]
                              },
                              "reason": {
                                "type": "string"
                              }
                            },
                            "required": [
                              "ok",
                              "ours_at_150k",
                              "bank"
                            ]
                          },
                          "restrictions": {
                            "type": "array",
                            "items": {
                              "type": "string",
                              "enum": [
                                "above_max_lvr",
                                "bridging",
                                "broker_only",
                                "business",
                                "construction",
                                "dhoas",
                                "existing_customers",
                                "first_home_buyer",
                                "green",
                                "guarantor",
                                "interest_prepaid",
                                "introductory",
                                "land",
                                "line_of_credit",
                                "low_doc",
                                "non_resident",
                                "offer_ended",
                                "package",
                                "personal_loan",
                                "profession",
                                "refinance_only",
                                "relocation",
                                "restricted_membership",
                                "retiree",
                                "reverse_mortgage",
                                "revert_rate",
                                "rural",
                                "single_parent",
                                "smsf",
                                "staff"
                              ]
                            }
                          },
                          "eligibility": {
                            "type": [
                              "object",
                              "null"
                            ],
                            "description": "Set when the bank's product data or its own membership terms limit the product to a named occupation or employer group (and usually their families); null otherwise. Such rates are left out of entries and top, and ranked in entries_with_restricted and entries_all.",
                            "properties": {
                              "restricted": {
                                "type": "boolean",
                                "const": true
                              },
                              "who": {
                                "type": "string",
                                "description": "Our short label for who can borrow."
                              },
                              "quote": {
                                "type": "string",
                                "description": "The bank's own sentence, verbatim from the product's eligibility or the bank's page."
                              },
                              "source_url": {
                                "type": [
                                  "string",
                                  "null"
                                ],
                                "format": "uri",
                                "description": "Where the quote is from: the bank's product record, or the bank's own page when the record does not say."
                              }
                            },
                            "required": [
                              "restricted",
                              "who",
                              "quote",
                              "source_url"
                            ]
                          },
                          "conditions": {},
                          "record_stale": {},
                          "record_correction": {},
                          "source_url": {},
                          "source_snapshot": {
                            "type": "string",
                            "description": "Site-relative path of our verbatim snapshot of the bank's product detail response."
                          },
                          "bank_last_updated": {
                            "type": [
                              "string",
                              "null"
                            ],
                            "format": "date-time"
                          }
                        }
                      },
                      "description": "Rates from banks or products open only to a named occupation or employer group in (each with eligibility); broker-only rates still out."
                    },
                    "entries_all": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "rank": {
                            "type": "integer"
                          },
                          "brand": {},
                          "brand_label": {},
                          "brand_slug": {},
                          "product_id": {},
                          "product_name": {},
                          "product_label": {},
                          "product_url": {},
                          "terms_url": {
                            "type": [
                              "string",
                              "null"
                            ],
                            "description": "The loan's terms document: the bank's own link from its product data, or one found by hand on the bank's site where it links none or only an index page (the bank's file says which, as terms_url_source)"
                          },
                          "rate_kind": {},
                          "lending_rate_type": {},
                          "fixed_months": {},
                          "kind": {
                            "type": [
                              "string",
                              "null"
                            ],
                            "enum": [
                              "variable",
                              "fixed_1",
                              "fixed_2",
                              "fixed_3",
                              "fixed_4",
                              "fixed_5",
                              null
                            ]
                          },
                          "purpose": {
                            "type": [
                              "string",
                              "null"
                            ],
                            "enum": [
                              "owner_occupied",
                              "investment",
                              "any",
                              null
                            ]
                          },
                          "repayment": {
                            "type": [
                              "string",
                              "null"
                            ],
                            "enum": [
                              "principal_and_interest",
                              "interest_only",
                              "any",
                              null
                            ]
                          },
                          "rate": {
                            "type": "number",
                            "description": "Annual rate as a fraction (0.0594 = 5.94% p.a.)."
                          },
                          "rate_pct": {
                            "type": "number"
                          },
                          "comparison_rate": {
                            "type": [
                              "number",
                              "null"
                            ],
                            "description": "The comparison rate is the bank's own figure. Australian law requires it to be calculated on a $150,000 secured loan over 25 years, including most fees, so it understates the effect of fees on a larger loan."
                          },
                          "comparison_rate_pct": {
                            "type": [
                              "number",
                              "null"
                            ]
                          },
                          "comparison_rate_at_loan_pct": {
                            "type": [
                              "number",
                              "null"
                            ],
                            "description": "comparison_rate_at_loan_pct is our calculation, not the bank's: the National Credit Code method (monthly principal and interest repayments over 25 years at the rate; upfront_fees paid at the start, annual_fee spread monthly, exit_fees paid at the end; the monthly rate solving present value of payments = amount borrowed, times 12, to two decimals) at this file's loan amount. A fixed rate holds for its fixed period and then revert_rate applies: the product's own variable rate where the feed ties one to it (revert_rate_basis linked), else our inference (revert_rate_basis inferred), the bank's variable rate chosen because it reproduces the bank's own comparison rate. Interest-only rows are calculated as principal and interest over 25 years, since the regulation defines no interest-only treatment. Penalty fees, break costs, government charges and lenders mortgage insurance are not in it. It is null when comparison_check failed (ours at $150,000 more than 0.05 points from the bank's own comparison_rate_pct, so the fee inputs are evidently incomplete), when the bank publishes no comparison rate, or when a fixed rate's revert rate is not known ('revert rate not published', 'revert rate ambiguous' or 'no variable rate reproduces the bank's figure'); comparison_check.reason says which."
                          },
                          "lvr_min": {
                            "type": [
                              "number",
                              "null"
                            ],
                            "description": "Percent; the band runs above this."
                          },
                          "lvr_max": {
                            "type": [
                              "number",
                              "null"
                            ],
                            "description": "Percent; the band runs up to and including this."
                          },
                          "lvr_source": {
                            "type": [
                              "string",
                              "null"
                            ],
                            "enum": [
                              "tier",
                              "text",
                              "product",
                              null
                            ],
                            "description": "Where the LVR band came from; null when the bank states none."
                          },
                          "loan_min": {},
                          "loan_max": {},
                          "offset": {},
                          "redraw": {},
                          "annual_fee": {
                            "type": [
                              "number",
                              "null"
                            ],
                            "description": "Ongoing fees per year: every periodic fee the bank lists, monthly and other periods converted to a yearly amount, penalty fees excluded. Null means none was listed, not necessarily none charged."
                          },
                          "upfront_fees": {
                            "type": [
                              "number",
                              "null"
                            ],
                            "description": "The total of the fixed fees the bank lists as charged when the loan is set up (establishment, application, valuation, settlement, legal and the like). Null means none was listed, not that there are none; check the bank's fee list."
                          },
                          "exit_fees": {
                            "type": [
                              "number",
                              "null"
                            ],
                            "description": "The total of the fixed fees the bank lists as charged to close the loan (discharge of mortgage, discharge settlement or legal fees, exit fees). Break costs and early repayment costs are not included. Null means none was listed, not that there are none; check the bank's fee list."
                          },
                          "revert_rate": {
                            "type": [
                              "number",
                              "null"
                            ],
                            "description": "Fixed rates only: the rate the loan reverts to after fixed_months, as a fraction. Where the feed ties one to it unambiguously (the product's own variable rate of the same purpose and repayment type), revert_rate_basis is linked. Otherwise, for principal and interest, it may be inferred: An inferred revert rate is our inference, not the bank's statement: the bank's own variable rate of the same purpose and repayment type whose LVR band covers the fixed rate's, chosen because with it our calculation reproduces the bank's own comparison rate at $150,000 (which by law assumes the rate the loan reverts to). Null where neither gives one rate."
                          },
                          "revert_rate_basis": {
                            "type": [
                              "string",
                              "null"
                            ],
                            "enum": [
                              "linked",
                              "inferred",
                              null
                            ],
                            "description": "How revert_rate was found: linked (the feed ties it to the fixed rate's product) or inferred (our inference: the bank's variable rate with which our calculation reproduces the bank's own comparison rate); null where revert_rate is null."
                          },
                          "comparison_check": {
                            "type": [
                              "object",
                              "null"
                            ],
                            "description": "Ranked rows only: our comparison rate at $150,000 over 25 years against the bank's comparison_rate_pct. ok is true when they are within 0.05 points; reason says why not otherwise ('revert rate not published', 'revert rate ambiguous', 'no variable rate reproduces the bank's figure', 'no bank comparison rate', or the inputs are incomplete).",
                            "properties": {
                              "ok": {
                                "type": "boolean"
                              },
                              "ours_at_150k": {
                                "type": [
                                  "number",
                                  "null"
                                ]
                              },
                              "bank": {
                                "type": [
                                  "number",
                                  "null"
                                ]
                              },
                              "reason": {
                                "type": "string"
                              }
                            },
                            "required": [
                              "ok",
                              "ours_at_150k",
                              "bank"
                            ]
                          },
                          "restrictions": {
                            "type": "array",
                            "items": {
                              "type": "string",
                              "enum": [
                                "above_max_lvr",
                                "bridging",
                                "broker_only",
                                "business",
                                "construction",
                                "dhoas",
                                "existing_customers",
                                "first_home_buyer",
                                "green",
                                "guarantor",
                                "interest_prepaid",
                                "introductory",
                                "land",
                                "line_of_credit",
                                "low_doc",
                                "non_resident",
                                "offer_ended",
                                "package",
                                "personal_loan",
                                "profession",
                                "refinance_only",
                                "relocation",
                                "restricted_membership",
                                "retiree",
                                "reverse_mortgage",
                                "revert_rate",
                                "rural",
                                "single_parent",
                                "smsf",
                                "staff"
                              ]
                            }
                          },
                          "eligibility": {
                            "type": [
                              "object",
                              "null"
                            ],
                            "description": "Set when the bank's product data or its own membership terms limit the product to a named occupation or employer group (and usually their families); null otherwise. Such rates are left out of entries and top, and ranked in entries_with_restricted and entries_all.",
                            "properties": {
                              "restricted": {
                                "type": "boolean",
                                "const": true
                              },
                              "who": {
                                "type": "string",
                                "description": "Our short label for who can borrow."
                              },
                              "quote": {
                                "type": "string",
                                "description": "The bank's own sentence, verbatim from the product's eligibility or the bank's page."
                              },
                              "source_url": {
                                "type": [
                                  "string",
                                  "null"
                                ],
                                "format": "uri",
                                "description": "Where the quote is from: the bank's product record, or the bank's own page when the record does not say."
                              }
                            },
                            "required": [
                              "restricted",
                              "who",
                              "quote",
                              "source_url"
                            ]
                          },
                          "conditions": {},
                          "record_stale": {},
                          "record_correction": {},
                          "source_url": {},
                          "source_snapshot": {
                            "type": "string",
                            "description": "Site-relative path of our verbatim snapshot of the bank's product detail response."
                          },
                          "bank_last_updated": {
                            "type": [
                              "string",
                              "null"
                            ],
                            "format": "date-time"
                          }
                        }
                      },
                      "description": "Both broker-only and restricted-membership rates in."
                    }
                  }
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "purpose",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "enum": [
                "owner_occupied",
                "investment"
              ]
            }
          },
          {
            "name": "repayment",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "enum": [
                "principal_and_interest",
                "interest_only"
              ]
            }
          },
          {
            "name": "lvr",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "enum": [
                60,
                70,
                80,
                90,
                95
              ]
            }
          },
          {
            "name": "loan",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "enum": [
                300000,
                600000,
                1000000
              ]
            }
          },
          {
            "name": "kind",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "enum": [
                "variable",
                "fixed_1",
                "fixed_2",
                "fixed_3",
                "fixed_4",
                "fixed_5"
              ]
            }
          }
        ]
      }
    },
    "/au/finance/home-loans/v1/top/{purpose}/{repayment}/{lvr}/{loan}/{kind}.json": {
      "get": {
        "tags": [
          "home-loans"
        ],
        "summary": "The top 10 banks for one bucket, compact (a few kB; read this first)",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "generated_at": {
                      "type": "string",
                      "format": "date-time",
                      "description": "When this file's contents last changed."
                    },
                    "data_as_of": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "format": "date-time"
                    },
                    "comparison_rate_at_loan_note": {
                      "type": "string"
                    },
                    "full_ranking": {
                      "type": "string",
                      "format": "uri",
                      "description": "The bucket's best/ slice, every bank ranked."
                    },
                    "banks_ranked": {
                      "type": "integer",
                      "description": "Banks in the full ranking (broker-only rates left out)."
                    },
                    "top": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "description": "A ranked rate cut to what it takes to quote it.",
                        "properties": {
                          "rank": {
                            "type": "integer"
                          },
                          "brand_label": {},
                          "brand_slug": {},
                          "product_label": {},
                          "rate_pct": {
                            "type": "number"
                          },
                          "comparison_rate_pct": {
                            "type": [
                              "number",
                              "null"
                            ]
                          },
                          "comparison_rate_at_loan_pct": {
                            "type": [
                              "number",
                              "null"
                            ],
                            "description": "comparison_rate_at_loan_pct is our calculation, not the bank's: the National Credit Code method (monthly principal and interest repayments over 25 years at the rate; upfront_fees paid at the start, annual_fee spread monthly, exit_fees paid at the end; the monthly rate solving present value of payments = amount borrowed, times 12, to two decimals) at this file's loan amount. A fixed rate holds for its fixed period and then revert_rate applies: the product's own variable rate where the feed ties one to it (revert_rate_basis linked), else our inference (revert_rate_basis inferred), the bank's variable rate chosen because it reproduces the bank's own comparison rate. Interest-only rows are calculated as principal and interest over 25 years, since the regulation defines no interest-only treatment. Penalty fees, break costs, government charges and lenders mortgage insurance are not in it. It is null when comparison_check failed (ours at $150,000 more than 0.05 points from the bank's own comparison_rate_pct, so the fee inputs are evidently incomplete), when the bank publishes no comparison rate, or when a fixed rate's revert rate is not known ('revert rate not published', 'revert rate ambiguous' or 'no variable rate reproduces the bank's figure'); comparison_check.reason says which."
                          },
                          "conditions": {},
                          "restrictions": {
                            "type": "array",
                            "items": {
                              "type": "string",
                              "enum": [
                                "above_max_lvr",
                                "bridging",
                                "broker_only",
                                "business",
                                "construction",
                                "dhoas",
                                "existing_customers",
                                "first_home_buyer",
                                "green",
                                "guarantor",
                                "interest_prepaid",
                                "introductory",
                                "land",
                                "line_of_credit",
                                "low_doc",
                                "non_resident",
                                "offer_ended",
                                "package",
                                "personal_loan",
                                "profession",
                                "refinance_only",
                                "relocation",
                                "restricted_membership",
                                "retiree",
                                "reverse_mortgage",
                                "revert_rate",
                                "rural",
                                "single_parent",
                                "smsf",
                                "staff"
                              ]
                            }
                          },
                          "eligibility": {
                            "type": [
                              "object",
                              "null"
                            ],
                            "description": "Set when the bank's product data or its own membership terms limit the product to a named occupation or employer group (and usually their families); null otherwise. Such rates are left out of entries and top, and ranked in entries_with_restricted and entries_all.",
                            "properties": {
                              "restricted": {
                                "type": "boolean",
                                "const": true
                              },
                              "who": {
                                "type": "string",
                                "description": "Our short label for who can borrow."
                              },
                              "quote": {
                                "type": "string",
                                "description": "The bank's own sentence, verbatim from the product's eligibility or the bank's page."
                              },
                              "source_url": {
                                "type": [
                                  "string",
                                  "null"
                                ],
                                "format": "uri",
                                "description": "Where the quote is from: the bank's product record, or the bank's own page when the record does not say."
                              }
                            },
                            "required": [
                              "restricted",
                              "who",
                              "quote",
                              "source_url"
                            ]
                          },
                          "record_stale": {},
                          "annual_fee": {
                            "type": [
                              "number",
                              "null"
                            ],
                            "description": "Ongoing fees per year: every periodic fee the bank lists, monthly and other periods converted to a yearly amount, penalty fees excluded. Null means none was listed, not necessarily none charged."
                          },
                          "upfront_fees": {
                            "type": [
                              "number",
                              "null"
                            ],
                            "description": "The total of the fixed fees the bank lists as charged when the loan is set up (establishment, application, valuation, settlement, legal and the like). Null means none was listed, not that there are none; check the bank's fee list."
                          },
                          "exit_fees": {
                            "type": [
                              "number",
                              "null"
                            ],
                            "description": "The total of the fixed fees the bank lists as charged to close the loan (discharge of mortgage, discharge settlement or legal fees, exit fees). Break costs and early repayment costs are not included. Null means none was listed, not that there are none; check the bank's fee list."
                          },
                          "lvr_min": {
                            "type": [
                              "number",
                              "null"
                            ],
                            "description": "Percent; the band runs above this."
                          },
                          "lvr_max": {
                            "type": [
                              "number",
                              "null"
                            ],
                            "description": "Percent; the band runs up to and including this."
                          },
                          "loan_min": {},
                          "loan_max": {},
                          "product_url": {},
                          "bank_last_updated": {
                            "type": [
                              "string",
                              "null"
                            ],
                            "format": "date-time"
                          }
                        },
                        "required": [
                          "rank",
                          "brand_label",
                          "brand_slug",
                          "product_label",
                          "rate_pct",
                          "comparison_rate_pct",
                          "comparison_rate_at_loan_pct",
                          "conditions",
                          "restrictions",
                          "eligibility",
                          "record_stale",
                          "annual_fee",
                          "upfront_fees",
                          "exit_fees",
                          "lvr_min",
                          "lvr_max",
                          "loan_min",
                          "loan_max",
                          "product_url",
                          "bank_last_updated"
                        ]
                      }
                    },
                    "broker_note": {
                      "type": "string",
                      "description": "Whether broker-only rates change the top 10."
                    },
                    "top_with_broker": {
                      "type": [
                        "array",
                        "null"
                      ],
                      "items": {
                        "type": "object",
                        "description": "A ranked rate cut to what it takes to quote it.",
                        "properties": {
                          "rank": {
                            "type": "integer"
                          },
                          "brand_label": {},
                          "brand_slug": {},
                          "product_label": {},
                          "rate_pct": {
                            "type": "number"
                          },
                          "comparison_rate_pct": {
                            "type": [
                              "number",
                              "null"
                            ]
                          },
                          "comparison_rate_at_loan_pct": {
                            "type": [
                              "number",
                              "null"
                            ],
                            "description": "comparison_rate_at_loan_pct is our calculation, not the bank's: the National Credit Code method (monthly principal and interest repayments over 25 years at the rate; upfront_fees paid at the start, annual_fee spread monthly, exit_fees paid at the end; the monthly rate solving present value of payments = amount borrowed, times 12, to two decimals) at this file's loan amount. A fixed rate holds for its fixed period and then revert_rate applies: the product's own variable rate where the feed ties one to it (revert_rate_basis linked), else our inference (revert_rate_basis inferred), the bank's variable rate chosen because it reproduces the bank's own comparison rate. Interest-only rows are calculated as principal and interest over 25 years, since the regulation defines no interest-only treatment. Penalty fees, break costs, government charges and lenders mortgage insurance are not in it. It is null when comparison_check failed (ours at $150,000 more than 0.05 points from the bank's own comparison_rate_pct, so the fee inputs are evidently incomplete), when the bank publishes no comparison rate, or when a fixed rate's revert rate is not known ('revert rate not published', 'revert rate ambiguous' or 'no variable rate reproduces the bank's figure'); comparison_check.reason says which."
                          },
                          "conditions": {},
                          "restrictions": {
                            "type": "array",
                            "items": {
                              "type": "string",
                              "enum": [
                                "above_max_lvr",
                                "bridging",
                                "broker_only",
                                "business",
                                "construction",
                                "dhoas",
                                "existing_customers",
                                "first_home_buyer",
                                "green",
                                "guarantor",
                                "interest_prepaid",
                                "introductory",
                                "land",
                                "line_of_credit",
                                "low_doc",
                                "non_resident",
                                "offer_ended",
                                "package",
                                "personal_loan",
                                "profession",
                                "refinance_only",
                                "relocation",
                                "restricted_membership",
                                "retiree",
                                "reverse_mortgage",
                                "revert_rate",
                                "rural",
                                "single_parent",
                                "smsf",
                                "staff"
                              ]
                            }
                          },
                          "eligibility": {
                            "type": [
                              "object",
                              "null"
                            ],
                            "description": "Set when the bank's product data or its own membership terms limit the product to a named occupation or employer group (and usually their families); null otherwise. Such rates are left out of entries and top, and ranked in entries_with_restricted and entries_all.",
                            "properties": {
                              "restricted": {
                                "type": "boolean",
                                "const": true
                              },
                              "who": {
                                "type": "string",
                                "description": "Our short label for who can borrow."
                              },
                              "quote": {
                                "type": "string",
                                "description": "The bank's own sentence, verbatim from the product's eligibility or the bank's page."
                              },
                              "source_url": {
                                "type": [
                                  "string",
                                  "null"
                                ],
                                "format": "uri",
                                "description": "Where the quote is from: the bank's product record, or the bank's own page when the record does not say."
                              }
                            },
                            "required": [
                              "restricted",
                              "who",
                              "quote",
                              "source_url"
                            ]
                          },
                          "record_stale": {},
                          "annual_fee": {
                            "type": [
                              "number",
                              "null"
                            ],
                            "description": "Ongoing fees per year: every periodic fee the bank lists, monthly and other periods converted to a yearly amount, penalty fees excluded. Null means none was listed, not necessarily none charged."
                          },
                          "upfront_fees": {
                            "type": [
                              "number",
                              "null"
                            ],
                            "description": "The total of the fixed fees the bank lists as charged when the loan is set up (establishment, application, valuation, settlement, legal and the like). Null means none was listed, not that there are none; check the bank's fee list."
                          },
                          "exit_fees": {
                            "type": [
                              "number",
                              "null"
                            ],
                            "description": "The total of the fixed fees the bank lists as charged to close the loan (discharge of mortgage, discharge settlement or legal fees, exit fees). Break costs and early repayment costs are not included. Null means none was listed, not that there are none; check the bank's fee list."
                          },
                          "lvr_min": {
                            "type": [
                              "number",
                              "null"
                            ],
                            "description": "Percent; the band runs above this."
                          },
                          "lvr_max": {
                            "type": [
                              "number",
                              "null"
                            ],
                            "description": "Percent; the band runs up to and including this."
                          },
                          "loan_min": {},
                          "loan_max": {},
                          "product_url": {},
                          "bank_last_updated": {
                            "type": [
                              "string",
                              "null"
                            ],
                            "format": "date-time"
                          }
                        },
                        "required": [
                          "rank",
                          "brand_label",
                          "brand_slug",
                          "product_label",
                          "rate_pct",
                          "comparison_rate_pct",
                          "comparison_rate_at_loan_pct",
                          "conditions",
                          "restrictions",
                          "eligibility",
                          "record_stale",
                          "annual_fee",
                          "upfront_fees",
                          "exit_fees",
                          "lvr_min",
                          "lvr_max",
                          "loan_min",
                          "loan_max",
                          "product_url",
                          "bank_last_updated"
                        ]
                      },
                      "description": "The top 10 with broker-only rates in; null when it equals top."
                    },
                    "restricted_note": {
                      "type": "string",
                      "description": "Whether banks open only to a named occupation or employer group change the top 10."
                    },
                    "top_with_restricted": {
                      "type": [
                        "array",
                        "null"
                      ],
                      "items": {
                        "type": "object",
                        "description": "A ranked rate cut to what it takes to quote it.",
                        "properties": {
                          "rank": {
                            "type": "integer"
                          },
                          "brand_label": {},
                          "brand_slug": {},
                          "product_label": {},
                          "rate_pct": {
                            "type": "number"
                          },
                          "comparison_rate_pct": {
                            "type": [
                              "number",
                              "null"
                            ]
                          },
                          "comparison_rate_at_loan_pct": {
                            "type": [
                              "number",
                              "null"
                            ],
                            "description": "comparison_rate_at_loan_pct is our calculation, not the bank's: the National Credit Code method (monthly principal and interest repayments over 25 years at the rate; upfront_fees paid at the start, annual_fee spread monthly, exit_fees paid at the end; the monthly rate solving present value of payments = amount borrowed, times 12, to two decimals) at this file's loan amount. A fixed rate holds for its fixed period and then revert_rate applies: the product's own variable rate where the feed ties one to it (revert_rate_basis linked), else our inference (revert_rate_basis inferred), the bank's variable rate chosen because it reproduces the bank's own comparison rate. Interest-only rows are calculated as principal and interest over 25 years, since the regulation defines no interest-only treatment. Penalty fees, break costs, government charges and lenders mortgage insurance are not in it. It is null when comparison_check failed (ours at $150,000 more than 0.05 points from the bank's own comparison_rate_pct, so the fee inputs are evidently incomplete), when the bank publishes no comparison rate, or when a fixed rate's revert rate is not known ('revert rate not published', 'revert rate ambiguous' or 'no variable rate reproduces the bank's figure'); comparison_check.reason says which."
                          },
                          "conditions": {},
                          "restrictions": {
                            "type": "array",
                            "items": {
                              "type": "string",
                              "enum": [
                                "above_max_lvr",
                                "bridging",
                                "broker_only",
                                "business",
                                "construction",
                                "dhoas",
                                "existing_customers",
                                "first_home_buyer",
                                "green",
                                "guarantor",
                                "interest_prepaid",
                                "introductory",
                                "land",
                                "line_of_credit",
                                "low_doc",
                                "non_resident",
                                "offer_ended",
                                "package",
                                "personal_loan",
                                "profession",
                                "refinance_only",
                                "relocation",
                                "restricted_membership",
                                "retiree",
                                "reverse_mortgage",
                                "revert_rate",
                                "rural",
                                "single_parent",
                                "smsf",
                                "staff"
                              ]
                            }
                          },
                          "eligibility": {
                            "type": [
                              "object",
                              "null"
                            ],
                            "description": "Set when the bank's product data or its own membership terms limit the product to a named occupation or employer group (and usually their families); null otherwise. Such rates are left out of entries and top, and ranked in entries_with_restricted and entries_all.",
                            "properties": {
                              "restricted": {
                                "type": "boolean",
                                "const": true
                              },
                              "who": {
                                "type": "string",
                                "description": "Our short label for who can borrow."
                              },
                              "quote": {
                                "type": "string",
                                "description": "The bank's own sentence, verbatim from the product's eligibility or the bank's page."
                              },
                              "source_url": {
                                "type": [
                                  "string",
                                  "null"
                                ],
                                "format": "uri",
                                "description": "Where the quote is from: the bank's product record, or the bank's own page when the record does not say."
                              }
                            },
                            "required": [
                              "restricted",
                              "who",
                              "quote",
                              "source_url"
                            ]
                          },
                          "record_stale": {},
                          "annual_fee": {
                            "type": [
                              "number",
                              "null"
                            ],
                            "description": "Ongoing fees per year: every periodic fee the bank lists, monthly and other periods converted to a yearly amount, penalty fees excluded. Null means none was listed, not necessarily none charged."
                          },
                          "upfront_fees": {
                            "type": [
                              "number",
                              "null"
                            ],
                            "description": "The total of the fixed fees the bank lists as charged when the loan is set up (establishment, application, valuation, settlement, legal and the like). Null means none was listed, not that there are none; check the bank's fee list."
                          },
                          "exit_fees": {
                            "type": [
                              "number",
                              "null"
                            ],
                            "description": "The total of the fixed fees the bank lists as charged to close the loan (discharge of mortgage, discharge settlement or legal fees, exit fees). Break costs and early repayment costs are not included. Null means none was listed, not that there are none; check the bank's fee list."
                          },
                          "lvr_min": {
                            "type": [
                              "number",
                              "null"
                            ],
                            "description": "Percent; the band runs above this."
                          },
                          "lvr_max": {
                            "type": [
                              "number",
                              "null"
                            ],
                            "description": "Percent; the band runs up to and including this."
                          },
                          "loan_min": {},
                          "loan_max": {},
                          "product_url": {},
                          "bank_last_updated": {
                            "type": [
                              "string",
                              "null"
                            ],
                            "format": "date-time"
                          }
                        },
                        "required": [
                          "rank",
                          "brand_label",
                          "brand_slug",
                          "product_label",
                          "rate_pct",
                          "comparison_rate_pct",
                          "comparison_rate_at_loan_pct",
                          "conditions",
                          "restrictions",
                          "eligibility",
                          "record_stale",
                          "annual_fee",
                          "upfront_fees",
                          "exit_fees",
                          "lvr_min",
                          "lvr_max",
                          "loan_min",
                          "loan_max",
                          "product_url",
                          "bank_last_updated"
                        ]
                      },
                      "description": "The top 10 with restricted-membership rates in (broker-only still out); null when it equals top."
                    }
                  }
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "purpose",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "enum": [
                "owner_occupied",
                "investment"
              ]
            }
          },
          {
            "name": "repayment",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "enum": [
                "principal_and_interest",
                "interest_only"
              ]
            }
          },
          {
            "name": "lvr",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "enum": [
                60,
                70,
                80,
                90,
                95
              ]
            }
          },
          {
            "name": "loan",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "enum": [
                300000,
                600000,
                1000000
              ]
            }
          },
          {
            "name": "kind",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "enum": [
                "variable",
                "fixed_1",
                "fixed_2",
                "fixed_3",
                "fixed_4",
                "fixed_5"
              ]
            }
          }
        ]
      }
    },
    "/au/finance/home-loans/v1/best.json": {
      "get": {
        "tags": [
          "home-loans"
        ],
        "summary": "Every bucket's default ranking in one file (large; each entry points into rows)",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "Each bucket entry here is {rank, row, comparison_rate_at_loan_pct}: row is an index into rows, which holds every other field of the entry once, however many buckets rank it. The full entry, as in the best/ slices, is rows[row] with rank and comparison_rate_at_loan_pct added.",
                  "properties": {
                    "rankings": {
                      "type": "object",
                      "additionalProperties": {
                        "type": "object",
                        "additionalProperties": {
                          "type": "object",
                          "additionalProperties": {
                            "type": "object",
                            "additionalProperties": {
                              "type": "object",
                              "additionalProperties": {
                                "type": "array",
                                "items": {
                                  "type": "object",
                                  "required": [
                                    "rank",
                                    "row"
                                  ],
                                  "properties": {
                                    "rank": {
                                      "type": "integer"
                                    },
                                    "row": {
                                      "type": "integer",
                                      "minimum": 0,
                                      "description": "Index into rows."
                                    },
                                    "comparison_rate_at_loan_pct": {
                                      "type": [
                                        "number",
                                        "null"
                                      ],
                                      "description": "comparison_rate_at_loan_pct is our calculation, not the bank's: the National Credit Code method (monthly principal and interest repayments over 25 years at the rate; upfront_fees paid at the start, annual_fee spread monthly, exit_fees paid at the end; the monthly rate solving present value of payments = amount borrowed, times 12, to two decimals) at this file's loan amount. A fixed rate holds for its fixed period and then revert_rate applies: the product's own variable rate where the feed ties one to it (revert_rate_basis linked), else our inference (revert_rate_basis inferred), the bank's variable rate chosen because it reproduces the bank's own comparison rate. Interest-only rows are calculated as principal and interest over 25 years, since the regulation defines no interest-only treatment. Penalty fees, break costs, government charges and lenders mortgage insurance are not in it. It is null when comparison_check failed (ours at $150,000 more than 0.05 points from the bank's own comparison_rate_pct, so the fee inputs are evidently incomplete), when the bank publishes no comparison rate, or when a fixed rate's revert rate is not known ('revert rate not published', 'revert rate ambiguous' or 'no variable rate reproduces the bank's figure'); comparison_check.reason says which."
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      },
                      "description": "rankings[purpose][repayment][lvr][loan][kind]: the bucket's default ranking (broker-only and restricted-membership rates left out; the best/ slices carry the other three)."
                    },
                    "rows": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "rank": {
                            "type": "integer"
                          },
                          "brand": {},
                          "brand_label": {},
                          "brand_slug": {},
                          "product_id": {},
                          "product_name": {},
                          "product_label": {},
                          "product_url": {},
                          "terms_url": {
                            "type": [
                              "string",
                              "null"
                            ],
                            "description": "The loan's terms document: the bank's own link from its product data, or one found by hand on the bank's site where it links none or only an index page (the bank's file says which, as terms_url_source)"
                          },
                          "rate_kind": {},
                          "lending_rate_type": {},
                          "fixed_months": {},
                          "kind": {
                            "type": [
                              "string",
                              "null"
                            ],
                            "enum": [
                              "variable",
                              "fixed_1",
                              "fixed_2",
                              "fixed_3",
                              "fixed_4",
                              "fixed_5",
                              null
                            ]
                          },
                          "purpose": {
                            "type": [
                              "string",
                              "null"
                            ],
                            "enum": [
                              "owner_occupied",
                              "investment",
                              "any",
                              null
                            ]
                          },
                          "repayment": {
                            "type": [
                              "string",
                              "null"
                            ],
                            "enum": [
                              "principal_and_interest",
                              "interest_only",
                              "any",
                              null
                            ]
                          },
                          "rate": {
                            "type": "number",
                            "description": "Annual rate as a fraction (0.0594 = 5.94% p.a.)."
                          },
                          "rate_pct": {
                            "type": "number"
                          },
                          "comparison_rate": {
                            "type": [
                              "number",
                              "null"
                            ],
                            "description": "The comparison rate is the bank's own figure. Australian law requires it to be calculated on a $150,000 secured loan over 25 years, including most fees, so it understates the effect of fees on a larger loan."
                          },
                          "comparison_rate_pct": {
                            "type": [
                              "number",
                              "null"
                            ]
                          },
                          "comparison_rate_at_loan_pct": {
                            "type": [
                              "number",
                              "null"
                            ],
                            "description": "comparison_rate_at_loan_pct is our calculation, not the bank's: the National Credit Code method (monthly principal and interest repayments over 25 years at the rate; upfront_fees paid at the start, annual_fee spread monthly, exit_fees paid at the end; the monthly rate solving present value of payments = amount borrowed, times 12, to two decimals) at this file's loan amount. A fixed rate holds for its fixed period and then revert_rate applies: the product's own variable rate where the feed ties one to it (revert_rate_basis linked), else our inference (revert_rate_basis inferred), the bank's variable rate chosen because it reproduces the bank's own comparison rate. Interest-only rows are calculated as principal and interest over 25 years, since the regulation defines no interest-only treatment. Penalty fees, break costs, government charges and lenders mortgage insurance are not in it. It is null when comparison_check failed (ours at $150,000 more than 0.05 points from the bank's own comparison_rate_pct, so the fee inputs are evidently incomplete), when the bank publishes no comparison rate, or when a fixed rate's revert rate is not known ('revert rate not published', 'revert rate ambiguous' or 'no variable rate reproduces the bank's figure'); comparison_check.reason says which."
                          },
                          "lvr_min": {
                            "type": [
                              "number",
                              "null"
                            ],
                            "description": "Percent; the band runs above this."
                          },
                          "lvr_max": {
                            "type": [
                              "number",
                              "null"
                            ],
                            "description": "Percent; the band runs up to and including this."
                          },
                          "lvr_source": {
                            "type": [
                              "string",
                              "null"
                            ],
                            "enum": [
                              "tier",
                              "text",
                              "product",
                              null
                            ],
                            "description": "Where the LVR band came from; null when the bank states none."
                          },
                          "loan_min": {},
                          "loan_max": {},
                          "offset": {},
                          "redraw": {},
                          "annual_fee": {
                            "type": [
                              "number",
                              "null"
                            ],
                            "description": "Ongoing fees per year: every periodic fee the bank lists, monthly and other periods converted to a yearly amount, penalty fees excluded. Null means none was listed, not necessarily none charged."
                          },
                          "upfront_fees": {
                            "type": [
                              "number",
                              "null"
                            ],
                            "description": "The total of the fixed fees the bank lists as charged when the loan is set up (establishment, application, valuation, settlement, legal and the like). Null means none was listed, not that there are none; check the bank's fee list."
                          },
                          "exit_fees": {
                            "type": [
                              "number",
                              "null"
                            ],
                            "description": "The total of the fixed fees the bank lists as charged to close the loan (discharge of mortgage, discharge settlement or legal fees, exit fees). Break costs and early repayment costs are not included. Null means none was listed, not that there are none; check the bank's fee list."
                          },
                          "revert_rate": {
                            "type": [
                              "number",
                              "null"
                            ],
                            "description": "Fixed rates only: the rate the loan reverts to after fixed_months, as a fraction. Where the feed ties one to it unambiguously (the product's own variable rate of the same purpose and repayment type), revert_rate_basis is linked. Otherwise, for principal and interest, it may be inferred: An inferred revert rate is our inference, not the bank's statement: the bank's own variable rate of the same purpose and repayment type whose LVR band covers the fixed rate's, chosen because with it our calculation reproduces the bank's own comparison rate at $150,000 (which by law assumes the rate the loan reverts to). Null where neither gives one rate."
                          },
                          "revert_rate_basis": {
                            "type": [
                              "string",
                              "null"
                            ],
                            "enum": [
                              "linked",
                              "inferred",
                              null
                            ],
                            "description": "How revert_rate was found: linked (the feed ties it to the fixed rate's product) or inferred (our inference: the bank's variable rate with which our calculation reproduces the bank's own comparison rate); null where revert_rate is null."
                          },
                          "comparison_check": {
                            "type": [
                              "object",
                              "null"
                            ],
                            "description": "Ranked rows only: our comparison rate at $150,000 over 25 years against the bank's comparison_rate_pct. ok is true when they are within 0.05 points; reason says why not otherwise ('revert rate not published', 'revert rate ambiguous', 'no variable rate reproduces the bank's figure', 'no bank comparison rate', or the inputs are incomplete).",
                            "properties": {
                              "ok": {
                                "type": "boolean"
                              },
                              "ours_at_150k": {
                                "type": [
                                  "number",
                                  "null"
                                ]
                              },
                              "bank": {
                                "type": [
                                  "number",
                                  "null"
                                ]
                              },
                              "reason": {
                                "type": "string"
                              }
                            },
                            "required": [
                              "ok",
                              "ours_at_150k",
                              "bank"
                            ]
                          },
                          "restrictions": {
                            "type": "array",
                            "items": {
                              "type": "string",
                              "enum": [
                                "above_max_lvr",
                                "bridging",
                                "broker_only",
                                "business",
                                "construction",
                                "dhoas",
                                "existing_customers",
                                "first_home_buyer",
                                "green",
                                "guarantor",
                                "interest_prepaid",
                                "introductory",
                                "land",
                                "line_of_credit",
                                "low_doc",
                                "non_resident",
                                "offer_ended",
                                "package",
                                "personal_loan",
                                "profession",
                                "refinance_only",
                                "relocation",
                                "restricted_membership",
                                "retiree",
                                "reverse_mortgage",
                                "revert_rate",
                                "rural",
                                "single_parent",
                                "smsf",
                                "staff"
                              ]
                            }
                          },
                          "eligibility": {
                            "type": [
                              "object",
                              "null"
                            ],
                            "description": "Set when the bank's product data or its own membership terms limit the product to a named occupation or employer group (and usually their families); null otherwise. Such rates are left out of entries and top, and ranked in entries_with_restricted and entries_all.",
                            "properties": {
                              "restricted": {
                                "type": "boolean",
                                "const": true
                              },
                              "who": {
                                "type": "string",
                                "description": "Our short label for who can borrow."
                              },
                              "quote": {
                                "type": "string",
                                "description": "The bank's own sentence, verbatim from the product's eligibility or the bank's page."
                              },
                              "source_url": {
                                "type": [
                                  "string",
                                  "null"
                                ],
                                "format": "uri",
                                "description": "Where the quote is from: the bank's product record, or the bank's own page when the record does not say."
                              }
                            },
                            "required": [
                              "restricted",
                              "who",
                              "quote",
                              "source_url"
                            ]
                          },
                          "conditions": {},
                          "record_stale": {},
                          "record_correction": {},
                          "source_url": {},
                          "source_snapshot": {
                            "type": "string",
                            "description": "Site-relative path of our verbatim snapshot of the bank's product detail response."
                          },
                          "bank_last_updated": {
                            "type": [
                              "string",
                              "null"
                            ],
                            "format": "date-time"
                          }
                        }
                      },
                      "description": "Every distinct ranked entry once, without rank and comparison_rate_at_loan_pct."
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/au/finance/home-loans/v1/rates.json": {
      "get": {
        "tags": [
          "home-loans"
        ],
        "summary": "Every rate row",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "rows": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "brand": {},
                          "brand_label": {},
                          "brand_slug": {},
                          "product_id": {},
                          "product_name": {},
                          "product_label": {},
                          "product_url": {},
                          "terms_url": {
                            "type": [
                              "string",
                              "null"
                            ],
                            "description": "The loan's terms document: the bank's own link from its product data, or one found by hand on the bank's site where it links none or only an index page (the bank's file says which, as terms_url_source)"
                          },
                          "rate_kind": {},
                          "lending_rate_type": {},
                          "fixed_months": {},
                          "kind": {
                            "type": [
                              "string",
                              "null"
                            ],
                            "enum": [
                              "variable",
                              "fixed_1",
                              "fixed_2",
                              "fixed_3",
                              "fixed_4",
                              "fixed_5",
                              null
                            ]
                          },
                          "purpose": {
                            "type": [
                              "string",
                              "null"
                            ],
                            "enum": [
                              "owner_occupied",
                              "investment",
                              "any",
                              null
                            ]
                          },
                          "repayment": {
                            "type": [
                              "string",
                              "null"
                            ],
                            "enum": [
                              "principal_and_interest",
                              "interest_only",
                              "any",
                              null
                            ]
                          },
                          "rate": {
                            "type": "number",
                            "description": "Annual rate as a fraction (0.0594 = 5.94% p.a.)."
                          },
                          "rate_pct": {
                            "type": "number"
                          },
                          "comparison_rate": {
                            "type": [
                              "number",
                              "null"
                            ],
                            "description": "The comparison rate is the bank's own figure. Australian law requires it to be calculated on a $150,000 secured loan over 25 years, including most fees, so it understates the effect of fees on a larger loan."
                          },
                          "comparison_rate_pct": {
                            "type": [
                              "number",
                              "null"
                            ]
                          },
                          "comparison_rate_at_loan_pct": {
                            "type": [
                              "number",
                              "null"
                            ],
                            "description": "comparison_rate_at_loan_pct is our calculation, not the bank's: the National Credit Code method (monthly principal and interest repayments over 25 years at the rate; upfront_fees paid at the start, annual_fee spread monthly, exit_fees paid at the end; the monthly rate solving present value of payments = amount borrowed, times 12, to two decimals) at this file's loan amount. A fixed rate holds for its fixed period and then revert_rate applies: the product's own variable rate where the feed ties one to it (revert_rate_basis linked), else our inference (revert_rate_basis inferred), the bank's variable rate chosen because it reproduces the bank's own comparison rate. Interest-only rows are calculated as principal and interest over 25 years, since the regulation defines no interest-only treatment. Penalty fees, break costs, government charges and lenders mortgage insurance are not in it. It is null when comparison_check failed (ours at $150,000 more than 0.05 points from the bank's own comparison_rate_pct, so the fee inputs are evidently incomplete), when the bank publishes no comparison rate, or when a fixed rate's revert rate is not known ('revert rate not published', 'revert rate ambiguous' or 'no variable rate reproduces the bank's figure'); comparison_check.reason says which."
                          },
                          "lvr_min": {
                            "type": [
                              "number",
                              "null"
                            ],
                            "description": "Percent; the band runs above this."
                          },
                          "lvr_max": {
                            "type": [
                              "number",
                              "null"
                            ],
                            "description": "Percent; the band runs up to and including this."
                          },
                          "lvr_source": {
                            "type": [
                              "string",
                              "null"
                            ],
                            "enum": [
                              "tier",
                              "text",
                              "product",
                              null
                            ],
                            "description": "Where the LVR band came from; null when the bank states none."
                          },
                          "loan_min": {},
                          "loan_max": {},
                          "offset": {},
                          "redraw": {},
                          "annual_fee": {
                            "type": [
                              "number",
                              "null"
                            ],
                            "description": "Ongoing fees per year: every periodic fee the bank lists, monthly and other periods converted to a yearly amount, penalty fees excluded. Null means none was listed, not necessarily none charged."
                          },
                          "upfront_fees": {
                            "type": [
                              "number",
                              "null"
                            ],
                            "description": "The total of the fixed fees the bank lists as charged when the loan is set up (establishment, application, valuation, settlement, legal and the like). Null means none was listed, not that there are none; check the bank's fee list."
                          },
                          "exit_fees": {
                            "type": [
                              "number",
                              "null"
                            ],
                            "description": "The total of the fixed fees the bank lists as charged to close the loan (discharge of mortgage, discharge settlement or legal fees, exit fees). Break costs and early repayment costs are not included. Null means none was listed, not that there are none; check the bank's fee list."
                          },
                          "revert_rate": {
                            "type": [
                              "number",
                              "null"
                            ],
                            "description": "Fixed rates only: the rate the loan reverts to after fixed_months, as a fraction. Where the feed ties one to it unambiguously (the product's own variable rate of the same purpose and repayment type), revert_rate_basis is linked. Otherwise, for principal and interest, it may be inferred: An inferred revert rate is our inference, not the bank's statement: the bank's own variable rate of the same purpose and repayment type whose LVR band covers the fixed rate's, chosen because with it our calculation reproduces the bank's own comparison rate at $150,000 (which by law assumes the rate the loan reverts to). Null where neither gives one rate."
                          },
                          "revert_rate_basis": {
                            "type": [
                              "string",
                              "null"
                            ],
                            "enum": [
                              "linked",
                              "inferred",
                              null
                            ],
                            "description": "How revert_rate was found: linked (the feed ties it to the fixed rate's product) or inferred (our inference: the bank's variable rate with which our calculation reproduces the bank's own comparison rate); null where revert_rate is null."
                          },
                          "comparison_check": {
                            "type": [
                              "object",
                              "null"
                            ],
                            "description": "Ranked rows only: our comparison rate at $150,000 over 25 years against the bank's comparison_rate_pct. ok is true when they are within 0.05 points; reason says why not otherwise ('revert rate not published', 'revert rate ambiguous', 'no variable rate reproduces the bank's figure', 'no bank comparison rate', or the inputs are incomplete).",
                            "properties": {
                              "ok": {
                                "type": "boolean"
                              },
                              "ours_at_150k": {
                                "type": [
                                  "number",
                                  "null"
                                ]
                              },
                              "bank": {
                                "type": [
                                  "number",
                                  "null"
                                ]
                              },
                              "reason": {
                                "type": "string"
                              }
                            },
                            "required": [
                              "ok",
                              "ours_at_150k",
                              "bank"
                            ]
                          },
                          "restrictions": {
                            "type": "array",
                            "items": {
                              "type": "string",
                              "enum": [
                                "above_max_lvr",
                                "bridging",
                                "broker_only",
                                "business",
                                "construction",
                                "dhoas",
                                "existing_customers",
                                "first_home_buyer",
                                "green",
                                "guarantor",
                                "interest_prepaid",
                                "introductory",
                                "land",
                                "line_of_credit",
                                "low_doc",
                                "non_resident",
                                "offer_ended",
                                "package",
                                "personal_loan",
                                "profession",
                                "refinance_only",
                                "relocation",
                                "restricted_membership",
                                "retiree",
                                "reverse_mortgage",
                                "revert_rate",
                                "rural",
                                "single_parent",
                                "smsf",
                                "staff"
                              ]
                            }
                          },
                          "eligibility": {
                            "type": [
                              "object",
                              "null"
                            ],
                            "description": "Set when the bank's product data or its own membership terms limit the product to a named occupation or employer group (and usually their families); null otherwise. Such rates are left out of entries and top, and ranked in entries_with_restricted and entries_all.",
                            "properties": {
                              "restricted": {
                                "type": "boolean",
                                "const": true
                              },
                              "who": {
                                "type": "string",
                                "description": "Our short label for who can borrow."
                              },
                              "quote": {
                                "type": "string",
                                "description": "The bank's own sentence, verbatim from the product's eligibility or the bank's page."
                              },
                              "source_url": {
                                "type": [
                                  "string",
                                  "null"
                                ],
                                "format": "uri",
                                "description": "Where the quote is from: the bank's product record, or the bank's own page when the record does not say."
                              }
                            },
                            "required": [
                              "restricted",
                              "who",
                              "quote",
                              "source_url"
                            ]
                          },
                          "conditions": {},
                          "record_stale": {},
                          "record_correction": {},
                          "source_url": {},
                          "source_snapshot": {
                            "type": "string",
                            "description": "Site-relative path of our verbatim snapshot of the bank's product detail response."
                          },
                          "bank_last_updated": {
                            "type": [
                              "string",
                              "null"
                            ],
                            "format": "date-time"
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/au/finance/home-loans/v1/brands.json": {
      "get": {
        "tags": [
          "home-loans"
        ],
        "summary": "Banks with home loan products",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/au/finance/home-loans/v1/brands/{brand_slug}.json": {
      "get": {
        "tags": [
          "home-loans"
        ],
        "summary": "One bank's lowest rates (at_a_glance), products and rate rows",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "at_a_glance": {
                      "type": "object",
                      "description": "The bank's lowest ranked rate per purpose, repayment type and kind in a few kB, placed before products and rows so a client that truncates the file can still answer what the bank charges. Each line is the lowest of the bank's own entries in best/{purpose}/{repayment}/{lvr}/{loan}/{kind}.json.",
                      "properties": {
                        "note": {
                          "type": "string"
                        },
                        "rates": {
                          "type": "array",
                          "items": {
                            "type": "object",
                            "properties": {
                              "purpose": {
                                "type": "string",
                                "enum": [
                                  "owner_occupied",
                                  "investment"
                                ]
                              },
                              "repayment": {
                                "type": "string",
                                "enum": [
                                  "principal_and_interest",
                                  "interest_only"
                                ]
                              },
                              "kind": {
                                "type": "string",
                                "enum": [
                                  "variable",
                                  "fixed_1",
                                  "fixed_2",
                                  "fixed_3",
                                  "fixed_4",
                                  "fixed_5"
                                ]
                              },
                              "rate_pct": {
                                "type": "number"
                              },
                              "comparison_rate_pct": {
                                "type": [
                                  "number",
                                  "null"
                                ]
                              },
                              "comparison_rate_at_600000_pct": {
                                "type": [
                                  "number",
                                  "null"
                                ],
                                "description": "comparison_rate_at_600000_pct is our comparison rate for a $600,000 loan over 25 years from the bank's published fees, not the bank's own figure (comparison_rate_pct, on $150,000); null where our check against the bank's figure failed or a fixed rate's revert rate is not known."
                              },
                              "product_label": {
                                "type": "string"
                              },
                              "lvr_min": {
                                "type": [
                                  "number",
                                  "null"
                                ]
                              },
                              "lvr_max": {
                                "type": [
                                  "number",
                                  "null"
                                ],
                                "description": "Null with lvr_min: no LVR band stated, read as up to 80%."
                              },
                              "reference_lvrs": {
                                "type": "array",
                                "items": {
                                  "type": "integer"
                                },
                                "description": "Bucket LVRs at which this is the bank's entry."
                              },
                              "loan_min": {
                                "type": [
                                  "number",
                                  "null"
                                ]
                              },
                              "loan_max": {
                                "type": [
                                  "number",
                                  "null"
                                ]
                              },
                              "annual_fee": {
                                "type": [
                                  "number",
                                  "null"
                                ]
                              },
                              "upfront_fees": {
                                "type": [
                                  "number",
                                  "null"
                                ]
                              },
                              "exit_fees": {
                                "type": [
                                  "number",
                                  "null"
                                ]
                              },
                              "conditions": {
                                "type": [
                                  "string",
                                  "null"
                                ],
                                "description": "Key into condition_sets."
                              },
                              "restrictions": {
                                "type": "array",
                                "items": {
                                  "type": "string"
                                }
                              },
                              "eligibility": {
                                "type": [
                                  "string",
                                  "null"
                                ],
                                "description": "Key into eligibility_sets; null when anyone may apply."
                              },
                              "record_stale": {
                                "type": "boolean"
                              }
                            }
                          }
                        },
                        "eligibility_sets": {
                          "type": "object",
                          "additionalProperties": {
                            "type": [
                              "object",
                              "null"
                            ],
                            "description": "Set when the bank's product data or its own membership terms limit the product to a named occupation or employer group (and usually their families); null otherwise. Such rates are left out of entries and top, and ranked in entries_with_restricted and entries_all.",
                            "properties": {
                              "restricted": {
                                "type": "boolean",
                                "const": true
                              },
                              "who": {
                                "type": "string",
                                "description": "Our short label for who can borrow."
                              },
                              "quote": {
                                "type": "string",
                                "description": "The bank's own sentence, verbatim from the product's eligibility or the bank's page."
                              },
                              "source_url": {
                                "type": [
                                  "string",
                                  "null"
                                ],
                                "format": "uri",
                                "description": "Where the quote is from: the bank's product record, or the bank's own page when the record does not say."
                              }
                            },
                            "required": [
                              "restricted",
                              "who",
                              "quote",
                              "source_url"
                            ]
                          },
                          "description": "Present only for a bank with restricted-membership rates."
                        },
                        "condition_sets": {
                          "type": "object",
                          "additionalProperties": {
                            "type": "array",
                            "items": {
                              "type": "string"
                            }
                          }
                        },
                        "unranked": {
                          "type": "object",
                          "additionalProperties": {
                            "type": "integer"
                          },
                          "description": "rows: the bank's rows no bucket ranks, then how many of them are construction, first_home_buyer, introductory or revert_rate."
                        }
                      }
                    },
                    "products": {
                      "type": "array"
                    },
                    "rows": {
                      "type": "array"
                    }
                  }
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "brand_slug",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ]
      }
    }
  }
}
