Tartary deeds, for any game or world

Tartary is land surveyed from the Bitcoin chain: district N is block N, and every block's land, its biome, height, climate and settlement, is worked out from the block itself, the same way by everyone. Each district is split into parcels. A deed is a token (a 1-sat ordinal) for one parcel, and whoever holds the token holds the land.

Anyone can use the land and the deeds: a game, a metaverse, a map, a marketplace. Reading needs no key and no account, and the API is open to every website.

The API is https://api.vulpinenetwork.com/api.

One deed

curl https://api.vulpinenetwork.com/api/tartary/deed/170.3

A parcel is named <district>.<index>. The answer is metadata in the shape game engines, wallets and NFT tools already read, so most can load it as it is:

{
  "name": "Tartary 170.3",
  "description": "Parcel 3 of district 170 in Tartary, ...",
  "image": "https://api.vulpinenetwork.com/api/deed/land/170.3.svg",
  "attributes": [
    { "trait_type": "District", "value": 170 },
    { "trait_type": "Parcel", "value": 3 },
    { "trait_type": "Biome", "value": "mangrove" },
    { "trait_type": "Terrain", "value": "mangrove" },
    { "trait_type": "Elevation", "value": "lowland" }
  ],
  "parcel": "170.3", "district": 170, "index": 3,
  "founded": true,
  "holder": "the address that holds the deed now",
  "outpoint": "the deed token's txid.vout",
  "derivation": "tartary-1"
}
FieldWhat it is
name, description, image, attributesThe usual token metadata. image is the deed's picture, an SVG.
parcel, district, indexWhere the land is.
foundedWhether anyone holds a deed for it yet. An unfounded parcel still has its land.
holderThe Bitcoin address that holds the deed today. The reader follows the token when it is sent or sold.
outpointWhere the deed's token sits on the chain now (txid.vout), for anyone who wants to check it themselves.
derivationThe rule the land was worked out with. It never changes for a given name.

Every deed at once

curl "https://api.vulpinenetwork.com/api/tartary/deeds/all?limit=1000"

The answer is {"deeds": [...], "next": 1000}. Each deed has seq, parcel, district, holder, outpoint and ts. Ask again with ?after= the next you were given, until next is null.

The land itself

You wantAsk for
A window of districts, with biome, terrain, climate and settlementGET /api/tartary/map?from=0&count=100
One district in fullGET /api/tartary/district/:district
A district's parcels, founded or notGET /api/tartary/parcels/:district
One parcel, with what is built on itGET /api/tartary/parcel/:parcel
A deed's pictureGET /api/deed/land/:parcel.svg
The deeds an address holdsGET /api/tartary/founded/:address

District 170, for example, is mangrove (mangrove), elevation lowland, with 2 parcels.

In a game, in a few lines

const API = 'https://api.vulpinenetwork.com/api'

// one parcel: what to draw, and who owns it
const deed = await (await fetch(`${API}/tartary/deed/170.3`)).json()
const biome = deed.attributes.find((a) => a.trait_type === 'Biome').value

// every deed, a page at a time
let after = 0, all = []
while (after !== null) {
  const page = await (await fetch(`${API}/tartary/deeds/all?limit=1000&after=${after}`)).json()
  all = all.concat(page.deeds); after = page.next
}

To know a player holds a deed, compare holder with the address their wallet controls, and have them sign a message with that address to prove it.