Skip to main content
Usa este flujo para procesar pagos ecommerce con Yape desde el API de autorización de PayIn.
POST /charges
endpoint
Este flujo utiliza el mismo endpoint base de autorización. Revisa los ambientes y la configuración general en el Overview.

Características del flujo

Tipo de flujo

Síncrono.

Método de pago

Permite procesar cobros ecommerce con billetera Yape.

Validación final

La confirmación del resultado debe realizarse desde backend.

Notificación opcional

Puedes enviar un callback_url para recibir una notificación host to host.

Consideraciones

Este flujo requiere el número celular afiliado a Yape y el código OTP generado por la billetera.
Si necesitas consultar el estado de una operación luego de autorizarla, revisa el API de Consulta con Yape.
No marques una orden como pagada solo con validaciones del frontend. Usa la respuesta backend o la consulta posterior para confirmar el estado final.

Request

Antes de consumir este endpoint, solicita tu Access Token en Autenticación.

Headers

CampoDescripciónValorTipoObligatorio
AuthorizationToken Bearer obtenido desde autenticaciónBearer {access_token}StringSI
Content-TypeFormato del requestapplication/jsonStringSI
ALG-API-VERSIONVersión del API1709847567StringSI
Authorization: Bearer {access_token}
Content-Type: application/json
ALG-API-VERSION: 1709847567

Body

Objeto raíz del request

CampoDescripciónEjemploTipoObligatorio
actionAcción a ejecutarauthorizeStringSI
channelCanal de la operaciónecommerceStringSI
merchant_codeCódigo del comercioyour_merchant_codeStringSI
merchant_operation_numberIdentificador único de la operación en el comercio. Debe ser diferente en cada transacción.5974484StringSI
payment_methodObjeto con la información del método de pagoObjectObjectSI
payment_detailsObjeto con el detalle del pago y datos del clienteObjectObjectSI

Objeto payment_method

CampoDescripciónEjemploTipoObligatorio
method_nameNombre del método de pagoYAPEStringSI
method_detailsObjeto con la información específica del pago con YapeObjectObjectSI

Objeto payment_method.method_details

CampoDescripciónEjemploTipoObligatorio
callback_urlURL donde se realizará la notificación host to host (server to server)https://pay-me.com/callbackStringNO
phoneObjeto con la información del titular de YapeObjectObjectSI
otpCódigo OTP de la billetera Yape557454StringSI
Si envías callback_url, asegúrate de que sea una URL backend accesible para recibir confirmaciones server to server.

Objeto payment_method.method_details.phone

CampoDescripciónEjemploTipoObligatorio
country_codeCódigo del país del teléfono+51StringSI
subscriberNúmero del teléfono969929157StringSI

Objeto payment_details

CampoDescripciónEjemploTipoObligatorio
amountMonto de la operación en centavos15000StringSI
currencyCódigo de la moneda604StringSI
billingDatos de facturaciónObjectObjectSI
shippingDatos de envíoObjectObjectSI
customerDatos del clienteObjectObjectSI
product_detailsLista de productos asociados a la operación[]ArraySI
Para billing, shipping y customer, usa la estructura ecommerce estándar con first_name, last_name, email, phone y location.

Ejemplo de request

{
  "action": "authorize",
  "channel": "ecommerce",
  "merchant_code": "your_merchant_code",
  "merchant_operation_number": "5974484",
  "payment_method": {
    "method_name": "YAPE",
    "method_details": {
      "callback_url": "https://pay-me.com/callback",
      "phone": {
        "country_code": "+51",
        "subscriber": "969929157"
      },
      "otp": "557454"
    }
  },
  "payment_details": {
    "amount": "15000",
    "currency": "604",
    "billing": {
      "first_name": "Pedro",
      "last_name": "Miranda",
      "email": "pedro@pay-me.com",
      "phone": {
        "country_code": "+51",
        "subscriber": "999835685"
      },
      "location": {
        "line_1": "Av. Casimiro Ulloa 333",
        "line_2": "Miraflores",
        "city": "Lima",
        "state": "Lima",
        "country": "Peru"
      }
    },
    "shipping": {
      "first_name": "Pedro",
      "last_name": "Miranda",
      "email": "pedro@pay-me.com",
      "phone": {
        "country_code": "+51",
        "subscriber": "999835685"
      },
      "location": {
        "line_1": "Av. Casimiro Ulloa 333",
        "line_2": "Miraflores",
        "city": "Lima",
        "state": "Lima",
        "country": "Peru"
      }
    },
    "customer": {
      "first_name": "Pedro",
      "last_name": "Miranda",
      "email": "pedro@pay-me.com",
      "phone": {
        "country_code": "+51",
        "subscriber": "999835685"
      },
      "location": {
        "line_1": "Av. Casimiro Ulloa 333",
        "line_2": "Miraflores",
        "city": "Lima",
        "state": "Lima",
        "country": "Peru"
      }
    },
    "product_details": []
  }
}

Response

Objeto transaction

CampoDescripciónEjemploTipoObligatorio
transaction_idIdentificador único de la transacción5hk8rwa3h3cq9oyfs3a28v1msStringSI
channelCanal por el cual se realizó la transacciónecommerceStringSI
stateEstado actual de la transacciónAUTORIZADOStringSI
state_reasonObservación o descripción del estado actualPago exitoso con YapeStringSI
amountMonto de la transacción15000StringSI
currencyCódigo de la moneda de la operación604StringSI
payment_methodObjeto con información del método de pago usado en la transacciónObjectObjectSI
processor_responseResultado devuelto por la procesadoraObjectObjectNO
additional_fieldsDatos adicionales enviados en el requestObjectObjectNO
lifecycleHistorial de estados por los que pasó la transacciónArrayArraySI
state puede devolver valores como AUTORIZADO, DENEGADO o INVALIDO, según el resultado de la autorización. En el historial lifecycle también pueden aparecer estados intermedios como REGISTRADO o PENDIENTE.

Objeto transaction.payment_method

CampoDescripciónEjemploTipoObligatorio
method_nameNombre del método de pago usado en la transacciónYAPEStringSI
method_detailsObjeto con información detallada relacionada al métodoObjectObjectSI

Objeto transaction.payment_method.method_details

CampoDescripciónEjemploTipoObligatorio
phoneObjeto con la información del teléfono del cliente YapeObjectObjectSI
masked_panTarjeta enmascarada usada en la transacción411111********1111StringNO
brandMarca de la tarjeta usada en la transacciónVISAStringNO
binBIN de la tarjeta usada en la transacción411111StringNO
last_panÚltimos 4 dígitos de la tarjeta usada en la transacción9268StringNO
card_typeTipo de tarjetaDEBITStringNO
card_countryPaís de la tarjetaPEStringNO
issuerBanco emisor de la tarjetaBANCO DE CREDITO DEL PERU - BCPStringNO

Objeto transaction.payment_method.method_details.phone

CampoDescripciónEjemploTipoObligatorio
country_codeCódigo del país del teléfono de Yape+51StringSI
subscriberNúmero de teléfono de Yape969929157StringSI

Objeto transaction.processor_response

CampoDescripciónEjemploTipoObligatorio
authorization_codeCódigo de autorización055552StringNO
brand_transaction_idID de la transacción ante la marca100BStringNO
result_messageMensaje del resultado de la autorizaciónObjectObjectNO
Este objeto puede mostrarse cuando la transacción llega a estados como AUTORIZADO, DENEGADO o EXTORNADO.

Objeto transaction.processor_response.result_message

CampoDescripciónEjemploTipoObligatorio
codeCódigo del resultado de la autorización00StringNO
descriptionDescripción del resultado de la autorizaciónApproval and completed successfullyStringNO

Objeto transaction.lifecycle

CampoDescripciónEjemploTipoObligatorio
stateEstado registrado en el historialAUTORIZADOStringSI
dateFecha del cambio de estadoObjectObjectSI
En lifecycle puedes recibir estados intermedios como REGISTRADO o PENDIENTE antes del resultado final.

Objeto transaction.lifecycle[].date

CampoDescripciónEjemploTipoObligatorio
utc_timeFecha en UTC2024-03-12T22:49:36.018ZStringSI
unix_timeFecha en unix time1710282940IntegerSI

Ejemplo de response

{
  "success": "true",
  "action": "authorize",
  "merchant_code": "your_merchant_code",
  "merchant_operation_number": "2391645",
  "transaction": {
    "transaction_id": "5hk8rwa3h3cq9oyfs3a28v1ms",
    "channel": "ecommerce",
    "state": "AUTORIZADO",
    "state_reason": "Pago exitoso con Yape",
    "amount": "15000",
    "currency": "604",
    "payment_method": {
      "method_name": "YAPE",
      "method_details": {
        "phone": {
          "country_code": "+51",
          "subscriber": "969929157"
        },
        "masked_pan": "411111********1111",
        "brand": "VISA",
        "bin": "411111",
        "last_pan": "9268",
        "card_type": "DEBIT",
        "card_country": "PE",
        "issuer": "BANCO DE CREDITO DEL PERU - BCP"
      }
    },
    "processor_response": {
      "authorization_code": "055552",
      "brand_transaction_id": "100B",
      "result_message": {
        "code": "00",
        "description": "Approval and completed successfully"
      }
    },
    "additional_fields": null,
    "lifecycle": [
      {
        "state": "REGISTRADO",
        "date": {
          "utc_time": "2024-03-12T22:49:36.018Z",
          "unix_time": 1710282940
        }
      },
      {
        "state": "PENDIENTE",
        "date": {
          "utc_time": "2024-03-12T22:49:36.018Z",
          "unix_time": 1710282940
        }
      },
      {
        "state": "AUTORIZADO",
        "date": {
          "utc_time": "2024-03-12T22:49:36.018Z",
          "unix_time": 1710282940
        }
      }
    ]
  },
  "meta": {
    "status": {
      "code": "00",
      "message_ilgn": [
        {
          "locale": "es_PE",
          "value": "Procesado correctamente"
        }
      ]
    }
  }
}

Buenas prácticas

  • Valida siempre el resultado desde backend.
  • Asegúrate de enviar un merchant_operation_number único por transacción.
  • Verifica que el otp corresponda al número Yape enviado en phone.
  • Usa callback_url si tu operación necesita confirmación server to server.
  • No asumas que los campos opcionales de tarjeta dentro de transaction.payment_method.method_details siempre estarán presentes.
  • Conserva transaction_id y merchant_operation_number para soporte y conciliación.

Errores comunes

OTP inválido o vencido

Si el OTP no corresponde al intento de pago vigente, la transacción puede ser rechazada o marcada como inválida.

Validación incompleta

No tomes decisiones de negocio basándote solo en la interacción del usuario; confirma siempre el estado final desde backend.

Siguiente paso

Api de Consulta con Yape

Revisa cómo consultar el estado de una operación procesada con Yape.