{
  "openapi": "3.1.0",
  "info": {
    "title": "TendersHub Developer API",
    "version": "1.0.0",
    "description": "Live UK public-sector tender matching and tender data for your own product. Send a company profile and get back the tenders that fit it, ranked, with the reasons; score one company against one tender; fetch one tender in full; or read short feeds of the newest, closing-soon and highest-value live tenders. Tenders come from Find a Tender, Contracts Finder and other UK public buyers' portals, are updated daily, and only live tenders are returned.\n\nAuthenticate every call (except `/v1/match/vocab`) with your key in the `X-API-Key` header. Keys come from your developer dashboard after choosing a plan at https://tendershub.co.uk/developers.\n\nEach plan has a monthly call allowance, a maximum number of results per call, and a monthly cap on how many different tenders an account can be shown. Tenders already shown to you can be fetched again at no extra cost to that cap. Only successful calls count. Allowances reset on the 1st of each month.",
    "contact": {
      "name": "TendersHub",
      "url": "https://tendershub.co.uk/contact"
    },
    "termsOfService": "https://tendershub.co.uk/terms",
    "x-logo": {
      "url": "https://tendershub.co.uk/logo.png"
    }
  },
  "paths": {
    "/v1/match": {
      "post": {
        "tags": [
          "Developer API v1"
        ],
        "summary": "Match tenders to a company",
        "operationId": "post_match",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DevMatchRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DevMatchResponse"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "400": {
            "description": "Unknown region or sector value, or an invalid CPV code. Not counted as a call."
          },
          "401": {
            "description": "Missing or invalid X-API-Key."
          },
          "403": {
            "description": "Plan does not include this endpoint, the key's plan is inactive, or the monthly distinct-tender cap is reached. Not counted as a call."
          },
          "429": {
            "description": "Monthly call allowance used up; the message names the reset date."
          }
        },
        "description": "Ranked live tenders for a company profile, each with a score and plain-English reasons. Optional `min_score`. Results per call are capped by plan. `master_id` on each result can be passed to `/v1/score`, `/v1/proposal` or `/v1/tenders/{tender_id}`."
      }
    },
    "/v1/match/vocab": {
      "get": {
        "tags": [
          "Developer API v1"
        ],
        "summary": "Allowed region and sector values",
        "operationId": "get_match_vocab",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DevVocabResponse"
                }
              }
            }
          }
        },
        "description": "Every region and sector value `/v1/match` and `/v1/score` accept, with labels. No API key needed; not counted as a call.",
        "security": []
      }
    },
    "/v1/score": {
      "post": {
        "tags": [
          "Developer API v1"
        ],
        "summary": "Score one company against one tender",
        "operationId": "post_score",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DevScoreRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DevScoreResponse"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "400": {
            "description": "Unknown region or sector value, or an invalid CPV code. Not counted as a call."
          },
          "401": {
            "description": "Missing or invalid X-API-Key."
          },
          "403": {
            "description": "Plan does not include this endpoint, the key's plan is inactive, or the monthly distinct-tender cap is reached. Not counted as a call."
          },
          "404": {
            "description": "Unknown or no longer live tender id. Not counted as a call."
          },
          "429": {
            "description": "Monthly call allowance used up; the message names the reset date."
          }
        },
        "description": "A 0-1 score with a breakdown, reasons and a one-line recommendation."
      }
    },
    "/v1/proposal": {
      "post": {
        "tags": [
          "Developer API v1"
        ],
        "summary": "Draft a bid for one tender",
        "operationId": "post_proposal",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DevProposalRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DevProposalResponse"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid X-API-Key."
          },
          "403": {
            "description": "Plan does not include this endpoint, the key's plan is inactive, or the monthly distinct-tender cap is reached. Not counted as a call."
          },
          "404": {
            "description": "Unknown or no longer live tender id. Not counted as a call."
          },
          "429": {
            "description": "Monthly call allowance used up; the message names the reset date."
          },
          "503": {
            "description": "Proposal drafting is unavailable right now. Not counted as a call."
          }
        },
        "description": "A tailored first-draft bid response for one company and one tender. Dev Pro and Enterprise only."
      }
    },
    "/v1/tenders/{tender_id}": {
      "get": {
        "tags": [
          "Developer API v1"
        ],
        "summary": "One tender in full",
        "description": "One live tender with its full description. Counts as a call and against the distinct-tender cap (a tender already shown to you is free).",
        "operationId": "get_tenders_tender_id",
        "parameters": [
          {
            "name": "tender_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Tender Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DevTenderDetail"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid X-API-Key."
          },
          "403": {
            "description": "Plan does not include this endpoint, the key's plan is inactive, or the monthly distinct-tender cap is reached. Not counted as a call."
          },
          "404": {
            "description": "Unknown or no longer live tender id. Not counted as a call."
          },
          "429": {
            "description": "Monthly call allowance used up; the message names the reset date."
          }
        }
      }
    },
    "/v1/latest": {
      "get": {
        "tags": [
          "Developer API v1"
        ],
        "summary": "Newest tenders",
        "description": "Most recently published live tenders, optionally by region and sector.",
        "operationId": "get_latest",
        "parameters": [
          {
            "name": "region",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Region"
            }
          },
          {
            "name": "sector",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Sector"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "maximum": 20,
              "minimum": 1,
              "default": 10,
              "title": "Limit"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DevCuratedList"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "400": {
            "description": "Unknown region or sector value, or an invalid CPV code. Not counted as a call."
          },
          "401": {
            "description": "Missing or invalid X-API-Key."
          },
          "403": {
            "description": "Plan does not include this endpoint, the key's plan is inactive, or the monthly distinct-tender cap is reached. Not counted as a call."
          },
          "429": {
            "description": "Monthly call allowance used up; the message names the reset date."
          }
        }
      }
    },
    "/v1/ending-soon": {
      "get": {
        "tags": [
          "Developer API v1"
        ],
        "summary": "Tenders closing soon",
        "description": "Live tenders closing in the next 30 days, soonest first.",
        "operationId": "get_ending_soon",
        "parameters": [
          {
            "name": "region",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Region"
            }
          },
          {
            "name": "sector",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Sector"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "maximum": 20,
              "minimum": 1,
              "default": 10,
              "title": "Limit"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DevCuratedList"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "400": {
            "description": "Unknown region or sector value, or an invalid CPV code. Not counted as a call."
          },
          "401": {
            "description": "Missing or invalid X-API-Key."
          },
          "403": {
            "description": "Plan does not include this endpoint, the key's plan is inactive, or the monthly distinct-tender cap is reached. Not counted as a call."
          },
          "429": {
            "description": "Monthly call allowance used up; the message names the reset date."
          }
        }
      }
    },
    "/v1/featured": {
      "get": {
        "tags": [
          "Developer API v1"
        ],
        "summary": "Highest-value tenders",
        "description": "Live tenders with the largest stated contract values. Tenders that state no value are left out.",
        "operationId": "get_featured",
        "parameters": [
          {
            "name": "region",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Region"
            }
          },
          {
            "name": "sector",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Sector"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "maximum": 20,
              "minimum": 1,
              "default": 10,
              "title": "Limit"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DevCuratedList"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "400": {
            "description": "Unknown region or sector value, or an invalid CPV code. Not counted as a call."
          },
          "401": {
            "description": "Missing or invalid X-API-Key."
          },
          "403": {
            "description": "Plan does not include this endpoint, the key's plan is inactive, or the monthly distinct-tender cap is reached. Not counted as a call."
          },
          "429": {
            "description": "Monthly call allowance used up; the message names the reset date."
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "DevCuratedList": {
        "properties": {
          "results": {
            "items": {
              "$ref": "#/components/schemas/DevTender"
            },
            "type": "array",
            "title": "Results"
          },
          "distinct_tender_cap_notice": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Distinct Tender Cap Notice"
          }
        },
        "type": "object",
        "required": [
          "results"
        ],
        "title": "DevCuratedList"
      },
      "DevIndustry": {
        "properties": {
          "sic_codes": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Sic Codes"
          },
          "sic_words": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Sic Words"
          },
          "sectors": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Sectors"
          },
          "cpv_divisions": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Cpv Divisions"
          },
          "guard_applied": {
            "type": "boolean",
            "title": "Guard Applied"
          }
        },
        "type": "object",
        "required": [
          "sic_codes",
          "sic_words",
          "sectors",
          "cpv_divisions",
          "guard_applied"
        ],
        "title": "DevIndustry",
        "description": "What we read about your industry from your SIC codes, so a surprising\nanswer can be explained. sectors use GET /v1/match/vocab's values;\ncpv_divisions are the 2-digit CPV divisions we take you to work in."
      },
      "DevMatchRequest": {
        "properties": {
          "sector": {
            "type": "string",
            "title": "Sector"
          },
          "region": {
            "type": "string",
            "title": "Region"
          },
          "description": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Description"
          },
          "organisation_type": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Organisation Type"
          },
          "cpv_codes": {
            "anyOf": [
              {
                "items": {
                  "type": "string"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Cpv Codes"
          },
          "contract_value_gbp": {
            "anyOf": [
              {
                "type": "number",
                "minimum": 0.0
              },
              {
                "type": "null"
              }
            ],
            "title": "Contract Value Gbp"
          },
          "contract_value_min_gbp": {
            "anyOf": [
              {
                "type": "number",
                "minimum": 0.0
              },
              {
                "type": "null"
              }
            ],
            "title": "Contract Value Min Gbp"
          },
          "contract_value_max_gbp": {
            "anyOf": [
              {
                "type": "number",
                "minimum": 0.0
              },
              {
                "type": "null"
              }
            ],
            "title": "Contract Value Max Gbp"
          },
          "annual_turnover": {
            "anyOf": [
              {
                "type": "number",
                "minimum": 0.0
              },
              {
                "type": "null"
              }
            ],
            "title": "Annual Turnover"
          },
          "mode": {
            "type": "string",
            "enum": [
              "combined",
              "rule_based"
            ],
            "title": "Mode",
            "default": "combined"
          },
          "top_n": {
            "type": "integer",
            "minimum": 1.0,
            "title": "Top N",
            "default": 10
          },
          "min_score": {
            "anyOf": [
              {
                "type": "number",
                "maximum": 1.0,
                "minimum": 0.0
              },
              {
                "type": "null"
              }
            ],
            "title": "Min Score"
          },
          "sic_codes": {
            "anyOf": [
              {
                "items": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "integer"
                    }
                  ]
                },
                "type": "array",
                "maxItems": 10
              },
              {
                "type": "null"
              }
            ],
            "title": "Sic Codes"
          }
        },
        "type": "object",
        "required": [
          "sector",
          "region"
        ],
        "title": "DevMatchRequest"
      },
      "DevMatchResponse": {
        "properties": {
          "matches": {
            "items": {
              "$ref": "#/components/schemas/DevTenderMatch"
            },
            "type": "array",
            "title": "Matches"
          },
          "distinct_tender_cap_notice": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Distinct Tender Cap Notice"
          },
          "warnings": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Warnings",
            "default": []
          },
          "industry": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/DevIndustry"
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "type": "object",
        "required": [
          "matches"
        ],
        "title": "DevMatchResponse"
      },
      "DevProposalRequest": {
        "properties": {
          "tender_id": {
            "type": "string",
            "title": "Tender Id"
          },
          "organisation_name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Organisation Name"
          },
          "organisation_type": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Organisation Type"
          },
          "sector": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Sector"
          },
          "region": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Region"
          },
          "description": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Description"
          },
          "capabilities": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Capabilities"
          },
          "track_record": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Track Record"
          },
          "annual_turnover": {
            "anyOf": [
              {
                "type": "number",
                "minimum": 0.0
              },
              {
                "type": "null"
              }
            ],
            "title": "Annual Turnover"
          },
          "notes": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Notes"
          },
          "paragraphs": {
            "type": "integer",
            "title": "Paragraphs",
            "default": 3
          },
          "user_note": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "User Note"
          }
        },
        "type": "object",
        "required": [
          "tender_id"
        ],
        "title": "DevProposalRequest"
      },
      "DevProposalResponse": {
        "properties": {
          "proposal": {
            "type": "string",
            "title": "Proposal"
          },
          "url": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Url"
          }
        },
        "type": "object",
        "required": [
          "proposal",
          "url"
        ],
        "title": "DevProposalResponse"
      },
      "DevScoreBreakdown": {
        "properties": {
          "sector_fit": {
            "type": "integer",
            "title": "Sector Fit"
          },
          "service_words_fit": {
            "type": "integer",
            "title": "Service Words Fit"
          },
          "region_fit": {
            "type": "integer",
            "title": "Region Fit"
          },
          "size_turnover_fit": {
            "type": "integer",
            "title": "Size Turnover Fit"
          },
          "deadline_feasibility": {
            "type": "integer",
            "title": "Deadline Feasibility"
          }
        },
        "type": "object",
        "required": [
          "sector_fit",
          "service_words_fit",
          "region_fit",
          "size_turnover_fit",
          "deadline_feasibility"
        ],
        "title": "DevScoreBreakdown"
      },
      "DevScoreRequest": {
        "properties": {
          "tender_id": {
            "type": "string",
            "title": "Tender Id"
          },
          "sector": {
            "type": "string",
            "title": "Sector"
          },
          "region": {
            "type": "string",
            "title": "Region"
          },
          "description": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Description"
          },
          "cpv_codes": {
            "anyOf": [
              {
                "items": {
                  "type": "string"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Cpv Codes"
          },
          "contract_value_gbp": {
            "anyOf": [
              {
                "type": "number",
                "minimum": 0.0
              },
              {
                "type": "null"
              }
            ],
            "title": "Contract Value Gbp"
          },
          "annual_turnover": {
            "anyOf": [
              {
                "type": "number",
                "minimum": 0.0
              },
              {
                "type": "null"
              }
            ],
            "title": "Annual Turnover"
          },
          "sic_codes": {
            "anyOf": [
              {
                "items": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "integer"
                    }
                  ]
                },
                "type": "array",
                "maxItems": 10
              },
              {
                "type": "null"
              }
            ],
            "title": "Sic Codes"
          }
        },
        "type": "object",
        "required": [
          "tender_id",
          "sector",
          "region"
        ],
        "title": "DevScoreRequest"
      },
      "DevScoreResponse": {
        "properties": {
          "master_id": {
            "type": "string",
            "title": "Master Id"
          },
          "title": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Title"
          },
          "url": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Url"
          },
          "score": {
            "type": "number",
            "title": "Score"
          },
          "breakdown": {
            "$ref": "#/components/schemas/DevScoreBreakdown"
          },
          "reasons": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Reasons"
          },
          "recommendation": {
            "type": "string",
            "title": "Recommendation"
          },
          "industry": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/DevIndustry"
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "type": "object",
        "required": [
          "master_id",
          "title",
          "url",
          "score",
          "breakdown",
          "reasons",
          "recommendation"
        ],
        "title": "DevScoreResponse"
      },
      "DevTender": {
        "properties": {
          "master_id": {
            "type": "string",
            "title": "Master Id"
          },
          "title": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Title"
          },
          "buyer_name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Buyer Name"
          },
          "notice_type": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Notice Type"
          },
          "status": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Status"
          },
          "sector": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Sector"
          },
          "cpv_code": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Cpv Code"
          },
          "regions": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Regions",
            "default": []
          },
          "value_min_gbp": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Value Min Gbp"
          },
          "value_max_gbp": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Value Max Gbp"
          },
          "value_text": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Value Text"
          },
          "published_date": {
            "anyOf": [
              {
                "type": "string",
                "format": "date"
              },
              {
                "type": "null"
              }
            ],
            "title": "Published Date"
          },
          "closing_date": {
            "anyOf": [
              {
                "type": "string",
                "format": "date"
              },
              {
                "type": "null"
              }
            ],
            "title": "Closing Date"
          },
          "url": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Url"
          }
        },
        "type": "object",
        "required": [
          "master_id"
        ],
        "title": "DevTender"
      },
      "DevTenderDetail": {
        "properties": {
          "master_id": {
            "type": "string",
            "title": "Master Id"
          },
          "title": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Title"
          },
          "buyer_name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Buyer Name"
          },
          "notice_type": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Notice Type"
          },
          "status": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Status"
          },
          "sector": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Sector"
          },
          "cpv_code": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Cpv Code"
          },
          "regions": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Regions",
            "default": []
          },
          "value_min_gbp": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Value Min Gbp"
          },
          "value_max_gbp": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Value Max Gbp"
          },
          "value_text": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Value Text"
          },
          "published_date": {
            "anyOf": [
              {
                "type": "string",
                "format": "date"
              },
              {
                "type": "null"
              }
            ],
            "title": "Published Date"
          },
          "closing_date": {
            "anyOf": [
              {
                "type": "string",
                "format": "date"
              },
              {
                "type": "null"
              }
            ],
            "title": "Closing Date"
          },
          "url": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Url"
          },
          "source": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Source"
          },
          "reference": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Reference"
          },
          "procedure_type": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Procedure Type"
          },
          "region": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Region"
          },
          "description": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Description"
          }
        },
        "type": "object",
        "required": [
          "master_id"
        ],
        "title": "DevTenderDetail"
      },
      "DevTenderMatch": {
        "properties": {
          "master_id": {
            "type": "string",
            "title": "Master Id"
          },
          "title": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Title"
          },
          "buyer_name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Buyer Name"
          },
          "notice_type": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Notice Type"
          },
          "status": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Status"
          },
          "sector": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Sector"
          },
          "cpv_code": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Cpv Code"
          },
          "regions": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Regions",
            "default": []
          },
          "value_min_gbp": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Value Min Gbp"
          },
          "value_max_gbp": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Value Max Gbp"
          },
          "value_text": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Value Text"
          },
          "published_date": {
            "anyOf": [
              {
                "type": "string",
                "format": "date"
              },
              {
                "type": "null"
              }
            ],
            "title": "Published Date"
          },
          "closing_date": {
            "anyOf": [
              {
                "type": "string",
                "format": "date"
              },
              {
                "type": "null"
              }
            ],
            "title": "Closing Date"
          },
          "url": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Url"
          },
          "score": {
            "type": "number",
            "title": "Score"
          },
          "reasons": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Reasons"
          }
        },
        "type": "object",
        "required": [
          "master_id",
          "score",
          "reasons"
        ],
        "title": "DevTenderMatch"
      },
      "DevVocabResponse": {
        "properties": {
          "vocab": {
            "additionalProperties": {
              "items": {
                "$ref": "#/components/schemas/DevVocabValue"
              },
              "type": "array"
            },
            "type": "object",
            "title": "Vocab"
          },
          "filter_fields": {
            "additionalProperties": {
              "type": "string"
            },
            "type": "object",
            "title": "Filter Fields"
          }
        },
        "type": "object",
        "required": [
          "vocab",
          "filter_fields"
        ],
        "title": "DevVocabResponse"
      },
      "DevVocabValue": {
        "properties": {
          "value": {
            "type": "string",
            "title": "Value"
          },
          "label": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Label"
          }
        },
        "type": "object",
        "required": [
          "value"
        ],
        "title": "DevVocabValue"
      },
      "HTTPValidationError": {
        "properties": {
          "detail": {
            "items": {
              "$ref": "#/components/schemas/ValidationError"
            },
            "type": "array",
            "title": "Detail"
          }
        },
        "type": "object",
        "title": "HTTPValidationError"
      },
      "ValidationError": {
        "properties": {
          "loc": {
            "items": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "integer"
                }
              ]
            },
            "type": "array",
            "title": "Location"
          },
          "msg": {
            "type": "string",
            "title": "Message"
          },
          "type": {
            "type": "string",
            "title": "Error Type"
          }
        },
        "type": "object",
        "required": [
          "loc",
          "msg",
          "type"
        ],
        "title": "ValidationError"
      }
    },
    "securitySchemes": {
      "ApiKeyAuth": {
        "type": "apiKey",
        "in": "header",
        "name": "X-API-Key",
        "description": "Your key from the developer dashboard (starts th_)."
      }
    }
  },
  "externalDocs": {
    "description": "Developer docs",
    "url": "https://tendershub.co.uk/developers/docs"
  },
  "servers": [
    {
      "url": "https://api.tendershub.co.uk",
      "description": "Production"
    }
  ],
  "tags": [
    {
      "name": "Developer API v1",
      "description": "UK tender matching and tender data"
    }
  ],
  "security": [
    {
      "ApiKeyAuth": []
    }
  ]
}
