> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.odr.io/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.odr.io/_mcp/server.

# /dataset/{datset_uuid}/modified/records/{timestamp}/{limit}/{offset}

GET https://dataset/ddc5e9ba834ad596cc31aebb1225/modified/records/1781925810/20/0

Returns a paginated list of records within a dataset that have been modified since a given Unix timestamp. This endpoint is intended for **incremental sync** use cases — it does not return full record content, only lightweight identifiers sufficient to detect which records have changed and need to be fetched in full via `/record/{record_uuid}`.

### Path Parameters

| Parameter      | Type    | Description                                                                       |
| -------------- | ------- | --------------------------------------------------------------------------------- |
| `dataset_uuid` | string  | The unique identifier of the dataset to query.                                    |
| `timestamp`    | integer | Unix timestamp (seconds). Only records modified **after** this time are returned. |
| `limit`        | integer | Maximum number of records to return per page.                                     |
| `offset`       | integer | Number of records to skip, used for pagination.                                   |

### Authentication

Requires a Bearer token in the `Authorization` header. The pre-request script automatically obtains a fresh token using the `apiuser` and `apipass` environment variables.

### Response

Returns a `200 OK` with a JSON object containing a `records` array. Each item in the array is a lightweight record summary — **not** the full record content.

**Response fields per record:**

| Field         | Type    | Description                                                                                                 |
| ------------- | ------- | ----------------------------------------------------------------------------------------------------------- |
| `internal_id` | integer | Internal numeric identifier for the record.                                                                 |
| `unique_id`   | string  | Unique hexadecimal identifier for the record (use this with `/record/{record_uuid}` to fetch full content). |
| `external_id` | string  | Human-readable external identifier (e.g. `R040001`).                                                        |
| `record_name` | string  | Display name of the record, typically matches `external_id`.                                                |

**Example response:**

```json
{
    "records": [
        {
            "internal_id": 640190,
            "unique_id": "134d21e4ce17bbee7203b6e6a8a4",
            "external_id": "R040001",
            "record_name": "R040001"
        },
        {
            "internal_id": 640191,
            "unique_id": "8bcbd262fdc6bc5f7582ccd937ee",
            "external_id": "R040002",
            "record_name": "R040002"
        }
    ]
}
```

### Pagination

Use `limit` and `offset` together to page through large result sets. For example, to retrieve the second page of 20 results, set `limit=20` and `offset=20`.

### Usage Pattern

This endpoint is typically used as the first step in a two-phase sync:

1. Call this endpoint with the timestamp of your last sync to get the list of modified record identifiers.
2. For each `unique_id` returned, call `/record/{record_uuid}` to retrieve the full record content.

Reference: https://docs.odr.io/odr-search-api-v-4/dataset-datset-uuid-modified-records-timestamp-limit-offset

## Response

### 200

OK

- `records` (list of object, required)
  - `internal_id` (integer, required)
  - `unique_id` (string, required)
  - `external_id` (string, required)
  - `record_name` (string, required)

## Examples

**Response**

```json
{
  "records": [
    {
      "internal_id": 640190,
      "unique_id": "134d21e4ce17bbee7203b6e6a8a4",
      "external_id": "R040001",
      "record_name": "R040001"
    },
    {
      "internal_id": 640191,
      "unique_id": "8bcbd262fdc6bc5f7582ccd937ee",
      "external_id": "R040002",
      "record_name": "R040002"
    },
    {
      "internal_id": 640186,
      "unique_id": "c67a06e7b4a6c8d7d11bab1588ce",
      "external_id": "R040003",
      "record_name": "R040003"
    },
    {
      "internal_id": 640187,
      "unique_id": "a0cd1eb71fbb2b5aa1828c3af404",
      "external_id": "R040004",
      "record_name": "R040004"
    },
    {
      "internal_id": 640192,
      "unique_id": "741c8b808b6f89e617850a3ce03f",
      "external_id": "R040005",
      "record_name": "R040005"
    },
    {
      "internal_id": 640188,
      "unique_id": "90d9f1a2298e788db7975c4db931",
      "external_id": "R040006",
      "record_name": "R040006"
    },
    {
      "internal_id": 640189,
      "unique_id": "3d2926d24a57dd8dbcc3b0077c22",
      "external_id": "R040007",
      "record_name": "R040007"
    },
    {
      "internal_id": 640411,
      "unique_id": "ca82270d0e62b07a3f252663d602",
      "external_id": "R040008",
      "record_name": "R040008"
    },
    {
      "internal_id": 640194,
      "unique_id": "cff52cd5a75d30cbfdfce293a55c",
      "external_id": "R040009",
      "record_name": "R040009"
    },
    {
      "internal_id": 640413,
      "unique_id": "14cbed71d3506a8f5c92a66c3226",
      "external_id": "R040010",
      "record_name": "R040010"
    },
    {
      "internal_id": 640417,
      "unique_id": "eff2556054ad77d85729b1ec8bf5",
      "external_id": "R040011",
      "record_name": "R040011"
    },
    {
      "internal_id": 640195,
      "unique_id": "56a0de93ca391b0641f47fa569b6",
      "external_id": "R040012",
      "record_name": "R040012"
    },
    {
      "internal_id": 640410,
      "unique_id": "4d6ad96baf93b636a7a6fe69ad93",
      "external_id": "R040013",
      "record_name": "R040013"
    },
    {
      "internal_id": 640196,
      "unique_id": "194f741ee80cfd258313c331c6d1",
      "external_id": "R040014",
      "record_name": "R040014"
    },
    {
      "internal_id": 640197,
      "unique_id": "6d7a810f90696a0f0afcee57a615",
      "external_id": "R040016",
      "record_name": "R040016"
    },
    {
      "internal_id": 640198,
      "unique_id": "c60c5de50b60a64b592e6b64916e",
      "external_id": "R040017",
      "record_name": "R040017"
    },
    {
      "internal_id": 640199,
      "unique_id": "aaedad25a5d7251c16341865ae15",
      "external_id": "R040018",
      "record_name": "R040018"
    },
    {
      "internal_id": 640418,
      "unique_id": "2fe3c9b6cc196be98f4094dd60ba",
      "external_id": "R040019",
      "record_name": "R040019"
    },
    {
      "internal_id": 640200,
      "unique_id": "f08097913b1168259559b122b1f7",
      "external_id": "R040020",
      "record_name": "R040020"
    },
    {
      "internal_id": 640202,
      "unique_id": "72707097f5cfec068b93bd9ca548",
      "external_id": "R040021",
      "record_name": "R040021"
    }
  ]
}
```

**SDK Code**

```python /dataset/{datset_uuid}/modified/records/{timestamp}/{limit}/{offset}_example
import requests

url = "https://https/dataset/ddc5e9ba834ad596cc31aebb1225/modified/records/1781925810/20/0"

response = requests.get(url)

print(response.json())
```

```javascript /dataset/{datset_uuid}/modified/records/{timestamp}/{limit}/{offset}_example
const url = 'https://https/dataset/ddc5e9ba834ad596cc31aebb1225/modified/records/1781925810/20/0';
const options = {method: 'GET'};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```go /dataset/{datset_uuid}/modified/records/{timestamp}/{limit}/{offset}_example
package main

import (
	"fmt"
	"net/http"
	"io"
)

func main() {

	url := "https://https/dataset/ddc5e9ba834ad596cc31aebb1225/modified/records/1781925810/20/0"

	req, _ := http.NewRequest("GET", url, nil)

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

```ruby /dataset/{datset_uuid}/modified/records/{timestamp}/{limit}/{offset}_example
require 'uri'
require 'net/http'

url = URI("https://https/dataset/ddc5e9ba834ad596cc31aebb1225/modified/records/1781925810/20/0")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)

response = http.request(request)
puts response.read_body
```

```java /dataset/{datset_uuid}/modified/records/{timestamp}/{limit}/{offset}_example
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.get("https://https/dataset/ddc5e9ba834ad596cc31aebb1225/modified/records/1781925810/20/0")
  .asString();
```

```php /dataset/{datset_uuid}/modified/records/{timestamp}/{limit}/{offset}_example
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('GET', 'https://https/dataset/ddc5e9ba834ad596cc31aebb1225/modified/records/1781925810/20/0');

echo $response->getBody();
```

```csharp /dataset/{datset_uuid}/modified/records/{timestamp}/{limit}/{offset}_example
using RestSharp;

var client = new RestClient("https://https/dataset/ddc5e9ba834ad596cc31aebb1225/modified/records/1781925810/20/0");
var request = new RestRequest(Method.GET);
IRestResponse response = client.Execute(request);
```

```swift /dataset/{datset_uuid}/modified/records/{timestamp}/{limit}/{offset}_example
import Foundation

let request = NSMutableURLRequest(url: NSURL(string: "https://https/dataset/ddc5e9ba834ad596cc31aebb1225/modified/records/1781925810/20/0")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "GET"

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```