Skip to main content
Research Preview — This API is under development.

Verify stamp

Verify a single location stamp’s internal validity — checks cryptographic signatures, structure, and signal consistency. This endpoint does not assess how well the stamp supports a claim; use verify proof for that.
POST /verify/v0/stamp

Request body

stamp
LocationStamp
required
The location stamp to verify. See LocationStamp for the full type definition.Key fields: lpVersion, locationType, location, srs, temporalFootprint, plugin, pluginVersion, signals, signatures.

Example request

curl -X POST https://api.astral.global/verify/v0/stamp \
  -H "Content-Type: application/json" \
  -H "X-API-Key: your-api-key" \
  -d '{
    "stamp": {
      "lpVersion": "0.2",
      "locationType": "geojson-point",
      "location": { "type": "Point", "coordinates": [-122.4194, 37.7749] },
      "srs": "http://www.opengis.net/def/crs/OGC/1.3/CRS84",
      "temporalFootprint": {
        "start": 1706901000,
        "end": 1706901060
      },
      "plugin": "proofmode",
      "pluginVersion": "0.1.0",
      "signals": { "sensorData": "..." },
      "signatures": [{
        "signer": { "scheme": "device-pubkey", "value": "0xabcd..." },
        "algorithm": "secp256k1",
        "value": "0x...",
        "timestamp": 1706901030
      }]
    }
  }'

Response

valid
boolean
required
Overall validity — true only if all checks pass.
signaturesValid
boolean
required
Whether all cryptographic signatures verified successfully.
structureValid
boolean
required
Whether the stamp conforms to the expected structure for its plugin.
signalsConsistent
boolean
required
Whether internal signals are self-consistent.
details
object
required
Plugin-specific verification details. Contents vary by plugin.

Example response

{
  "valid": true,
  "signaturesValid": true,
  "structureValid": true,
  "signalsConsistent": true,
  "details": {
    "plugin": "proofmode",
    "hashVerified": true,
    "certificateChainValid": true
  }
}

Errors

Errors follow RFC 7807:
{
  "type": "https://astral.global/errors/invalid-input",
  "title": "Invalid Input",
  "status": 400,
  "detail": "stamp.signatures is required"
}
TypeStatusDescription
invalid-input400Malformed stamp or missing required fields
not-implemented501Plugin not supported
internal500Internal verification error
rate-limited429Too many requests
unauthorized401Invalid or missing API key

SDK: Verify

See the SDK documentation for client-side usage