Request a collection OTP
curl --request POST \
--url https://api.qbank.cl/platform/v1/payins/collect/otp \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"method": "configured_pull_method",
"amount": "1200.00",
"payer_document": "V12345678",
"payer_phone": "04141234567",
"payer_bank": "0102",
"payer_account": 1020123456789012400
}
'import requests
url = "https://api.qbank.cl/platform/v1/payins/collect/otp"
payload = {
"method": "configured_pull_method",
"amount": "1200.00",
"payer_document": "V12345678",
"payer_phone": "04141234567",
"payer_bank": "0102",
"payer_account": 1020123456789012400
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
method: 'configured_pull_method',
amount: '1200.00',
payer_document: 'V12345678',
payer_phone: '04141234567',
payer_bank: '0102',
payer_account: 1020123456789012400
})
};
fetch('https://api.qbank.cl/platform/v1/payins/collect/otp', 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.qbank.cl/platform/v1/payins/collect/otp",
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([
'method' => 'configured_pull_method',
'amount' => '1200.00',
'payer_document' => 'V12345678',
'payer_phone' => '04141234567',
'payer_bank' => '0102',
'payer_account' => 1020123456789012400
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"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.qbank.cl/platform/v1/payins/collect/otp"
payload := strings.NewReader("{\n \"method\": \"configured_pull_method\",\n \"amount\": \"1200.00\",\n \"payer_document\": \"V12345678\",\n \"payer_phone\": \"04141234567\",\n \"payer_bank\": \"0102\",\n \"payer_account\": 1020123456789012400\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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.qbank.cl/platform/v1/payins/collect/otp")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"method\": \"configured_pull_method\",\n \"amount\": \"1200.00\",\n \"payer_document\": \"V12345678\",\n \"payer_phone\": \"04141234567\",\n \"payer_bank\": \"0102\",\n \"payer_account\": 1020123456789012400\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.qbank.cl/platform/v1/payins/collect/otp")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"method\": \"configured_pull_method\",\n \"amount\": \"1200.00\",\n \"payer_document\": \"V12345678\",\n \"payer_phone\": \"04141234567\",\n \"payer_bank\": \"0102\",\n \"payer_account\": 1020123456789012400\n}"
response = http.request(request)
puts response.read_body{
"method": "debito_inmediato",
"result": {
"status": "sent",
"otp_reference": "OTP-5521"
}
}{
"error": "invalid_request",
"message": "method is required"
}{
"error": "unauthorized",
"message": "invalid or missing credentials"
}{
"error": "verification_required",
"message": "identity verification is required before creating payins or using this service; request your verification link at POST /v1/me/verification/link"
}{
"error": "provider_rejected",
"message": "c2p uses the payer-provided claveDinamica; no OTP request step exists"
}{
"error": "core_unavailable",
"message": "could not request the OTP"
}Request a collection OTP
Requires an approved account identity; person accounts need approved KYC and company accounts need approved KYB before this authenticated operation can create or charge a payin. Requests the one-time password only for pull methods that issue one before the charge. It is not part of the VE/VES/c2p flow, where the payer supplies claveDinamica in the collect request’s otp field. Free of charge. The pull option must be materialized first and the final collect call remains subject to pre-charge screening.
POST
/
v1
/
payins
/
collect
/
otp
Request a collection OTP
curl --request POST \
--url https://api.qbank.cl/platform/v1/payins/collect/otp \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"method": "configured_pull_method",
"amount": "1200.00",
"payer_document": "V12345678",
"payer_phone": "04141234567",
"payer_bank": "0102",
"payer_account": 1020123456789012400
}
'import requests
url = "https://api.qbank.cl/platform/v1/payins/collect/otp"
payload = {
"method": "configured_pull_method",
"amount": "1200.00",
"payer_document": "V12345678",
"payer_phone": "04141234567",
"payer_bank": "0102",
"payer_account": 1020123456789012400
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
method: 'configured_pull_method',
amount: '1200.00',
payer_document: 'V12345678',
payer_phone: '04141234567',
payer_bank: '0102',
payer_account: 1020123456789012400
})
};
fetch('https://api.qbank.cl/platform/v1/payins/collect/otp', 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.qbank.cl/platform/v1/payins/collect/otp",
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([
'method' => 'configured_pull_method',
'amount' => '1200.00',
'payer_document' => 'V12345678',
'payer_phone' => '04141234567',
'payer_bank' => '0102',
'payer_account' => 1020123456789012400
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"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.qbank.cl/platform/v1/payins/collect/otp"
payload := strings.NewReader("{\n \"method\": \"configured_pull_method\",\n \"amount\": \"1200.00\",\n \"payer_document\": \"V12345678\",\n \"payer_phone\": \"04141234567\",\n \"payer_bank\": \"0102\",\n \"payer_account\": 1020123456789012400\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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.qbank.cl/platform/v1/payins/collect/otp")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"method\": \"configured_pull_method\",\n \"amount\": \"1200.00\",\n \"payer_document\": \"V12345678\",\n \"payer_phone\": \"04141234567\",\n \"payer_bank\": \"0102\",\n \"payer_account\": 1020123456789012400\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.qbank.cl/platform/v1/payins/collect/otp")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"method\": \"configured_pull_method\",\n \"amount\": \"1200.00\",\n \"payer_document\": \"V12345678\",\n \"payer_phone\": \"04141234567\",\n \"payer_bank\": \"0102\",\n \"payer_account\": 1020123456789012400\n}"
response = http.request(request)
puts response.read_body{
"method": "debito_inmediato",
"result": {
"status": "sent",
"otp_reference": "OTP-5521"
}
}{
"error": "invalid_request",
"message": "method is required"
}{
"error": "unauthorized",
"message": "invalid or missing credentials"
}{
"error": "verification_required",
"message": "identity verification is required before creating payins or using this service; request your verification link at POST /v1/me/verification/link"
}{
"error": "provider_rejected",
"message": "c2p uses the payer-provided claveDinamica; no OTP request step exists"
}{
"error": "core_unavailable",
"message": "could not request the OTP"
}Authorizations
Session JWT (from register/login) or API key (pk_...).
X-API-Key: <token> is accepted as an alternative header.
Body
application/json