Skip to content

Validate a place

POST /v1/validate

https://api.voygr.tech/v1/validate

Open in playground

Overview

Validate a place's existence and operating status using evidence about the place.

Authentication

  • API key in header X-API-Key: Your customer API key (pk_live_...), sent on every request. Self-serve at https://api.voygr.tech/checkout.

Request body

required

application/json

Schema: POIValidateRequest

Responses

200

Successful Response

application/json

Schema: POIValidateResponse

400

Invalid request. Correct the fields before retrying.

application/json

Schema: object | object

Option 1 fields

FieldTypeRequiredDescription and constraints
successbooleanrequiredconstant False
errorstringrequired
error_codestringrequiredconstant VALIDATION_ERROR
request_idstring | nullrequired
validation_timestampstringrequired
detailarray of objectrequired

Item fields

FieldTypeRequiredDescription and constraints
fieldstringrequired
messagestringrequired
typestringrequired

Option 2 fields

FieldTypeRequiredDescription and constraints
detailobjectrequiredGateway rejection, for example an invalid Idempotency-Key header.

Fields

FieldTypeRequiredDescription and constraints
errorstringrequired
error_codestringoptional

One of

  • Option 1: requires success, error, error_code, request_id, validation_timestamp, detail
  • Option 2: requires detail

invalidinput

{
  "success": false,
  "error": "Invalid input provided",
  "error_code": "VALIDATION_ERROR",
  "request_id": "example-request-id",
  "validation_timestamp": "2026-09-16T12:00:00Z",
  "detail": [
    {
      "field": "poi_name",
      "message": "Field required",
      "type": "missing"
    }
  ]
}

Schemas

POIValidateRequest

Type: object

Request model for single POI validation.

FieldTypeRequiredDescription and constraints
idstring (max length 100) | nulloptionalClient-provided identifier
poi_namestringrequiredPOI name
length 1 to 200
streetstring (max length 300) | nulloptionalStreet address
citystring (max length 200) | nulloptionalCity
regionstring (max length 200) | nulloptionalState/province
postcodestring (max length 40) | nulloptionalPostal/ZIP code
countrystring | nulloptional2-letter ISO country code
addressstring (max length 500) | nulloptionalUnstructured address string. May also be sent as freeform_address (input-only alias).
latitudenumber (-90.0 to 90.0) | nulloptionalLatitude in decimal degrees (WGS84). Optional but recommended.
longitudenumber (-180.0 to 180.0) | nulloptionalLongitude in decimal degrees (WGS84). Optional but recommended.

Example

{
  "id": "bakery-001",
  "poi_name": "Example Bakery",
  "address": "123 Example Street",
  "country": "US",
  "latitude": 37.7749,
  "longitude": -122.4194
}

POIValidateResponse

Type: object

Validation results describing existence and operating status separately.

FieldTypeRequiredDescription and constraints
successbooleanrequiredWhether validation succeeded
idstring | nulloptionalClient-provided ID (pass-through)
existence_confidencenumber | nulloptionalConfidence (0-1) that a matching place ever existed at this address. A closed place can still have high existence confidence. This does not describe whether it is operating today. Interpret closure only when existence is established; use operational_status.status for the decision.
operational_statusOperationalStatusBlock | nulloptionalOperating-status result. Use operational_status.status for the decision.
errorstring | nulloptionalError message if success=false
error_codestring | nulloptionalError category code (VALIDATION_ERROR, MODEL_ERROR, EXTERNAL_API_ERROR, etc.)
request_idstring | nulloptionalRequest ID for tracing
validation_timestampstring | nulloptionalUTC timestamp when validation was produced (ISO 8601).

OperationalStatusBlock

Type: object

Operational status for a place. Use operational_status.status for the decision. A closed verdict is evidence-backed, not a decision based on score alone. Confidence is not a cross-status decision threshold. 'unknown' means undetermined; null means no closure assessment, not zero confidence.

FieldTypeRequiredDescription and constraints
statusstringrequiredOperational status: 'open' means assessed as operating; 'closed' means evidence supports closure; 'unknown' means undetermined and worth re-checking; 'not_exists' means the place was not judged to exist and no closure assessment was made. closure_confidence and closure_reason are null for 'not_exists'.
one of open, closed, unknown, not_exists
closure_confidencenumber | nullrequiredConfidence in a closed verdict (0-1). Use operational_status.status for the decision; do not use confidence as a cross-status threshold or rank non-closed places by it. Null for 'not_exists' means no closure assessment, not zero confidence.
closure_reasonstring (one of permanent, temporary, relocated, replaced, dissolved, unspecified) | nulloptionalWhat kind of evidence closed the place: permanent, temporary, relocated, replaced, dissolved, or unspecified. Null whenever status is not 'closed' - an open or unknown verdict has no closure to attribute.