Credits or passes?
Both work the same way; they differ in what the client ends up holding. Credits are a currency-like balance spent across whatever the studio prices in credits. One endpoint, one balance per client. Entry passes are counted entries that belong to a pass group. A client holds a separate balance per group, and an entry granted into one group cannot be spent in another.1. Find your clients
bookings.lastBookingCompletedDate is more than six months old and whose
marketingConsent is 1.
Keep each client’s numeric id. That is what the grant endpoints expect,
not the opaque _id.
2. Pick a pass group
Skip this step for credits, and skip it for passes if the studio has only one group.passGroupId entirely and entries land in the studio’s default group,
which is what integrations written before multi-group support do.
3. Grant to one client
numberOfCredits is the client’s balance after the grant, not the amount
you added.
You send a duration, not an expiry date — Zenamu computes validTo from the
moment of the grant. See Grant validity for the
per-unit ceilings.
Set price to 0 for a gift. The value is recorded on the grant, so use the
real amount when the client actually paid you.
Passes work identically at /v1/clients/123/passes, returning numberOfEntries
and accepting an optional passGroupId.
4. Grant in bulk
Up to 100 clients per request. A client may appear only once in a batch. One call instead of a hundred keeps you well inside the rate limit:sendEmail applies to the whole batch. Items are processed sequentially, in the
order you send them.
Partial success
A bulk response is200 even when items failed. The batch does not roll back.
summary.failedClientIds identifies the failed items. It does not make a retry
appropriate by itself. Inspect each result and correct permanent errors first:
Handling errors
In a bulk pass grant, a bad or plan-blocked
passGroupId is a failed item inside
the 200 response. It does not change the top-level status.
Suppressing emails
Every grant emails the client by default. SetsendEmail to false when you
send your own campaign email, or when correcting a mistake the client should not
hear about twice.
