An offer or request for a free item, discoverable by approximate location.
tid
Timestamp-based ID
Properties
createdAt
string
datetime
Required
An RFC 3339 formatted timestamp.
description
string
Required
Required free text describing the item being offered or requested.
maxLength: 3000 bytesminLength: 1 bytesmaxGraphemes: 1500 graphemesminGraphemes: 1 graphemesgeohash
string
Required
Approximate location as a geohash, precision 6 (~1.2km cell). This is a privacy floor: indexers MUST truncate any finer-precision value to 6 characters before indexing or display.
maxLength: 6 bytesminLength: 1 bytesimageAlts
array
of
string
Optional
Alt text for images, parallel to the images array by index.
maxLength: 4 itemsimages
array
of
blob
Optional
Up to 4 images of the item, stored as blobs in the poster's repo.
maxLength: 4 itemsintent
string
Required
Whether the poster is giving away an item or looking for one.
offer, requestlocationName
string
Optional
Optional human-readable area name. App-populated via reverse geocoding of the geohash cell. Display only; MUST NOT be used for proximity matching or filtering.
maxLength: 300 bytesmaxGraphemes: 100 graphemesstatus
string
Optional
Current availability. Clients should treat a missing value as 'available'.
available, pending, gonetitle
string
Required
Required short title for the item being offered or requested.
maxLength: 200 bytesminLength: 1 bytesmaxGraphemes: 100 graphemesminGraphemes: 1 graphemesView raw schema
{
"key": "tid",
"type": "record",
"record": {
"type": "object",
"required": [
"title",
"intent",
"description",
"geohash",
"createdAt"
],
"properties": {
"title": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "Required short title for the item being offered or requested.",
"maxGraphemes": 100,
"minGraphemes": 1
},
"images": {
"type": "array",
"items": {
"type": "blob",
"accept": [
"image/jpeg",
"image/png",
"image/webp"
],
"maxSize": 1000000
},
"maxLength": 4,
"description": "Up to 4 images of the item, stored as blobs in the poster's repo."
},
"intent": {
"enum": [
"offer",
"request"
],
"type": "string",
"description": "Whether the poster is giving away an item or looking for one."
},
"status": {
"enum": [
"available",
"pending",
"gone"
],
"type": "string",
"description": "Current availability. Clients should treat a missing value as 'available'."
},
"geohash": {
"type": "string",
"maxLength": 6,
"minLength": 1,
"description": "Approximate location as a geohash, precision 6 (~1.2km cell). This is a privacy floor: indexers MUST truncate any finer-precision value to 6 characters before indexing or display."
},
"createdAt": {
"type": "string",
"format": "datetime"
},
"imageAlts": {
"type": "array",
"items": {
"type": "string",
"maxGraphemes": 1000
},
"maxLength": 4,
"description": "Alt text for images, parallel to the images array by index."
},
"description": {
"type": "string",
"maxLength": 3000,
"minLength": 1,
"description": "Required free text describing the item being offered or requested.",
"maxGraphemes": 1500,
"minGraphemes": 1
},
"locationName": {
"type": "string",
"maxLength": 300,
"description": "Optional human-readable area name. App-populated via reverse geocoding of the geohash cell. Display only; MUST NOT be used for proximity matching or filtering.",
"maxGraphemes": 100
}
}
},
"description": "An offer or request for a free item, discoverable by approximate location."
}