License Delivery

Referencia de 73 endpoints generados desde mosend-wb-backend/src/modules/license-delivery/license-delivery.controller.ts.

Base path: /organizations/:orgId/license-delivery·73 endpoints·Source: mosend-wb-backend/src/modules/license-delivery/license-delivery.controller.ts
GET/organizations/:orgId/license-delivery/settings
bearer

Configuració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>'
Response · 200
{
  "data": {
    "id": "00000000-0000-0000-0000-000000000000",
    "createdAt": "2026-05-01T03:42:18.123Z"
  },
  "timestamp": "2026-05-01T03:42:18.123Z"
}
PUT/organizations/:orgId/license-delivery/settings
bearer

Actualiza el módulo (habilitar requiere que el plan lo incluya o el add-on).

Path params

  • orgIdstringrequerido

Body (JSON)

  • enabledboolean
  • wompiEnvstring
    testprod
  • wompiPublicKeystring
  • wompiPrivateKeystring

    Se recibe en claro y se guarda cifrada. Enviar '' para borrar.

  • wompiEventsSecretstring
  • wompiIntegritySecretstring
  • deliveryTemplateNamestring

    Plantilla de entrega fuera de 24h. {{1}}=producto {{2}}=llave {{3}}=link.

  • deliveryTemplateLangstring
  • deliveryMessagestring

    Mensaje de entrega (sesión) configurable. Variables: {producto} {llave} {link}.

  • replacementMessagestring

    Mensaje al reemplazar una llave. Variables: {producto} {llave} {link}.

  • transferEnabledboolean

    Cobrar por transferencia a una llave (Bre-B / Nequi), sin pasarela.

  • wompiEnabledboolean

    Cobro por pasarela (Nequi push y Daviplata). Apagarlo no borra las credenciales: se conservan para cuando se vuelva a encender.

  • transferKeystring

    Llave Bre-B (@usuario, correo, celular) o número Nequi que recibe.

  • transferHolderstring

    Titular de la cuenta; se le muestra al cliente antes de que transfiera.

  • transferInstructionsstring

    Texto libre que acompaña a la llave en el mensaje al cliente.

  • transferAmountCodeboolean

    Có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.

  • resendLimitPerDaynumber

    Reenvíos de licencia que el bot puede hacer al mismo cliente por día. 0 = solo una persona.

  • receiptModestring
    MANUALAUTO

    MANUAL = lo aprueba una persona · AUTO = entrega si el monto cuadra.

  • transferExpiryHoursnumber

    Horas que la orden espera la transferencia antes de expirar (1 a 168).

  • transferSellWithoutStockboolean

    Vender también lo que no tiene existencias (lo cierra un asesor).

  • inboxHoststring

    Bandeja donde caen las notificaciones del banco.

  • inboxPortnumber
  • inboxUserstring
  • inboxPasswordstring

    Se recibe en claro y se guarda cifrada. Enviar '' para borrar.

  • inboxTlsboolean
  • inboxSenderDomainstring

    Dominio que debe haber FIRMADO el correo para darlo por bueno.

  • inboxForwarderAddressstring

    Buzó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.

  • inboxProcessedFolderstring

    Carpeta a la que mover los correos ya registrados (p. ej. `Procesados`). Vacío = se quedan en la bandeja de entrada.

  • inboxDeleteAfterReadboolean

    true = eliminar los correos ya registrados tras leerlos (no llenar la bandeja) en vez de moverlos a una carpeta.

  • inboxModestring
    OFFSUGGESTAUTO

    OFF = no se lee · SUGGEST = propone · AUTO = aprueba y entrega.

  • matchWindowHoursnumber

    Horas hacia atrás en las que se busca un pago para una orden (1 a 168).

  • binanceEnabledboolean
  • binancePayIdstring

    Alias o correo de Binance Pay que se le muestra al cliente. No es secreto.

  • binanceApiKeystring

    Clave y secreto de API. Se envían solo al cambiarlos; vacío = conservar el guardado. Nunca se devuelven. DEBEN ser de SOLO LECTURA.

  • binanceApiSecretstring
  • binanceAssetstring

    Moneda del cobro (la estable en dólares, por defecto).

  • binanceExpiryHoursnumber

    Horas que el pedido espera el pago antes de liberar las llaves (1 a 168).

  • binanceModestring
    OFFSUGGESTAUTO

    OFF = no se lee · SUGGEST = propone · AUTO = confirma y entrega.

  • lowStockThresholdnumber

    Umbral de stock bajo (0 = sin alerta).

  • maxPerCustomernumber

    Máximo de licencias por cliente en la ventana (0 = sin límite).

  • maxPerCustomerDaysnumber

    Ventana (días) del límite por cliente.

  • renewalEnabledboolean

    Avisar al cliente antes de que se le venza la licencia.

  • renewalDaysBeforenumber

    Días de antelación del primer aviso (1 a 90).

  • renewalSecondNoticeboolean

    Segundo aviso el mismo día del vencimiento.

  • renewalOnlyBusinessHoursboolean

    Avisar solo dentro del horario de atención de la organización.

  • renewalPhoneNumberIdstring · uuid

    Número emisor del aviso para las ventas que no guardan el suyo.

  • renewalOnYesstring
    HANDOFFBOTTAG

    Qué 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"}'
Response · 200
{
  "data": {
    "id": "00000000-0000-0000-0000-000000000000",
    "name": "string",
    "description": "string"
  },
  "timestamp": "2026-05-01T03:42:18.123Z"
}
PUT/organizations/:orgId/license-delivery/settings/addon
bearer

Activa/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}'
Response · 200
{
  "data": {
    "id": "00000000-0000-0000-0000-000000000000",
    "name": "string",
    "description": "string"
  },
  "timestamp": "2026-05-01T03:42:18.123Z"
}
GET/organizations/:orgId/license-delivery/selling-readiness
bearer

Estado 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>'
Response · 200
{
  "data": {
    "id": "00000000-0000-0000-0000-000000000000",
    "createdAt": "2026-05-01T03:42:18.123Z"
  },
  "timestamp": "2026-05-01T03:42:18.123Z"
}
GET/organizations/:orgId/license-delivery/analytics
bearer

Mé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>'
Response · 200
{
  "data": [
    {
      "id": "00000000-0000-0000-0000-000000000000",
      "createdAt": "2026-05-01T03:42:18.123Z"
    }
  ],
  "timestamp": "2026-05-01T03:42:18.123Z"
}
GET/organizations/:orgId/license-delivery/coupons
bearer

Lista 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>'
Response · 200
{
  "data": [
    {
      "id": "00000000-0000-0000-0000-000000000000",
      "createdAt": "2026-05-01T03:42:18.123Z"
    }
  ],
  "timestamp": "2026-05-01T03:42:18.123Z"
}
POST/organizations/:orgId/license-delivery/coupons
bearer

Crea un cupón de descuento.

Path params

  • orgIdstringrequerido

Body (JSON)

  • codestringrequerido
  • discountTypestring
    PERCENTFIXED
  • discountValuenumberrequerido

    PERCENT: 1-100 ; FIXED: centavos a descontar.

  • productIdstring · uuid

    Acota a un producto; omitir = cualquiera.

  • activeboolean
  • maxRedemptionsnumber
  • expiresAtstring

    ISO 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>"}'
Response · 200
{
  "data": {
    "id": "00000000-0000-0000-0000-000000000000",
    "name": "string",
    "description": "string"
  },
  "timestamp": "2026-05-01T03:42:18.123Z"
}
PATCH/organizations/:orgId/license-delivery/coupons/:couponId
bearer

Actualiza un cupón.

Path params

  • orgIdstringrequerido
  • couponIdstringrequerido

Body (JSON)

  • codestring
  • discountTypestring
    PERCENTFIXED
  • discountValuenumber
  • productIdstring · uuid
  • activeboolean
  • maxRedemptionsnumber
  • expiresAtstring

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>"}'
Response · 200
{
  "data": {
    "id": "00000000-0000-0000-0000-000000000000",
    "name": "string",
    "description": "string"
  },
  "timestamp": "2026-05-01T03:42:18.123Z"
}
DELETE/organizations/:orgId/license-delivery/coupons/:couponId
bearer

Elimina un cupón.

Path params

  • orgIdstringrequerido
  • couponIdstringrequerido

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>'
Response · 200
{
  "data": {
    "id": "00000000-0000-0000-0000-000000000000",
    "createdAt": "2026-05-01T03:42:18.123Z"
  },
  "timestamp": "2026-05-01T03:42:18.123Z"
}
GET/organizations/:orgId/license-delivery/price-lists
bearer

Listas 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>'
Response · 200
{
  "data": [
    {
      "id": "00000000-0000-0000-0000-000000000000",
      "createdAt": "2026-05-01T03:42:18.123Z"
    }
  ],
  "timestamp": "2026-05-01T03:42:18.123Z"
}
POST/organizations/:orgId/license-delivery/price-lists
bearer

Crea una lista de precios.

Path params

  • orgIdstringrequerido

Body (JSON)

  • namestringrequerido
  • tagNamesstring[]

    Etiquetas que activan la lista (por nombre, sin distinguir mayúsculas).

  • discountPercentnumber

    Descuento general sobre el precio de lista (0-100).

  • prioritynumber

    Si 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}'
Response · 200
{
  "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"
}
PATCH/organizations/:orgId/license-delivery/price-lists/:priceListId
bearer

Edita una lista de precios.

Path params

  • orgIdstringrequerido
  • priceListIdstringrequerido

Body (JSON)

  • namestring
  • tagNamesstring[]
  • discountPercentnumber
  • prioritynumber
  • activeboolean

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}'
Response · 200
{
  "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"
}
DELETE/organizations/:orgId/license-delivery/price-lists/:priceListId
bearer

Elimina una lista de precios.

Path params

  • orgIdstringrequerido
  • priceListIdstringrequerido

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>'
Response · 200
{
  "data": {
    "id": "00000000-0000-0000-0000-000000000000",
    "createdAt": "2026-05-01T03:42:18.123Z"
  },
  "timestamp": "2026-05-01T03:42:18.123Z"
}
PUT/organizations/:orgId/license-delivery/price-lists/:priceListId/items
bearer

Fija (o quita, con priceCents null) el precio de un producto/variante en la lista.

Path params

  • orgIdstringrequerido
  • priceListIdstringrequerido

Body (JSON)

  • productIdstring · uuidrequerido
  • variantIdstring · uuid
  • priceCentsnumber

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}'
Response · 200
{
  "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"
}
GET/organizations/:orgId/license-delivery/products
bearer

Lista los productos digitales con stock de llaves.

Path params

  • orgIdstringrequerido

Query params

  • conversationIdstringrequerido
  • contactIdstringrequerido

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>'
Response · 200
{
  "data": [
    {
      "id": "00000000-0000-0000-0000-000000000000",
      "createdAt": "2026-05-01T03:42:18.123Z"
    }
  ],
  "timestamp": "2026-05-01T03:42:18.123Z"
}
POST/organizations/:orgId/license-delivery/products/import
bearer

Import masivo de productos (Excel/CSV): crea los nuevos, salta los que ya existen por nombre o SKU.

Path params

  • orgIdstringrequerido

Body (JSON)

  • productsCreateDigitalProductDto[]requerido

    Productos a crear en lote (import Excel/CSV desde la UI).

  • actualizarExistentesboolean

    Si 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}'
Response · 200
{
  "data": {
    "id": "00000000-0000-0000-0000-000000000000",
    "name": "string",
    "description": "string"
  },
  "timestamp": "2026-05-01T03:42:18.123Z"
}
POST/organizations/:orgId/license-delivery/products/bulk
bearer

Fija los mismos campos a varios productos (activo, modo de entrega, categoría, vigencia, aviso, dato adicional).

Path params

  • orgIdstringrequerido

Body (JSON)

  • patchobjectrequerido
  • productIdsstring[]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": []}'
Response · 200
{
  "data": {
    "id": "00000000-0000-0000-0000-000000000000",
    "name": "string",
    "description": "string"
  },
  "timestamp": "2026-05-01T03:42:18.123Z"
}
POST/organizations/:orgId/license-delivery/products/bulk-price
bearer

Ajusta 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)

  • modostringrequerido
    PORCENTAJEMONTOFIJO

    PORCENTAJE: valor = +10 / -15. MONTO: centavos a sumar o restar. FIJO: precio en centavos.

  • valornumberrequerido
  • redondeostring
    PESOCIENMIL
  • incluirVariantesboolean

    Aplicar también a las variantes de esos productos.

  • soloVistaPreviaboolean

    Solo 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": []}'
Response · 200
{
  "data": {
    "id": "00000000-0000-0000-0000-000000000000",
    "name": "string",
    "description": "string"
  },
  "timestamp": "2026-05-01T03:42:18.123Z"
}
POST/organizations/:orgId/license-delivery/products/bulk-delete
bearer

Elimina 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": []}'
Response · 200
{
  "data": {
    "id": "00000000-0000-0000-0000-000000000000",
    "name": "string",
    "description": "string"
  },
  "timestamp": "2026-05-01T03:42:18.123Z"
}
PUT/organizations/:orgId/license-delivery/price-lists/:priceListId/items/bulk
bearer

Precio propio de varios productos en una lista: porcentaje del base, copiar el base, fijo o quitar.

Path params

  • orgIdstringrequerido
  • priceListIdstringrequerido

Body (JSON)

  • productIdsstring[]requerido
  • modostringrequerido
    PORCENTAJE_DEL_BASECOPIAR_BASEFIJOQUITAR

    PORCENTAJE_DEL_BASE: valor = descuento (15 = 15 % menos). FIJO: centavos.

  • valornumber
  • redondeostring
    PESOCIENMIL
  • incluirVariantesboolean

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}'
Response · 200
{
  "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"
}
POST/organizations/:orgId/license-delivery/products
bearer

Crea un producto digital.

Path params

  • orgIdstringrequerido

Body (JSON)

  • namestringrequerido
  • descriptionstring
  • skustring
  • categorystring

    Categoría libre para agrupar y filtrar en el panel.

  • imageUrlstring · uri

    URLs con @IsUrl http/https: instructionsUrl alimenta un shortlink PÚBLICO en el dominio de la plataforma — sin validar era un open redirect.

  • priceCentsnumberrequerido

    Precio en centavos de la moneda (evita floats).

  • durationDaysnumber

    Días que dura lo vendido, contados desde la ENTREGA. Omitir o `null` = no vence (licencia perpetua), que es como se ha comportado siempre.

  • renewalNoticeEnabledboolean

    Si entra en el aviso de renovación. Hay cosas que se venden una vez.

  • currencystring

    Moneda ISO-4217 (3 letras mayúsculas). Por defecto COP.

  • instructionsUrlstring · uri
  • entregaModostring
    AUTOMATICAASISTIDACONSULTAR

    Modo 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).

  • datoAdicionalLabelstring

    Dato adicional a pedir al cliente para este producto (ej. "correo").

  • datoAdicionalRequeridoboolean

    Si 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}'
Response · 200
{
  "data": {
    "id": "00000000-0000-0000-0000-000000000000",
    "name": "string",
    "description": "string"
  },
  "timestamp": "2026-05-01T03:42:18.123Z"
}
GET/organizations/:orgId/license-delivery/products/:productId
bearer

Detalle de un producto digital con su stock.

Path params

  • orgIdstringrequerido
  • productIdstringrequerido

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>'
Response · 200
{
  "data": {
    "id": "00000000-0000-0000-0000-000000000000",
    "createdAt": "2026-05-01T03:42:18.123Z"
  },
  "timestamp": "2026-05-01T03:42:18.123Z"
}
PATCH/organizations/:orgId/license-delivery/products/:productId
bearer

Actualiza un producto digital.

Path params

  • orgIdstringrequerido
  • productIdstringrequerido

Body (JSON)

  • namestring
  • descriptionstring
  • skustring
  • categorystring
  • imageUrlstring · uri
  • priceCentsnumber
  • durationDaysnumber

    Días que dura lo vendido, contados desde la ENTREGA. Omitir o `null` = no vence (licencia perpetua), que es como se ha comportado siempre.

  • renewalNoticeEnabledboolean

    Si entra en el aviso de renovación.

  • currencystring
  • instructionsUrlstring · uri
  • entregaModostring
    AUTOMATICAASISTIDACONSULTAR
  • datoAdicionalLabelstring
  • datoAdicionalRequeridoboolean
  • activeboolean

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}'
Response · 200
{
  "data": {
    "id": "00000000-0000-0000-0000-000000000000",
    "name": "string",
    "description": "string"
  },
  "timestamp": "2026-05-01T03:42:18.123Z"
}
DELETE/organizations/:orgId/license-delivery/products/:productId
bearer

Elimina un producto y su pool de llaves.

Path params

  • orgIdstringrequerido
  • productIdstringrequerido

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>'
Response · 200
{
  "data": {
    "id": "00000000-0000-0000-0000-000000000000",
    "createdAt": "2026-05-01T03:42:18.123Z"
  },
  "timestamp": "2026-05-01T03:42:18.123Z"
}
POST/organizations/:orgId/license-delivery/transfer-qr
bearer

Sube 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>'
Response · 200
{
  "data": {
    "id": "00000000-0000-0000-0000-000000000000",
    "createdAt": "2026-05-01T03:42:18.123Z"
  },
  "timestamp": "2026-05-01T03:42:18.123Z"
}
DELETE/organizations/:orgId/license-delivery/transfer-qr
bearer

Quita 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>'
Response · 200
{
  "data": {
    "id": "00000000-0000-0000-0000-000000000000",
    "createdAt": "2026-05-01T03:42:18.123Z"
  },
  "timestamp": "2026-05-01T03:42:18.123Z"
}
POST/organizations/:orgId/license-delivery/products/:productId/image
bearer

Sube la imagen del producto (PNG/JPG/WebP, máx 8 MB) y la sirve pública.

Path params

  • orgIdstringrequerido
  • productIdstringrequerido

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>'
Response · 200
{
  "data": {
    "id": "00000000-0000-0000-0000-000000000000",
    "createdAt": "2026-05-01T03:42:18.123Z"
  },
  "timestamp": "2026-05-01T03:42:18.123Z"
}
DELETE/organizations/:orgId/license-delivery/products/:productId/image
bearer

Quita la imagen subida del producto.

Path params

  • orgIdstringrequerido
  • productIdstringrequerido

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>'
Response · 200
{
  "data": {
    "id": "00000000-0000-0000-0000-000000000000",
    "createdAt": "2026-05-01T03:42:18.123Z"
  },
  "timestamp": "2026-05-01T03:42:18.123Z"
}
POST/organizations/:orgId/license-delivery/products/:productId/keys
bearer

Carga llaves al pool del producto (normaliza y omite duplicadas).

Path params

  • orgIdstringrequerido
  • productIdstringrequerido

Body (JSON)

  • keysstring[]requerido

    Llaves a cargar al pool del producto. Se normalizan (trim) y se ignoran duplicadas (dentro del lote y contra las ya existentes).

  • variantIdstring · uuid

    Variante 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"}'
Response · 200
{
  "data": {
    "id": "00000000-0000-0000-0000-000000000000",
    "name": "string",
    "description": "string"
  },
  "timestamp": "2026-05-01T03:42:18.123Z"
}
GET/organizations/:orgId/license-delivery/products/:productId/keys
bearer

Lista las llaves del pool (filtrable por estado).

Path params

  • orgIdstringrequerido
  • productIdstringrequerido

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>'
Response · 200
{
  "data": [
    {
      "id": "00000000-0000-0000-0000-000000000000",
      "createdAt": "2026-05-01T03:42:18.123Z"
    }
  ],
  "timestamp": "2026-05-01T03:42:18.123Z"
}
DELETE/organizations/:orgId/license-delivery/products/:productId/keys/:keyId
bearer

Borra una llave libre del pool (no las entregadas).

Path params

  • orgIdstringrequerido
  • productIdstringrequerido
  • keyIdstringrequerido

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>'
Response · 200
{
  "data": {
    "id": "00000000-0000-0000-0000-000000000000",
    "createdAt": "2026-05-01T03:42:18.123Z"
  },
  "timestamp": "2026-05-01T03:42:18.123Z"
}
POST/organizations/:orgId/license-delivery/products/:productId/checkout
bearer

Crea una orden y dispara el cobro Nequi push (Wompi).

Path params

  • orgIdstringrequerido
  • productIdstringrequerido

Body (JSON)

  • variantIdstring · uuid

    Variante a vender (requerida si el producto tiene variantes).

  • quantitynumber

    Cantidad de licencias a vender (1 a 50). Por defecto 1.

  • methodstring
    NEQUIDAVIPLATATRANSFERENCIABINANCE

    Mé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.

  • nequiPhonestring

    Teléfono Nequi del cliente (10 dígitos CO) — requerido para NEQUI.

  • transferAccountIdstring · uuid

    A qué cuenta de banco transfiere. Vacío = la llave, si la hay.

  • userLegalIdstring

    Cédula del cliente — requerida para DAVIPLATA.

  • userLegalIdTypestring
    CCCENITPPTI
  • customerEmailstring · email
  • couponCodestring

    Código de cupón de descuento (opcional).

  • contactIdstring · uuid
  • phoneNumberIdstring · uuid

    Número emisor de WhatsApp para entregar la licencia.

  • recipientWaIdstring

    WhatsApp 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"}'
Response · 200
{
  "data": {
    "id": "00000000-0000-0000-0000-000000000000",
    "name": "string",
    "description": "string"
  },
  "timestamp": "2026-05-01T03:42:18.123Z"
}
GET/organizations/:orgId/license-delivery/renewal-template
bearer

Estado 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>'
Response · 200
{
  "data": {
    "id": "00000000-0000-0000-0000-000000000000",
    "createdAt": "2026-05-01T03:42:18.123Z"
  },
  "timestamp": "2026-05-01T03:42:18.123Z"
}
POST/organizations/:orgId/license-delivery/renewal-template
bearer

Crea la plantilla del aviso contra Meta (queda en revisión) y la deja elegida.

Path params

  • orgIdstringrequerido

Body (JSON)

  • wabaIdstring · uuid

    WABA donde crearla. Obligatorio solo si la organización tiene varias.

  • namestring

    Nombre de la plantilla en Meta (minúsculas y guiones bajos).

  • languagestring
  • bodyTextstring

    Texto 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>"}'
Response · 200
{
  "data": {
    "id": "00000000-0000-0000-0000-000000000000",
    "name": "bienvenida_v1",
    "language": "es_CO",
    "category": "MARKETING",
    "components": []
  },
  "timestamp": "2026-05-01T03:42:18.123Z"
}
GET/organizations/:orgId/license-delivery/expirations
bearer

Licencias vendidas que vencen pronto (o ya vencieron), para poder avisar al cliente a tiempo.

Path params

  • orgIdstringrequerido

Query params

  • daysstringrequerido
  • includeExpiredstringrequerido

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>'
Response · 200
{
  "data": [
    {
      "id": "00000000-0000-0000-0000-000000000000",
      "createdAt": "2026-05-01T03:42:18.123Z"
    }
  ],
  "timestamp": "2026-05-01T03:42:18.123Z"
}
PATCH/organizations/:orgId/license-delivery/orders/:orderId/expiration
bearer

Fija o quita a mano la fecha de vencimiento de una venta (para las anteriores a la vigencia).

Path params

  • orgIdstringrequerido
  • orderIdstringrequerido

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>"}'
Response · 200
{
  "data": {
    "id": "00000000-0000-0000-0000-000000000000",
    "name": "string",
    "description": "string"
  },
  "timestamp": "2026-05-01T03:42:18.123Z"
}
GET/organizations/:orgId/license-delivery/orders
bearer

Historial de ventas (órdenes) con el producto.

Path params

  • orgIdstringrequerido

Query params

  • statusstring
  • limitnumber

    Máximo de filas (el service lo capa a 500).

  • contactIdstring

    Filtra las ventas de un contacto (para el panel del inbox: "ventas de este número").

  • conversationIdstring

    Filtra 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>'
Response · 200
{
  "data": [
    {
      "id": "00000000-0000-0000-0000-000000000000",
      "createdAt": "2026-05-01T03:42:18.123Z"
    }
  ],
  "timestamp": "2026-05-01T03:42:18.123Z"
}
GET/organizations/:orgId/license-delivery/orders/:orderId
bearer

Estado de una orden de compra.

Path params

  • orgIdstringrequerido
  • orderIdstringrequerido

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>'
Response · 200
{
  "data": {
    "id": "00000000-0000-0000-0000-000000000000",
    "createdAt": "2026-05-01T03:42:18.123Z"
  },
  "timestamp": "2026-05-01T03:42:18.123Z"
}
POST/organizations/:orgId/license-delivery/orders/:orderId/resend
bearer

Reenvía la licencia de una orden ya entregada (WhatsApp + correo).

Path params

  • orgIdstringrequerido
  • orderIdstringrequerido

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>'
Response · 200
{
  "data": {
    "id": "00000000-0000-0000-0000-000000000000",
    "createdAt": "2026-05-01T03:42:18.123Z"
  },
  "timestamp": "2026-05-01T03:42:18.123Z"
}
POST/organizations/:orgId/license-delivery/orders/:orderId/keys/:keyId/replace
bearer

Reemplaza 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

  • orgIdstringrequerido
  • orderIdstringrequerido
  • keyIdstringrequerido

Body (JSON)

  • sourcestring
    inventorymanual

    'inventory' (por defecto): saca la nueva del pool disponible. 'manual': usa la llave pegada en `replacementValue`.

  • replacementValuestring

    Llave nueva a mano (obligatoria si source='manual').

  • reasonstring

    Motivo del reemplazo (trazabilidad; ej. "no activó").

  • notifyboolean

    Enviar 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}'
Response · 200
{
  "data": {
    "id": "00000000-0000-0000-0000-000000000000",
    "name": "string",
    "description": "string"
  },
  "timestamp": "2026-05-01T03:42:18.123Z"
}
POST/organizations/:orgId/license-delivery/orders/:orderId/cancel
bearer

Cancela una orden pendiente de pago (libera las llaves).

Path params

  • orgIdstringrequerido
  • orderIdstringrequerido

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>'
Response · 200
{
  "data": {
    "id": "00000000-0000-0000-0000-000000000000",
    "createdAt": "2026-05-01T03:42:18.123Z"
  },
  "timestamp": "2026-05-01T03:42:18.123Z"
}
POST/organizations/:orgId/license-delivery/inbox/test
bearer

Prueba 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>'
Response · 200
{
  "data": {
    "id": "00000000-0000-0000-0000-000000000000",
    "createdAt": "2026-05-01T03:42:18.123Z"
  },
  "timestamp": "2026-05-01T03:42:18.123Z"
}
GET/organizations/:orgId/license-delivery/inbox/payments
bearer

Pagos 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>'
Response · 200
{
  "data": [
    {
      "id": "00000000-0000-0000-0000-000000000000",
      "createdAt": "2026-05-01T03:42:18.123Z"
    }
  ],
  "timestamp": "2026-05-01T03:42:18.123Z"
}
POST/organizations/:orgId/license-delivery/inbox/payments/:pagoId/match
bearer

Liga un pago con un pedido y entrega la licencia.

Path params

  • orgIdstringrequerido
  • pagoIdstringrequerido

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"}'
Response · 200
{
  "data": {
    "id": "00000000-0000-0000-0000-000000000000",
    "name": "string",
    "description": "string"
  },
  "timestamp": "2026-05-01T03:42:18.123Z"
}
POST/organizations/:orgId/license-delivery/inbox/payments/:pagoId/ignore
bearer

Descarta un pago (no era de una venta).

Path params

  • orgIdstringrequerido
  • pagoIdstringrequerido

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>"}'
Response · 200
{
  "data": {
    "id": "00000000-0000-0000-0000-000000000000",
    "name": "string",
    "description": "string"
  },
  "timestamp": "2026-05-01T03:42:18.123Z"
}
POST/organizations/:orgId/license-delivery/orders/:orderId/confirm-transfer
bearer

Confirma la transferencia recibida y entrega la licencia.

Path params

  • orgIdstringrequerido
  • orderIdstringrequerido

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>'
Response · 200
{
  "data": {
    "id": "00000000-0000-0000-0000-000000000000",
    "createdAt": "2026-05-01T03:42:18.123Z"
  },
  "timestamp": "2026-05-01T03:42:18.123Z"
}
POST/organizations/:orgId/license-delivery/orders/:orderId/completar-entrega
bearer

Marca 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

  • orgIdstringrequerido
  • orderIdstringrequerido

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).

  • mensajestring

    Nota adicional para el cliente, después de la entrega.

  • notificarboolean

    false = 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}'
Response · 200
{
  "data": {
    "id": "00000000-0000-0000-0000-000000000000",
    "name": "string",
    "description": "string"
  },
  "timestamp": "2026-05-01T03:42:18.123Z"
}
POST/organizations/:orgId/license-delivery/orders/:orderId/refund
bearer

Registra el reembolso de una orden pagada y revoca sus llaves (el dinero se devuelve en el panel Wompi).

Path params

  • orgIdstringrequerido
  • orderIdstringrequerido

Body (JSON)

  • reasonstring

    Motivo 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>"}'
Response · 200
{
  "data": {
    "id": "00000000-0000-0000-0000-000000000000",
    "name": "string",
    "description": "string"
  },
  "timestamp": "2026-05-01T03:42:18.123Z"
}
POST/organizations/:orgId/license-delivery/products/:productId/keys/:keyId/revoke
bearer

Revoca una llave ya entregada (fraude/contracargo).

Path params

  • orgIdstringrequerido
  • productIdstringrequerido
  • keyIdstringrequerido

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>'
Response · 200
{
  "data": {
    "id": "00000000-0000-0000-0000-000000000000",
    "createdAt": "2026-05-01T03:42:18.123Z"
  },
  "timestamp": "2026-05-01T03:42:18.123Z"
}
POST/organizations/:orgId/license-delivery/conversations/:conversationId/sell
bearer

Vende/entrega una licencia al contacto de la conversación (asesor).

Path params

  • orgIdstringrequerido
  • conversationIdstringrequerido

Body (JSON)

  • productIdstring · uuidrequerido
  • variantIdstring · uuid

    Variante a vender (requerida si el producto tiene variantes).

  • quantitynumber

    Cantidad de licencias a vender (1 a 50). Por defecto 1.

  • methodstring
    NEQUIDAVIPLATATRANSFERENCIABINANCE
  • nequiPhonestring
  • transferAccountIdstring · uuid

    A qué cuenta de banco transfiere. Vacío = la llave, si la hay.

  • userLegalIdstring
  • userLegalIdTypestring
    CCCENITPPTI
  • customerEmailstring · email
  • couponCodestring
  • entregarYaboolean

    Solo 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í.

  • unitPriceCentsnumber

    Precio 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}'
Response · 200
{
  "data": {
    "id": "00000000-0000-0000-0000-000000000000",
    "name": "string",
    "description": "string"
  },
  "timestamp": "2026-05-01T03:42:18.123Z"
}
POST/organizations/:orgId/license-delivery/conversations/:conversationId/sell-cart
bearer

Vende un CARRITO (varios productos, una sola orden) al contacto (asesor). Solo Nequi o Bre-B.

Path params

  • orgIdstringrequerido
  • conversationIdstringrequerido

Body (JSON)

  • itemsCartItemDto[]requerido
  • methodstring
    NEQUITRANSFERENCIA
  • nequiPhonestring
  • transferAccountIdstring · uuid

    A qué cuenta de banco transfiere. Vacío = la llave, si la hay.

  • customerEmailstring · email
  • entregarYaboolean

    Solo 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}'
Response · 200
{
  "data": {
    "id": "00000000-0000-0000-0000-000000000000",
    "name": "string",
    "description": "string"
  },
  "timestamp": "2026-05-01T03:42:18.123Z"
}
POST/organizations/:orgId/license-delivery/conversations/:conversationId/dispatch
bearer

Entrega una licencia SIN cobro al contacto de la conversación (asesor).

Path params

  • orgIdstringrequerido
  • conversationIdstringrequerido

Body (JSON)

  • productIdstring · uuidrequerido
  • variantIdstring · uuid

    Variante a entregar (si el producto tiene variantes).

  • quantitynumber

    Cantidad 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}'
Response · 200
{
  "data": {
    "id": "00000000-0000-0000-0000-000000000000",
    "name": "string",
    "description": "string"
  },
  "timestamp": "2026-05-01T03:42:18.123Z"
}
POST/organizations/:orgId/license-delivery/conversations/:conversationId/venta-manual
bearer

Registra una venta MANUAL con pago y entrega desacoplados (fiado / por cobrar).

Path params

  • orgIdstringrequerido
  • conversationIdstringrequerido

Body (JSON)

  • productIdstring · uuidrequerido
  • variantIdstring · uuid
  • quantitynumber
  • entregarbooleanrequerido

    ¿Entregar ya la licencia?

  • pagadobooleanrequerido

    ¿El cliente ya pagó? (false = fiado / por cobrar).

  • unitPriceCentsnumber

    Precio 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}'
Response · 200
{
  "data": {
    "id": "00000000-0000-0000-0000-000000000000",
    "name": "string",
    "description": "string"
  },
  "timestamp": "2026-05-01T03:42:18.123Z"
}
POST/organizations/:orgId/license-delivery/conversations/:conversationId/venta-manual-carrito
bearer

Registra una venta MANUAL de un CARRITO (varios productos) con pago y entrega desacoplados (fiado / por cobrar).

Path params

  • orgIdstringrequerido
  • conversationIdstringrequerido

Body (JSON)

  • itemsManualCartItemDto[]requerido
  • entregarbooleanrequerido

    ¿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}'
Response · 200
{
  "data": {
    "id": "00000000-0000-0000-0000-000000000000",
    "name": "string",
    "description": "string"
  },
  "timestamp": "2026-05-01T03:42:18.123Z"
}
POST/organizations/:orgId/license-delivery/orders/:orderId/marcar-pagada
bearer

Marca una venta manual como PAGADA (cierra el fiado).

Path params

  • orgIdstringrequerido
  • orderIdstringrequerido

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>'
Response · 200
{
  "data": {
    "id": "00000000-0000-0000-0000-000000000000",
    "createdAt": "2026-05-01T03:42:18.123Z"
  },
  "timestamp": "2026-05-01T03:42:18.123Z"
}
POST/organizations/:orgId/license-delivery/orders/:orderId/marcar-entregada
bearer

Marca una venta manual como ENTREGADA (asigna/envía la licencia ahora).

Path params

  • orgIdstringrequerido
  • orderIdstringrequerido

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>'
Response · 200
{
  "data": {
    "id": "00000000-0000-0000-0000-000000000000",
    "createdAt": "2026-05-01T03:42:18.123Z"
  },
  "timestamp": "2026-05-01T03:42:18.123Z"
}
POST/organizations/:orgId/license-delivery/products/:productId/variants
bearer

Crea una variante del producto (precio propio).

Path params

  • orgIdstringrequerido
  • productIdstringrequerido

Body (JSON)

  • namestringrequerido
  • priceCentsnumberrequerido
  • durationDaysnumber

    Dí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}'
Response · 200
{
  "data": {
    "id": "00000000-0000-0000-0000-000000000000",
    "name": "string",
    "description": "string"
  },
  "timestamp": "2026-05-01T03:42:18.123Z"
}
PATCH/organizations/:orgId/license-delivery/products/:productId/variants/:variantId
bearer

Actualiza una variante.

Path params

  • orgIdstringrequerido
  • productIdstringrequerido
  • variantIdstringrequerido

Body (JSON)

  • namestring
  • priceCentsnumber
  • durationDaysnumber

    Días que dura lo vendido, contados desde la ENTREGA. Omitir o `null` = no vence (licencia perpetua), que es como se ha comportado siempre.

  • activeboolean
  • sortOrdernumber

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}'
Response · 200
{
  "data": {
    "id": "00000000-0000-0000-0000-000000000000",
    "name": "string",
    "description": "string"
  },
  "timestamp": "2026-05-01T03:42:18.123Z"
}
DELETE/organizations/:orgId/license-delivery/products/:productId/variants/:variantId
bearer

Elimina una variante sin ventas (sus llaves libres vuelven al pool general).

Path params

  • orgIdstringrequerido
  • productIdstringrequerido
  • variantIdstringrequerido

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>'
Response · 200
{
  "data": {
    "id": "00000000-0000-0000-0000-000000000000",
    "createdAt": "2026-05-01T03:42:18.123Z"
  },
  "timestamp": "2026-05-01T03:42:18.123Z"
}
POST/organizations/:orgId/license-delivery/orders/:orderId/otp
bearer

Valida el OTP de una orden Daviplata.

Path params

  • orgIdstringrequerido
  • orderIdstringrequerido

Body (JSON)

  • codestringrequerido

    Có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>"}'
Response · 200
{
  "data": {
    "id": "00000000-0000-0000-0000-000000000000",
    "name": "string",
    "description": "string"
  },
  "timestamp": "2026-05-01T03:42:18.123Z"
}
POST/organizations/:orgId/license-delivery/orders/:orderId/otp/resend
bearer

Reenvía el OTP de una orden Daviplata.

Path params

  • orgIdstringrequerido
  • orderIdstringrequerido

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>'
Response · 200
{
  "data": {
    "id": "00000000-0000-0000-0000-000000000000",
    "createdAt": "2026-05-01T03:42:18.123Z"
  },
  "timestamp": "2026-05-01T03:42:18.123Z"
}
GET/organizations/:orgId/license-delivery/payments-inbox
bearer

Todo lo que dice que entró plata: avisos del banco y comprobantes del chat, en una lista.

Path params

  • orgIdstringrequerido

Query params

  • origenstringrequerido
  • estadostringrequerido
  • desdestringrequerido
  • hastastringrequerido
  • qstringrequerido
  • limitstringrequerido
  • offsetstringrequerido

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>'
Response · 200
{
  "data": [
    {
      "id": "00000000-0000-0000-0000-000000000000",
      "createdAt": "2026-05-01T03:42:18.123Z"
    }
  ],
  "timestamp": "2026-05-01T03:42:18.123Z"
}
POST/organizations/:orgId/license-delivery/payments-inbox/discard
bearer

Descarta varios de una vez (ignora avisos, rechaza comprobantes). Aprobar sigue siendo de a uno.

Path params

  • orgIdstringrequerido

Body (JSON)

  • itemsobject[]requerido

    Qué descartar. Hasta 100 por llamada.

  • reasonstringrequerido

    Por 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>"}'
Response · 200
{
  "data": {
    "id": "00000000-0000-0000-0000-000000000000",
    "name": "string",
    "description": "string"
  },
  "timestamp": "2026-05-01T03:42:18.123Z"
}
GET/organizations/:orgId/license-delivery/transfer-accounts
bearer

Cuentas 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>'
Response · 200
{
  "data": [
    {
      "id": "00000000-0000-0000-0000-000000000000",
      "createdAt": "2026-05-01T03:42:18.123Z"
    }
  ],
  "timestamp": "2026-05-01T03:42:18.123Z"
}
POST/organizations/:orgId/license-delivery/transfer-accounts
bearer

Agrega una cuenta de transferencia.

Path params

  • orgIdstringrequerido

Body (JSON)

  • labelstringrequerido

    Cómo la ve el cliente en la lista.

  • bankNamestring

    Banco o entidad.

  • accountKindstring
    AHORROSCORRIENTENEQUILLAVEOTRO

    Tipo de cuenta.

  • accountNumberstringrequerido

    Número de cuenta, llave Bre-B o celular de Nequi.

  • holderstring

    Titular de la cuenta.

  • holderDocstring

    Documento del titular.

  • instructionsstring

    Texto que acompaña a esta cuenta.

  • qrMediaIdstring · uuid

    MediaAsset del QR de esta cuenta.

  • senderDomainstring

    Dominio que firma los correos de aviso de este banco, para conciliar (ej. bancolombia.com.co).

  • currencystring

    En qué moneda recibe esta cuenta (ISO 4217). Vacío = cualquiera. Solo se le ofrece a quien paga en esa moneda.

  • enabledboolean

    Si 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}'
Response · 200
{
  "data": {
    "id": "00000000-0000-0000-0000-000000000000",
    "name": "string",
    "description": "string"
  },
  "timestamp": "2026-05-01T03:42:18.123Z"
}
PATCH/organizations/:orgId/license-delivery/transfer-accounts/:accountId
bearer

Edita una cuenta de transferencia.

Path params

  • orgIdstringrequerido
  • accountIdstringrequerido

Body (JSON)

  • labelstring

    Cómo la ve el cliente en la lista.

  • bankNamestring

    Banco o entidad.

  • accountKindstring
    AHORROSCORRIENTENEQUILLAVEOTRO

    Tipo de cuenta.

  • accountNumberstring

    Número de cuenta, llave Bre-B o celular de Nequi.

  • holderstring

    Titular de la cuenta.

  • holderDocstring

    Documento del titular.

  • instructionsstring

    Texto que acompaña a esta cuenta.

  • qrMediaIdstring · uuid

    MediaAsset del QR de esta cuenta.

  • senderDomainstring

    Dominio que firma los correos de aviso de este banco, para conciliar (ej. bancolombia.com.co).

  • currencystring

    En qué moneda recibe esta cuenta (ISO 4217). Vacío = cualquiera. Solo se le ofrece a quien paga en esa moneda.

  • enabledboolean

    Si 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}'
Response · 200
{
  "data": {
    "id": "00000000-0000-0000-0000-000000000000",
    "name": "string",
    "description": "string"
  },
  "timestamp": "2026-05-01T03:42:18.123Z"
}
DELETE/organizations/:orgId/license-delivery/transfer-accounts/:accountId
bearer

Elimina una cuenta de transferencia.

Path params

  • orgIdstringrequerido
  • accountIdstringrequerido

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>'
Response · 200
{
  "data": {
    "id": "00000000-0000-0000-0000-000000000000",
    "createdAt": "2026-05-01T03:42:18.123Z"
  },
  "timestamp": "2026-05-01T03:42:18.123Z"
}
POST/organizations/:orgId/license-delivery/transfer-accounts/reorder
bearer

Reordena las cuentas: es el orden en que las ve el cliente.

Path params

  • orgIdstringrequerido

Body (JSON)

  • idsstring[]requerido

    Todas 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": []}'
Response · 200
{
  "data": {
    "id": "00000000-0000-0000-0000-000000000000",
    "name": "string",
    "description": "string"
  },
  "timestamp": "2026-05-01T03:42:18.123Z"
}
GET/organizations/:orgId/license-delivery/receipts
bearer

Comprobantes 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>'
Response · 200
{
  "data": [
    {
      "id": "00000000-0000-0000-0000-000000000000",
      "createdAt": "2026-05-01T03:42:18.123Z"
    }
  ],
  "timestamp": "2026-05-01T03:42:18.123Z"
}
GET/organizations/:orgId/license-delivery/orders/:orderId/receipts
bearer

Comprobantes enviados para un pedido.

Path params

  • orgIdstringrequerido
  • orderIdstringrequerido

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>'
Response · 200
{
  "data": [
    {
      "id": "00000000-0000-0000-0000-000000000000",
      "createdAt": "2026-05-01T03:42:18.123Z"
    }
  ],
  "timestamp": "2026-05-01T03:42:18.123Z"
}
POST/organizations/:orgId/license-delivery/receipts/:receiptId/approve
bearer

Aprueba el comprobante y confirma el pago (entrega la licencia).

Path params

  • orgIdstringrequerido
  • receiptIdstringrequerido

Body (JSON)

  • notestring

    Nota 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>"}'
Response · 200
{
  "data": {
    "id": "00000000-0000-0000-0000-000000000000",
    "name": "string",
    "description": "string"
  },
  "timestamp": "2026-05-01T03:42:18.123Z"
}
POST/organizations/:orgId/license-delivery/receipts/:receiptId/reject
bearer

Rechaza el comprobante con un motivo.

Path params

  • orgIdstringrequerido
  • receiptIdstringrequerido

Body (JSON)

  • reasonstringrequerido

    Por 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>"}'
Response · 200
{
  "data": {
    "id": "00000000-0000-0000-0000-000000000000",
    "name": "string",
    "description": "string"
  },
  "timestamp": "2026-05-01T03:42:18.123Z"
}
GET/organizations/:orgId/license-delivery/license-delivery/img/:productId
público

Sirve 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'
Response · 200
{
  "data": {
    "id": "00000000-0000-0000-0000-000000000000",
    "createdAt": "2026-05-01T03:42:18.123Z"
  },
  "timestamp": "2026-05-01T03:42:18.123Z"
}