Create Customer
curl --request POST \
--url https://api.daya.co/v1/customers \
--header 'Content-Type: application/json' \
--header 'X-Api-Key: <x-api-key>' \
--data '
{
"email": "<string>",
"first_name": "<string>",
"last_name": "<string>"
}
'import requests
url = "https://api.daya.co/v1/customers"
payload = {
"email": "<string>",
"first_name": "<string>",
"last_name": "<string>"
}
headers = {
"X-Api-Key": "<x-api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-Api-Key': '<x-api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({email: '<string>', first_name: '<string>', last_name: '<string>'})
};
fetch('https://api.daya.co/v1/customers', 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.daya.co/v1/customers",
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([
'email' => '<string>',
'first_name' => '<string>',
'last_name' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-Api-Key: <x-api-key>"
],
]);
$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.daya.co/v1/customers"
payload := strings.NewReader("{\n \"email\": \"<string>\",\n \"first_name\": \"<string>\",\n \"last_name\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-Api-Key", "<x-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.daya.co/v1/customers")
.header("X-Api-Key", "<x-api-key>")
.header("Content-Type", "application/json")
.body("{\n \"email\": \"<string>\",\n \"first_name\": \"<string>\",\n \"last_name\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.daya.co/v1/customers")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-Api-Key"] = '<x-api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"email\": \"<string>\",\n \"first_name\": \"<string>\",\n \"last_name\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"id": "650e8400-e29b-41d4-a716-446655440000",
"email": "customer@example.com",
"first_name": "John",
"last_name": "Doe",
"is_verified": false,
"tier_1_kyc_complete": false,
"tier_2_kyc_complete": false,
"capabilities": [],
"rejection_reasons": [],
"created_at": "2026-01-05T15:04:05Z",
"updated_at": "2026-01-05T15:04:05Z"
}
Customers
Create Customer
Create a new customer under the authenticated merchant
POST
/
v1
/
customers
Create Customer
curl --request POST \
--url https://api.daya.co/v1/customers \
--header 'Content-Type: application/json' \
--header 'X-Api-Key: <x-api-key>' \
--data '
{
"email": "<string>",
"first_name": "<string>",
"last_name": "<string>"
}
'import requests
url = "https://api.daya.co/v1/customers"
payload = {
"email": "<string>",
"first_name": "<string>",
"last_name": "<string>"
}
headers = {
"X-Api-Key": "<x-api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-Api-Key': '<x-api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({email: '<string>', first_name: '<string>', last_name: '<string>'})
};
fetch('https://api.daya.co/v1/customers', 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.daya.co/v1/customers",
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([
'email' => '<string>',
'first_name' => '<string>',
'last_name' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-Api-Key: <x-api-key>"
],
]);
$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.daya.co/v1/customers"
payload := strings.NewReader("{\n \"email\": \"<string>\",\n \"first_name\": \"<string>\",\n \"last_name\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-Api-Key", "<x-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.daya.co/v1/customers")
.header("X-Api-Key", "<x-api-key>")
.header("Content-Type", "application/json")
.body("{\n \"email\": \"<string>\",\n \"first_name\": \"<string>\",\n \"last_name\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.daya.co/v1/customers")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-Api-Key"] = '<x-api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"email\": \"<string>\",\n \"first_name\": \"<string>\",\n \"last_name\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"id": "650e8400-e29b-41d4-a716-446655440000",
"email": "customer@example.com",
"first_name": "John",
"last_name": "Doe",
"is_verified": false,
"tier_1_kyc_complete": false,
"tier_2_kyc_complete": false,
"capabilities": [],
"rejection_reasons": [],
"created_at": "2026-01-05T15:04:05Z",
"updated_at": "2026-01-05T15:04:05Z"
}
Overview
Create a customer record that can be referenced bycustomer_id in funding account, transfer, and USD virtual account requests. Customers are scoped to the authenticated merchant.
For an individual customer, create the customer record, complete tier 1 verification with POST /v1/customers/{id}/tier1-verification, then submit individual tier 2 KYC with POST /v1/customers/{id}/tier2-verification.
For a business or entity, create the customer record first, then submit tier 2 KYB with POST /v1/customers/{id}/tier2-verification using customer_type: "business" and the business KYB fields. The first_name and last_name fields can be omitted for business customer records.
Authentication
string
required
Your merchant API key
Request Body
string
required
Customer email address (must be valid)Example:
customer@example.comEmail is normalized to lowercase and trimmed before storage.
string
Customer first name (1–100 characters)Example:
Johnstring
Customer last name (1–100 characters)Example:
DoeRequest Example
{
"email": "customer@example.com",
"first_name": "John",
"last_name": "Doe"
}
curl --request POST \
--url https://api.daya.co/v1/customers \
--header 'X-Api-Key: YOUR_API_KEY' \
--header 'Content-Type: application/json' \
--data '{
"email": "customer@example.com",
"first_name": "John",
"last_name": "Doe"
}'
Response
string
required
Unique customer identifier (UUID)
string
required
Customer email address
string
Customer first name
string
Customer last name
boolean
Whether the customer has passed verification.
false on creation.boolean
Whether tier 1 KYC has been completed.
false on creation.boolean
Whether tier 2 KYC has been completed.
false on creation.array
Customer capabilities and their current status. Empty on creation until verification starts.
array
Current blocking verification or capability issues. Empty on creation.
string
required
When the customer was created (ISO 8601 timestamp)
string
required
When the customer was last updated (ISO 8601 timestamp)
Success Response
{
"id": "650e8400-e29b-41d4-a716-446655440000",
"email": "customer@example.com",
"first_name": "John",
"last_name": "Doe",
"is_verified": false,
"tier_1_kyc_complete": false,
"tier_2_kyc_complete": false,
"capabilities": [],
"rejection_reasons": [],
"created_at": "2026-01-05T15:04:05Z",
"updated_at": "2026-01-05T15:04:05Z"
}
Error Responses
{
"error": {
"code": "VALIDATION_FAILED",
"message": "Validation failed",
"request_id": "550e8400-e29b-41d4-a716-446655440000",
"validation": "email is required and must be a valid email address"
}
}
{
"error": {
"code": "CONFLICT",
"message": "Customer with this email already exists for this merchant",
"request_id": "550e8400-e29b-41d4-a716-446655440000"
}
}
Notes
- Customers are scoped to the authenticated merchant — the same email can exist under different merchants.
- Once created, a customer can be referenced by
customer_idin funding account requests. - Business/entity customers use the same customer object and response shape as individual customers. Submit business KYB before creating a USD virtual account for a business beneficiary.