Menú

Referencia de la API · CRM

Productos

crm · products · 9 operaciones

GET/v1/crm/products

List the CRM products (the catalog deal quotes are built from)

crm.products.list

LecturaIdempotenteDesde 2026-11-01

Lists the org's manually curated products (the ones deal quotes are built from) in the same manual order as the settings screen, paginated by cursor (limit up to 200). Archived products are left out unless include_archived is true (the page is filled skipping them). Each product says who created it (created_by_name). Each product carries its default price, currency, billing frequency (one_time or monthly), tax, SKU and custom fields. Synced feed catalogs are a different thing: see crm.catalogs.list.

Alcance
crm:read
Permiso
Ver el módulo
Tool del MCP
crm_products_listEn la superficie completa; en la compacta, mb_execute_operation con id: "crm.products.list".

Costo declarado: hasta 202 lecturas y 0 escrituras por llamada (cuentan en el cupo diario).

Parámetros

limitintegerqueryopcional

Products per call, 1 to 200 (default 50).

Por defecto: 50

cursorstringqueryopcional

next_cursor of the previous page.

include_archivedbooleanqueryopcional

Include archived products (default false).

Respuesta

dataarray<object>
has_moreboolean
next_cursorstring

Errores

Ejemplo

curl "https://api.mb-suite.com/v1/crm/products" \
  -H "Authorization: Bearer $MB_API_KEY"

Probar con tu API key de prueba

Con una API key de prueba el pedido va siempre a tu organización de práctica: datos de ejemplo que puedes reiniciar.

curl "https://api.mb-suite.com/v1/crm/products" \
  -H "Authorization: Bearer $MB_TEST_KEY"
GET/v1/crm/products/{product_id}

Get one CRM product

crm.products.get

LecturaIdempotenteDesde 2026-11-01

Returns one product of the org's product list (name, default price, currency, frequency, tax, description, SKU, image, custom fields, archived flag and order). Not found if the id does not exist. Use crm.products.list when you do not know the id.

Alcance
crm:read
Permiso
Ver el módulo
Tool del MCP
crm_products_getEn la superficie completa; en la compacta, mb_execute_operation con id: "crm.products.get".

Costo declarado: hasta 1 lecturas y 0 escrituras por llamada (cuentan en el cupo diario).

Parámetros

product_idstringrutarequerido

The product's id, from crm.products.list.

Respuesta

idstring
namestring
default_pricenumber
default_frequencyenum

Valores: one_time, monthly

is_archivedboolean
ordernumber
org_idstring
currencystring | null
taxnumber | null
descriptionstring | null
skustring | null
image_urlstring | null
custom_fieldsobject
archived_atnumber | null
archived_by_idstring | null
created_atnumber
updated_atnumber
created_by_idstring
created_by_namestring | null

Who created it, as the CRM team shows the name.

Errores

Ejemplo

curl "https://api.mb-suite.com/v1/crm/products/{product_id}" \
  -H "Authorization: Bearer $MB_API_KEY"

Probar con tu API key de prueba

Con una API key de prueba el pedido va siempre a tu organización de práctica: datos de ejemplo que puedes reiniciar.

curl "https://api.mb-suite.com/v1/crm/products/{product_id}" \
  -H "Authorization: Bearer $MB_TEST_KEY"
POST/v1/crm/products

Create a CRM product

crm.products.create

EscrituraDesde 2026-11-01

Adds a product at the end of the org's product list with a name and, optionally, default price (0 if omitted), currency (ISO code; without it the workspace's main currency applies), frequency (one_time by default, or monthly), tax percentage, description, SKU, image URL and up to 50 custom fields. Deal quotes copy these values when a line is added; editing the product later does not change existing quotes. Requires manage_products (owners, admins and CRM admins).

Alcance
crm:write
Permiso
Editar en el módulo · Acción del CRM: manage_products
Tool del MCP
crm_products_createEn la superficie completa; en la compacta, mb_execute_operation con id: "crm.products.create".

Costo declarado: hasta 1 lecturas y 1 escrituras por llamada (cuentan en el cupo diario).

Parámetros

namestringcuerporequerido

Name, up to 160 characters.

default_pricenumbercuerpoopcional

Default unit price (0 or more) that a quote line copies. Default 0.

currencystringcuerpoopcional

ISO 4217 code (USD, ARS…); without it the workspace's main currency applies.

default_frequencyenumcuerpoopcional

one_time or monthly (a monthly line adds to the deal's MRR). Default one_time.

Valores: one_time, monthly

taxnumbercuerpoopcional

Tax rate as a percentage, 0 to 100 (21 = 21 %).

descriptionstringcuerpoopcional

Description, up to 2000 characters.

skustringcuerpoopcional

SKU or internal code.

image_urlstring (uri)cuerpoopcional

Image URL (absolute).

custom_fieldsobjectcuerpoopcional

Extra fields of the product, up to 50 keys with scalar values.

Respuesta

product_idstring

Errores

Ejemplo

curl -X POST "https://api.mb-suite.com/v1/crm/products" \
  -H "Authorization: Bearer $MB_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{
  "name": "NAME"
}'

Probar con tu API key de prueba

Con una API key de prueba el pedido va siempre a tu organización de práctica: datos de ejemplo que puedes reiniciar.

curl -X POST "https://api.mb-suite.com/v1/crm/products" \
  -H "Authorization: Bearer $MB_TEST_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{
  "name": "NAME"
}'
PATCH/v1/crm/products/{product_id}

Update a CRM product

crm.products.update

EscrituraIdempotenteDesde 2026-11-01

Updates one or more fields of a product: name, default price, currency, frequency, tax, description, SKU, image URL or custom fields. Pass null on currency, tax, description, sku, image_url or custom_fields to clear them. Existing deal quotes keep the values they copied. Fails with no_changes if nothing is sent. Requires manage_products.

Alcance
crm:write
Permiso
Editar en el módulo · Acción del CRM: manage_products
Tool del MCP
crm_products_updateEn la superficie completa; en la compacta, mb_execute_operation con id: "crm.products.update".

Costo declarado: hasta 1 lecturas y 1 escrituras por llamada (cuentan en el cupo diario).

Parámetros

product_idstringrutarequerido

The product's id, from crm.products.list.

namestringcuerpoopcional

Name, up to 160 characters.

default_pricenumbercuerpoopcional

Default unit price (0 or more) that a quote line copies.

currencystring | nullcuerpoopcional

ISO 4217 code (USD, ARS…); without it the workspace's main currency applies. null clears it.

default_frequencyenumcuerpoopcional

one_time or monthly (a monthly line adds to the deal's MRR).

Valores: one_time, monthly

taxnumber | nullcuerpoopcional

Tax rate as a percentage, 0 to 100 (21 = 21 %). null clears it.

descriptionstring | nullcuerpoopcional

Description, up to 2000 characters. null clears it.

skustring | nullcuerpoopcional

SKU or internal code. null clears it.

image_urlstring (uri) | nullcuerpoopcional

Image URL (absolute). null clears it.

custom_fieldsobject | nullcuerpoopcional

Extra fields of the product, up to 50 keys with scalar values. The whole map; null clears it.

Respuesta

oktrue

Errores

Ejemplo

curl -X PATCH "https://api.mb-suite.com/v1/crm/products/{product_id}" \
  -H "Authorization: Bearer $MB_API_KEY"

Probar con tu API key de prueba

Con una API key de prueba el pedido va siempre a tu organización de práctica: datos de ejemplo que puedes reiniciar.

curl -X PATCH "https://api.mb-suite.com/v1/crm/products/{product_id}" \
  -H "Authorization: Bearer $MB_TEST_KEY"
POST/v1/crm/products/reorder

Reorder the CRM product list

crm.products.reorder

EscrituraIdempotenteDesde 2026-11-01

Sets the manual order of the product list: each id in ordered_ids gets its position as order (up to 2000 ids, usually the full list as shown). An id that does not exist fails with product_not_found. Not audited, like every reorder. Requires manage_products.

Alcance
crm:write
Permiso
Editar en el módulo · Acción del CRM: manage_products
Tool del MCP
crm_products_reorderEn la superficie completa; en la compacta, mb_execute_operation con id: "crm.products.reorder".

Costo declarado: hasta 0 lecturas y 2000 escrituras por llamada (cuentan en el cupo diario).

Parámetros

ordered_idsarray<string>cuerporequerido

Product ids (crm.products.list) in the new order, usually the whole list, up to 2000.

Respuesta

oktrue

Errores

Ejemplo

curl -X POST "https://api.mb-suite.com/v1/crm/products/reorder" \
  -H "Authorization: Bearer $MB_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{
  "ordered_ids": [
    "ORDERED_ID"
  ]
}'

Probar con tu API key de prueba

Con una API key de prueba el pedido va siempre a tu organización de práctica: datos de ejemplo que puedes reiniciar.

curl -X POST "https://api.mb-suite.com/v1/crm/products/reorder" \
  -H "Authorization: Bearer $MB_TEST_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{
  "ordered_ids": [
    "ORDERED_ID"
  ]
}'
POST/v1/crm/products/{product_id}/archive

Archive or unarchive a CRM product

crm.products.archive

EscrituraIdempotenteDesde 2026-11-01

Archives (is_archived: true) or unarchives (false) a product. An archived product stays referenceable by existing quotes but is hidden from the product picker and from crm.products.list unless include_archived is set. This is NOT the trash (see crm.products.delete). Requires manage_products.

Alcance
crm:write
Permiso
Editar en el módulo · Acción del CRM: manage_products
Tool del MCP
crm_products_archiveEn la superficie completa; en la compacta, mb_execute_operation con id: "crm.products.archive".

Costo declarado: hasta 1 lecturas y 1 escrituras por llamada (cuentan en el cupo diario).

Parámetros

product_idstringrutarequerido

The product's id, from crm.products.list.

is_archivedbooleancuerporequerido

true archives it (hidden from the product picker), false brings it back.

Respuesta

oktrue

Errores

Ejemplo

curl -X POST "https://api.mb-suite.com/v1/crm/products/{product_id}/archive" \
  -H "Authorization: Bearer $MB_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{
  "is_archived": true
}'

Probar con tu API key de prueba

Con una API key de prueba el pedido va siempre a tu organización de práctica: datos de ejemplo que puedes reiniciar.

curl -X POST "https://api.mb-suite.com/v1/crm/products/{product_id}/archive" \
  -H "Authorization: Bearer $MB_TEST_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{
  "is_archived": true
}'
DELETE/v1/crm/products/{product_id}

Delete a CRM product

crm.products.delete

IrreversibleDesde 2026-11-01

Deletes a product from the org's list. It goes to the 30-day trash: restore it with platform.trash.restore (or from CRM settings → Trash); deal quotes that used it keep their own copy of the line. Prefer crm.products.archive when it should just stop being offered. Requires manage_products.

Con una API key, este DELETE se ejecuta directo: el registro queda 30 días en la papelera y la respuesta trae su trash_item_id. Con un token OAuth, y por el MCP, pide dry_run → confirm_token.

Alcance
crm:write y «Permitir eliminar» (crm:delete en OAuth)
Permiso
Editar en el módulo · Acción del CRM: manage_products
Tool del MCP
crm_products_deleteEn la superficie completa; en la compacta, mb_execute_operation con id: "crm.products.delete".

Costo declarado: hasta 1 lecturas y 2 escrituras por llamada (cuentan en el cupo diario).

Parámetros

product_idstringrutarequerido

The product's id, from crm.products.list.

Respuesta

oktrue
trash_item_idstring

The trash item this deletion left: the item_id of platform.trash.restore (POST /trash/{item_id}/restore). Missing if nothing went to the trash.

trash_item_idsarray<string>

Only when the deletion left more than one copy: all of them, the first being trash_item_id.

trash_expires_atnumber

When the copy leaves the trash for good (epoch ms): 30 days after the deletion.

Errores

Ejemplo

curl -X DELETE "https://api.mb-suite.com/v1/crm/products/{product_id}" \
  -H "Authorization: Bearer $MB_API_KEY"

Probar con tu API key de prueba

Con una API key de prueba el pedido va siempre a tu organización de práctica: datos de ejemplo que puedes reiniciar.

curl -X DELETE "https://api.mb-suite.com/v1/crm/products/{product_id}" \
  -H "Authorization: Bearer $MB_TEST_KEY"
POST/v1/crm/products/bulk/archive

Archive or unarchive many CRM products

crm.products.bulk.archive

EscrituraMasiva · hasta 500IdempotenteDesde 2026-11-01

Archives (is_archived: true) or unarchives (false) up to 500 products at once. Ids that do not exist are skipped and counted in missing, and products already in that state are left as they are (unchanged), the same as the bulk delete. Requires manage_products. Bulk: outside the screen it requires a dry run (which lists the products that change and flags unknown ids and the ones that would not change) and a confirm_token.

Pide confirmación: primero dry_run: true (vista previa y confirm_token, que vale 10 minutos y una sola vez), después el mismo cuerpo con confirm_token. En unas pocas, solo con ciertos datos: la descripción dice cuándo. Por qué y cómo: Vista previa y confirmación.

Alcance
crm:write
Permiso
Editar en el módulo · Acción del CRM: manage_products
Tool del MCP
crm_products_bulk_archiveEn la superficie completa; en la compacta, mb_execute_operation con id: "crm.products.bulk.archive".

Costo declarado: hasta 0 lecturas y 500 escrituras por llamada (cuentan en el cupo diario).

Parámetros

product_idsarray<string>cuerporequerido

Up to 500 product ids (crm.products.list); ids that do not exist are skipped and counted in missing.

is_archivedbooleancuerporequerido

true archives them, false brings them back.

Respuesta

updatednumber
missingnumber

Ids that are not products of the organization (skipped).

unchangednumber

Products already in that state.

Errores

Ejemplo

curl -X POST "https://api.mb-suite.com/v1/crm/products/bulk/archive" \
  -H "Authorization: Bearer $MB_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "product_ids": [
    "PRODUCT_ID"
  ],
  "is_archived": true,
  "dry_run": true
}'

Probar con tu API key de prueba

Con una API key de prueba el pedido va siempre a tu organización de práctica: datos de ejemplo que puedes reiniciar.

curl -X POST "https://api.mb-suite.com/v1/crm/products/bulk/archive" \
  -H "Authorization: Bearer $MB_TEST_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "product_ids": [
    "PRODUCT_ID"
  ],
  "is_archived": true,
  "dry_run": true
}'
POST/v1/crm/products/bulk/delete

Delete many CRM products

crm.products.bulk.delete

IrreversibleMasiva · hasta 500Desde 2026-11-01

Deletes up to 500 products; each one goes to the 30-day trash and can be restored individually with platform.trash.restore. Unknown ids are skipped: deleted counts what was deleted and missing what did not exist. Deal quotes keep their own copy of the lines. Requires manage_products. Outside the screen it requires a dry run and a confirm_token.

Pide confirmación: primero dry_run: true (vista previa y confirm_token, que vale 10 minutos y una sola vez), después el mismo cuerpo con confirm_token. En unas pocas, solo con ciertos datos: la descripción dice cuándo. Por qué y cómo: Vista previa y confirmación.

Alcance
crm:write y «Permitir eliminar» (crm:delete en OAuth)
Permiso
Editar en el módulo · Acción del CRM: manage_products
Tool del MCP
crm_products_bulk_deleteEn la superficie completa; en la compacta, mb_execute_operation con id: "crm.products.bulk.delete".

Costo declarado: hasta 500 lecturas y 1000 escrituras por llamada (cuentan en el cupo diario).

Parámetros

product_idsarray<string>cuerporequerido

Up to 500 product ids (crm.products.list); ids that do not exist are skipped and counted in missing.

Respuesta

deletednumber
missingnumber

Ids that are not products of the organization (skipped).

trash_item_idsarray<string>

The trash items this deletion left, one per record: the item_id of platform.trash.restore (POST /trash/{item_id}/restore).

trash_expires_atnumber

When the copy leaves the trash for good (epoch ms): 30 days after the deletion.

Errores

Ejemplo

curl -X POST "https://api.mb-suite.com/v1/crm/products/bulk/delete" \
  -H "Authorization: Bearer $MB_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "product_ids": [
    "PRODUCT_ID"
  ],
  "dry_run": true
}'

Probar con tu API key de prueba

Con una API key de prueba el pedido va siempre a tu organización de práctica: datos de ejemplo que puedes reiniciar.

curl -X POST "https://api.mb-suite.com/v1/crm/products/bulk/delete" \
  -H "Authorization: Bearer $MB_TEST_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "product_ids": [
    "PRODUCT_ID"
  ],
  "dry_run": true
}'