curl --request POST \
--url https://api-sb.meld.io/accounts/customers/{customerId}/verifications \
--header 'Authorization: <api-key>' \
--header 'Content-Type: application/json' \
--data '
{
"channel": "EMAIL"
}
'import requests
url = "https://api-sb.meld.io/accounts/customers/{customerId}/verifications"
payload = { "channel": "EMAIL" }
headers = {
"Authorization": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({channel: 'EMAIL'})
};
fetch('https://api-sb.meld.io/accounts/customers/{customerId}/verifications', 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-sb.meld.io/accounts/customers/{customerId}/verifications",
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([
'channel' => 'EMAIL'
]),
CURLOPT_HTTPHEADER => [
"Authorization: <api-key>",
"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-sb.meld.io/accounts/customers/{customerId}/verifications"
payload := strings.NewReader("{\n \"channel\": \"EMAIL\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "<api-key>")
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-sb.meld.io/accounts/customers/{customerId}/verifications")
.header("Authorization", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"channel\": \"EMAIL\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api-sb.meld.io/accounts/customers/{customerId}/verifications")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"channel\": \"EMAIL\"\n}"
response = http.request(request)
puts response.read_body{
"channel": "EMAIL",
"expiresAt": "<string>",
"resendAvailableAt": "<string>",
"status": "PENDING",
"target": "j•••@example.com",
"verificationId": "<string>"
}{
"code": "<string>",
"errors": [
"<string>"
],
"message": "<string>",
"requestId": "<string>",
"serviceProviderDetails": {
"code": "5034",
"message": "Digital currency and blockchain combination is restricted for customer's country"
},
"timestamp": "2026-08-14T09:41:22.482+00:00"
}{
"code": "<string>",
"errors": [
"<string>"
],
"message": "<string>",
"requestId": "<string>",
"serviceProviderDetails": {
"code": "5034",
"message": "Digital currency and blockchain combination is restricted for customer's country"
},
"timestamp": "2026-08-14T09:41:22.482+00:00"
}Send a verification code to a customer's email or phone
Sends a one-time code to the given target over the given channel and returns the verification to confirm it against. While a resend cooldown is active the pending verification is returned without sending a new code.
curl --request POST \
--url https://api-sb.meld.io/accounts/customers/{customerId}/verifications \
--header 'Authorization: <api-key>' \
--header 'Content-Type: application/json' \
--data '
{
"channel": "EMAIL"
}
'import requests
url = "https://api-sb.meld.io/accounts/customers/{customerId}/verifications"
payload = { "channel": "EMAIL" }
headers = {
"Authorization": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({channel: 'EMAIL'})
};
fetch('https://api-sb.meld.io/accounts/customers/{customerId}/verifications', 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-sb.meld.io/accounts/customers/{customerId}/verifications",
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([
'channel' => 'EMAIL'
]),
CURLOPT_HTTPHEADER => [
"Authorization: <api-key>",
"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-sb.meld.io/accounts/customers/{customerId}/verifications"
payload := strings.NewReader("{\n \"channel\": \"EMAIL\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "<api-key>")
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-sb.meld.io/accounts/customers/{customerId}/verifications")
.header("Authorization", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"channel\": \"EMAIL\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api-sb.meld.io/accounts/customers/{customerId}/verifications")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"channel\": \"EMAIL\"\n}"
response = http.request(request)
puts response.read_body{
"channel": "EMAIL",
"expiresAt": "<string>",
"resendAvailableAt": "<string>",
"status": "PENDING",
"target": "j•••@example.com",
"verificationId": "<string>"
}{
"code": "<string>",
"errors": [
"<string>"
],
"message": "<string>",
"requestId": "<string>",
"serviceProviderDetails": {
"code": "5034",
"message": "Digital currency and blockchain combination is restricted for customer's country"
},
"timestamp": "2026-08-14T09:41:22.482+00:00"
}{
"code": "<string>",
"errors": [
"<string>"
],
"message": "<string>",
"requestId": "<string>",
"serviceProviderDetails": {
"code": "5034",
"message": "Digital currency and blockchain combination is restricted for customer's country"
},
"timestamp": "2026-08-14T09:41:22.482+00:00"
}Authorizations
Headers
Dated API version to use for this request, e.g. 2026-02-03.
"2026-02-03"
Path Parameters
Customer id
Body
Request to send a verification code to a customer's email or phone
Contact channel to verify
EMAIL, PHONE 1Optional service provider context for the verification
"COINBASEPAY"
Email address or E.164 phone number to send the code to. Optional for widget sessions with locked targets, where the customer's stored contact value is used.
Response
Verification is returned
State of a contact verification
Contact channel
EMAIL, PHONE When the code expires (ISO-8601)
When a new code can be requested (ISO-8601)
Verification status
PENDING, VERIFIED, EXPIRED, FAILED, INVALIDATED Masked contact value the code was sent to
"j•••@example.com"
Verification id