> ## Documentation Index
> Fetch the complete documentation index at: https://docs.astral.global/llms.txt
> Use this file to discover all available pages before exploring further.

# POST /compute/v0/distance

> Calculate distance between two geometries

<Warning>
  **Research Preview** — This API is under development.
</Warning>

# Distance

Calculate the distance between two geometries in meters.

```
POST /compute/v0/distance
```

## Request body

<ParamField body="chainId" type="number" required>
  Target chain ID. All UIDs must exist on this chain.
</ParamField>

<ParamField body="from" type="Input" required>
  First geometry. See [Input types](/api-reference/types#input) for accepted formats.
</ParamField>

<ParamField body="to" type="Input" required>
  Second geometry.
</ParamField>

<ParamField body="schema" type="string">
  EAS schema UID. The server uses a default schema if not provided.
</ParamField>

<ParamField body="recipient" type="string">
  Ethereum address to receive the attestation. Defaults to the zero address.
</ParamField>

## Example request

<CodeGroup>
  ```bash cURL theme={null}
  curl -X POST https://staging-api.astral.global/compute/v0/distance \
    -H "Content-Type: application/json" \
    -H "X-API-Key: your-api-key" \
    -d '{
      "chainId": 84532,
      "from": "0xabc123...",
      "to": {
        "type": "Point",
        "coordinates": [2.2945, 48.8584]
      },
      "recipient": "0xdef456..."
    }'
  ```

  ```typescript TypeScript theme={null}
  const response = await fetch('https://staging-api.astral.global/compute/v0/distance', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
      'X-API-Key': 'your-api-key'
    },
    body: JSON.stringify({
      chainId: 84532,
      from: '0xabc123...',
      to: { type: 'Point', coordinates: [2.2945, 48.8584] },
      recipient: '0xdef456...'
    })
  });

  const result = await response.json();
  ```
</CodeGroup>

## Response

Returns a [NumericComputeResponse](/api-reference/types#numericcomputeresponse).

<ResponseField name="result" type="number" required>
  Distance in meters (e.g., `523.45`).
</ResponseField>

<ResponseField name="units" type="string" required>
  Always `"meters"`.
</ResponseField>

<ResponseField name="operation" type="string" required>
  Always `"distance"`.
</ResponseField>

<ResponseField name="timestamp" type="number" required>
  Unix timestamp of computation.
</ResponseField>

<ResponseField name="inputRefs" type="string[]" required>
  Array of input references (UIDs or geometry hashes).
</ResponseField>

<ResponseField name="attestation" type="AttestationData" required>
  Signed EAS attestation. See [AttestationData](/api-reference/types#attestationdata).
</ResponseField>

<ResponseField name="delegatedAttestation" type="DelegatedAttestationData" required>
  Signature for delegated onchain submission. See [DelegatedAttestationData](/api-reference/types#delegatedattestationdata).
</ResponseField>

## Example response

```json theme={null}
{
  "result": 523.45,
  "units": "meters",
  "operation": "distance",
  "timestamp": 1706400000,
  "inputRefs": [
    "0xabc123...",
    "0x7d3e8f..."
  ],
  "attestation": {
    "schema": "0x...",
    "attester": "0x590fdb53ed3f0B52694876d42367192a5336700F",
    "recipient": "0xdef456...",
    "data": "0x...",
    "revocable": true,
    "refUID": "0x0000000000000000000000000000000000000000000000000000000000000000",
    "signature": "0x..."
  },
  "delegatedAttestation": {
    "signature": "0x...",
    "attester": "0x590fdb53ed3f0B52694876d42367192a5336700F",
    "deadline": 1706403600,
    "nonce": 0
  }
}
```

## Notes

* Distance is calculated using PostGIS `ST_Distance` with geodetic coordinates
* Result is in meters with centimeter precision
* The onchain attested value is scaled to **centimeters** (integer) for EVM compatibility
* For raw GeoJSON inputs, a keccak256 hash is used in `inputRefs`

<Card title="SDK Method" icon="code" href="/sdk/compute#distance">
  See `astral.compute.distance()`
</Card>
