Keeping a copy in sync
Fetch only what changed since last time, and what was deleted.
On this page
To keep a copy of your data up to date, ask each list for what changed since your last sync, then ask
/deletions for what was deleted.
1. Fetch what changed
Every list takes updated_since, an ISO 8601 time with Z or an offset:
curl "$NIFTY_URL/api/v1/people?updated_since=2026-10-09T08:00:00Z&limit=100" \
-H "Authorization: Bearer $NIFTY_TOKEN"
You get the records changed at or after that time, oldest change first, a page at a time
(Pagination). Save or replace each by its id.
2. Fetch what was deleted
curl "$NIFTY_URL/api/v1/deletions?since=2026-10-09T08:00:00Z" \
-H "Authorization: Bearer $NIFTY_TOKEN"
{
"data": [{ "type": "category", "id": "01m4jf9e0tjjb1a8rg6h4nygn7", "deleted_at": "2026-10-10T08:36:23.756Z" }],
"meta": { "limit": 25, "next_cursor": null }
}
Remove each from your copy. type is one of person, key_date, email_address, position, company,
person_link, project, project_member, project_event, category, tag, note, task_list, task, folder,
document, ai_provider, ai_model or calendar_feed. Leave out since to get every deletion. See Sync.
3. Remember where you got to
Next time, start from the latest updated_at (and deleted_at) you saw, minus a minute. A slow change can be
saved with a slightly earlier time than one you've already seen, so the overlap catches it. Records in the overlap
come back again, which is harmless if you replace by id.
Things to know
- Undoing a delete in Nifty removes its entry from
/deletions, and the record comes back in its list with a newerupdated_at. So save byid, even a record you deleted. - Sync unfiltered lists: a filtered one (by relationship, say) can't tell you a record has left the filter.
- Renaming a person or tag gives the notes that mention it a new
updated_at, so they come back with the new name. - Your password, username and API tokens aren't part of sync.