API Marketful permite al usuario crear, obtener, actualizar y borrar información con respecto a órdenes y productos, a través del uso de request en formato JSON.
Información general:
- Todos los campos en blanco son generalmente comprendidos como null o string vacíos en vez de ser omitidos.
- Las credenciales para ambiente de produccion son otorgradas directamente a cada usuario.
Integracion en ambiente de pruebas:
- Si deseas probar la API en ambiente de pruebas, puedes usar las siguientes credenciales:
"Authorization": "2KENtOBfq1s"
"User": "seller_de_prueba"
"seller_id" : 215
API Versión | Updated at | V1 | Septiembre 2023 |
---|
URL para requests en producción: https://fulfillment.marketful.mx/
Se requieren los siguientes Headers.
Nombre | Descripción |
---|---|
Access_token | “Authorization”: Access_token, “User”: user_id |
user_id |
Estos Headers son las credenciales de acceso unicas para cada usuario.
Método que permite crear una orden multicanal a través de un método post.
POST /shopi_orders/multicanal_api
Nombre | Tipo | Método | “POST” |
---|---|
Headers | “Authorization”: Access_token, “User”: user_id |
Body/parametros | "order": {
"contact_info": contact_info, "items": items } |
Campo | Descripción | Tipo de Dato | Obligatorio | num_orden | Número único de la orden. Se puede repetir si el Canal de venta es distinto. | String | Sí |
---|---|---|---|
orden_id | Número único de la orden por Canal | String | Sí |
customer | Nombre del destinatario | String | Sí |
carrier_name | La empresa de envio para la orden, se aceptan como valores Fedex, DHL, UPS, Estafeta, Paquetexpress. | String | Sí |
telefono | Teléfono del destinatario | String | Sí |
calle | Calle del domicilio de entrega | String | Sí |
no_exterior | Número exterior del domicilio de entrega | String | Sí |
no_interior | Número interior del domicilio de entrega | String | No |
colonia | Colonia del domicilio de entrega | String | Sí |
ciudad | Ciudad del domicilio de entrega | String | Sí |
estado | Estado del domicilio de entrega. Debe tener el formato: MX - AG, MX - BC, etc puede obtener el listado completo de códigos de 2 letras en https://en.wikipedia.org/wi ki/Template:Mexico_State- Abbreviation_Codes | String | Sí |
codigo_postal | Código postal del destinatario | String | Sí |
canal | Canal de venta (Ej. MercadoLibre, Amazon, etc.) | String | Sí |
tipo_envio | El tipo de envio que tendra la orden, se aceptan los valores “económico” y “dia siguiente” | String | Sí |
asegurado | Si desea que la guía sea con seguro el campo debera ser true o false en caso contrario. Si no se especifica, será false por default | Boolean | No |
url_guia_pdf | La URL del archivo PDF de la guía | String | No |
tracking_number | El número de guía de la orden | String | No |
fulfillment_status | Se debe poner el status de "pausado" para indicar que la orden aún no se debe surtir. Esto aplica para ordenes que se crean sin guía y que posteriormente se les asignará una por medio de la API. Si la orden no se debe pausar no se debe poner este parámetro en el payload del request. | String | No |
Asigna guía a una orden existente
GET /api/shopi_orders/asignar_guia
Nombre | Tipo |
---|---|
Método | “GET” |
Headers | “Authorization”: Access_token, “User”: user_id |
Body/parametros |
"canal"=>"Nombre del canal",
"orden"=>"número de orden", "url_guia_pdf" => "URL del pdf de la guía", "tracking_number" => "número de guía", "paqueteria" => "nombre de la paquetería" |
Campo | Descripción | Tipo de Dato | Obligatorio |
---|---|---|---|
canal | Nombre del canal de la orden. ej. Shopify, Mercadolibre, Amazon, etc. | String | SI |
orden | Número de la orden | String | SI |
url_guia_pdf | URL del pdf de la guía | String | SI |
tracking_number | Número de guía | String | NO |
paqueteria | Nombre de la paquetería con la que se generó la guía | String | SI |
Respuesta recibida | Caso | Tipo | status: 200 body: { message: "Guía asignada correctamente"} |
Operacion completada correctamente. | JSON | status: 500 body: { message: "El canal es obligatorio"} |
Cuando no se envía el "canal" | JSON |
---|---|---|
status: 500 body: { message: "El número de orden es obligatorio"} |
Cuando no se envía la "orden" | JSON |
status: 500 body: { message: "La URL del PDF de la guía es obligatorio"} |
Cuando no se envía la "url_guia_pdf" | JSON |
status: 500 body: { message: "El nombre de la paquetería es obligatorio"} |
Cuando no se envía la "paqueteria" | JSON |
status: 404 body: { message: "La orden con número #{orden} del canal #{canal} no existe"} |
Cuando no se ecuentra la orden solicitada | JSON |
status: 405 body: { message: "No se le puede asignar guía a una orden fulfilled"} |
Cuando la orden ya esta surtida no se le puede asignar guía | JSON |
status: 403 body: { message: "User Not Found", } |
Si alguno de los valores de los Headers ( Authorization/User) es incorrecto | JSON |
Método que permite consultar toda la información respectiva de una orden a partir de canal y número de orden.
GET /shopi_orders/get_orders
Nombre | Tipo | Método | “GET” |
---|---|
Headers | “Authorization”: Access_token, “User”: user_id |
Body/parametros | canal: “canal_de_orden”, orden: “numero_de_orden” |
Campo | Descripción | Tipo de Dato | Obligatorio | Authorization | Clave/Token unico. | String | Sí |
---|---|---|---|
User | Clave/Token para identificar al usuario. | String | Sí |
canal | El canal de la orden que se desea obtener, ej: “Shopify”, “Marketful”, etc. | String | Sí |
orden | El numero de la orden que se quiere obtener. Ej: “2554”, “#1254”, etc. | String | Sí |
Respuesta recibida | Caso | Tipo |
---|---|---|
status: 200 body: { "message": "Orden encontrada", orden: orden } |
Si la orden se encontro regresa la informacion de toda la orden consultada. | JSON |
status: 405 body: { "message": "Seller not found" } |
Cuando el usuario es incorrecto de acuerdo a las credenciales especificadas. | JSON |
status: 405 body: { "message": "Canal y numero de orden deben existir" } |
Si el parametro de 'order' o 'canal' son incorrectos | JSON |
status: 404 body: { "message": "Invalid Token" } |
Si no se envian o falta alguno de los headers. | JSON |
status: 404 body: { "message": "Orden no encontrada" } |
Si la Orden a buscar no fue encontrada. | JSON |
Recupera la lista ordenes.
GET /api/shopi_orders/orders
Nombre | Tipo |
---|---|
Método | “GET” |
Headers | “Authorization”: Access_token, “User”: user_id |
Body/parametros |
"offset"=>offset,
"limit"=>limit, "canal"=>canal |
Campo | Descripción | Tipo de Dato | Obligatorio |
---|---|---|---|
offset | Cantidad de registros que se excluirá de la consulta | String | NO |
limit | Cantidad máxima de registros que traerá la consulta | String | NO |
canal | Nombre del canal. ej. Shopify, Elenas, Liverpool, etc. | String | NO |
Respuesta recibida | Caso | Tipo | status: 200 body: { message: "Succes", paging: {}, results: [] } |
Success | JSON |
---|---|---|
status: 403 body: { message: "User Not Found", } |
Si alguno de los valores de los { Headers ( Authorization/User) es incorrecto | JSON |
status: 404 body: { message: "Invalid Authorization", } |
Si no se envian o falta alguno de los headers. | JSON |
Para enviar sus stocks a Marketful, los vendedores deben decirle a Marketful lo que van a enviar al almacén antes de enviarlo. Esta Orden de Entrada le permite a Marketful validar las cantidades recibidas contra lo que se suponía que debía recibirse.
POST /entradas/nueva_entrada_api
Nombre | Tipo | Método | “POST” |
---|---|
Headers | “Authorization”: Access_token, “User”: user_id |
Body/parametros | "entry_order" : entry_order |
Campo | Descripción | Tipo de Dato | Obligatorio |
---|---|---|---|
entry_order | Objeto que defina cada item que se agregara a la orden de entrada, donde cada Key debe ser el SKU del producto y el Value la cantidad de stock a enviar. Importante: El Item debe existir para crear la entrada, de no ser asi el request regresara el mensaje de error correspondiente. |
objeto | Sí |
tracking_number | Numero de guia de la orden de entrada que estas mandando a Marketful | String | NO |
carrier_name | Nombre de la paqueteria de Envio en donde estas enviando la orden de entrada a Marketful. | String | NO |
Recupera la lista de ordenes de entradas.
GET /api/entrada_lists/entradas
Nombre | Tipo |
---|---|
Método | “GET” |
Headers | “Authorization”: Access_token, “User”: user_id |
Body/parametros | "offset"=>offset, "limit"=>limit |
Campo | Descripción | Tipo de Dato | Obligatorio |
---|---|---|---|
offset | Cantidad de registros que se excluirá de la consulta | String | NO |
limit | Cantidad máxima de registros que traerá la consulta | String | NO |
Respuesta recibida | Caso | Tipo | status: 200 body: { message: "Succes", paging: {}, results: [] } |
Success | JSON |
---|---|---|
status: 403 body: { message: "User Not Found", } |
Si alguno de los valores de los { Headers ( Authorization/User) es incorrecto | JSON |
status: 404 body: { message: "Invalid Authorization", } |
Si no se envian o falta alguno de los headers. | JSON |
Recupera la información de una entrada
GET api/entrada_lists/entradas/{entrada_token}
Nombre | Tipo |
---|---|
Método | “GET” |
Headers | “Authorization”: Access_token, “User”: user_id |
Body/parametros | entrada_token |
Campo | Descripción | Tipo de Dato | Obligatorio |
---|---|---|---|
entrada_token | Valor único para identificar una entrada | String | SI |
Respuesta recibida | Caso | Tipo | status: 200 body: { message: "Succes", entrada: {}, detalle_entrada: [] } |
Success | JSON |
---|---|---|
status: 400 body: { message: "Entrada no encontrada", } |
Si la entrada con entrada_token no existe | JSON |
status: 403 body: { message: "User Not Found", } |
Si alguno de los valores de los { Headers ( Authorization/User) es incorrecto | JSON |
status: 404 body: { message: "Invalid Authorization", } |
Si no se envian o falta alguno de los headers. | JSON |
Recupera la lista de ordenes de devoluciones.
GET /api/devolucion_lists/devoluciones
Nombre | Tipo |
---|---|
Método | “GET” |
Headers | “Authorization”: Access_token, “User”: user_id |
Body/parametros | "offset"=>offset, "limit"=>limit |
Campo | Descripción | Tipo de Dato | Obligatorio |
---|---|---|---|
offset | Cantidad de registros que se excluirá de la consulta | String | NO |
limit | Cantidad máxima de registros que traerá la consulta | String | NO |
Respuesta recibida | Caso | Tipo | status: 200 body: { message: "Succes", paging: {}, results: [] } |
Success | JSON |
---|---|---|
status: 403 body: { message: "User Not Found", } |
Si alguno de los valores de los { Headers ( Authorization/User) es incorrecto | JSON |
status: 404 body: { message: "Invalid Authorization", } |
Si no se envian o falta alguno de los headers. | JSON |
Recupera la información de una devolución
GET api/devolucion_lists/devoluciones/{entrada_token}
Nombre | Tipo |
---|---|
Método | “GET” |
Headers | “Authorization”: Access_token, “User”: user_id |
Body/parametros | entrada_token |
Campo | Descripción | Tipo de Dato | Obligatorio |
---|---|---|---|
entrada_token | Valor único para identificar una devolución | String | SI |
Respuesta recibida | Caso | Tipo | status: 200 body: { message: "Succes", devolucion: {}, detalle_devolucion: [] } |
Success | JSON |
---|---|---|
status: 400 body: { message: "Devolución no encontrada no encontrada", } |
Si la devolución con entrada_token no existe | JSON |
status: 403 body: { message: "User Not Found", } |
Si alguno de los valores de los { Headers ( Authorization/User) es incorrecto | JSON |
status: 404 body: { message: "Invalid Authorization", } |
Si no se envian o falta alguno de los headers. | JSON |
Recupera la lista de Items.
GET /api/items
Nombre | Tipo |
---|---|
Método | “GET” |
Headers | “Authorization”: Access_token, “User”: user_id |
Body/parametros | "offset"=>offset, "limit"=>limit |
Campo | Descripción | Tipo de Dato | Obligatorio |
---|---|---|---|
offset | Cantidad de registros que se excluirá de la consulta | String | NO |
limit | Cantidad máxima de registros que traerá la consulta | String | NO |
Respuesta recibida | Caso | Tipo | status: 200 body: { message: "Succes", paging: {}, results: [] } |
Success | JSON |
---|---|---|
status: 403 body: { message: "User Not Found", } |
Si alguno de los valores de los { Headers ( Authorization/User) es incorrecto | JSON |
status: 404 body: { message: "Invalid Authorization", } |
Si no se envian o falta alguno de los headers. | JSON |
Recupera los niveles de stock actuales disponibles para la venta.
GET /items/get_stock
Nombre | Tipo | Método | “GET” |
---|---|
Headers | “Authorization”: Access_token, “User”: user_id |
Body/parametros | "sku" :sku |
Campo | Descripción | Tipo de Dato | Obligatorio | sku | Código de identificacion del producto ej. “Bottle234543” | String | Sí |
---|
Respuesta recibida | Caso | Tipo | status: 200 body: { message: "Succes", sku: item.sku, available_quantity: number, item_id: Item ID, price: float} |
Success | JSON |
---|---|---|
status: 401 body: { message: "Item #{sku} not found", } |
No se encontro el item |
JSON |
status: 402 body: { message: "SKU param must be present and must be String", } |
Cuando el parámetro “sku” no se está mandando o tiene un formato incorrecto | JSON |
status: 403 body: { message: "User Not Found", } |
Si alguno de los valores de los { Headers ( Authorization/User) es incorrecto | JSON |
status: 404 body: { message: "Invalid Authorization", } |
Si no se envian o falta alguno de los headers. | JSON |
Recupera los niveles de stock actuales disponibles para la venta.
GET /items/get_stock_ean
Nombre | Tipo | Método | “GET” |
---|---|
Headers | “Authorization”: Access_token, “User”: user_id |
Body/parametros | "ean": Codigo EAN |
Campo | Descripción | Tipo de Dato | Obligatorio | ean | Código EAN del producto ej. "07852236842" | String | Sí |
---|
Respuesta recibida | Caso | Tipo | status: 200 body: { message: "Succes", ean: EAN, available_quantity: number, item_id: Item ID} |
Success | JSON |
---|---|---|
status: 401 body: { message: "Item con EAN '07852236842' no encontrado", } |
No se encontro el item |
JSON |
status: 402 body: { message: "ean must be present and must be String", } |
Cuando el parámetro "ean" no se está mandando o tiene un formato incorrecto | JSON |
status: 403 body: { message: "User Not Found", } |
Si alguno de los valores de los { Headers ( Authorization/User) es incorrecto | JSON |
status: 404 body: { message: "Invalid Authorization", } |
Si no se envian o falta alguno de los headers. | JSON |
Permite registrar productos en Marketful y así poder tener un control del inventario de estos productos.
Permite registrar desde múltiples productos en un solo request.
POST /items/create_item
Nombre | Tipo | Método | “POST” |
---|---|
Headers | “Authorization”: Access_token, “User”: user_id |
Body/parametros | “items”: productos |
Campo | Descripción | Tipo de Dato | Obligatorio | items | Vector de objetos, donde cada objeto incluye los parámetros title, list_price, sku, height, width, length, weight, ean, ml_sku, amz_sku, clave_sat, fraccion_arancelaria, fragil | objeto | Sí |
---|---|---|---|
title | Título del producto | String | Sí |
list_price | Precio del producto | float | Sí |
sku | Código de identificación unico para cada producto, (Sin caracteres especiales ni espacios) | String | Sí |
height | altura del producto | float | No |
width | anchura del producto | float | No |
length | longitud del producto | float | No |
weight | peso del producto | float | No |
ean | Codigo EAN del producto | String | No |
ml_sku | Código de identificación unico para cada producto en Mercado Libre, (Sin caracteres especiales ni espacios) | String | No |
amz_sku | Código de identificación unico para cada producto en Amazon, (Sin caracteres especiales ni espacios) | String | No |
clave_sat | Clave del producto en el SAT | String | No |
fraccion_arancelaria | Código por producto de la fracción arancelaria | String | No |
fragil | Indica si el producto es frágil | Boolean | No |
Permite borrar un producto a partir del id del producto, este id se obtiene al momento de crear el producto.
POST /items/delete_item
Nombre | Tipo | Método | “POST” |
---|---|
Headers | “Authorization”: Access_token, “User”: user_id |
Body/parametros | “item_id”: item_id |
Campo | Descripción | Tipo de Dato | Obligatorio | item_id | id del producto a eliminar | int | Sí |
---|
Respuesta recibida | Caso | Tipo | status: 200 body: { message: "Succes", description: "Item #{item_id} deleted", |
Item borrado con éxito | JSON |
---|---|---|
status: 401 body: { message: "Item not found",} |
No se encontro el item |
JSON |
status: 402 body: { message: "item ID must be present and be a number", } |
Cuando no se encuentra el parámetro “item_id” | JSON |
status: 402 body: { message: "item id must be an Integer", } |
Si el parámetro “item_id” no es un formato de numero valido | JSON |
status: 403 body: { message: "User Not Found", } |
Si alguno de los valores de los { Headers ( Authorization/User) es incorrecto | JSON |
status: 404 body: { message: "Invalid Authorization", } |
Si no se envian o falta alguno de los headers. | JSON |
status: 400 body: { message: "ERROR", description: "Item #{item_id} can't be deleted"} |
Si no se pudo borrar el item (El item ya fue borrado anteriormente o alguna situacion similar.) | JSON |
Método que permite actualizar los atributos de un producto a partir del id del producto, este id se obtiene al momento de crear el producto.
POST /items/update_item
Nombre | Tipo | Método | “POST” |
---|---|
Headers | “Authorization”: Access_token, “User”: user_id |
Body/parametros | {"item_id"=> item_id, "title"=>"Pluma Roja", "height"=>12, "width"=> 12, "length"=> 12, "weigth"=> 12, "list_price"=>355, "sku"=>"ABCD12"} |
Campo | Descripción | Tipo de Dato | Obligatorio | item_id | id del producto a eliminar | int | Sí |
---|---|---|---|
title | Título del producto | String | No |
height | altura del producto | float | No |
width | anchula del producto | float | No |
length | longitud del producto | float | No |
weigth | peso del producto | float | No |
list_price | Precio del producto | float | No |
sku | Código de identificación unico del producto (sin caracteres especiales ni espacios) | String | No |
ean | Código EAN del producto (sin caracteres especiales ni espacios) | String | No |
ml_sku | Código de identificación unico para cada producto en Mercado Libre, (Sin caracteres especiales ni espacios) | String | No |
amz_sku | Código de identificación unico para cada producto en Amazon, (Sin caracteres especiales ni espacios) | String | No |
clave_sat | Clave del producto en el SAT | String | No |
fraccion_arancelaria | Código por producto de la fracción arancelaria | String | No |
fragil | Indica si el producto es frágil | Boolean | No |
“Si no se manda ningun parametro para actualizar, el metodo retorna el status 200”
Método que permite consultar todos los eventos de envio relacionadas a una ordes a traves del id de la orden..
GET /shipment_events/get_events
Nombre | Tipo | Método | GET |
---|---|
Headers | “Authorization”: Access_token, “User”: user_id |
Body/parametros | {"order_id" => 5021} |
Campo | Descripción | Tipo de Dato | Obligatorio |
---|---|---|---|
order_id | id de la orden | int | Sí |
Respuesta recibida | Caso | Tipo | status: 200 body: { message: "Succes", orden: objeto |
Los eventos de la orden consultada son correctos | JSON |
---|---|---|
status: 404 body:{ message: "Orden no encontrad"} |
Si el id de la orden no corresponde a ninguna orden existente. | JSON |
status: 404 body: { message: "order_id must be present", } |
No se encuentra o no se está mandando el parámetro "order_id" con un formato valido | JSON |
status: 404 body: { message: "Seller Not Found", } |
Si las credenciales proporcionads no correspone a un usuario | JSON |
status: 404 body: { message: "User Not Found", } |
Si alguno de los valores de los { Headers ( Authorization/User) es incorrecto | JSON |
status: 404 body: { message: "Invalid Authorization", } |
Si no se envian o falta alguno de los headers. | JSON |
Método que permite consultar todos los Webhhoks que tengas registrados.
GET /webhooks/consultar
Nombre | Tipo | Método | GET |
---|---|
Headers | “Authorization”: Access_token, “User”: user_id |
Campo | Descripción | Tipo de Dato | Obligatorio |
---|---|---|---|
Respuesta recibida | Caso | Tipo | status: 200 body: { message: "Succes", webhooks: Listado de los Webhooks |
Consulta exitosa de los Webhooks registrados | JSON |
---|---|---|
status: 404 body: { message: "User Not Found", } |
Si alguno de los valores de los { Headers ( Authorization/User) es incorrecto | JSON |
status: 404 body: { message: "Invalid Authorization", } |
Si no se envian o falta alguno de los headers. | JSON |
Método que permite crear Webhooks para creacion de ordenes, actualizacion de ordenes y creacion de Eventos de la orden.
POST /webhooks/crear
Nombre | Tipo | Método | POST |
---|---|
Headers | “Authorization”: Access_token, “User”: user_id |
Body/parametros | {"url"=>"www.example.com/notificaciones", "tipo"=>"order/created"} |
Campo | Descripción | Tipo de Dato | Obligatorio |
---|---|---|---|
url | Link/URL al que el Webhook mandara la informacion correspondiente. | String | Sí |
tipo | Nombre o tipo del Webhook a crear ("order/created", "order/updated", "shipment_event/created") | String | Sí |
Respuesta recibida | Caso | Tipo | status: 200 body: { message: "Succes", webhook: Webkook |
El Webhook se creo exitosamente | JSON |
---|---|---|
status: 404 body:{ message: "Ya existe un Webhook para order/created"} |
Cuando ya existe un Webhook con el mismo tipo/nombre y tiene una URL distinta a la que se esta mandando. En caso de mandar mismo "tipo" y "url" y que ya exista un Webhook con esta informacion, retornara el Webhook existente. | JSON |
status: 404 body:{ message: "Error al crear Webhook", error: "Explicacion del error"} |
Cuando el Webhook no pudo ser creado por algun motivo, sera especificaco en el campo ":error" | JSON |
status: 404 body:{ message: "Webhook orders/CRATED desconocido/invalido"} |
Si el tipo/nombre del webhook no esta dentro de la lista de los Webhooks existentes. | JSON |
status: 404 body: { message: "Parametros incompletos (url y tipo deben estar presentes", } |
Cuando los parametros necesarios para el request ("tipo" y "url") no estan presentes o tienen un formato invalido. | JSON |
status: 404 body: { message: "User Not Found", } |
Si alguno de los valores de los { Headers ( Authorization/User) es incorrecto | JSON |
status: 404 body: { message: "Invalid Authorization", } |
Si no se envian o falta alguno de los headers. | JSON |
Método que permite eliminar un Webhook a traves de su id.
POST /webhooks/eliminar
Nombre | Tipo | Método | POST |
---|---|
Headers | “Authorization”: Access_token, “User”: user_id |
Body/parametros | {"webhook_id"=>"3"} |
Campo | Descripción | Tipo de Dato | Obligatorio |
---|---|---|---|
webhook_id | Id del Webhook a eliminar | Integer | Sí |
Respuesta recibida | Caso | Tipo | status: 200 body: { message: "Succes" } |
El Webhook se elimino correctamente. | JSON |
---|---|---|
status: 404 body:{ message: "Webhook 4 no encontrado"} |
Cuando el webhook_id no coincide con ningun Webhook registrado. | JSON |
status: 404 body: { message: "Parametro webhook_id no esta presente o esta en un formato invalido", } |
Cuando el parametro webhook_id no esta presente o tiene un formato invalido. | JSON |
status: 404 body: { message: "User Not Found", } |
Si alguno de los valores de los { Headers ( Authorization/User) es incorrecto | JSON |
status: 404 body: { message: "Invalid Authorization", } |
Si no se envian o falta alguno de los headers. | JSON |