Skip to content

Delta sync

Get all opportunities that were added or updated since a given timestamp. Use this to keep your local database in sync without re-downloading the entire dataset.

How It Works

  • Pass a timestamp, get changes. Returns every record that was added, updated, or backfilled since the timestamp you provide. This includes newly posted notices, updated deadlines, and historical records that were filled in during data reconciliation.
  • Same 59 fields as the search endpoint. Each record is a complete opportunity, not a diff.
  • Data updates daily around 2:00 AM UTC. A typical day has 1,000 to 2,000 changed records. Calling this once a day keeps you fully in sync.
  • Save the server_time from the response and use it as since on your next sync. This guarantees no gaps.

Parameters

  • since (required) - ISO 8601 timestamp (e.g. 2026-04-05T06:00:00Z). Clamped to the last 60 days: an older value still returns 200, and the sync block reports since (the effective value used), since_requested, and clamp_reason. Delta is a sync tool, not a backfill; for older data use search with date filters.
  • limit - Results per page (Free: max 100, Developer: max 1000, default 1000). Over your plan cap returns 402 (not a silent cap).
  • offset - Pagination offset

Only since, limit, and offset are accepted. Any other parameter (e.g. naics_multiple) returns 400; delta does not filter by content. Errors: 400 (unknown param, or unparseable since), 401 (no/invalid key), 402 (limit over plan cap), 422 (since missing), 429 (rate limit).

Response

{
  "data": [
    {
      "notice_id": "185eefbdab5a4a39aa7b53cb349bf1f0",
      "title": "Removal of Oil/Water Mixture and Contaminated Sand/Soil/Sludge from Oil Water Separators, Osan AB",
      "notice_type": "Solicitation",
      "agency": "DEPT OF DEFENSE.DEPT OF THE ARMY.AMC.ACC.ACC-OO.411TH CSB.0906 AQ CO     CONTRACTING BAT",
      "posted_date": "2026-05-31",
      "response_deadline": "2026-06-08T04:00:00+00:00",
      "_additional": "all 59 fields, same as search endpoint"
    }
  ],
  "pagination": {
    "limit": 100,
    "offset": 0,
    "total": 1984,
    "has_next": true
  },
  "sync": {
    "since": "2026-05-30T22:00:00Z",
    "records_changed": 1984,
    "server_time": "2026-06-02T09:04:49.836940+00:00"
  }
}

The sync.server_time field is the next-cursor. Save it from this response and pass it as since on your next pull. The field is not currently named next_since but it functions as one; treat it as the watermark of "everything up to here has been delivered." If you re-pass your original since instead, you will re-pull the same records you already saw.

What a real delta pull contains. A live pull on 2026-06-02 against since=2026-05-30T22:00:00Z returned 1,984 changed records. Across the first 1,000 sampled, the notice-type mix is Combined Synopsis/Solicitation (32%), Award Notice (25%), Solicitation (21%), Sources Sought (8%), Presolicitation (7%), Special Notice (6%), plus a small tail of Justification notices (1%). The endpoint reports every state change, not just new postings, so a BD pipeline sees the same notice cycle through pre-award stages and the award decision in the same delta stream.

Sync Workflow

# 1. Initial load: pull everything with the search endpoint
#    (paginate with limit=1000 and offset)

# 2. Save the server_time from your last response

# 3. Next day: call delta with that timestamp
curl -H "Authorization: Bearer YOUR_API_KEY" \
  "https://govconapi.com/api/v1/opportunities/delta?since=2026-04-05T06:00:00Z"

# 4. If has_next is true, paginate with offset
curl -H "Authorization: Bearer YOUR_API_KEY" \
  "https://govconapi.com/api/v1/opportunities/delta?since=2026-04-05T06:00:00Z&offset=1000"

# 5. Save the new server_time, repeat tomorrow

Tip: On a typical day, the delta returns 1,000 to 2,000 records. That's 1 to 2 API calls at limit=1000, compared to 200+ calls to re-download the full database. If you're currently syncing by paginating through all records, switching to delta will reduce your API usage by ~99%.

A REST API and MCP server for U.S. federal procurement data.

Get a free key, emailed instantly, or follow the quickstart.

Found something wrong, missing or confusing on this page?

Press Ctrl + Enter to send a note. Highlight text first and it travels with your note.