Content
A content object is one row of a catalog: an exhibitor, a session, a food stand. Its data holds a value per column. A row becomes a place on the map when its placement column (usually a booth or room number) matches the floor plan; every edit reaches the live map as it lands.
Address rows by Waygo's content_id, or by your identifier through the external-id endpoints when the catalog has an external ID column (content_external_id_key). Scopes: content:read, content:write, content:delete.
ENDPOINTS
POST /content/v1/:catalog_id
GET /content/v1/:catalog_id
GET /content/v1/:catalog_id/:content_id
PUT /content/v1/:catalog_id/:content_id
DELETE /content/v1/:catalog_id/:content_id
GET /content/v1/:catalog_id/external-id/:external_id
PUT /content/v1/:catalog_id/external-id/:external_id
DELETE /content/v1/:catalog_id/external-id/:external_id
PATCH /content/v1/:catalog_id/bulk
PUT /content/v1/:catalog_id/:content_id/:field_name/image
The content object
- Name
content_id- Type
- string
- Description
- Waygo's ID for the row.
- Name
catalog_id- Type
- string
- Description
- Its catalog.
- Name
account_id- Type
- string
- Description
- The account.
- Name
data- Type
- object
- Description
- One value per column, keyed by the column name. Values follow the column's type; an
imagecolumn holds the image's URL.
- Name
created_at / updated_at- Type
- timestamp
- Description
- Timestamps.
The content object
{
"content_id": "d7e1f77ece5f493093ccd1d09e009f5c",
"catalog_id": "exhibitors",
"account_id": "dash-dev-acct",
"data": {
"exhibitor_id": "EXH-4471",
"Company": "Acme Robotics",
"Booth": "201",
"Category": "Robotics",
"Website": "https://acme.example",
"Logo": "https://storage.waygomaps.com/…/acme.png"
},
"created_at": "2026-07-01T09:00:00",
"updated_at": "2026-09-18T19:44:21"
}
Create content
Body
- Name
data- Type
- object
- Description
- The row's values. A key that is not a column yet is added to the catalog's columns as a
string.
POST /content/v1/:catalog_id
curl -X POST https://api.waygomaps.com/content/v1/exhibitors \
-H "Waygo-API-Key: $WAYGO_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "data": { "exhibitor_id": "EXH-4471", "Company": "Acme Robotics", "Booth": "201", "Category": "Robotics" } }'
Response (201)
{ "content_id": "d7e1f77e…", "catalog_id": "exhibitors", "data": { "exhibitor_id": "EXH-4471", "Company": "Acme Robotics", "Booth": "201", "Category": "Robotics" }, "…": "…" }
List content
Optional parameters
- Name
skip- Type
- integer
- Description
- Default
0.
- Name
limit- Type
- integer
- Description
- Default
20.
- Name
search_query- Type
- string
- Description
- Only rows whose values contain this text.
- Name
sort- Type
- string[]
- Description
- Sort by a field;
-for descending. Repeat for several.
GET /content/v1/:catalog_id
curl "https://api.waygomaps.com/content/v1/exhibitors?search_query=robot&sort=-updated_at&limit=20" \
-H "Waygo-API-Key: $WAYGO_API_KEY"
Response
{ "contents": [ { "content_id": "d7e1f77e…", "data": { "…": "…" } } ], "total": 1, "skip": 0, "limit": 20 }
Retrieve content
One row by Waygo's ID. By your own ID: GET /content/v1/:catalog_id/external-id/:external_id.
GET /content/v1/:catalog_id/:content_id
curl https://api.waygomaps.com/content/v1/exhibitors/d7e1f77ece5f493093ccd1d09e009f5c \
-H "Waygo-API-Key: $WAYGO_API_KEY"
Update content
Merges data into the row: keys you send change, keys you leave out stay. By your own ID: PUT /content/v1/:catalog_id/external-id/:external_id (answers 404 when no row has that ID; create it then).
PUT /content/v1/:catalog_id/:content_id
curl -X PUT https://api.waygomaps.com/content/v1/exhibitors/d7e1f77ece5f493093ccd1d09e009f5c \
-H "Waygo-API-Key: $WAYGO_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "data": { "Booth": "205" } }'
Delete content
Removes the row and its places on every map. By your own ID: DELETE /content/v1/:catalog_id/external-id/:external_id.
DELETE /content/v1/:catalog_id/:content_id
curl -X DELETE https://api.waygomaps.com/content/v1/exhibitors/d7e1f77ece5f493093ccd1d09e009f5c \
-H "Waygo-API-Key: $WAYGO_API_KEY"
Response
204 No Content
Bulk patch
Apply partial updates to many rows in one request.
Body
- Name
updates- Type
- array
- Description
{ content_id, changes }per row;changesis merged into the row'sdata.
PATCH /content/v1/:catalog_id/bulk
curl -X PATCH https://api.waygomaps.com/content/v1/exhibitors/bulk \
-H "Waygo-API-Key: $WAYGO_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"updates": [
{ "content_id": "d7e1f77ece5f493093ccd1d09e009f5c", "changes": { "Booth": "205" } },
{ "content_id": "85e174403f154871b6b094716515b814", "changes": { "Category": "Components" } }
]
}'
Response
{ "updated": [ { "content_id": "d7e1f77e…", "data": { "…": "…" } }, { "content_id": "85e17440…", "data": { "…": "…" } } ] }
Upload an image
Upload a file into an image column of a row (multipart file: JPEG, PNG, TIFF, SVG). The stored image's URL becomes the column's value. Alternatively put a public image URL in the column directly with an update.
Errors
- Name
404- Description
- The column does not exist.
- Name
400- Description
- The column is not an
imagecolumn, or the file type is not accepted.
PUT /content/v1/:catalog_id/:content_id/:field_name/image
curl -X PUT https://api.waygomaps.com/content/v1/exhibitors/d7e1f77ece5f493093ccd1d09e009f5c/Logo/image \
-H "Waygo-API-Key: $WAYGO_API_KEY" \
-F "file=@acme-logo.png;type=image/png"