Feed format a2ahello-offers/1
For businesses without an API. One shape for anything an agent might look up and act on: trips, products, services, rooms, classes, events. Send it as JSON or as the equivalent CSV, by upload or from an HTTPS URL on one of your verified domains (refreshed hourly).
Limits: 5 MB, 2,000 items, 20,000 variants, 50,000 availability entries.
JSON
{
"schema": "a2ahello-offers/1",
"sample": true,
"generated_at": "2026-10-16T12:00:00Z",
"business": { "name": "Cobalt Ridge Expeditions (sample)", "url": "https://demo.openforagents.ai/samples/travel" },
"locations": [ { "id": "cusco", "name": "Cusco meeting point", "address": "...", "timezone": "America/Lima" } ],
"items": [ {
"id": "inca-trail-8d",
"type": "trip",
"title": "Inca Trail Trek, 8 days",
"description": "...",
"url": "https://.../trips/inca-trail-8d",
"categories": ["trekking"],
"attributes": { "duration_days": 8, "difficulty": "moderate" },
"location_ids": ["cusco"],
"price": { "amount": "2490.00", "currency": "USD", "unit": "per_person" },
"action_url": "https://.../trips/inca-trail-8d/book",
"variants": [],
"availability": [ {
"start": "2027-05-03", "end": "2027-05-10",
"status": "limited", "quantity": 4,
"price": { "amount": "2690.00", "currency": "USD", "unit": "per_person" },
"location_id": "cusco",
"action_url": "https://.../book?departure=2027-05-03"
} ]
} ]
}
Rules
sample: true(optional, top level) marks demo data and is echoed in every tool result.locations[]:id,name, optionaladdress,geo,timezone; referenced bylocation_idsandlocation_id.typeis free text; suggested valuesproduct,service,trip,room,event,class.attributesis a flat map of string, number, or boolean values that you define.price.amountis a decimal string;currencyis ISO 4217.variants[](optional): each hasid,title,attributes, optionalprice,availability,action_url.- An
availabilityentry has optionalstart/end(ISO date for date windows, ISO date-time with offset for time slots; both absent means stock available now),statusinavailable | limited | sold_out | on_request, optionalquantity,price,location_id,attributes,action_url. - The most specific
action_urlwins (availability, then variant, then item). Every action URL must be on one of your verified domains; agents get a tracked link to it. - Every result carries
as_of(snapshot time) andstale: trueafter 48 hours.
How three business types map onto it
| Business | items[] | variants[] | availability[] | action_url |
|---|---|---|---|---|
| Tour operator (departures) | One per trip, type: trip | Optional (room type, private vs group) | One per departure: date window, status, quantity = seats left, per-person price | Departure booking page |
| Store (products) | One per product, type: product | Size, color, each with price | One undated entry per variant: status, quantity = stock | Product or variant page |
| Clinic (appointment slots) | One per service, type: service | Optional (in-person vs video) | One per slot: date-time window, location_id, attributes.provider | Booking link for that slot |
CSV
RFC 4180, UTF-8, header row, one row per availability entry (or per variant or item when there is none), item and variant columns repeated. Rows are grouped into items by item_id. Columns:
item_id, item_type, item_title, item_url, item_description, category, location_id, location_name, variant_id, variant_title, start, end, status, quantity, price_amount, currency, price_unit, action_url
Plus any attr.<name> columns, which become item attributes (or variant or availability attributes when prefixed variant.attr. or slot.attr.).
Generated tools
Importing a feed proposes three draft capabilities, answered from the latest snapshot without calling your systems. You can review them before publishing.
search_items:query?,type?,category?,location_id?,from?,to?,min_quantity?,max_price?,limit?(max 25).get_item:item_id.get_availability:item_id,variant_id?,from?,to?,location_id?,min_quantity?,limit?(max 50).