Keep map content in sync with your registration system or CRM
When your exhibitor list lives in another system, update the map from it. The Content API addresses rows by your identifiers, so a nightly job or a webhook handler upserts exhibitors, sessions or rooms without keeping Waygo's IDs anywhere. Changes reach the live map as they land.
Before you start
- An API key with
content:readandcontent:write(andcatalogs:writeif the job creates catalogs). See API keys. - The catalog's ID (Content catalogs → the catalog; it is shown under the title) and an external ID column set in Catalog settings, for example
exhibitor_id. - Requests carry
Waygo-API-Key, andWaygo-Accountwhen the catalog belongs to a sub-account. See Authentication.
Upsert one row by external ID
PUT /content/v1/{catalog_id}/external-id/{external_id} updates the row whose external ID matches. Only the fields you send change.
Update an exhibitor by your ID
curl -X PUT https://api.waygomaps.com/content/v1/exhibitors/external-id/EXH-4471 \
-H "Waygo-API-Key: $WAYGO_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"data": {
"Company": "Acme Robotics",
"Booth": "201",
"Category": "Robotics",
"Website": "https://acme.example"
}
}'
A 404 means no row carries that external ID yet: create it with POST /content/v1/{catalog_id}, putting the external ID in data under the column you set as the external ID. The map places the row as soon as its booth column matches a booth.
Many changes at once
PATCH /content/v1/{catalog_id}/bulk applies a list of partial updates keyed by Waygo's content_id in one request; use it when your job already knows the content IDs (for example from a first import that recorded them).
Bulk patch
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" } }
]
}'
Logos and images
PUT /content/v1/{catalog_id}/{content_id}/{field_name}/image uploads an image file into an image column of a row (multipart file). Or put a public image URL straight into the column's value.
Removing an exhibitor
DELETE /content/v1/{catalog_id}/external-id/{external_id}. The row leaves the map at once. Prefer clearing the booth column if the exhibitor may return; the row stays in the catalog, just not on the map.
Replace everything nightly instead
If your system is the only source of truth, the simplest job is a full replace: export the list as CSV and PUT /catalogs/v1/{catalog_id}/csv with the file. Rows keep their placement through their booth column. See Catalogs API.
What the map does with it
Nothing else is needed: content changes stream to the live map as they land, and the map republishes its labels by itself. If you want a change baked in immediately for a show-morning cutoff, POST /maps/v1/{map_id}/publish with {"targets": ["content_labels"]} runs a publish within your allowance. See Maps API.
Frequently asked questions
- Do I need to store Waygo's content IDs in my system?
- No. Set an external ID column on the catalog and address rows by your own IDs with the external-id endpoints.
- Does the map update after an API change, or do I have to publish?
- It updates as the change lands. Publishing bakes labels in for faster loads and runs by itself; call the publish endpoint only when you want it now.
- Which permissions does the API key need?
- content:read and content:write for rows; catalogs:write for CSV replaces and schema changes; maps:write to trigger a publish.
- Can I sync a sub-account's catalog?
- Yes. Add the Waygo-Account header with the sub-account's ID; the same key works for every sub-account of your account.