Saltar al contenido
Menú de documentos

API REST

Errores

La forma de los errores, cada código de error y cómo reintentar de forma segura.

Los errores usan códigos HTTP normales y un cuerpo JSON con un code estable que puede comprobar en su código, y un message escrito para personas.

json
{
  "error": {
    "code": "validation_error",
    "message": "Some fields are invalid.",
    "issues": [
      {
        "path": "products.0.listPrice",
        "message": "Too small: expected number to be >=0"
      }
    ]
  }
}

issues solo está allí para validation_error. Cada problema tiene path que apunta al campo, con posiciones de lista contadas desde 0.

Códigos de errorEnlace a esta sección#

EstadoCódigoQué ocurrióQué hacer
400validation_errorUn parámetro de consulta o campo del cuerpo está faltando o es inválido.Corrija los campos listados en issues.
400invalid_jsonEl cuerpo no es JSON válido.Envíe JSON con Content-Type: application/json.
400invalid_requestLa solicitud es válida pero no está permitida en este momento, por ejemplo, marcar un nuevo pedido como completado.Lea message; no intente de nuevo sin cambios.
401unauthorizedClave de API faltante, desconocida o revocada.Compruebe el encabezado Authorization: Bearer y que la clave aún esté activa.
401key_owner_removedLa persona que creó la clave ya no está en el espacio de trabajo.Cree una nueva clave desde alguien que aún tenga acceso.
403insufficient_scopeUna clave de solo lectura intentó escribir.Use una clave de lectura y escritura.
403read_onlyLas escrituras de API no están disponibles en el plan Free actual del espacio de trabajo.El propietario gestiona el plan en el sitio web. Las claves existentes aún leen.
403forbiddenLa persona que creó la clave no tiene permiso para hacer eso.Pida a un propietario del espacio de trabajo, o cree una clave desde alguien con ese permiso.
403workspace_suspendedTradeCatalog ha suspendido el espacio de trabajo. El propietario ha recibido un correo electrónico con la razón.Las claves funcionan nuevamente cuando se levanta la suspensión.
404not_foundNo existe ese punto de conexión, o no existe ese producto, cliente, pedido o cambio de precio en este espacio de trabajo.Verifique el id, SKU o código de cuenta.
405method_not_allowedLa ruta existe pero no con este método.Use un método del encabezado Allow.
429rate_limitedMás de 120 solicitudes por minuto con esta clave.Espere Retry-After segundos (60), luego intente de nuevo.
500internal_errorAlgo salió mal por nuestra parte.Vuelva a intentarlo con backoff. Si sigue ocurriendo, contacte al soporte.

Los IDs de otro espacio de trabajo siempre devuelven 404 not_found, nunca datos de otra persona.

ReintentoEnlace a esta sección#

Vuelva a intentar las respuestas 429 y 5xx con backoff. No intente nuevamente otras respuestas 4xx: fallarán de la misma manera.

Todos los escritos de la API son seguros para repetir: PUT coincide filas por SKU o código de cuenta, y PATCH /orders/{id} falla con invalid_request si el pedido ya ha avanzado. Por lo tanto, un reintento después de un tiempo de espera de red no duplicará nada.

js
async function api(path, init = {}, attempt = 0) {
  const res = await fetch(`https://tradecatalog.app/api/v1${path}`, {
    ...init,
    headers: {
      Authorization: `Bearer ${process.env.TRADECATALOG_API_KEY}`,
      'Content-Type': 'application/json',
      ...init.headers,
    },
  })
  if ((res.status === 429 || res.status >= 500) && attempt < 5) {
    const wait = Number(res.headers.get('Retry-After')) || 2 ** attempt
    await new Promise((resolve) => setTimeout(resolve, wait * 1000))
    return api(path, init, attempt + 1)
  }
  const body = await res.json()
  if (!res.ok) {
    const error = new Error(`${body.error.code}: ${body.error.message}`)
    error.status = res.status
    error.code = body.error.code
    error.issues = body.error.issues
    throw error
  }
  return body
}

Mensajes comunesEnlace a esta sección#

SolicitudEstado y mensaje
GET /prices con un SKU desconocido404 “No hay producto con SKU HX-9999”
Cualquier endpoint con un cliente desconocido404 “Cliente OAK99 no encontrado”
PATCH /orders/{id} nuevo → completado400 “Un pedido recibido no puede marcarse como completado”
PATCH /orders/{id} a cancelado sin nota400 “Proporcione un motivo para la cancelación”
PUT /products con el mismo SKU dos veces400 error de validación “SKU duplicado hx-8510”