Skip to main content

Reconcile

See what we hold for a connection, then archive everything live that your export no longer lists — with a guard against mass removal.

The reconcile view#

GET /connections/{id}/listings lists what we hold for the connection, one row per external_id:

http
GET /api/partners/v1/connections/9b1d6c2e-4f3a-4c8e-9a71-2d5e8f0b3c44/listings?limit=200
json
200 { "items": [ { "external_id": "REAA-12345", "transaction": "sale", "status": "imported", "listing_status": "published",
      "moderation_status": "approved", "listing_id": "e19…", "public_url": "https://novikvadrat.rs/…",
      "payload_digest": "3f2…", "imported_digest": "3f2…", "updated_at": "…", "failure_code": null } ], "next_cursor": null }

status is the staged item's state, listing_status and moderation_status the listing's. Page with cursor and limit (1–200); filter with status. It also answers on a paused connection. Reference: the reconcile view.

Reconcile#

POST /connections/{id}/reconcile with every external_id your export contains (up to 5,000) and an Idempotency-Key:

http
POST /api/partners/v1/connections/9b1d6c2e-4f3a-4c8e-9a71-2d5e8f0b3c44/reconcile
Idempotency-Key: reconcile-2026-10-12
json
{ "external_ids": ["REAA-12345", "REAA-12346"] }
json
202 { "batch": { "id": "r08…", "kind": "reconcile", "to_remove": 2, "removed_queued": 2 } }

We take the live set — the imported listings of this connection that are still published, paused or draft — and archive every one whose external_id is missing from your list (reason reconcile). The removals apply on the next worker tick.

  • Sold, rented, archived and expired listings are left alone, so dropping sold stock from your export never archives it.
  • Ids you send that we don't hold are ignored; the reconcile view shows what to push.
  • On the sandbox, the live set is the items that ended validated.

The mass-removal guard#

If more than 5 listings and more than 20 % of the live set would go, the call is refused:

json
409 { "error": { "code": "mass_removal_requires_confirmation", "message": "This would remove 41 of 120 live listings.",
      "details": { "live": 120, "missing": 41, "threshold_ratio": 0.2, "threshold_min": 5 } }, "request_id": "…" }

Check your export first. If the removal is right, repeat with "confirm_mass_removal": true:

json
{ "external_ids": ["REAA-12345"], "confirm_mass_removal": true }

More than 5,000 ids → 422 batch_too_large. With the reference client: node nk-partner.mjs reconcile <connection> --ids=REAA-12345,REAA-12346. Reference: reconcile.

Last updated