Documentation

The manual for the
product you have

Short guides to everything Liflio does. Nothing on this page describes something we have not built.

What each platform
will actually take

YouTubeVideo
TikTokVideo
InstagramImages
PinterestImages
LinkedInText · Images
FacebookText · Images
TelegramText · Images
WhatsAppText
Xnot connectable yetText · Images
Emailnot connectable yetText · Images

WhatsApp sends pre-approved template messages rather than free text. Everything above is generated from the publishing code itself, so the day a platform gains a format, this table gains it too — and until then it will not claim one.

For developers

One small,
read-only API

Three endpoints that let another system read the offers you have published. That is the whole surface: no write endpoints, no webhooks, no SDK, and no separate API host.

Manage your API keys

Inside the app — you need an account to be signed in to.

GET /api/v1/export/catalogues

Published catalogues and flyer deals, with their page images and PDF.

GET /api/v1/export/coupons

Code and barcode coupons, with their value, terms and expiry.

GET /api/v1/export/reductions

Price drops, with the original price, the sale price and the percentage.

Authentication
A bearer token: an lfk_ key you create in the app. Keys are stored hashed and shown once, so copy it when it appears. A missing or unknown key returns 401.
Scope
A key reads the offers on its own account and nothing else. Keys have no per-key permissions to configure.
Paging
page starts at 1; limit defaults to 50 and is capped at 100. meta.hasNextPage tells you when to stop.
Incremental reads
updated_since takes a date and returns only what changed after it. An unparseable date is ignored rather than rejected.

A request

curl -H "Authorization: Bearer lfk_…" \
  "https://liflio.com/api/v1/export/coupons?limit=50"

And its response

{
  "data": [
    {
      "id": 128,
      "title": "10% off the summer range",
      "discountValue": 10,
      "type": "NORMAL",
      "code": "SUMMER10",
      "termsAndConditions": "Minimum spend 50 EUR. Excludes sale items.",
      "validUntil": "2026-07-31T23:59:59.000Z",
      "status": "active",
      "updatedAt": "2026-07-01T09:12:44.000Z"
    }
  ],
  "meta": {
    "currentPage": 1,
    "totalPages": 1,
    "totalItems": 1,
    "hasNextPage": false,
    "generatedAt": "2026-07-01T09:20:00.000Z",
    "endpoint": "/api/v1/export/coupons"
  }
}

Fields that have no value come back as null rather than being omitted, so the shape is the same on every row.