Saltar al contenido
Docs

Referencia

Crear wallet de cobro

POST/v1/partner/walletswallets:write

Genera la wallet de cobro de un usuario del partner. Idempotente: si ya tiene wallet, devuelve la que hay. Exige Idempotency-Key.

Propósito

Crea una wallet de cobro (blockchain Base, proveedor Crossmint) para un usuario que ya diste de alta con POST /users. La wallet es donde se reciben los pagos de los links de pago.

Flujo recomendado

  1. Crea el usuario → POST /users
  2. Crea su wallet → este endpoint
  3. Genera links de pago → POST /payment-links

Campos del request

CampoTipoRequeridoDescripción
userPublicIdstring (ULID)El publicId del usuario devuelto por POST /users.

Comportamiento especial

  • Idempotente por diseño: un usuario tiene como máximo una wallet de cobro. Si llamas de nuevo, devolvemos la existente sin crear otra.
  • status: PENDING no es un error. Significa que el proveedor (Crossmint) no respondió a tiempo. Un proceso automático reintenta cada 15 minutos hasta resolverla. No la crees de nuevo.
  • address: null aparece cuando status es PENDING. Una vez resuelta, la dirección se llena automáticamente.

Errores comunes

CódigoErrorCausaSolución
404WALLET_OWNER_NOT_FOUNDEl usuario no existe o no es tuyoVerifica el userPublicId
409WALLET_PROVISION_UNCONFIRMEDProveedor no confirmó (queda PENDING)Espera — se resuelve automáticamente
500INTERNAL_SERVER_ERRORError inesperadoReintenta. Reporta requestId si persiste

Cabeceras

Idempotency-Keyrequerida
Clave única de la intención, 8-128 caracteres (un UUID v4 sirve). Se genera UNA vez por intención del usuario y se reutiliza en cada reintento: mismo cuerpo ⇒ misma respuesta con `Idempotent-Replayed: true`, sin repetir el efecto. La respuesta se guarda 24 h.

Cuerpo de la petición

  • userPublicIdstringrequerido

    Ejemplo: "01JKX7PEND0000000000000036"

Respuesta 201

El proveedor confirmó: ACTIVE y con dirección. Repetir la llamada devuelve esta misma wallet

  • addressstringpuede venir null

    admite null

    Ejemplo: "0xabcdef1234567890abcdef1234567890abcdef12"

  • chainstring

    Ejemplo: "BASE"

  • createdAtstring

    Ejemplo: "2026-09-04T15:04:05.000Z"

  • networkstring

    Ejemplo: "MAINNET"

  • Ejemplo: "01JKX7PEND0000000000000036"

  • Ejemplo: "CROSSMINT"

  • publicIdstring

    Ejemplo: "01JKX7MNDR0000000000000037"

  • purposestring

    Ejemplo: "PAYMENTS"

  • statusenum

    PENDINGACTIVEFAILEDDISABLEDMIGRATING

    Ejemplo: "ACTIVE"

Errores

EstadoCódigosCuándo
400IDEMPOTENCY_KEY_REQUIREDFalta la cabecera `Idempotency-Key` o no mide entre 8 y 128 caracteres
401sin codeSin x-api-key válida
403sin codeLa llave no tiene el scope wallets:write
404WALLET_OWNER_NOT_FOUNDEl usuario no existe o no es de este partner
409IDEMPOTENCY_IN_FLIGHTWALLET_PROVISION_UNCONFIRMEDEl proveedor no contestó: la wallet queda PENDING y un job la termina; NO se reintenta creando otra Hay una petición en curso con esa misma clave: espera y reintenta
422IDEMPOTENCY_PAYLOAD_MISMATCHIDEMPOTENCY_ROUTE_MISMATCHLa clave ya se usó con OTRO cuerpo o en OTRA ruta: genera una nueva
429RATE_LIMITEDLimite de uso: 60 por minuto por credencial. Respeta la cabecera `Retry-After`.
500sin codeError interno inesperado. Reintenta la petición. Si persiste, reporta el `requestId` al equipo de soporte.