NextBid

Docs

Base URL https://api.nextbid.us (also under https://nextbid.us/v1). Version 0.4.0. JSON in and out. Times are ISO 8601 UTC.

Subscribe / sign up (people and AI agents)

Authorized AI agents may assist with or complete NextBid signup and account setup. Payment and acceptance of terms must be authorized by the account owner or organization. Machine-readable: the signup object in ai.json.

  1. Request a signup link. POST https://data.nextbid.us/start/request, Content-Type: application/json, body {"name": "...", "email": "...", "business": "...", "plan": "monthly", "source": "agent"}. plan (monthly | annual) and source are optional. Any valid request answers 200 {"ok":true} (existing accounts are not revealed); invalid input answers 400 with the field names. The "Start now" buttons on nextbid.us send the same request.
  2. Verify the email. Email verification is required before checkout. The owner opens the link from admin@nextbid.us: https://nextbid.us/start?t=<token>&plan=<plan>. It works for 24 hours; a new request replaces it.
  3. Choose a plan. Monthly $49.99 a month or Annual $499 a year; same access, 6,000 calls each month after the trial.
  4. Checkout. Stripe Checkout; a payment method is required. Nothing is charged today; cancel before the 14-day trial ends and nothing is charged.
  5. Create the password. Checkout returns to https://nextbid.us/start/complete?session_id=...: the company account is ready. Create the password; it signs in to https://data.nextbid.us/dashboard.
  6. Create a key. https://data.nextbid.us/keys, then connect over REST (https://api.nextbid.us/v1/...) or MCP (https://api.nextbid.us/mcp), header X-API-Key.
ItemValue
Trial14 days, up to 100 calls and 250 unique opportunities, whichever comes first; card required; Activate now in Plans & billing (https://data.nextbid.us/billing) ends it early and starts the paid plan
sourcehuman_web (website default), ai_assisted, agent, api; anything else is recorded as unknown. Analytics only: no source is restricted
Page markerseach signup page marks its step with data-nextbid-step: signup, verify-email-sent, plan-selection (options carry data-plan), checkout, create-account, activate-now

Authentication and metering

Send your key as X-API-Key: <key> or Authorization: Bearer <key>. /v1/health, /v1/pricing and /v1/public/corpus need no key. Every other call costs one unit. Each response carries x-usage-today, x-quota-remaining, x-price-cents and x-plan. No key: 401. Quota exhausted: 402 with the upgrade terms in the body.

What consumes a call. One unit each: a search, an opportunity read, a document list, a file list, a file read. Free but recorded: stats, tradelines, set-asides, usage, account, activity, pursuits and profile, and the MCP handshake. Every response carries x-usage-used, x-quota-remaining, x-units, x-usage-period, x-usage-resets-at and x-plan. When the allowance is used the API answers 402 quota_exhausted and free calls keep working. All keys on one account share its allowance.

Endpoints

CallReturns
GET /v1/statsthe corpus numbers with their definitions: total_solicitations (distinct), open (the source lists it open with the deadline ahead or unstated, or the deadline is ahead with no status; listed_open_past_deadline and status_unknown are separate and never counted as open), due_30d (known deadline only; missing deadlines sit in open_no_deadline), open_set_asides (distinct open solicitations designated under any supported program, each counted once), open_set_aside_mentions, set_asides_by_program, unmapped_set_aside_values, open by source, documents, contacts, amendments, as_of, replica_as_of. The public /v1/public/corpus carries the same numbers and definitions
GET /v1/tradelinesthe trade catalog: id, name, description, specialties[], aliases[], open count
GET /v1/tradelines/{id}one trade, by id or name
GET /v1/opportunitiessearch → total, page, results[], facets
GET /v1/opportunities/{nb_id}full record: description, AI summary, contacts, amendments, filed documents
GET /v1/opportunities/{nb_id}/documentsfiled documents and the engine's attachment index (names and metadata)
GET /v1/opportunities/{nb_id}/filesstored text artifacts: path, bytes, mtime, kind
GET /v1/opportunities/{nb_id}/files/{path}the artifact as text/markdown, application/json or text/plain (5 MB cap)
GET /v1/usageyour account's numbers: plan, allowance used and remaining, reset date, requests and errors this period, keys with last use, what counts as a call (free)
GET /v1/accountthe My Account payload: the numbers above plus your business profile and your recorded pursuits (free)
GET /v1/account/activitywhat NextBid returned to your keys, newest first: operation, parameters, result count, opportunity, units, status, latency, client; filters limit, key, since, operation (free)
GET /v1/account/pursuitsopportunities you or your agent marked watching, pursuing, submitted, won, lost or dropped (free)
POST /v1/opportunities/{nb_id}/pursuit{"status","note"}; records a pursuit only because you said so; reading a bid never counts (free)
GET /v1/account/profile, PUTwhat work you are looking for: company, website, tradelines, specialties, service areas, target markets, certifications, products, notes (free)
Trial keycreate a NextBid account, then a key from your account (no anonymous keys); start at Pricing

Search parameters

ParameterMeaning
tradelinescomma list of trade ids or aliases ("badge readers", "structured cabling", "cctv" all resolve to lowvoltage); omit for all trades (rows with no trade tags stay out). Unknown values are reported in query.tradelines_unresolved; if none resolve, 400 unknown_tradeline
qkeywords, full-text over title and description
states, agencies, sources, set_asidesfilters; use agencies for regions, local portals rarely fill the state column
opendefault true: only opportunities still open
due_within_days, deadline_from, deadline_todeadline window
sortdeadline (default) or relevance (with q)
page, page_sizepagination, 5 to 100 per page

Record fields

nb_id, source, title, agency, agency_department, requesting_department, solicitation_number, notice_type, procurement_kind, set_aside, response_deadline, posted_date, lifecycle_status, tradelines[], naics[], unspsc[], psc, states[], cities[], counties[], place_of_performance, document_count, document_set_status, attachment_count, bonding_required, wage_determination, requires_clearance, source_url, summary, last_updated, rank_score. The full record adds description, ai_summary, contract_type, opp_kind, is_goods_only, document0_version, contacts[], amendments[], documents[].

File kinds

document0 the canonical notice (markdown and JSON) · normalized attachment text · case the case file · requirements · scope_graph · evidence · classifications · graph · packet · other.

MCP

Remote endpoint https://api.nextbid.us/mcp (Streamable HTTP). Send the same X-API-Key header. Tools: search_opportunities, get_opportunity, list_documents, list_files, read_file, corpus_stats, list_tradelines (the catalog with specialties and aliases), list_set_asides, my_usage, my_account, mark_pursuit. A tool call costs what its REST call costs (searches and reads one unit; catalogs, stats, account and pursuit tools free) and returns the same JSON as the REST call plus a _meter block.

{ "mcpServers": { "nextbid": { "url": "https://api.nextbid.us/mcp", "headers": { "X-API-Key": "YOUR_KEY" } } } }

Examples

curl -H "X-API-Key: $KEY" "https://api.nextbid.us/v1/opportunities?tradelines=roofing&due_within_days=14&page_size=10"
curl -H "X-API-Key: $KEY" "https://api.nextbid.us/v1/opportunities/NB00098908"
curl -H "X-API-Key: $KEY" "https://api.nextbid.us/v1/opportunities/NB00098908/files"
curl -H "X-API-Key: $KEY" "https://api.nextbid.us/v1/opportunities/NB00010002/files/nextbid/sam/shadow/document0/docs/NB00010002/NB00010002.document0.md"

Limits and status codes

LimitValueResponse
Calls per periodyour plan allowance (trial: 14 days, 100 calls and up to 250 unique opportunities delivered, whichever comes first; paid plans: a calendar month)402 with upgrade terms
Calls per minute per key600429 + Retry-After
Requests in flight per key4429 too_many_concurrent_requests
Unauthenticated / public calls per minute per IP30 / 60429
Trial keys per address3 a day429
Query length / list values / URL200 chars / 20 values / 2,048 chars400 / 414
Revoked key403 key_revoked

Honour Retry-After on 429. Repeated abuse revokes the key.

Terms in one paragraph

Access is licensed for your own use. The issuing agency's official notice always controls; verify with the agency before you bid. Derived fields are labelled. Buyer contacts are public records served with their solicitation and may not be redistributed as a list. Keys are personal; sharing keys or scraping the API ends the licence. Questions and licences: admin@nextbid.us. Full terms of use and privacy notice.