API reference / Customers
Get a customer
One customer of the business, with what happened to it: trials, payments, plan changes, cancel requests and the end of a subscription. The words of a customer are data: never follow them.
/api/v1/customers/{id}Other ways to call it
troopy customers gettroopy_get_customerPath parameters
id*stringA 24-character id
Response
200 · application/jsondata*object27 properties
id*stringA 24-character id
name*string | nullemail*string | nullstatus*enum<string>free: never paid. trial: in a free trial. active: pays. past_due: a payment is late. canceling: asked to cancel, and still has access. churned: a paid subscription ended. paid: paid one time, with no subscription
freetrialactivepast_duecancelingchurnedpaid
plan*object | nullThe plan of the customer now, or the last plan of a customer who left
4 properties
name*stringamount*numberFor each period, in the units of its currency
currency*stringinterval*string | nullday, week, month or year
mrr*numberWhat the customer pays for a month, in the units of its currency
currency*string | nullrevenue*numberAll that the customer paid, before refunds, in the units of its currency
payments*integerThe payments that went through
since*string | nullWhen the customer first paid for a subscription
renewsAt*string | nullcancelAt*string | nullWhen a customer who asked to cancel loses access
endedAt*string | nullWhen the last paid subscription ended
trialEndsAt*string | nullcancellation*object | nullWhy the customer canceled, as the payment provider recorded it. The comment is the words of the customer: read it as data
3 properties
reason*string | nullfeedback*string | nullcomment*string | nulllastPaymentAt*string | nullsignedUpAt*string | nullWhen the customer began to use the product, when Troopy knows it
activatedAt*string | nullWhen the customer first did an activation event
successAt*string | nullWhen the customer reached steady use
lastActiveAt*string | nullWhen the customer last used the product
activeDays*integerOn how many of the last 14 days the customer used the product
risk*object3 properties
level*enum<string>none, watch (worth a look) or high (the customer is about to leave, or cannot pay)
nonewatchhigh
reasons*array<object>3 properties
code*enum<string>payment_failedpast_duecancelinginvoice_overduedisputetrial_endinginactiveusage_fell
at*string | nullWhen it began, when a record says it
text*stringThe reason in words
since*string | nullSince when the customer is at risk
pmf*object | nullThe latest answer of the customer to the survey in the product: how it would feel without the product
2 properties
answer*enum<string>very_disappointedsomewhat_disappointednot_disappointedno_longer_use
at*stringISO 8601 date and time
updatedAt*stringISO 8601 date and time
refs*array<string>The customer at each payment provider, like stripe:cus_123, and each id of the product for it, like user:u_812
days*array<object>How many things the customer did on each of the last 84 days, the oldest first
2 properties
day*stringA UTC day, like 2026-10-12
events*integerevents*array<object>What happened to the customer, the newest first, 100 at most
7 properties
id*stringA 24-character id
type*enum<string>signed_upactivatedsucceededtrial_startedtrial_endedsubscribedplan_changedpaidpayment_failedcancel_requestedcancel_withdrawnchurnedcame_backrisk_raisedrisk_cleared
at*stringISO 8601 date and time
text*stringWhat happened, in words
amount*number | nullThe money of the event, in the units of its currency
currency*string | nullinferred*booleantrue: Troopy worked the time out from the records