Skip to main content

GraphQL API Documentation

This document describes the GraphQL API for accessing location proof attestations in the Astral Protocol API.

Overview

The GraphQL API provides a flexible interface for querying location proofs with filtering, aggregation, and mutation capabilities.

Endpoint

The GraphQL API is available at:

/graphql

Schema

The API provides the following main types and operations:

Queries

locationProof(uid: ID!): LocationProof

Retrieves a single location proof by its unique identifier.

locationProofs(filter: LocationProofFilter): [LocationProof!]!

Retrieves a list of location proofs with optional filtering.

locationProofsCount(filter: LocationProofFilter): Int!

Returns the count of location proofs matching the filter criteria.

locationProofsStats: LocationProofStats!

Returns statistics about the location proofs, including counts by blockchain.

Mutations

The GraphQL API is intentionally read-only. There are no mutations available to modify data.

Types

LocationProof

Represents a location proof attestation.

type LocationProof {
uid: ID!
chain: String!
prover: String!
subject: String
timestamp: String
eventTimestamp: String!
srs: String
locationType: String!
location: String!
longitude: Float
latitude: Float
geometry: GeoJSONGeometry
recipeTypes: [String]
recipePayloads: [String]
mediaTypes: [String]
mediaData: [String]
memo: String
revoked: Boolean!
createdAt: String!
updatedAt: String!
}

GeoJSONGeometry

Represents GeoJSON geometry data.

type GeoJSONGeometry {
type: String!
coordinates: JSON!
}

LocationProofFilter

Input type for filtering location proofs.

input LocationProofFilter {
chain: String
prover: String
subject: String
fromTimestamp: String
toTimestamp: String
bbox: [Float]
limit: Int
offset: Int
}

LocationProofStats

Statistics about location proofs.

type LocationProofStats {
total: Int!
byChain: [ChainCount!]!
}

type ChainCount {
chain: String!
count: Int!
}

Example Queries

Get a single location proof

query GetLocationProof {
locationProof(uid: "0xa1d140a3243443eb10320d758235f633eb0db20a3374866f6f53001ac3fcd2c6") {
uid
chain
prover
eventTimestamp
locationType
longitude
latitude
geometry {
type
coordinates
}
}
}

Get location proofs with filtering

query GetLocationProofs {
locationProofs(filter: {
chain: "sepolia",
limit: 5,
offset: 0
}) {
uid
chain
prover
eventTimestamp
locationType
revoked
}
}

Get location proofs with spatial filter

query GetLocationProofsInArea {
locationProofs(filter: {
bbox: [-74.1, 40.6, -73.7, 40.9], # NYC area
limit: 10
}) {
uid
chain
prover
eventTimestamp
location
longitude
latitude
}
}

Get location proof statistics

query GetStats {
locationProofsStats {
total
byChain {
chain
count
}
}
}

Count location proofs by chain

query CountByChain {
arbitrum: locationProofsCount(filter: { chain: "arbitrum" })
sepolia: locationProofsCount(filter: { chain: "sepolia" })
base: locationProofsCount(filter: { chain: "base" })
}

Integration with Client Applications

JavaScript Example

async function fetchLocationProofs() {
const response = await fetch('/graphql', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
query: `
query GetRecentProofs {
locationProofs(filter: { limit: 10 }) {
uid
chain
prover
eventTimestamp
locationType
location
longitude
latitude
}
}
`,
}),
});

const result = await response.json();
return result.data.locationProofs;
}

Tools

The GraphQL API includes introspection, allowing tools like GraphQL Playground and Apollo Studio Explorer to explore the schema and test queries.