Skip to content

DIBBS

The DLA Internet Bid Board System (DIBBS) endpoints expose small-purchase requests for quote, larger solicitations (RFP/IFB), and awards from the Defense Logistics Agency. For field definitions, see the DIBBS Data Dictionary.

Authentication: DIBBS endpoints require authentication (API key or OAuth2). Unauthenticated requests receive HTTP 401. Available on every plan, including Free — no tier gating on any field.

Endpoints

  • GET /api/dibbs/rfqs/ — requests for quote (small purchases)
  • GET /api/dibbs/rfps/ — solicitations (RFP/IFB)
  • GET /api/dibbs/awards/ — awards (line items)

Each resource supports list + filtering + search + ordering, plus a detail lookup by uuid (GET /api/dibbs/{resource}/{uuid}/). The path segment must be a valid RFC 4122 UUID.

DIBBS is an NSN and part-number world, so nsn, part_number, solicitation, and search filter every resource. All three carry an organization(*) expansion (always the Defense Logistics Agency, resolved to the canonical 7-key office payload).

Read this before you total awards. A DIBBS award record is a line item, not a whole award. A delivery order covering many items appears as one record per item, and total_contract_price is the order's total repeated on every one of them. Summing it across records badly overstates spend. To total spend, count each order once. See Awards below.

Shared filters

These apply to all three resources. Identifier filters accept | for OR; date filters require YYYY-MM-DD (invalid dates or inverted ranges return 400, see Date filters).

Param What it does
nsn National Stock Number (exact, case-insensitive). Multi-value: use | for OR.
part_number Manufacturer part number (exact, case-insensitive). Multi-value: use | for OR.
solicitation DLA solicitation number, e.g. SPE1C126Q0337 (exact, case-insensitive). Multi-value: use | for OR.
organization Filter by the federal-hierarchy key of the buying organization (always DLA). Multi-value: use | for OR.
search Full-text search over nomenclature, NSN, part number, and solicitation number.

The organization(*) expansion resolves to the canonical 7-key office payload (organization_id, office_code, office_name, agency_code, agency_name, department_code, department_name) — the same object used on awards, opportunities, vehicles, forecasts, grants, and IT Dashboard responses. It is omitted from the default list shape (constant DLA) and included in the default detail shape.

Pagination

All three resources use standard page-number pagination:

  • page (default 1)
  • limit (default 25, max 100)

Default ordering is newest-modified first; uuid is appended to any client ordering to guarantee a stable total order across pages. rank is a valid ordering field on all three but is only meaningful with ?search=.


RFQs

GET /api/dibbs/rfqs/ — small-purchase requests for quote.

Open RFQs

?open=true returns the RFQs still accepting quotes today, derived from return_by_date (a passed or missing date is not open). ?open=false returns the complement. Every result carries a computed is_open boolean regardless of the filter. Because open/closed is derived at query time, an RFQ simply reaching its return_by_date is not a change to the record.

Filtering

Shared filters (above), plus:

Param What it does
open Boolean. true returns RFQs still accepting quotes today.
purchase_request Purchase request number (exact, case-insensitive). Multi-value: use | for OR.
set_aside Set-aside flag (Y / N). Multi-value: use | for OR.
status_code 11-character composite DIBBS status code, e.g. DLK00L1N000 (exact, case-insensitive). Multi-value: use | for OR.
quantity_min, quantity_max Quantity range.
return_by_date_after, return_by_date_before Close-date range (YYYY-MM-DD).
issue_date_after, issue_date_before Issue-date range (YYYY-MM-DD).

Ordering

ordering= allowlist: rank, return_by_date, issue_date, quantity, modified.

Shaping

  • List default: uuid, solicitation, purchase_request, nsn, part_number, nomenclature, quantity, unit_of_issue, set_aside, status_code, return_by_date, issue_date, is_open, document_url
  • Detail default: the list fields plus solicitation_formatted and organization(*)

RFPs

GET /api/dibbs/rfps/ — solicitations (RFP/IFB).

Open solicitations

?open=true returns the solicitations still accepting offers today, derived from closes_date (a passed or missing date is not open). ?open=false returns the complement. Every result carries a computed is_open boolean.

Filtering

Shared filters (above), plus:

Param What it does
open Boolean. true returns solicitations still accepting offers today.
buyer_code DLA buyer code (exact, case-insensitive). Multi-value: use | for OR.
issued_date_after, issued_date_before Issue-date range (YYYY-MM-DD).
closes_date_after, closes_date_before Close-date range (YYYY-MM-DD).

Solicitations do not carry quantity, set_aside, status_code, or purchase_request (those are RFQ-only).

Ordering

ordering= allowlist: rank, closes_date, issued_date, modified.

Shaping

  • List default: uuid, solicitation, nsn, part_number, nomenclature, buyer_code, issued_date, closes_date, is_open, document_url, tech_docs_url
  • Detail default: the list fields plus organization(*)

Awards

GET /api/dibbs/awards/ — DIBBS awards, one record per line item.

An award has no open/closed lifecycle, so there is no open filter or is_open field. The resolved awardee entity is included when the awardee's CAGE code matches a registered Tango entity; awardee_cage is always present either way.

The line-item total-price warning

total_contract_price is the order's total, replicated verbatim on every line item of that order. Never SUM() it across records — one real order spanning 483 line items reads $9,000,000.00 on all of them, so a naive total reports $4.35 billion for that one order. To total spend, count each order once (dedupe by award_number + delivery_order_number). Filtering and ordering by the per-order price is fine; summing is not. total_contract_price is null on the ~3.5% of rows whose price cell is non-numeric — the raw cell is preserved verbatim in total_contract_price_text (e.g. See Award Doc).

Filtering

Shared nsn, part_number, solicitation, organization, search (above), plus:

Param What it does
award_number Award (order) number (exact, case-insensitive). Multi-value: use | for OR.
delivery_order_number Delivery-order number (null on basic awards). Multi-value: use | for OR.
purchase_request Purchase request number. Multi-value: use | for OR.
awardee_cage Awardee CAGE code (populated on every award row). Multi-value: use | for OR.
entity UEI of the resolved Tango entity (set only when the CAGE matched a registered entity). Multi-value: use | for OR.
award_date_after, award_date_before Award-date range (YYYY-MM-DD).
posted_date_after, posted_date_before Posted-date range (YYYY-MM-DD).
total_contract_price_min, total_contract_price_max Order price range (per-order, not summable across rows).

Ordering

ordering= allowlist: rank, award_date, posted_date, total_contract_price, modified.

Shaping

  • List default: uuid, award_number, delivery_order_number, delivery_order_counter, nsn, part_number, purchase_request, nomenclature, awardee_cage, total_contract_price, total_contract_price_text, award_date, posted_date, last_mod_posting_date, solicitation, plus awardee(uei,cage_code,legal_business_name)
  • Detail default: the list fields plus awardee(*) and organization(*)

The awardee(*) expansion resolves to uei, cage_code, legal_business_name from the linked entity (null when the CAGE is unresolved).


Examples

# Open RFQs for a stock number
GET /api/dibbs/rfqs/?open=true&nsn=5310-00-123-4567&shape=uuid,nsn,nomenclature,quantity,return_by_date,is_open

# Solicitations closing in a window
GET /api/dibbs/rfps/?closes_date_after=2026-08-01&closes_date_before=2026-08-31&shape=uuid,solicitation,nsn,closes_date,is_open

# Awards to one vendor by UEI (remember: line items, not orders)
GET /api/dibbs/awards/?entity=ABC123DEF456&shape=uuid,award_number,delivery_order_number,total_contract_price,award_date,awardee(*)

# Detail by uuid
GET /api/dibbs/awards/550e8400-e29b-41d4-a716-446655440000/?shape=uuid,award_number,total_contract_price,awardee(*),organization(*)

Notes:

  • * is only valid inside expansions. Use explicit field lists at the root.
  • Invalid shape fields return HTTP 400 with structured validation errors.