Server-side client for LinkMe — programmatic link management, webhook verification, and backend automation.
- A LinkMe workspace with at least one app
- A server/API key from the portal (write scope for link management)
- Node.js 18+
npm install @li-nk.me/node-sdkimport LinkMeClient from '@li-nk.me/node-sdk';
const linkme = new LinkMeClient({
apiKey: process.env.LINKME_SERVER_KEY,
});
// Create a short link
const link = await linkme.createLink({
appId: 'app_123',
slug: 'spring',
deepLink: '/promo/spring',
redirects: {
iosStoreUrl: 'https://apps.apple.com/...',
androidStoreUrl: 'https://play.google.com/...',
webFallbackUrl: 'https://example.com/spring',
forceRedirectWeb: false,
},
});
// List all links for an app
const links = await linkme.listLinks('app_123');
// Update a link
await linkme.updateLink('spring', {
metadata: { campaign: 'spring-2026' },
});
// Delete a link
await linkme.deleteLink('spring');const LinkMeClient = require('@li-nk.me/node-sdk').default;The SDK exports helpers for verifying and parsing webhook payloads:
import {
parseLinkMeWebhookEnvelope,
verifyLinkMeWebhookSignature,
} from '@li-nk.me/node-sdk';
const rawBody = req.rawBody.toString('utf8');
const signature = req.get('X-LinkMe-Signature');
if (!verifyLinkMeWebhookSignature(rawBody, signature, process.env.LINKME_WEBHOOK_SIGNING_SECRET!)) {
res.status(401).send('Invalid signature');
return;
}
const envelope = parseLinkMeWebhookEnvelope(JSON.parse(rawBody));
// envelope.event — e.g. 'link.click', 'link.claim', 'link.app_open'Supported webhook events: link.click, link.token_created, link.claim, link.app_open, link.deferred_claim_attempt. Configure webhooks in Developer Settings > Webhooks in the portal.
| Method | Description |
|---|---|
createLink(input) |
Create a short link. Returns { id, app_id, domain_id, slug, slugUrl } |
getLink(id) |
Fetch a link by slug or ID |
listLinks(appId) |
List all links for an app |
updateLink(id, updates) |
Partial update (snake_case fields, 0 | 1 flags) |
deleteLink(id) |
Permanently delete a link |
displayInPortal controls portal visibility:
false(default in this SDK) — hides the link from the Portal links list (still works as a universal link)true— shows it in the Portal
The SDK exports Zod schemas and inferred types for runtime validation:
LinkSchema/ExtendedLinkSchemaCreateLinkInputSchema/CreateLinkResponseSchemaUpdateLinkInputSchemaLinkMeWebhookEnvelopeSchema
Apache-2.0