Referencia de APIPayment methods

Payment methods

/v1/payment-methods — métodos de pago tokenizados sobre tu cuenta de Wompi. Ver también el concepto Método de pago.

El objeto PaymentMethod

{
  "id": "pm_01HZXK7QJ5M8Z9X2R3TVQ7A1B2",
  "customer_id": "cus_01HZXK7QJ5M8Z9X2R3TVQ7A1B2",
  "type": "CARD",
  "brand": "VISA",
  "last4": "4242",
  "exp_month": 12,
  "exp_year": 2029,
  "is_default": true,
  "state": "available",
  "created_at": "2026-08-24T15:00:00Z"
}
CampoTipo
idstring
customer_idstring
typestring (CARD)
brandstring
last4string
exp_monthinteger
exp_yearinteger
is_defaultboolean
statestring (pending | available | verification_pending)
created_atdatetime

Obtener configuración de tokenización

GET /v1/payment-methods/setup

Devuelve la llave pública de Wompi de tu cuenta, los acceptance tokens y la URL de tokenización. Ningún secreto sale del servidor.

curl
curl https://api.rekurra.dev/v1/payment-methods/setup \
  -H "Authorization: Bearer rk_live_XXXXXXXXXXXXXXXXXXXXXXXX"
JavaScript (fetch)
const res = await fetch("https://api.rekurra.dev/v1/payment-methods/setup", {
  headers: { Authorization: "Bearer rk_live_XXXXXXXXXXXXXXXXXXXXXXXX" },
});
const setup = await res.json();
Python (requests)
import requests
 
res = requests.get(
    "https://api.rekurra.dev/v1/payment-methods/setup",
    headers={"Authorization": "Bearer rk_live_XXXXXXXXXXXXXXXXXXXXXXXX"},
)
setup = res.json()

Response — 200 OK

{
  "public_key": "pub_prod_XXXXXXXXXXXXXXXXXXXX",
  "acceptance_token": "eyJhbGciOi...",
  "tokenization_url": "https://production.wompi.co/v1/tokens/cards"
}

Crear un método de pago

POST /v1/payment-methods

Request body

{
  "customer_id": "cus_01HZXK7QJ5M8Z9X2R3TVQ7A1B2",
  "type": "CARD",
  "token": "tok_test_1234_abcd",
  "acceptance_token": "eyJhbGciOi...",
  "accept_personal_auth": "eyJhbGciOi...",
  "set_default": true
}
CampoRequerido
customer_id
typeSí (CARD)
tokenSí — token devuelto por Wompi al tokenizar la tarjeta
acceptance_token
accept_personal_auth
set_defaultNo
curl
curl -X POST https://api.rekurra.dev/v1/payment-methods \
  -H "Authorization: Bearer rk_live_XXXXXXXXXXXXXXXXXXXXXXXX" \
  -H "Content-Type: application/json" \
  -d '{
    "customer_id": "cus_01HZXK7QJ5M8Z9X2R3TVQ7A1B2",
    "type": "CARD",
    "token": "tok_test_1234_abcd",
    "acceptance_token": "eyJhbGciOi...",
    "accept_personal_auth": "eyJhbGciOi...",
    "set_default": true
  }'
JavaScript (fetch)
const res = await fetch("https://api.rekurra.dev/v1/payment-methods", {
  method: "POST",
  headers: {
    Authorization: "Bearer rk_live_XXXXXXXXXXXXXXXXXXXXXXXX",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    customer_id: "cus_01HZXK7QJ5M8Z9X2R3TVQ7A1B2",
    type: "CARD",
    token: "tok_test_1234_abcd",
    acceptance_token: "eyJhbGciOi...",
    accept_personal_auth: "eyJhbGciOi...",
    set_default: true,
  }),
});
const paymentMethod = await res.json();
Python (requests)
import requests
 
res = requests.post(
    "https://api.rekurra.dev/v1/payment-methods",
    headers={
        "Authorization": "Bearer rk_live_XXXXXXXXXXXXXXXXXXXXXXXX",
        "Content-Type": "application/json",
    },
    json={
        "customer_id": "cus_01HZXK7QJ5M8Z9X2R3TVQ7A1B2",
        "type": "CARD",
        "token": "tok_test_1234_abcd",
        "acceptance_token": "eyJhbGciOi...",
        "accept_personal_auth": "eyJhbGciOi...",
        "set_default": True,
    },
)
payment_method = res.json()

Response

  • 201 CreatedPaymentMethod con state: available.
  • 202 AcceptedPaymentMethod con state: verification_pending (3DS pendiente).

Errores posibles

Statuserror.typeCausa
400invalid_requestCampos faltantes o token mal formado
404invalid_requestcustomer_id no existe
422wompi_errorWompi rechazó la verificación (micro-cobro fallido)

Listar métodos de pago

GET /v1/payment-methods

Filtro opcional ?customer_id=, más paginación estándar.

curl
curl "https://api.rekurra.dev/v1/payment-methods?customer_id=cus_01HZXK7QJ5M8Z9X2R3TVQ7A1B2" \
  -H "Authorization: Bearer rk_live_XXXXXXXXXXXXXXXXXXXXXXXX"
JavaScript (fetch)
const res = await fetch(
  "https://api.rekurra.dev/v1/payment-methods?customer_id=cus_01HZXK7QJ5M8Z9X2R3TVQ7A1B2",
  { headers: { Authorization: "Bearer rk_live_XXXXXXXXXXXXXXXXXXXXXXXX" } }
);
const { data } = await res.json();
Python (requests)
import requests
 
res = requests.get(
    "https://api.rekurra.dev/v1/payment-methods",
    params={"customer_id": "cus_01HZXK7QJ5M8Z9X2R3TVQ7A1B2"},
    headers={"Authorization": "Bearer rk_live_XXXXXXXXXXXXXXXXXXXXXXXX"},
)
body = res.json()

Obtener un método de pago

GET /v1/payment-methods/{id}

curl
curl https://api.rekurra.dev/v1/payment-methods/pm_01HZXK7QJ5M8Z9X2R3TVQ7A1B2 \
  -H "Authorization: Bearer rk_live_XXXXXXXXXXXXXXXXXXXXXXXX"
JavaScript (fetch)
const res = await fetch(
  "https://api.rekurra.dev/v1/payment-methods/pm_01HZXK7QJ5M8Z9X2R3TVQ7A1B2",
  { headers: { Authorization: "Bearer rk_live_XXXXXXXXXXXXXXXXXXXXXXXX" } }
);
const paymentMethod = await res.json();
Python (requests)
import requests
 
res = requests.get(
    "https://api.rekurra.dev/v1/payment-methods/pm_01HZXK7QJ5M8Z9X2R3TVQ7A1B2",
    headers={"Authorization": "Bearer rk_live_XXXXXXXXXXXXXXXXXXXXXXXX"},
)
payment_method = res.json()

Errores posibles

Statuserror.typeCausa
404invalid_requestEl método de pago no existe

Marcar como método de pago por defecto

POST /v1/payment-methods/{id}/default

curl
curl -X POST https://api.rekurra.dev/v1/payment-methods/pm_01HZXK7QJ5M8Z9X2R3TVQ7A1B2/default \
  -H "Authorization: Bearer rk_live_XXXXXXXXXXXXXXXXXXXXXXXX"
JavaScript (fetch)
const res = await fetch(
  "https://api.rekurra.dev/v1/payment-methods/pm_01HZXK7QJ5M8Z9X2R3TVQ7A1B2/default",
  {
    method: "POST",
    headers: { Authorization: "Bearer rk_live_XXXXXXXXXXXXXXXXXXXXXXXX" },
  }
);
const paymentMethod = await res.json();
Python (requests)
import requests
 
res = requests.post(
    "https://api.rekurra.dev/v1/payment-methods/pm_01HZXK7QJ5M8Z9X2R3TVQ7A1B2/default",
    headers={"Authorization": "Bearer rk_live_XXXXXXXXXXXXXXXXXXXXXXXX"},
)
payment_method = res.json()

Eliminar un método de pago

DELETE /v1/payment-methods/{id}

curl
curl -X DELETE https://api.rekurra.dev/v1/payment-methods/pm_01HZXK7QJ5M8Z9X2R3TVQ7A1B2 \
  -H "Authorization: Bearer rk_live_XXXXXXXXXXXXXXXXXXXXXXXX"
JavaScript (fetch)
await fetch(
  "https://api.rekurra.dev/v1/payment-methods/pm_01HZXK7QJ5M8Z9X2R3TVQ7A1B2",
  {
    method: "DELETE",
    headers: { Authorization: "Bearer rk_live_XXXXXXXXXXXXXXXXXXXXXXXX" },
  }
);
Python (requests)
import requests
 
requests.delete(
    "https://api.rekurra.dev/v1/payment-methods/pm_01HZXK7QJ5M8Z9X2R3TVQ7A1B2",
    headers={"Authorization": "Bearer rk_live_XXXXXXXXXXXXXXXXXXXXXXXX"},
)

Errores posibles

Statuserror.typeCausa
404invalid_requestEl método de pago no existe
409invalid_requestEs el único método de pago de una suscripción activa