Public tenders and contract awards in the UK, US, Canada and EU, and help preparing bids.
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.
Use this when the user shares text from a tender's documents, or wants Tenda to read the files the buyer published with the notice (read_published, signed in). Returns a checklist of everything the bid must include, each with its file, page and the buyer's own words, and the requirements the notice leaves out, such as turnover, insurance and certifications. When the workspace can use Tenda's AI, it also returns the questions the buyer scores and how they're marked. Not for documents unrelated to a tender. Example: {"tender_reference":"012345-2026","read_published":true}
The notice ID, procurement identifier, solicitation number or the buyer's own reference, e.g. "012345-2026" on Find a Tender, "WS4851234567" on CanadaBuys or "140D0427Q0879" on SAM.gov.
The document text the user shared, not a file link: an invitation to tender, selection questionnaire, specification or instructions to bidders. Needed unless read_published is true. Signed in, later fit and readiness checks for the tender include what Tenda reads; signed out, it keeps nothing.
The document name, e.g. "Invitation to Tender Part 2".
The Tenda workspace to use, by name, when the user is in more than one, e.g. "Northbridge Services".
true to have Tenda fetch and read the files the buyer published with the notice, up to 8 (PDF, Word, Excel, web pages and ZIPs of them). Needs sign-in. Reading the scored questions with Tenda's AI uses a check's worth of the workspace's usage.
The server marks this tool as destructive. Running it may delete or overwrite data on the server or in any account you connected with your headers.
Tool list last changed Oct 25, 2026.
Use this when the user shares text from a tender's documents, or wants Tenda to read the files the buyer published with the notice (read_published, signed in). Returns a checklist of everything the bid must include, each with its file, page and the buyer's own words, and the requirements the notice leaves out, such as turnover, insurance and certifications. When the workspace can use Tenda's AI, it also returns the questions the buyer scores and how they're marked. Not for documents unrelated to a tender. Example: {"tender_reference":"012345-2026","read_published":true}
| Argument | Type | Description |
|---|---|---|
| text | string | The document text the user shared, not a file link: an invitation to tender, selection questionnaire, specification or instructions to bidders. Needed unless read_published is true. Signed in, later fit and readiness checks for the tender include what Tenda reads; signed out, it keeps nothing. |
| title | string | The document name, e.g. "Invitation to Tender Part 2". |
| workspace | string | The Tenda workspace to use, by name, when the user is in more than one, e.g. "Northbridge Services". |
| read_published | boolean | true to have Tenda fetch and read the files the buyer published with the notice, up to 8 (PDF, Word, Excel, web pages and ZIPs of them). Needs sign-in. Reading the scored questions with Tenda's AI uses a check's worth of the workspace's usage. |
| tender_reference* | string | The notice ID, procurement identifier, solicitation number or the buyer's own reference, e.g. "012345-2026" on Find a Tender, "WS4851234567" on CanadaBuys or "140D0427Q0879" on SAM.gov. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"tender_reference"
],
"properties": {
"text": {
"type": "string",
"maxLength": 200000,
"minLength": 40,
"description": "The document text the user shared, not a file link: an invitation to tender, selection questionnaire, specification or instructions to bidders. Needed unless read_published is true. Signed in, later fit and readiness checks for the tender include what Tenda reads; signed out, it keeps nothing."
},
"title": {
"type": "string",
"description": "The document name, e.g. \"Invitation to Tender Part 2\"."
},
"workspace": {
"type": "string",
"description": "The Tenda workspace to use, by name, when the user is in more than one, e.g. \"Northbridge Services\"."
},
"read_published": {
"type": "boolean",
"description": "true to have Tenda fetch and read the files the buyer published with the notice, up to 8 (PDF, Word, Excel, web pages and ZIPs of them). Needs sign-in. Reading the scored questions with Tenda's AI uses a check's worth of the workspace's usage."
},
"tender_reference": {
"type": "string",
"minLength": 3,
"description": "The notice ID, procurement identifier, solicitation number or the buyer's own reference, e.g. \"012345-2026\" on Find a Tender, \"WS4851234567\" on CanadaBuys or \"140D0427Q0879\" on SAM.gov."
}
}
}Use this when the user wants to save a tender to their team's Tenda pipeline to consider bidding, e.g. "add this to our pipeline" or "let's track the Falkirk cleaning framework". Adds it in Watching, ready for the bid or no-bid call, and says which e-tendering portal the tender is run on. Until the team has said whether it has an account on that portal, the answer asks; pass the question on, and record the reply with record_portal_account. Needs a Tenda account and workspace. Do not use for alerts about new tenders (use watch_tenders) or to record a decision to bid (use record_bid_call).
| Argument | Type | Description |
|---|---|---|
| workspace | string | The Tenda workspace to use, by name, when the user is in more than one, e.g. "Northbridge Services". |
| more_references | array | More tenders to add at the same time, by the same kind of reference, when the user asks for several, e.g. "add the two best fits". Up to 4. |
| tender_reference* | string | The notice ID, procurement identifier, solicitation number or the buyer's own reference, e.g. "012345-2026" on Find a Tender, "WS4851234567" on CanadaBuys or "140D0427Q0879" on SAM.gov. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"tender_reference"
],
"properties": {
"workspace": {
"type": "string",
"description": "The Tenda workspace to use, by name, when the user is in more than one, e.g. \"Northbridge Services\"."
},
"more_references": {
"type": "array",
"items": {
"type": "string",
"minLength": 3,
"description": "The notice ID, procurement identifier, solicitation number or the buyer's own reference, e.g. \"012345-2026\" on Find a Tender, \"WS4851234567\" on CanadaBuys or \"140D0427Q0879\" on SAM.gov."
},
"maxItems": 4,
"description": "More tenders to add at the same time, by the same kind of reference, when the user asks for several, e.g. \"add the two best fits\". Up to 4."
},
"tender_reference": {
"type": "string",
"minLength": 3,
"description": "The notice ID, procurement identifier, solicitation number or the buyer's own reference, e.g. \"012345-2026\" on Find a Tender, \"WS4851234567\" on CanadaBuys or \"140D0427Q0879\" on SAM.gov."
}
}
}Use this when the user shares a bid their company won, for Tenda to learn from, e.g. after Tenda offers to learn from winning bids. Tenda keeps it in the workspace's Library and learns what worked in it (structure, tone, the evidence it uses) for the bids it drafts. Pass the bid's text as the user shared it, not a link. Needs a Tenda account and workspace. Do not use for the buyer's questions for a new bid (use start_bid_draft or continue_bid_draft).
| Argument | Type | Description |
|---|---|---|
| text* | string | The winning bid's text: its answers, as the user shared them. |
| title | string | What it was, e.g. "Glasgow schools cleaning, 2024". |
| workspace | string | The Tenda workspace to use, by name, when the user is in more than one, e.g. "Northbridge Services". |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"text"
],
"properties": {
"text": {
"type": "string",
"maxLength": 150000,
"minLength": 200,
"description": "The winning bid's text: its answers, as the user shared them."
},
"title": {
"type": "string",
"maxLength": 120,
"description": "What it was, e.g. \"Glasgow schools cleaning, 2024\"."
},
"workspace": {
"type": "string",
"description": "The Tenda workspace to use, by name, when the user is in more than one, e.g. \"Northbridge Services\"."
}
}
}Use this when the user asks whether their business should bid for a public contract, or which open tenders suit them best. Compares the tender's conditions of participation (turnover, insurance levels, experience and certifications), location and lot sizes with the company's profile, and returns a fit score with reasons, likely disqualifiers and gaps. Omit tender_reference to rank the open tenders that suit the company. It does not predict or guarantee an award. Do not use for general business strategy or for private-sector sales leads.
| Argument | Type | Description |
|---|---|---|
| query | string | When ranking without a tender_reference: the kind of work to look for, e.g. "NHS cleaning". |
| country | string | The country to look in, when the user names one, e.g. "Canada", "UK" or "Spain" (an EU member state searches the rest of the EU there). Omit to use the user's own countries (the UK when they aren't signed in). Tenda covers the UK, Canada, the United States, Germany, France and the rest of the EU. |
| business_size | string | The company's size, e.g. "small" for under 50 staff. Use "vcse" for charities and social enterprises. |
| company_summary | string | What the company does, its size, turnover, certifications, insurance, where it works and past contracts, in the user's words, e.g. "6-person electrical contractor in Leeds, £800k turnover, CHAS and Cyber Essentials". Optional when the user has a saved Tenda profile. |
| more_references | array |
Use this when the user gives work on a team bid to someone, or takes it on: "give the Bristol bid call to Sam". The work is the bid call while a tender waits in Watching or Qualifying, or a sprint step, the next one unless named. Says who has it and whether they heard in Slack. When the person's role can't do it, the answer says who can: ask the user before choosing one. Needs a Tenda account and workspace. Not for ticking off a step (use update_bid_sprint) or the call itself (use record_bid_call). Example: {"tender_reference":"012345-2026","person":"Sam","task":"review"}
| Argument | Type | Description |
|---|---|---|
| task | string | The work: "call" (the bid or no-bid call), or a sprint step: "decode", "assign", "draft", "review", "checks" or "submit". Leave it out for the tender's next piece of work. |
| person* | string | Who gets it: their name as the team knows them, e.g. "Sam" or "Sam Okafor", their email, or "me" for the user. Owners, admins and bid leads give out work; anyone can take work their role can do. Someone not in the workspace yet is invited from Today in the Tenda dashboard. |
| workspace | string | The Tenda workspace to use, by name, when the user is in more than one, e.g. "Northbridge Services". |
| tender_reference* | string | The notice ID, procurement identifier, solicitation number or the buyer's own reference, e.g. "012345-2026" on Find a Tender, "WS4851234567" on CanadaBuys or "140D0427Q0879" on SAM.gov. |
Use this when the user wants Tenda to do something on its own, again and again: add strong fits to the pipeline, remind people of sprint steps, check a bid before it closes, say what a buyer changed, or send a morning shortlist or a report. Before turn_on, read the rules back to the user in plain words and ask them to confirm. Automations never submit a bid, write to a buyer, decline a tender, email anyone outside the team or change who is in the workspace. Needs a Tenda account. Example: {"action":"add","template":"morning_shortlist"}
| Argument | Type | Description |
|---|---|---|
| asked | string | For add: what the user asked for, in their words. |
| action* | string | list (the workspace's automations and Tenda's suggestions), library, add (makes one from the library with the user's changes, saved off), turn_on, turn_off or history. Owners, admins and bid leads make and change them. |
| changes | object | For add: what the user asked to change from the library's version. |
| template | string | For add: the library automation to make: morning_shortlist (Morning shortlist: Each weekday, the best new fits, each with a line on why it fits.); strong_fit (Strong fit to pipeline: Adds strong fits to the pipeline, checks readiness and gives out the bid call.); change_guard (Change guard: Says what a buyer changed and moves the sprint's dates to a new deadline.); renewals (Certificates and renewals: 60, 30 and 7 days before a certificate, policy or registration runs out.); sprint_autopilot (Sprint on autopilot: Reminds whoever has a step two working days before it's due, and says when one is late.); pre_submission (Pre-submission check: 72 hours out: word limits, gaps and open steps. 24 hours out: is it in?); award_debrief (Award and debrief: Says who won when the award is published, and drafts a request for feedback.); weekly_report (Weekly pipeline report: Mondays: pipeline value, bids due, results and anything overdue.). |
Use this when the user wants to know what they're missing before bidding, for one tender or in general: registrations, certifications, insurance, policies and each country's own documents, such as Cyber Essentials in the UK, SAM.gov registration in the US or the DUME in France. A general check follows the user's home country. Returns what is held, missing or expiring. It gives readiness guidance, not legal advice. Not for Companies House look-ups or tax questions. Example: {"tender_reference":"003344-2026","documents_held":["cyber_essentials","iso_9001"]}
| Argument | Type | Description |
|---|---|---|
| sector | string | The kind of work the company bids for, e.g. "construction", which changes the accreditations buyers expect. |
| country | string | The country whose rules to check against, when the user names one, e.g. "Canada", "UK" or "Spain". Omit to use the user's home country. Each country has its own registrations, certificates and declarations, e.g. Central Digital Platform registration in the UK, the EEE in Germany or the Kbis in France. |
| documents_held | array | Documents and certifications the user says they already have, e.g. ["cyber_essentials", "public_liability_insurance", "iso_9001"]. Add an expiry as "cyber_essentials:2026-11-30". |
| tender_reference | string | Optional tender to check against, e.g. "003344-2026". Omit for a general readiness check. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"sector": {
"enum": [
"construction",
"facilities",
"it_digital",
"health_social_care",
"professional_services",
"goods_supply",
"transport",
"other"
],
"type": "string",
"description": "The kind of work the company bids for, e.g. \"construction\", which changes the accreditations buyers expect."
},
"country": {
"type": "string",
"description": "The country whose rules to check against, when the user names one, e.g. \"Canada\", \"UK\" or \"Spain\". Omit to use the user's home country. Each country has its own registrations, certificates and declarations, e.g. Central Digital Platform registration in the UK, the EEE in Germany or the Kbis in France."
},
"documents_held": {
"type": "array",
"items": {
"type": "string"
},
"description": "Documents and certifications the user says they already have, e.g. [\"cyber_essentials\", \"public_liability_insurance\", \"iso_9001\"]. Add an expiry as \"cyber_essentials:2026-11-30\"."
},
"tender_reference": {
"type": "string",
"minLength": 3,
"description": "Optional tender to check against, e.g. \"003344-2026\". Omit for a general readiness check."
}
}
}Use this when the user wants to change which Slack and Teams channels get Tenda's alerts, or asks where they go: "stop the morning summary in Slack". Change only what the user asked for; with neither send nor stop it changes nothing and says where alerts go now. Owners and admins can change alerts. Needs a Tenda account and workspace. Not for connecting a channel (Tenda dashboard, Settings, Connections) or for email alerts (use watch_tenders). Example: {"app":"slack","stop":["morning_summary"]}
| Argument | Type | Description |
|---|---|---|
| app | string | "slack" or "teams" for that app's channels. Leave out app and channel for every channel. |
| only | boolean | true when what's sent here should go only here: every other channel stops getting it. An app or channel the user didn't mention otherwise keeps its alerts. |
| send | array | Alerts to turn on in those channels: "new_tenders" (new tenders that fit the company), "changes" (changes to tenders in the pipeline), "morning_summary" (the weekday morning summary), "bid_work" (bid work nobody has yet), or "all". |
| stop | array | Alerts to turn off in those channels: "new_tenders" (new tenders that fit the company), "changes" (changes to tenders in the pipeline), "morning_summary" (the weekday morning summary), "bid_work" (bid work nobody has yet), or "all". A channel with no alerts stays connected, so the team can still ask Tenda there. |
| channel | string | One channel, by its name: e.g. "bids" or "#bids" in Slack, or "General" in Teams. |
Use this to carry on a bid draft Tenda started with start_bid_draft: give it the buyer's questions it asked for, the team's answers to the questions Tenda asked, or the go-ahead to draft now with what it has (Tenda marks the gaps [TO CONFIRM]). Drafting starts once Tenda's questions are answered, or when draft_now is true. Pass each answer with the question's number or words. Needs a Tenda account. Do not use for a new bid (use start_bid_draft).
| Argument | Type | Description |
|---|---|---|
| notes | string | Anything else the team wants Tenda to use in the bid. |
| answers | array | The team's answers to Tenda's questions. |
| draft_id | string | The draft's ID, from start_bid_draft. Or give the tender's reference instead, or neither for the workspace's latest draft. |
| draft_now | boolean | true to start drafting now, with any of Tenda's questions unanswered. |
| workspace | string | The Tenda workspace to use, by name, when the user is in more than one, e.g. "Northbridge Services". |
| questions_text | string | The buyer's questions, when Tenda asked for them. |
| tender_reference | string | The notice ID, procurement identifier, solicitation number or the buyer's own reference, e.g. "012345-2026" on Find a Tender, "WS4851234567" on CanadaBuys or "140D0427Q0879" on SAM.gov. |
Use this when the user wants help writing part of a response to a public tender: a quality question answer, social value response, method statement, case study, company overview, cover letter or clarification question. Returns a drafting brief built from the tender's award criteria, word limits and the user's facts, so the draft answers what evaluators will score. Write the draft from the brief. Do not use for job applications, grant applications or private-sector sales proposals.
| Argument | Type | Description |
|---|---|---|
| notes | string | Facts the draft should use, e.g. "we cut response times by 30% for Bristol City Council in 2025". |
| section* | string | Which part of the bid to draft, e.g. "social_value". |
| question | string | The buyer's question, word for word, when the user has it. |
| word_limit | integer | The buyer's word limit for this answer, e.g. 500. |
| tender_reference | string | The tender being answered, e.g. "005566-2026". |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"section"
],
"properties": {
"notes": {
"type": "string",
"description": "Facts the draft should use, e.g. \"we cut response times by 30% for Bristol City Council in 2025\"."
},
"section": {
"enum": [
"quality_answer",
"social_value",
"method_statement",
"case_study",
"company_overview",
"cover_letter",
"clarification_question"
],
"type": "string",
"description": "Which part of the bid to draft, e.g. \"social_value\"."
},
"question": {
"type": "string",
"description": "The buyer's question, word for word, when the user has it."
},
"word_limit": {
"type": "integer",
"maximum": 9007199254740991,
"description": "The buyer's word limit for this answer, e.g. 500.",
"exclusiveMinimum": 0
},
"tender_reference": {
"type": "string",
"minLength": 3,
"description": "The tender being answered, e.g. \"005566-2026\"."
}
}
}Finds a UK company on Companies House by name, for Tenda's setup.
| Argument | Type | Description |
|---|---|---|
| name* | string |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"name"
],
"properties": {
"name": {
"type": "string",
"maxLength": 160,
"minLength": 1
}
}
}Saves what Tenda's setup was told, making the workspace for someone without one, and finds the open tenders that fit.
| Argument | Type | Description |
|---|---|---|
| name* | string | |
| size | string | |
| work* | array | |
| market | string | |
| regions* | array | |
| workspace | string | |
| company_number | string |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"name",
"regions",
"work"
],
"properties": {
"name": {
"type": "string",
"maxLength": 160,
"minLength": 1
},
"size": {
"enum": [
"small",
"mid",
"large"
],
"type": "string"
},
"work": {
"type": "array",
"items": {
"type": "string",
"maxLength": 80
},
"maxItems": 100
},
"market": {
"type": "string",
"maxLength": 10
},
"regions": {
"type": "array",
"items": {
"type": "string",
"maxLength": 80
},
"maxItems": 300
},
"workspace": {
"type": "string",
"maxLength": 200
},
"company_number": {
"type": "string",
"maxLength": 20
}
}
}Use this when the user asks how a bid Tenda is drafting is going, or wants to read it: its progress in steps and answers written, each question with its word count and Tenda's mark out of 5, what's left for the team to confirm, and the check of the whole bid. Give question to read that answer in full. Once it's ready, it gives a Word file link that works for an hour, and a link to the draft in Tenda. Needs a Tenda account. Example: {"tender_reference":"012345-2026"}
| Argument | Type | Description |
|---|---|---|
| draft_id | string | The draft's ID, from start_bid_draft. Or give the tender's reference instead, or neither for the workspace's latest draft. |
| question | string | One answer to read in full, by the buyer's number, e.g. "Q3". |
| workspace | string | The Tenda workspace to use, by name, when the user is in more than one, e.g. "Northbridge Services". |
| tender_reference | string | The notice ID, procurement identifier, solicitation number or the buyer's own reference, e.g. "012345-2026" on Find a Tender, "WS4851234567" on CanadaBuys or "140D0427Q0879" on SAM.gov. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"draft_id": {
"type": "string",
"description": "The draft's ID, from start_bid_draft. Or give the tender's reference instead, or neither for the workspace's latest draft."
},
"question": {
"type": "string",
"description": "One answer to read in full, by the buyer's number, e.g. \"Q3\"."
},
"workspace": {
"type": "string",
"description": "The Tenda workspace to use, by name, when the user is in more than one, e.g. \"Northbridge Services\"."
},
"tender_reference": {
"type": "string",
"minLength": 3,
"description": "The notice ID, procurement identifier, solicitation number or the buyer's own reference, e.g. \"012345-2026\" on Find a Tender, \"WS4851234567\" on CanadaBuys or \"140D0427Q0879\" on SAM.gov."
}
}
}Use this to know where Tenda looks: the countries and sources it reads, how many open, upcoming and awarded notices each holds, and when each was last read. Use it before telling the user a tender isn't published anywhere Tenda reads, or to say how fresh results are. Not for searching (use search_tenders). Example: {"country":"Canada"}
| Argument | Type | Description |
|---|---|---|
| country | string | One country, e.g. "Canada", "UK" or "Germany". Omit for every country Tenda covers. Tenda reads Find a Tender, Contracts Finder, Public Contracts Scotland, Sell2Wales, CanadaBuys, SEAO, Toronto Bids, SAM.gov, USAC E-Rate, City Record Online, RAMP LA, SF City Partner, DC PASS, oeffentlichevergabe.de, BOAMP, TED, PLACSP, IUB (Latvia) and KIMDIS (Greece). |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"country": {
"type": "string",
"description": "One country, e.g. \"Canada\", \"UK\" or \"Germany\". Omit for every country Tenda covers. Tenda reads Find a Tender, Contracts Finder, Public Contracts Scotland, Sell2Wales, CanadaBuys, SEAO, Toronto Bids, SAM.gov, USAC E-Rate, City Record Online, RAMP LA, SF City Partner, DC PASS, oeffentlichevergabe.de, BOAMP, TED, PLACSP, IUB (Latvia) and KIMDIS (Greece)."
}
}
}Use this when the user asks how their team's bids are going, for a status report, or what is due: how many tenders are in each stage of their Tenda pipeline, which bids are running with their next step and due date, which tenders still need the bid or no-bid call, and which bids are waiting on a result. Needs a Tenda account and workspace. Do not use to find new tenders (use search_tenders) or for alerts from saved watches (use get_tender_updates).
| Argument | Type | Description |
|---|---|---|
| workspace | string | The Tenda workspace to use, by name, when the user is in more than one, e.g. "Northbridge Services". |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"workspace": {
"type": "string",
"description": "The Tenda workspace to use, by name, when the user is in more than one, e.g. \"Northbridge Services\"."
}
}
}Use this when the user asks which Tenda workspace ChatGPT uses, or which countries' tenders it shows: returns Tenda's settings in ChatGPT, the workspace (for someone in more than one) and the workspace's countries. Needs a Tenda account. Do not use for the company profile (use save_company_profile).
No arguments.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {}
}Use this when the user asks about one tender, framework or standing offer, by notice ID, buyer reference or from earlier results: the deadline, the portal to submit through, lots, value, conditions, award criteria and what the buyer wants, in plain English. It also reads the competition: who holds the work now, what the buyer paid before, how many bids it drew, and whether the tender is worth chasing. Not for finding tenders (use search_tenders). Example: {"tender_reference":"012345-2026"}
| Argument | Type | Description |
|---|---|---|
| more_references | array | More tenders to read in the same call, by the same kind of reference, e.g. to compare a shortlist: up to 19, for 20 in all. Saves a call for each. |
| tender_reference* | string | The notice ID, procurement identifier, solicitation number or the buyer's own reference, e.g. "012345-2026" on Find a Tender, "WS4851234567" on CanadaBuys or "140D0427Q0879" on SAM.gov. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"tender_reference"
],
"properties": {
"more_references": {
"type": "array",
"items": {
"type": "string",
"minLength": 3,
"description": "The notice ID, procurement identifier, solicitation number or the buyer's own reference, e.g. \"012345-2026\" on Find a Tender, \"WS4851234567\" on CanadaBuys or \"140D0427Q0879\" on SAM.gov."
},
"maxItems": 19,
"description": "More tenders to read in the same call, by the same kind of reference, e.g. to compare a shortlist: up to 19, for 20 in all. Saves a call for each."
},
"tender_reference": {
"type": "string",
"minLength": 3,
"description": "The notice ID, procurement identifier, solicitation number or the buyer's own reference, e.g. \"012345-2026\" on Find a Tender, \"WS4851234567\" on CanadaBuys or \"140D0427Q0879\" on SAM.gov."
}
}
}Use this when the user asks what's new from their Tenda watches: new matching tenders, pipeline notices, deadline changes, clarifications, cancellations and awards. Without since, it gives the updates not shown before and marks them seen. Agents that check on a schedule pass since, the nextSince from the answer before: it reads what was recorded after it, oldest first, and marks nothing. watch_id keeps to one watch. Needs a Tenda account. Not for searching (use search_tenders). Example: {"since":"eyJzZXEiOjQyfQ"}
| Argument | Type | Description |
|---|---|---|
| since | string | The nextSince from an earlier answer, for the updates recorded after it. Leave it out for the updates not yet shown, which are then marked seen. |
| watch_id | string | Only this watch's updates, by the id watch_tenders gave. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"since": {
"type": "string",
"maxLength": 400,
"description": "The nextSince from an earlier answer, for the updates recorded after it. Leave it out for the updates not yet shown, which are then marked seen."
},
"watch_id": {
"type": "string",
"maxLength": 100,
"description": "Only this watch's updates, by the id watch_tenders gave."
}
}
}Use this when the user asks which Tenda watches they have, or to find the one to stop: each watch with its ID, what it watches for, its countries and whether it posts to Slack or Teams. Needs a Tenda account. Do not use for what the watches found (use get_tender_updates). Example: {}
No arguments.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {}
}Use this when the user wants to change where a tender stands in their team's Tenda pipeline: to Qualifying while they look into it, back to Watching, to Submitted, or to Won or Lost when the buyer announces the result. Moving to Bidding or No bid takes the bid or no-bid call (use record_bid_call). Needs a Tenda account and workspace. Do not use to take a tender off the pipeline (use remove_from_pipeline).
| Argument | Type | Description |
|---|---|---|
| stage* | string | Where the tender goes: "watching", "qualifying", "bidding", "submitted", "won", "lost" or "no_bid". |
| workspace | string | The Tenda workspace to use, by name, when the user is in more than one, e.g. "Northbridge Services". |
| tender_reference* | string | The notice ID, procurement identifier, solicitation number or the buyer's own reference, e.g. "012345-2026" on Find a Tender, "WS4851234567" on CanadaBuys or "140D0427Q0879" on SAM.gov. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"tender_reference",
"stage"
],
"properties": {
"stage": {
"enum": [
"watching",
"qualifying",
"bidding",
"submitted",
"won",
"lost",
"no_bid"
],
"type": "string",
"description": "Where the tender goes: \"watching\", \"qualifying\", \"bidding\", \"submitted\", \"won\", \"lost\" or \"no_bid\"."
},
"workspace": {
"type": "string",
"description": "The Tenda workspace to use, by name, when the user is in more than one, e.g. \"Northbridge Services\"."
},
"tender_reference": {
"type": "string",
"minLength": 3,
"description": "The notice ID, procurement identifier, solicitation number or the buyer's own reference, e.g. \"012345-2026\" on Find a Tender, \"WS4851234567\" on CanadaBuys or \"140D0427Q0879\" on SAM.gov."
}
}
}Opens the team's live bids beside a chat: each bid's steps and questions, what scores, and a way to work on one in the chat.
| Argument | Type | Description |
|---|---|---|
| path | string | |
| workspace | string |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"path": {
"type": "string",
"maxLength": 400
},
"workspace": {
"type": "string",
"maxLength": 200
}
}
}Opens Tenda's own app from ChatGPT's sidebar: Today, the team's board, Find and each tender, with the bid call. The app moves between its pages itself.
| Argument | Type | Description |
|---|---|---|
| path | string | |
| workspace | string |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"path": {
"type": "string",
"maxLength": 400
},
"workspace": {
"type": "string",
"maxLength": 200
}
}
}Use this when the user's team has decided whether to bid: records the bid or no-bid call, the team's answers to Tenda's five questions and the reason. A bid moves the tender to Bidding and plans a six-step sprint back from the deadline; a tender not in the pipeline is added first. Confirm the decision with the user before calling. Needs a Tenda account and a role that makes bid calls. Not for judging fit before the call (use assess_tender_fit). Example: {"tender_reference":"012345-2026","decision":"bid","answers":{"fit":"yes"}}
| Argument | Type | Description |
|---|---|---|
| reason | string | Why, in the user's words, for the team to read later. |
| answers | object | The team's answers to Tenda's five questions, each "yes", "unsure" or "no": fit (is this work we do well), eligibility (do we meet every must-have), capacity (can we deliver it and write the bid in time), competition (can we beat the other bidders) and value (is it worth winning). Leave out questions the user didn't answer. |
| decision* | string | "bid" when the team will bid, "no_bid" when it will not. |
| workspace | string | The Tenda workspace to use, by name, when the user is in more than one, e.g. "Northbridge Services". |
| tender_reference* | string | The notice ID, procurement identifier, solicitation number or the buyer's own reference, e.g. "012345-2026" on Find a Tender, "WS4851234567" on CanadaBuys or "140D0427Q0879" on SAM.gov. |
Use this when the user says whether their company has an account on the e-tendering portal a tender is run on, where suppliers get the tender pack and bid, often after Tenda asked as a tender joined the pipeline: "yes, we have an EU-Supply account" or "no, we're not on Atamis yet". Notes it for the whole team, so Tenda stops asking about that portal. Give the tender's reference, or the portal's name or the key Tenda gave (portal.key). Needs a Tenda account and workspace. Do not use to sign in to a portal: Tenda never handles portal passwords.
| Argument | Type | Description |
|---|---|---|
| portal | string | The portal, e.g. "EU-Supply" or "Public Contracts Scotland", or the key Tenda gave for it, e.g. "atamis:health-family.force.com". |
| workspace | string | The Tenda workspace to use, by name, when the user is in more than one, e.g. "Northbridge Services". |
| has_account* | boolean | Whether the company has an account on the portal. |
| tender_reference | string | The notice ID, procurement identifier, solicitation number or the buyer's own reference, e.g. "012345-2026" on Find a Tender, "WS4851234567" on CanadaBuys or "140D0427Q0879" on SAM.gov. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"has_account"
],
"properties": {
"portal": {
"type": "string",
"maxLength": 200,
"description": "The portal, e.g. \"EU-Supply\" or \"Public Contracts Scotland\", or the key Tenda gave for it, e.g. \"atamis:health-family.force.com\"."
},
"workspace": {
"type": "string",
"description": "The Tenda workspace to use, by name, when the user is in more than one, e.g. \"Northbridge Services\"."
},
"has_account": {
"type": "boolean",
"description": "Whether the company has an account on the portal."
},
"tender_reference": {
"type": "string",
"minLength": 3,
"description": "The notice ID, procurement identifier, solicitation number or the buyer's own reference, e.g. \"012345-2026\" on Find a Tender, \"WS4851234567\" on CanadaBuys or \"140D0427Q0879\" on SAM.gov."
}
}
}Use this when the user wants a tender taken off their team's Tenda pipeline, for good or until a change brings it back: "remove it until it gets a value". It deletes the tender's bid call, sprint and the files the team added; for one in Bidding, Submitted, Won or Lost the answer asks first, so confirm with the user and call again with confirmed. Needs a Tenda account and workspace. Not for moving a tender to another stage (use move_in_pipeline) or a no-bid call (use record_bid_call). Example: {"tender_reference":"012345-2026","return_when":"value"}
| Argument | Type | Description |
|---|---|---|
| confirmed | boolean | True once the user has confirmed taking off a tender with a bid under way or a result. |
| workspace | string | The Tenda workspace to use, by name, when the user is in more than one, e.g. "Northbridge Services". |
| return_when | string | Put it back in Watching when this happens, and tell the user: "value" when the buyer publishes or changes its value, "deadline" when the deadline moves, "opens" when a pipeline notice opens for bids, "any_change" for any change to the notice. Leave out to take it off for good. |
| tender_reference* | string | The notice ID, procurement identifier, solicitation number or the buyer's own reference, e.g. "012345-2026" on Find a Tender, "WS4851234567" on CanadaBuys or "140D0427Q0879" on SAM.gov. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"tender_reference"
],
"properties": {
"confirmed": {
"type": "boolean",
"description": "True once the user has confirmed taking off a tender with a bid under way or a result."
},
"workspace": {
"type": "string",
"description": "The Tenda workspace to use, by name, when the user is in more than one, e.g. \"Northbridge Services\"."
},
"return_when": {
"enum": [
"value",
"deadline",
"opens",
"any_change"
],
"type": "string",
"description": "Put it back in Watching when this happens, and tell the user: \"value\" when the buyer publishes or changes its value, \"deadline\" when the deadline moves, \"opens\" when a pipeline notice opens for bids, \"any_change\" for any change to the notice. Leave out to take it off for good."
},
"tender_reference": {
"type": "string",
"minLength": 3,
"description": "The notice ID, procurement identifier, solicitation number or the buyer's own reference, e.g. \"012345-2026\" on Find a Tender, \"WS4851234567\" on CanadaBuys or \"140D0427Q0879\" on SAM.gov."
}
}
}Use this when the user has a draft answer for a public tender and wants it checked before submission, the way an evaluator would: word limit, every part of the question answered, specific evidence, firm commitments, no unfinished placeholders or empty superlatives, and what the section type needs (mobilisation, KPIs, measurable social value). Returns checks plus the tender's scoring criteria and a 0 to 5 rubric to score it against. Do not use to write a new answer (use draft_bid_response).
| Argument | Type | Description |
|---|---|---|
| draft* | string | The draft answer text. |
| section* | string | What the draft is, e.g. "method_statement". |
| question | string | The buyer's question, word for word, so Tenda can check every part is answered. |
| word_limit | integer | The buyer's word limit for this answer. |
| tender_reference | string | The notice ID, procurement identifier, solicitation number or the buyer's own reference, e.g. "012345-2026" on Find a Tender, "WS4851234567" on CanadaBuys or "140D0427Q0879" on SAM.gov. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"draft",
"section"
],
"properties": {
"draft": {
"type": "string",
"minLength": 20,
"description": "The draft answer text."
},
"section": {
"enum": [
"quality_answer",
"social_value",
"method_statement",
"case_study",
"company_overview",
"cover_letter",
"clarification_question"
],
"type": "string",
"description": "What the draft is, e.g. \"method_statement\"."
},
"question": {
"type": "string",
"description": "The buyer's question, word for word, so Tenda can check every part is answered."
},
"word_limit": {
"type": "integer",
"maximum": 9007199254740991,
"description": "The buyer's word limit for this answer.",
"exclusiveMinimum": 0
},
"tender_reference": {
"type": "string",
"minLength": 3,
"description": "The notice ID, procurement identifier, solicitation number or the buyer's own reference, e.g. \"012345-2026\" on Find a Tender, \"WS4851234567\" on CanadaBuys or \"140D0427Q0879\" on SAM.gov."
}
}
}Use this when the user wants Tenda to rewrite one answer in a bid it drafted, e.g. "make Q3 shorter" or "use the Glasgow contract as the example in 2.1". Tenda rewrites it in the background, marks it again and says when it's done. A bid's first ten rewrites are included; after that each uses a little of the workspace's allowance. Needs a Tenda account. Do not use before the draft is ready.
| Argument | Type | Description |
|---|---|---|
| draft_id | string | The draft's ID, from start_bid_draft. Or give the tender's reference instead, or neither for the workspace's latest draft. |
| question* | string | The answer to rewrite, by the buyer's number, e.g. "Q3". |
| workspace | string | The Tenda workspace to use, by name, when the user is in more than one, e.g. "Northbridge Services". |
| instruction* | string | What to change, in the user's words. |
| tender_reference | string | The notice ID, procurement identifier, solicitation number or the buyer's own reference, e.g. "012345-2026" on Find a Tender, "WS4851234567" on CanadaBuys or "140D0427Q0879" on SAM.gov. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"question",
"instruction"
],
"properties": {
"draft_id": {
"type": "string",
"description": "The draft's ID, from start_bid_draft. Or give the tender's reference instead, or neither for the workspace's latest draft."
},
"question": {
"type": "string",
"description": "The answer to rewrite, by the buyer's number, e.g. \"Q3\"."
},
"workspace": {
"type": "string",
"description": "The Tenda workspace to use, by name, when the user is in more than one, e.g. \"Northbridge Services\"."
},
"instruction": {
"type": "string",
"maxLength": 2000,
"minLength": 3,
"description": "What to change, in the user's words."
},
"tender_reference": {
"type": "string",
"minLength": 3,
"description": "The notice ID, procurement identifier, solicitation number or the buyer's own reference, e.g. \"012345-2026\" on Find a Tender, \"WS4851234567\" on CanadaBuys or \"140D0427Q0879\" on SAM.gov."
}
}
}Use this when the user wants Tenda to remember their business for searches, fit and readiness checks and drafting. Fill in only company facts the user has told you, leaving out anything unsure and any personal details, and show the user what you'll save so they can confirm or correct it first. Saves to their team's workspace and fills in more from Companies House (SAM.gov for a US company) and contracts the company has won. Needs a Tenda account. Not for personal profiles or CVs. Example: {"summary":"Office and school cleaning in Greater Manchester","company_number":"08123456"}
| Argument | Type | Description |
|---|---|---|
| staff | integer | How many people work for the company. |
| regions | array | Where the company works, e.g. ["North West", "Yorkshire and the Humber"] or ["Ontario", "Quebec"]. |
| summary | string | What the company does, who for and where, in a few sentences. Leave it out to keep the description Tenda has, such as when only adding codes or a trading name; a new one replaces it. |
| website | string | The company's website, e.g. "northbridge.co.uk". |
| add_codes | array | CPV codes to add to the ones the company works under, 8 digits each, e.g. ["60130000"] when the user adds SEND transport. Pick the most specific codes that fit the work the user names; adding never takes codes off. |
| workspace | string |
Use this to find who won public contracts in the UK, Canada, the United States, Germany, France and the rest of the EU, what a buyer paid last time, and which contracts end soon and may be re-tendered. Searches the user's own countries unless they name one. Answers give the total, pass nextCursor back as cursor for more, and summarise says who won most across every match. Not for tenders open now (use search_tenders) or a public body's total spending. Example: {"buyer":"Leeds City Council","query":"cleaning","summarise":"supplier"}
| Argument | Type | Description |
|---|---|---|
| buyer | string | Public body that awarded the contract, e.g. "Leeds City Council". |
| codes | array | Only contracts with one of these classification codes, or a code under one: CPV in the UK and EU, e.g. "90910000" for cleaning or "909" for all cleaning and sanitation; NAICS or PSC on SAM.gov; UNSPSC or GSIN on CanadaBuys. |
| limit | integer | How many to show, up to 50. Defaults to 10. |
| query | string | What the contract covers, e.g. "IT support" or "school cleaning". |
| cursor | string | The nextCursor from an earlier answer, with the same search, for its next page. |
| detail | string | "short" for just each result's IDs, title, buyer, value, dates and link, e.g. to go through many pages; "full", the default, for everything. |
Finds the team's tenders and people by name, for @ mentions in ChatGPT.
| Argument | Type | Description |
|---|---|---|
| query* | string |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"query"
],
"properties": {
"query": {
"type": "string",
"maxLength": 200
}
}
}Use this to find public sector contracts to bid for in the UK, Canada, the United States, Germany, France and the rest of the EU: open tenders, frameworks and upcoming notices from any public buyer. Searches the user's own countries unless they name one; get_coverage lists every source and when it was last read. Answers give the total; pass nextCursor back as cursor for more. Not for past winners (use search_contract_awards) or jobs. Example: {"query":"school cleaning","region":"North West","closing_within_days":30}
| Argument | Type | Description |
|---|---|---|
| sort | string | "best", the default: best fit first for a user with a saved company profile, otherwise the closest match; "closing": soonest deadline first; "newest": latest published first; "value": highest value first. |
| buyer | string | Only tenders from a buyer whose name holds these words, e.g. "Leeds City Council" or "NHS Lothian". |
| codes | array | Only tenders with one of these classification codes, or a code under one: CPV in the UK and EU, e.g. "90910000" for cleaning or "909" for all cleaning and sanitation; NAICS or PSC on SAM.gov; UNSPSC or GSIN on CanadaBuys. |
| limit | integer | How many to show, up to 50. Defaults to 8. |
| query | string | What the buyer is buying, in the user's words, e.g. "grounds maintenance", "cyber security consultancy", "school catering". Tenders with the words come first, then any close in meaning that share none of them, marked match "meaning". Leave it out to list every tender the other filters allow. |
Use this when the user wants to set Tenda up for their company, or has just added Tenda and has no workspace yet: shows a short form in the chat for the company, where it works and the work it does, then how many open tenders fit it now. Needs a Tenda account. Do not use to change one fact the user names, such as a certification (use save_company_profile).
| Argument | Type | Description |
|---|---|---|
| workspace | string | The Tenda workspace to set up, by name, when the user is in more than one, e.g. "Northbridge Services". |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"workspace": {
"type": "string",
"maxLength": 200,
"description": "The Tenda workspace to set up, by name, when the user is in more than one, e.g. \"Northbridge Services\"."
}
}
}Use this when the user wants to share a tender or send someone its link. Returns a link anyone can open without signing in: it shows what the public notice says, and chat apps preview it with the tender's name, value and closing date. Give the link as it is. Nothing about the user or their workspace is in the link or on the page.
| Argument | Type | Description |
|---|---|---|
| tender_reference* | string | The notice ID, procurement identifier, solicitation number or the buyer's own reference, e.g. "012345-2026" on Find a Tender, "WS4851234567" on CanadaBuys or "140D0427Q0879" on SAM.gov. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"tender_reference"
],
"properties": {
"tender_reference": {
"type": "string",
"minLength": 3,
"description": "The notice ID, procurement identifier, solicitation number or the buyer's own reference, e.g. \"012345-2026\" on Find a Tender, \"WS4851234567\" on CanadaBuys or \"140D0427Q0879\" on SAM.gov."
}
}
}Use this when the user wants Tenda to write a whole bid for their team: it asks a few questions, drafts every answer from the company's evidence, then marks and revises them. Relay Tenda's questions as they are. A whole bid uses one of the month's full bids, so first call it without confirmed, tell the user how many are left and offer to write it here with draft_bid_response, which uses none; call again with confirmed only if they choose Tenda. notify says where to hear when it's ready. Needs a Tenda account and workspace. Example: {"tender_reference":"012345-2026"}
| Argument | Type | Description |
|---|---|---|
| notify | array | Where Tenda says when the draft is ready, e.g. ["slack"]: the first of these apps where it has somewhere to say it, the conversation this call came from or else the workspace's first connected channel there. An empty list for nowhere. |
| confirmed | boolean | true once the user, told it uses one of this month's full bids, chose Tenda's drafting over writing it here answer by answer with draft_bid_response. Leave it out the first time. |
| workspace | string | The Tenda workspace to use, by name, when the user is in more than one, e.g. "Northbridge Services". |
| questions_text | string | The buyer's questions, or the invitation to tender's text, as the user shared it, including the text of files they attached. Left out, Tenda reads the documents the buyer published with the notice, or asks for them. |
| tender_reference* |
Use this when the user wants to stop one of their Tenda watches, by the watchId that watch_tenders or list_watches gave. It finds nothing new after that; what it already found still shows in get_tender_updates. Needs a Tenda account. Example: {"watch_id":"wch_abc123"}
| Argument | Type | Description |
|---|---|---|
| watch_id* | string | The watch to stop, by the id watch_tenders or list_watches gave. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"watch_id"
],
"properties": {
"watch_id": {
"type": "string",
"maxLength": 100,
"description": "The watch to stop, by the id watch_tenders or list_watches gave."
}
}
}Says when the team's work in a workspace last changed, for Tenda's app to keep its page up to date.
| Argument | Type | Description |
|---|---|---|
| workspace* | string | |
| tender_reference | string |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"workspace"
],
"properties": {
"workspace": {
"type": "string",
"maxLength": 200
},
"tender_reference": {
"type": "string",
"maxLength": 200
}
}
}Use this when the user says a step of a bid their team is running is done, or not done after all: decode the pack, assign questions, draft answers, review and score, final checks or submit. Ticks it off with who did it and when, and says what is next and when it is due. Ticking submit moves the tender to Submitted. Needs a Tenda account and a bid sprint, which starts with a call to bid (record_bid_call). Do not use to write or check answers (use draft_bid_response or review_bid_draft).
| Argument | Type | Description |
|---|---|---|
| done | boolean | false to reopen a step ticked off by mistake. Defaults to true. |
| step* | string | The step: "decode" (read the tender pack), "assign" (give each question an owner), "draft" (write the answers), "review" (score them), "checks" (final checks) or "submit". |
| workspace | string | The Tenda workspace to use, by name, when the user is in more than one, e.g. "Northbridge Services". |
| tender_reference* | string | The notice ID, procurement identifier, solicitation number or the buyer's own reference, e.g. "012345-2026" on Find a Tender, "WS4851234567" on CanadaBuys or "140D0427Q0879" on SAM.gov. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"tender_reference",
"step"
],
"properties": {
"done": {
"type": "boolean",
"description": "false to reopen a step ticked off by mistake. Defaults to true."
},
"step": {
"enum": [
"decode",
"assign",
"draft",
"review",
"checks",
"submit"
],
"type": "string",
"description": "The step: \"decode\" (read the tender pack), \"assign\" (give each question an owner), \"draft\" (write the answers), \"review\" (score them), \"checks\" (final checks) or \"submit\"."
},
"workspace": {
"type": "string",
"description": "The Tenda workspace to use, by name, when the user is in more than one, e.g. \"Northbridge Services\"."
},
"tender_reference": {
"type": "string",
"minLength": 3,
"description": "The notice ID, procurement identifier, solicitation number or the buyer's own reference, e.g. \"012345-2026\" on Find a Tender, \"WS4851234567\" on CanadaBuys or \"140D0427Q0879\" on SAM.gov."
}
}
}Use this when the user wants ChatGPT to use another of their Tenda workspaces, or to show tenders from another country or stop: set "workspace" to the workspace's name, or a country's key from get_tenda_settings (such as "us") to true or false. The workspace's home country stays on. Owners and admins change countries. Needs a Tenda account.
| Argument | Type | Description |
|---|---|---|
| set* | object |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"set"
],
"properties": {
"set": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"type": [
"string",
"boolean"
]
}
}
}
}Use this when the user wants alerts for new tenders or upcoming notices that match a search, or for changes to one tender they follow (clarifications, new deadlines, the award). Saves a watch and gives its watchId: matches show in get_tender_updates and, with notify, in the workspace's Slack or Teams channels that get changes. Needs a Tenda account. Not for seeing the user's watches (use list_watches) or stopping one (use stop_watch). Example: {"query":"office cleaning","include_upcoming":true}
| Argument | Type | Description |
|---|---|---|
| query | string | What to watch for, e.g. "office cleaning". |
| notify | array | Also post what the watch finds to the user's workspace's Slack or Teams channels, where they get changes. Only when the user asks for it there. |
| region | string | Where the work or delivery happens: a UK nation or English region, e.g. "North West" for Manchester or Liverpool; a Canadian province or territory, e.g. "Ontario" for Toronto; a US state, e.g. "Virginia"; a German Land by its German name, e.g. "Bayern" for Munich; a French region, e.g. "Île-de-France" for Paris; or another EU member state, e.g. "Poland". Omit for nationwide contracts or when the user names no place. |
| country | string | The country to look in, when the user names one, e.g. "Canada", "UK" or "Spain" (an EU member state searches the rest of the EU there). Omit to use the user's own countries (the UK when they aren't signed in). Tenda covers the UK, Canada, the United States, Germany, France and the rest of the EU. |
| buyer_type | string | Kind of public buyer, e.g. "local_authority" for councils, "nhs" for NHS trusts and ICBs, "education" for schools, academy trusts and universities. |
| More tenders to judge in the same call, by the same kind of reference, e.g. to compare a shortlist: up to 19, for 20 in all. Saves a call for each. |
| tender_reference | string | The notice ID, procurement identifier, solicitation number or the buyer's own reference, e.g. "012345-2026" on Find a Tender, "WS4851234567" on CanadaBuys or "140D0427Q0879" on SAM.gov. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"query": {
"type": "string",
"description": "When ranking without a tender_reference: the kind of work to look for, e.g. \"NHS cleaning\"."
},
"country": {
"type": "string",
"description": "The country to look in, when the user names one, e.g. \"Canada\", \"UK\" or \"Spain\" (an EU member state searches the rest of the EU there). Omit to use the user's own countries (the UK when they aren't signed in). Tenda covers the UK, Canada, the United States, Germany, France and the rest of the EU."
},
"business_size": {
"enum": [
"micro",
"small",
"medium",
"large",
"vcse"
],
"type": "string",
"description": "The company's size, e.g. \"small\" for under 50 staff. Use \"vcse\" for charities and social enterprises."
},
"company_summary": {
"type": "string",
"description": "What the company does, its size, turnover, certifications, insurance, where it works and past contracts, in the user's words, e.g. \"6-person electrical contractor in Leeds, £800k turnover, CHAS and Cyber Essentials\". Optional when the user has a saved Tenda profile."
},
"more_references": {
"type": "array",
"items": {
"type": "string",
"minLength": 3,
"description": "The notice ID, procurement identifier, solicitation number or the buyer's own reference, e.g. \"012345-2026\" on Find a Tender, \"WS4851234567\" on CanadaBuys or \"140D0427Q0879\" on SAM.gov."
},
"maxItems": 19,
"description": "More tenders to judge in the same call, by the same kind of reference, e.g. to compare a shortlist: up to 19, for 20 in all. Saves a call for each."
},
"tender_reference": {
"type": "string",
"minLength": 3,
"description": "The notice ID, procurement identifier, solicitation number or the buyer's own reference, e.g. \"012345-2026\" on Find a Tender, \"WS4851234567\" on CanadaBuys or \"140D0427Q0879\" on SAM.gov."
}
}
}{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"tender_reference",
"person"
],
"properties": {
"task": {
"enum": [
"call",
"decode",
"assign",
"draft",
"review",
"checks",
"submit"
],
"type": "string",
"description": "The work: \"call\" (the bid or no-bid call), or a sprint step: \"decode\", \"assign\", \"draft\", \"review\", \"checks\" or \"submit\". Leave it out for the tender's next piece of work."
},
"person": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "Who gets it: their name as the team knows them, e.g. \"Sam\" or \"Sam Okafor\", their email, or \"me\" for the user. Owners, admins and bid leads give out work; anyone can take work their role can do. Someone not in the workspace yet is invited from Today in the Tenda dashboard."
},
"workspace": {
"type": "string",
"description": "The Tenda workspace to use, by name, when the user is in more than one, e.g. \"Northbridge Services\"."
},
"tender_reference": {
"type": "string",
"minLength": 3,
"description": "The notice ID, procurement identifier, solicitation number or the buyer's own reference, e.g. \"012345-2026\" on Find a Tender, \"WS4851234567\" on CanadaBuys or \"140D0427Q0879\" on SAM.gov."
}
}
}| workspace | string | The Tenda workspace to use, by name, when the user is in more than one, e.g. "Northbridge Services". |
| automation | string | For turn_on, turn_off and history: the automation, by its name or id. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"action"
],
"properties": {
"asked": {
"type": "string",
"maxLength": 500,
"description": "For add: what the user asked for, in their words."
},
"action": {
"enum": [
"list",
"library",
"add",
"turn_on",
"turn_off",
"history"
],
"type": "string",
"description": "list (the workspace's automations and Tenda's suggestions), library, add (makes one from the library with the user's changes, saved off), turn_on, turn_off or history. Owners, admins and bid leads make and change them."
},
"changes": {
"type": "object",
"properties": {
"at": {
"type": "string",
"pattern": "^\\d{2}:\\d{2}$",
"description": "For a shortlist or report: the time, e.g. \"08:00\", between 07:30 and 18:30."
},
"days": {
"enum": [
"weekdays",
"mon",
"tue",
"wed",
"thu",
"fri"
],
"type": "string"
},
"most": {
"type": "integer",
"maximum": 10,
"minimum": 1,
"description": "For the shortlist: how many tenders."
},
"name": {
"type": "string",
"maxLength": 80
},
"hours": {
"type": "integer",
"maximum": 336,
"minimum": 1,
"description": "For the pre-submission check: hours before the deadline."
},
"words": {
"type": "array",
"items": {
"type": "string",
"maxLength": 40
},
"maxItems": 10,
"description": "Only tenders that mention one of these words."
},
"call_to": {
"type": "string",
"maxLength": 120,
"description": "Who gets the bid call: a name or email of someone in the workspace, or \"me\"."
},
"channel": {
"type": "string",
"maxLength": 120,
"description": "A connected Slack or Teams channel to post to, e.g. \"#bids\"."
},
"regions": {
"type": "array",
"items": {
"type": "string",
"maxLength": 60
},
"maxItems": 20,
"description": "Only tenders in these regions, e.g. [\"Scotland\"]."
},
"max_value": {
"type": "number",
"exclusiveMinimum": 0
},
"min_value": {
"type": "number",
"minimum": 0,
"description": "Only tenders worth at least this, in the tender's currency."
},
"tell_person": {
"type": "string",
"maxLength": 120,
"description": "Someone to tell instead: a name or email, or \"me\"."
},
"working_days": {
"type": "integer",
"maximum": 10,
"minimum": 1,
"description": "For sprint reminders: working days before a step is due."
},
"min_days_left": {
"type": "integer",
"maximum": 60,
"minimum": 0,
"description": "Only tenders with at least this many days before the deadline."
}
},
"description": "For add: what the user asked to change from the library's version."
},
"template": {
"enum": [
"morning_shortlist",
"strong_fit",
"change_guard",
"renewals",
"sprint_autopilot",
"pre_submission",
"award_debrief",
"weekly_report"
],
"type": "string",
"description": "For add: the library automation to make: morning_shortlist (Morning shortlist: Each weekday, the best new fits, each with a line on why it fits.); strong_fit (Strong fit to pipeline: Adds strong fits to the pipeline, checks readiness and gives out the bid call.); change_guard (Change guard: Says what a buyer changed and moves the sprint's dates to a new deadline.); renewals (Certificates and renewals: 60, 30 and 7 days before a certificate, policy or registration runs out.); sprint_autopilot (Sprint on autopilot: Reminds whoever has a step two working days before it's due, and says when one is late.); pre_submission (Pre-submission check: 72 hours out: word limits, gaps and open steps. 24 hours out: is it in?); award_debrief (Award and debrief: Says who won when the award is published, and drafts a request for feedback.); weekly_report (Weekly pipeline report: Mondays: pipeline value, bids due, results and anything overdue.)."
},
"workspace": {
"type": "string",
"description": "The Tenda workspace to use, by name, when the user is in more than one, e.g. \"Northbridge Services\"."
},
"automation": {
"type": "string",
"maxLength": 120,
"description": "For turn_on, turn_off and history: the automation, by its name or id."
}
}
}| workspace | string | The Tenda workspace to use, by name, when the user is in more than one, e.g. "Northbridge Services". |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"app": {
"enum": [
"slack",
"teams"
],
"type": "string",
"description": "\"slack\" or \"teams\" for that app's channels. Leave out app and channel for every channel."
},
"only": {
"type": "boolean",
"description": "true when what's sent here should go only here: every other channel stops getting it. An app or channel the user didn't mention otherwise keeps its alerts."
},
"send": {
"type": "array",
"items": {
"enum": [
"new_tenders",
"changes",
"morning_summary",
"bid_work",
"all"
],
"type": "string"
},
"description": "Alerts to turn on in those channels: \"new_tenders\" (new tenders that fit the company), \"changes\" (changes to tenders in the pipeline), \"morning_summary\" (the weekday morning summary), \"bid_work\" (bid work nobody has yet), or \"all\"."
},
"stop": {
"type": "array",
"items": {
"enum": [
"new_tenders",
"changes",
"morning_summary",
"bid_work",
"all"
],
"type": "string"
},
"description": "Alerts to turn off in those channels: \"new_tenders\" (new tenders that fit the company), \"changes\" (changes to tenders in the pipeline), \"morning_summary\" (the weekday morning summary), \"bid_work\" (bid work nobody has yet), or \"all\". A channel with no alerts stays connected, so the team can still ask Tenda there."
},
"channel": {
"type": "string",
"maxLength": 200,
"description": "One channel, by its name: e.g. \"bids\" or \"#bids\" in Slack, or \"General\" in Teams."
},
"workspace": {
"type": "string",
"description": "The Tenda workspace to use, by name, when the user is in more than one, e.g. \"Northbridge Services\"."
}
}
}{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"notes": {
"type": "string",
"maxLength": 4000,
"description": "Anything else the team wants Tenda to use in the bid."
},
"answers": {
"type": "array",
"items": {
"type": "object",
"required": [
"question",
"answer"
],
"properties": {
"answer": {
"type": "string",
"description": "The team's answer, in their words."
},
"question": {
"type": "string",
"description": "The question Tenda asked, by its number such as \"2\", or its words."
}
}
},
"description": "The team's answers to Tenda's questions."
},
"draft_id": {
"type": "string",
"description": "The draft's ID, from start_bid_draft. Or give the tender's reference instead, or neither for the workspace's latest draft."
},
"draft_now": {
"type": "boolean",
"description": "true to start drafting now, with any of Tenda's questions unanswered."
},
"workspace": {
"type": "string",
"description": "The Tenda workspace to use, by name, when the user is in more than one, e.g. \"Northbridge Services\"."
},
"questions_text": {
"type": "string",
"maxLength": 200000,
"description": "The buyer's questions, when Tenda asked for them."
},
"tender_reference": {
"type": "string",
"minLength": 3,
"description": "The notice ID, procurement identifier, solicitation number or the buyer's own reference, e.g. \"012345-2026\" on Find a Tender, \"WS4851234567\" on CanadaBuys or \"140D0427Q0879\" on SAM.gov."
}
}
}{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"tender_reference",
"decision"
],
"properties": {
"reason": {
"type": "string",
"maxLength": 2000,
"description": "Why, in the user's words, for the team to read later."
},
"answers": {
"type": "object",
"properties": {
"fit": {
"enum": [
"yes",
"unsure",
"no"
],
"type": "string"
},
"value": {
"enum": [
"yes",
"unsure",
"no"
],
"type": "string"
},
"capacity": {
"enum": [
"yes",
"unsure",
"no"
],
"type": "string"
},
"competition": {
"enum": [
"yes",
"unsure",
"no"
],
"type": "string"
},
"eligibility": {
"enum": [
"yes",
"unsure",
"no"
],
"type": "string"
}
},
"description": "The team's answers to Tenda's five questions, each \"yes\", \"unsure\" or \"no\": fit (is this work we do well), eligibility (do we meet every must-have), capacity (can we deliver it and write the bid in time), competition (can we beat the other bidders) and value (is it worth winning). Leave out questions the user didn't answer."
},
"decision": {
"enum": [
"bid",
"no_bid"
],
"type": "string",
"description": "\"bid\" when the team will bid, \"no_bid\" when it will not."
},
"workspace": {
"type": "string",
"description": "The Tenda workspace to use, by name, when the user is in more than one, e.g. \"Northbridge Services\"."
},
"tender_reference": {
"type": "string",
"minLength": 3,
"description": "The notice ID, procurement identifier, solicitation number or the buyer's own reference, e.g. \"012345-2026\" on Find a Tender, \"WS4851234567\" on CanadaBuys or \"140D0427Q0879\" on SAM.gov."
}
}
}| The Tenda workspace to use, by name, when the user is in more than one, e.g. "Northbridge Services". |
| nationwide | boolean | True when the company works anywhere in its country. |
| buyer_types | array | Kinds of public buyer the company has worked for, e.g. ["local_authority", "education"]. |
| company_name | string | The company's name, e.g. "Northbridge Services Ltd". |
| remove_codes | array | CPV codes to take off, e.g. ["80500000"]. |
| trading_name | string | The name the company bids under, when it isn't its registered name, e.g. "Plenda" for Eshmere Ltd. |
| turnover_gbp | number | Annual turnover in the company's home currency (pounds for a UK company, Canadian dollars for a Canadian one), e.g. 2400000. |
| business_size | string | The company's size, e.g. "small" for under 50 staff. Use "vcse" for charities and social enterprises. |
| certifications | array | Certifications and accreditations it holds, e.g. ["iso_9001", "cyber_essentials", "chas"]. Add an expiry as "cyber_essentials:2026-11-30". |
| company_number | string | The Companies House number, e.g. "08123456" or "SC123456", or for a US company its SAM.gov Unique Entity ID (UEI), e.g. "JX4M7Q2LK9C1". Tenda looks the company up and finds the public contracts it has won. |
| largest_contract_gbp | number | The largest contract, a year, the company would take on, in its home currency. |
| public_liability_gbp | number | Public liability (in Canada, commercial general liability) cover in the company's home currency, e.g. 5000000. |
| employers_liability_gbp | number | Employer's liability cover in the company's home currency, e.g. 10000000. |
| professional_indemnity_gbp | number | Professional indemnity cover in the company's home currency. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"staff": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "How many people work for the company."
},
"regions": {
"type": "array",
"items": {
"enum": [
"North East",
"North West",
"Yorkshire and the Humber",
"East Midlands",
"West Midlands",
"East of England",
"London",
"South East",
"South West",
"Scotland",
"Wales",
"Northern Ireland",
"British Columbia",
"Alberta",
"Saskatchewan",
"Manitoba",
"Ontario",
"Quebec",
"New Brunswick",
"Nova Scotia",
"Prince Edward Island",
"Newfoundland and Labrador",
"Yukon",
"Northwest Territories",
"Nunavut",
"Alabama",
"Alaska",
"Arizona",
"Arkansas",
"California",
"Colorado",
"Connecticut",
"Delaware",
"District of Columbia",
"Florida",
"Georgia",
"Hawaii",
"Idaho",
"Illinois",
"Indiana",
"Iowa",
"Kansas",
"Kentucky",
"Louisiana",
"Maine",
"Maryland",
"Massachusetts",
"Michigan",
"Minnesota",
"Mississippi",
"Missouri",
"Montana",
"Nebraska",
"Nevada",
"New Hampshire",
"New Jersey",
"New Mexico",
"New York",
"North Carolina",
"North Dakota",
"Ohio",
"Oklahoma",
"Oregon",
"Pennsylvania",
"Rhode Island",
"South Carolina",
"South Dakota",
"Tennessee",
"Texas",
"Utah",
"Vermont",
"Virginia",
"Washington",
"West Virginia",
"Wisconsin",
"Wyoming",
"Puerto Rico",
"Guam",
"U.S. Virgin Islands",
"American Samoa",
"Northern Mariana Islands",
"Baden-Württemberg",
"Bayern",
"Berlin",
"Brandenburg",
"Bremen",
"Hamburg",
"Hessen",
"Mecklenburg-Vorpommern",
"Niedersachsen",
"Nordrhein-Westfalen",
"Rheinland-Pfalz",
"Saarland",
"Sachsen",
"Sachsen-Anhalt",
"Schleswig-Holstein",
"Thüringen",
"Auvergne-Rhône-Alpes",
"Bourgogne-Franche-Comté",
"Bretagne",
"Centre-Val de Loire",
"Corse",
"Grand Est",
"Hauts-de-France",
"Île-de-France",
"Normandie",
"Nouvelle-Aquitaine",
"Occitanie",
"Pays de la Loire",
"Provence-Alpes-Côte d'Azur",
"Guadeloupe",
"Martinique",
"Guyane",
"La Réunion",
"Mayotte",
"Austria",
"Belgium",
"Bulgaria",
"Croatia",
"Cyprus",
"Czechia",
"Denmark",
"Estonia",
"Finland",
"Greece",
"Hungary",
"Ireland",
"Italy",
"Latvia",
"Lithuania",
"Luxembourg",
"Malta",
"Netherlands",
"Poland",
"Portugal",
"Romania",
"Slovakia",
"Slovenia",
"Spain",
"Sweden"
],
"type": "string",
"description": "Where the work or delivery happens: a UK nation or English region, e.g. \"North West\" for Manchester or Liverpool; a Canadian province or territory, e.g. \"Ontario\" for Toronto; a US state, e.g. \"Virginia\"; a German Land by its German name, e.g. \"Bayern\" for Munich; a French region, e.g. \"Île-de-France\" for Paris; or another EU member state, e.g. \"Poland\". Omit for nationwide contracts or when the user names no place."
},
"description": "Where the company works, e.g. [\"North West\", \"Yorkshire and the Humber\"] or [\"Ontario\", \"Quebec\"]."
},
"summary": {
"type": "string",
"maxLength": 4000,
"minLength": 10,
"description": "What the company does, who for and where, in a few sentences. Leave it out to keep the description Tenda has, such as when only adding codes or a trading name; a new one replaces it."
},
"website": {
"type": "string",
"description": "The company's website, e.g. \"northbridge.co.uk\"."
},
"add_codes": {
"type": "array",
"items": {
"type": "string"
},
"description": "CPV codes to add to the ones the company works under, 8 digits each, e.g. [\"60130000\"] when the user adds SEND transport. Pick the most specific codes that fit the work the user names; adding never takes codes off."
},
"workspace": {
"type": "string",
"description": "The Tenda workspace to use, by name, when the user is in more than one, e.g. \"Northbridge Services\"."
},
"nationwide": {
"type": "boolean",
"description": "True when the company works anywhere in its country."
},
"buyer_types": {
"type": "array",
"items": {
"enum": [
"central_government",
"local_authority",
"nhs",
"education",
"housing",
"emergency_services",
"devolved_government",
"defence",
"utilities"
],
"type": "string"
},
"description": "Kinds of public buyer the company has worked for, e.g. [\"local_authority\", \"education\"]."
},
"company_name": {
"type": "string",
"description": "The company's name, e.g. \"Northbridge Services Ltd\"."
},
"remove_codes": {
"type": "array",
"items": {
"type": "string"
},
"description": "CPV codes to take off, e.g. [\"80500000\"]."
},
"trading_name": {
"type": "string",
"maxLength": 160,
"description": "The name the company bids under, when it isn't its registered name, e.g. \"Plenda\" for Eshmere Ltd."
},
"turnover_gbp": {
"type": "number",
"minimum": 0,
"description": "Annual turnover in the company's home currency (pounds for a UK company, Canadian dollars for a Canadian one), e.g. 2400000."
},
"business_size": {
"enum": [
"micro",
"small",
"medium",
"large",
"vcse"
],
"type": "string",
"description": "The company's size, e.g. \"small\" for under 50 staff. Use \"vcse\" for charities and social enterprises."
},
"certifications": {
"type": "array",
"items": {
"type": "string"
},
"description": "Certifications and accreditations it holds, e.g. [\"iso_9001\", \"cyber_essentials\", \"chas\"]. Add an expiry as \"cyber_essentials:2026-11-30\"."
},
"company_number": {
"type": "string",
"description": "The Companies House number, e.g. \"08123456\" or \"SC123456\", or for a US company its SAM.gov Unique Entity ID (UEI), e.g. \"JX4M7Q2LK9C1\". Tenda looks the company up and finds the public contracts it has won."
},
"largest_contract_gbp": {
"type": "number",
"minimum": 0,
"description": "The largest contract, a year, the company would take on, in its home currency."
},
"public_liability_gbp": {
"type": "number",
"minimum": 0,
"description": "Public liability (in Canada, commercial general liability) cover in the company's home currency, e.g. 5000000."
},
"employers_liability_gbp": {
"type": "number",
"minimum": 0,
"description": "Employer's liability cover in the company's home currency, e.g. 10000000."
},
"professional_indemnity_gbp": {
"type": "number",
"minimum": 0,
"description": "Professional indemnity cover in the company's home currency."
}
}
}| region | string | Where the work or delivery happens: a UK nation or English region, e.g. "North West" for Manchester or Liverpool; a Canadian province or territory, e.g. "Ontario" for Toronto; a US state, e.g. "Virginia"; a German Land by its German name, e.g. "Bayern" for Munich; a French region, e.g. "Île-de-France" for Paris; or another EU member state, e.g. "Poland". Omit for nationwide contracts or when the user names no place. |
| country | string | The country to look in, when the user names one, e.g. "Canada", "UK" or "Spain" (an EU member state searches the rest of the EU there). Omit to use the user's own countries (the UK when they aren't signed in). Tenda covers the UK, Canada, the United States, Germany, France and the rest of the EU. |
| supplier | string | Company that holds or won the contract, e.g. a competitor's name. |
| summarise | string | Adds overview, a summary of every matching award, not just this page: "buyer" for who wins a buyer's contracts, "supplier" for what a supplier wins and from which buyers. |
| awarded_since | string | Only contracts awarded on or after this date, e.g. "2026-01-01". |
| ending_within_months | integer | Only contracts ending within this many months, e.g. 12 for "coming up for renewal next year". |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"buyer": {
"type": "string",
"description": "Public body that awarded the contract, e.g. \"Leeds City Council\"."
},
"codes": {
"type": "array",
"items": {
"type": "string",
"maxLength": 20,
"minLength": 2
},
"maxItems": 20,
"description": "Only contracts with one of these classification codes, or a code under one: CPV in the UK and EU, e.g. \"90910000\" for cleaning or \"909\" for all cleaning and sanitation; NAICS or PSC on SAM.gov; UNSPSC or GSIN on CanadaBuys."
},
"limit": {
"type": "integer",
"maximum": 50,
"minimum": 1,
"description": "How many to show, up to 50. Defaults to 10."
},
"query": {
"type": "string",
"description": "What the contract covers, e.g. \"IT support\" or \"school cleaning\"."
},
"cursor": {
"type": "string",
"maxLength": 400,
"description": "The nextCursor from an earlier answer, with the same search, for its next page."
},
"detail": {
"enum": [
"short",
"full"
],
"type": "string",
"description": "\"short\" for just each result's IDs, title, buyer, value, dates and link, e.g. to go through many pages; \"full\", the default, for everything."
},
"region": {
"enum": [
"North East",
"North West",
"Yorkshire and the Humber",
"East Midlands",
"West Midlands",
"East of England",
"London",
"South East",
"South West",
"Scotland",
"Wales",
"Northern Ireland",
"British Columbia",
"Alberta",
"Saskatchewan",
"Manitoba",
"Ontario",
"Quebec",
"New Brunswick",
"Nova Scotia",
"Prince Edward Island",
"Newfoundland and Labrador",
"Yukon",
"Northwest Territories",
"Nunavut",
"Alabama",
"Alaska",
"Arizona",
"Arkansas",
"California",
"Colorado",
"Connecticut",
"Delaware",
"District of Columbia",
"Florida",
"Georgia",
"Hawaii",
"Idaho",
"Illinois",
"Indiana",
"Iowa",
"Kansas",
"Kentucky",
"Louisiana",
"Maine",
"Maryland",
"Massachusetts",
"Michigan",
"Minnesota",
"Mississippi",
"Missouri",
"Montana",
"Nebraska",
"Nevada",
"New Hampshire",
"New Jersey",
"New Mexico",
"New York",
"North Carolina",
"North Dakota",
"Ohio",
"Oklahoma",
"Oregon",
"Pennsylvania",
"Rhode Island",
"South Carolina",
"South Dakota",
"Tennessee",
"Texas",
"Utah",
"Vermont",
"Virginia",
"Washington",
"West Virginia",
"Wisconsin",
"Wyoming",
"Puerto Rico",
"Guam",
"U.S. Virgin Islands",
"American Samoa",
"Northern Mariana Islands",
"Baden-Württemberg",
"Bayern",
"Berlin",
"Brandenburg",
"Bremen",
"Hamburg",
"Hessen",
"Mecklenburg-Vorpommern",
"Niedersachsen",
"Nordrhein-Westfalen",
"Rheinland-Pfalz",
"Saarland",
"Sachsen",
"Sachsen-Anhalt",
"Schleswig-Holstein",
"Thüringen",
"Auvergne-Rhône-Alpes",
"Bourgogne-Franche-Comté",
"Bretagne",
"Centre-Val de Loire",
"Corse",
"Grand Est",
"Hauts-de-France",
"Île-de-France",
"Normandie",
"Nouvelle-Aquitaine",
"Occitanie",
"Pays de la Loire",
"Provence-Alpes-Côte d'Azur",
"Guadeloupe",
"Martinique",
"Guyane",
"La Réunion",
"Mayotte",
"Austria",
"Belgium",
"Bulgaria",
"Croatia",
"Cyprus",
"Czechia",
"Denmark",
"Estonia",
"Finland",
"Greece",
"Hungary",
"Ireland",
"Italy",
"Latvia",
"Lithuania",
"Luxembourg",
"Malta",
"Netherlands",
"Poland",
"Portugal",
"Romania",
"Slovakia",
"Slovenia",
"Spain",
"Sweden"
],
"type": "string",
"description": "Where the work or delivery happens: a UK nation or English region, e.g. \"North West\" for Manchester or Liverpool; a Canadian province or territory, e.g. \"Ontario\" for Toronto; a US state, e.g. \"Virginia\"; a German Land by its German name, e.g. \"Bayern\" for Munich; a French region, e.g. \"Île-de-France\" for Paris; or another EU member state, e.g. \"Poland\". Omit for nationwide contracts or when the user names no place."
},
"country": {
"type": "string",
"description": "The country to look in, when the user names one, e.g. \"Canada\", \"UK\" or \"Spain\" (an EU member state searches the rest of the EU there). Omit to use the user's own countries (the UK when they aren't signed in). Tenda covers the UK, Canada, the United States, Germany, France and the rest of the EU."
},
"supplier": {
"type": "string",
"description": "Company that holds or won the contract, e.g. a competitor's name."
},
"summarise": {
"enum": [
"buyer",
"supplier"
],
"type": "string",
"description": "Adds overview, a summary of every matching award, not just this page: \"buyer\" for who wins a buyer's contracts, \"supplier\" for what a supplier wins and from which buyers."
},
"awarded_since": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}",
"description": "Only contracts awarded on or after this date, e.g. \"2026-01-01\"."
},
"ending_within_months": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Only contracts ending within this many months, e.g. 12 for \"coming up for renewal next year\".",
"exclusiveMinimum": 0
}
}
}| stage | string | "open" for tenders taking bids now, "upcoming" for pipeline and preliminary market engagement notices about future tenders. |
| cursor | string | The nextCursor from an earlier answer, with the same search, for its next page. |
| detail | string | "short" for just each result's IDs, title, buyer, value, dates and link, e.g. to go through many pages; "full", the default, for everything. |
| region | string | Where the work or delivery happens: a UK nation or English region, e.g. "North West" for Manchester or Liverpool; a Canadian province or territory, e.g. "Ontario" for Toronto; a US state, e.g. "Virginia"; a German Land by its German name, e.g. "Bayern" for Munich; a French region, e.g. "Île-de-France" for Paris; or another EU member state, e.g. "Poland". Omit for nationwide contracts or when the user names no place. |
| country | string | The country to look in, when the user names one, e.g. "Canada", "UK" or "Spain" (an EU member state searches the rest of the EU there). Omit to use the user's own countries (the UK when they aren't signed in). Tenda covers the UK, Canada, the United States, Germany, France and the rest of the EU. |
| procedure | string | How the buyer is buying, e.g. "framework" for framework agreements, "dynamic_market" for dynamic markets suppliers can join at any time. |
| buyer_type | string | Kind of public buyer, e.g. "local_authority" for councils, "nhs" for NHS trusts and ICBs, "education" for schools, academy trusts and universities. |
| suitable_for | string | Only notices the buyer marked as suitable for small and medium-sized enterprises or for voluntary, community and social enterprises. |
| contract_type | string | What is being bought, e.g. "works" for construction and refurbishment. |
| max_value_gbp | integer | Highest estimated contract value in the country's own currency (pounds for the UK, Canadian dollars for Canada, US dollars for the US, euros for Germany, France and the rest of the EU), e.g. 100000 for "under £100k". |
| min_value_gbp | integer | Lowest estimated contract value in the country's own currency (pounds for the UK, Canadian dollars for Canada, US dollars for the US, euros for Germany, France and the rest of the EU), e.g. 50000 for "over £50k". |
| published_since | string | Only tenders published on or after this date, e.g. "2026-10-01". |
| closing_within_days | integer | Only tenders closing within this many days, e.g. 30 for "this month". |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"sort": {
"enum": [
"best",
"closing",
"newest",
"value"
],
"type": "string",
"description": "\"best\", the default: best fit first for a user with a saved company profile, otherwise the closest match; \"closing\": soonest deadline first; \"newest\": latest published first; \"value\": highest value first."
},
"buyer": {
"type": "string",
"maxLength": 200,
"description": "Only tenders from a buyer whose name holds these words, e.g. \"Leeds City Council\" or \"NHS Lothian\"."
},
"codes": {
"type": "array",
"items": {
"type": "string",
"maxLength": 20,
"minLength": 2
},
"maxItems": 20,
"description": "Only tenders with one of these classification codes, or a code under one: CPV in the UK and EU, e.g. \"90910000\" for cleaning or \"909\" for all cleaning and sanitation; NAICS or PSC on SAM.gov; UNSPSC or GSIN on CanadaBuys."
},
"limit": {
"type": "integer",
"maximum": 50,
"minimum": 1,
"description": "How many to show, up to 50. Defaults to 8."
},
"query": {
"type": "string",
"description": "What the buyer is buying, in the user's words, e.g. \"grounds maintenance\", \"cyber security consultancy\", \"school catering\". Tenders with the words come first, then any close in meaning that share none of them, marked match \"meaning\". Leave it out to list every tender the other filters allow."
},
"stage": {
"enum": [
"open",
"upcoming",
"any"
],
"type": "string",
"description": "\"open\" for tenders taking bids now, \"upcoming\" for pipeline and preliminary market engagement notices about future tenders."
},
"cursor": {
"type": "string",
"maxLength": 400,
"description": "The nextCursor from an earlier answer, with the same search, for its next page."
},
"detail": {
"enum": [
"short",
"full"
],
"type": "string",
"description": "\"short\" for just each result's IDs, title, buyer, value, dates and link, e.g. to go through many pages; \"full\", the default, for everything."
},
"region": {
"enum": [
"North East",
"North West",
"Yorkshire and the Humber",
"East Midlands",
"West Midlands",
"East of England",
"London",
"South East",
"South West",
"Scotland",
"Wales",
"Northern Ireland",
"British Columbia",
"Alberta",
"Saskatchewan",
"Manitoba",
"Ontario",
"Quebec",
"New Brunswick",
"Nova Scotia",
"Prince Edward Island",
"Newfoundland and Labrador",
"Yukon",
"Northwest Territories",
"Nunavut",
"Alabama",
"Alaska",
"Arizona",
"Arkansas",
"California",
"Colorado",
"Connecticut",
"Delaware",
"District of Columbia",
"Florida",
"Georgia",
"Hawaii",
"Idaho",
"Illinois",
"Indiana",
"Iowa",
"Kansas",
"Kentucky",
"Louisiana",
"Maine",
"Maryland",
"Massachusetts",
"Michigan",
"Minnesota",
"Mississippi",
"Missouri",
"Montana",
"Nebraska",
"Nevada",
"New Hampshire",
"New Jersey",
"New Mexico",
"New York",
"North Carolina",
"North Dakota",
"Ohio",
"Oklahoma",
"Oregon",
"Pennsylvania",
"Rhode Island",
"South Carolina",
"South Dakota",
"Tennessee",
"Texas",
"Utah",
"Vermont",
"Virginia",
"Washington",
"West Virginia",
"Wisconsin",
"Wyoming",
"Puerto Rico",
"Guam",
"U.S. Virgin Islands",
"American Samoa",
"Northern Mariana Islands",
"Baden-Württemberg",
"Bayern",
"Berlin",
"Brandenburg",
"Bremen",
"Hamburg",
"Hessen",
"Mecklenburg-Vorpommern",
"Niedersachsen",
"Nordrhein-Westfalen",
"Rheinland-Pfalz",
"Saarland",
"Sachsen",
"Sachsen-Anhalt",
"Schleswig-Holstein",
"Thüringen",
"Auvergne-Rhône-Alpes",
"Bourgogne-Franche-Comté",
"Bretagne",
"Centre-Val de Loire",
"Corse",
"Grand Est",
"Hauts-de-France",
"Île-de-France",
"Normandie",
"Nouvelle-Aquitaine",
"Occitanie",
"Pays de la Loire",
"Provence-Alpes-Côte d'Azur",
"Guadeloupe",
"Martinique",
"Guyane",
"La Réunion",
"Mayotte",
"Austria",
"Belgium",
"Bulgaria",
"Croatia",
"Cyprus",
"Czechia",
"Denmark",
"Estonia",
"Finland",
"Greece",
"Hungary",
"Ireland",
"Italy",
"Latvia",
"Lithuania",
"Luxembourg",
"Malta",
"Netherlands",
"Poland",
"Portugal",
"Romania",
"Slovakia",
"Slovenia",
"Spain",
"Sweden"
],
"type": "string",
"description": "Where the work or delivery happens: a UK nation or English region, e.g. \"North West\" for Manchester or Liverpool; a Canadian province or territory, e.g. \"Ontario\" for Toronto; a US state, e.g. \"Virginia\"; a German Land by its German name, e.g. \"Bayern\" for Munich; a French region, e.g. \"Île-de-France\" for Paris; or another EU member state, e.g. \"Poland\". Omit for nationwide contracts or when the user names no place."
},
"country": {
"type": "string",
"description": "The country to look in, when the user names one, e.g. \"Canada\", \"UK\" or \"Spain\" (an EU member state searches the rest of the EU there). Omit to use the user's own countries (the UK when they aren't signed in). Tenda covers the UK, Canada, the United States, Germany, France and the rest of the EU."
},
"procedure": {
"enum": [
"open_procedure",
"competitive_flexible",
"framework",
"dynamic_market",
"any"
],
"type": "string",
"description": "How the buyer is buying, e.g. \"framework\" for framework agreements, \"dynamic_market\" for dynamic markets suppliers can join at any time."
},
"buyer_type": {
"enum": [
"central_government",
"local_authority",
"nhs",
"education",
"housing",
"emergency_services",
"devolved_government",
"defence",
"utilities",
"any"
],
"type": "string",
"description": "Kind of public buyer, e.g. \"local_authority\" for councils, \"nhs\" for NHS trusts and ICBs, \"education\" for schools, academy trusts and universities."
},
"suitable_for": {
"enum": [
"sme",
"vcse",
"any"
],
"type": "string",
"description": "Only notices the buyer marked as suitable for small and medium-sized enterprises or for voluntary, community and social enterprises."
},
"contract_type": {
"enum": [
"goods",
"services",
"works",
"any"
],
"type": "string",
"description": "What is being bought, e.g. \"works\" for construction and refurbishment."
},
"max_value_gbp": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Highest estimated contract value in the country's own currency (pounds for the UK, Canadian dollars for Canada, US dollars for the US, euros for Germany, France and the rest of the EU), e.g. 100000 for \"under £100k\".",
"exclusiveMinimum": 0
},
"min_value_gbp": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "Lowest estimated contract value in the country's own currency (pounds for the UK, Canadian dollars for Canada, US dollars for the US, euros for Germany, France and the rest of the EU), e.g. 50000 for \"over £50k\"."
},
"published_since": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}",
"description": "Only tenders published on or after this date, e.g. \"2026-10-01\"."
},
"closing_within_days": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Only tenders closing within this many days, e.g. 30 for \"this month\".",
"exclusiveMinimum": 0
}
}
}| string |
| The notice ID, procurement identifier, solicitation number or the buyer's own reference, e.g. "012345-2026" on Find a Tender, "WS4851234567" on CanadaBuys or "140D0427Q0879" on SAM.gov. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"tender_reference"
],
"properties": {
"notify": {
"type": "array",
"items": {
"enum": [
"slack",
"teams"
],
"type": "string"
},
"maxItems": 2,
"description": "Where Tenda says when the draft is ready, e.g. [\"slack\"]: the first of these apps where it has somewhere to say it, the conversation this call came from or else the workspace's first connected channel there. An empty list for nowhere."
},
"confirmed": {
"type": "boolean",
"description": "true once the user, told it uses one of this month's full bids, chose Tenda's drafting over writing it here answer by answer with draft_bid_response. Leave it out the first time."
},
"workspace": {
"type": "string",
"description": "The Tenda workspace to use, by name, when the user is in more than one, e.g. \"Northbridge Services\"."
},
"questions_text": {
"type": "string",
"maxLength": 200000,
"description": "The buyer's questions, or the invitation to tender's text, as the user shared it, including the text of files they attached. Left out, Tenda reads the documents the buyer published with the notice, or asks for them."
},
"tender_reference": {
"type": "string",
"minLength": 3,
"description": "The notice ID, procurement identifier, solicitation number or the buyer's own reference, e.g. \"012345-2026\" on Find a Tender, \"WS4851234567\" on CanadaBuys or \"140D0427Q0879\" on SAM.gov."
}
}
}| include_upcoming | boolean | Also alert on pipeline and preliminary market engagement notices, to hear about work before it is tendered. |
| tender_reference | string | Watch one tender for clarifications, deadline changes and the award instead of a search, e.g. "012345-2026". |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"query": {
"type": "string",
"description": "What to watch for, e.g. \"office cleaning\"."
},
"notify": {
"type": "array",
"items": {
"enum": [
"slack",
"teams"
],
"type": "string"
},
"maxItems": 2,
"description": "Also post what the watch finds to the user's workspace's Slack or Teams channels, where they get changes. Only when the user asks for it there."
},
"region": {
"enum": [
"North East",
"North West",
"Yorkshire and the Humber",
"East Midlands",
"West Midlands",
"East of England",
"London",
"South East",
"South West",
"Scotland",
"Wales",
"Northern Ireland",
"British Columbia",
"Alberta",
"Saskatchewan",
"Manitoba",
"Ontario",
"Quebec",
"New Brunswick",
"Nova Scotia",
"Prince Edward Island",
"Newfoundland and Labrador",
"Yukon",
"Northwest Territories",
"Nunavut",
"Alabama",
"Alaska",
"Arizona",
"Arkansas",
"California",
"Colorado",
"Connecticut",
"Delaware",
"District of Columbia",
"Florida",
"Georgia",
"Hawaii",
"Idaho",
"Illinois",
"Indiana",
"Iowa",
"Kansas",
"Kentucky",
"Louisiana",
"Maine",
"Maryland",
"Massachusetts",
"Michigan",
"Minnesota",
"Mississippi",
"Missouri",
"Montana",
"Nebraska",
"Nevada",
"New Hampshire",
"New Jersey",
"New Mexico",
"New York",
"North Carolina",
"North Dakota",
"Ohio",
"Oklahoma",
"Oregon",
"Pennsylvania",
"Rhode Island",
"South Carolina",
"South Dakota",
"Tennessee",
"Texas",
"Utah",
"Vermont",
"Virginia",
"Washington",
"West Virginia",
"Wisconsin",
"Wyoming",
"Puerto Rico",
"Guam",
"U.S. Virgin Islands",
"American Samoa",
"Northern Mariana Islands",
"Baden-Württemberg",
"Bayern",
"Berlin",
"Brandenburg",
"Bremen",
"Hamburg",
"Hessen",
"Mecklenburg-Vorpommern",
"Niedersachsen",
"Nordrhein-Westfalen",
"Rheinland-Pfalz",
"Saarland",
"Sachsen",
"Sachsen-Anhalt",
"Schleswig-Holstein",
"Thüringen",
"Auvergne-Rhône-Alpes",
"Bourgogne-Franche-Comté",
"Bretagne",
"Centre-Val de Loire",
"Corse",
"Grand Est",
"Hauts-de-France",
"Île-de-France",
"Normandie",
"Nouvelle-Aquitaine",
"Occitanie",
"Pays de la Loire",
"Provence-Alpes-Côte d'Azur",
"Guadeloupe",
"Martinique",
"Guyane",
"La Réunion",
"Mayotte",
"Austria",
"Belgium",
"Bulgaria",
"Croatia",
"Cyprus",
"Czechia",
"Denmark",
"Estonia",
"Finland",
"Greece",
"Hungary",
"Ireland",
"Italy",
"Latvia",
"Lithuania",
"Luxembourg",
"Malta",
"Netherlands",
"Poland",
"Portugal",
"Romania",
"Slovakia",
"Slovenia",
"Spain",
"Sweden"
],
"type": "string",
"description": "Where the work or delivery happens: a UK nation or English region, e.g. \"North West\" for Manchester or Liverpool; a Canadian province or territory, e.g. \"Ontario\" for Toronto; a US state, e.g. \"Virginia\"; a German Land by its German name, e.g. \"Bayern\" for Munich; a French region, e.g. \"Île-de-France\" for Paris; or another EU member state, e.g. \"Poland\". Omit for nationwide contracts or when the user names no place."
},
"country": {
"type": "string",
"description": "The country to look in, when the user names one, e.g. \"Canada\", \"UK\" or \"Spain\" (an EU member state searches the rest of the EU there). Omit to use the user's own countries (the UK when they aren't signed in). Tenda covers the UK, Canada, the United States, Germany, France and the rest of the EU."
},
"buyer_type": {
"enum": [
"central_government",
"local_authority",
"nhs",
"education",
"housing",
"emergency_services",
"devolved_government",
"defence",
"utilities",
"any"
],
"type": "string",
"description": "Kind of public buyer, e.g. \"local_authority\" for councils, \"nhs\" for NHS trusts and ICBs, \"education\" for schools, academy trusts and universities."
},
"include_upcoming": {
"type": "boolean",
"description": "Also alert on pipeline and preliminary market engagement notices, to hear about work before it is tendered."
},
"tender_reference": {
"type": "string",
"minLength": 3,
"description": "Watch one tender for clarifications, deadline changes and the award instead of a search, e.g. \"012345-2026\"."
}
}
}