Run your program
Give creators and partners free access with codes
Unlock premium without a purchase — automatic INFLU- codes for creators, your own free-access codes for press, testers and partners (one at a time or hundreds at once), and the checkAccess gate.
Creators make better content when they can use your premium features. Free-access codes unlock your app without a purchase: InfluTo can issue one to every creator who joins, and you can create your own for press, partners or support. People redeem them in the same code field your app uses for referral codes, and your app asks InfluTo whether the user has access.
| Creator access code | Your free-access code | |
|---|---|---|
| Looks like | INFLU- + five digits, e.g. INFLU-40213 |
Anything you choose, e.g. PRESS2026 |
| Created by | InfluTo, automatically, for each creator who joins | You, on Free Access Codes or through an agent |
| Uses | One person | As many as you allow |
| Access length | Unlock duration (days), default 90 | Set per code, 1–3,650 days |
| Earns commission | No | No, unless the code credits a partner |
Turn on creator access codes
Make sure your app has a code field
Creators redeem their code in your app, so you need a code field — the ready-made component or your own. See Let users enter a referral code.
Enable it in Settings → Advanced
Check My app has the ReferralCodeInput UI component, then Auto-issue creator access codes. The second checkbox stays disabled until the first is on.
Set the unlock duration
Enter Unlock duration (days), from 1 to 3,650. Empty means 90 days. Click Save Changes.
From then on, every creator who joins one of the app's campaigns or accepts an invitation gets a personal one-time code in their InfluTo dashboard. Creators who joined before you turned it on don't get one automatically. The codes also appear on Free Access Codes with a Creator badge.
Create your own codes
Open Free Access Codes in the sidebar and click Create Code:
| Field | Notes |
|---|---|
| Code | 4–20 characters: uppercase letters, digits, _ and -. Codes are unique across all of InfluTo, and the INFLU- prefix is reserved. |
| Campaign (Optional) | Links the code to a campaign for your own bookkeeping. |
| Access Duration | How long each person's access lasts after they redeem, in days, months or years. Default 1 year. It can't be changed after creation. |
| Expiration Date (Optional) | The last day the code can be redeemed. People who redeemed it before keep their access until their own access ends. |
| Max Uses (Optional) | How many people can redeem it. Empty means unlimited. |
| Credit a partner (Optional) | A creator's referral code. Everyone who redeems this code counts as that creator's referral — see Credit a partner. |
| Group (Optional) | A label, such as testers-october, to filter and export codes together. |
| Active | Inactive codes can't be redeemed. |
In the list you can Copy a code, Copy install link, Edit it (active, blocked, expiration date, max uses, group, partner) or Delete it. Filters show active, inactive, blocked and expired codes, and a group when you use groups. Export CSV downloads the codes shown by the group filter, with their install links and uses.
Each code also works as an install link: https://influ.to/{app_slug}/{CODE}. It sends people to the right store (or to your web app URL on a desktop), and the list shows how many people opened it (link-preview crawlers aren't counted). People still enter the code in your app to unlock. The link earns no commission unless the code credits a partner.
Deactivating, blocking or deleting a code removes access from everyone who redeemed it the next time your app calls checkAccess(). Passing the expiration date only stops new redemptions. Grants already mirrored into RevenueCat (below) aren't revoked; they run until their own end date.
Each person's access runs for the code's access duration from their first redemption. Entering the code again restores access inside that window without using another seat; after it, the code is spent for that person.
Create codes in bulk
For beta testers, giveaways or one code per person in a group, click Bulk create on Free Access Codes:
| Field | Notes |
|---|---|
| Number of codes | 1–500 per batch. |
| Uses per code | Default 1: each code works for one person. |
| Prefix (Optional) | Up to 8 letters or digits in front of a random part, e.g. BETA → BETA7K2MXQ9P. Random parts skip lookalike characters (0, O, 1, I, L). |
| Access Duration | As for a single code. |
| Group | Names the batch, e.g. testers-october. |
| Credit a partner, Campaign, Expiration Date, Note | Optional, as for a single code. |
When the batch is ready, a CSV with every code and its install link downloads, and the list switches to the new group. Export CSV downloads the group again later, with uses so far.
Credit a partner
A partner — a community admin, a club or a coach who is also a creator in your campaign — can hand out free access in your name and still get the credit. Put their referral code in Credit a partner when you create the code (or later in Edit):
- Everyone who redeems the code counts as the partner's referred user: one install per person, however many times they re-enter the code.
- When someone who got free access later subscribes, the purchase is the partner's, at the partner's commission terms.
- A visit to the code's install link counts as the partner's click. If the app is installed from that link, the SDK hands your app the free-access code (not the partner's) so it can redeem it.
- The partner must be an active creator of this app. If they leave the campaign, new redemptions still grant access but credit nobody.
A creator's own referral code and a free-access code can't be the same, or differ only in lookalike characters (O/0, I/L/1): whichever is created second is refused.
Redeem a code in your app
Free-access codes go through the same field as referral codes. The grant comes from setReferralCode(): when the code is a free-access code, the result has freeAccess and grantsAccess set, plus expiresAt (and entitlement if you use the RevenueCat mirror below). Unlock premium when grantsAccess is true.
Always pass the user's ID — the same one you give identifyUser() and RevenueCat. Without it the server can't record the grant and the redemption fails.
const result = await InfluTo.setReferralCode(code, userId);
if (result.grantsAccess) {
// Unlock premium now
}let result = await InfluTo.setReferralCode(code, appUserId: userId)
if result.grantsAccess == true {
// Unlock premium now
}val result = InfluTo.setReferralCode(code, appUserId = userId) // suspend
if (result.grantsAccess == true) {
// Unlock premium now
}final result = await InfluTo.instance.setReferralCode(code, appUserId: userId);
if (result.grantsAccess == true) {
// Unlock premium now
}const result = await InfluTo.setReferralCode(code, userId);
if (result.grantsAccess) {
// Unlock premium now
}applyCode() and the ready-made components validate first and then apply, but their result doesn't carry the grant flags. If you use them, call identifyUser first (or pass appUserId) and, after a successful apply, check whether the result's campaign type is FREE_ACCESS — then call checkAccess() and unlock. setReferralCode() on its own doesn't validate the code first, so validate it yourself or use applyCode() for codes people type.
Redeeming the same code again doesn't use another seat; it renews the grant.
Gate premium on checkAccess()
checkAccess() asks InfluTo whether this user currently has free access. It works the same for RevenueCat and store-direct apps. Combine it with your normal store entitlement:
const { hasAccess } = await InfluTo.checkAccess(userId);
const isPremium = hasStoreEntitlement || hasAccess; // hasStoreEntitlement: your RevenueCat or StoreKit checklet access = await InfluTo.checkAccess(appUserId: userId)
let isPremium = hasStoreEntitlement || access.hasAccessval access = InfluTo.checkAccess(appUserId = userId) // suspend
val isPremium = hasStoreEntitlement || access.hasAccessfinal access = await InfluTo.instance.checkAccess(appUserId: userId);
final isPremium = hasStoreEntitlement || access.hasAccess;const { hasAccess } = await InfluTo.checkAccess(userId);
const isPremium = hasStoreEntitlement || hasAccess;- If you've called
identifyUser(), you can leave out the user ID; the SDK uses the stored one. - A positive answer is cached on the device for 5 minutes; a negative answer is never cached, so a fresh redemption shows up at once.
- On a network error it returns
hasAccess: false. Don't lock out someone who already has a store entitlement because of it. - The result also has
expiresAt,codeandsource(comp).
Optional: mirror grants into RevenueCat
If your app checks premium only through RevenueCat, InfluTo can also create each grant in your RevenueCat project as a promotional entitlement. checkAccess() works without this; the mirror is for apps that want RevenueCat to see the access too.
Set it up in Settings → Validation, on the card Creator free-access codes (RevenueCat mirror):
| Your RevenueCat secret key | Also enter |
|---|---|
| v2 — with "Customer information → Customers: Read & write" and "Project configuration → Projects: Read" | Project ID and Entitlement ID |
| v1 (legacy) | Entitlement lookup key, e.g. pro |
InfluTo detects the key version when you save. The key is write-only and is never shown again. Then click Save comp-grant config.
If the mirror fails for a redemption, the user still gets access through checkAccess(). RevenueCat may serve cached customer info right after a grant, so refresh it (for example with RevenueCat's invalidateCustomerInfoCache()) if you gate only on RevenueCat.
Troubleshooting
| Problem | What to check |
|---|---|
CODE_NOT_FOUND |
The code is inactive or blocked, or belongs to another of your apps. Codes work only in their own app. |
CODE_EXPIRED |
The expiration date has passed, every use is taken, or this person's access window from an earlier redemption is over. Raise Max Uses or extend the date in Edit. |
| Redemption fails with "Could not identify your account" | Pass the user ID to setReferralCode() / applyCode(). |
| Premium doesn't unlock | Gate on checkAccess().hasAccess as well as your store entitlement. If you rely on RevenueCat only, set up the mirror and refresh RevenueCat's customer info. |
A creator has no INFLU- code |
They joined before you enabled auto-issue, or manual code entry is off. |
| Did the RevenueCat mirror work? | Ask an agent to run influto_list_free_codes — it reports failed RevenueCat grants per code with the latest error. |
With an AI agent
influto_create_free_code creates a code and influto_create_free_codes_bulk up to 500 at once (same rules as the dashboard, including a partner and a group); influto_list_free_codes lists codes with their redemptions, the creator each INFLU- code belongs to, and RevenueCat mirror problems; influto_update_app turns auto-issued creator codes on and sets their duration. See Agent tools.
Next
- Let users enter a referral code — Add the code field that redeems these codes.
- SDK reference —
setReferralCode,checkAccessand every other method.