Skip to main content
POST
Asignar una membresía ya vendida

Authorizations

Authorization
string
header
required

Clave del negocio. sk es una clave completa (todo lo que el rol de quien la creó puede dar) y rk una restringida a los permisos que se eligieron al crearla. Solo se usa desde un servidor: un pedido desde un navegador se rechaza con browser_not_allowed.

Scopes

memberships:write

Asignar, cancelar, congelar y descongelar membresías.

Headers

Craqui-Version
string

Versión de la API para este pedido (YYYY-MM-DD). Si no la mandas, se usa la versión fijada en la clave cuando se creó.

Pattern: ^\d{4}-\d{2}-\d{2}$
Example:

"2026-12-01"

Idempotency-Key
string

Obligatorio en todo pedido que crea o cambia algo, salvo con dry_run=true. Un valor único por operación (por ejemplo un UUID). Si repites el pedido con la misma clave y el mismo cuerpo dentro de 24 horas, recibes la misma respuesta (con el header Idempotent-Replayed: true) sin que se repita el efecto, también la misma respuesta de error: para intentar de nuevo algo que se rechazó, usa una clave nueva. Con un dry_run=true la clave se ignora y no se guarda: el pedido real puede usar la misma. Pasadas las 24 horas, repetir una reserva con la misma clave y el mismo cuerpo sigue devolviendo la reserva que se hizo (como está ahora), y la misma clave con otro cuerpo responde idempotency_key_reused.

Required string length: 1 - 255

Query Parameters

dry_run
boolean

true para ver qué pasaría sin hacerlo: Craqui evalúa el pedido con las mismas reglas que el real y responde 200 con un objeto preview, sin escribir nada ni avisarle a nadie. Cuenta para el límite de escrituras. false (o sin el parámetro) hace el pedido real. Es el único parámetro de consulta de una escritura.

Body

application/json
client_id
string
required

Id de un cliente del estudio.

Pattern: ^cli_[0-7][0-9a-hjkmnp-tv-z]{25}$
Example:

"cli_01jatfha5h4nkg77c3wfrvd3cw"

membership_plan_id
string
required

Id de un plan de membresía.

Pattern: ^mpl_[0-7][0-9a-hjkmnp-tv-z]{25}$
Example:

"mpl_01jt05nvk11xa1zm1pwve2qj7r"

first_fee
object
required

La primera cuota que cobraste, también si es 0: tiene que ser la que Craqui calcula hoy para ese plan y esa opción de inicio (409 price_changed con current_price si no). Así una membresía nunca se asigna a un precio que tu checkout no cobró.

start_option
enum<string> | null

Solo en un estudio que renueva todas las membresías el mismo día, para quien empieza a mitad de mes: next_cycle (empieza el próximo día de renovación), prorate (paga los días que quedan) o full_credits (todos los créditos ahora, precio completo). En cualquier otro estudio, null (422 start_option_not_applicable si no).

Available options:
next_cycle,
prorate,
full_credits,
null
notify
boolean
default:true

false para no enviarle al cliente los avisos de esta escritura (email, WhatsApp). Necesita el permiso notifications:suppress; sin él, la respuesta es 403 scope_required. Nunca silencia el aviso a otra persona: si una cancelación hace entrar a alguien de la lista de espera, esa persona se entera igual. Los recordatorios posteriores salen igual. Por defecto true. Tu estudio de prueba no le avisa a nadie, diga lo que diga este campo.

Response

Con dry_run=true, la vista previa (no se escribió nada).

Lo que haría la escritura de plata, sin hacerla: Craqui corre la misma operación que el pedido real y la deshace, así que una vista previa que se rechazaría responde el mismo error (por ejemplo price_changed o amount_mismatch, con el monto de hoy). No consume la Idempotency-Key ni cuenta para el límite de escrituras de plata.

object
string
required
Allowed value: "preview"
livemode
boolean
required

false si la vista previa es de tu estudio de prueba (claves crq_test_); true con claves crq_live_.

action
enum<string>
required

credit_grant.create, credit_grant.revoke, membership.create, membership.cancel, membership.freeze, membership.unfreeze o payment.create. La lista puede crecer.

Available options:
credit_grant.create,
credit_grant.revoke,
membership.create,
membership.cancel,
membership.freeze,
membership.unfreeze,
payment.create
result
object
required

El objeto como está hoy; null si la escritura lo crearía.

effects
object
required

Lo que pasaría con la plata, los créditos y los avisos. Cada acción trae sus campos.

warnings
enum<string>[]
required

no_change (la baja ya estaba programada: el pedido real no cambia nada). La lista puede crecer.

Available options:
no_change
summary
string
required

Lo mismo en una frase en español, para mostrarle a una persona. No nombra al cliente.