Certification checklist
The twelve checks you run on the sandbox before a live app, each with the reference-client command that performs it and the result to expect.
Run these on your sandbox app with your sandbox key, against the test agency's connection. The commands use the reference client (download nk-partner.mjs); your own software should produce the same results. Keep the outputs (NK-Request-Id, item results, webhook bodies): they are your evidence.
In the commands, <connection> is the test connection's id and listing.json a valid listing (Payload v1).
The twelve checks#
- Signing works, and its failures are the right ones.
node nk-partner.mjs ping→ 200. A request whose body changed after signing:node nk-partner.mjs validate --file=listing.json --tamper=body→ 400digest_mismatch. A replay:node nk-partner.mjs ping --replay→ the second answer is 401nonce_reused. A request signed 10 minutes ago:node nk-partner.mjs ping --skew=-600→ 401timestamp_out_of_window. - Redeem the test-agency code shown in the Partner Portal under Connections:
node nk-partner.mjs redeem NK-XXXX-XXXX-XXXX→ 201, statuscertifying. Redeem the same code again → 404connect_code_invalid. - Push a batch of at least 10 listings covering both transactions (sale and rent) and at least 5 categories:
node nk-partner.mjs batch <connection> --files=a.json,b.json,…→ every itemacceptedorneeds_review. After staff certify the connection, every item endsvalidatedand nonefailed:node nk-partner.mjs list <connection> --status=validatedlists all of them (the reconcile view'sstatus;GET /batches/{id}keeps the push-time result,needs_review). - Update and repeat. Change the price of one listing and push it:
node nk-partner.mjs put-listing <connection> --file=listing.json→accepted. Push it again unchanged →unchanged. - The photo minimum. Push a listing with 2 photos and
state: "active"(put-listing) → the item endsfailedwithphoto_minimum. Add a photo and push again →validated. - States. Push a listing with
state: "inactive", then withstate: "active"(put-listingtwice) and show both item results. - Remove one listing with reason
sold:node nk-partner.mjs remove <connection> REAA-12345 --reason=sold→removed. Verify through the reconcile view:node nk-partner.mjs list <connection>. - Reconcile, and its guard. With 10 live listings, reconcile with a list missing 1:
node nk-partner.mjs reconcile <connection> --ids=…→ 202, one removed. With a list missing 8 → 409mass_removal_requires_confirmation. Repeat with--confirm-mass-removal→ 202, removed. - Webhooks. Receive and verify the signature of at least one
item.validatedand oneitem.faileddelivery, plus awebhook.test(Send test in the Partner Portal). See Verifying signatures. - The validator.
node nk-partner.mjs validate --file=bad.jsonon a payload with an unknown field and a wrong place id → both errors,unknown_fieldandunknown_place, with their pointers. - Rotate a key. Register a second key in the Partner Portal, switch to it (
pingwith the new key → 200), revoke the first; a request with the revoked key → 401key_invalid. - Ask for live. Give the egress IP addresses for the live allowlist and a monitoring contact, then press Request live access on the Partner Portal overview.
After the checklist#
Novi Kvadrat staff review your results and record the outcome on your partner record, then create your live app. You then repeat checks 1 and 2 with the live key against a real agency's connect code. See Requesting live access.
Last updated