Skip to content

Product and Service Code (PSC)

Product and Service Code (PSC) reference data is exposed at /api/psc/. For field definitions, see the PSC Data Dictionary.

External references

Endpoints

  • GET /api/psc/ (list)
  • GET /api/psc/{code}/ (detail)

Metrics: Time-series obligation/award metrics for a PSC code: GET /api/psc/{code}/metrics/<months>/<period_grouping>/. See Metrics for parameters and behavior.

Filtering

Param What it does
has_awards If truthy, restrict to PSCs that appear in award data.

Response options:

Param What it does
complete If truthy, returns a “complete” representation (serializer context-dependent).

Ordering

/api/psc/ does not support ordering=....

Pagination

PSC uses page-number pagination (static reference pagination defaults to larger pages):

  • page (default 1)
  • limit (default 1000, max 10000)

Note: Reference-data endpoints like /api/psc/ allow larger page sizes than transactional award endpoints because the underlying datasets are relatively small and static, and larger pages reduce client round-trips.

Response shaping

This endpoint supports response shaping via the shape query parameter.

  • Leaves: code, parent, category, level_1_category, level_1_category_code, level_2_category, level_2_category_code
  • Expansions:
  • current(name,active,start_date,end_date,description,includes,excludes) — active or latest description
  • historical(name,active,start_date,end_date,description,includes,excludes) — all descriptions

Default shape (no ?shape= param): code,current(*),parent,category,level_1_category,level_1_category_code,level_2_category,level_2_category_code

# Just code and current description name
/api/psc/?shape=code,current(name)

# Code with current and historical descriptions
/api/psc/AD12/?shape=code,current(name,active),historical(name,active)

SDK examples

The official SDKs don’t yet expose a first-class list_psc() / listPsc() method. You can still call the endpoint via the SDK’s internal HTTP helper.

import os

from tango import TangoClient

client = TangoClient(api_key=os.environ["TANGO_API_KEY"])
data = client._get("/api/psc/", params={"has_awards": "true", "limit": 25})
print("count:", data.get("count"))
import { TangoClient } from "@makegov/tango-node";

const client = new TangoClient({ apiKey: process.env.TANGO_API_KEY });
const http = (client as any).http;

const data = await http.get("/api/psc/", { has_awards: "true", limit: 25 });
console.log("count:", data.count);