Guías

Manejo de errores

El cuerpo dice qué pasó. Descartarlo es el error más caro que podés cometer contra esta API.

  1. 1

    Leé el cuerpo, no solo el código

    Un 400 de validación trae `issues` con el campo exacto que se rechazó. Sin eso, un error de tipo en un campo es indistinguible de un problema de permisos.

    javascript
    const res = await fetch(url, options);
    
    if (!res.ok) {
      const detail = await res.json().catch(() => ({}));
    
      if (detail.issues) {
        for (const i of detail.issues) console.error(`${i.path}: ${i.message}`);
      }
    
      throw new Error(`${detail.error ?? res.status}: ${detail.message ?? ""}`);
    }
  2. 2

    Respetá Retry-After en un 429

    Reintentar en bucle contra un límite de tasa solo alarga el bloqueo.

    javascript
    if (res.status === 429) {
      const wait = Number(res.headers.get("Retry-After") ?? 60);
      await new Promise((r) => setTimeout(r, wait * 1000));
    }

Un reintento puede duplicar. Las escrituras no son idempotentes: si un POST se corta después de crear y lo reintentás, vas a tener dos recursos. Guardá el id que devuelve la primera respuesta y verificá antes de reintentar.