> ## 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.

# Articles

> List and retrieve articles from EU regulatory frameworks with the Law4Devs Java SDK.

## Overview

Articles are the numbered provisions within each regulation. Use `client.articles()` to list, fetch, and iterate articles for any framework.

***

## Methods

### `list(String frameworkSlug)`

Returns the first page of articles for a framework.

```java theme={null}
Page<ArticleSummary> page = client.articles().list("gdpr");

for (ArticleSummary a : page.data()) {
    System.out.println("Art. " + a.number() + " — " + a.title());
}
```

**Returns** `Page<ArticleSummary>`

***

### `list(String frameworkSlug, int page, int perPage)`

Fetch a specific page with custom page size.

```java theme={null}
Page<ArticleSummary> page = client.articles().list("cra", 1, 10);
```

**Parameters**

| Parameter       | Type     | Default  | Description                   |
| --------------- | -------- | -------- | ----------------------------- |
| `frameworkSlug` | `String` | required | Framework slug, e.g. `"gdpr"` |
| `page`          | `int`    | `1`      | Page number (1-indexed)       |
| `perPage`       | `int`    | `20`     | Items per page (max 100)      |

**Returns** `Page<ArticleSummary>`

***

### `get()`

Fetch full detail for a single article including all paragraphs.

```java theme={null}
Article article = client.articles().get("gdpr", "17");

System.out.println(article.title());    // Right to erasure
System.out.println(article.number());   // 17
for (var p : article.paragraphs()) {
    System.out.println(p.reference() + ": " + p.text());
}
```

**Parameters**

| Parameter       | Type     | Description                            |
| --------------- | -------- | -------------------------------------- |
| `frameworkSlug` | `String` | Framework slug                         |
| `articleNumber` | `String` | Article number, e.g. `"17"` or `"17a"` |

**Returns** `Article`

***

### `related()`

Fetch articles related to a given article (cross-references).

```java theme={null}
Page<ArticleSummary> related = client.articles().related("gdpr", "17");
for (ArticleSummary a : related.data()) {
    System.out.println("Related: Art. " + a.number() + " — " + a.title());
}
```

**Returns** `Page<ArticleSummary>`

***

### `iter()`

Lazily iterate all articles for a framework.

```java theme={null}
for (ArticleSummary a : client.articles().iter("gdpr")) {
    System.out.println(a.number() + " " + a.title());
}
```

**Returns** `Iterable<ArticleSummary>`

***

## Models

### `ArticleSummary`

Returned by `list()`, `related()`, and `iter()`.

| Field              | Type     | Description                 |
| ------------------ | -------- | --------------------------- |
| `id()`             | `int`    | Internal numeric ID         |
| `number()`         | `String` | Article number, e.g. `"17"` |
| `title()`          | `String` | Article title               |
| `frameworkSlug()`  | `String` | Parent framework slug       |
| `paragraphCount()` | `int`    | Number of paragraphs        |

### `Article`

Returned by `get()`. Includes all `ArticleSummary` fields plus:

| Field          | Type                     | Description                   |
| -------------- | ------------------------ | ----------------------------- |
| `paragraphs()` | `List<ArticleParagraph>` | All paragraphs of the article |
| `tags()`       | `List<String>`           | Associated compliance tags    |

### `ArticleParagraph`

| Field         | Type     | Description                               |
| ------------- | -------- | ----------------------------------------- |
| `reference()` | `String` | Paragraph reference, e.g. `"1"`, `"1(a)"` |
| `text()`      | `String` | Full paragraph text                       |

***

## Examples

### Print all NIS2 articles

```java theme={null}
for (ArticleSummary a : client.articles().iter("nis2")) {
    System.out.printf("Art. %-4s %s%n", a.number(), a.title());
}
```

### Find articles containing specific obligations

```java theme={null}
Article art = client.articles().get("gdpr", "33");
System.out.println(art.title()); // Notification of a personal data breach

for (var p : art.paragraphs()) {
    if (p.text().contains("72 hours")) {
        System.out.println("72-hour rule in: " + p.reference());
    }
}
```

### Collect all DORA articles into a list

```java theme={null}
var all = new java.util.ArrayList<ArticleSummary>();
for (ArticleSummary a : client.articles().iter("dora")) {
    all.add(a);
}
System.out.println("Total DORA articles: " + all.size());
```
