{"components":{"schemas":{"IntegrationErrorBodyDoc":{"properties":{"code":{"enum":["UNAUTHORIZED","INVALID_SIGNATURE","TIMESTAMP_OUT_OF_RANGE","REPLAYED_NONCE","FORBIDDEN_SCOPE","RATE_LIMITED","VALIDATION_ERROR","IDEMPOTENCY_KEY_REUSED","NOT_FOUND","MIXED_SELLERS","INSUFFICIENT_STOCK","NO_COURIER_COVERAGE","ORDER_NOT_CANCELLABLE","INTERNAL_ERROR"],"example":"INVALID_SIGNATURE","type":"string"},"message":{"example":"La firma no coincide con el request","type":"string"},"details":{"description":"Detalle por campo. Solo en errores de validación.","example":["items should not be empty"],"type":"object"},"requestId":{"description":"Mismo valor que el header X-Request-Id. Cítalo al reportar un problema.","example":"req_1f0c9a2e-4b7d-4c2a-9f3e-8d1b6a5c0e77","type":"string"}},"required":["code","message","requestId"],"type":"object"},"IntegrationErrorDoc":{"properties":{"error":{"$ref":"#/components/schemas/IntegrationErrorBodyDoc"}},"required":["error"],"type":"object"},"IntegrationPingDoc":{"properties":{"partner":{"example":"Icomfly","type":"string"},"slug":{"example":"icomfly","type":"string"},"scopes":{"example":["products:read","orders:read","orders:write","geo:read"],"items":{"enum":["products:read","orders:read","orders:write","geo:read"],"type":"string"},"type":"array"},"serverTime":{"description":"Hora del servidor. Úsala para detectar desfase de reloj: más de 5 minutos rechaza el 100% de tus requests.","example":"2026-08-11T18:22:04.118Z","format":"date-time","type":"string"}},"required":["partner","slug","scopes","serverTime"],"type":"object"},"CurrencyDoc":{"properties":{"name":{"example":"Dólar","type":"string"},"symbol":{"example":"$","type":"string"}},"required":["name","symbol"],"type":"object"},"StockDoc":{"properties":{"quantity":{"description":"Unidades disponibles","example":14,"type":"number"},"isInStock":{"example":true,"type":"boolean"}},"required":["quantity","isInStock"],"type":"object"},"IntegrationVariantDoc":{"properties":{"id":{"description":"Identificador de la variante en el catálogo. ESTE es el catalogId que POST /orders espera para un producto con variantes.","example":"65b000000000000000000101","type":"string"},"productVariantId":{"example":"65b000000000000000000201","type":"string"},"name":{"example":"M / Negro","type":"string"},"attributes":{"description":"Combinación de la variante: un valor por cada eje del producto. Lista vacía en las variantes planas, donde el nombre es el único identificador.","example":[{"name":"Talla","value":"M"},{"name":"Color","value":"Negro"}],"items":{"type":"string"},"type":"array"},"sku":{"example":"AUD-001-BK","nullable":true,"type":"string"},"price":{"description":"Precio de venta del dropshipper para esta variante","example":26.99,"type":"number"},"cost":{"description":"Costo del dropshipper para esta variante: lo que le paga al proveedor por unidad.","example":12,"type":"number"},"stock":{"$ref":"#/components/schemas/StockDoc"},"active":{"example":true,"type":"boolean"}},"required":["id","productVariantId","name","attributes","sku","price","cost","stock","active"],"type":"object"},"IntegrationProductDoc":{"properties":{"id":{"description":"Identificador canónico del ítem. Es el catalogId que POST /orders espera para un producto simple.","example":"65b0000000000000000000c1","type":"string"},"name":{"example":"Audífonos Pro","type":"string"},"description":{"example":"Audífonos inalámbricos","nullable":true,"type":"string"},"sku":{"example":"AUD-001","nullable":true,"type":"string"},"imageUrl":{"example":"https://cdn.soydrop.com/img.png","nullable":true,"type":"string"},"images":{"example":["https://cdn.soydrop.com/img.png"],"items":{"type":"string"},"type":"array"},"price":{"description":"Precio de venta del dropshipper: lo que le cobra a su cliente final. Es el mismo valor que la columna \"Precio\" del catálogo en la app.","example":24.99,"type":"number"},"cost":{"description":"Costo del dropshipper: lo que le paga al proveedor por unidad. Es el mismo valor que la columna \"Costo proveedor\" del catálogo en la app. Si hay un costo especial pactado (producto reservado en exclusiva) viene ese; si no, el costo público.","example":10,"type":"number"},"suggestedPrice":{"description":"Precio de venta sugerido por el proveedor. Es una sugerencia, no el precio que cobra el dropshipper: para eso está `price`.","example":27,"type":"number"},"currency":{"allOf":[{"$ref":"#/components/schemas/CurrencyDoc"}],"description":"Moneda del país del producto. No hay código ISO en el modelo, solo nombre y símbolo.","nullable":true},"stock":{"$ref":"#/components/schemas/StockDoc"},"visibility":{"description":"`private` significa que el producto está reservado en exclusiva para ese dropshipper; en ese caso `cost` y el stock son los pactados para él. `price` no cambia: siempre es su precio de venta.","enum":["public","private"],"example":"public","type":"string"},"active":{"example":true,"type":"boolean"},"productId":{"example":"65b0000000000000000000d1","type":"string"},"vendorId":{"example":"65b0000000000000000000e1","type":"string"},"sellerId":{"description":"Dropshipper dueño de este ítem de catálogo","example":"65b0000000000000000000f1","type":"string"},"hasVariants":{"example":true,"type":"boolean"},"variantsCount":{"example":3,"type":"number"},"variants":{"description":"Solo en GET /products/:id. En el listado no se incluyen.","items":{"$ref":"#/components/schemas/IntegrationVariantDoc"},"type":"array"},"createdAt":{"example":"2026-07-01T00:00:00.000Z","format":"date-time","type":"string"},"updatedAt":{"example":"2026-07-02T00:00:00.000Z","format":"date-time","type":"string"}},"required":["id","name","description","sku","imageUrl","images","price","cost","suggestedPrice","currency","stock","visibility","active","productId","vendorId","sellerId","hasVariants","variantsCount","createdAt","updatedAt"],"type":"object"},"PaginationMetaDoc":{"properties":{"page":{"example":1,"type":"number"},"limit":{"example":20,"maximum":100,"type":"number"},"total":{"description":"Total de elementos que matchean","example":213,"type":"number"},"totalPages":{"example":11,"type":"number"},"hasNextPage":{"example":true,"type":"boolean"}},"required":["page","limit","total","totalPages","hasNextPage"],"type":"object"},"IntegrationStockDoc":{"properties":{"id":{"description":"El mismo id que se envió, sea de producto o de variante","example":"65b0000000000000000000c1","type":"string"},"quantity":{"example":14,"type":"number"},"isInStock":{"example":true,"type":"boolean"}},"required":["id","quantity","isInStock"],"type":"object"},"IntegrationAddressLevelValueDoc":{"properties":{"id":{"description":"Va en shipping.extraLevels[].valueId","example":"68a1d0f2c3b4a5d6e7f80901","type":"string"},"name":{"example":"San Pedro Sacatepéquez","type":"string"},"parentId":{"example":"68a1d0f2c3b4a5d6e7f80800","nullable":true,"type":"string"},"code":{"example":null,"nullable":true,"type":"string"}},"required":["id","name","parentId","code"],"type":"object"},"IntegrationCountryDoc":{"properties":{"id":{"example":"65b0000000000000000000a1","type":"string"},"name":{"example":"El Salvador","type":"string"},"countryCode":{"example":"SV","nullable":true,"type":"string"},"currencyName":{"example":"Dólar","type":"string"},"currencySymbol":{"example":"$","type":"string"},"requestCoordinatesFromCustomer":{"description":"Si es true, mandá shipping.latitude y shipping.longitude al crear la orden: sin ellas la orden entra a \"Verificar\" y no se puede despachar. Hoy solo Costa Rica lo exige.","example":false,"type":"boolean"}},"required":["id","name","countryCode","currencyName","currencySymbol","requestCoordinatesFromCustomer"],"type":"object"},"IntegrationCityDoc":{"properties":{"id":{"description":"Id de Boxful. Es el valor que POST /orders espera en cityId.","example":"city-1","type":"string"},"name":{"example":"Soyapango","type":"string"},"latitude":{"example":13.7,"nullable":true,"type":"number"},"longitude":{"example":-89.1,"nullable":true,"type":"number"}},"required":["id","name","latitude","longitude"],"type":"object"},"IntegrationStateDoc":{"properties":{"id":{"description":"Id de Boxful. Es el valor que POST /orders espera en stateId.","example":"state-1","type":"string"},"name":{"example":"San Salvador","type":"string"},"cities":{"items":{"$ref":"#/components/schemas/IntegrationCityDoc"},"type":"array"}},"required":["id","name","cities"],"type":"object"},"IntegrationAddressLevelDoc":{"properties":{"order":{"description":"Orden en que se piden los niveles, de mayor a menor jerarquía","example":1,"type":"number"},"key":{"description":"Identificador del nivel. `state` y `city` viajan en shipping.stateId y shipping.cityId; cualquier otro va en shipping.extraLevels como levelKey.","example":"state","type":"string"},"label":{"description":"Nombre del nivel en ese país, para tu formulario","example":"Departamento","type":"string"},"source":{"description":"De dónde salen los valores válidos: STATES y CITIES de GET /geo/states; DYNAMIC de levelValues en esta misma respuesta.","enum":["STATES","CITIES","DYNAMIC"],"example":"STATES","type":"string"},"parentLevelKey":{"description":"Nivel del que depende. Los municipios dependen del departamento.","example":null,"nullable":true,"type":"string"},"required":{"description":"Si el nivel es obligatorio para despachar. Describe al país: al crear una orden quien decide es la paquetería.","example":true,"type":"boolean"},"isCoverageLevel":{"description":"Si la cobertura de la paquetería se evalúa sobre este nivel","example":false,"type":"boolean"}},"required":["order","key","source","required"],"type":"object"},"IntegrationAddressConfigDoc":{"properties":{"countryId":{"example":"6696fac87d6004185f53320a","type":"string"},"isActive":{"example":true,"type":"boolean"},"usesLegacyCity":{"description":"Si el país sigue usando el municipio legado en vez de niveles","example":false,"type":"boolean"},"levels":{"items":{"$ref":"#/components/schemas/IntegrationAddressLevelDoc"},"type":"array"}},"required":["countryId","isActive","usesLegacyCity","levels"],"type":"object"},"IntegrationCountryAddressConfigDoc":{"properties":{"config":{"allOf":[{"$ref":"#/components/schemas/IntegrationAddressConfigDoc"}],"description":"null cuando el país no tiene configuración de niveles. Puede traer campos internos además de los documentados: ignorá los que no reconozcas.","nullable":true},"levelValues":{"additionalProperties":{"items":{"$ref":"#/components/schemas/IntegrationAddressLevelValueDoc"},"type":"array"},"description":"Valores válidos de los niveles DYNAMIC, indexados por la key del nivel","example":{"poblado":[{"code":null,"id":"68a1d0f2c3b4a5d6e7f80901","name":"San Pedro Sacatepéquez","parentId":"68a1d0f2c3b4a5d6e7f80800"}]},"type":"object"}},"required":["config","levelValues"],"type":"object"},"IntegrationCoverageCourierDoc":{"properties":{"id":{"description":"Va en courierId al crear la orden","example":"64bff5040158c645794c0f52","type":"string"},"name":{"example":"Guatex","type":"string"},"logo":{"example":"https://storage.googleapis.com/…/guatex.png","type":"string"},"courierType":{"enum":["SAME_DAY","NEXT_DAY"],"example":"NEXT_DAY","nullable":true,"type":"string"},"price":{"description":"Costo de envío para esa ruta, en la moneda del país. Ya incluye tus condiciones preferenciales si las tenés.","example":4.5,"type":"number"},"codCommissionPercentage":{"description":"Comisión sobre el monto cobrado contra entrega, entre 0 y 1","example":0.04,"type":"number"},"deliveryDays":{"description":"Días de la semana en que entrega","example":[1,2,3,4,5],"items":{"type":"number"},"type":"array"},"recollectionDays":{"description":"Días de la semana en que recolecta","example":[1,2,3,4,5],"items":{"type":"number"},"type":"array"},"requiresAddressExtraLevels":{"description":"Si esta paquetería exige los niveles de dirección adicionales del país (shipping.extraLevels) para poder entregar","example":false,"type":"boolean"}},"required":["id","name","logo","courierType","price","codCommissionPercentage","deliveryDays","recollectionDays","requiresAddressExtraLevels"],"type":"object"},"IntegrationAvailableCouriersDoc":{"properties":{"couriers":{"items":{"$ref":"#/components/schemas/IntegrationCoverageCourierDoc"},"type":"array"},"unverifiedCount":{"description":"Paqueterías que no se pudieron evaluar porque el servicio de cobertura falló. Una lista vacía con unverifiedCount 0 significa que ninguna cubre el destino; vacía con unverifiedCount mayor a 0 significa que no se pudo averiguar.","example":0,"type":"number"}},"required":["couriers","unverifiedCount"],"type":"object"},"IntegrationCountryCourierDoc":{"properties":{"id":{"description":"Va en courierId al crear la orden","example":"64bff5040158c645794c0f52","type":"string"},"name":{"example":"Xpress","type":"string"},"logo":{"example":"https://storage.googleapis.com/…/xpress.png","type":"string"},"dropPrice":{"description":"Costo de envío de esa paquetería, en la moneda del país","example":4.5,"type":"number"},"efectivityPercentage":{"description":"Tasa histórica de entregas exitosas, entre 0 y 1","example":0.96,"type":"number"},"codCommissionPercentage":{"description":"Comisión sobre el monto cobrado contra entrega, entre 0 y 1. Ya lleva aplicada tu comisión preferencial, si tenés una negociada.","example":0.04,"type":"number"}},"required":["id","name","logo","dropPrice","efectivityPercentage","codCommissionPercentage"],"type":"object"},"IntegrationCourierDoc":{"properties":{"id":{"example":"692dc52174c1647295ece2cc","type":"string"},"name":{"example":"Guatex","type":"string"}},"required":["id","name"],"type":"object"},"IntegrationRequestedCourierDoc":{"properties":{"id":{"example":"67ddf4a61285369140537bf6","type":"string"},"reason":{"description":"`no_coverage`: esa paquetera no cubre la ruta. `coverage_check_failed`: no se pudo verificar la cobertura. `route_not_evaluable`: faltan datos de la ruta para evaluarla.","enum":["no_coverage","coverage_check_failed","route_not_evaluable"],"example":"no_coverage","type":"string"}},"required":["id","reason"],"type":"object"},"IntegrationOrderCreatedDoc":{"properties":{"id":{"example":"65b000000000000000000301","type":"string"},"orderNumber":{"description":"Número visible de la orden","example":"DR-10233","type":"string"},"externalOrderId":{"description":"El id que envió el partner al crearla","example":"ICF-10024","nullable":true,"type":"string"},"status":{"description":"Estado de la orden, en el vocabulario público del API. Programa contra este campo, no contra statusLabel.","example":"in_transit","type":"string"},"statusLabel":{"description":"Traducción legible del estado, en español. Es texto de presentación: puede cambiar de redacción sin previo aviso.","example":"Orden registrada","type":"string"},"sellerId":{"example":"65b0000000000000000000f1","type":"string"},"codAmount":{"description":"Monto a cobrar contra entrega. Lo calcula el servidor con los precios del catálogo; el partner nunca lo declara.","example":49.98,"type":"number"},"cod":{"description":"Contra entrega","example":true,"type":"boolean"},"shippingCost":{"description":"Costo de envío de esta orden, con las condiciones de tu cuenta. Es el monto que se usa para liquidarte la orden, y el que se te descuenta si no se entrega. Lo fija la paquetería al despachar: es null hasta que la orden se despacha.","example":3.5,"nullable":true,"type":"number"},"codCommissionAmount":{"description":"Comisión por cobro contra entrega que se aplicó al despachar la orden, con tu comisión preferencial si la tenés. Se descuenta solo si la orden se entrega y se cobra. Es null hasta el despacho, y también en las órdenes despachadas antes de que existiera este campo.","example":2,"nullable":true,"type":"number"},"codCommissionPercentage":{"description":"Porcentaje de esa comisión, como fracción (0.04 = 4 %). Es null en los mismos casos que codCommissionAmount.","example":0.04,"nullable":true,"type":"number"},"estimatedCodCommissionAmount":{"description":"Comisión por cobro contra entrega estimada al crear la orden, con la paquetería y el monto de ese momento. Sirve mientras la orden no se despacha; cuando codCommissionAmount tiene valor, usá ese.","example":2,"nullable":true,"type":"number"},"shipmentNumber":{"description":"Número de guía. Null hasta que la orden se despacha.","example":"BX-99120","nullable":true,"type":"string"},"trackingUrl":{"example":"https://track.goboxful.com/BX-99120","nullable":true,"type":"string"},"courier":{"allOf":[{"$ref":"#/components/schemas/IntegrationCourierDoc"}],"description":"Paquetera con la que quedó la orden.","nullable":true},"createdAt":{"example":"2026-07-28T00:00:00.000Z","format":"date-time","type":"string"},"updatedAt":{"example":"2026-07-28T12:31:04.118Z","format":"date-time","type":"string"},"requestedCourier":{"allOf":[{"$ref":"#/components/schemas/IntegrationRequestedCourierDoc"}],"description":"La paquetera que pediste y no se pudo usar, con el motivo. `null` cuando se respetó tu elección o cuando no pediste ninguna.","nullable":true}},"required":["id","orderNumber","externalOrderId","status","statusLabel","sellerId","codAmount","cod","shippingCost","codCommissionAmount","codCommissionPercentage","estimatedCodCommissionAmount","shipmentNumber","trackingUrl","courier","createdAt","updatedAt","requestedCourier"],"type":"object"},"IntegrationOrderCustomerDto":{"properties":{"name":{"type":"string"},"lastName":{"type":"string"},"phoneAreaCode":{"description":"Código de área sin el signo +","type":"string"},"phone":{"type":"string"},"email":{"type":"string"}},"required":["name","lastName","phoneAreaCode","phone"],"type":"object"},"IntegrationAddressLevelDto":{"properties":{"levelKey":{"description":"Clave del nivel, según address-config del país","type":"string"},"valueId":{"type":"string"}},"required":["levelKey","valueId"],"type":"object"},"IntegrationOrderShippingDto":{"properties":{"address":{"type":"string"},"referencePoint":{"type":"string"},"stateId":{"description":"Id de departamento, de GET /geo/states","type":"string"},"cityId":{"description":"Id de municipio, de GET /geo/states","type":"string"},"extraLevels":{"description":"Niveles adicionales según GET /geo/countries/:id/address-config. Hay países que exigen distrito.","items":{"$ref":"#/components/schemas/IntegrationAddressLevelDto"},"type":"array"},"latitude":{"description":"Latitud del cliente. Obligatoria en los países que la exigen (hoy Costa Rica): sin ella la orden entra a \"Verificar\" y no se puede despachar. Consultá requestCoordinatesFromCustomer en GET /geo/countries.","example":9.9355,"type":"number"},"longitude":{"description":"Longitud del cliente. Ver las notas de latitude: van juntas, una sola de las dos no cuenta.","example":-84.0912,"type":"number"},"instructions":{"type":"string"}},"required":["address","referencePoint","stateId","cityId"],"type":"object"},"IntegrationOrderItemDto":{"properties":{"catalogId":{"description":"Id del ítem de catálogo, o de la variante de catálogo si el producto es variable","type":"string"},"quantity":{"type":"number"},"unitPrice":{"description":"Precio de venta unitario para esta orden. Si se omite, se usa el precio del catálogo.","example":24.99,"type":"number"}},"required":["catalogId","quantity"],"type":"object"},"CreateIntegrationOrderDto":{"properties":{"externalOrderId":{"description":"Id de la orden en el sistema del partner. Es la llave de idempotencia: repetirlo devuelve la misma orden, no crea otra.","type":"string"},"customer":{"$ref":"#/components/schemas/IntegrationOrderCustomerDto"},"shipping":{"$ref":"#/components/schemas/IntegrationOrderShippingDto"},"items":{"items":{"$ref":"#/components/schemas/IntegrationOrderItemDto"},"type":"array"},"cod":{"description":"Contra entrega","type":"boolean"},"codAmount":{"description":"Total exacto a cobrar. Si se omite, se usa la suma de las líneas. Solo puede ser menor que esa suma, y por unos centavos.","example":43.99,"type":"number"},"courierId":{"description":"Si se omite, Drop resuelve la paquetera por defecto del país","type":"string"},"note":{"type":"string"},"confirmForDispatch":{"default":true,"description":"Igual que la app del dropshipper, por defecto la orden nace confirmada","type":"boolean"}},"required":["externalOrderId","customer","shipping","items","cod"],"type":"object"},"IntegrationOrderDoc":{"properties":{"id":{"example":"65b000000000000000000301","type":"string"},"orderNumber":{"description":"Número visible de la orden","example":"DR-10233","type":"string"},"externalOrderId":{"description":"El id que envió el partner al crearla","example":"ICF-10024","nullable":true,"type":"string"},"status":{"description":"Estado de la orden, en el vocabulario público del API. Programa contra este campo, no contra statusLabel.","example":"in_transit","type":"string"},"statusLabel":{"description":"Traducción legible del estado, en español. Es texto de presentación: puede cambiar de redacción sin previo aviso.","example":"Orden registrada","type":"string"},"sellerId":{"example":"65b0000000000000000000f1","type":"string"},"codAmount":{"description":"Monto a cobrar contra entrega. Lo calcula el servidor con los precios del catálogo; el partner nunca lo declara.","example":49.98,"type":"number"},"cod":{"description":"Contra entrega","example":true,"type":"boolean"},"shippingCost":{"description":"Costo de envío de esta orden, con las condiciones de tu cuenta. Es el monto que se usa para liquidarte la orden, y el que se te descuenta si no se entrega. Lo fija la paquetería al despachar: es null hasta que la orden se despacha.","example":3.5,"nullable":true,"type":"number"},"codCommissionAmount":{"description":"Comisión por cobro contra entrega que se aplicó al despachar la orden, con tu comisión preferencial si la tenés. Se descuenta solo si la orden se entrega y se cobra. Es null hasta el despacho, y también en las órdenes despachadas antes de que existiera este campo.","example":2,"nullable":true,"type":"number"},"codCommissionPercentage":{"description":"Porcentaje de esa comisión, como fracción (0.04 = 4 %). Es null en los mismos casos que codCommissionAmount.","example":0.04,"nullable":true,"type":"number"},"estimatedCodCommissionAmount":{"description":"Comisión por cobro contra entrega estimada al crear la orden, con la paquetería y el monto de ese momento. Sirve mientras la orden no se despacha; cuando codCommissionAmount tiene valor, usá ese.","example":2,"nullable":true,"type":"number"},"shipmentNumber":{"description":"Número de guía. Null hasta que la orden se despacha.","example":"BX-99120","nullable":true,"type":"string"},"trackingUrl":{"example":"https://track.goboxful.com/BX-99120","nullable":true,"type":"string"},"courier":{"allOf":[{"$ref":"#/components/schemas/IntegrationCourierDoc"}],"description":"Paquetera con la que quedó la orden.","nullable":true},"createdAt":{"example":"2026-07-28T00:00:00.000Z","format":"date-time","type":"string"},"updatedAt":{"example":"2026-07-28T12:31:04.118Z","format":"date-time","type":"string"}},"required":["id","orderNumber","externalOrderId","status","statusLabel","sellerId","codAmount","cod","shippingCost","codCommissionAmount","codCommissionPercentage","estimatedCodCommissionAmount","shipmentNumber","trackingUrl","courier","createdAt","updatedAt"],"type":"object"}},"securitySchemes":{"X-Drop-Key":{"in":"header","name":"X-Drop-Key","type":"apiKey"},"X-Drop-Nonce":{"in":"header","name":"X-Drop-Nonce","type":"apiKey"},"X-Drop-Signature":{"in":"header","name":"X-Drop-Signature","type":"apiKey"},"X-Drop-Timestamp":{"in":"header","name":"X-Drop-Timestamp","type":"apiKey"}}},"info":{"contact":{},"description":"API para partners externos. Todas las peticiones se firman con HMAC-SHA256. La guía de integración (firma, ejemplos y webhooks) vive en el portal de documentación.","title":"Drop Integrations API","version":"1.0"},"openapi":"3.0.0","paths":{"/integrations/v1/ping":{"get":{"description":"Devuelve la identidad y los scopes de la credencial usada. Sirve para validar la implementación de la firma HMAC antes de consumir endpoints de datos.","operationId":"ping","parameters":[],"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"data":{"$ref":"#/components/schemas/IntegrationPingDoc"}},"required":["data"],"type":"object"}}},"description":"Identidad y permisos de la credencial"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntegrationErrorDoc"}}},"description":"UNAUTHORIZED · INVALID_SIGNATURE · TIMESTAMP_OUT_OF_RANGE · REPLAYED_NONCE"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntegrationErrorDoc"}}},"description":"FORBIDDEN_SCOPE — la credencial no tiene el scope requerido"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntegrationErrorDoc"}}},"description":"RATE_LIMITED — se excedió la cuota. Respeta el header Retry-After."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntegrationErrorDoc"}}},"description":"INTERNAL_ERROR"}},"security":[{"X-Drop-Key":[]},{"X-Drop-Timestamp":[]},{"X-Drop-Nonce":[]},{"X-Drop-Signature":[]}],"summary":"Verificar credenciales","tags":["Ping"]}},"/integrations/v1/products":{"get":{"description":"Ítems que agregaste a tu tienda. El id devuelto es el identificador canónico que se usa para consultar el detalle y para crear órdenes.","operationId":"listProducts","parameters":[{"in":"query","name":"page","required":false,"schema":{"default":1,"type":"number"}},{"in":"query","name":"limit","required":false,"schema":{"default":20,"maximum":100,"type":"number"}},{"description":"Filtra por proveedor","in":"query","name":"vendorId","required":false,"schema":{"type":"string"}},{"in":"query","name":"active","required":false,"schema":{"default":true,"type":"boolean"}},{"description":"Busca por nombre o SKU","in":"query","name":"search","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"data":{"items":{"$ref":"#/components/schemas/IntegrationProductDoc"},"type":"array"},"meta":{"$ref":"#/components/schemas/PaginationMetaDoc"}},"required":["data","meta"],"type":"object"}}},"description":"Página de ítems de catálogo"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntegrationErrorDoc"}}},"description":"UNAUTHORIZED · INVALID_SIGNATURE · TIMESTAMP_OUT_OF_RANGE · REPLAYED_NONCE"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntegrationErrorDoc"}}},"description":"FORBIDDEN_SCOPE — la credencial no tiene el scope requerido"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntegrationErrorDoc"}}},"description":"RATE_LIMITED — se excedió la cuota. Respeta el header Retry-After."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntegrationErrorDoc"}}},"description":"INTERNAL_ERROR"}},"security":[{"X-Drop-Key":[]},{"X-Drop-Timestamp":[]},{"X-Drop-Nonce":[]},{"X-Drop-Signature":[]}],"summary":"Listar productos de catálogo","tags":["Catálogo"]}},"/integrations/v1/products/stock":{"get":{"description":"Acepta ids de ítem de catálogo y de variante mezclados. Los ids inexistentes se omiten del resultado.","operationId":"getStock","parameters":[{"description":"Ids de ítems de catálogo o de variantes de catálogo","in":"query","name":"ids","required":true,"schema":{"items":{"type":"string"},"type":"array"}}],"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"data":{"items":{"$ref":"#/components/schemas/IntegrationStockDoc"},"type":"array"}},"required":["data"],"type":"object"}}},"description":"Stock de los ids solicitados. Los inexistentes se omiten."},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntegrationErrorDoc"}}},"description":"VALIDATION_ERROR — ids ausente, vacío o con más de 100 entradas"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntegrationErrorDoc"}}},"description":"UNAUTHORIZED · INVALID_SIGNATURE · TIMESTAMP_OUT_OF_RANGE · REPLAYED_NONCE"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntegrationErrorDoc"}}},"description":"FORBIDDEN_SCOPE — la credencial no tiene el scope requerido"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntegrationErrorDoc"}}},"description":"RATE_LIMITED — se excedió la cuota. Respeta el header Retry-After."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntegrationErrorDoc"}}},"description":"INTERNAL_ERROR"}},"security":[{"X-Drop-Key":[]},{"X-Drop-Timestamp":[]},{"X-Drop-Nonce":[]},{"X-Drop-Signature":[]}],"summary":"Consultar stock en lote","tags":["Catálogo"]}},"/integrations/v1/products/{id}":{"get":{"operationId":"getProduct","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"data":{"$ref":"#/components/schemas/IntegrationProductDoc"}},"required":["data"],"type":"object"}}},"description":"El ítem con sus variantes embebidas"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntegrationErrorDoc"}}},"description":"UNAUTHORIZED · INVALID_SIGNATURE · TIMESTAMP_OUT_OF_RANGE · REPLAYED_NONCE"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntegrationErrorDoc"}}},"description":"FORBIDDEN_SCOPE — la credencial no tiene el scope requerido"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntegrationErrorDoc"}}},"description":"NOT_FOUND — el ítem no existe, fue dado de baja o no está en tu tienda"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntegrationErrorDoc"}}},"description":"RATE_LIMITED — se excedió la cuota. Respeta el header Retry-After."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntegrationErrorDoc"}}},"description":"INTERNAL_ERROR"}},"security":[{"X-Drop-Key":[]},{"X-Drop-Timestamp":[]},{"X-Drop-Nonce":[]},{"X-Drop-Signature":[]}],"summary":"Obtener un producto por id","tags":["Catálogo"]}},"/integrations/v1/geo/countries":{"get":{"description":"Además de la moneda, devuelve requestCoordinatesFromCustomer: si es true hay que mandar shipping.latitude y shipping.longitude al crear la orden.","operationId":"listCountries","parameters":[],"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"data":{"items":{"$ref":"#/components/schemas/IntegrationCountryDoc"},"type":"array"}},"required":["data"],"type":"object"}}},"description":""},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntegrationErrorDoc"}}},"description":"UNAUTHORIZED · INVALID_SIGNATURE · TIMESTAMP_OUT_OF_RANGE · REPLAYED_NONCE"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntegrationErrorDoc"}}},"description":"FORBIDDEN_SCOPE — la credencial no tiene el scope requerido"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntegrationErrorDoc"}}},"description":"RATE_LIMITED — se excedió la cuota. Respeta el header Retry-After."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntegrationErrorDoc"}}},"description":"INTERNAL_ERROR"}},"security":[{"X-Drop-Key":[]},{"X-Drop-Timestamp":[]},{"X-Drop-Nonce":[]},{"X-Drop-Signature":[]}],"summary":"Listar países disponibles","tags":["Geografía"]}},"/integrations/v1/geo/states":{"get":{"description":"Los ids devueltos son exactamente los que POST /orders espera en shipping.stateId y shipping.cityId.","operationId":"listStates","parameters":[{"description":"Id del país sobre el que se consulta","in":"query","name":"countryId","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"data":{"items":{"$ref":"#/components/schemas/IntegrationStateDoc"},"type":"array"}},"required":["data"],"type":"object"}}},"description":"Departamentos con sus municipios anidados"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntegrationErrorDoc"}}},"description":"UNAUTHORIZED · INVALID_SIGNATURE · TIMESTAMP_OUT_OF_RANGE · REPLAYED_NONCE"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntegrationErrorDoc"}}},"description":"FORBIDDEN_SCOPE — la credencial no tiene el scope requerido"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntegrationErrorDoc"}}},"description":"RATE_LIMITED — se excedió la cuota. Respeta el header Retry-After."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntegrationErrorDoc"}}},"description":"INTERNAL_ERROR"}},"security":[{"X-Drop-Key":[]},{"X-Drop-Timestamp":[]},{"X-Drop-Nonce":[]},{"X-Drop-Signature":[]}],"summary":"Listar departamentos con sus municipios","tags":["Geografía"]}},"/integrations/v1/geo/countries/{countryId}/address-config":{"get":{"description":"Qué niveles de dirección existen en el país y cuáles son obligatorios. Hay países que exigen distrito además de departamento y municipio.","operationId":"getAddressConfig","parameters":[{"in":"path","name":"countryId","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"data":{"$ref":"#/components/schemas/IntegrationCountryAddressConfigDoc"}},"required":["data"],"type":"object"}}},"description":"Niveles de dirección del país y cuáles son obligatorios. La forma la define country-config de Boxful."},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntegrationErrorDoc"}}},"description":"UNAUTHORIZED · INVALID_SIGNATURE · TIMESTAMP_OUT_OF_RANGE · REPLAYED_NONCE"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntegrationErrorDoc"}}},"description":"FORBIDDEN_SCOPE — la credencial no tiene el scope requerido"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntegrationErrorDoc"}}},"description":"RATE_LIMITED — se excedió la cuota. Respeta el header Retry-After."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntegrationErrorDoc"}}},"description":"INTERNAL_ERROR"}},"security":[{"X-Drop-Key":[]},{"X-Drop-Timestamp":[]},{"X-Drop-Nonce":[]},{"X-Drop-Signature":[]}],"summary":"Configuración de dirección del país","tags":["Geografía"]}},"/integrations/v1/couriers/available":{"get":{"description":"Las que de verdad pueden llevar esa orden, con tus comisiones aplicadas. Es lo que conviene ofrecerle a tu usuario en vez de la lista del país, que incluye paqueterías que no llegan al destino.","operationId":"listAvailableCouriers","parameters":[{"description":"Ítem de catálogo de la orden (o la variante). De él se deriva la bodega de origen.","in":"query","name":"catalogId","required":true,"schema":{"type":"string"}},{"description":"Ciudad de entrega, de GET /geo/states","in":"query","name":"cityId","required":true,"schema":{"type":"string"}},{"description":"Ids de los niveles de dirección extra del país, cuando los exige. Mandalos como clave repetida.","in":"query","name":"extraLevelValueIds","required":false,"schema":{"items":{"type":"string"},"type":"array"}}],"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"data":{"$ref":"#/components/schemas/IntegrationAvailableCouriersDoc"}},"required":["data"],"type":"object"}}},"description":"Paqueterías con cobertura confirmada. unverifiedCount son las que no se pudieron evaluar: una lista vacía con unverifiedCount mayor a 0 no significa que ninguna cubra el destino."},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntegrationErrorDoc"}}},"description":"UNAUTHORIZED · INVALID_SIGNATURE · TIMESTAMP_OUT_OF_RANGE · REPLAYED_NONCE"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntegrationErrorDoc"}}},"description":"FORBIDDEN_SCOPE — la credencial no tiene el scope requerido"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntegrationErrorDoc"}}},"description":"RATE_LIMITED — se excedió la cuota. Respeta el header Retry-After."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntegrationErrorDoc"}}},"description":"INTERNAL_ERROR"}},"security":[{"X-Drop-Key":[]},{"X-Drop-Timestamp":[]},{"X-Drop-Nonce":[]},{"X-Drop-Signature":[]}],"summary":"Paqueterías que cubren una ruta","tags":["Paqueterías"]}},"/integrations/v1/couriers":{"get":{"operationId":"listCouriers","parameters":[{"description":"Id del país sobre el que se consulta","in":"query","name":"countryId","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"data":{"items":{"$ref":"#/components/schemas/IntegrationCountryCourierDoc"},"type":"array"}},"required":["data"],"type":"object"}}},"description":"Todas las paqueteras del país. El courierId es opcional al crear la orden."},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntegrationErrorDoc"}}},"description":"UNAUTHORIZED · INVALID_SIGNATURE · TIMESTAMP_OUT_OF_RANGE · REPLAYED_NONCE"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntegrationErrorDoc"}}},"description":"FORBIDDEN_SCOPE — la credencial no tiene el scope requerido"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntegrationErrorDoc"}}},"description":"RATE_LIMITED — se excedió la cuota. Respeta el header Retry-After."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntegrationErrorDoc"}}},"description":"INTERNAL_ERROR"}},"security":[{"X-Drop-Key":[]},{"X-Drop-Timestamp":[]},{"X-Drop-Nonce":[]},{"X-Drop-Signature":[]}],"summary":"Listar paqueteras disponibles del país","tags":["Paqueterías"]}},"/integrations/v1/orders":{"get":{"description":"Solo las órdenes que este partner originó. Contraparte de los webhooks: permite reconciliar cuando se pierde una entrega.","operationId":"listOrders","parameters":[{"in":"query","name":"page","required":false,"schema":{"default":1,"type":"number"}},{"in":"query","name":"limit","required":false,"schema":{"default":20,"maximum":100,"type":"number"}},{"description":"Filtra por estado, en el vocabulario público del API","in":"query","name":"status","required":false,"schema":{"enum":["registered_in_courier","recollected","inroute","delivered","cancelled_in_boxful","issue","not_delivered","returned_to_warehouse","not_recollected","in_locker","in_agency","registered","pending_correction","rejected","cancelled","fulfilled","created"],"type":"string"}},{"description":"Solo órdenes modificadas desde esta fecha","in":"query","name":"updatedSince","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"data":{"items":{"$ref":"#/components/schemas/IntegrationOrderDoc"},"type":"array"},"meta":{"$ref":"#/components/schemas/PaginationMetaDoc"}},"required":["data","meta"],"type":"object"}}},"description":"Página de órdenes creadas por este partner"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntegrationErrorDoc"}}},"description":"UNAUTHORIZED · INVALID_SIGNATURE · TIMESTAMP_OUT_OF_RANGE · REPLAYED_NONCE"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntegrationErrorDoc"}}},"description":"FORBIDDEN_SCOPE — la credencial no tiene el scope requerido"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntegrationErrorDoc"}}},"description":"RATE_LIMITED — se excedió la cuota. Respeta el header Retry-After."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntegrationErrorDoc"}}},"description":"INTERNAL_ERROR"}},"security":[{"X-Drop-Key":[]},{"X-Drop-Timestamp":[]},{"X-Drop-Nonce":[]},{"X-Drop-Signature":[]}],"summary":"Listar órdenes","tags":["Órdenes"]},"post":{"description":"El sellerId no se envía: se deriva de los catalogId de las líneas, que deben pertenecer todas al mismo dropshipper. El monto a cobrar lo calcula Drop. Repetir el mismo externalOrderId devuelve la orden ya creada.","operationId":"createOrder","parameters":[],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateIntegrationOrderDto"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"properties":{"data":{"$ref":"#/components/schemas/IntegrationOrderCreatedDoc"}},"required":["data"],"type":"object"}}},"description":"Orden creada, o la existente si el externalOrderId se repite"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntegrationErrorDoc"}}},"description":"VALIDATION_ERROR — cuerpo inválido, campo desconocido o ítem inactivo"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntegrationErrorDoc"}}},"description":"UNAUTHORIZED · INVALID_SIGNATURE · TIMESTAMP_OUT_OF_RANGE · REPLAYED_NONCE"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntegrationErrorDoc"}}},"description":"FORBIDDEN_SCOPE — la credencial no tiene el scope requerido"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntegrationErrorDoc"}}},"description":"NOT_FOUND — algún catalogId no existe"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntegrationErrorDoc"}}},"description":"Ya hay otra petición creando esa misma orden. Reintenta en unos segundos."},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntegrationErrorDoc"}}},"description":"MIXED_SELLERS (líneas de distintos dropshippers) · IDEMPOTENCY_KEY_REUSED (mismo externalOrderId con otro cuerpo)"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntegrationErrorDoc"}}},"description":"RATE_LIMITED — se excedió la cuota. Respeta el header Retry-After."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntegrationErrorDoc"}}},"description":"INTERNAL_ERROR"}},"security":[{"X-Drop-Key":[]},{"X-Drop-Timestamp":[]},{"X-Drop-Nonce":[]},{"X-Drop-Signature":[]}],"summary":"Crear una orden","tags":["Órdenes"]}},"/integrations/v1/orders/{id}":{"get":{"description":"Solo las órdenes que este partner originó. Una orden ajena responde 404, no 403, para no confirmar que ese id existe.","operationId":"getOrder","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"data":{"$ref":"#/components/schemas/IntegrationOrderDoc"}},"required":["data"],"type":"object"}}},"description":""},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntegrationErrorDoc"}}},"description":"UNAUTHORIZED · INVALID_SIGNATURE · TIMESTAMP_OUT_OF_RANGE · REPLAYED_NONCE"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntegrationErrorDoc"}}},"description":"FORBIDDEN_SCOPE — la credencial no tiene el scope requerido"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntegrationErrorDoc"}}},"description":"NOT_FOUND — la orden no existe o pertenece a otro partner. No se distinguen los dos casos a propósito."},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntegrationErrorDoc"}}},"description":"RATE_LIMITED — se excedió la cuota. Respeta el header Retry-After."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntegrationErrorDoc"}}},"description":"INTERNAL_ERROR"}},"security":[{"X-Drop-Key":[]},{"X-Drop-Timestamp":[]},{"X-Drop-Nonce":[]},{"X-Drop-Signature":[]}],"summary":"Consultar una orden por id","tags":["Órdenes"]}},"/integrations/v1/orders/{id}/cancel":{"patch":{"description":"Solo las órdenes que este partner originó, y solo mientras están registradas o pendientes de corrección y ningún proveedor las despachó: las mismas reglas que la app del dropshipper. Cancelar una orden ya cancelada la devuelve sin cambios. La cancelación se notifica por el webhook order.status_changed.","operationId":"cancelOrder","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"data":{"$ref":"#/components/schemas/IntegrationOrderDoc"}},"required":["data"],"type":"object"}}},"description":"Orden cancelada, o la misma orden si ya lo estaba"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntegrationErrorDoc"}}},"description":"UNAUTHORIZED · INVALID_SIGNATURE · TIMESTAMP_OUT_OF_RANGE · REPLAYED_NONCE"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntegrationErrorDoc"}}},"description":"FORBIDDEN_SCOPE — la credencial no tiene el scope requerido"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntegrationErrorDoc"}}},"description":"NOT_FOUND — la orden no existe o pertenece a otro partner. No se distinguen los dos casos a propósito."},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntegrationErrorDoc"}}},"description":"ORDER_NOT_CANCELLABLE — la orden ya avanzó o un proveedor ya la despachó. No es reintentable."},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntegrationErrorDoc"}}},"description":"RATE_LIMITED — se excedió la cuota. Respeta el header Retry-After."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntegrationErrorDoc"}}},"description":"INTERNAL_ERROR"}},"security":[{"X-Drop-Key":[]},{"X-Drop-Timestamp":[]},{"X-Drop-Nonce":[]},{"X-Drop-Signature":[]}],"summary":"Cancelar una orden","tags":["Órdenes"]}}},"servers":[{"description":"Producción","url":"https://api.soydrop.com"},{"description":"QA","url":"https://qa-api.soydrop.com"},{"description":"Desarrollo","url":"https://devapi.soydrop.com"}],"tags":[{"description":"Verificación de credenciales y hora del servidor","name":"Ping"},{"description":"Productos, variantes y existencias","name":"Catálogo"},{"description":"Países, departamentos, municipios y configuración de dirección","name":"Geografía"},{"description":"Paqueterías del país y cobertura por ruta","name":"Paqueterías"},{"description":"Creación y consulta de órdenes","name":"Órdenes"}]}