When to call it
Callidentify right after the user logs in, and again whenever something you send about them changes. It’s safe to call as often as you like, even on every launch; each call updates what’s stored.
userId is your own ID for the user, the one your backend uses. Everything else is optional.
What happens when you do
- The anonymous visitor on this device becomes that user. Their email, name, picture, and details now show in the inbox.
- If Feddy already knows this
userIdfrom another device, the two records merge into one. The conversations from this device move over, and the user sees a single history everywhere they log in. - The details you send replace the previous set as a whole. Send everything you want to keep on every call; leave a key out and it’s removed. Email, name, and picture are the exception: they stay if you don’t send them.
Details about the user
Alongside the ID, you can send facts that help you answer faster: their plan, whether they’re a paying member, when their trial ends, how long they’ve had an account. Feddy calls these attributes. They’re simple key-value pairs; values can be text, numbers, true/false, or dates written like2026-09-22T10:00:00Z.
Attributes are for facts about the person. Device model, OS version, app version, and language are collected by the SDK and shown with every conversation already, so there’s no need to send those.
Nested objects and lists are dropped too. Keep it flat.
Once you’ve sent a key, it appears under Settings → Data attributes in the dashboard, where Feddy has worked out whether it’s text, a number, or a date. From there you can give it a friendlier label for the inbox, show it as a column in the conversation list, or make it something you can filter by.
Subscription status
Whether someone is paying is usually the first thing you want to know when they write in. Your subscription tool already knows it, so pass it on as attributes, and callidentify again whenever it changes: after a purchase, a renewal, a cancellation, or a refund.
Each call replaces the whole set of attributes, so keep one function that sends all of them, and call that from everywhere, including your subscription listener:
pro or premium with the name of your own entitlement or access level.
Transaction.updates to finish purchases, call refreshSubscription() from that listener instead of starting a second one.
Feddy doesn’t connect to RevenueCat, Adapty, or Superwall, and never needs their keys. Your app passes along what it already knows.
email when you have it. If your project has a verified email domain, replies are also emailed to the user, so they hear back even if they never reopen the app. Without a verified domain the email is stored but nothing is sent.
If you don’t pass an email and your project has a verified domain, the widget may ask the user for one after their first message. It only asks once per device.
Log in on a test build, send a message, and open the inbox. The conversation shows the user’s name and the attributes you sent, instead of Anonymous.
Next steps
Contacts
What Feddy knows about a person, and where to see it in the dashboard.
Team
Verify an email domain so replies reach users by email.
iOS SDK reference
The full
identify signature for Swift.Web SDK reference
The full
identify options for the web widget.