☰ Menú · Socios
Referencia de la API

Socios

Un cliente inscrito en el programa de fidelización del local, con una tarjeta en el wallet.

El objeto member

iduuid
Nuestro id del cliente.
card_numberstring
El número de la tarjeta. El nuestro (13 dígitos) o el que tú definas.
serialuuid
El número de serie del pase del wallet.
first_name, last_name, phone, email, birthday, languagestring
Perfil. phone va en formato internacional (+37366791102) y birthday es YYYY-MM-DD.
marketing_consentboolean
El cliente aceptó recibir mensajes promocionales.
programobject
id, name, mechanic y formato barcode del programa del socio.
stampsobject o null
current, required, rewards_available. Null en programas sin sellos.
cashbackobject o null
balance (unidades mínimas), held en reservas activas, available para gastar, currency, earn_rate (porcentaje), level, level_basis, levels, next_level, redeem_max_percent, min_amount, expires_at. Null en programas sin cashback. Consulta los niveles de cashback.
discountobject o null
percent, tier, next_at_visits en programas de descuento por visitas.
visits, total_spentinteger
Visitas e importe gastado desde el alta.
walletobject o null
apple_url, google_url, card_url: enlaces firmados para añadir la tarjeta. Se devuelven al crear el socio y con ?expand=wallet.
JSON
{
  "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"
}
POST/v1/members
Permiso: members:write o devices:write

Inscribe a un cliente y emite la tarjeta del wallet. Si ya existe un socio con este teléfono, devuelve ese socio con 200 en lugar de 201. Envía una Idempotency-Key.

phonestring, obligatorio
Formato internacional. También se aceptan los formatos locales del país del local.
first_namestring, obligatorio
Hasta 80 caracteres.
consenttrue, obligatorio
Confirma que el cliente aceptó el tratamiento de sus datos. Las peticiones sin este campo se rechazan.
last_name, email, birthday, languagestring
Campos opcionales del perfil. language (en, ro, ru, es...) se usa en la tarjeta y en los mensajes.
card_numberstring
De 4 a 32 letras, dígitos o guiones. Usa el número de tarjeta de la caja. Único por local.
programstring
slug del programa obtenido de GET /v1/account. Por defecto, el programa principal del local.
marketing_consentboolean
El cliente aceptó recibir mensajes promocionales. Por defecto, false.
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
  }'
Algunos programas dan un sello de bienvenida al registrarse, así que un socio nuevo puede empezar con stamps.current: 1.
GET/v1/members/{member}
Permiso: members:read

{member} es un número de tarjeta, el valor de un código escaneado, un número de serie del wallet, un id de socio o un teléfono (codificado para la URL). Añade ?expand=wallet para obtener enlaces nuevos para añadir la tarjeta al wallet.

curl
# by the number on the card (or the barcode the scanner read)
curl https://loyaltyfy.io/api/v1/members/2000111703779 \
  -H "Authorization: Bearer sk_test_..."

# by phone, with fresh add-to-wallet links
curl "https://loyaltyfy.io/api/v1/members/%2B37366791102?expand=wallet" \
  -H "Authorization: Bearer sk_test_..."
PATCH/v1/members/{member}
Permiso: members:write

Actualiza campos del perfil o asigna un número de tarjeta de la caja. Envía solo los campos que cambias: phone, first_name, last_name, email, birthday, language, card_number, marketing_consent.

curl
curl -X PATCH https://loyaltyfy.io/api/v1/members/%2B37366791102 \
  -H "Authorization: Bearer sk_test_..." \
  -H "Content-Type: application/json" \
  -d '{ "card_number": "2000111703779", "birthday": "1990-04-12" }'
GET/v1/members
Permiso: members:read

Lista los socios, de más reciente a más antiguo. Con paginación. Con ?phone= o ?card_number= devuelve en su lugar una lista de cero o un socio.

curl
curl "https://loyaltyfy.io/api/v1/members?limit=50" \
  -H "Authorization: Bearer sk_test_..."
GET/v1/members/{member}/history
Permiso: members:read

Cada cambio en la tarjeta, de más reciente a más antiguo, sea cual sea su origen: la API, la app de caja del local, un TPV, un conector de reservas. type es accrual, cashback, cashback_earn, gift, reward_redeemed, reversal y puede recibir valores nuevos. source es api, pos, cashier o system. Con paginación.

Respuesta · 200
{
  "object": "list",
  "url": "/v1/members/2000111703779/history",
  "has_more": false,
  "data": [
    {
      "object": "history_entry",
      "id": "937310bd-cb77-49a0-a4ff-855399f5cde3",
      "type": "cashback_earn",
      "stamps_delta": 0,
      "cashback_delta": 1250,
      "amount": 25000,
      "reward_unlocked": false,
      "source": "system",
      "external_id": null,
      "created_at": "2026-10-06T18:17:17.790+00:00"
    }
  ]
}
POST/v1/members/{member}/rewards/redeem
Permiso: transactions:write o devices:write

Entrega al socio una recompensa de sellos ganada y reduce stamps.rewards_available. Se rechaza con no_reward_available si no tiene ninguna. Envía una Idempotency-Key.

curl
curl -X POST https://loyaltyfy.io/api/v1/members/4285324286429/rewards/redeem \
  -H "Authorization: Bearer sk_test_..." \
  -H "Idempotency-Key: reward-4285324286429-0001"
POST/v1/members/{member}/adjustments
Permiso: members:adjust

Suma (amount positivo) o resta (negativo) cashback con un reason de 3 a 300 caracteres. Solo funciona si el local permite los ajustes, y hasta su límite por ajuste. Si repites un external_id, recibes el ajuste guardado. Envía balance.adjusted.

curl
curl https://loyaltyfy.io/api/v1/members/2000111703779/adjustments \
  -H "Authorization: Bearer sk_test_..." \
  -H "Content-Type: application/json" \
  -d '{ "external_id": "ADJ-2026-0009", "amount": 2000, "reason": "Goodwill after a complaint" }'

# a negative amount takes cashback away
Dudas sobre una integración: api@loyaltyfy.io. Respondemos en un día hábil.