POST /InicioPago
curl --request POST \
--url https://api.example.com/InicioPago \
--header 'Content-Type: application/json' \
--data '
{
"InformacionPago": {},
"InformacionSeguridad": {},
"AdicionalesPago": [
{}
],
"AdicionalesConfiguracion": [
{}
]
}
'import requests
url = "https://api.example.com/InicioPago"
payload = {
"InformacionPago": {},
"InformacionSeguridad": {},
"AdicionalesPago": [{}],
"AdicionalesConfiguracion": [{}]
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
InformacionPago: {},
InformacionSeguridad: {},
AdicionalesPago: [{}],
AdicionalesConfiguracion: [{}]
})
};
fetch('https://api.example.com/InicioPago', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.example.com/InicioPago",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'InformacionPago' => [
],
'InformacionSeguridad' => [
],
'AdicionalesPago' => [
[
]
],
'AdicionalesConfiguracion' => [
[
]
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.example.com/InicioPago"
payload := strings.NewReader("{\n \"InformacionPago\": {},\n \"InformacionSeguridad\": {},\n \"AdicionalesPago\": [\n {}\n ],\n \"AdicionalesConfiguracion\": [\n {}\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.example.com/InicioPago")
.header("Content-Type", "application/json")
.body("{\n \"InformacionPago\": {},\n \"InformacionSeguridad\": {},\n \"AdicionalesPago\": [\n {}\n ],\n \"AdicionalesConfiguracion\": [\n {}\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/InicioPago")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"InformacionPago\": {},\n \"InformacionSeguridad\": {},\n \"AdicionalesPago\": [\n {}\n ],\n \"AdicionalesConfiguracion\": [\n {}\n ]\n}"
response = http.request(request)
puts response.read_body{
"int_codigo": 123,
"str_cod_error": "<string>",
"str_descripcion_error": "<string>",
"str_url": "<string>"
}Endpoints
POST /InicioPago
Crea una transacción y obtiene la URL a la que redirigir al usuario.
POST
/
InicioPago
POST /InicioPago
curl --request POST \
--url https://api.example.com/InicioPago \
--header 'Content-Type: application/json' \
--data '
{
"InformacionPago": {},
"InformacionSeguridad": {},
"AdicionalesPago": [
{}
],
"AdicionalesConfiguracion": [
{}
]
}
'import requests
url = "https://api.example.com/InicioPago"
payload = {
"InformacionPago": {},
"InformacionSeguridad": {},
"AdicionalesPago": [{}],
"AdicionalesConfiguracion": [{}]
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
InformacionPago: {},
InformacionSeguridad: {},
AdicionalesPago: [{}],
AdicionalesConfiguracion: [{}]
})
};
fetch('https://api.example.com/InicioPago', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.example.com/InicioPago",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'InformacionPago' => [
],
'InformacionSeguridad' => [
],
'AdicionalesPago' => [
[
]
],
'AdicionalesConfiguracion' => [
[
]
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.example.com/InicioPago"
payload := strings.NewReader("{\n \"InformacionPago\": {},\n \"InformacionSeguridad\": {},\n \"AdicionalesPago\": [\n {}\n ],\n \"AdicionalesConfiguracion\": [\n {}\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.example.com/InicioPago")
.header("Content-Type", "application/json")
.body("{\n \"InformacionPago\": {},\n \"InformacionSeguridad\": {},\n \"AdicionalesPago\": [\n {}\n ],\n \"AdicionalesConfiguracion\": [\n {}\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/InicioPago")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"InformacionPago\": {},\n \"InformacionSeguridad\": {},\n \"AdicionalesPago\": [\n {}\n ],\n \"AdicionalesConfiguracion\": [\n {}\n ]\n}"
response = http.request(request)
puts response.read_body{
"int_codigo": 123,
"str_cod_error": "<string>",
"str_descripcion_error": "<string>",
"str_url": "<string>"
}URL de producción:
https://www.zonapagos.com/Apis_CicloPago/api/InicioPagoVisión general
Este endpoint crea una nueva transacción en el core transaccional de Zonapagos y devuelve una URL a la que debes redirigir al usuario para que complete el pago.Headers
Content-Type: application/json
Cuerpo del request
El body es un objeto con cuatro propiedades obligatorias:{
"InformacionPago": { ... },
"InformacionSeguridad": { ... },
"AdicionalesPago": [ ... ],
"AdicionalesConfiguracion": [ ... ]
}
object
required
Datos del pago y del cliente. Ver objeto InformacionPago.
object
required
Credenciales del comercio. Ver objeto InformacionSeguridad.
array
required
Array de objetos con información adicional. Puede estar vacío (
[]). Ver objeto AdicionalPago.array
required
Array de objetos con configuración del comportamiento del ciclo de pago. Debe incluir al menos el código
50 si aceptas PSE. Ver objeto AdicionalConfiguracion y el catálogo completo.Cuerpo del response
integer
1 si la transacción fue creada correctamente. 2 si hubo error de validación o autenticación.string
Código de error interno. Vacío cuando
int_codigo: 1.string
Descripción del error en texto. Vacío cuando
int_codigo: 1.Cuando
int_codigo: 2, este campo puede contener mensajes poco descriptivos como "Object reference not set to an instance of an object.". [Pendiente TI: mejorar mensajes de error.]string
URL del ciclo de pago. Redirige al usuario aquí cuando
int_codigo: 1. Máximo 126 caracteres.Formato:https://www.zonapagos.com/Ciclo_Pago/Pago.aspx?rut=<token>
Ejemplo completo
{
"InformacionPago": {
"flt_total_con_iva": 83000,
"flt_valor_iva": 833,
"str_id_pago": "180924",
"str_descripcion_pago": "Compra de camisa",
"str_email": "cliente@ejemplo.com",
"str_id_cliente": "123456789",
"str_tipo_id": "1",
"str_nombre_cliente": "Juan",
"str_apellido_cliente": "Perez",
"str_telefono_cliente": "3001234567",
"str_opcional1": "canal-web",
"str_opcional2": "campaña-abril"
},
"InformacionSeguridad": {
"int_id_comercio": 678,
"str_usuario": "Usuario",
"str_clave": "ClaveSecreta",
"int_modalidad": -1
},
"AdicionalesPago": [],
"AdicionalesConfiguracion": [
{ "int_codigo": 50, "str_valor": "2701" },
{ "int_codigo": 100, "str_valor": "1" },
{ "int_codigo": 104, "str_valor": "https://micomercio.com/retorno-pago" }
]
}
{
"int_codigo": 1,
"str_cod_error": "",
"str_descripcion_error": "",
"str_url": "https://www.zonapagos.com/Ciclo_Pago/Pago.aspx?rut=6C44EA66B127D743C77B3247E9FE866A97C6A5730B86303836BD52D257186599"
}
{
"int_codigo": 2,
"str_cod_error": "",
"str_descripcion_error": "Object reference not set to an instance of an object.",
"str_url": null
}
Validaciones
El endpoint valida en orden:- Estructura JSON — si el JSON está malformado, devuelve HTTP 400.
- Campos obligatorios de
InformacionPago:flt_total_con_iva,str_id_pago,str_descripcion_pago. - Credenciales (
int_id_comercio,str_usuario,str_clave). AdicionalesConfiguracioncon código50si el comercio tiene PSE habilitado.- Formato de
str_id_pago: máximo 30 caracteres, sin ceros a la izquierda. - Montos:
flt_total_con_ivadebe ser mayor a 0. - Consistencia:
flt_valor_ivano puede ser mayor aflt_total_con_iva.
int_codigo: 2 y (cuando el API coopera) un mensaje en str_descripcion_error.
Buenas prácticas
Genera
str_id_pago únicos. Un UUID o un contador+timestamp funciona bien. Evita reutilizar IDs.Guarda la
str_url junto con tu registro de pedido. Si el usuario cierra el browser sin completar, puedes reenviarle el link por email.Incluye el código
104 (URL de retorno) dinámicamente si manejas múltiples dominios o ambientes. Así no dependes de la configuración estática del comercio.Loguea la respuesta completa (ocultando las credenciales). Facilita debugging.
Intenta tú mismo
Abrir en Postman
Colección lista con este endpoint y 31 requests más.
Ver también
POST /VerificacionPago
El endpoint que consulta el estado de la transacción que acabas de crear.
Callback del comercio
Qué parámetros recibes cuando el usuario termina el pago.