Operaciones de agencias y partners
Consulta, crea, edita y borra agencias y partners con comisión por API v1 o MCP.
Una agencia (o partner) en Buky es un colaborador externo —agencia de viajes, OTA, turoperador— que reserva en nombre de sus clientes y cobra o paga una comisión por ello. Buky calcula esa comisión automáticamente, lleva la trazabilidad de qué reservas vienen de cada agencia y genera la factura correspondiente. Consulta Configurar una agencia (OTA, turoperador) para verlo desde el panel.
Operaciones de esta página: list-partners, get-partner (solo lectura); create-partner, update-partner, delete-partner (escritura).
Las bases comunes (autenticación, GET frente a POST, prueba en seco, errores HTTP, límites) están en API v1 — Introducción y primeros pasos. En las seis operaciones, customer_id es opcional: se toma de tu token salvo que uses uno multicuenta.
list-partners: enumera las agencias del centro
Devuelve la lista de agencias colaboradoras del centro, sin tener que saber sus nombres de antemano. Es una operación de solo lectura: vale con cualquier token.
Cómo llamarla
curl "https://api.bukyapp.com/v1/ops/list-partners" \
-H "Authorization: Bearer bk_TU_TOKEN"Por MCP: «¿Qué agencias tengo dadas de alta?» o «Enséñame las agencias desactivadas».
Parámetros
| Parámetro | Tipo | Nivel | Qué hace |
|---|---|---|---|
q | texto | opcional | Busca por texto en el nombre (sin tildes), igual que el buscador del panel. |
disabled | booleano | opcional | true: solo agencias desactivadas. false: solo activas. Por defecto, todas. |
created_from / created_to | fecha | opcional | Rango sobre la fecha de alta de la agencia. |
detail | texto | opcional | compact (por defecto): identificador, nombre y comisión. descriptive: añade email, modo de cobro y de facturación, afiliación y catálogo restringido, con los textos en claro. |
lang | texto | opcional | Solo con detail: "descriptive": idioma de los textos (por ejemplo, es). |
full | booleano | opcional | Documentos completos del servidor. Pesado; solo si necesitas todos los campos. Gana a detail. |
limit | número | opcional | Máximo de resultados, aplicado después de los filtros. |
Qué devuelve
Ejemplo real, con la única agencia dada de alta en la cuenta demo:
{
"success": true,
"operation": "list-partners",
"detail": "compact",
"count": 1,
"total": 1,
"items": [
{ "_id": "6979efe8cecd6cb2336188a5", "name": "GetYourGuide · auto", "commission": 25, "channel": "getyourguide", "is_disabled": false }
],
"warnings": []
}| Campo | Significado |
|---|---|
count / total | Agencias devueltas y agencias que cumplen el filtro, antes del recorte de limit. Si count es menor que total, sube el limit. |
items | Una fila por agencia, con la forma que marca detail. Las agencias dadas de baja nunca aparecen. |
items[].channel | Solo si la agencia se creó sola desde una integración; vacío en las creadas a mano desde el panel. |
Consejos
- No hace falta forzar un error de
get-partnercon un nombre inventado solo para ver qué agencias existen: para eso estálist-partners. - Con
detail: "descriptive"ves de un vistazo el modo de cobro y de facturación de cada agencia, sin consultarlas una a una conget-partner.
get-partner: consulta el doc completo de una agencia
Devuelve el documento fresco de una agencia, resuelta por nombre o identificador. Es una operación de solo lectura: vale con cualquier token.
Cómo llamarla
curl "https://api.bukyapp.com/v1/ops/get-partner?partner=GetYourGuide" \
-H "Authorization: Bearer bk_TU_TOKEN"Por MCP: «¿Qué comisión tiene la agencia GetYourGuide?» o, para forzarla, «Ejecuta get-partner para GetYourGuide».
Parámetros
| Parámetro | Tipo | Nivel | Qué hace |
|---|---|---|---|
partner | texto | obligatorio | Nombre exacto o identificador de la agencia. El manual lo marca como recomendado, pero sin él la operación falla (partner_intent_required): en la práctica es obligatorio. Acepta también los alias id y partner_id. |
Qué devuelve
Ejemplo real, para la agencia que la cuenta demo tiene dada de alta desde un canal externo:
{
"success": true,
"operation": "get-partner",
"_id": "6979efe8cecd6cb2336188a5",
"resolved": {
"id": "6979efe8cecd6cb2336188a5",
"reason": "match por nombre 'GetYourGuide · auto'"
},
"item": {
"_id": "6979efe8cecd6cb2336188a5",
"name": "GetYourGuide · auto",
"payment_mode": "full_to_agent",
"invoice_mode": "supplier",
"commission": 25,
"recalculate_commission": true,
"noTax": false,
"isDisabled": false,
"channel": "getyourguide",
"affiliate_link_active": false,
"commissionByProduct": [],
"hidePriceDetails": true
},
"warnings": []
}| Campo | Significado |
|---|---|
resolved | Qué agencia se eligió a partir del nombre o identificador que diste, y por qué. Revísalo si el nombre podía ser ambiguo. |
item | El documento completo: nombre, comisión global, modo de cobro y de facturación, si está desactivada y si tiene enlace de afiliado activo. |
item.channel | Solo si la agencia se creó sola desde una integración (aquí, GetYourGuide); vacío en las agencias creadas a mano desde el panel. |
item.commissionByProduct | Comisiones que sustituyen a la global para productos concretos. Vacío si no tiene ninguna. |
warnings | Avisos que no impiden la respuesta pero conviene revisar. |
Errores propios
| Situación | Respuesta |
|---|---|
Falta partner (y su alias id) | 200 con success: false y error: "partner_intent_required". |
| Nombre que no coincide con ninguna agencia | 200 con success: false, error: "partner_unresolved" y partner_candidates con las agencias reales de la cuenta. |
Consejos
- Guarda el
_idque te devuelve para usarlo directamente enupdate-partnerodelete-partner, sin repetir la búsqueda por nombre. - Es la forma de comprobar cómo quedó una agencia después de crearla o editarla. Para enumerar todas de golpe, usa
list-partners.
create-partner: da de alta una agencia colaboradora
Crea una agencia nueva con su comisión, su modo de cobro y de facturación. Es una operación de escritura.
Cómo llamarla
curl -X POST https://api.bukyapp.com/v1/ops/create-partner \
-H "Authorization: Bearer bk_TU_TOKEN" \
-H "Content-Type: application/json" \
-d '{"name": "Agencia Marea Azul", "commission": 15, "payment_mode": "full_to_agent"}'Por MCP: «Crea la agencia Agencia Marea Azul con una comisión del 15 %, cobrando ella al cliente.»
Parámetros
| Parámetro | Tipo | Nivel | Qué hace |
|---|---|---|---|
name | texto | obligatorio | Nombre de la agencia, tal cual aparece en el listado del panel. |
commission | número | recomendado | Comisión global en porcentaje (15 = 15 %). Si lo omites, se crea con comisión 0. |
payment_mode | texto | recomendado | Quién cobra al cliente: full_to_agent (la agencia, por defecto), full_to_supplier (tú) o commission (se reparte). |
invoice_mode | texto | recomendado | Quién factura la reserva: supplier (tú, por defecto) o partner (la agencia). |
business_name | texto | opcional — obligatorio si `invoice_mode` es `partner` | Razón social de la agencia. Sin ella, la creación falla con business_name_required. |
hide_price_details | booleano | opcional | Oculta a la agencia el desglose de precio. Por defecto true. |
commission_by_product | lista | opcional | Comisiones distintas a la global para productos concretos: [{ "product": "<nombre o id>", "amount_eur": <importe> }]. Cada producto se busca en tu catálogo real. |
restrict_catalog | booleano | opcional | Limita lo que ve un cliente que entra por el enlace o QR de esta agencia a las categorías y productos permitidos. |
allowed_categories | lista | opcional | Categorías que ve la agencia cuando restrict_catalog está activo (incluyen todos sus productos, presentes y futuros). |
allowed_products | lista | opcional | Productos sueltos que ve la agencia, sin arrastrar toda su categoría. |
send_confirmation_email | booleano | opcional | Envía el email de confirmación al cliente en las reservas de esta agencia. Por defecto false; el afiliado puede desmarcarlo reserva a reserva. |
Qué devuelve
Prueba en seco con el ejemplo mínimo:
{
"success": true,
"operation": "create-partner",
"applied_defaults": { "commission": 15, "hidePriceDetails": true },
"resolved_payment_mode": { "mode": "full_to_agent", "reason": "match exacto 'full_to_agent'" },
"resolved_invoice_mode": { "mode": "supplier", "requiresBusiness": false, "reason": "default (supplier — factura el proveedor)" },
"resolved_products": [],
"resolved_catalog": { "categories": [], "products": [] },
"payload_preview": {
"name": "Agencia Marea Azul",
"commission": 15,
"payment_mode": "full_to_agent",
"hidePriceDetails": true
},
"warnings": []
}| Campo | Significado |
|---|---|
applied_defaults | Valores que se han rellenado solos porque no los diste. |
resolved_payment_mode / resolved_invoice_mode | El modo de cobro y de facturación que se aplicaría, con el motivo. |
resolved_products | Solo si usaste commission_by_product: cada producto resuelto, con su identificador y el importe en céntimos. |
resolved_catalog | Solo si usaste restrict_catalog, allowed_categories o allowed_products: las categorías y productos resueltos. Vacío si no los usaste. |
payload_preview | Lo que se enviaría a Buky si no fuera una prueba en seco; es lo mismo que luego verás con get-partner. |
warnings | Avisos que no bloquean la creación. |
Errores propios
| Situación | Respuesta |
|---|---|
invoice_mode: "partner" sin business_name | 200 con success: false y error: "business_name_required". |
Producto de commission_by_product que no existe o es ambiguo | 200 con success: false, error: "product_unresolved" y product_candidates con los productos reales de tu catálogo. |
Consejos
commissiones un porcentaje (15= 15 %), no céntimos;amount_eurdentro decommission_by_productva en euros y Buky lo guarda en céntimos.- Si no indicas
payment_modeniinvoice_mode, la agencia queda igual que si la crearas desde el panel sin tocar esos campos: cobra ella y facturas tú.
update-partner: edita los datos de una agencia existente
Cambia solo los campos que le pases; el resto de la agencia queda igual. Es una operación de escritura.
Cómo llamarla
curl -X POST https://api.bukyapp.com/v1/ops/update-partner \
-H "Authorization: Bearer bk_TU_TOKEN" \
-H "Content-Type: application/json" \
-d '{"partner": "GetYourGuide", "commission": 20}'Por MCP: «Sube la comisión de la agencia GetYourGuide al 20 %.»
Parámetros
| Parámetro | Tipo | Nivel | Qué hace |
|---|---|---|---|
partner | texto | obligatorio | Nombre o identificador de la agencia a editar. |
name | texto | recomendado | Nuevo nombre. |
commission | número | recomendado | Nueva comisión global, en porcentaje. |
payment_mode | texto | opcional | Nuevo modo de cobro (full_to_agent, full_to_supplier, commission). |
invoice_mode | texto | opcional | Nuevo modo de facturación (supplier, partner). A diferencia de la creación, cambiarlo a partner sin business_name no bloquea: puedes completar la razón social en otra edición. |
business_name | texto | opcional | Nueva razón social. |
hide_price_details | booleano | opcional | Oculta o muestra el desglose de precio a la agencia. |
send_confirmation_email | booleano | opcional | Si se envía el email de confirmación al cliente en las reservas de esta agencia por defecto. |
recalculate_commission | booleano | opcional | Recalcula la comisión de las reservas ya existentes al guardar. |
commission_by_product | lista | opcional | Sustituye todas las comisiones por producto por las que envíes: [{ "product": "<nombre o id>", "commission": <%> }]. |
vat, vat_type, street_address, city, zip, state, country, no_tax | texto / booleano | opcional | Datos fiscales de la agencia. Cualquiera de ellos cambia invoice_mode a partner, aunque no lo pidas. |
email | texto | opcional | Email de contacto de la agencia. |
affiliate_link_active, affiliate_ref_active, affiliate_ref_label, affiliate_ref_required | booleano / texto | opcional | Activan el enlace de afiliado de la agencia y si pide (u obliga) un código de referencia en la reserva. |
restrict_catalog, allowed_categories, allowed_products | booleano / lista | opcional | Catálogo restringido de la agencia. Sustituyen el conjunto anterior por completo. |
Qué devuelve
Prueba en seco cambiando solo la comisión:
{
"success": true,
"operation": "update-partner",
"_id": "6979efe8cecd6cb2336188a5",
"changes": { "commission": 20 },
"note": "PUT parcial: solo estos campos cambian; customer/_id nunca se envían.",
"warnings": []
}| Campo | Significado |
|---|---|
_id | Identificador de la agencia editada. |
changes | Solo los campos que de verdad van a cambiar; los que no mandaste quedan igual. |
warnings | Avisos que no bloquean el guardado. |
Errores propios
| Situación | Respuesta |
|---|---|
| Nombre que no coincide con ninguna agencia | 200 con success: false, error: "partner_unresolved" y partner_candidates con las agencias reales de la cuenta. |
Consejos
- Es una edición parcial: si quieres saber qué hay antes de sobrescribirlo (por ejemplo, la razón social actual), consúltalo primero con
get-partner. commission_by_productsustituye el conjunto entero: si la agencia ya tenía comisiones por producto y quieres conservar alguna, inclúyela también en la llamada.
delete-partner: da de baja una agencia
La agencia deja de verse en el panel y deja de estar disponible para nuevas reservas. No puedes deshacerlo desde la API ni desde el asistente, pero el soporte de Buky puede recuperarla si lo necesitas. Es una operación de escritura.
Cómo llamarla
curl -X POST https://api.bukyapp.com/v1/ops/delete-partner \
-H "Authorization: Bearer bk_TU_TOKEN" \
-H "Content-Type: application/json" \
-d '{"partner": "GetYourGuide", "confirm": true}'Por MCP: «Borra la agencia GetYourGuide» (el asistente te pedirá confirmar antes de ejecutar el borrado real).
Parámetros
| Parámetro | Tipo | Nivel | Qué hace |
|---|---|---|---|
partner | texto | obligatorio | Nombre o identificador de la agencia a borrar. |
confirm | booleano | recomendado | Debe ser true para borrar de verdad; sin él, la llamada real también se queda en una vista previa de lo que borraría. |
Qué devuelve
Prueba en seco sobre la agencia real de la cuenta demo:
{
"success": true,
"operation": "delete-partner",
"would_delete": { "_id": "6979efe8cecd6cb2336188a5", "name": "GetYourGuide · auto" },
"soft_deleted": false,
"reversible": true,
"warnings": []
}| Campo | Significado |
|---|---|
would_delete | Qué agencia se borraría. |
soft_deleted | Si el borrado ya se aplicó. En una prueba en seco siempre false; en una ejecución real pasaría a true. |
reversible | true: el soporte de Buky puede recuperarla si lo pides. |
Errores propios
| Situación | Respuesta |
|---|---|
| Nombre que no coincide con ninguna agencia | 200 con success: false, error: "partner_unresolved" y partner_candidates con las agencias reales de la cuenta. |
Consejos
- Las reservas ya hechas con esta agencia no se tocan; el borrado solo afecta a que puedas seguir asignándole reservas nuevas.
- Si te equivocas, el soporte de Buky puede recuperarla.
