Skip to main content
TroopyDocs
Open Troopy
Troopy

API reference / Customers

Send what the users of the product did

What the users of the product of the business did, from its backend: 1 to 100 events in one call. Each event names the user by the id that the product has for the user, by the email, or by both, and says what the user did. A user that Troopy does not know becomes a customer who never paid. Troopy counts each event on the day of its time, and takes an event of the last 7 days only. Send each event one time: use an Idempotency-Key for a retry.

post/api/v1/customer-events

Authorization

HeaderAuthorization: Bearer <API key>
Or the headerX-API-Key: <API key>
API keyMake one in Troopy under Settings > API keys. It acts as you, in its workspace.

Other ways to call it

CLItroopy customers events
MCP toolNone. Call it over REST or with the CLI.
Rate limit120 calls in 60 seconds, for each key
RetriesSend an Idempotency-Key header. A retry with the same key gets the first answer back, and the operation runs one time.

Body

application/json
events*array<object>

At most 100 items

3 properties
user*object
3 properties
idstring

The id that the product has for the user

At least 1 characters · At most 200 characters

emailstring

At most 254 characters · email

namestring

At most 200 characters

name*string

What the user did, like project_created

At least 1 characters · At most 80 characters

atstring

When. Without it, now

Response

200 · application/json
data*object
2 properties
taken*integer
skipped*integer

Events that are too old, or of a person that the business forgot

Errors

400 invalid_inputFix the field named in detail. Each operation's schema is in /api/v1/openapi.json.
401 unauthorizedSend an API key as `Authorization: Bearer tr_live_...`. Create one in Troopy under Settings.
403 forbiddenThe key lacks a scope this operation needs, or its owner lacks the role. detail says which; create a key with the scope, or ask an organization owner or admin.
409 conflictThis Idempotency-Key was used for a different request, or that request is still running. Use a new key for a new request.
429 rate_limitedWait the number of seconds in Retry-After, then retry.