‹ All pages
Help

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:

  1. A business. A registered company or an established platform/marketplace where you’ll sell Feem licenses.
  2. A billing currency for your account (e.g. USD, EUR, CNY).
  3. 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.
  4. 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
  1. A customer buys a Feem license on your platform and pays you.
  2. Your backend calls our grant endpoint with the customer’s email, the tier, and your own order id.
  3. We activate Feem Pro for that email and send the customer a confirmation.
  4. 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": { "outstandingAmount": "1000.00", "creditLimitAmount": "1000.00", "currency": "USD" } }

GET /api/v2/reseller/account — Account statement

Start here. Your current balance, credit limit, and lifetime totals — call this to see how much credit headroom you have before you grant. 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",
      "creditLimitAmount": "1000.00",
      "outstandingAmount": "630.00",
      "tiers": {
        "feem_pro_personal": { "price": "5.00",  "granted": 80 },
        "feem_pro_family":   { "price": "19.00", "granted": 40 },
        "feem_pro_business": { "price": "99.00", "granted": 8 }
      }
    }
  }
}
  • outstandingAmount — money you currently owe (in your account currency), i.e. granted but not yet settled by an approved payment. This is what’s measured against your credit limit.
  • creditLimitAmount — your credit line in your currency (empty = no cap).
  • tiers — per tier: your configured wholesale price (empty means unpriced, so grants for it are refused) and the granted count you’ve sold to date. Prices are set by Feem; you can read them here but not change them.

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.

You do not send a price. The wholesale price for each tier is configured on your account by Feem; the response tells you the amount charged, and it’s added to your outstanding balance. A tier with no configured price returns 422 price-not-configured.

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",
      "amount": "19.00",
      "currency": "USD",
      "paymentId": "9f2c…",
      "createdAt": "2026-07-17T10:04:11Z"
    }
  }
}

amount / currency are the wholesale price charged to your account for this grant (added to your outstandingAmount).

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 Your outstanding balance would exceed your credit limit; settle to free up room. data includes outstandingAmount, creditLimitAmount, and currency.
422 price-not-configured No wholesale price is set up for that tier on your account — contact us to configure pricing. data includes tier.
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/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, in money. Each grant adds the tier’s wholesale price to what you owe; each approved payment subtracts what you paid. Everything is in your account currency (e.g. USD, CNY), which is fixed when your account is created.
  • Every tier you sell must have a wholesale price configured on your account. A grant for a tier with no price is refused (422 price-not-configured) — we set these up with you during onboarding.
  • Your credit limit is a monetary amount (creditLimitAmount, e.g. 1000 CNY). When a grant would push your outstanding balance past it, grants return 402 credit-limit-exceeded until you settle.
  • To settle: send us the funds per our agreed terms, then report the payment with POST /api/v2/reseller/payments using the bank reference. Once we confirm receipt, we approve it and your available credit is restored by that amount.
  • Watch outstandingAmount vs creditLimitAmount on GET /account to 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_id per sale (your own order number is ideal).
  • [ ] Retry safely on timeouts / 409 using the same order_id.
  • [ ] Validate the customer email at checkout — the license binds to it exactly.
  • [ ] Handle 402 by pausing grants and settling your balance.
  • [ ] Reconcile monthly with GET /account and 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