Catalogs
A content catalog is a table of one kind of content (Exhibitors, Sessions, Amenities): its columns are the data_schema, its rows are content. Rows are placed on maps through placement rules your Waygo team sets up, usually by a booth or room number column.
Catalogs belong to an account; use the Waygo-Account header for a sub-account's catalogs. The scopes are catalogs:read, catalogs:write and catalogs:delete.
ENDPOINTS
GET /catalogs/v1
POST /catalogs/v1
GET /catalogs/v1/:catalog_id
PUT /catalogs/v1/:catalog_id
DELETE /catalogs/v1/:catalog_id
PATCH /catalogs/v1/:catalog_id/schema
POST /catalogs/v1/csv
PUT /catalogs/v1/:catalog_id/csv
GET /catalogs/v1/:catalog_id/csv
GET /catalogs/v1/:catalog_id/content
The catalog object
- Name
catalog_id- Type
- string
- Description
- The catalog's ID; yours if you set one at creation, otherwise generated.
- Name
account_id- Type
- string
- Description
- The account it belongs to.
- Name
title- Type
- string
- Description
- The catalog's name. Visitors see it under a place's name (“Acme Robotics · Exhibitors”), so keep it a plain category word.
- Name
description- Type
- string | null
- Description
- Optional.
- Name
data_schema- Type
- object
- Description
- The columns: a map of column name to type. Types:
string,int,float,boolean,image,url,email,phone,date,time,datetime.
- Name
is_landmark_catalog- Type
- boolean
- Description
- Landmark rows are used as reference points in directions (“turn left at the Registration Desk”).
- Name
content_title_key- Type
- string | null
- Description
- The column that is a row's name on the map. Default
Title.
- Name
content_description_key- Type
- string | null
- Description
- The column shown under the name.
- Name
content_display_img_key- Type
- string | null
- Description
- The image column shown as the row's picture.
- Name
content_external_id_key- Type
- string | null
- Description
- The column holding your own identifier, used by the external-ID content endpoints.
- Name
created_at / updated_at- Type
- timestamp
- Description
- Timestamps.
The catalog object
{
"catalog_id": "exhibitors",
"account_id": "dash-dev-acct",
"title": "Exhibitors",
"description": "Exhibitors at Acme Expo 2027",
"data_schema": {
"exhibitor_id": "string",
"Company": "string",
"Booth": "string",
"Category": "string",
"Description": "string",
"Website": "url",
"Logo": "image"
},
"is_landmark_catalog": false,
"content_title_key": "Company",
"content_description_key": "Description",
"content_display_img_key": "Logo",
"content_external_id_key": "exhibitor_id",
"created_at": "2026-07-01T09:00:00",
"updated_at": "2026-09-18T19:44:21"
}
List catalogs
Optional parameters
- Name
skip- Type
- integer
- Description
- Default
0.
- Name
limit- Type
- integer
- Description
- Default
20.
- Name
sort- Type
- string[]
- Description
- Sort by any catalog field; prefix with
-for descending (-updated_at). Repeat the parameter to sort by several.
GET /catalogs/v1
curl "https://api.waygomaps.com/catalogs/v1?sort=-updated_at&limit=20" \
-H "Waygo-API-Key: $WAYGO_API_KEY"
Response
{
"catalogs": [ { "catalog_id": "exhibitors", "title": "Exhibitors", "…": "…" } ],
"total": 3,
"skip": 0,
"limit": 20
}
Create a catalog
An empty catalog, optionally with its columns. To create one from a spreadsheet, use Create a catalog from CSV instead.
Body
- Name
title- Type
- string
- Description
- Required, up to 50 characters.
- Name
catalog_id- Type
- string
- Description
- Your own ID (up to 32 characters, unique in the account). Generated when omitted.
- Name
description- Type
- string
- Description
- Optional.
- Name
data_schema- Type
- object
- Description
- Columns and their types. Default
{}.
- Name
is_landmark_catalog- Type
- boolean
- Description
- Default
false.
- Name
content_title_key- Type
- string
- Description
- Default
Title.
- Name
content_description_key / content_display_img_key / content_external_id_key- Type
- string
- Description
- The special columns, when the schema has them.
POST /catalogs/v1
curl -X POST https://api.waygomaps.com/catalogs/v1 \
-H "Waygo-API-Key: $WAYGO_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"catalog_id": "exhibitors",
"title": "Exhibitors",
"data_schema": { "exhibitor_id": "string", "Company": "string", "Booth": "string", "Website": "url", "Logo": "image" },
"content_title_key": "Company",
"content_display_img_key": "Logo",
"content_external_id_key": "exhibitor_id"
}'
Response (201)
{ "catalog_id": "exhibitors", "title": "Exhibitors", "data_schema": { "…": "…" }, "…": "…" }
Retrieve a catalog
The catalog object, without its rows.
GET /catalogs/v1/:catalog_id
curl https://api.waygomaps.com/catalogs/v1/exhibitors \
-H "Waygo-API-Key: $WAYGO_API_KEY"
Update a catalog
The catalog's settings, not its columns or rows: title, description, is_landmark_catalog and the four special-column keys. Only the fields you send change. Columns are changed with Patch the columns.
PUT /catalogs/v1/:catalog_id
curl -X PUT https://api.waygomaps.com/catalogs/v1/exhibitors \
-H "Waygo-API-Key: $WAYGO_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "title": "Exhibitors 2027", "content_description_key": "Description" }'
Delete a catalog
Deletes the catalog, every row in it, and its placement rules; the rows leave every map at once.
There is no undo. Export the catalog as CSV first if you may need it back.
DELETE /catalogs/v1/:catalog_id
curl -X DELETE https://api.waygomaps.com/catalogs/v1/exhibitors \
-H "Waygo-API-Key: $WAYGO_API_KEY"
Response
204 No Content
Patch the columns
Add, remove, rename or retype columns with a list of JSON Patch operations against data_schema. Removing a column removes that value from every row; renaming (move) keeps the values.
An operation
{ "op": "add" | "remove" | "replace" | "move", "path": "/ColumnName", "value": "<type>", "from": "/OldName" }
PATCH /catalogs/v1/:catalog_id/schema
curl -X PATCH https://api.waygomaps.com/catalogs/v1/exhibitors/schema \
-H "Waygo-API-Key: $WAYGO_API_KEY" \
-H "Content-Type: application/json" \
-d '[
{ "op": "add", "path": "/Sponsor tier", "value": "string" },
{ "op": "replace", "path": "/Website", "value": "url" },
{ "op": "move", "from": "/Stand", "path": "/Booth" },
{ "op": "remove", "path": "/Notes" }
]'
Response
{ "catalog_id": "exhibitors", "data_schema": { "Company": "string", "Booth": "string", "Website": "url", "Sponsor tier": "string", "…": "…" }, "…": "…" }
Create a catalog from CSV
A multipart upload. The CSV's headers become the columns and every row becomes content.
Form fields
- Name
file- Type
- file
- Description
- A CSV file (
text/csv), headers in the first row, UTF-8.
- Name
title- Type
- string
- Description
- The catalog's title.
- Name
catalog_id- Type
- string
- Description
- Your own ID. Generated when omitted.
- Name
description- Type
- string
- Description
- Optional.
- Name
is_landmark_catalog- Type
- boolean
- Description
- Default
false.
POST /catalogs/v1/csv
curl -X POST https://api.waygomaps.com/catalogs/v1/csv \
-H "Waygo-API-Key: $WAYGO_API_KEY" \
-F "file=@exhibitors.csv;type=text/csv" \
-F "title=Exhibitors" \
-F "catalog_id=exhibitors"
Response (201)
{
"catalog": { "catalog_id": "exhibitors", "title": "Exhibitors", "data_schema": { "Company": "string", "Booth": "string", "…": "…" }, "…": "…" },
"content_mappings": [ { "external_id": "EXH-4471", "content_id": "d7e1f77e…" } ]
}
Replace catalog contents with CSV
Rebuild the catalog from a file: rows are replaced and the columns follow the headers. Rows that keep their placement column (the booth number) stay on the map. Creates the catalog if the ID does not exist yet.
Form fields
- Name
file- Type
- file
- Description
- The CSV.
- Name
mapping- Type
- JSON string
- Description
- Optional column mapping: a list of
{ "name": "<CSV header>", "field_name": "<catalog column>", "type": "<type>" }.
PUT /catalogs/v1/:catalog_id/csv
curl -X PUT https://api.waygomaps.com/catalogs/v1/exhibitors/csv \
-H "Waygo-API-Key: $WAYGO_API_KEY" \
-F "file=@exhibitors-2027-09-18.csv;type=text/csv"
Export a catalog as CSV
The rows as a CSV file, columns in data_schema order. UTF-8 with a byte-order mark; cells that look like formulas are escaped.
Optional parameters
- Name
sort_key- Type
- string
- Description
created_at(default),updated_at, or a column name.
- Name
sort_dir- Type
- 'asc' | 'desc'
- Description
- Default
descfor timestamps,ascfor columns.
- Name
search_query- Type
- string
- Description
- Only rows whose values contain this text.
- Name
include_system_fields- Type
- boolean
- Description
- Append
_content_id,_created_at,_updated_atcolumns. Defaultfalse.
GET /catalogs/v1/:catalog_id/csv
curl "https://api.waygomaps.com/catalogs/v1/exhibitors/csv?sort_key=Company&include_system_fields=true" \
-H "Waygo-API-Key: $WAYGO_API_KEY" -o exhibitors.csv
List all rows
Every row of the catalog in one response. For pages, search and sorting use List content.
GET /catalogs/v1/:catalog_id/content
curl https://api.waygomaps.com/catalogs/v1/exhibitors/content \
-H "Waygo-API-Key: $WAYGO_API_KEY"
Response
[
{ "content_id": "d7e1f77e…", "catalog_id": "exhibitors", "data": { "Company": "Acme Robotics", "Booth": "201" }, "created_at": "…", "updated_at": "…" }
]