UK discount codes, product prices and price drops, phone deals, what's on and airport parking.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Car parks UK parking providers sell at the UK's main airports: meet and greet, park and ride and on-airport, with transfer times, terminals, Safer Parking status, compulsory charges on the day and, for given drop-off and pick-up times, the full price including known fees, with a tracked link to book. Prices are only for a stay given by `from` and `to`.
Airport name or IATA code, e.g. "Gatwick", "MAN"
London local time, YYYY-MM-DDTHH:mm
London local time, YYYY-MM-DDTHH:mm
Only this kind of car park
Car parks UK parking providers sell at the UK's main airports: meet and greet, park and ride and on-airport, with transfer times, terminals, Safer Parking status, compulsory charges on the day and, for given drop-off and pick-up times, the full price including known fees, with a tracked link to book. Prices are only for a stay given by `from` and `to`.
| Argument | Type | Description |
|---|---|---|
| to | string | London local time, YYYY-MM-DDTHH:mm |
| from | string | London local time, YYYY-MM-DDTHH:mm |
| type | string | Only this kind of car park |
| limit | integer | |
| airport* | string | Airport name or IATA code, e.g. "Gatwick", "MAN" |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"airport"
],
"properties": {
"to": {
"type": "string",
"pattern": "^\\d{4}-\\d\\d-\\d\\dT\\d\\d:\\d\\d$",
"description": "London local time, YYYY-MM-DDTHH:mm"
},
"from": {
"type": "string",
"pattern": "^\\d{4}-\\d\\d-\\d\\dT\\d\\d:\\d\\d$",
"description": "London local time, YYYY-MM-DDTHH:mm"
},
"type": {
"enum": [
"meet-and-greet",
"park-and-ride",
"on-airport"
],
"type": "string",
"description": "Only this kind of car park"
},
"limit": {
"type": "integer",
"default": 8,
"maximum": 20,
"minimum": 1
},
"airport": {
"type": "string",
"maxLength": 60,
"minLength": 2,
"description": "Airport name or IATA code, e.g. \"Gatwick\", \"MAN\""
}
}
}What a UK employee's pay comes to after income tax, National Insurance (category A), student loan and a workplace pension, for the current tax year, by the year, month and week, with each tax band, the sources and a link to the worked answer on vouchernaut.com. Worked on the year as a whole, as HMRC's rates are; a payslip works each pay period on its own, so it can be a few pounds a year different. Covers England, Wales, Northern Ireland and Scotland and everyday tax codes, not K codes, benefits in kind, other income or the self-employed. Information, not financial advice.
| Argument | Type | Description |
|---|---|---|
| per | string | What the salary is per |
| region | string | Where the employee lives for tax: Scotland sets its own bands |
| salary* | number | Pay before anything comes off, in pounds, for the `per` period |
| pension | string | Workplace pension: net pay (taken before tax), ras (relief at source: taken after tax, basic rate relief added) or sacrifice (salary sacrifice) |
| tax_code | string | Their tax code, e.g. "1257L", "S1257L", "BR"; leave out for the standard one |
| student_loans | array | Student loan plans repaid through pay: plan1 (England or Wales before September 2012, and Northern Ireland), plan2 (England from September 2012 to July 2023, and Wales from September 2012), plan4 (Scotland), plan5 (England from August 2023), postgrad (master's or doctoral loans in England or Wales) |
Whether a product's price at a UK shop is a real deal, from Vouchernaut's own record of that shop's prices: pass a product page link from the shop, a barcode, a product's name or a `ref` ("<store>/<product>"). Gives the verdict on today's price (lowest we've recorded, no change, cheaper before and when), the shops selling the same product for less today, and a tracked link to buy. Says plainly when the shop isn't one whose prices are tracked. Never uses shops' own "was" prices or RRPs.
| Argument | Type | Description |
|---|---|---|
| query* | string | A product link from the shop, a barcode (8 to 14 digits), a product name ("dairy milk 200g") or a ref |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"query"
],
"properties": {
"query": {
"type": "string",
"maxLength": 2000,
"minLength": 2,
"description": "A product link from the shop, a barcode (8 to 14 digits), a product name (\"dairy milk 200g\") or a ref"
}
}
}The UK consumer rights that apply to something bought (faulty, not arrived, poor service or a change of mind), strongest first, each with its last day as a date and the law it comes from (Consumer Rights Act 2015, Consumer Contracts Regulations 2013), then what the way it was paid adds (section 75, chargeback, PayPal, buy now pay later) and where to go next. Legal information, not legal advice: it never decides a claim.
| Argument | Type | Description |
|---|---|---|
| kind* | string | Something physical, a download or app, or a service |
| paid* | string | Credit card, debit card, buy now pay later, PayPal, or cash or another way |
| price* | number | The price of the one item, in pounds |
| bought* | string | Online (or by phone or post), in a shop, or at the door or away from a shop |
| nation | string | Where the buyer lives: it sets the time limits and where to go next |
| problem* | string | What went wrong, by kind: faulty, not-arrived, changed-mind (goods); faulty, changed-mind (digital); poor-service, changed-mind (service). faulty covers not as described |
The full text of one result from search: a store's live codes and deals with their links, a product's price and code (a code itself only where the brand has approved AI assistants, else the store's vouchernaut.com page), a phone's deals, or a buying guide.
| Argument | Type | Description |
|---|---|---|
| id* | string | An id from search |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"maxLength": 300,
"minLength": 3,
"description": "An id from search"
}
}
}Every deal UK retailers list for one phone on Vouchernaut's phone finder: monthly price with its upfront cost, contract length, total cost over the contract with announced price rises included (and each rise in pounds and month), data, network and seller, with a tracked link to the retailer. Filter by storage, colour, condition, budget, network, contract length and data.
| Argument | Type | Description |
|---|---|---|
| sort | string | Lowest total cost (default), lowest monthly, lowest upfront, or most data |
| limit | integer | Deals to return |
| phone* | string | The phone, e.g. "iPhone 16", "Galaxy S25 Ultra" |
| colour | string | Colour as the retailers name it |
| months | any | Contract length in months (1 is monthly rolling) |
| network | string | Only plans on this network (brands on it, like iD Mobile on Three, count) |
| storage | integer | Storage in GB |
| upgrade | boolean | Deals for customers already on the network |
Software and AI tools Vouchernaut covers (AI assistants, meeting notes, dictation, website builders, email marketing and more): price, free plan, trial, platforms, review scores and any live deal, with each tool's vouchernaut.com page. Each tool's slug is also its store's slug. Without `category`, it covers every category and lists them.
| Argument | Type | Description |
|---|---|---|
| limit | integer | |
| query | string | Words to match in the name or tagline |
| category | string | A category slug from the list, e.g. "ai-assistants" |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"limit": {
"type": "integer",
"default": 10,
"maximum": 25,
"minimum": 1
},
"query": {
"type": "string",
"maxLength": 80,
"description": "Words to match in the name or tagline"
},
"category": {
"type": "string",
"maxLength": 80,
"description": "A category slug from the list, e.g. \"ai-assistants\""
}
}
}Results of Vouchernaut's reader polls (UK shoppers answering short questions in its guides): the question, each answer's votes and share, and the poll's page to cite. Shares are quotable ("one in three readers") only once a poll has 100 answers. Without `poll`, it lists the polls.
| Argument | Type | Description |
|---|---|---|
| poll | string | The poll's slug, from the list |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"poll": {
"type": "string",
"maxLength": 120,
"description": "The poll's slug, from the list"
}
}
}One product, by its `ref` ("<store>/<product>") or its vouchernaut.com page: every variant's price and stock, the store's best discount code that covers it and the price after it (the code itself only where the brand has approved AI assistants, else the saving and the store page that reveals it), its price history (lowest, typical, now), delivery, the same product at other stores and a tracked link to buy.
| Argument | Type | Description |
|---|---|---|
| product* | string | The product's ref ("candles-direct/sandalwood-rose") or its page URL |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"product"
],
"properties": {
"product": {
"type": "string",
"maxLength": 300,
"minLength": 3,
"description": "The product's ref (\"candles-direct/sandalwood-rose\") or its page URL"
}
}
}Every live discount code and deal Vouchernaut lists for one UK store, in the order its store page shows them: what each saves, its terms and end date, how many shoppers said it worked or failed, and a link that opens the store with the offer. A code itself comes only where the brand has approved AI assistants; any other comes without it (`code_on_page`), linking to the store's vouchernaut.com page, where the shopper reveals it. The store can be named ("Arena Flowers"), or given by its slug or its vouchernaut.com page. Each link may earn Vouchernaut a commission, which every result discloses.
| Argument | Type | Description |
|---|---|---|
| kind | string | Only codes, only deals, or both |
| store* | string | The store's name, slug or vouchernaut.com store page URL |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"store"
],
"properties": {
"kind": {
"enum": [
"all",
"code",
"deal"
],
"type": "string",
"default": "all",
"description": "Only codes, only deals, or both"
},
"store": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "The store's name, slug or vouchernaut.com store page URL"
}
}
}Products across UK stores whose price fell in the last 30 days from a price the store had held for at least 28 days, biggest fall first. Each comes with the old and new price and a tracked link. Narrow by search words, product type, store or price.
| Argument | Type | Description |
|---|---|---|
| type | string | A product type, e.g. flowers, plants, chocolate, food, drinks, candles, beauty, jewellery, cards, balloons, toys, home; children with a dot ("flowers.dried") |
| limit | integer | Products to return |
| query | string | Search words, e.g. "orchid" |
| store | string | Only this store (its slug, e.g. "arena-flowers") |
| max_price | number | Most it should cost, in pounds |
| min_price | number | Least it should cost, in pounds |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"type": {
"type": "string",
"maxLength": 80,
"description": "A product type, e.g. flowers, plants, chocolate, food, drinks, candles, beauty, jewellery, cards, balloons, toys, home; children with a dot (\"flowers.dried\")"
},
"limit": {
"type": "integer",
"default": 8,
"maximum": 20,
"minimum": 1,
"description": "Products to return"
},
"query": {
"type": "string",
"maxLength": 100,
"description": "Search words, e.g. \"orchid\""
},
"store": {
"type": "string",
"maxLength": 180,
"description": "Only this store (its slug, e.g. \"arena-flowers\")"
},
"max_price": {
"type": "number",
"maximum": 100000,
"description": "Most it should cost, in pounds",
"exclusiveMinimum": 0
},
"min_price": {
"type": "number",
"maximum": 100000,
"minimum": 0,
"description": "Least it should cost, in pounds"
}
}
}Search Vouchernaut, a UK shopping guide: stores with discount codes, products and their prices, phones on its phone finder, and its buying guides. Each result has an id, a title and its page's URL.
| Argument | Type | Description |
|---|---|---|
| query* | string | What to look for |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"query"
],
"properties": {
"query": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "What to look for"
}
}
}Search the products UK stores sell through Vouchernaut (flowers, gifts, hampers, candles, homeware and more): title, store, price, the price after the store's best discount code, honest price-history notes ("Down from", "Lowest in 90 days"), the same product at other stores, and a tracked link to buy. Each product has a `ref` ("<store>/<product>").
| Argument | Type | Description |
|---|---|---|
| sort | string | Order: best match (default), cheapest, dearest, newest or biggest price drop |
| type | string | A product type, e.g. flowers, plants, chocolate, food, drinks, candles, beauty, jewellery, cards, balloons, toys, home; children with a dot ("flowers.dried") |
| limit | integer | Products to return |
| query* | string | What the shopper wants, e.g. "red roses", "birthday hamper" |
| store | string | Only this store (its slug, e.g. "arena-flowers") |
| on_sale | boolean | Only products below the store's full price |
| max_price | number | Most it should cost, in pounds |
| min_price | number |
Search the UK stores Vouchernaut lists by name or category ("flowers", "Currys", "phone cases"). Each store comes with how many live codes and deals it has, its best few offers with tracked links (each code itself only where the brand has approved AI assistants, else its vouchernaut.com page), a link to shop there and its vouchernaut.com page.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Stores to return |
| query* | string | A store name or what's being bought |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"query"
],
"properties": {
"limit": {
"type": "integer",
"default": 6,
"maximum": 10,
"minimum": 1,
"description": "Stores to return"
},
"query": {
"type": "string",
"maxLength": 100,
"minLength": 1,
"description": "A store name or what's being bought"
}
}
}SIM-only plans UK retailers list on Vouchernaut: monthly price with upfront cost, contract length, total cost with announced price rises included, data, network and seller, with a tracked link. Filter by data, budget, network and contract length. Unlimited data is subject to fair use.
| Argument | Type | Description |
|---|---|---|
| sort | string | Lowest total cost (default), lowest monthly, lowest upfront, or most data |
| limit | integer | Deals to return |
| months | any | Contract length in months (1 is monthly rolling) |
| network | string | Only plans on this network (brands on it, like iD Mobile on Three, count) |
| upgrade | boolean | Deals for customers already on the network |
| min_data | string | At least this many GB a month, or unlimited |
| max_monthly | integer | Most a month, in whole pounds |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"sort": {
"enum": [
"total",
"monthly",
"upfront",
"data"
],
"type": "string",
"default": "total",
"description": "Lowest total cost (default), lowest monthly, lowest upfront, or most data"
},
"limit": {
"type": "integer",
"default": 6,
"maximum": 15,
"minimum": 1,
"description": "Deals to return"
},
"months": {
"anyOf": [
{
"type": "number",
"const": 1
},
{
"type": "number",
"const": 12
},
{
"type": "number",
"const": 24
},
{
"type": "number",
"const": 36
}
],
"description": "Contract length in months (1 is monthly rolling)"
},
"network": {
"enum": [
"EE",
"O2",
"Three",
"Vodafone"
],
"type": "string",
"description": "Only plans on this network (brands on it, like iD Mobile on Three, count)"
},
"upgrade": {
"type": "boolean",
"description": "Deals for customers already on the network"
},
"min_data": {
"enum": [
"10",
"50",
"100",
"unlimited"
],
"type": "string",
"description": "At least this many GB a month, or unlimited"
},
"max_monthly": {
"type": "integer",
"maximum": 1000,
"minimum": 1,
"description": "Most a month, in whole pounds"
}
}
}What a UK student loan costs a month now, and whether it's cleared or written off first: a month-by-month projection to the plan's write-off on stated assumptions (pay rises and RPI, which the caller may change), with this year's threshold and interest rate, the total repaid and the sources. A projection, not a forecast, and information, not financial advice: it never says whether to pay a loan off early.
| Argument | Type | Description |
|---|---|---|
| plan* | string | plan1 (England or Wales before September 2012, and Northern Ireland), plan2 (England from September 2012 to July 2023, and Wales from September 2012), plan4 (Scotland), plan5 (England from August 2023), postgrad (master's or doctoral loans in England or Wales) |
| salary* | number | Pay before tax for a year, in pounds |
| balance* | number | What's owed now, in pounds |
| rpi_percent | number | Assumed RPI a year, after this year's published rates |
| extra_monthly | number | Paid on top each month, in pounds |
| first_due_year* | integer | The year of the April repayments were first due: the April after leaving the course |
Gigs, comedy, theatre, festivals, exhibitions and things to do in about 90 UK places, from ticket and experience sellers: title, date and time, venue and address, the lowest price where the seller's price includes its fees, and a tracked link to buy tickets. Filter by when, a date, category or words.
| Argument | Type | Description |
|---|---|---|
| city* | string | A UK town or city, e.g. "Manchester" |
| date | string | One day, YYYY-MM-DD (London time) |
| when | string | today, tomorrow, weekend, week (next 7 days) or month (next 30) |
| limit | integer | |
| query | string | An artist, show or words to match |
| category | string | |
| things_to_do | boolean | Experiences and attractions open any day, rather than dated events |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"city"
],
"properties": {
"city": {
"type": "string",
"maxLength": 80,
"minLength": 2,
"description": "A UK town or city, e.g. \"Manchester\""
},
"date": {
"type": "string",
"pattern": "^\\d{4}-\\d\\d-\\d\\d$",
"description": "One day, YYYY-MM-DD (London time)"
},
"when": {
"enum": [
"today",
"tomorrow",
"weekend",
"week",
"month"
],
"type": "string",
"description": "today, tomorrow, weekend, week (next 7 days) or month (next 30)"
},
"limit": {
"type": "integer",
"default": 8,
"maximum": 20,
"minimum": 1
},
"query": {
"type": "string",
"maxLength": 80,
"description": "An artist, show or words to match"
},
"category": {
"enum": [
"gigs",
"comedy",
"theatre",
"classical",
"clubs",
"festivals",
"talks",
"exhibitions",
"film",
"football",
"sport",
"special",
"tours",
"attractions",
"food-drink",
"classes",
"outdoors",
"day-trips",
"games"
],
"type": "string"
},
"things_to_do": {
"type": "boolean",
"description": "Experiences and attractions open any day, rather than dated events"
}
}
}| hours_per_week | number | Hours worked a week, for an hourly rate |
| pension_monthly | number | Or the contribution in pounds a month |
| pension_percent | number | The employee's contribution as a percent of pay |
| pension_on_qualifying_earnings | boolean | Whether the percent is of qualifying earnings (the auto-enrolment band) rather than all pay |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"salary"
],
"properties": {
"per": {
"enum": [
"year",
"month",
"week",
"hour"
],
"type": "string",
"default": "year",
"description": "What the salary is per"
},
"region": {
"enum": [
"england",
"wales",
"northern-ireland",
"scotland"
],
"type": "string",
"default": "england",
"description": "Where the employee lives for tax: Scotland sets its own bands"
},
"salary": {
"type": "number",
"maximum": 9999999,
"description": "Pay before anything comes off, in pounds, for the `per` period",
"exclusiveMinimum": 0
},
"pension": {
"enum": [
"none",
"net",
"ras",
"sacrifice"
],
"type": "string",
"default": "none",
"description": "Workplace pension: net pay (taken before tax), ras (relief at source: taken after tax, basic rate relief added) or sacrifice (salary sacrifice)"
},
"tax_code": {
"type": "string",
"maxLength": 12,
"description": "Their tax code, e.g. \"1257L\", \"S1257L\", \"BR\"; leave out for the standard one"
},
"student_loans": {
"type": "array",
"items": {
"enum": [
"plan1",
"plan2",
"plan4",
"plan5",
"postgrad"
],
"type": "string"
},
"default": [],
"maxItems": 5,
"description": "Student loan plans repaid through pay: plan1 (England or Wales before September 2012, and Northern Ireland), plan2 (England from September 2012 to July 2023, and Wales from September 2012), plan4 (Scotland), plan5 (England from August 2023), postgrad (master's or doctoral loans in England or Wales)"
},
"hours_per_week": {
"type": "number",
"default": 37.5,
"maximum": 100,
"description": "Hours worked a week, for an hourly rate",
"exclusiveMinimum": 0
},
"pension_monthly": {
"type": "number",
"maximum": 9999999,
"description": "Or the contribution in pounds a month",
"exclusiveMinimum": 0
},
"pension_percent": {
"type": "number",
"maximum": 100,
"minimum": 0,
"description": "The employee's contribution as a percent of pay"
},
"pension_on_qualifying_earnings": {
"type": "boolean",
"default": false,
"description": "Whether the percent is of qualifying earnings (the auto-enrolment band) rather than all pay"
}
}
}| arrived_on |
| string |
| The day it was delivered (goods bought online or at the door), or the day it was marked delivered when it hasn't arrived. Leave out for a shop purchase |
| exceptions | array | For a change of mind, what may take away the 14 days: personalised, perishable, unsealed-hygiene, unsealed-media (goods); download-started (digital); dated-booking (service) |
| ordered_on* | string | The day it was bought or ordered, YYYY-MM-DD |
| left_where_asked | boolean | Marked delivered: the courier left it with someone or somewhere the buyer chose |
| agreed_delivery_on | string | Not arrived: the delivery day agreed with the seller, YYYY-MM-DD |
| delivery_essential | boolean | Not arrived: the buyer told the seller the date was essential |
| seller_refused_to_deliver | boolean |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"bought",
"kind",
"problem",
"ordered_on",
"price",
"paid"
],
"properties": {
"kind": {
"enum": [
"goods",
"digital",
"service"
],
"type": "string",
"description": "Something physical, a download or app, or a service"
},
"paid": {
"enum": [
"credit",
"debit",
"bnpl",
"paypal",
"cash"
],
"type": "string",
"description": "Credit card, debit card, buy now pay later, PayPal, or cash or another way"
},
"price": {
"type": "number",
"maximum": 9999999,
"description": "The price of the one item, in pounds",
"exclusiveMinimum": 0
},
"bought": {
"enum": [
"online",
"shop",
"doorstep"
],
"type": "string",
"description": "Online (or by phone or post), in a shop, or at the door or away from a shop"
},
"nation": {
"enum": [
"england-wales",
"scotland",
"ni"
],
"type": "string",
"default": "england-wales",
"description": "Where the buyer lives: it sets the time limits and where to go next"
},
"problem": {
"enum": [
"faulty",
"not-arrived",
"changed-mind",
"poor-service"
],
"type": "string",
"description": "What went wrong, by kind: faulty, not-arrived, changed-mind (goods); faulty, changed-mind (digital); poor-service, changed-mind (service). faulty covers not as described"
},
"arrived_on": {
"type": "string",
"description": "The day it was delivered (goods bought online or at the door), or the day it was marked delivered when it hasn't arrived. Leave out for a shop purchase"
},
"exceptions": {
"type": "array",
"items": {
"enum": [
"personalised",
"perishable",
"unsealed-hygiene",
"unsealed-media",
"download-started",
"dated-booking"
],
"type": "string"
},
"default": [],
"maxItems": 6,
"description": "For a change of mind, what may take away the 14 days: personalised, perishable, unsealed-hygiene, unsealed-media (goods); download-started (digital); dated-booking (service)"
},
"ordered_on": {
"type": "string",
"description": "The day it was bought or ordered, YYYY-MM-DD"
},
"left_where_asked": {
"type": "boolean",
"default": false,
"description": "Marked delivered: the courier left it with someone or somewhere the buyer chose"
},
"agreed_delivery_on": {
"type": "string",
"description": "Not arrived: the delivery day agreed with the seller, YYYY-MM-DD"
},
"delivery_essential": {
"type": "boolean",
"default": false,
"description": "Not arrived: the buyer told the seller the date was essential"
},
"seller_refused_to_deliver": {
"type": "boolean",
"default": false
}
}
}| min_data | string | At least this many GB a month, or unlimited |
| condition | string |
| max_monthly | integer | Most a month, in whole pounds |
| max_upfront | integer | Most upfront, in whole pounds |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"phone"
],
"properties": {
"sort": {
"enum": [
"total",
"monthly",
"upfront",
"data"
],
"type": "string",
"default": "total",
"description": "Lowest total cost (default), lowest monthly, lowest upfront, or most data"
},
"limit": {
"type": "integer",
"default": 6,
"maximum": 15,
"minimum": 1,
"description": "Deals to return"
},
"phone": {
"type": "string",
"maxLength": 120,
"minLength": 2,
"description": "The phone, e.g. \"iPhone 16\", \"Galaxy S25 Ultra\""
},
"colour": {
"type": "string",
"maxLength": 60,
"description": "Colour as the retailers name it"
},
"months": {
"anyOf": [
{
"type": "number",
"const": 1
},
{
"type": "number",
"const": 12
},
{
"type": "number",
"const": 24
},
{
"type": "number",
"const": 36
}
],
"description": "Contract length in months (1 is monthly rolling)"
},
"network": {
"enum": [
"EE",
"O2",
"Three",
"Vodafone"
],
"type": "string",
"description": "Only plans on this network (brands on it, like iD Mobile on Three, count)"
},
"storage": {
"type": "integer",
"maximum": 4096,
"minimum": 16,
"description": "Storage in GB"
},
"upgrade": {
"type": "boolean",
"description": "Deals for customers already on the network"
},
"min_data": {
"enum": [
"10",
"50",
"100",
"unlimited"
],
"type": "string",
"description": "At least this many GB a month, or unlimited"
},
"condition": {
"enum": [
"new",
"refurbished",
"pre-owned"
],
"type": "string"
},
"max_monthly": {
"type": "integer",
"maximum": 1000,
"minimum": 1,
"description": "Most a month, in whole pounds"
},
"max_upfront": {
"type": "integer",
"maximum": 5000,
"minimum": 0,
"description": "Most upfront, in whole pounds"
}
}
}| Least it should cost, in pounds |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"query"
],
"properties": {
"sort": {
"enum": [
"relevance",
"price-asc",
"price-desc",
"new",
"drop"
],
"type": "string",
"description": "Order: best match (default), cheapest, dearest, newest or biggest price drop"
},
"type": {
"type": "string",
"maxLength": 80,
"description": "A product type, e.g. flowers, plants, chocolate, food, drinks, candles, beauty, jewellery, cards, balloons, toys, home; children with a dot (\"flowers.dried\")"
},
"limit": {
"type": "integer",
"default": 8,
"maximum": 20,
"minimum": 1,
"description": "Products to return"
},
"query": {
"type": "string",
"maxLength": 100,
"minLength": 1,
"description": "What the shopper wants, e.g. \"red roses\", \"birthday hamper\""
},
"store": {
"type": "string",
"maxLength": 180,
"description": "Only this store (its slug, e.g. \"arena-flowers\")"
},
"on_sale": {
"type": "boolean",
"description": "Only products below the store's full price"
},
"max_price": {
"type": "number",
"maximum": 100000,
"description": "Most it should cost, in pounds",
"exclusiveMinimum": 0
},
"min_price": {
"type": "number",
"maximum": 100000,
"minimum": 0,
"description": "Least it should cost, in pounds"
}
}
}| pay_growth_percent |
| number |
| Assumed pay rise a year |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"plan",
"balance",
"salary",
"first_due_year"
],
"properties": {
"plan": {
"enum": [
"plan1",
"plan2",
"plan4",
"plan5",
"postgrad"
],
"type": "string",
"description": "plan1 (England or Wales before September 2012, and Northern Ireland), plan2 (England from September 2012 to July 2023, and Wales from September 2012), plan4 (Scotland), plan5 (England from August 2023), postgrad (master's or doctoral loans in England or Wales)"
},
"salary": {
"type": "number",
"maximum": 9999999,
"minimum": 0,
"description": "Pay before tax for a year, in pounds"
},
"balance": {
"type": "number",
"maximum": 9999999,
"description": "What's owed now, in pounds",
"exclusiveMinimum": 0
},
"rpi_percent": {
"type": "number",
"default": 3,
"maximum": 100,
"minimum": 0,
"description": "Assumed RPI a year, after this year's published rates"
},
"extra_monthly": {
"type": "number",
"default": 0,
"maximum": 9999999,
"minimum": 0,
"description": "Paid on top each month, in pounds"
},
"first_due_year": {
"type": "integer",
"maximum": 2100,
"minimum": 1990,
"description": "The year of the April repayments were first due: the April after leaving the course"
},
"pay_growth_percent": {
"type": "number",
"default": 3.5,
"maximum": 100,
"minimum": 0,
"description": "Assumed pay rise a year"
}
}
}