Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.law4devs.eu/llms.txt

Use this file to discover all available pages before exploring further.

Overview

Requirements are machine-readable compliance obligations extracted from framework articles. Each requirement is tied to a specific article (and optionally a paragraph), carries a type classification, and lists the stakeholder roles it applies to.

Methods

list()

Returns a page of requirements. Without filters, this returns requirements across all frameworks.
# All requirements (all frameworks)
page = client.requirements.list()
print(f"Total requirements: {page.meta.total}")

# Filter to a single framework
page = client.requirements.list(framework_slug="gdpr")
for req in page.data:
    print(f"[{req.requirement_type}] Art. {req.article_number}: {req.requirement_text[:60]}...")
Parameters
ParameterTypeDefaultDescription
framework_slugstrNoneFilter by framework
pageint1Page number
per_pageint20Items per page (1–100)
Returns Page[Requirement]

iter()

Iterate over all requirements, optionally filtered by framework.
for req in client.requirements.iter(framework_slug="cra"):
    print(req.requirement_text)
Parameters — same kwargs as list() (except page). Returns Iterator[Requirement]

Model

Requirement

FieldTypeDescription
idintInternal numeric ID
framework_slugstrParent framework slug
article_numberintSource article number
paragraph_refstr | NoneParagraph label, e.g. "1", "2a"
paragraph_contentstr | NoneFull text of the source paragraph
requirement_textstrExtracted obligation text
requirement_typestrClassification: "obligation", "prohibition", "permission", "definition", etc.
compliance_deadlinestr | NoneISO 8601 date if a deadline is specified
linked_article_numberslist[int]Related articles within the same framework
stakeholder_roleslist[str]Roles this applies to, e.g. ["controller", "processor"]
tagslist[str]Tag slugs
created_atstrISO 8601 creation timestamp

Examples

Build a compliance checklist

from law4devs import Law4DevsClient

client = Law4DevsClient()

print("GDPR Compliance Checklist")
print("=" * 60)

obligations = [
    req for req in client.requirements.iter(framework_slug="gdpr")
    if req.requirement_type == "obligation"
]

for i, req in enumerate(obligations, 1):
    roles = ", ".join(req.stakeholder_roles) or "all parties"
    print(f"\n[{i}] Art. {req.article_number}{roles}")
    print(f"    {req.requirement_text}")
    if req.compliance_deadline:
        print(f"    Deadline: {req.compliance_deadline}")

Filter requirements for a specific role

controller_reqs = [
    req for req in client.requirements.iter(framework_slug="gdpr")
    if "controller" in req.stakeholder_roles
]

print(f"GDPR has {len(controller_reqs)} requirements for data controllers")

Find requirements with deadlines

with_deadlines = [
    req for req in client.requirements.iter()
    if req.compliance_deadline is not None
]

for req in sorted(with_deadlines, key=lambda r: r.compliance_deadline):
    print(f"{req.compliance_deadline}  [{req.framework_slug}] Art. {req.article_number}")

Group requirements by type

from collections import defaultdict

by_type = defaultdict(list)

for req in client.requirements.iter(framework_slug="nis2"):
    by_type[req.requirement_type].append(req)

for req_type, reqs in sorted(by_type.items()):
    print(f"{req_type}: {len(reqs)} requirements")

Export requirements to a CSV

import csv

with open("gdpr_requirements.csv", "w", newline="") as f:
    writer = csv.DictWriter(f, fieldnames=[
        "article_number", "paragraph_ref", "requirement_type",
        "stakeholder_roles", "requirement_text",
    ])
    writer.writeheader()

    for req in client.requirements.iter(framework_slug="gdpr"):
        writer.writerow({
            "article_number": req.article_number,
            "paragraph_ref": req.paragraph_ref or "",
            "requirement_type": req.requirement_type,
            "stakeholder_roles": "; ".join(req.stakeholder_roles),
            "requirement_text": req.requirement_text,
        })

print("Exported to gdpr_requirements.csv")
The requirement_type field makes it easy to separate hard obligations from definitions and permissions. Filter on "obligation" or "prohibition" when building audit checklists.
linked_article_numbers contains article numbers within the same framework, not cross-framework references.