Skip to content
InfluToDocs

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.

TSX
const result = await InfluTo.setReferralCode(code, userId);
if (result.grantsAccess) {
  // Unlock premium now
}
Swift
let result = await InfluTo.setReferralCode(code, appUserId: userId)
if result.grantsAccess == true {
    // Unlock premium now
}
Kotlin
val result = InfluTo.setReferralCode(code, appUserId = userId) // suspend
if (result.grantsAccess == true) {
    // Unlock premium now
}
Dart
final result = await InfluTo.instance.setReferralCode(code, appUserId: userId);
if (result.grantsAccess == true) {
  // Unlock premium now
}
TypeScript
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:

TSX
const { hasAccess } = await InfluTo.checkAccess(userId);
const isPremium = hasStoreEntitlement || hasAccess; // hasStoreEntitlement: your RevenueCat or StoreKit check
Swift
let access = await InfluTo.checkAccess(appUserId: userId)
let isPremium = hasStoreEntitlement || access.hasAccess
Kotlin
val access = InfluTo.checkAccess(appUserId = userId) // suspend
val isPremium = hasStoreEntitlement || access.hasAccess
Dart
final access = await InfluTo.instance.checkAccess(appUserId: userId);
final isPremium = hasStoreEntitlement || access.hasAccess;
TypeScript
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, code and source (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