Become a Feem Reseller
Sell Feem Pro licenses on your own platform and fulfill them instantly through our API. This guide covers what it takes to join, how to reach us, and the full API reference.
Why resell Feem
- Instant fulfillment. One API call turns a sale on your platform into an active Feem Pro license for your customer, delivered to their inbox in seconds.
- Postpaid terms. Grant licenses against an agreed credit line and settle with us periodically — no prepayment, no per-transaction friction.
- Wholesale pricing. You set your own retail price; you pay us the agreed wholesale rate.
- Zero integration on the end-user side. Your customer just opens Feem and signs in with the email you licensed. Nothing to install, no codes to redeem.
What it takes to join
To onboard as a reseller you’ll need:
- A business. A registered company or an established platform/marketplace where you’ll sell Feem licenses.
- A billing currency for your account (e.g.
USD,EUR,CNY). - A backend that can make authenticated HTTPS calls. Grants are server-to-server. Your API key must never be embedded in a website, mobile app, or anything that ships to end users.
- Agreement on commercial terms — wholesale pricing per tier and a credit limit — which we set up with you during onboarding.
Once approved, we provision your reseller account, agree your credit limit, and issue you an API key. You’re ready to sell.
The tiers you can sell
| Tier | Tier id (used in the API) | Devices per license |
|---|---|---|
| Feem Pro Personal | feem_pro_personal |
5 |
| Feem Pro Family | feem_pro_family |
20 |
| Feem Pro Business | feem_pro_business |
100 |
How to contact us
To apply or ask questions, email info@feeperfect.com with:
- Your company / platform name and website
- The regions and customer types you serve
- Rough expected monthly volume
- Your preferred billing currency
Website: https://feem.io
We’ll follow up to finalize terms and get you a sandbox and an API key.
How it works (the big picture)
Your customer buys Your backend calls We provision the license
a Feem Pro license ─▶ POST /api/v2/reseller/ ─▶ and email your customer
on your platform licenses Feem Pro is active
- A customer buys a Feem license on your platform and pays you.
- Your backend calls our grant endpoint with the customer’s email, the tier, and your own order id.
- We activate Feem Pro for that email and send the customer a confirmation.
- Periodically, you report the payments you owe us and we reconcile them against your ledger.
The customer’s email is their license identity. When they open Feem and sign in with that email, Pro is already active — there is no separate activation code.
⚠️ Send the correct email. The license is bound to the exact email address you submit. Double-check it at point of sale.
API Reference
Base URL
https://backend5.feem.io
Authentication
Every request must include your API key as a Bearer token:
Authorization: Bearer frk_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
- We show your key’s plaintext exactly once, when it’s issued. Store it in your secrets manager. If you lose it, we revoke and re-issue — we cannot recover it.
- Keep it server-side only. Never ship it in client apps or web pages.
- Keys can be scoped to grant and/or read, may carry an expiry, and can be locked to a set of allowed IP addresses. Tell us the static egress IPs of your backend if you’d like the allowlist.
Response format
All responses are JSON. Successful responses wrap their payload under data:
{
"status": "success",
"message": "",
"data": { "grant": { "…": "…" } }
}
Errors use status: "fail" (something about your request) or status: "error" (something on
our side), with a machine-readable message:
{ "status": "fail", "message": "credit-limit-exceeded", "data": { "outstandingLicenses": 100, "creditLimitLicenses": 100 } }
POST /api/v2/reseller/licenses — Grant a license
The core call. Fulfills one sale. Requires the grant scope.
Request body
| Field | Type | Description |
|---|---|---|
order_id |
string | Your unique id for this sale. Used for idempotency (see below). |
email |
string | The customer’s email. This becomes their Feem license identity. |
tier |
string | One of feem_pro_personal, feem_pro_family, feem_pro_business. |
curl -X POST https://backend5.feem.io/api/v2/reseller/licenses \
-H "Authorization: Bearer frk_your_key_here" \
-H "Content-Type: application/json" \
-d '{
"order_id": "ORDER-10231",
"email": "customer@example.com",
"tier": "feem_pro_family"
}'
Success — 200 OK
{
"status": "success",
"data": {
"grant": {
"id": "b1e6…",
"resellerId": "a24f…",
"orderId": "ORDER-10231",
"buyerEmail": "customer@example.com",
"tier": "feem_pro_family",
"paymentId": "9f2c…",
"createdAt": "2026-07-17T10:04:11Z"
}
}
}
Idempotency. Grants are idempotent on order_id. If you send the same order_id again,
you get the same grant back — the customer is never double-licensed and you’re never
double-charged. This makes retries safe: if a call times out, just retry with the same
order_id.
Errors
| HTTP | message |
Meaning |
|---|---|---|
| 400 | order_id-required |
order_id was empty. |
| 400 | invalid-email |
Email didn’t parse. |
| 400 | invalid-tier |
Tier isn’t one of the three Pro tiers. |
| 401 | invalid-api-key / api-key-expired |
Key is wrong, revoked, or expired. |
| 402 | credit-limit-exceeded |
You’ve hit your credit limit; settle to free up credit. data includes outstandingLicenses and creditLimitLicenses. |
| 403 | forbidden-scope |
Your key lacks the grant scope. |
| 403 | reseller-suspended |
Your account is suspended — contact us. |
| 403 | ip-not-allowed |
Request came from an IP outside your allowlist. |
| 409 | busy-try-again |
A brief concurrency lock; retry with the same order_id. |
GET /api/v2/reseller/account — Account statement
Your current balance and usage. Requires the read scope.
curl https://backend5.feem.io/api/v2/reseller/account \
-H "Authorization: Bearer frk_your_key_here"
Success — 200 OK
{
"status": "success",
"data": {
"account": {
"resellerId": "a24f…",
"name": "Acme Software",
"currency": "USD",
"status": "active",
"creditLimitLicenses": 100,
"creditLimitAmount": "",
"outstandingLicenses": 42,
"outstandingAmount": "630.00",
"grantedLicenses": 128,
"perTierGranted": {
"feem_pro_personal": 80,
"feem_pro_family": 40,
"feem_pro_business": 8
}
}
}
}
outstandingLicenses— licenses granted but not yet settled by an approved payment. This is what’s measured against your credit limit.grantedLicenses— lifetime total you’ve granted.
GET /api/v2/reseller/licenses — List your grants
Every license you’ve granted, newest first. Requires the read scope.
curl https://backend5.feem.io/api/v2/reseller/licenses \
-H "Authorization: Bearer frk_your_key_here"
Returns data.grants — an array of grant objects (same shape as the grant response above).
POST /api/v2/reseller/payments — Report a payment
Tell us about a payment/remittance you’ve made toward your balance. It’s recorded as pending until our team reconciles it against the funds received; approval then reduces your outstanding balance.
Request body
| Field | Type | Description |
|---|---|---|
amount |
string | Numeric amount, e.g. "630.00". |
currency |
string | Optional; defaults to your account currency. |
reference |
string | Your bank/wire reference so we can match it. |
note |
string | Optional free-text note. |
curl -X POST https://backend5.feem.io/api/v2/reseller/payments \
-H "Authorization: Bearer frk_your_key_here" \
-H "Content-Type: application/json" \
-d '{ "amount": "630.00", "currency": "USD", "reference": "WIRE-88231", "note": "July settlement" }'
Returns data.payment with status: "pending".
GET /api/v2/reseller/payments — List your reported payments
Your remittances and their status (pending / approved / rejected), newest first.
Requires the read scope.
curl https://backend5.feem.io/api/v2/reseller/payments \
-H "Authorization: Bearer frk_your_key_here"
Billing model
- You operate on postpaid credit. Each grant increases what you owe; each approved payment reduces it.
- Your credit limit caps how many unsettled licenses you can have outstanding at once. Hit
it and grants return
402 credit-limit-exceededuntil you settle. - To settle: send us the funds per our agreed terms, then report the payment with
POST /api/v2/reseller/paymentsusing the bank reference. Once we confirm receipt, we approve it and your available credit is restored. - Watch
outstandingLicensesvscreditLimitLicensesonGET /accountto know how much headroom you have.
Integration checklist
- [ ] Store your API key in a server-side secrets manager.
- [ ] Send us your backend’s egress IPs if you want IP allowlisting.
- [ ] Use a stable, unique
order_idper sale (your own order number is ideal). - [ ] Retry safely on timeouts /
409using the sameorder_id. - [ ] Validate the customer email at checkout — the license binds to it exactly.
- [ ] Handle
402by pausing grants and settling your balance. - [ ] Reconcile monthly with
GET /accountand report payments promptly.
FAQ
How does my customer activate their license? They don’t need to do anything special. They open Feem, sign in with the email you licensed, and Pro is already active.
Can I grant the free tier?
No. Only the three feem_pro_* tiers are grantable.
What if I send the same order twice?
You get the same grant back. Grants are idempotent on order_id — no duplicate license, no
duplicate charge.
What if I sent the wrong email? Contact us at info@feeperfect.com. Because the license is bound to the email, corrections are handled manually on our side.
Can I test before going live? Yes — ask us for sandbox access during onboarding.
Questions? info@feeperfect.com · https://feem.io