Skip to main content

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#

  1. 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 → 400 digest_mismatch. A replay: node nk-partner.mjs ping --replay → the second answer is 401 nonce_reused. A request signed 10 minutes ago: node nk-partner.mjs ping --skew=-600 → 401 timestamp_out_of_window.
  2. Redeem the test-agency code shown in the Partner Portal under Connections: node nk-partner.mjs redeem NK-XXXX-XXXX-XXXX → 201, status certifying. Redeem the same code again → 404 connect_code_invalid.
  3. 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 item accepted or needs_review. After staff certify the connection, every item ends validated and none failed: node nk-partner.mjs list <connection> --status=validated lists all of them (the reconcile view's status; GET /batches/{id} keeps the push-time result, needs_review).
  4. 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.
  5. The photo minimum. Push a listing with 2 photos and state: "active" (put-listing) → the item ends failed with photo_minimum. Add a photo and push again → validated.
  6. States. Push a listing with state: "inactive", then with state: "active" (put-listing twice) and show both item results.
  7. 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>.
  8. 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 → 409 mass_removal_requires_confirmation. Repeat with --confirm-mass-removal → 202, removed.
  9. Webhooks. Receive and verify the signature of at least one item.validated and one item.failed delivery, plus a webhook.test (Send test in the Partner Portal). See Verifying signatures.
  10. The validator. node nk-partner.mjs validate --file=bad.json on a payload with an unknown field and a wrong place id → both errors, unknown_field and unknown_place, with their pointers.
  11. Rotate a key. Register a second key in the Partner Portal, switch to it (ping with the new key → 200), revoke the first; a request with the revoked key → 401 key_invalid.
  12. 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