☰ Menú · Inicio rápido
Primeros pasos

Inicio rápido

Crea una clave de prueba, compruébala, inscribe a un cliente y aplica un ticket. Cinco llamadas, unos cinco minutos.

  1. 1
    Crea una clave de prueba

    En el panel del local abre Desarrolladores → Claves API, elige Prueba y los permisos que necesitas. La clave se muestra una sola vez y empieza por sk_test_. Si desarrollas para muchos locales, pide a cada uno que cree una clave para ti, o escríbenos y te configuramos una cuenta de partner.

  2. 2
    Comprueba la clave

    Llama a GET /v1/account. Devuelve el local, sus programas de fidelización y los permisos de tu clave. Si recibes 401, la clave es incorrecta o está revocada.

  3. 3
    Inscribe a un cliente

    Llama a POST /v1/members con un teléfono, un nombre y consent: true. La respuesta incluye el número de tarjeta y los enlaces para añadirla a Apple Wallet o Google Wallet.

  4. 4
    Aplica un ticket

    Llama a POST /v1/transactions con tu propio id de ticket en external_id, el número de tarjeta y el importe. La respuesta muestra lo que ganó el cliente y el nuevo saldo.

  5. 5
    Deshazlo

    Llama a POST /v1/transactions/{external_id}/void. El saldo vuelve a como estaba.

1. Comprueba la clave

curl
curl https://loyaltyfy.io/api/v1/account \
  -H "Authorization: Bearer sk_test_4eC39HqLyjWDarjtT1zdp7dc"
Respuesta · 200
{
  "object": "account",
  "id": "73267e72-7f6e-4ddd-bfa2-bd6746500794",
  "slug": "api-sandbox",
  "name": "API Sandbox",
  "timezone": "Europe/Chisinau",
  "livemode": false,
  "key": { "id": "65b6f90b-ba6f-47ce-886f-2deb9be1f087", "scopes": ["*"] },
  "programs": [
    {
      "id": "06af6eba-eaf5-4662-8a5e-2b6b52c65314",
      "slug": "default",
      "name": "Sandbox Cashback",
      "mechanic": "cashback",
      "currency": "MDL",
      "published": true,
      "barcode": "card_code128",
      "stamps_required": null,
      "cashback_rate": 5
    },
    {
      "id": "1480831a-9331-46dc-b055-90d14c844fb8",
      "slug": "stamps",
      "name": "Sandbox Stamps",
      "mechanic": "stamps",
      "currency": "MDL",
      "published": true,
      "barcode": "card_qr",
      "stamps_required": 5,
      "cashback_rate": null
    }
  ],
  "locations": []
}

Fíjate en la lista programs: un local puede tener varios programas (por ejemplo, cashback para los habituales y sellos para el café). mechanic te dice qué cifras importan para un socio: cashback, stamps, visit_discount y otras.

2. Inscribe a un cliente

curl
curl https://loyaltyfy.io/api/v1/members \
  -H "Authorization: Bearer sk_test_..." \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: 7d1b2c4e-enrol-000123" \
  -d '{
    "phone": "+37366791102",
    "first_name": "Ion",
    "last_name": "Popescu",
    "card_number": "2000111703779",
    "language": "ro",
    "consent": true
  }'
Respuesta · 201
{
  "object": "member",
  "id": "6dacfe0a-2500-44c6-a37c-05c660b093b4",
  "card_number": "2000111703779",
  "serial": "b90273b1-10c9-46eb-ba74-8fef48266b5d",
  "first_name": "Ion",
  "last_name": "Popescu",
  "phone": "+37366791102",
  "email": null,
  "birthday": null,
  "language": "ro",
  "marketing_consent": false,
  "program": {
    "id": "06af6eba-eaf5-4662-8a5e-2b6b52c65314",
    "name": "Sandbox Cashback",
    "mechanic": "cashback",
    "barcode": "card_code128"
  },
  "stamps": null,
  "cashback": {
    "balance": 1250,
    "currency": "MDL",
    "earn_rate": 5,
    "level": null,
    "redeem_max_percent": 30,
    "min_amount": 10000,
    "expires_at": "2027-01-04T18:17:17.721+00:00"
  },
  "discount": null,
  "visits": 1,
  "total_spent": 25000,
  "wallet": {
    "apple_url": "https://loyaltyfy.io/api/wallet/issue/3832466f-...?platform=apple&t=...",
    "google_url": "https://loyaltyfy.io/api/wallet/issue/3832466f-...?platform=google&t=...",
    "card_url": "https://loyaltyfy.io/wallet/3832466f-...?t=..."
  },
  "created_at": "2026-10-06T18:17:15.594+00:00"
}

card_number es opcional. Si no lo envías, emitimos un número de 13 dígitos. Envíalo cuando la caja ya tiene sus propias tarjetas y la tarjeta del wallet debe llevar el mismo número.

3. Aplica un ticket

curl
curl https://loyaltyfy.io/api/v1/transactions \
  -H "Authorization: Bearer sk_test_..." \
  -H "Content-Type: application/json" \
  -d '{
    "external_id": "CHK-2026-000123",
    "member": "2000111703779",
    "amount": 25000,
    "currency": "MDL",
    "register_id": "POS-1",
    "closed_at": "2026-10-06T18:17:00+03:00",
    "line_items": [
      { "sku": "1001", "name": "Espresso", "quantity": 2, "unit_price": 4000, "category": "Coffee" },
      { "sku": "2005", "name": "Cheesecake", "quantity": 1, "unit_price": 17000, "category": "Desserts" }
    ]
  }'
Respuesta · 201
{
  "object": "transaction",
  "id": "f8acbb16-0b3b-4afc-acbb-e5eabd4dd072",
  "external_id": "CHK-2026-000123",
  "status": "completed",
  "amount": 25000,
  "redeem_amount": 0,
  "cashback_earned": 1250,
  "stamps_earned": 0,
  "reward_unlocked": false,
  "net_amount": 25000,
  "currency": "MDL",
  "register_id": "POS-1",
  "closed_at": "2026-10-06T15:17:00+00:00",
  "livemode": false,
  "created_at": "2026-10-06T18:17:17.921+00:00",
  "voided_at": null,
  "member": {
    "object": "member",
    "id": "6dacfe0a-2500-44c6-a37c-05c660b093b4",
    "card_number": "2000111703779",
    "cashback": { "balance": 1250, "currency": "MDL", "earn_rate": 5, ... },
    ...
  }
}

4. Deshazlo

curl
curl -X POST https://loyaltyfy.io/api/v1/transactions/CHK-2026-000123/void \
  -H "Authorization: Bearer sk_test_..."
Todo lo que haces con una clave sk_test_ queda marcado con livemode: false. Los socios y tickets de prueba son filas reales en la cuenta del local, así que usa un local de pruebas o limpia después. Consulta Pruebas.
Dudas sobre una integración: api@loyaltyfy.io. Respondemos en un día hábil.