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_priceis 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_formattedandorganization(*)
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, plusawardee(uei,cage_code,legal_business_name) - Detail default: the list fields plus
awardee(*)andorganization(*)
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
shapefields return HTTP 400 with structured validation errors.