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"
}

GET/catalogs/v1

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

API KEY SCOPE
catalogs:read
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
}

POST/catalogs/v1

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

API KEY SCOPE
catalogs:write
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": { "…": "…" }, "…": "…" }

GET/catalogs/v1/:catalog_id

Retrieve a catalog

The catalog object, without its rows.

GET /catalogs/v1/:catalog_id

API KEY SCOPE
catalogs:read
curl https://api.waygomaps.com/catalogs/v1/exhibitors \
  -H "Waygo-API-Key: $WAYGO_API_KEY"

PUT/catalogs/v1/:catalog_id

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

API KEY SCOPE
catalogs:write
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/catalogs/v1/:catalog_id

Delete a catalog

Deletes the catalog, every row in it, and its placement rules; the rows leave every map at once.

DELETE /catalogs/v1/:catalog_id

API KEY SCOPE
catalogs:delete
curl -X DELETE https://api.waygomaps.com/catalogs/v1/exhibitors \
  -H "Waygo-API-Key: $WAYGO_API_KEY"

Response

204 No Content

PATCH/catalogs/v1/:catalog_id/schema

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

API KEY SCOPE
catalogs:write
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", "…": "…" }, "…": "…" }

POST/catalogs/v1/csv

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

API KEY SCOPE
catalogs:write
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…" } ]
}

PUT/catalogs/v1/:catalog_id/csv

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

API KEY SCOPE
catalogs:write
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"

GET/catalogs/v1/:catalog_id/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 desc for timestamps, asc for 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_at columns. Default false.

GET /catalogs/v1/:catalog_id/csv

API KEY SCOPE
catalogs:read
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

GET/catalogs/v1/:catalog_id/content

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

API KEY SCOPE
content:read
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": "…" }
]