The Sag entity is the core of the Danish Parliament API, representing legislative cases, bills, proposals, and other parliamentary matters. With 96,538+ records, it contains the complete history of Danish parliamentary cases.
# Get latest 5 casescurl"https://oda.ft.dk/api/Sag?%24top=5&%24orderby=opdateringsdato%20desc"# Get specific case by IDcurl"https://oda.ft.dk/api/Sag(102903)"# Count total casescurl"https://oda.ft.dk/api/Sag?%24inlinecount=allpages&%24top=1"
# Complex boolean logiccurl"https://oda.ft.dk/api/Sag?%24filter=%28substringof('klima',titel)%20or%20substringof('miljø',titel)%29%20and%20year(opdateringsdato)%20gt%202020&%24top=10"# Cases from specific periodcurl"https://oda.ft.dk/api/Sag?%24filter=periodeid%20eq%2032&%24top=10"# Recent decisionscurl"https://oda.ft.dk/api/Sag?%24filter=afgørelsesdato%20gt%20datetime'2025-09-01T00:00:00'&%24top=10"
# Only essential fieldscurl"https://oda.ft.dk/api/Sag?%24select=id,titel,opdateringsdato,statusid&%24top=10"# Title and classificationcurl"https://oda.ft.dk/api/Sag?%24select=titel,offentlighedskode,typeid,statusid&%24top=10"
# Case with categorycurl"https://oda.ft.dk/api/Sag?%24expand=Sagskategori&%24top=3"# Case with type and statuscurl"https://oda.ft.dk/api/Sag?%24expand=Sagstype,Sagsstatus&%24top=3"# Case with period informationcurl"https://oda.ft.dk/api/Sag?%24expand=Periode&%24top=3"
# Cases with involved actorscurl"https://oda.ft.dk/api/Sag?%24expand=SagAktør/Aktør&%24top=3"# Cases with actor rolescurl"https://oda.ft.dk/api/Sag?%24expand=SagAktør/Aktør,SagAktør/SagAktørRolle&%24top=3"
# Cases with documentscurl"https://oda.ft.dk/api/Sag?%24expand=SagDokument/Dokument&%24top=3"# Cases with case stepscurl"https://oda.ft.dk/api/Sag?%24expand=Sagstrin&%24top=3"
# Today's updatescurl"https://oda.ft.dk/api/Sag?%24filter=opdateringsdato%20gt%20datetime'2025-09-09T00:00:00'&%24orderby=opdateringsdato%20desc"# This week's new casescurl"https://oda.ft.dk/api/Sag?%24filter=opdateringsdato%20gt%20datetime'2025-09-02T00:00:00'&%24orderby=opdateringsdato%20desc"
# Track specific legislation through processcurl"https://oda.ft.dk/api/Sag?%24expand=Sagstrin,Sagsstatus&%24filter=substringof('digital',titel)&%24top=5"# Find related/sub casescurl"https://oda.ft.dk/api/Sag?%24filter=fremsatundersagid%20eq%20102900"
# Good: Only request needed fieldscurl"https://oda.ft.dk/api/Sag?%24select=id,titel,opdateringsdato&%24top=100"# Avoid: Requesting all fields unnecessarilycurl"https://oda.ft.dk/api/Sag?%24top=100"# Downloads ~25+ fields per record
# Paginate through large result setscurl"https://oda.ft.dk/api/Sag?%24skip=0&%24top=100"curl"https://oda.ft.dk/api/Sag?%24skip=100&%24top=100"curl"https://oda.ft.dk/api/Sag?%24skip=200&%24top=100"
defget_recent_legislation():"""Get cases updated in last 24 hours"""yesterday=(datetime.now()-timedelta(days=1)).isoformat()filter_query=f"opdateringsdato gt datetime'{yesterday}'"returnget_cases(filter_query=filter_query,select="id,titel,opdateringsdato,statusid")
deftrack_climate_policy():"""Track all climate-related legislation"""filter_query="(substringof('klima',titel) or substringof('miljø',titel) or substringof('grøn',titel))"returnget_cases(filter_query=filter_query,expand="Sagsstatus,Sagstype",top=50)
defanalyze_budget_cases():"""Get all state budget cases with their status"""filter_query="statsbudgetsag eq true"returnget_cases(filter_query=filter_query,expand="Sagsstatus",orderby="opdateringsdato desc")
ø Critical Warning: Invalid filter field names return ALL data instead of errors!
# L Dangerous: Typo returns all 96,538+ recordscurl"https://oda.ft.dk/api/Sag?%24filter=tittel%20eq%20'test'"# 'tittel' should be 'titel'# ✅ Safe: Always test filters with $top=1 firstcurl"https://oda.ft.dk/api/Sag?%24filter=titel%20eq%20'test'&%24top=1"