‹ 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": { "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-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.
  • Watch outstandingLicenses vs creditLimitLicenses 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