# FHIR and observations

Canonical page: https://docs.ovok.com/java-sdk/fhir-and-observations

`ovok.fhir()` calls the FHIR R4 API.

Read, search, create, update, patch, delete, and post batch or transaction Bundles. Every method is in the [`FhirResource` reference](/java-sdk/reference/fhir-resource).

```java
JsonNode patient = ovok.fhir().read("Patient", "patient-id");
Page<JsonNode> observations = ovok.fhir().search("Observation", Map.of(
        "date", List.of("ge2026-01-01", "le2026-02-01")));
```

Search parameters with a list value are sent as repeated query keys.

## Paging [#paging]

List methods that page return `Page<T>`. `data()` holds the first page, `hasMore()` reports whether more pages exist, and `total()` returns the server total when it sends one. Iterating a `Page` fetches the next page only when the iterator reaches it:

```java
for (JsonNode observation : observations) {
    // ...
}
```

`Page` follows FHIR Bundle links, numbered pages, cursors, and Payload pages.

To save measurements as Observations, use [measurements](/java-sdk/measurements).
