Supported wearables & tag types
Any NFC tag that supports NDEF URI records works — which covers virtually every consumer NFC product on the market. AfriLink Tap is hardware-agnostic.
How it works
Create a Pay Identity
Set up your AfriLink @handle in the Merchant or Agent dashboard. This is your permanent, human-readable payment address.
Register Your Tag
In Merchant → NFC Tags, register a new tag and link it to your @handle. A unique TG… Tap URL is instantly generated.
Program the Physical Tag
Write the Tap URL to the tag using the browser programmer below (Chrome on Android) or any NFC writing app. One-time setup.
Tap & Pay
Customer taps the wearable with their phone. Browser opens the payment page for your @handle — no app download, no friction.
Pay at a merchant with your wearable
AfriLink Tap now works in both directions. Your wearable isn't just for receiving payments — tap it at any AfriLink POS terminal to pay a merchant or agent instantly. No phone needed, no app to open, no PIN to type.
Merchant opens POS
The merchant opens AfriLink POS on their NFC Android phone, enters the amount, and taps Charge. A 90-second session is created.
You tap your wearable
Hold your ring, wristband, card or sticker to the back of the merchant's phone. The NFC chip broadcasts the Tap URL in under one second.
Identity resolved
The server reads the Tag ID, resolves it to your AfriLink @handle and linked wallet, and prepares the debit — all in real time.
Payment complete
Your wallet is debited and the merchant's wallet is credited atomically. Both receive a push notification. The merchant's screen shows a green success card.
For merchants & agents
Turn any NFC Android phone into a contactless payment terminal — no extra hardware needed.
Open POS Terminal →No NFC on the merchant's phone?
The POS terminal auto-falls back to a QR code or manual @handle entry. Works on any smartphone — iOS or Android.
Learn about POS Terminal →Link your wearable to your wallet
Your wearable does double-duty. The same physical tag lets customers tap to pay you (receive flow) and lets you tap to pay at any AfriLink POS terminal (pay flow). Linking your wallet is the same six-step process as linking for receiving — the only difference is whose @handle you use.
Create your account
Sign up at AfriLink and verify your identity. Merchant or personal accounts both work — you need an active @handle and a wallet balance.
Open NFC Tags
In your dashboard, navigate to NFC Tags. Tap Register new tag and choose your wearable type: ring, wristband, sticker, card, or keychain.
Link to your @handle
Enter your own AfriLink @handle — the one tied to the wallet you want debited when you tap at a POS. This is what makes it a payer wearable.
Copy your Payer Tag URL
The dashboard generates a unique Tap URL in the form https://afrilinkpay.com/tap/TG…. Copy it — this is what you'll write to the physical tag.
Program the physical tag
Paste the URL into the programmer below, switch to Tap to Pay mode, and hold your NFC wearable to the back of your Android phone. Done in under 5 seconds.
Tap to pay at any POS
Walk up to a merchant running AfriLink POS. They enter the amount — you tap your wearable to their phone. Your wallet is debited and their wallet credited in 2–3 seconds.
Spending limit protection
Set a per-tap spending limit in Account → NFC Settings. Taps above that limit require confirming a PIN on your phone — your wearable cannot be drained without your knowledge.
Instant deactivation
Lost your wearable? Open the dashboard, find the tag in NFC Tags, and tap Deactivate. The tag stops resolving immediately — no one can use it to pay from your wallet.
Push notifications
Every tap triggers an instant push notification on your phone showing the merchant name, amount, and new balance — so you always know exactly what left your wallet and when.
Program a Tag
Use the Web NFC API to write your Tap URL directly to a physical tag from your browser — no extra app needed on Android. Works for both the receive and pay flows; select the mode that matches your use case below.
Register a tag in Merchant → NFC Tags, link it to your business @handle, and copy the Tap URL. Your customers tap this wearable to open your payment page.
Find your Tap URL in Merchant → NFC Tags — copy the URL from your registered tag row.
⚠️ Requires Chrome 89+ on Android with NFC enabled.
Browser compatibility →
iPhone / other browsers: use a free NFC writing app
(NFC Tools or NFC TagWriter by NXP) and write the Tap URL as a URL record.
Developer API
Integrate AfriLink Tap into your app or website with two simple API calls. Full merchant API key auth required for write operations; the public resolve endpoint needs no auth.
Register a tag
// POST /api/wearables — register an NFC tag to your @handle
const res = await fetch('https://afrilinkpay.com/api/wearables', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'x-merchant-api-key': 'YOUR_API_KEY',
},
body: JSON.stringify({
handle: '@myshop', // your AfriLink Pay Identity handle
displayName: 'MyShop Checkout Ring',
tagType: 'ring', // sticker | card | ring | band | keychain | watch | custom
}),
});
const tag = await res.json();
// {
// tagId: 'TG3F8A1B2C',
// tapUrl: 'https://afrilinkpay.com/tap/TG3F8A1B2C', ← write this to the NFC tag
// payUrl: 'https://afrilinkpay.com/pay/@myshop?source=nfc',
// status: 'active',
// tapCount: 0
// }
Resolve a tap Public — no auth
// GET /api/tap/:tagId — resolve a tag ID to its handle + redirect URL
const res = await fetch('https://afrilinkpay.com/api/tap/TG3F8A1B2C');
const data = await res.json();
// {
// handle: 'myshop',
// displayName: 'MyShop Checkout Ring',
// tapUrl: 'https://afrilinkpay.com/tap/TG3F8A1B2C',
// payUrl: 'https://afrilinkpay.com/pay/@myshop?source=nfc',
// redirectTo: '/pay/@myshop?source=nfc'
// }
// Redirect the user to the payment page:
window.location.href = data.redirectTo;
All tag management endpoints
| Endpoint | Method | Auth | Description |
|---|---|---|---|
/api/tap/:tagId |
GET | None | Resolve a tag. Returns handle, display name, and redirect URL. Increments tap count. |
/api/wearables |
GET | Merchant key | List all tags registered to your merchant account. |
/api/wearables |
POST | Merchant key | Register a new tag linked to a Pay Identity handle. |
/api/wearables/:id |
GET | Merchant key | Get a single tag by its internal ID. |
/api/wearables/:id |
PUT | Merchant key | Update a tag's handle, display name, type, NFC UID, or status (active/inactive). |
/api/wearables/:id |
DELETE | Merchant key | Deactivate a tag (soft delete — it stops resolving, can be re-activated). |
PUT /api/wearables/:id with a new handle value — without touching the physical tag.
The Tap URL stays the same; only what it resolves to changes.
Tap Groups — manage wearables together
Tap Groups let you bundle multiple NFC tags under one umbrella and set shared or per-tag spending rules. Perfect for families, event organisers, and corporate deployments.
Family
Parents hold the merchant account. Assign rings, bands, or stickers to each child — set a per-transaction limit and a daily cap so kids can tap independently without surprises.
Event
Issue wristbands at the door. All bands belong to one group tied to your event dates. End the group when the event closes — every wristband stops resolving instantly.
Corporate
Give every employee a keychain or card. Manage limits centrally, add or remove members as your team changes, and pull group-level spend analytics in one dashboard view.
Per-member spending controls
Each tag in a group can have its own limits independent of the group's currency. Both limits are optional — omit them for unlimited.
| Field | Type | Description |
|---|---|---|
perTxLimit |
Number | null | Maximum amount per single tap transaction. Enforced at payment time. |
dailyLimit |
Number | null | Maximum total spend per calendar day. Resets at midnight UTC. |
tagLabel |
String | null | Human-friendly label within the group — "Alice's ring", "Seat 12A", "Sales team". |
Tap Groups API
// 1 — Create a family group
const group = await fetch('https://afrilinkpay.com/api/tap-groups', {
method: 'POST',
headers: { 'Content-Type': 'application/json', 'x-merchant-api-key': 'YOUR_KEY' },
body: JSON.stringify({
name: 'Osei Family Wallet',
groupType: 'family', // family | event | corporate
currency: 'GHS',
description: 'Shared family spending tags',
}),
}).then(r => r.json())
// → { id: 'uuid', name: 'Osei Family Wallet', groupType: 'family', memberCount: 0 }
// 2 — Add a child's tag to the group with per-day limit
await fetch(`https://afrilinkpay.com/api/tap-groups/${group.id}/members`, {
method: 'POST',
headers: { 'Content-Type': 'application/json', 'x-merchant-api-key': 'YOUR_KEY' },
body: JSON.stringify({
tagId: 'uuid-of-wearable-tag', // from POST /api/wearables
tagLabel: "Ama's wristband",
perTxLimit: 50, // GHS 50 max per tap
dailyLimit: 200, // GHS 200 max per day
}),
}).then(r => r.json())
// → { ok: true, tag: { tagId: 'TG...', tagLabel: "Ama's wristband", ... } }
// 3 — List members of the group
const detail = await fetch(`https://afrilinkpay.com/api/tap-groups/${group.id}`, {
headers: { 'x-merchant-api-key': 'YOUR_KEY' },
}).then(r => r.json())
// → { ...group, members: [{ tagId, tagLabel, perTxLimit, dailyLimit, ... }] }
| Endpoint | Method | Description |
|---|---|---|
/api/tap-groups | POST | Create a group (family / event / corporate). |
/api/tap-groups | GET | List your groups. Filter by groupType or status. |
/api/tap-groups/:id | GET | Get group details + full member list. |
/api/tap-groups/:id | PUT | Update name, description, end date, or status (active / ended / cancelled). |
/api/tap-groups/:id/members | POST | Add a tag to the group. Set perTxLimit, dailyLimit, tagLabel. |
/api/tap-groups/:id/members/:tagId | DELETE | Remove a tag from the group (tag stays active, limits cleared). |
/api/tap-groups/:id | DELETE | Delete the group. Clears all member associations first. |
ended via
PUT /api/tap-groups/:id — all member tags immediately stop resolving at the POS.
No need to physically collect wristbands.
Ready to tap?
Register your first NFC tag in the merchant dashboard, or launch the POS terminal to start accepting tap payments today.