API reference
Every operation of the partner API v1, generated from the same registry the API validates with.
https://novikvadrat.rs/api/partners/v1Every request is signed (NK-SIG-1)
Five headers on every call: an Ed25519 signature over the method, host, path and query, a timestamp, a nonce and the body digest. How to sign a request
Operations
Ping
Connections
Listings
Batches
Validate
Vocabularies
Places
Ping
GET/ping
Prove the signature works and read the app, key and limits.
Responses
200 OK.
Unknown fields are rejected.
scrolls →
Examples
GET /api/partners/v1/ping
NK-Key-Id: nkp_sandbox_7f3k9q2m4x8c1v6b
NK-Timestamp: 1791792000
NK-Nonce: <16–64 random bytes, base64url>
Content-Digest: sha-256=:47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU=:
NK-Signature: v1=<86 base64url characters, no padding>Errors
No errors beyond the signed-request checks.
Errors on every endpoint (14)
scrolls →
Connections
POST/connections
Redeem a connect code an agency generated.
Request body
Unknown fields are rejected.
scrolls →
Responses
201 Created.
Unknown fields are rejected.
scrolls →
- 400 body_invalid: The body is not a JSON object. The body is the error envelope.
- 404 connect_code_invalid: An unknown, expired, used or other app's code. The body is the error envelope.
- 422 agency_not_eligible: details.reason is register_number_missing or account_blocked. validation_failed: The payload is invalid (details array). The body is the error envelope.
Examples
POST /api/partners/v1/connections
NK-Key-Id: nkp_sandbox_7f3k9q2m4x8c1v6b
NK-Timestamp: 1791792000
NK-Nonce: <16–64 random bytes, base64url>
Content-Digest: sha-256=:<base64 SHA-256 of the exact body bytes>:
NK-Signature: v1=<86 base64url characters, no padding>
Content-Type: application/json
{
"connect_code": "NK-7Q4M-X2PA-9KDF"
}Errors
scrolls →
Errors on every endpoint (14)
scrolls →
Detail codes
scrolls →
GET/connections
List this app's connections.
Parameters
scrolls →
Responses
200 OK.
Unknown fields are rejected.
scrolls →
- 422 validation_failed: The payload is invalid (details array). The body is the error envelope.
Examples
GET /api/partners/v1/connections
NK-Key-Id: nkp_sandbox_7f3k9q2m4x8c1v6b
NK-Timestamp: 1791792000
NK-Nonce: <16–64 random bytes, base64url>
Content-Digest: sha-256=:47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU=:
NK-Signature: v1=<86 base64url characters, no padding>Errors
scrolls →
Errors on every endpoint (14)
scrolls →
Detail codes
scrolls →
GET/connections/{id}
One connection with counts and the agency summary.
Parameters
scrolls →
Responses
200 OK.
Unknown fields are rejected.
scrolls →
- 404 connection_not_found: Unknown id, or another app's connection. The body is the error envelope.
Examples
GET /api/partners/v1/connections/{id}
NK-Key-Id: nkp_sandbox_7f3k9q2m4x8c1v6b
NK-Timestamp: 1791792000
NK-Nonce: <16–64 random bytes, base64url>
Content-Digest: sha-256=:47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU=:
NK-Signature: v1=<86 base64url characters, no padding>Errors
scrolls →
Errors on every endpoint (14)
scrolls →
DELETE/connections/{id}
Disconnect: the listings are released to the agency.
Parameters
scrolls →
Responses
200 OK.
Unknown fields are rejected.
scrolls →
- 404 connection_not_found: Unknown id, or another app's connection. The body is the error envelope.
- 422 validation_failed: The payload is invalid (details array). The body is the error envelope.
Examples
DELETE /api/partners/v1/connections/{id}
NK-Key-Id: nkp_sandbox_7f3k9q2m4x8c1v6b
NK-Timestamp: 1791792000
NK-Nonce: <16–64 random bytes, base64url>
Content-Digest: sha-256=:47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU=:
NK-Signature: v1=<86 base64url characters, no padding>Errors
scrolls →
Errors on every endpoint (14)
scrolls →
Detail codes
scrolls →
Listings
PUT/connections/{id}/listings/{external_id}
Create or fully replace one listing.
Parameters
scrolls →
Request body
One listing; transaction picks the sale or the rent shape. Text lengths count Unicode code points, as maxLength does; titles are ALSO capped at 120 UTF-16 units (an emoji counts as two). A sale price is refused (too_big) when amount × 117 (rounded, for EUR) would exceed 2,147,483,647 RSD (about 18,354,561 EUR). state: active needs legal.mandate_attested: true. See https://developers.novikvadrat.rs/docs/listings/payload-v1.
Unknown fields are rejected.
scrolls →
Responses
202 Accepted.
Unknown fields are rejected.
scrolls →
- 400 body_invalid: The body is not a JSON object. The body is the error envelope.
- 404 connection_not_found: Unknown id, or another app's connection. The body is the error envelope.
- 409 connection_not_active: details.status is pending, paused or revoked. The body is the error envelope.
- 422 validation_failed: The payload is invalid (details array). The body is the error envelope.
- 429 connection_item_limit: Over the hourly item budget. The body is the error envelope.
Examples
PUT /api/partners/v1/connections/{id}/listings/{external_id}
NK-Key-Id: nkp_sandbox_7f3k9q2m4x8c1v6b
NK-Timestamp: 1791792000
NK-Nonce: <16–64 random bytes, base64url>
Content-Digest: sha-256=:<base64 SHA-256 of the exact body bytes>:
NK-Signature: v1=<86 base64url characters, no padding>
Content-Type: application/json
{
"external_id": "REAA-12345",
"transaction": "sale",
"category": "apartment",
"state": "active",
"title": {
"sr": "Trosoban stan, Vračar",
"en": "Three-room flat, Vračar"
},
"description": {
"sr": "Svetao trosoban stan na Vračaru, renoviran 2024, na pet minuta od Hrama Svetog Save.",
"en": "A bright three-room flat in Vračar, renovated in 2024, five minutes from the Temple of Saint Sava."
},
"price": {
"amount": 245000,
"currency": "EUR",
"negotiable": false
},
"location": {
"place_id": "b2c0d6a4-3f1e-4d2a-9c8b-7e6f5a4b3c2d",
"address_line": "Njegoševa 10",
"neighbourhood": "Crveni krst",
"lat": 44.8012,
"lng": 20.4722
},
"structure": {
"area_sqm": 78.5,
"rooms": 3,
"bedrooms": 2,
"bathrooms": 1,
"floor": 3,
"total_floors": 5,
"levels": 1,
"year_built": 1968,
"building_group": "old",
"condition": "renovated",
"furnished": "semi_furnished",
"heating": "district",
"elevator": true,
"parking": false,
"garage": false,
"balcony": true,
"terrace": false,
"air_conditioning": true,
"basement": false
},
"legal": {
"ownership_status": "uknjizen",
"legalization_status": "legalizovan",
"mortgage_eligible": true,
"mandate_attested": true,
"exclusive": false,
"broker_license_no": null,
"tapija_note": null
},
"commission": {
"buyer_pct": 2,
"seller_pct": 2
},
"amenities": [
"built_in_wardrobes",
"intercom"
],
"attributes": {},
"photos": [
{
"url": "https://cdn.reaa.rs/listings/12345/1.jpg",
"caption": null,
"room_type": "living_room",
"digest": null
},
{
"url": "https://cdn.reaa.rs/listings/12345/2.jpg",
"caption": null,
"room_type": "kitchen",
"digest": null
},
{
"url": "https://cdn.reaa.rs/listings/12345/3.jpg",
"caption": null,
"room_type": "bedroom",
"digest": null
}
],
"video_url": null,
"virtual_tour_url": null,
"agent": {
"email": "milan@agencija.rs",
"name": "Milan Petrović",
"phone": "+381601234567"
},
"source": {
"updated_at": "2026-10-12T08:00:00Z",
"url": "https://agencija.rs/nekretnine/12345"
},
"digest": null
}Errors
scrolls →
Errors on every endpoint (14)
scrolls →
Detail codes
scrolls →
scrolls →
POST/connections/{id}/listings/{external_id}/remove
Remove a listing (sold, rented, withdrawn, expired, error).
Parameters
scrolls →
Request body
Unknown fields are rejected.
scrolls →
Responses
200 OK.
Unknown fields are rejected.
scrolls →
- 400 body_invalid: The body is not a JSON object. The body is the error envelope.
- 404 connection_not_found: Unknown id, or another app's connection. listing_not_found: No staged listing with that external_id on this connection. The body is the error envelope.
- 409 connection_not_active: details.status is pending, paused or revoked. The body is the error envelope.
- 422 validation_failed: The payload is invalid (details array). The body is the error envelope.
Examples
POST /api/partners/v1/connections/{id}/listings/{external_id}/remove
NK-Key-Id: nkp_sandbox_7f3k9q2m4x8c1v6b
NK-Timestamp: 1791792000
NK-Nonce: <16–64 random bytes, base64url>
Content-Digest: sha-256=:<base64 SHA-256 of the exact body bytes>:
NK-Signature: v1=<86 base64url characters, no padding>
Content-Type: application/json
{
"reason": "sold"
}Errors
scrolls →
Errors on every endpoint (14)
scrolls →
Detail codes
scrolls →
GET/connections/{id}/listings
The reconcile view: what Novi Kvadrat holds for this connection.
Parameters
scrolls →
Responses
200 OK.
Unknown fields are rejected.
scrolls →
- 404 connection_not_found: Unknown id, or another app's connection. The body is the error envelope.
- 409 connection_not_active: details.status is pending, paused or revoked. The body is the error envelope.
- 422 validation_failed: The payload is invalid (details array). The body is the error envelope.
Examples
GET /api/partners/v1/connections/{id}/listings
NK-Key-Id: nkp_sandbox_7f3k9q2m4x8c1v6b
NK-Timestamp: 1791792000
NK-Nonce: <16–64 random bytes, base64url>
Content-Digest: sha-256=:47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU=:
NK-Signature: v1=<86 base64url characters, no padding>Errors
scrolls →
Errors on every endpoint (14)
scrolls →
Detail codes
scrolls →
POST/connections/{id}/reconcile
Archive everything live that is not in the list.
Parameters
scrolls →
Request body
Unknown fields are rejected.
scrolls →
Responses
202 Accepted.
Unknown fields are rejected.
scrolls →
- 400 body_invalid: The body is not a JSON object. The body is the error envelope.
- 404 connection_not_found: Unknown id, or another app's connection. The body is the error envelope.
- 409 connection_not_active: details.status is pending, paused or revoked. mass_removal_requires_confirmation: A reconcile would remove too much. idempotency_in_progress: The same key while the first request runs (details.batch_id). The body is the error envelope.
- 422 batch_too_large: More than max_batch_items, more than 50 to validate, or more than 5,000 reconcile ids. idempotency_key_reused: The same key with a different body, within 7 days. validation_failed: The payload is invalid (details array). The body is the error envelope.
Examples
POST /api/partners/v1/connections/{id}/reconcile
NK-Key-Id: nkp_sandbox_7f3k9q2m4x8c1v6b
NK-Timestamp: 1791792000
NK-Nonce: <16–64 random bytes, base64url>
Content-Digest: sha-256=:<base64 SHA-256 of the exact body bytes>:
NK-Signature: v1=<86 base64url characters, no padding>
Content-Type: application/json
{
"external_ids": [
"REAA-12345",
"REAA-12346"
]
}Errors
scrolls →
Errors on every endpoint (14)
scrolls →
Detail codes
scrolls →
Batches
POST/connections/{id}/batches
Up to max_batch_items upserts in one call.
Parameters
scrolls →
Request body
Unknown fields are rejected.
scrolls →
Responses
202 Accepted.
Unknown fields are rejected.
scrolls →
- 400 body_invalid: The body is not a JSON object. The body is the error envelope.
- 404 connection_not_found: Unknown id, or another app's connection. The body is the error envelope.
- 409 connection_not_active: details.status is pending, paused or revoked. idempotency_in_progress: The same key while the first request runs (details.batch_id). The body is the error envelope.
- 422 batch_too_large: More than max_batch_items, more than 50 to validate, or more than 5,000 reconcile ids. idempotency_key_reused: The same key with a different body, within 7 days. duplicate_external_id: One external_id twice in a batch. validation_failed: The payload is invalid (details array). The body is the error envelope.
- 429 connection_item_limit: Over the hourly item budget. The body is the error envelope.
Examples
POST /api/partners/v1/connections/{id}/batches
NK-Key-Id: nkp_sandbox_7f3k9q2m4x8c1v6b
NK-Timestamp: 1791792000
NK-Nonce: <16–64 random bytes, base64url>
Content-Digest: sha-256=:<base64 SHA-256 of the exact body bytes>:
NK-Signature: v1=<86 base64url characters, no padding>
Content-Type: application/json
{
"listings": [
{
"external_id": "REAA-12345",
"transaction": "sale",
"category": "apartment",
"state": "active",
"title": {
"sr": "Trosoban stan, Vračar",
"en": "Three-room flat, Vračar"
},
"description": {
"sr": "Svetao trosoban stan na Vračaru, renoviran 2024, na pet minuta od Hrama Svetog Save.",
"en": "A bright three-room flat in Vračar, renovated in 2024, five minutes from the Temple of Saint Sava."
},
"price": {
"amount": 245000,
"currency": "EUR",
"negotiable": false
},
"location": {
"place_id": "b2c0d6a4-3f1e-4d2a-9c8b-7e6f5a4b3c2d",
"address_line": "Njegoševa 10",
"neighbourhood": "Crveni krst",
"lat": 44.8012,
"lng": 20.4722
},
"structure": {
"area_sqm": 78.5,
"rooms": 3,
"bedrooms": 2,
"bathrooms": 1,
"floor": 3,
"total_floors": 5,
"levels": 1,
"year_built": 1968,
"building_group": "old",
"condition": "renovated",
"furnished": "semi_furnished",
"heating": "district",
"elevator": true,
"parking": false,
"garage": false,
"balcony": true,
"terrace": false,
"air_conditioning": true,
"basement": false
},
"legal": {
"ownership_status": "uknjizen",
"legalization_status": "legalizovan",
"mortgage_eligible": true,
"mandate_attested": true,
"exclusive": false,
"broker_license_no": null,
"tapija_note": null
},
"commission": {
"buyer_pct": 2,
"seller_pct": 2
},
"amenities": [
"built_in_wardrobes",
"intercom"
],
"attributes": {},
"photos": [
{
"url": "https://cdn.reaa.rs/listings/12345/1.jpg",
"caption": null,
"room_type": "living_room",
"digest": null
},
{
"url": "https://cdn.reaa.rs/listings/12345/2.jpg",
"caption": null,
"room_type": "kitchen",
"digest": null
},
{
"url": "https://cdn.reaa.rs/listings/12345/3.jpg",
"caption": null,
"room_type": "bedroom",
"digest": null
}
],
"video_url": null,
"virtual_tour_url": null,
"agent": {
"email": "milan@agencija.rs",
"name": "Milan Petrović",
"phone": "+381601234567"
},
"source": {
"updated_at": "2026-10-12T08:00:00Z",
"url": "https://agencija.rs/nekretnine/12345"
},
"digest": null
},
{
"external_id": "REAA-12346",
"transaction": "sale",
"category": "apartment",
"state": "active",
"title": {
"sr": "Trosoban stan, Vračar",
"en": "Three-room flat, Vračar"
},
"description": {
"sr": "Svetao trosoban stan na Vračaru, renoviran 2024, na pet minuta od Hrama Svetog Save.",
"en": "A bright three-room flat in Vračar, renovated in 2024, five minutes from the Temple of Saint Sava."
},
"price": {
"amount": 245000,
"currency": "EUR",
"negotiable": false
},
"location": {
"place_id": "b2c0d6a4-3f1e-4d2a-9c8b-7e6f5a4b3c2d",
"address_line": "Njegoševa 10",
"neighbourhood": "Crveni krst",
"lat": 44.8012,
"lng": 20.4722
},
"structure": {
"area_sqm": 78.5,
"rooms": 3,
"bedrooms": 2,
"bathrooms": 1,
"floor": 3,
"total_floors": 5,
"levels": 1,
"year_built": 1968,
"building_group": "old",
"condition": "renovated",
"furnished": "semi_furnished",
"heating": "district",
"elevator": true,
"parking": false,
"garage": false,
"balcony": true,
"terrace": false,
"air_conditioning": true,
"basement": false
},
"legal": {
"ownership_status": "uknjizen",
"legalization_status": "legalizovan",
"mortgage_eligible": true,
"mandate_attested": true,
"exclusive": false,
"broker_license_no": null,
"tapija_note": null
},
"commission": {
"buyer_pct": 2,
"seller_pct": 2
},
"amenities": [
"built_in_wardrobes",
"intercom"
],
"attributes": {},
"photos": [
{
"url": "https://cdn.reaa.rs/listings/12345/1.jpg",
"caption": null,
"room_type": "living_room",
"digest": null
},
{
"url": "https://cdn.reaa.rs/listings/12345/2.jpg",
"caption": null,
"room_type": "kitchen",
"digest": null
},
{
"url": "https://cdn.reaa.rs/listings/12345/3.jpg",
"caption": null,
"room_type": "bedroom",
"digest": null
}
],
"video_url": null,
"virtual_tour_url": null,
"agent": {
"email": "milan@agencija.rs",
"name": "Milan Petrović",
"phone": "+381601234567"
},
"source": {
"updated_at": "2026-10-12T08:00:00Z",
"url": "https://agencija.rs/nekretnine/12345"
},
"digest": null
},
{
"external_id": "REAA-12347",
"transaction": "sale",
"category": "apartment",
"state": "active",
"title": {
"sr": "Trosoban stan, Vračar",
"en": "Three-room flat, Vračar"
},
"description": {
"sr": "Svetao trosoban stan na Vračaru, renoviran 2024, na pet minuta od Hrama Svetog Save.",
"en": "A bright three-room flat in Vračar, renovated in 2024, five minutes from the Temple of Saint Sava."
},
"price": {
"amount": 245000,
"currency": "EUR",
"negotiable": false
},
"location": {
"place_id": "b2c0d6a4-3f1e-4d2a-9c8b-7e6f5a4b3c2d",
"address_line": "Njegoševa 10",
"neighbourhood": "Crveni krst",
"lat": 44.8012,
"lng": 20.4722
},
"structure": {
"area_sqm": 78.5,
"rooms": 3,
"bedrooms": 2,
"bathrooms": 1,
"floor": 3,
"total_floors": 5,
"levels": 1,
"year_built": 1968,
"building_group": "old",
"condition": "renovated",
"furnished": "semi_furnished",
"heating": "district",
"elevator": true,
"parking": false,
"garage": false,
"balcony": true,
"terrace": false,
"air_conditioning": true,
"basement": false
},
"legal": {
"ownership_status": "uknjizen",
"legalization_status": "legalizovan",
"mortgage_eligible": true,
"mandate_attested": true,
"exclusive": false,
"broker_license_no": null,
"tapija_note": null
},
"commission": {
"buyer_pct": 2,
"seller_pct": 2
},
"amenities": [
"built_in_wardrobes",
"intercom"
],
"attributes": {},
"photos": [
{
"url": "https://cdn.reaa.rs/listings/12345/1.jpg",
"caption": null,
"room_type": "living_room",
"digest": null
},
{
"url": "https://cdn.reaa.rs/listings/12345/2.jpg",
"caption": null,
"room_type": "kitchen",
"digest": null
},
{
"url": "https://cdn.reaa.rs/listings/12345/3.jpg",
"caption": null,
"room_type": "bedroom",
"digest": null
}
],
"video_url": null,
"virtual_tour_url": null,
"agent": {
"email": "milan@agencija.rs",
"name": "Milan Petrović",
"phone": "+381601234567"
},
"source": {
"updated_at": "2026-10-12T08:00:00Z",
"url": "https://agencija.rs/nekretnine/12345"
},
"digest": null
}
]
}Errors
scrolls →
Errors on every endpoint (14)
scrolls →
Detail codes
scrolls →
scrolls →
GET/batches/{id}
Status and per-item results of a push.
Parameters
scrolls →
Responses
200 OK.
Unknown fields are rejected.
scrolls →
- 404 batch_not_found: Unknown batch id, or another app's batch. The body is the error envelope.
Examples
GET /api/partners/v1/batches/{id}
NK-Key-Id: nkp_sandbox_7f3k9q2m4x8c1v6b
NK-Timestamp: 1791792000
NK-Nonce: <16–64 random bytes, base64url>
Content-Digest: sha-256=:47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU=:
NK-Signature: v1=<86 base64url characters, no padding>Errors
scrolls →
Errors on every endpoint (14)
scrolls →
Validate
POST/validate
Dry run: validate without storing anything.
Request body
Unknown fields are rejected.
scrolls →
Responses
200 OK.
Unknown fields are rejected.
scrolls →
- 400 body_invalid: The body is not a JSON object. The body is the error envelope.
- 404 connection_not_found: Unknown id, or another app's connection. The body is the error envelope.
- 409 connection_not_active: details.status is pending, paused or revoked. The body is the error envelope.
- 422 batch_too_large: More than max_batch_items, more than 50 to validate, or more than 5,000 reconcile ids. validation_failed: The payload is invalid (details array). The body is the error envelope.
Examples
POST /api/partners/v1/validate
NK-Key-Id: nkp_sandbox_7f3k9q2m4x8c1v6b
NK-Timestamp: 1791792000
NK-Nonce: <16–64 random bytes, base64url>
Content-Digest: sha-256=:<base64 SHA-256 of the exact body bytes>:
NK-Signature: v1=<86 base64url characters, no padding>
Content-Type: application/json
{
"listing": {
"external_id": "REAA-12345",
"transaction": "sale",
"category": "apartment",
"state": "active",
"title": {
"sr": "Trosoban stan, Vračar",
"en": "Three-room flat, Vračar"
},
"description": {
"sr": "Svetao trosoban stan na Vračaru, renoviran 2024, na pet minuta od Hrama Svetog Save.",
"en": "A bright three-room flat in Vračar, renovated in 2024, five minutes from the Temple of Saint Sava."
},
"price": {
"amount": 245000,
"currency": "EUR",
"negotiable": false
},
"location": {
"place_id": "b2c0d6a4-3f1e-4d2a-9c8b-7e6f5a4b3c2d",
"address_line": "Njegoševa 10",
"neighbourhood": "Crveni krst",
"lat": 44.8012,
"lng": 20.4722
},
"structure": {
"area_sqm": 78.5,
"rooms": 3,
"bedrooms": 2,
"bathrooms": 1,
"floor": 3,
"total_floors": 5,
"levels": 1,
"year_built": 1968,
"building_group": "old",
"condition": "renovated",
"furnished": "semi_furnished",
"heating": "district",
"elevator": true,
"parking": false,
"garage": false,
"balcony": true,
"terrace": false,
"air_conditioning": true,
"basement": false
},
"legal": {
"ownership_status": "uknjizen",
"legalization_status": "legalizovan",
"mortgage_eligible": true,
"mandate_attested": true,
"exclusive": false,
"broker_license_no": null,
"tapija_note": null
},
"commission": {
"buyer_pct": 2,
"seller_pct": 2
},
"amenities": [
"built_in_wardrobes",
"intercom"
],
"attributes": {},
"photos": [
{
"url": "https://cdn.reaa.rs/listings/12345/1.jpg",
"caption": null,
"room_type": "living_room",
"digest": null
},
{
"url": "https://cdn.reaa.rs/listings/12345/2.jpg",
"caption": null,
"room_type": "kitchen",
"digest": null
},
{
"url": "https://cdn.reaa.rs/listings/12345/3.jpg",
"caption": null,
"room_type": "bedroom",
"digest": null
}
],
"video_url": null,
"virtual_tour_url": null,
"agent": {
"email": "milan@agencija.rs",
"name": "Milan Petrović",
"phone": "+381601234567"
},
"source": {
"updated_at": "2026-10-12T08:00:00Z",
"url": "https://agencija.rs/nekretnine/12345"
},
"digest": null
},
"connection_id": "9b1d6c2e-4f3a-4c8e-9a71-2d5e8f0b3c44"
}Errors
scrolls →
Errors on every endpoint (14)
scrolls →
Detail codes
scrolls →
scrolls →
Vocabularies
GET/vocabularies
Every enumeration, with labels and per-category attributes.
Parameters
scrolls →
Responses
200 OK.
Unknown fields are rejected.
scrolls →
- 304 Not modified: If-None-Match matched the current ETag. The body is the error envelope.
Examples
GET /api/partners/v1/vocabularies
NK-Key-Id: nkp_sandbox_7f3k9q2m4x8c1v6b
NK-Timestamp: 1791792000
NK-Nonce: <16–64 random bytes, base64url>
Content-Digest: sha-256=:47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU=:
NK-Signature: v1=<86 base64url characters, no padding>Errors
No errors beyond the signed-request checks.
Errors on every endpoint (14)
scrolls →
Places
GET/places
Search cities and municipalities.
Parameters
scrolls →
Responses
200 OK.
Unknown fields are rejected.
scrolls →
- 422 validation_failed: The payload is invalid (details array). The body is the error envelope.
Examples
GET /api/partners/v1/places
NK-Key-Id: nkp_sandbox_7f3k9q2m4x8c1v6b
NK-Timestamp: 1791792000
NK-Nonce: <16–64 random bytes, base64url>
Content-Digest: sha-256=:47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU=:
NK-Signature: v1=<86 base64url characters, no padding>Errors
scrolls →
Errors on every endpoint (14)
scrolls →
Detail codes
scrolls →
GET/places/{id}
One place.
Parameters
scrolls →
Responses
200 OK.
Unknown fields are rejected.
scrolls →
- 404 place_not_found: Unknown place id. The body is the error envelope.
Examples
GET /api/partners/v1/places/{id}
NK-Key-Id: nkp_sandbox_7f3k9q2m4x8c1v6b
NK-Timestamp: 1791792000
NK-Nonce: <16–64 random bytes, base64url>
Content-Digest: sha-256=:47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU=:
NK-Signature: v1=<86 base64url characters, no padding>Errors
scrolls →
Errors on every endpoint (14)
scrolls →