License Delivery
Referencia de 73 endpoints generados desde mosend-wb-backend/src/modules/license-delivery/license-delivery.controller.ts.
/organizations/:orgId/license-delivery·73 endpoints·Source: mosend-wb-backend/src/modules/license-delivery/license-delivery.controller.ts/organizations/:orgId/license-delivery/settingsConfiguración del módulo de entrega de licencias.
Path params
orgIdstringrequerido
Respuestas
- 200
curl -X GET 'https://api.mosend.dev/organizations/a1b2c3d4-1234-5678-9abc-def012345678/license-delivery/settings' \ -H 'X-Api-Key: mk_live_<prefix>.<secret>'
{
"data": {
"id": "00000000-0000-0000-0000-000000000000",
"createdAt": "2026-05-01T03:42:18.123Z"
},
"timestamp": "2026-05-01T03:42:18.123Z"
}/organizations/:orgId/license-delivery/settingsActualiza el módulo (habilitar requiere que el plan lo incluya o el add-on).
Path params
orgIdstringrequerido
Body (JSON)
enabledbooleanwompiEnvstringtestprodwompiPublicKeystringwompiPrivateKeystringSe recibe en claro y se guarda cifrada. Enviar '' para borrar.
wompiEventsSecretstringwompiIntegritySecretstringdeliveryTemplateNamestringPlantilla de entrega fuera de 24h. {{1}}=producto {{2}}=llave {{3}}=link.
deliveryTemplateLangstringdeliveryMessagestringMensaje de entrega (sesión) configurable. Variables: {producto} {llave} {link}.
replacementMessagestringMensaje al reemplazar una llave. Variables: {producto} {llave} {link}.
transferEnabledbooleanCobrar por transferencia a una llave (Bre-B / Nequi), sin pasarela.
wompiEnabledbooleanCobro por pasarela (Nequi push y Daviplata). Apagarlo no borra las credenciales: se conservan para cuando se vuelva a encender.
transferKeystringLlave Bre-B (@usuario, correo, celular) o número Nequi que recibe.
transferHolderstringTitular de la cuenta; se le muestra al cliente antes de que transfiera.
transferInstructionsstringTexto libre que acompaña a la llave en el mensaje al cliente.
transferAmountCodebooleanCódigo de control para identificar la orden cuando hay colisión: se cobra el neto si está libre, y si no, se baja de a un peso.
resendLimitPerDaynumberReenvíos de licencia que el bot puede hacer al mismo cliente por día. 0 = solo una persona.
receiptModestringMANUALAUTOMANUAL = lo aprueba una persona · AUTO = entrega si el monto cuadra.
transferExpiryHoursnumberHoras que la orden espera la transferencia antes de expirar (1 a 168).
transferSellWithoutStockbooleanVender también lo que no tiene existencias (lo cierra un asesor).
inboxHoststringBandeja donde caen las notificaciones del banco.
inboxPortnumberinboxUserstringinboxPasswordstringSe recibe en claro y se guarda cifrada. Enviar '' para borrar.
inboxTlsbooleaninboxSenderDomainstringDominio que debe haber FIRMADO el correo para darlo por bueno.
inboxForwarderAddressstringBuzón desde el que se reenvía (p. ej. `alguien@outlook.com`). Vacío = solo vale la firma del banco. Baja el listón: ver el docblock en el esquema.
inboxProcessedFolderstringCarpeta a la que mover los correos ya registrados (p. ej. `Procesados`). Vacío = se quedan en la bandeja de entrada.
inboxDeleteAfterReadbooleantrue = eliminar los correos ya registrados tras leerlos (no llenar la bandeja) en vez de moverlos a una carpeta.
inboxModestringOFFSUGGESTAUTOOFF = no se lee · SUGGEST = propone · AUTO = aprueba y entrega.
matchWindowHoursnumberHoras hacia atrás en las que se busca un pago para una orden (1 a 168).
binanceEnabledbooleanbinancePayIdstringAlias o correo de Binance Pay que se le muestra al cliente. No es secreto.
binanceApiKeystringClave y secreto de API. Se envían solo al cambiarlos; vacío = conservar el guardado. Nunca se devuelven. DEBEN ser de SOLO LECTURA.
binanceApiSecretstringbinanceAssetstringMoneda del cobro (la estable en dólares, por defecto).
binanceExpiryHoursnumberHoras que el pedido espera el pago antes de liberar las llaves (1 a 168).
binanceModestringOFFSUGGESTAUTOOFF = no se lee · SUGGEST = propone · AUTO = confirma y entrega.
lowStockThresholdnumberUmbral de stock bajo (0 = sin alerta).
maxPerCustomernumberMáximo de licencias por cliente en la ventana (0 = sin límite).
maxPerCustomerDaysnumberVentana (días) del límite por cliente.
renewalEnabledbooleanAvisar al cliente antes de que se le venza la licencia.
renewalDaysBeforenumberDías de antelación del primer aviso (1 a 90).
renewalSecondNoticebooleanSegundo aviso el mismo día del vencimiento.
renewalOnlyBusinessHoursbooleanAvisar solo dentro del horario de atención de la organización.
renewalPhoneNumberIdstring · uuidNúmero emisor del aviso para las ventas que no guardan el suyo.
renewalOnYesstringHANDOFFBOTTAGQué hacer cuando el cliente dice que sí.
Respuestas
- 200
curl -X PUT 'https://api.mosend.dev/organizations/a1b2c3d4-1234-5678-9abc-def012345678/license-delivery/settings' \
-H 'X-Api-Key: mk_live_<prefix>.<secret>' \
-H 'Content-Type: application/json' \
-d '{"enabled": true,"wompiEnv": "test","wompiPublicKey": "<wompiPublicKey>","wompiPrivateKey": "<wompiPrivateKey>","wompiEventsSecret": "<wompiEventsSecret>","wompiIntegritySecret": "<wompiIntegritySecret>","deliveryTemplateName": "<deliveryTemplateName>","deliveryTemplateLang": "<deliveryTemplateLang>","deliveryMessage": "<deliveryMessage>","replacementMessage": "<replacementMessage>","transferEnabled": true,"wompiEnabled": true,"transferKey": "<transferKey>","transferHolder": "<transferHolder>","transferInstructions": "<transferInstructions>","transferAmountCode": true,"resendLimitPerDay": 0,"receiptMode": "MANUAL","transferExpiryHours": 0,"transferSellWithoutStock": true,"inboxHost": "<inboxHost>","inboxPort": 0,"inboxUser": "<inboxUser>","inboxPassword": "<inboxPassword>","inboxTls": true,"inboxSenderDomain": "<inboxSenderDomain>","inboxForwarderAddress": "<inboxForwarderAddress>","inboxProcessedFolder": "<inboxProcessedFolder>","inboxDeleteAfterRead": true,"inboxMode": "OFF","matchWindowHours": 0,"binanceEnabled": true,"binancePayId": "00000000-0000-0000-0000-000000000000","binanceApiKey": "<binanceApiKey>","binanceApiSecret": "<binanceApiSecret>","binanceAsset": "<binanceAsset>","binanceExpiryHours": 0,"binanceMode": "OFF","lowStockThreshold": 0,"maxPerCustomer": 0,"maxPerCustomerDays": 0,"renewalEnabled": true,"renewalDaysBefore": 0,"renewalSecondNotice": true,"renewalOnlyBusinessHours": true,"renewalPhoneNumberId": "00000000-0000-0000-0000-000000000000","renewalOnYes": "HANDOFF"}'{
"data": {
"id": "00000000-0000-0000-0000-000000000000",
"name": "string",
"description": "string"
},
"timestamp": "2026-05-01T03:42:18.123Z"
}/organizations/:orgId/license-delivery/settings/addonActiva/desactiva el módulo como add-on de tarifa fija mensual (billing:write).
Path params
orgIdstringrequerido
Body (JSON)
enabledbooleanrequerido
Respuestas
- 200
curl -X PUT 'https://api.mosend.dev/organizations/a1b2c3d4-1234-5678-9abc-def012345678/license-delivery/settings/addon' \
-H 'X-Api-Key: mk_live_<prefix>.<secret>' \
-H 'Content-Type: application/json' \
-d '{"enabled": true}'{
"data": {
"id": "00000000-0000-0000-0000-000000000000",
"name": "string",
"description": "string"
},
"timestamp": "2026-05-01T03:42:18.123Z"
}/organizations/:orgId/license-delivery/selling-readinessEstado de venta autónoma del módulo (activo, Wompi, productos).
Path params
orgIdstringrequerido
Respuestas
- 200
curl -X GET 'https://api.mosend.dev/organizations/a1b2c3d4-1234-5678-9abc-def012345678/license-delivery/selling-readiness' \ -H 'X-Api-Key: mk_live_<prefix>.<secret>'
{
"data": {
"id": "00000000-0000-0000-0000-000000000000",
"createdAt": "2026-05-01T03:42:18.123Z"
},
"timestamp": "2026-05-01T03:42:18.123Z"
}/organizations/:orgId/license-delivery/analyticsMétricas de ventas de licencias: ingresos, conversión, top productos y stock.
Path params
orgIdstringrequerido
Query params
daysstringrequerido
Respuestas
- 200
curl -X GET 'https://api.mosend.dev/organizations/a1b2c3d4-1234-5678-9abc-def012345678/license-delivery/analytics' \ -H 'X-Api-Key: mk_live_<prefix>.<secret>'
{
"data": [
{
"id": "00000000-0000-0000-0000-000000000000",
"createdAt": "2026-05-01T03:42:18.123Z"
}
],
"timestamp": "2026-05-01T03:42:18.123Z"
}/organizations/:orgId/license-delivery/couponsLista los cupones de descuento.
Path params
orgIdstringrequerido
Respuestas
- 200
curl -X GET 'https://api.mosend.dev/organizations/a1b2c3d4-1234-5678-9abc-def012345678/license-delivery/coupons' \ -H 'X-Api-Key: mk_live_<prefix>.<secret>'
{
"data": [
{
"id": "00000000-0000-0000-0000-000000000000",
"createdAt": "2026-05-01T03:42:18.123Z"
}
],
"timestamp": "2026-05-01T03:42:18.123Z"
}/organizations/:orgId/license-delivery/couponsCrea un cupón de descuento.
Path params
orgIdstringrequerido
Body (JSON)
codestringrequeridodiscountTypestringPERCENTFIXEDdiscountValuenumberrequeridoPERCENT: 1-100 ; FIXED: centavos a descontar.
productIdstring · uuidAcota a un producto; omitir = cualquiera.
activebooleanmaxRedemptionsnumberexpiresAtstringISO date; omitir = sin vencimiento.
Respuestas
- 201
curl -X POST 'https://api.mosend.dev/organizations/a1b2c3d4-1234-5678-9abc-def012345678/license-delivery/coupons' \
-H 'X-Api-Key: mk_live_<prefix>.<secret>' \
-H 'Content-Type: application/json' \
-d '{"code": "<code>","discountType": "PERCENT","discountValue": 0,"productId": "00000000-0000-0000-0000-000000000000","active": true,"maxRedemptions": 0,"expiresAt": "<expiresAt>"}'{
"data": {
"id": "00000000-0000-0000-0000-000000000000",
"name": "string",
"description": "string"
},
"timestamp": "2026-05-01T03:42:18.123Z"
}/organizations/:orgId/license-delivery/coupons/:couponIdActualiza un cupón.
Path params
orgIdstringrequeridocouponIdstringrequerido
Body (JSON)
codestringdiscountTypestringPERCENTFIXEDdiscountValuenumberproductIdstring · uuidactivebooleanmaxRedemptionsnumberexpiresAtstring
Respuestas
- 200
curl -X PATCH 'https://api.mosend.dev/organizations/a1b2c3d4-1234-5678-9abc-def012345678/license-delivery/coupons/00000000-0000-0000-0000-000000000000' \
-H 'X-Api-Key: mk_live_<prefix>.<secret>' \
-H 'Content-Type: application/json' \
-d '{"code": "<code>","discountType": "PERCENT","discountValue": 0,"productId": "00000000-0000-0000-0000-000000000000","active": true,"maxRedemptions": 0,"expiresAt": "<expiresAt>"}'{
"data": {
"id": "00000000-0000-0000-0000-000000000000",
"name": "string",
"description": "string"
},
"timestamp": "2026-05-01T03:42:18.123Z"
}/organizations/:orgId/license-delivery/coupons/:couponIdElimina un cupón.
Path params
orgIdstringrequeridocouponIdstringrequerido
Respuestas
- 200
curl -X DELETE 'https://api.mosend.dev/organizations/a1b2c3d4-1234-5678-9abc-def012345678/license-delivery/coupons/00000000-0000-0000-0000-000000000000' \ -H 'X-Api-Key: mk_live_<prefix>.<secret>'
{
"data": {
"id": "00000000-0000-0000-0000-000000000000",
"createdAt": "2026-05-01T03:42:18.123Z"
},
"timestamp": "2026-05-01T03:42:18.123Z"
}/organizations/:orgId/license-delivery/price-listsListas de precios por etiqueta (proveedores, mayoristas) con sus precios.
Path params
orgIdstringrequerido
Respuestas
- 200
curl -X GET 'https://api.mosend.dev/organizations/a1b2c3d4-1234-5678-9abc-def012345678/license-delivery/price-lists' \ -H 'X-Api-Key: mk_live_<prefix>.<secret>'
{
"data": [
{
"id": "00000000-0000-0000-0000-000000000000",
"createdAt": "2026-05-01T03:42:18.123Z"
}
],
"timestamp": "2026-05-01T03:42:18.123Z"
}/organizations/:orgId/license-delivery/price-listsCrea una lista de precios.
Path params
orgIdstringrequerido
Body (JSON)
namestringrequeridotagNamesstring[]Etiquetas que activan la lista (por nombre, sin distinguir mayúsculas).
discountPercentnumberDescuento general sobre el precio de lista (0-100).
prioritynumberSi varias listas coinciden, gana la de menor prioridad.
activeboolean
Respuestas
- 201
curl -X POST 'https://api.mosend.dev/organizations/a1b2c3d4-1234-5678-9abc-def012345678/license-delivery/price-lists' \
-H 'X-Api-Key: mk_live_<prefix>.<secret>' \
-H 'Content-Type: application/json' \
-d '{"name": "<name>","tagNames": [],"discountPercent": 0,"priority": 0,"active": true}'{
"data": {
"id": "00000000-0000-0000-0000-000000000000",
"name": "Clientes activos",
"description": "Contactos con interacción últimos 30 días"
},
"timestamp": "2026-05-01T03:42:18.123Z"
}/organizations/:orgId/license-delivery/price-lists/:priceListIdEdita una lista de precios.
Path params
orgIdstringrequeridopriceListIdstringrequerido
Body (JSON)
namestringtagNamesstring[]discountPercentnumberprioritynumberactiveboolean
Respuestas
- 200
curl -X PATCH 'https://api.mosend.dev/organizations/a1b2c3d4-1234-5678-9abc-def012345678/license-delivery/price-lists/00000000-0000-0000-0000-000000000000' \
-H 'X-Api-Key: mk_live_<prefix>.<secret>' \
-H 'Content-Type: application/json' \
-d '{"name": "<name>","tagNames": [],"discountPercent": 0,"priority": 0,"active": true}'{
"data": {
"id": "00000000-0000-0000-0000-000000000000",
"name": "Clientes activos",
"description": "Contactos con interacción últimos 30 días"
},
"timestamp": "2026-05-01T03:42:18.123Z"
}/organizations/:orgId/license-delivery/price-lists/:priceListIdElimina una lista de precios.
Path params
orgIdstringrequeridopriceListIdstringrequerido
Respuestas
- 200
curl -X DELETE 'https://api.mosend.dev/organizations/a1b2c3d4-1234-5678-9abc-def012345678/license-delivery/price-lists/00000000-0000-0000-0000-000000000000' \ -H 'X-Api-Key: mk_live_<prefix>.<secret>'
{
"data": {
"id": "00000000-0000-0000-0000-000000000000",
"createdAt": "2026-05-01T03:42:18.123Z"
},
"timestamp": "2026-05-01T03:42:18.123Z"
}/organizations/:orgId/license-delivery/price-lists/:priceListId/itemsFija (o quita, con priceCents null) el precio de un producto/variante en la lista.
Path params
orgIdstringrequeridopriceListIdstringrequerido
Body (JSON)
productIdstring · uuidrequeridovariantIdstring · uuidpriceCentsnumber
Respuestas
- 200
curl -X PUT 'https://api.mosend.dev/organizations/a1b2c3d4-1234-5678-9abc-def012345678/license-delivery/price-lists/00000000-0000-0000-0000-000000000000/items' \
-H 'X-Api-Key: mk_live_<prefix>.<secret>' \
-H 'Content-Type: application/json' \
-d '{"productId": "00000000-0000-0000-0000-000000000000","variantId": "00000000-0000-0000-0000-000000000000","priceCents": 0}'{
"data": {
"id": "00000000-0000-0000-0000-000000000000",
"name": "Clientes activos",
"description": "Contactos con interacción últimos 30 días"
},
"timestamp": "2026-05-01T03:42:18.123Z"
}/organizations/:orgId/license-delivery/productsLista los productos digitales con stock de llaves.
Path params
orgIdstringrequerido
Query params
conversationIdstringrequeridocontactIdstringrequerido
Respuestas
- 200
curl -X GET 'https://api.mosend.dev/organizations/a1b2c3d4-1234-5678-9abc-def012345678/license-delivery/products' \ -H 'X-Api-Key: mk_live_<prefix>.<secret>'
{
"data": [
{
"id": "00000000-0000-0000-0000-000000000000",
"createdAt": "2026-05-01T03:42:18.123Z"
}
],
"timestamp": "2026-05-01T03:42:18.123Z"
}/organizations/:orgId/license-delivery/products/importImport masivo de productos (Excel/CSV): crea los nuevos, salta los que ya existen por nombre o SKU.
Path params
orgIdstringrequerido
Body (JSON)
productsCreateDigitalProductDto[]requeridoProductos a crear en lote (import Excel/CSV desde la UI).
actualizarExistentesbooleanSi un producto ya existe (por SKU o nombre), actualizarlo con lo que trae la fila en vez de saltarlo. Cierra el ciclo exportar → editar en hoja de cálculo → importar.
Respuestas
- 201
curl -X POST 'https://api.mosend.dev/organizations/a1b2c3d4-1234-5678-9abc-def012345678/license-delivery/products/import' \
-H 'X-Api-Key: mk_live_<prefix>.<secret>' \
-H 'Content-Type: application/json' \
-d '{"products": [],"actualizarExistentes": true}'{
"data": {
"id": "00000000-0000-0000-0000-000000000000",
"name": "string",
"description": "string"
},
"timestamp": "2026-05-01T03:42:18.123Z"
}/organizations/:orgId/license-delivery/products/bulkFija los mismos campos a varios productos (activo, modo de entrega, categoría, vigencia, aviso, dato adicional).
Path params
orgIdstringrequerido
Body (JSON)
patchobjectrequeridoproductIdsstring[]requerido
Respuestas
- 200
curl -X POST 'https://api.mosend.dev/organizations/a1b2c3d4-1234-5678-9abc-def012345678/license-delivery/products/bulk' \
-H 'X-Api-Key: mk_live_<prefix>.<secret>' \
-H 'Content-Type: application/json' \
-d '{"patch": {},"productIds": []}'{
"data": {
"id": "00000000-0000-0000-0000-000000000000",
"name": "string",
"description": "string"
},
"timestamp": "2026-05-01T03:42:18.123Z"
}/organizations/:orgId/license-delivery/products/bulk-priceAjusta el precio base de varios productos (porcentaje, monto o fijo, con redondeo). Con soloVistaPrevia devuelve el antes/después sin guardar.
Path params
orgIdstringrequerido
Body (JSON)
modostringrequeridoPORCENTAJEMONTOFIJOPORCENTAJE: valor = +10 / -15. MONTO: centavos a sumar o restar. FIJO: precio en centavos.
valornumberrequeridoredondeostringPESOCIENMILincluirVariantesbooleanAplicar también a las variantes de esos productos.
soloVistaPreviabooleanSolo calcular el antes/después, sin guardar.
productIdsstring[]requerido
Respuestas
- 200
curl -X POST 'https://api.mosend.dev/organizations/a1b2c3d4-1234-5678-9abc-def012345678/license-delivery/products/bulk-price' \
-H 'X-Api-Key: mk_live_<prefix>.<secret>' \
-H 'Content-Type: application/json' \
-d '{"modo": "PORCENTAJE","valor": 0,"redondeo": "PESO","incluirVariantes": true,"soloVistaPrevia": true,"productIds": []}'{
"data": {
"id": "00000000-0000-0000-0000-000000000000",
"name": "string",
"description": "string"
},
"timestamp": "2026-05-01T03:42:18.123Z"
}/organizations/:orgId/license-delivery/products/bulk-deleteElimina varios productos; los que tienen ventas se informan aparte sin borrarse.
Path params
orgIdstringrequerido
Body (JSON)
productIdsstring[]requerido
Respuestas
- 200
curl -X POST 'https://api.mosend.dev/organizations/a1b2c3d4-1234-5678-9abc-def012345678/license-delivery/products/bulk-delete' \
-H 'X-Api-Key: mk_live_<prefix>.<secret>' \
-H 'Content-Type: application/json' \
-d '{"productIds": []}'{
"data": {
"id": "00000000-0000-0000-0000-000000000000",
"name": "string",
"description": "string"
},
"timestamp": "2026-05-01T03:42:18.123Z"
}/organizations/:orgId/license-delivery/price-lists/:priceListId/items/bulkPrecio propio de varios productos en una lista: porcentaje del base, copiar el base, fijo o quitar.
Path params
orgIdstringrequeridopriceListIdstringrequerido
Body (JSON)
productIdsstring[]requeridomodostringrequeridoPORCENTAJE_DEL_BASECOPIAR_BASEFIJOQUITARPORCENTAJE_DEL_BASE: valor = descuento (15 = 15 % menos). FIJO: centavos.
valornumberredondeostringPESOCIENMILincluirVariantesboolean
Respuestas
- 200
curl -X PUT 'https://api.mosend.dev/organizations/a1b2c3d4-1234-5678-9abc-def012345678/license-delivery/price-lists/00000000-0000-0000-0000-000000000000/items/bulk' \
-H 'X-Api-Key: mk_live_<prefix>.<secret>' \
-H 'Content-Type: application/json' \
-d '{"productIds": [],"modo": "PORCENTAJE_DEL_BASE","valor": 0,"redondeo": "PESO","incluirVariantes": true}'{
"data": {
"id": "00000000-0000-0000-0000-000000000000",
"name": "Clientes activos",
"description": "Contactos con interacción últimos 30 días"
},
"timestamp": "2026-05-01T03:42:18.123Z"
}/organizations/:orgId/license-delivery/productsCrea un producto digital.
Path params
orgIdstringrequerido
Body (JSON)
namestringrequeridodescriptionstringskustringcategorystringCategoría libre para agrupar y filtrar en el panel.
imageUrlstring · uriURLs con @IsUrl http/https: instructionsUrl alimenta un shortlink PÚBLICO en el dominio de la plataforma — sin validar era un open redirect.
priceCentsnumberrequeridoPrecio en centavos de la moneda (evita floats).
durationDaysnumberDías que dura lo vendido, contados desde la ENTREGA. Omitir o `null` = no vence (licencia perpetua), que es como se ha comportado siempre.
renewalNoticeEnabledbooleanSi entra en el aviso de renovación. Hay cosas que se venden una vez.
currencystringMoneda ISO-4217 (3 letras mayúsculas). Por defecto COP.
instructionsUrlstring · urientregaModostringAUTOMATICAASISTIDACONSULTARModo de entrega: AUTOMATICA (entrega una llave del inventario), ASISTIDA (venta automática, la entrega un asesor; no usa inventario) o CONSULTAR (si no hay stock no dice "agotado": deriva a un asesor para reconfirmar).
datoAdicionalLabelstringDato adicional a pedir al cliente para este producto (ej. "correo").
datoAdicionalRequeridobooleanSi ese dato es obligatorio antes de cerrar la venta.
activeboolean
Respuestas
- 201
curl -X POST 'https://api.mosend.dev/organizations/a1b2c3d4-1234-5678-9abc-def012345678/license-delivery/products' \
-H 'X-Api-Key: mk_live_<prefix>.<secret>' \
-H 'Content-Type: application/json' \
-d '{"name": "<name>","description": "<description>","sku": "<sku>","category": "<category>","imageUrl": "https://tu-app.com/endpoint","priceCents": 0,"durationDays": 0,"renewalNoticeEnabled": true,"currency": "<currency>","instructionsUrl": "https://tu-app.com/endpoint","entregaModo": "AUTOMATICA","datoAdicionalLabel": "<datoAdicionalLabel>","datoAdicionalRequerido": true,"active": true}'{
"data": {
"id": "00000000-0000-0000-0000-000000000000",
"name": "string",
"description": "string"
},
"timestamp": "2026-05-01T03:42:18.123Z"
}/organizations/:orgId/license-delivery/products/:productIdDetalle de un producto digital con su stock.
Path params
orgIdstringrequeridoproductIdstringrequerido
Respuestas
- 200
curl -X GET 'https://api.mosend.dev/organizations/a1b2c3d4-1234-5678-9abc-def012345678/license-delivery/products/00000000-0000-0000-0000-000000000000' \ -H 'X-Api-Key: mk_live_<prefix>.<secret>'
{
"data": {
"id": "00000000-0000-0000-0000-000000000000",
"createdAt": "2026-05-01T03:42:18.123Z"
},
"timestamp": "2026-05-01T03:42:18.123Z"
}/organizations/:orgId/license-delivery/products/:productIdActualiza un producto digital.
Path params
orgIdstringrequeridoproductIdstringrequerido
Body (JSON)
namestringdescriptionstringskustringcategorystringimageUrlstring · uripriceCentsnumberdurationDaysnumberDías que dura lo vendido, contados desde la ENTREGA. Omitir o `null` = no vence (licencia perpetua), que es como se ha comportado siempre.
renewalNoticeEnabledbooleanSi entra en el aviso de renovación.
currencystringinstructionsUrlstring · urientregaModostringAUTOMATICAASISTIDACONSULTARdatoAdicionalLabelstringdatoAdicionalRequeridobooleanactiveboolean
Respuestas
- 200
curl -X PATCH 'https://api.mosend.dev/organizations/a1b2c3d4-1234-5678-9abc-def012345678/license-delivery/products/00000000-0000-0000-0000-000000000000' \
-H 'X-Api-Key: mk_live_<prefix>.<secret>' \
-H 'Content-Type: application/json' \
-d '{"name": "<name>","description": "<description>","sku": "<sku>","category": "<category>","imageUrl": "https://tu-app.com/endpoint","priceCents": 0,"durationDays": 0,"renewalNoticeEnabled": true,"currency": "<currency>","instructionsUrl": "https://tu-app.com/endpoint","entregaModo": "AUTOMATICA","datoAdicionalLabel": "<datoAdicionalLabel>","datoAdicionalRequerido": true,"active": true}'{
"data": {
"id": "00000000-0000-0000-0000-000000000000",
"name": "string",
"description": "string"
},
"timestamp": "2026-05-01T03:42:18.123Z"
}/organizations/:orgId/license-delivery/products/:productIdElimina un producto y su pool de llaves.
Path params
orgIdstringrequeridoproductIdstringrequerido
Respuestas
- 200
curl -X DELETE 'https://api.mosend.dev/organizations/a1b2c3d4-1234-5678-9abc-def012345678/license-delivery/products/00000000-0000-0000-0000-000000000000' \ -H 'X-Api-Key: mk_live_<prefix>.<secret>'
{
"data": {
"id": "00000000-0000-0000-0000-000000000000",
"createdAt": "2026-05-01T03:42:18.123Z"
},
"timestamp": "2026-05-01T03:42:18.123Z"
}/organizations/:orgId/license-delivery/transfer-qrSube el QR de la llave de transferencia (PNG/JPG/WebP).
Path params
orgIdstringrequerido
Respuestas
- 201
curl -X POST 'https://api.mosend.dev/organizations/a1b2c3d4-1234-5678-9abc-def012345678/license-delivery/transfer-qr' \ -H 'X-Api-Key: mk_live_<prefix>.<secret>'
{
"data": {
"id": "00000000-0000-0000-0000-000000000000",
"createdAt": "2026-05-01T03:42:18.123Z"
},
"timestamp": "2026-05-01T03:42:18.123Z"
}/organizations/:orgId/license-delivery/transfer-qrQuita el QR de la llave de transferencia.
Path params
orgIdstringrequerido
Respuestas
- 200
curl -X DELETE 'https://api.mosend.dev/organizations/a1b2c3d4-1234-5678-9abc-def012345678/license-delivery/transfer-qr' \ -H 'X-Api-Key: mk_live_<prefix>.<secret>'
{
"data": {
"id": "00000000-0000-0000-0000-000000000000",
"createdAt": "2026-05-01T03:42:18.123Z"
},
"timestamp": "2026-05-01T03:42:18.123Z"
}/organizations/:orgId/license-delivery/products/:productId/imageSube la imagen del producto (PNG/JPG/WebP, máx 8 MB) y la sirve pública.
Path params
orgIdstringrequeridoproductIdstringrequerido
Respuestas
- 201
curl -X POST 'https://api.mosend.dev/organizations/a1b2c3d4-1234-5678-9abc-def012345678/license-delivery/products/00000000-0000-0000-0000-000000000000/image' \ -H 'X-Api-Key: mk_live_<prefix>.<secret>'
{
"data": {
"id": "00000000-0000-0000-0000-000000000000",
"createdAt": "2026-05-01T03:42:18.123Z"
},
"timestamp": "2026-05-01T03:42:18.123Z"
}/organizations/:orgId/license-delivery/products/:productId/imageQuita la imagen subida del producto.
Path params
orgIdstringrequeridoproductIdstringrequerido
Respuestas
- 200
curl -X DELETE 'https://api.mosend.dev/organizations/a1b2c3d4-1234-5678-9abc-def012345678/license-delivery/products/00000000-0000-0000-0000-000000000000/image' \ -H 'X-Api-Key: mk_live_<prefix>.<secret>'
{
"data": {
"id": "00000000-0000-0000-0000-000000000000",
"createdAt": "2026-05-01T03:42:18.123Z"
},
"timestamp": "2026-05-01T03:42:18.123Z"
}/organizations/:orgId/license-delivery/products/:productId/keysCarga llaves al pool del producto (normaliza y omite duplicadas).
Path params
orgIdstringrequeridoproductIdstringrequerido
Body (JSON)
keysstring[]requeridoLlaves a cargar al pool del producto. Se normalizan (trim) y se ignoran duplicadas (dentro del lote y contra las ya existentes).
variantIdstring · uuidVariante destino de las llaves; omitir = pool general del producto.
Respuestas
- 201
curl -X POST 'https://api.mosend.dev/organizations/a1b2c3d4-1234-5678-9abc-def012345678/license-delivery/products/00000000-0000-0000-0000-000000000000/keys' \
-H 'X-Api-Key: mk_live_<prefix>.<secret>' \
-H 'Content-Type: application/json' \
-d '{"keys": [],"variantId": "00000000-0000-0000-0000-000000000000"}'{
"data": {
"id": "00000000-0000-0000-0000-000000000000",
"name": "string",
"description": "string"
},
"timestamp": "2026-05-01T03:42:18.123Z"
}/organizations/:orgId/license-delivery/products/:productId/keysLista las llaves del pool (filtrable por estado).
Path params
orgIdstringrequeridoproductIdstringrequerido
Query params
statusstring
Respuestas
- 200
curl -X GET 'https://api.mosend.dev/organizations/a1b2c3d4-1234-5678-9abc-def012345678/license-delivery/products/00000000-0000-0000-0000-000000000000/keys' \ -H 'X-Api-Key: mk_live_<prefix>.<secret>'
{
"data": [
{
"id": "00000000-0000-0000-0000-000000000000",
"createdAt": "2026-05-01T03:42:18.123Z"
}
],
"timestamp": "2026-05-01T03:42:18.123Z"
}/organizations/:orgId/license-delivery/products/:productId/keys/:keyIdBorra una llave libre del pool (no las entregadas).
Path params
orgIdstringrequeridoproductIdstringrequeridokeyIdstringrequerido
Respuestas
- 200
curl -X DELETE 'https://api.mosend.dev/organizations/a1b2c3d4-1234-5678-9abc-def012345678/license-delivery/products/00000000-0000-0000-0000-000000000000/keys/00000000-0000-0000-0000-000000000000' \ -H 'X-Api-Key: mk_live_<prefix>.<secret>'
{
"data": {
"id": "00000000-0000-0000-0000-000000000000",
"createdAt": "2026-05-01T03:42:18.123Z"
},
"timestamp": "2026-05-01T03:42:18.123Z"
}/organizations/:orgId/license-delivery/products/:productId/checkoutCrea una orden y dispara el cobro Nequi push (Wompi).
Path params
orgIdstringrequeridoproductIdstringrequerido
Body (JSON)
variantIdstring · uuidVariante a vender (requerida si el producto tiene variantes).
quantitynumberCantidad de licencias a vender (1 a 50). Por defecto 1.
methodstringNEQUIDAVIPLATATRANSFERENCIABINANCEMétodo de cobro. Por defecto NEQUI. TRANSFERENCIA = el cliente transfiere el monto exacto a la llave y el pago se confirma aparte; no pasa por pasarela.
nequiPhonestringTeléfono Nequi del cliente (10 dígitos CO) — requerido para NEQUI.
transferAccountIdstring · uuidA qué cuenta de banco transfiere. Vacío = la llave, si la hay.
userLegalIdstringCédula del cliente — requerida para DAVIPLATA.
userLegalIdTypestringCCCENITPPTIcustomerEmailstring · emailcouponCodestringCódigo de cupón de descuento (opcional).
contactIdstring · uuidphoneNumberIdstring · uuidNúmero emisor de WhatsApp para entregar la licencia.
recipientWaIdstringWhatsApp destino (waId, sin '+'). Por defecto 57 + Nequi.
Respuestas
- 201
curl -X POST 'https://api.mosend.dev/organizations/a1b2c3d4-1234-5678-9abc-def012345678/license-delivery/products/00000000-0000-0000-0000-000000000000/checkout' \
-H 'X-Api-Key: mk_live_<prefix>.<secret>' \
-H 'Content-Type: application/json' \
-d '{"variantId": "00000000-0000-0000-0000-000000000000","quantity": 0,"method": "NEQUI","nequiPhone": "<nequiPhone>","transferAccountId": "00000000-0000-0000-0000-000000000000","userLegalId": "00000000-0000-0000-0000-000000000000","userLegalIdType": "CC","customerEmail": "persona@empresa.com","couponCode": "<couponCode>","contactId": "00000000-0000-0000-0000-000000000000","phoneNumberId": "00000000-0000-0000-0000-000000000000","recipientWaId": "00000000-0000-0000-0000-000000000000"}'{
"data": {
"id": "00000000-0000-0000-0000-000000000000",
"name": "string",
"description": "string"
},
"timestamp": "2026-05-01T03:42:18.123Z"
}/organizations/:orgId/license-delivery/renewal-templateEstado del aviso de renovación: si hay plantilla elegida, si Meta la aprobó, y el borrador sugerido.
Path params
orgIdstringrequerido
Respuestas
- 200
curl -X GET 'https://api.mosend.dev/organizations/a1b2c3d4-1234-5678-9abc-def012345678/license-delivery/renewal-template' \ -H 'X-Api-Key: mk_live_<prefix>.<secret>'
{
"data": {
"id": "00000000-0000-0000-0000-000000000000",
"createdAt": "2026-05-01T03:42:18.123Z"
},
"timestamp": "2026-05-01T03:42:18.123Z"
}/organizations/:orgId/license-delivery/renewal-templateCrea la plantilla del aviso contra Meta (queda en revisión) y la deja elegida.
Path params
orgIdstringrequerido
Body (JSON)
wabaIdstring · uuidWABA donde crearla. Obligatorio solo si la organización tiene varias.
namestringNombre de la plantilla en Meta (minúsculas y guiones bajos).
languagestringbodyTextstringTexto del cuerpo, si se editó el sugerido. Debe conservar {{1}} {{2}} {{3}}.
Respuestas
- 201
curl -X POST 'https://api.mosend.dev/organizations/a1b2c3d4-1234-5678-9abc-def012345678/license-delivery/renewal-template' \
-H 'X-Api-Key: mk_live_<prefix>.<secret>' \
-H 'Content-Type: application/json' \
-d '{"wabaId": "00000000-0000-0000-0000-000000000000","name": "<name>","language": "<language>","bodyText": "<bodyText>"}'{
"data": {
"id": "00000000-0000-0000-0000-000000000000",
"name": "bienvenida_v1",
"language": "es_CO",
"category": "MARKETING",
"components": []
},
"timestamp": "2026-05-01T03:42:18.123Z"
}/organizations/:orgId/license-delivery/expirationsLicencias vendidas que vencen pronto (o ya vencieron), para poder avisar al cliente a tiempo.
Path params
orgIdstringrequerido
Query params
daysstringrequeridoincludeExpiredstringrequerido
Respuestas
- 200
curl -X GET 'https://api.mosend.dev/organizations/a1b2c3d4-1234-5678-9abc-def012345678/license-delivery/expirations' \ -H 'X-Api-Key: mk_live_<prefix>.<secret>'
{
"data": [
{
"id": "00000000-0000-0000-0000-000000000000",
"createdAt": "2026-05-01T03:42:18.123Z"
}
],
"timestamp": "2026-05-01T03:42:18.123Z"
}/organizations/:orgId/license-delivery/orders/:orderId/expirationFija o quita a mano la fecha de vencimiento de una venta (para las anteriores a la vigencia).
Path params
orgIdstringrequeridoorderIdstringrequerido
Body (JSON)
expiresAtstring
Respuestas
- 200
curl -X PATCH 'https://api.mosend.dev/organizations/a1b2c3d4-1234-5678-9abc-def012345678/license-delivery/orders/00000000-0000-0000-0000-000000000000/expiration' \
-H 'X-Api-Key: mk_live_<prefix>.<secret>' \
-H 'Content-Type: application/json' \
-d '{"expiresAt": "<expiresAt>"}'{
"data": {
"id": "00000000-0000-0000-0000-000000000000",
"name": "string",
"description": "string"
},
"timestamp": "2026-05-01T03:42:18.123Z"
}/organizations/:orgId/license-delivery/ordersHistorial de ventas (órdenes) con el producto.
Path params
orgIdstringrequerido
Query params
statusstringlimitnumberMáximo de filas (el service lo capa a 500).
contactIdstringFiltra las ventas de un contacto (para el panel del inbox: "ventas de este número").
conversationIdstringFiltra las ventas originadas en una conversación.
Respuestas
- 200
curl -X GET 'https://api.mosend.dev/organizations/a1b2c3d4-1234-5678-9abc-def012345678/license-delivery/orders' \ -H 'X-Api-Key: mk_live_<prefix>.<secret>'
{
"data": [
{
"id": "00000000-0000-0000-0000-000000000000",
"createdAt": "2026-05-01T03:42:18.123Z"
}
],
"timestamp": "2026-05-01T03:42:18.123Z"
}/organizations/:orgId/license-delivery/orders/:orderIdEstado de una orden de compra.
Path params
orgIdstringrequeridoorderIdstringrequerido
Respuestas
- 200
curl -X GET 'https://api.mosend.dev/organizations/a1b2c3d4-1234-5678-9abc-def012345678/license-delivery/orders/00000000-0000-0000-0000-000000000000' \ -H 'X-Api-Key: mk_live_<prefix>.<secret>'
{
"data": {
"id": "00000000-0000-0000-0000-000000000000",
"createdAt": "2026-05-01T03:42:18.123Z"
},
"timestamp": "2026-05-01T03:42:18.123Z"
}/organizations/:orgId/license-delivery/orders/:orderId/resendReenvía la licencia de una orden ya entregada (WhatsApp + correo).
Path params
orgIdstringrequeridoorderIdstringrequerido
Respuestas
- 201
curl -X POST 'https://api.mosend.dev/organizations/a1b2c3d4-1234-5678-9abc-def012345678/license-delivery/orders/00000000-0000-0000-0000-000000000000/resend' \ -H 'X-Api-Key: mk_live_<prefix>.<secret>'
{
"data": {
"id": "00000000-0000-0000-0000-000000000000",
"createdAt": "2026-05-01T03:42:18.123Z"
},
"timestamp": "2026-05-01T03:42:18.123Z"
}/organizations/:orgId/license-delivery/orders/:orderId/keys/:keyId/replaceReemplaza una llave entregada que no le funcionó al cliente: revoca la vieja (la conserva enlazada), entrega una nueva y opcionalmente notifica. Emite el webhook license.key_replaced.
Path params
orgIdstringrequeridoorderIdstringrequeridokeyIdstringrequerido
Body (JSON)
sourcestringinventorymanual'inventory' (por defecto): saca la nueva del pool disponible. 'manual': usa la llave pegada en `replacementValue`.
replacementValuestringLlave nueva a mano (obligatoria si source='manual').
reasonstringMotivo del reemplazo (trazabilidad; ej. "no activó").
notifybooleanEnviar al cliente el aviso de cambio de llave. Por defecto true.
Respuestas
- 201
curl -X POST 'https://api.mosend.dev/organizations/a1b2c3d4-1234-5678-9abc-def012345678/license-delivery/orders/00000000-0000-0000-0000-000000000000/keys/00000000-0000-0000-0000-000000000000/replace' \
-H 'X-Api-Key: mk_live_<prefix>.<secret>' \
-H 'Content-Type: application/json' \
-d '{"source": "inventory","replacementValue": "<replacementValue>","reason": "<reason>","notify": true}'{
"data": {
"id": "00000000-0000-0000-0000-000000000000",
"name": "string",
"description": "string"
},
"timestamp": "2026-05-01T03:42:18.123Z"
}/organizations/:orgId/license-delivery/orders/:orderId/cancelCancela una orden pendiente de pago (libera las llaves).
Path params
orgIdstringrequeridoorderIdstringrequerido
Respuestas
- 201
curl -X POST 'https://api.mosend.dev/organizations/a1b2c3d4-1234-5678-9abc-def012345678/license-delivery/orders/00000000-0000-0000-0000-000000000000/cancel' \ -H 'X-Api-Key: mk_live_<prefix>.<secret>'
{
"data": {
"id": "00000000-0000-0000-0000-000000000000",
"createdAt": "2026-05-01T03:42:18.123Z"
},
"timestamp": "2026-05-01T03:42:18.123Z"
}/organizations/:orgId/license-delivery/inbox/testPrueba la conexión a la bandeja y muestra lo que lee.
Path params
orgIdstringrequerido
Respuestas
- 201
curl -X POST 'https://api.mosend.dev/organizations/a1b2c3d4-1234-5678-9abc-def012345678/license-delivery/inbox/test' \ -H 'X-Api-Key: mk_live_<prefix>.<secret>'
{
"data": {
"id": "00000000-0000-0000-0000-000000000000",
"createdAt": "2026-05-01T03:42:18.123Z"
},
"timestamp": "2026-05-01T03:42:18.123Z"
}/organizations/:orgId/license-delivery/inbox/paymentsPagos leídos del correo, con los pedidos que les encajan.
Path params
orgIdstringrequerido
Respuestas
- 200
curl -X GET 'https://api.mosend.dev/organizations/a1b2c3d4-1234-5678-9abc-def012345678/license-delivery/inbox/payments' \ -H 'X-Api-Key: mk_live_<prefix>.<secret>'
{
"data": [
{
"id": "00000000-0000-0000-0000-000000000000",
"createdAt": "2026-05-01T03:42:18.123Z"
}
],
"timestamp": "2026-05-01T03:42:18.123Z"
}/organizations/:orgId/license-delivery/inbox/payments/:pagoId/matchLiga un pago con un pedido y entrega la licencia.
Path params
orgIdstringrequeridopagoIdstringrequerido
Body (JSON)
orderIdstring · uuidrequerido
Respuestas
- 201
curl -X POST 'https://api.mosend.dev/organizations/a1b2c3d4-1234-5678-9abc-def012345678/license-delivery/inbox/payments/00000000-0000-0000-0000-000000000000/match' \
-H 'X-Api-Key: mk_live_<prefix>.<secret>' \
-H 'Content-Type: application/json' \
-d '{"orderId": "00000000-0000-0000-0000-000000000000"}'{
"data": {
"id": "00000000-0000-0000-0000-000000000000",
"name": "string",
"description": "string"
},
"timestamp": "2026-05-01T03:42:18.123Z"
}/organizations/:orgId/license-delivery/inbox/payments/:pagoId/ignoreDescarta un pago (no era de una venta).
Path params
orgIdstringrequeridopagoIdstringrequerido
Body (JSON)
notastring
Respuestas
- 201
curl -X POST 'https://api.mosend.dev/organizations/a1b2c3d4-1234-5678-9abc-def012345678/license-delivery/inbox/payments/00000000-0000-0000-0000-000000000000/ignore' \
-H 'X-Api-Key: mk_live_<prefix>.<secret>' \
-H 'Content-Type: application/json' \
-d '{"nota": "<nota>"}'{
"data": {
"id": "00000000-0000-0000-0000-000000000000",
"name": "string",
"description": "string"
},
"timestamp": "2026-05-01T03:42:18.123Z"
}/organizations/:orgId/license-delivery/orders/:orderId/confirm-transferConfirma la transferencia recibida y entrega la licencia.
Path params
orgIdstringrequeridoorderIdstringrequerido
Respuestas
- 201
curl -X POST 'https://api.mosend.dev/organizations/a1b2c3d4-1234-5678-9abc-def012345678/license-delivery/orders/00000000-0000-0000-0000-000000000000/confirm-transfer' \ -H 'X-Api-Key: mk_live_<prefix>.<secret>'
{
"data": {
"id": "00000000-0000-0000-0000-000000000000",
"createdAt": "2026-05-01T03:42:18.123Z"
},
"timestamp": "2026-05-01T03:42:18.123Z"
}/organizations/:orgId/license-delivery/orders/:orderId/completar-entregaMarca ENTREGADA una orden pagada (entrega asistida): el asesor ya la completó en la conversación. Con `llaves` registra las que entregó a mano (una por línea de la venta) y las envía con la plantilla e instrucciones del producto; sin ellas basta el `mensaje` libre. `notificar: false` la registra sin escribirle al cliente.
Path params
orgIdstringrequeridoorderIdstringrequerido
Body (JSON)
llavesstring[]Llaves que el asesor entrega a mano (una por elemento o por línea). Se registran en la venta como licencias ENTREGADAS y se envían con la plantilla de entrega e instrucciones. Sin `llaves`, se marca entregada con el `mensaje` libre (comportamiento histórico).
mensajestringNota adicional para el cliente, después de la entrega.
notificarbooleanfalse = registrar la llave sin escribirle al cliente. Default true.
Respuestas
- 201
curl -X POST 'https://api.mosend.dev/organizations/a1b2c3d4-1234-5678-9abc-def012345678/license-delivery/orders/00000000-0000-0000-0000-000000000000/completar-entrega' \
-H 'X-Api-Key: mk_live_<prefix>.<secret>' \
-H 'Content-Type: application/json' \
-d '{"llaves": [],"mensaje": "<mensaje>","notificar": true}'{
"data": {
"id": "00000000-0000-0000-0000-000000000000",
"name": "string",
"description": "string"
},
"timestamp": "2026-05-01T03:42:18.123Z"
}/organizations/:orgId/license-delivery/orders/:orderId/refundRegistra el reembolso de una orden pagada y revoca sus llaves (el dinero se devuelve en el panel Wompi).
Path params
orgIdstringrequeridoorderIdstringrequerido
Body (JSON)
reasonstringMotivo del reembolso (trazabilidad).
Respuestas
- 201
curl -X POST 'https://api.mosend.dev/organizations/a1b2c3d4-1234-5678-9abc-def012345678/license-delivery/orders/00000000-0000-0000-0000-000000000000/refund' \
-H 'X-Api-Key: mk_live_<prefix>.<secret>' \
-H 'Content-Type: application/json' \
-d '{"reason": "<reason>"}'{
"data": {
"id": "00000000-0000-0000-0000-000000000000",
"name": "string",
"description": "string"
},
"timestamp": "2026-05-01T03:42:18.123Z"
}/organizations/:orgId/license-delivery/products/:productId/keys/:keyId/revokeRevoca una llave ya entregada (fraude/contracargo).
Path params
orgIdstringrequeridoproductIdstringrequeridokeyIdstringrequerido
Respuestas
- 201
curl -X POST 'https://api.mosend.dev/organizations/a1b2c3d4-1234-5678-9abc-def012345678/license-delivery/products/00000000-0000-0000-0000-000000000000/keys/00000000-0000-0000-0000-000000000000/revoke' \ -H 'X-Api-Key: mk_live_<prefix>.<secret>'
{
"data": {
"id": "00000000-0000-0000-0000-000000000000",
"createdAt": "2026-05-01T03:42:18.123Z"
},
"timestamp": "2026-05-01T03:42:18.123Z"
}/organizations/:orgId/license-delivery/conversations/:conversationId/sellVende/entrega una licencia al contacto de la conversación (asesor).
Path params
orgIdstringrequeridoconversationIdstringrequerido
Body (JSON)
productIdstring · uuidrequeridovariantIdstring · uuidVariante a vender (requerida si el producto tiene variantes).
quantitynumberCantidad de licencias a vender (1 a 50). Por defecto 1.
methodstringNEQUIDAVIPLATATRANSFERENCIABINANCEnequiPhonestringtransferAccountIdstring · uuidA qué cuenta de banco transfiere. Vacío = la llave, si la hay.
userLegalIdstringuserLegalIdTypestringCCCENITPPTIcustomerEmailstring · emailcouponCodestringentregarYabooleanSolo Bre-B (TRANSFERENCIA): entrega la licencia YA (fiado) y deja el cobro pendiente; el conciliador lo marca pagado cuando entra la transferencia.
notifyboolean¿Enviar al cliente el mensaje "gracias por tu compra"? Por defecto sí.
unitPriceCentsnumberPrecio unitario (centavos) fijado a mano por el asesor: reemplaza el de lista/etiqueta y es lo que se cobra. Omitir = precio de lista.
Respuestas
- 201
curl -X POST 'https://api.mosend.dev/organizations/a1b2c3d4-1234-5678-9abc-def012345678/license-delivery/conversations/00000000-0000-0000-0000-000000000000/sell' \
-H 'X-Api-Key: mk_live_<prefix>.<secret>' \
-H 'Content-Type: application/json' \
-d '{"productId": "00000000-0000-0000-0000-000000000000","variantId": "00000000-0000-0000-0000-000000000000","quantity": 0,"method": "NEQUI","nequiPhone": "<nequiPhone>","transferAccountId": "00000000-0000-0000-0000-000000000000","userLegalId": "00000000-0000-0000-0000-000000000000","userLegalIdType": "CC","customerEmail": "persona@empresa.com","couponCode": "<couponCode>","entregarYa": true,"notify": true,"unitPriceCents": 0}'{
"data": {
"id": "00000000-0000-0000-0000-000000000000",
"name": "string",
"description": "string"
},
"timestamp": "2026-05-01T03:42:18.123Z"
}/organizations/:orgId/license-delivery/conversations/:conversationId/sell-cartVende un CARRITO (varios productos, una sola orden) al contacto (asesor). Solo Nequi o Bre-B.
Path params
orgIdstringrequeridoconversationIdstringrequerido
Body (JSON)
itemsCartItemDto[]requeridomethodstringNEQUITRANSFERENCIAnequiPhonestringtransferAccountIdstring · uuidA qué cuenta de banco transfiere. Vacío = la llave, si la hay.
customerEmailstring · emailentregarYabooleanSolo Bre-B: entrega ya (fiado) y concilia el cobro después.
notifyboolean¿Enviar el mensaje "gracias por tu compra"? Por defecto sí.
Respuestas
- 201
curl -X POST 'https://api.mosend.dev/organizations/a1b2c3d4-1234-5678-9abc-def012345678/license-delivery/conversations/00000000-0000-0000-0000-000000000000/sell-cart' \
-H 'X-Api-Key: mk_live_<prefix>.<secret>' \
-H 'Content-Type: application/json' \
-d '{"items": [],"method": "NEQUI","nequiPhone": "<nequiPhone>","transferAccountId": "00000000-0000-0000-0000-000000000000","customerEmail": "persona@empresa.com","entregarYa": true,"notify": true}'{
"data": {
"id": "00000000-0000-0000-0000-000000000000",
"name": "string",
"description": "string"
},
"timestamp": "2026-05-01T03:42:18.123Z"
}/organizations/:orgId/license-delivery/conversations/:conversationId/dispatchEntrega una licencia SIN cobro al contacto de la conversación (asesor).
Path params
orgIdstringrequeridoconversationIdstringrequerido
Body (JSON)
productIdstring · uuidrequeridovariantIdstring · uuidVariante a entregar (si el producto tiene variantes).
quantitynumberCantidad de licencias a entregar (1 a 50). Por defecto 1.
Respuestas
- 201
curl -X POST 'https://api.mosend.dev/organizations/a1b2c3d4-1234-5678-9abc-def012345678/license-delivery/conversations/00000000-0000-0000-0000-000000000000/dispatch' \
-H 'X-Api-Key: mk_live_<prefix>.<secret>' \
-H 'Content-Type: application/json' \
-d '{"productId": "00000000-0000-0000-0000-000000000000","variantId": "00000000-0000-0000-0000-000000000000","quantity": 0}'{
"data": {
"id": "00000000-0000-0000-0000-000000000000",
"name": "string",
"description": "string"
},
"timestamp": "2026-05-01T03:42:18.123Z"
}/organizations/:orgId/license-delivery/conversations/:conversationId/venta-manualRegistra una venta MANUAL con pago y entrega desacoplados (fiado / por cobrar).
Path params
orgIdstringrequeridoconversationIdstringrequerido
Body (JSON)
productIdstring · uuidrequeridovariantIdstring · uuidquantitynumberentregarbooleanrequerido¿Entregar ya la licencia?
pagadobooleanrequerido¿El cliente ya pagó? (false = fiado / por cobrar).
unitPriceCentsnumberPrecio unitario a facturar en centavos (override del asesor: descuento u otro acuerdo). Si se omite, se usa el de la lista.
notifyboolean¿Enviar al cliente el mensaje "gracias por tu compra"? Por defecto sí.
Respuestas
- 201
curl -X POST 'https://api.mosend.dev/organizations/a1b2c3d4-1234-5678-9abc-def012345678/license-delivery/conversations/00000000-0000-0000-0000-000000000000/venta-manual' \
-H 'X-Api-Key: mk_live_<prefix>.<secret>' \
-H 'Content-Type: application/json' \
-d '{"productId": "00000000-0000-0000-0000-000000000000","variantId": "00000000-0000-0000-0000-000000000000","quantity": 0,"entregar": true,"pagado": true,"unitPriceCents": 0,"notify": true}'{
"data": {
"id": "00000000-0000-0000-0000-000000000000",
"name": "string",
"description": "string"
},
"timestamp": "2026-05-01T03:42:18.123Z"
}/organizations/:orgId/license-delivery/conversations/:conversationId/venta-manual-carritoRegistra una venta MANUAL de un CARRITO (varios productos) con pago y entrega desacoplados (fiado / por cobrar).
Path params
orgIdstringrequeridoconversationIdstringrequerido
Body (JSON)
itemsManualCartItemDto[]requeridoentregarbooleanrequerido¿Entregar ya las licencias?
pagadobooleanrequerido¿El cliente ya pagó? (false = fiado / por cobrar).
notifyboolean¿Enviar el mensaje "gracias por tu compra"? Por defecto sí.
Respuestas
- 201
curl -X POST 'https://api.mosend.dev/organizations/a1b2c3d4-1234-5678-9abc-def012345678/license-delivery/conversations/00000000-0000-0000-0000-000000000000/venta-manual-carrito' \
-H 'X-Api-Key: mk_live_<prefix>.<secret>' \
-H 'Content-Type: application/json' \
-d '{"items": [],"entregar": true,"pagado": true,"notify": true}'{
"data": {
"id": "00000000-0000-0000-0000-000000000000",
"name": "string",
"description": "string"
},
"timestamp": "2026-05-01T03:42:18.123Z"
}/organizations/:orgId/license-delivery/orders/:orderId/marcar-pagadaMarca una venta manual como PAGADA (cierra el fiado).
Path params
orgIdstringrequeridoorderIdstringrequerido
Respuestas
- 201
curl -X POST 'https://api.mosend.dev/organizations/a1b2c3d4-1234-5678-9abc-def012345678/license-delivery/orders/00000000-0000-0000-0000-000000000000/marcar-pagada' \ -H 'X-Api-Key: mk_live_<prefix>.<secret>'
{
"data": {
"id": "00000000-0000-0000-0000-000000000000",
"createdAt": "2026-05-01T03:42:18.123Z"
},
"timestamp": "2026-05-01T03:42:18.123Z"
}/organizations/:orgId/license-delivery/orders/:orderId/marcar-entregadaMarca una venta manual como ENTREGADA (asigna/envía la licencia ahora).
Path params
orgIdstringrequeridoorderIdstringrequerido
Respuestas
- 201
curl -X POST 'https://api.mosend.dev/organizations/a1b2c3d4-1234-5678-9abc-def012345678/license-delivery/orders/00000000-0000-0000-0000-000000000000/marcar-entregada' \ -H 'X-Api-Key: mk_live_<prefix>.<secret>'
{
"data": {
"id": "00000000-0000-0000-0000-000000000000",
"createdAt": "2026-05-01T03:42:18.123Z"
},
"timestamp": "2026-05-01T03:42:18.123Z"
}/organizations/:orgId/license-delivery/products/:productId/variantsCrea una variante del producto (precio propio).
Path params
orgIdstringrequeridoproductIdstringrequerido
Body (JSON)
namestringrequeridopriceCentsnumberrequeridodurationDaysnumberDías que dura lo vendido, contados desde la ENTREGA. Omitir o `null` = no vence (licencia perpetua), que es como se ha comportado siempre.
sortOrdernumber
Respuestas
- 201
curl -X POST 'https://api.mosend.dev/organizations/a1b2c3d4-1234-5678-9abc-def012345678/license-delivery/products/00000000-0000-0000-0000-000000000000/variants' \
-H 'X-Api-Key: mk_live_<prefix>.<secret>' \
-H 'Content-Type: application/json' \
-d '{"name": "<name>","priceCents": 0,"durationDays": 0,"sortOrder": 0}'{
"data": {
"id": "00000000-0000-0000-0000-000000000000",
"name": "string",
"description": "string"
},
"timestamp": "2026-05-01T03:42:18.123Z"
}/organizations/:orgId/license-delivery/products/:productId/variants/:variantIdActualiza una variante.
Path params
orgIdstringrequeridoproductIdstringrequeridovariantIdstringrequerido
Body (JSON)
namestringpriceCentsnumberdurationDaysnumberDías que dura lo vendido, contados desde la ENTREGA. Omitir o `null` = no vence (licencia perpetua), que es como se ha comportado siempre.
activebooleansortOrdernumber
Respuestas
- 200
curl -X PATCH 'https://api.mosend.dev/organizations/a1b2c3d4-1234-5678-9abc-def012345678/license-delivery/products/00000000-0000-0000-0000-000000000000/variants/00000000-0000-0000-0000-000000000000' \
-H 'X-Api-Key: mk_live_<prefix>.<secret>' \
-H 'Content-Type: application/json' \
-d '{"name": "<name>","priceCents": 0,"durationDays": 0,"active": true,"sortOrder": 0}'{
"data": {
"id": "00000000-0000-0000-0000-000000000000",
"name": "string",
"description": "string"
},
"timestamp": "2026-05-01T03:42:18.123Z"
}/organizations/:orgId/license-delivery/products/:productId/variants/:variantIdElimina una variante sin ventas (sus llaves libres vuelven al pool general).
Path params
orgIdstringrequeridoproductIdstringrequeridovariantIdstringrequerido
Respuestas
- 200
curl -X DELETE 'https://api.mosend.dev/organizations/a1b2c3d4-1234-5678-9abc-def012345678/license-delivery/products/00000000-0000-0000-0000-000000000000/variants/00000000-0000-0000-0000-000000000000' \ -H 'X-Api-Key: mk_live_<prefix>.<secret>'
{
"data": {
"id": "00000000-0000-0000-0000-000000000000",
"createdAt": "2026-05-01T03:42:18.123Z"
},
"timestamp": "2026-05-01T03:42:18.123Z"
}/organizations/:orgId/license-delivery/orders/:orderId/otpValida el OTP de una orden Daviplata.
Path params
orgIdstringrequeridoorderIdstringrequerido
Body (JSON)
codestringrequeridoCódigo OTP que le llegó al cliente por SMS (Daviplata).
Respuestas
- 201
curl -X POST 'https://api.mosend.dev/organizations/a1b2c3d4-1234-5678-9abc-def012345678/license-delivery/orders/00000000-0000-0000-0000-000000000000/otp' \
-H 'X-Api-Key: mk_live_<prefix>.<secret>' \
-H 'Content-Type: application/json' \
-d '{"code": "<code>"}'{
"data": {
"id": "00000000-0000-0000-0000-000000000000",
"name": "string",
"description": "string"
},
"timestamp": "2026-05-01T03:42:18.123Z"
}/organizations/:orgId/license-delivery/orders/:orderId/otp/resendReenvía el OTP de una orden Daviplata.
Path params
orgIdstringrequeridoorderIdstringrequerido
Respuestas
- 201
curl -X POST 'https://api.mosend.dev/organizations/a1b2c3d4-1234-5678-9abc-def012345678/license-delivery/orders/00000000-0000-0000-0000-000000000000/otp/resend' \ -H 'X-Api-Key: mk_live_<prefix>.<secret>'
{
"data": {
"id": "00000000-0000-0000-0000-000000000000",
"createdAt": "2026-05-01T03:42:18.123Z"
},
"timestamp": "2026-05-01T03:42:18.123Z"
}/organizations/:orgId/license-delivery/payments-inboxTodo lo que dice que entró plata: avisos del banco y comprobantes del chat, en una lista.
Path params
orgIdstringrequerido
Query params
origenstringrequeridoestadostringrequeridodesdestringrequeridohastastringrequeridoqstringrequeridolimitstringrequeridooffsetstringrequerido
Respuestas
- 200
curl -X GET 'https://api.mosend.dev/organizations/a1b2c3d4-1234-5678-9abc-def012345678/license-delivery/payments-inbox' \ -H 'X-Api-Key: mk_live_<prefix>.<secret>'
{
"data": [
{
"id": "00000000-0000-0000-0000-000000000000",
"createdAt": "2026-05-01T03:42:18.123Z"
}
],
"timestamp": "2026-05-01T03:42:18.123Z"
}/organizations/:orgId/license-delivery/payments-inbox/discardDescarta varios de una vez (ignora avisos, rechaza comprobantes). Aprobar sigue siendo de a uno.
Path params
orgIdstringrequerido
Body (JSON)
itemsobject[]requeridoQué descartar. Hasta 100 por llamada.
reasonstringrequeridoPor qué. En los comprobantes lo lee el cliente.
Respuestas
- 201
curl -X POST 'https://api.mosend.dev/organizations/a1b2c3d4-1234-5678-9abc-def012345678/license-delivery/payments-inbox/discard' \
-H 'X-Api-Key: mk_live_<prefix>.<secret>' \
-H 'Content-Type: application/json' \
-d '{"items": [],"reason": "<reason>"}'{
"data": {
"id": "00000000-0000-0000-0000-000000000000",
"name": "string",
"description": "string"
},
"timestamp": "2026-05-01T03:42:18.123Z"
}/organizations/:orgId/license-delivery/transfer-accountsCuentas a las que el cliente puede transferir (bancos, llaves).
Path params
orgIdstringrequerido
Respuestas
- 200
curl -X GET 'https://api.mosend.dev/organizations/a1b2c3d4-1234-5678-9abc-def012345678/license-delivery/transfer-accounts' \ -H 'X-Api-Key: mk_live_<prefix>.<secret>'
{
"data": [
{
"id": "00000000-0000-0000-0000-000000000000",
"createdAt": "2026-05-01T03:42:18.123Z"
}
],
"timestamp": "2026-05-01T03:42:18.123Z"
}/organizations/:orgId/license-delivery/transfer-accountsAgrega una cuenta de transferencia.
Path params
orgIdstringrequerido
Body (JSON)
labelstringrequeridoCómo la ve el cliente en la lista.
bankNamestringBanco o entidad.
accountKindstringAHORROSCORRIENTENEQUILLAVEOTROTipo de cuenta.
accountNumberstringrequeridoNúmero de cuenta, llave Bre-B o celular de Nequi.
holderstringTitular de la cuenta.
holderDocstringDocumento del titular.
instructionsstringTexto que acompaña a esta cuenta.
qrMediaIdstring · uuidMediaAsset del QR de esta cuenta.
senderDomainstringDominio que firma los correos de aviso de este banco, para conciliar (ej. bancolombia.com.co).
currencystringEn qué moneda recibe esta cuenta (ISO 4217). Vacío = cualquiera. Solo se le ofrece a quien paga en esa moneda.
enabledbooleanSi se le ofrece al cliente.
Respuestas
- 201
curl -X POST 'https://api.mosend.dev/organizations/a1b2c3d4-1234-5678-9abc-def012345678/license-delivery/transfer-accounts' \
-H 'X-Api-Key: mk_live_<prefix>.<secret>' \
-H 'Content-Type: application/json' \
-d '{"label": "<label>","bankName": "<bankName>","accountKind": "AHORROS","accountNumber": "<accountNumber>","holder": "<holder>","holderDoc": "<holderDoc>","instructions": "<instructions>","qrMediaId": "00000000-0000-0000-0000-000000000000","senderDomain": "<senderDomain>","currency": "<currency>","enabled": true}'{
"data": {
"id": "00000000-0000-0000-0000-000000000000",
"name": "string",
"description": "string"
},
"timestamp": "2026-05-01T03:42:18.123Z"
}/organizations/:orgId/license-delivery/transfer-accounts/:accountIdEdita una cuenta de transferencia.
Path params
orgIdstringrequeridoaccountIdstringrequerido
Body (JSON)
labelstringCómo la ve el cliente en la lista.
bankNamestringBanco o entidad.
accountKindstringAHORROSCORRIENTENEQUILLAVEOTROTipo de cuenta.
accountNumberstringNúmero de cuenta, llave Bre-B o celular de Nequi.
holderstringTitular de la cuenta.
holderDocstringDocumento del titular.
instructionsstringTexto que acompaña a esta cuenta.
qrMediaIdstring · uuidMediaAsset del QR de esta cuenta.
senderDomainstringDominio que firma los correos de aviso de este banco, para conciliar (ej. bancolombia.com.co).
currencystringEn qué moneda recibe esta cuenta (ISO 4217). Vacío = cualquiera. Solo se le ofrece a quien paga en esa moneda.
enabledbooleanSi se le ofrece al cliente.
Respuestas
- 200
curl -X PATCH 'https://api.mosend.dev/organizations/a1b2c3d4-1234-5678-9abc-def012345678/license-delivery/transfer-accounts/00000000-0000-0000-0000-000000000000' \
-H 'X-Api-Key: mk_live_<prefix>.<secret>' \
-H 'Content-Type: application/json' \
-d '{"label": "<label>","bankName": "<bankName>","accountKind": "AHORROS","accountNumber": "<accountNumber>","holder": "<holder>","holderDoc": "<holderDoc>","instructions": "<instructions>","qrMediaId": "00000000-0000-0000-0000-000000000000","senderDomain": "<senderDomain>","currency": "<currency>","enabled": true}'{
"data": {
"id": "00000000-0000-0000-0000-000000000000",
"name": "string",
"description": "string"
},
"timestamp": "2026-05-01T03:42:18.123Z"
}/organizations/:orgId/license-delivery/transfer-accounts/:accountIdElimina una cuenta de transferencia.
Path params
orgIdstringrequeridoaccountIdstringrequerido
Respuestas
- 200
curl -X DELETE 'https://api.mosend.dev/organizations/a1b2c3d4-1234-5678-9abc-def012345678/license-delivery/transfer-accounts/00000000-0000-0000-0000-000000000000' \ -H 'X-Api-Key: mk_live_<prefix>.<secret>'
{
"data": {
"id": "00000000-0000-0000-0000-000000000000",
"createdAt": "2026-05-01T03:42:18.123Z"
},
"timestamp": "2026-05-01T03:42:18.123Z"
}/organizations/:orgId/license-delivery/transfer-accounts/reorderReordena las cuentas: es el orden en que las ve el cliente.
Path params
orgIdstringrequerido
Body (JSON)
idsstring[]requeridoTodas las cuentas de la organización, en el orden deseado.
Respuestas
- 201
curl -X POST 'https://api.mosend.dev/organizations/a1b2c3d4-1234-5678-9abc-def012345678/license-delivery/transfer-accounts/reorder' \
-H 'X-Api-Key: mk_live_<prefix>.<secret>' \
-H 'Content-Type: application/json' \
-d '{"ids": []}'{
"data": {
"id": "00000000-0000-0000-0000-000000000000",
"name": "string",
"description": "string"
},
"timestamp": "2026-05-01T03:42:18.123Z"
}/organizations/:orgId/license-delivery/receiptsComprobantes de pago pendientes de revisar.
Path params
orgIdstringrequerido
Query params
limitstringrequerido
Respuestas
- 200
curl -X GET 'https://api.mosend.dev/organizations/a1b2c3d4-1234-5678-9abc-def012345678/license-delivery/receipts' \ -H 'X-Api-Key: mk_live_<prefix>.<secret>'
{
"data": [
{
"id": "00000000-0000-0000-0000-000000000000",
"createdAt": "2026-05-01T03:42:18.123Z"
}
],
"timestamp": "2026-05-01T03:42:18.123Z"
}/organizations/:orgId/license-delivery/orders/:orderId/receiptsComprobantes enviados para un pedido.
Path params
orgIdstringrequeridoorderIdstringrequerido
Respuestas
- 200
curl -X GET 'https://api.mosend.dev/organizations/a1b2c3d4-1234-5678-9abc-def012345678/license-delivery/orders/00000000-0000-0000-0000-000000000000/receipts' \ -H 'X-Api-Key: mk_live_<prefix>.<secret>'
{
"data": [
{
"id": "00000000-0000-0000-0000-000000000000",
"createdAt": "2026-05-01T03:42:18.123Z"
}
],
"timestamp": "2026-05-01T03:42:18.123Z"
}/organizations/:orgId/license-delivery/receipts/:receiptId/approveAprueba el comprobante y confirma el pago (entrega la licencia).
Path params
orgIdstringrequeridoreceiptIdstringrequerido
Body (JSON)
notestringNota interna de quien revisa.
Respuestas
- 201
curl -X POST 'https://api.mosend.dev/organizations/a1b2c3d4-1234-5678-9abc-def012345678/license-delivery/receipts/00000000-0000-0000-0000-000000000000/approve' \
-H 'X-Api-Key: mk_live_<prefix>.<secret>' \
-H 'Content-Type: application/json' \
-d '{"note": "<note>"}'{
"data": {
"id": "00000000-0000-0000-0000-000000000000",
"name": "string",
"description": "string"
},
"timestamp": "2026-05-01T03:42:18.123Z"
}/organizations/:orgId/license-delivery/receipts/:receiptId/rejectRechaza el comprobante con un motivo.
Path params
orgIdstringrequeridoreceiptIdstringrequerido
Body (JSON)
reasonstringrequeridoPor qué se rechaza. El cliente lo va a leer.
Respuestas
- 201
curl -X POST 'https://api.mosend.dev/organizations/a1b2c3d4-1234-5678-9abc-def012345678/license-delivery/receipts/00000000-0000-0000-0000-000000000000/reject' \
-H 'X-Api-Key: mk_live_<prefix>.<secret>' \
-H 'Content-Type: application/json' \
-d '{"reason": "<reason>"}'{
"data": {
"id": "00000000-0000-0000-0000-000000000000",
"name": "string",
"description": "string"
},
"timestamp": "2026-05-01T03:42:18.123Z"
}/organizations/:orgId/license-delivery/license-delivery/img/:productIdSirve la imagen del producto (stream público).
Path params
productIdstringrequerido
curl -X GET 'https://api.mosend.dev/organizations/:orgId/license-delivery/license-delivery/img/00000000-0000-0000-0000-000000000000'
{
"data": {
"id": "00000000-0000-0000-0000-000000000000",
"createdAt": "2026-05-01T03:42:18.123Z"
},
"timestamp": "2026-05-01T03:42:18.123Z"
}