fetch_api_docs
ChatGPTFetch detailed Tango API documentation for a specific section. Use this when you need information beyond what the tool descriptions provide — for example, the full list of filtering parameters for a resource type, valid enum values, ordering options, response shaping syntax, or advanced query patterns. Args: section: Documentation section to retrieve. Valid values: "budget_accounts", "contract-appeals", "contracts", "dibbs", "ebuy", "entities", "exclusions", "federal-budget", "federal-register", "forecasts", "gsa-elibrary", "idvs", "itdashboard", "lcats", "metrics", "opportunities", "otas", "otidvs", "protests", "resolve", "response-shaping", "sbir", "set-asides", "sled", "subawards", "vehicles" Returns: Dict with the section name and markdown content, or an error with the list of valid sections.
get_details
ChatGPTGet detailed information about a single item, with optional enrichment. Use this after search or resolve to drill into a specific entity, contract, IDV, vehicle, opportunity, OTA, OTIDV, organization, protest, SIN, or GSA eLibrary contract. When include_related is true, the tool makes multiple API calls and returns composite data: - entity: profile + socioeconomic status + 10 most recent contracts - contract: full detail + subawards + transactions (modifications) - idv: full detail + child awards + transactions + labor rates (CALC) - vehicle: full detail + awardees (100 per page) + orders. When awardees.next_awardee_page is set, call again with that awardee_page to read the rest, or narrow with awardee_search. - opportunity: full detail. Where SAM.gov posted an award notice it carries awarded, award_date, award_amount, awardee and awardee_uei; on a solicitation, award_count and awards list up to 10 recent linked awards, and on an award, solicitation_opportunity_id names the solicitation it answers. An award links to its solicitation only when the award notice references it. The default response lists every attachment by name and resource_id (the manifest). To read the actual document text — the SOW/PWS, Section L instructions, Section M evaluation factors, CDRLs, Q&A — request it (not included on every plan): attachment_ids="<resource_id>,<resource_id>" pulls full text for just those documents (the targeted, recommended path — pick the PWS/Section L/M off the manifest by name). A selected document always returns text: one larger than the per-call budget arrives in budget-sized chunks — follow attachment_text.partial[].next_offset with attachment_offset to read the rest. include_attachment_text=true pulls text for ALL file attachments, but a per-call character budget caps the total; documents that don't fit are listed as omitted with their resource_ids so you can fetch them via attachment_ids. Text lands in attachment_text.documents[] (name, resource_id, extracted_text); with attachment_ids the attachment list is cut to name + resource_id. fields narrows the rest of the record. When the account's plan does not include document text, attachment_text says so and the rest of the record still returns. - ota: full OTA detail + transactions - otidv: full OTIDV detail + child OTAs + transactions - organization: organization detail + child organizations - protest: full protest detail + dockets; with include_related: related opportunities and contracts for the same solicitation - contract_appeal: one CBCA/ASBCA Contract Disputes Act decision, keyed by uuid. include_related is a no-op — a decision carries no PIID or UEI to join on. The decision body is not in the default: name it with fields="...,decision_text" (Enterprise only; roughly 100K characters). text_status and text_char_count say on every plan whether a body exists before you ask for it. - sin: MAS SIN detail; with include_related: GSA eLibrary contracts on this SIN (showing Schedule holders). To see a vendor's MAS orders: find their IDV key via search(type="gsa_elibrary"), then use get_details(type="idv", include_related=true) for orders and CALC labor rates. - gsa_elibrary_contract: GSA eLibrary contract detail - itdashboard: Federal IT investment detail by UII. Rich nested context (cio_evaluation, contracts, projects, funding, performance_metrics, etc.) is available via the `fields parameter on Pro/Business+ plans — include_related is a no-op. - naics: NAICS code record + time-series obligation/award metrics over the trailing months window, bucketed by period`. - psc: PSC (Product Service Code) record + time-series metrics (same shape as naics). - budget_account: Federal budget account (appropriations) record; with include_related: quarterly SF-133 cash flow + per-recipient contract-flow detail. - dibbs_rfq / dibbs_rfp: one DLA RFQ or solicitation, keyed by uuid; with include_related: the other DIBBS families sharing that solicitation number (notably the award it produced). - dibbs_award: one DLA award LINE ITEM, keyed by uuid. Its total_contract_price …
resolve
ChatGPTFind entities, vehicles, NAICS/PSC codes, GSA MAS SINs, contracts, opportunities, IDVs, OTAs, OTIDVs, subawards, organizations, and GAO bid protests matching a search query. Use this tool first when you have a name or keyword and need to discover what's in the data. Returns identifiers (UEI, organization key, etc.) you can use with other tools, plus a preview of matching contracts, opportunities, and protests. For company questions, resolve first to get UEI + related data including bid protests filed by or against the company. To look up a federal agency or department, use type="organization". Organizations represent the full federal hierarchy (departments, agencies, bureaus, offices) under a single abstraction. Filter by level (0–3), type, or CGAC code via the search tool for more precise results. To look up a GSA MAS SIN (Special Item Number), use type="sin". Returns the SIN title, description, mapped NAICS/PSC codes, and category information. Useful for understanding what services fall under a GSA Schedule SIN code. After resolving a SIN, use search with type="gsa_elibrary" and sin= to find MAS holders — not type="contract" with the SIN's NAICS codes, which returns orders across all vehicles (SEWP, STARS III, etc.), not just MAS. To look up a federal IT investment, use type="itdashboard". Full-text search across itdashboard.gov investment records; returns UIIs (Unique Investment Identifiers) for use with get_details(type="itdashboard"). Args: query: Free text search — company name, organization name, vehicle name, NAICS code or keyword, PSC code, SIN code, etc. type: Optional filter — "entity", "vehicle", "naics", "psc", "sin", "contract", "opportunity", "idv", "ota", "otidv", "subaward", "organization", "protest", or "itdashboard". "idv" searches the award-level IDV records (the contract-family parents, keyed by PIID); "vehicle" searches Tango's curated vehicle catalog — the two are different data, mirroring search and get_details. When omitted, searches all types except itdashboard. limit: Max results per type (default 5). Returns: Matching results grouped by type with identifiers and context.
search
ChatGPTSearch contracts, IDVs, vehicles, GSA eLibrary Schedule holders, CALC labor rates, OTAs, OTIDVs, subawards, organizations, protests, contract appeals, grants, federal budget accounts, DIBBS awards, SAM exclusions (debarments), SAM entity registrations (vendors), and Federal Register documents. This is the primary data tool. Use it to find contracts by vendor, organization, NAICS code, date range, or keyword. Set include_summary=true for a statistical profile of at most 250 matching records — a hard-capped sample, never a market total. For appropriations / budget questions ("how much was enacted vs. apportioned vs. obligated vs. available?"), use type="budget_account" — this is the only type carrying appropriations-level data (the contract/IDV/subaward types are transactional obligations only). Its default shape includes the full request -> enacted -> apportioned -> obligated -> outlayed lifecycle; call fetch_api_docs("budget_accounts") for ratios/trends/counts (request those via fields=), or fetch_api_docs("federal-budget") for an appropriations primer. For bid protests: use type="protest" with protester_name, outcome, agency (via awarding_org), docket_number, solicitation_identifier, or date range filters. Protests cover three venues — GAO, the Court of Federal Claims (COFC) and SBA's Office of Hearings and Appeals (SBA OHA) — and source_system picks one ("gao", "cofc", "sba_oha"). For disputes UNDER an existing contract (claims, terminations, delay, what is owed): use type="contract_appeal". These are Contract Disputes Act decisions of the Civilian Board of Contract Appeals (CBCA) and the Armed Services Board of Contract Appeals (ASBCA) — a different proceeding from a bid protest, sharing no records with it. keyword searches the full decision text on every plan; reading that text (fields="...,decision_text" on get_details) needs an Enterprise plan. For vendor-population questions ("which 8(a) firms in Maryland do cybersecurity?"): use type="entity" — it filters SAM entity registrations by attributes: socioeconomic/business-type code (pipe-OR supported: socioeconomic="OY|A2"), state, NAICS/PSC, UEI, and CAGE. Socioeconomic values are SAM business-type codes, NOT set-aside codes: e.g. "OY" Black American Owned, "A6" SBA-certified 8(a), "A2" Woman Owned, "8W" SBA-certified WOSB, "XX" SBA-certified HUBZone, "QF" Service-Disabled Veteran Owned, "23" Minority Owned — full table via fetch_api_docs("entities"). For per-entity contract rollups server-side, request the past_performance expansion: search(type="entity", socioeconomic="A6", fields="uei,legal_business_name,past_performance(summary,top_agencies)") — top-5 agencies per entity. Entity search is for population/attribute queries only and deliberately has no name/keyword filter — the SAM directory is full of secondary registrations that make free-text matching a wrong-UEI hazard. To find a company by name, use resolve(query="<name>", type="entity"), which ranks by contract volume so secondary registrations sink. For "is this vendor debarred?": use type="exclusion" with uei, cage_code, or keyword. active=true restricts to exclusions in force today (derived at query time from the activate/termination dates, so a lapsed exclusion is not a change to the record). An entity with no exclusion rows is not excluded. For DLA parts spending: use type="dibbs_award" with nsn, part_number, awardee_cage, or award_number. WARNING — each row is one LINE ITEM, not a whole award, and total_contract_price is the ORDER total repeated on every line item of that order. Never sum it across rows; count each order once (dedupe on award_number + delivery_order_number). For this reason include_summary does not aggregate dibbs_award. Coverage is complete for awards DLA posted on or after 2026-06-09 and partial before that, so an older award can be absent — use type="contract" with piid for those. A delivery order's own number goes in delivery_order_number; award_number is its parent contract. The DIBBS pre-award side (RFQs, solicitations) lives on search_opportunities. Important: when investigating a…
search_opportunities
ChatGPTSearch pre-award procurement — everything you can still bid on. Nine families share this tool because they answer the same question ("what is open?") from different systems: - opportunity SAM.gov notices (default) - forecast planned procurements, pre-solicitation - dibbs_rfq DLA small-purchase requests for quote - dibbs_rfp DLA solicitations (RFP/IFB) - sbir_topic SBIR/STTR research topics - sbir_solicitation SBIR/STTR solicitation cycles (parent of topics) - sled_opportunity state / local / education solicitations - sled_forecast planned state procurements - ebuy GSA eBuy RFQs/RFPs/RFIs posted to GSA Schedule holders All but the two sled_ families are FEDERAL. The two sled_ families are STATE, LOCAL and EDUCATION buyers — a separate market with its own portals, so a federal search never returns them and vice versa. Post-award data lives in search instead — including DIBBS awards (search(type="dibbs_award")). Two date filters are normalized across every family, so the same argument works whatever you are searching: - response_deadline_after/before — when the window CLOSES. Maps to return_by_date (dibbs_rfq), closes_date (dibbs_rfp), close_date (sbir_topic, ebuy), end_date (sbir_solicitation). - first_notice_date_after/before — when it was POSTED/opened. Maps to issue_date (dibbs_rfq, ebuy), issued_date (dibbs_rfp), open_date (sbir_topic), start_date (sbir_solicitation), posted_date (sled_opportunity), estimated_advertisement_date (sled_forecast — a QUARTER START, not a posting date). DIBBS RFQs/RFPs are scoped to a part: filter by nsn or part_number, not NAICS/PSC (which DIBBS does not carry). SLED coverage is partial and grows one jurisdiction at a time, so a thin per-state result is at least as likely to be a portal Tango does not read as a quiet market. You do not have to go looking: any state-scoped SLED search that comes back thin carries a _coverage block with that state's real corpus totals, which is what tells the two apart. Never read a per-state count as market size without it. eBuy (not included on every plan) shows only the requests posted under the GSA Schedule contracts the caller's account is linked to — it is the account's own inbox, not a market-wide feed. An account with no linked contract sees an empty list, not an error, so a zero-result eBuy search checks access and says when the empty result means "cannot see" rather than "nothing posted". status is frozen at the last-seen state: GSA only lists active requests, so one that closes stops appearing rather than turning "Closed" — "Open" means open when last seen (see last_seen). To find requests still open, filter response_deadline_after=<today> rather than trusting status. Open one with get_details(type="ebuy", id=<rfq_id>) for its description, contacts and attachments. Args: keyword: Search text across titles and descriptions. org: Organization filter — accepts a code, name, abbreviation, or organization UUID (e.g. "VA", "CMS", "075", or a UUID from resolve(type="organization")). Matches the organization and all of its descendants, so a department returns records from its sub-agencies and offices. A value that matches no organization is an error, not an empty result — the response carries error and total_count: 0. Resolution is fuzzy, so a near-miss can match an organization you did not intend and silently scope the search to it; prefer a code or a UUID from resolve(type="organization") when the name is ambiguous. For SBIR this is instead the agency's raw text, matched partially — "DOD", "NSF", "HHS" (note NIH topics are filed under HHS). Not used by DIBBS, which is always DLA; use organization to narrow within DLA. naics_codes: List of NAICS codes; matches any of them (OR). psc_codes: List of PSC codes; matches any of them (OR). set_aside_types: List of set-aside type codes; matches any of them (e.g. ["SBA", "8AN"]). Call fetch_api_docs("set-asides") for valid codes. active: Filter active/open or inactive/closed records. For opportunities, omitting it searches open notices only, unless solicitation_number, notice_type, awa…
send_feedback
ChatGPTTell the Tango team how its tools worked for you — your own assessment, not the user's. Call this when a tool made the task harder than it should have been: a result was wrong or implausible, data you expected was missing, a parameter or error message misled you, you needed several retries to find the right call, or the tools could not do what the user asked. Also welcome when something worked notably well. One call per distinct issue, at the moment you notice it; do not wait until the end of the conversation. Do not include secrets or personal details about the user. Args: message: What happened and what you expected instead. Name the calls, parameters, and values involved. category: wrong_data, missing_data, confusing_tool, bug, feature_request, worked_well, or other. tool: The tool the feedback is about (e.g. "search_opportunities"), if any. goal: One sentence on what the user was trying to accomplish. follow_up: True only if the user said they want to hear back about this, or asked to be told when it's fixed. Never ask the user just to fill this in, and never set it on your own judgment. When true, the Tango team may email the account holder once the issue is resolved.