Set your key and base URL:
export BOOM_KEY="boom_org_YOUR_KEY_HERE"
export BASE="https://app.useboom.ai/api/v1/cdp"
Upsert a person
curl -X POST "$BASE/people" \
-H "Authorization: Bearer $BOOM_KEY" \
-H "Content-Type: application/json" \
-d '{"externalId":"user_123","attributes":{"email":"a@b.com","plan":"pro","mrr":49}}'
Returns { "externalId": "user_123", "created": true }.Check which object types exist
curl "$BASE/custom-objects/types" -H "Authorization: Bearer $BOOM_KEY"
Object types must already exist before you can upsert objects of that
type.Upsert a custom object
curl -X POST "$BASE/custom-objects" \
-H "Authorization: Bearer $BOOM_KEY" \
-H "Content-Type: application/json" \
-d '{"type":"order","externalId":"ord_998","displayName":"Order #998","attributes":{"total":120.5,"status":"paid"}}'
Link them
curl -X POST "$BASE/relationships" \
-H "Authorization: Bearer $BOOM_KEY" \
-H "Content-Type: application/json" \
-d '{"personExternalId":"user_123","customObjectType":"order","customObjectExternalId":"ord_998","role":"placed"}'
Run any upsert twice — the first returns created: true, the second
created: false. That’s the upsert working as intended.