Add an activity to a contact

Activities power the contact timeline, trigger workflows, and feed into RFM (recency, frequency, monetary) scoring.

All activities have a spend that is automatically applied to the contacts lifetime value or LTV.


Creating an activity

POST /activities

At minimum, provide the contact ID, activity type, source, and when it happened:

{
  "contact": 1042,
  "type": "Purchase",
  "source": "website",
  "happenedAt": "2026-04-07T14:30:00+00:00",
  "spend": 4500,
  "currencyCode": "GBP"
}

The spend field is in the smallest currency unit — 4500 means £45.00 for GBP, or $45.00 for USD.

Activity types

The type field must be one of these values:

Type
When to use
Additional fields

Booking

Hotel or venue reservation

Include a booking object (see below)

Checked in

Guest arrives at venue

Checked out

Guest departs venue

Purchase

Non-Glu purchase or transaction

spend, currencyCode

Shopify order

Order from Shopify

Typically created automatically

Gift card registered

Gift card added to a contact

giftCard Id

Login

Member logged in

Connected to wifi

Guest connected to venue wifi

Membership started

Contact started a membership

Changed tier

Contact moved to a different tier

Membership cancelled

Contact cancelled membership

Referral invite created

Contact sent a referral

referralInvite (IRI reference)

Referral invite completed

Referral was completed

referralInvite (IRI reference)

Golf reservation

Table reservation

Recording a purchase

For purchases made outside of Glu (in-store POS, external e-commerce, etc.):

The externalReference field is important for deduplication — if you send the same activity type with the same external reference twice, Glu will recognise it as a duplicate rather than creating two entries.

Deduplication

Glu deduplicates activities using two methods:

  1. By externalReference: If an activity of the same type already exists with the same external reference within the organisation, the existing activity is returned instead of creating a duplicate.

  2. By giftCard: For gift card related activities, if an activity already exists for the same gift card, it won't be duplicated.

Always include an externalReference when syncing activities from external systems to make your integration idempotent.

Retrieving a single activity

GET /activities/{id}

Custom fields

Common integration patterns

Syncing purchases from your POS

Record every in-store transaction to build a complete picture of customer spending:

The contact's totalSpend, lastInteractedAt, and RFM scores update automatically.

Enriching contacts from your CRM

Sync custom attributes from an external CRM or data source:

Hotel PMS integration

Record bookings and check-in/check-out events from your property management system:

Activities and workflows

Activities can trigger workflows. For example, a workflow with a booking_created trigger will automatically run when a Booking activity is created. This lets you build automations like:

  • Send a welcome email when a booking is recorded

  • Award loyalty points when a purchase activity is logged

  • Upgrade a membership tier when spend thresholds are met

You don't need to do anything extra — just create the activity and any matching active workflows will execute.

Tips

  • Always include externalReference when syncing from external systems to prevent duplicates on retry.

  • Use source to identify where the activity came from — this helps when debugging and when building workflow conditions.

  • Amounts are always in lowest denomination — pence for GBP, cents for USD/EUR.

  • Custom field names are case-sensitive — use the exact fieldName from the custom field definition.

  • Custom field values are validated — the API will return a 422 error if the value doesn't match the field type or isn't in the allowed options for a Select field.

  • Contact lookup by email — if you don't have the contact ID, use GET /contacts?emailAddress[]=email@example.com to find it first, or use POST /contacts which will create or update by email and return the contact with its ID.

Last updated