Catalog / buy.nsw.gov.au

buy.nsw.gov.au API

Search live NSW Government procurement opportunities by keyword, category, opportunity type, region, sort order, and page. Retrieve public opportunity details, including descriptions, overview fields, dates, buyer, categories, related content, and currently published attachments. List live category, opportunity-type, and area search-filter labels and values.

  • Business
  • nsw
  • procurement
  • government
  • opportunities
3 endpointsDocs updated

Endpoint health

Loading verification…

Connect your agent

Connect through MCP so your agent can find this API, read its docs, and call its endpoints.

Setup guide

Add the server from your terminal.

Claude Code · terminal
claude mcp add --transport http agent-data https://agent-data.motie.dev/mcp

In Claude Code, run /mcp, select agent-data, then Authenticate. Sign in to your agent-data account in the browser.

Then ask your agent to use the buy.nsw.gov.au API for your task.

Call it over HTTP

Get an API key

Sign up free, generate an API key, and set it as AGENT_DATA_API_KEY in your environment. Your first 100 calls each month are free.

Search the live Buy NSW result fragment. Multi-select filters accept repeated query parameters.

Optional parameters 6

Keyword search; an empty string returns unfiltered opportunities.

One or more Buy NSW category values.

One or more opportunity types.

One or more NSW regional area values.

Sort option exposed by the source.

One-based source result page.

View call pricing
cURL · Opportunities
curl --request GET --get 'https://api.agent-data.dev/buy-nsw-gov-au/v1/opportunities' \
  --header "Authorization: Bearer $AGENT_DATA_API_KEY"

Endpoints

Inputs and response fields for every endpoint in this API.

GETOpportunities/v1/opportunities

Search the live Buy NSW result fragment. Multi-select filters accept repeated query parameters.

Input

queryOptionalQuery · string, default:

Keyword search; an empty string returns unfiltered opportunities.

Example: Actuarial

categoriesOptionalQuery · array | null

One or more Buy NSW category values.

Example: finance-tax-and-insurance

typesOptionalQuery · array | null

One or more opportunity types.

Example: Tenders

areaOptionalQuery · array | null

One or more NSW regional area values.

Example: sydney-metro

sortOptionalQuery · "Relevance" | "LastUpdated" | "AtoZ" | "ZtoA" | "Ascending" | "Descending" | null

Sort option exposed by the source.

Example: AtoZ

pageOptionalQuery · integer, min: 1, default: 1

One-based source result page.

Example: 1

Response

areastring[]
pageinteger
sortstring | null
itemsobject[]
items[].buyerstring | null
items[].titlestring
items[].summarystring | null
items[].source_idstring
items[].categoriesstring[]
items[].source_urlstring
items[].record_type"opportunity" | "scheme"
items[].closing_datestring | null
items[].opportunity_idstring | null
items[].reference_codesstring[]
items[].opportunity_typestring | null
querystring
typesstring[]
next_pageinteger | null
page_sizeinteger
transportstring
categoriesstring[]
request_idstring
source_urlstring
total_pagesinteger
previous_pageinteger | null
total_resultsinteger
upstream_attemptsobject[]
upstream_attempts[].url?string | null
upstream_attempts[].attemptinteger
upstream_attempts[].outcomestring
upstream_attempts[].refusal?string | null
upstream_attempts[].transportstring
upstream_attempts[].error_type?string | null
upstream_attempts[].status_code?integer | null
upstream_attempts[].tls_profile?string | null
upstream_attempts[].response_body?string | null
upstream_attempts[].response_bytes?integer | null
upstream_attempts[].response_sha256?string | null
upstream_attempts[].response_header_names?string[]

Fields marked ? are optional.

GETOpportunity filters/v1/opportunity-filters

Fetch live search-form categories, opportunity types, and areas. Use each value with the corresponding categories, types, or area parameter of GET /v1/opportunities. Search-form categories are a flat group with no selectable subcategories.

Input

No input parameters.

Response

areaobject[]
area[].labelstring
area[].valuestring
typesobject[]
types[].labelstring
types[].valuestring
transportstring
categoriesobject[]
categories[].labelstring
categories[].valuestring
request_idstring
source_urlstring
upstream_attemptsobject[]
upstream_attempts[].url?string | null
upstream_attempts[].attemptinteger
upstream_attempts[].outcomestring
upstream_attempts[].refusal?string | null
upstream_attempts[].transportstring
upstream_attempts[].error_type?string | null
upstream_attempts[].status_code?integer | null
upstream_attempts[].tls_profile?string | null
upstream_attempts[].response_body?string | null
upstream_attempts[].response_bytes?integer | null
upstream_attempts[].response_sha256?string | null
upstream_attempts[].response_header_names?string[]

Fields marked ? are optional.

GETOpportunities by opportunity id/v1/opportunities/{opportunity_id}

Retrieve a public procurement opportunity detail page using its opaque ID from a Buy NSW opportunity link. Search may also return procurement-scheme records, which include their source URL and are not accepted by this detail route.

Input

opportunity_idRequiredPath · string

Example: DB89347C-DC7C-4D4D-B86301D6DA91423E

Response

buyerstring | null
titlestring
overviewobject
sectionsobject[]
sections[].textstring
sections[].headingstring
sections[].headingsstring[]
source_idstring
transportstring
categoriesstring[]
request_idstring
source_urlstring
attachmentsobject[]
attachments[].urlstring
attachments[].namestring
descriptionstring | null
record_typestring
closing_datestring | null
publish_datestring | null
opportunity_idstring
upstream_attemptsobject[]
upstream_attempts[].url?string | null
upstream_attempts[].attemptinteger
upstream_attempts[].outcomestring
upstream_attempts[].refusal?string | null
upstream_attempts[].transportstring
upstream_attempts[].error_type?string | null
upstream_attempts[].status_code?integer | null
upstream_attempts[].tls_profile?string | null
upstream_attempts[].response_body?string | null
upstream_attempts[].response_bytes?integer | null
upstream_attempts[].response_sha256?string | null
upstream_attempts[].response_header_names?string[]
estimated_decision_datestring | null

Fields marked ? are optional.

Don’t see the endpoint you need?

Ask agent-data to add an endpoint or return more fields. Extensions are free and keep existing endpoints working.