curl --request POST \
--url https://qa-api.endl.xyz/api/v0/customer \
--header 'API-KEY: <api-key>' \
--header 'Content-Type: application/json' \
--data '
{
"email": "jane.doe@example.com",
"firstName": "Jane",
"lastName": "Doe",
"phone": "+971500000000",
"dateOfBirth": "01-01-1990",
"country": "ARE",
"nationality": "ARE",
"gender": "F",
"externalReferenceId": "partner-ref-001",
"questionnaire": {
"sections": {
"profileDetails": {
"items": {
"occupation": {
"value": "15-1132"
},
"annualSalary": {
"value": "50000_100000"
},
"accountPurpose": {
"value": "payroll"
},
"expectedMonthlyVolume": {
"value": "0_10000"
}
}
},
"birthNationalityTaxI": {
"items": {
"countryOfBirth": {
"value": "ARE"
},
"cityOfBirth": {
"value": "Dubai"
},
"nationalities": {
"values": [
"ARE"
]
},
"taxRegistrationsOuts": {
"value": "no"
}
}
}
}
},
"customFields": {
"nationalIdNumber": "784-1990-1234567-1",
"whatsappNumber": "+971500000000",
"telegramId": "@janedoe"
}
}
'import requests
url = "https://qa-api.endl.xyz/api/v0/customer"
payload = {
"email": "jane.doe@example.com",
"firstName": "Jane",
"lastName": "Doe",
"phone": "+971500000000",
"dateOfBirth": "01-01-1990",
"country": "ARE",
"nationality": "ARE",
"gender": "F",
"externalReferenceId": "partner-ref-001",
"questionnaire": { "sections": {
"profileDetails": { "items": {
"occupation": { "value": "15-1132" },
"annualSalary": { "value": "50000_100000" },
"accountPurpose": { "value": "payroll" },
"expectedMonthlyVolume": { "value": "0_10000" }
} },
"birthNationalityTaxI": { "items": {
"countryOfBirth": { "value": "ARE" },
"cityOfBirth": { "value": "Dubai" },
"nationalities": { "values": ["ARE"] },
"taxRegistrationsOuts": { "value": "no" }
} }
} },
"customFields": {
"nationalIdNumber": "784-1990-1234567-1",
"whatsappNumber": "+971500000000",
"telegramId": "@janedoe"
}
}
headers = {
"API-KEY": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'API-KEY': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
email: 'jane.doe@example.com',
firstName: 'Jane',
lastName: 'Doe',
phone: '+971500000000',
dateOfBirth: '01-01-1990',
country: 'ARE',
nationality: 'ARE',
gender: 'F',
externalReferenceId: 'partner-ref-001',
questionnaire: {
sections: {
profileDetails: {
items: {
occupation: {value: '15-1132'},
annualSalary: {value: '50000_100000'},
accountPurpose: {value: 'payroll'},
expectedMonthlyVolume: {value: '0_10000'}
}
},
birthNationalityTaxI: {
items: {
countryOfBirth: {value: 'ARE'},
cityOfBirth: {value: 'Dubai'},
nationalities: {values: ['ARE']},
taxRegistrationsOuts: {value: 'no'}
}
}
}
},
customFields: {
nationalIdNumber: '784-1990-1234567-1',
whatsappNumber: '+971500000000',
telegramId: '@janedoe'
}
})
};
fetch('https://qa-api.endl.xyz/api/v0/customer', 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://qa-api.endl.xyz/api/v0/customer",
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' => 'jane.doe@example.com',
'firstName' => 'Jane',
'lastName' => 'Doe',
'phone' => '+971500000000',
'dateOfBirth' => '01-01-1990',
'country' => 'ARE',
'nationality' => 'ARE',
'gender' => 'F',
'externalReferenceId' => 'partner-ref-001',
'questionnaire' => [
'sections' => [
'profileDetails' => [
'items' => [
'occupation' => [
'value' => '15-1132'
],
'annualSalary' => [
'value' => '50000_100000'
],
'accountPurpose' => [
'value' => 'payroll'
],
'expectedMonthlyVolume' => [
'value' => '0_10000'
]
]
],
'birthNationalityTaxI' => [
'items' => [
'countryOfBirth' => [
'value' => 'ARE'
],
'cityOfBirth' => [
'value' => 'Dubai'
],
'nationalities' => [
'values' => [
'ARE'
]
],
'taxRegistrationsOuts' => [
'value' => 'no'
]
]
]
]
],
'customFields' => [
'nationalIdNumber' => '784-1990-1234567-1',
'whatsappNumber' => '+971500000000',
'telegramId' => '@janedoe'
]
]),
CURLOPT_HTTPHEADER => [
"API-KEY: <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://qa-api.endl.xyz/api/v0/customer"
payload := strings.NewReader("{\n \"email\": \"jane.doe@example.com\",\n \"firstName\": \"Jane\",\n \"lastName\": \"Doe\",\n \"phone\": \"+971500000000\",\n \"dateOfBirth\": \"01-01-1990\",\n \"country\": \"ARE\",\n \"nationality\": \"ARE\",\n \"gender\": \"F\",\n \"externalReferenceId\": \"partner-ref-001\",\n \"questionnaire\": {\n \"sections\": {\n \"profileDetails\": {\n \"items\": {\n \"occupation\": {\n \"value\": \"15-1132\"\n },\n \"annualSalary\": {\n \"value\": \"50000_100000\"\n },\n \"accountPurpose\": {\n \"value\": \"payroll\"\n },\n \"expectedMonthlyVolume\": {\n \"value\": \"0_10000\"\n }\n }\n },\n \"birthNationalityTaxI\": {\n \"items\": {\n \"countryOfBirth\": {\n \"value\": \"ARE\"\n },\n \"cityOfBirth\": {\n \"value\": \"Dubai\"\n },\n \"nationalities\": {\n \"values\": [\n \"ARE\"\n ]\n },\n \"taxRegistrationsOuts\": {\n \"value\": \"no\"\n }\n }\n }\n }\n },\n \"customFields\": {\n \"nationalIdNumber\": \"784-1990-1234567-1\",\n \"whatsappNumber\": \"+971500000000\",\n \"telegramId\": \"@janedoe\"\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("API-KEY", "<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://qa-api.endl.xyz/api/v0/customer")
.header("API-KEY", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"email\": \"jane.doe@example.com\",\n \"firstName\": \"Jane\",\n \"lastName\": \"Doe\",\n \"phone\": \"+971500000000\",\n \"dateOfBirth\": \"01-01-1990\",\n \"country\": \"ARE\",\n \"nationality\": \"ARE\",\n \"gender\": \"F\",\n \"externalReferenceId\": \"partner-ref-001\",\n \"questionnaire\": {\n \"sections\": {\n \"profileDetails\": {\n \"items\": {\n \"occupation\": {\n \"value\": \"15-1132\"\n },\n \"annualSalary\": {\n \"value\": \"50000_100000\"\n },\n \"accountPurpose\": {\n \"value\": \"payroll\"\n },\n \"expectedMonthlyVolume\": {\n \"value\": \"0_10000\"\n }\n }\n },\n \"birthNationalityTaxI\": {\n \"items\": {\n \"countryOfBirth\": {\n \"value\": \"ARE\"\n },\n \"cityOfBirth\": {\n \"value\": \"Dubai\"\n },\n \"nationalities\": {\n \"values\": [\n \"ARE\"\n ]\n },\n \"taxRegistrationsOuts\": {\n \"value\": \"no\"\n }\n }\n }\n }\n },\n \"customFields\": {\n \"nationalIdNumber\": \"784-1990-1234567-1\",\n \"whatsappNumber\": \"+971500000000\",\n \"telegramId\": \"@janedoe\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://qa-api.endl.xyz/api/v0/customer")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["API-KEY"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"email\": \"jane.doe@example.com\",\n \"firstName\": \"Jane\",\n \"lastName\": \"Doe\",\n \"phone\": \"+971500000000\",\n \"dateOfBirth\": \"01-01-1990\",\n \"country\": \"ARE\",\n \"nationality\": \"ARE\",\n \"gender\": \"F\",\n \"externalReferenceId\": \"partner-ref-001\",\n \"questionnaire\": {\n \"sections\": {\n \"profileDetails\": {\n \"items\": {\n \"occupation\": {\n \"value\": \"15-1132\"\n },\n \"annualSalary\": {\n \"value\": \"50000_100000\"\n },\n \"accountPurpose\": {\n \"value\": \"payroll\"\n },\n \"expectedMonthlyVolume\": {\n \"value\": \"0_10000\"\n }\n }\n },\n \"birthNationalityTaxI\": {\n \"items\": {\n \"countryOfBirth\": {\n \"value\": \"ARE\"\n },\n \"cityOfBirth\": {\n \"value\": \"Dubai\"\n },\n \"nationalities\": {\n \"values\": [\n \"ARE\"\n ]\n },\n \"taxRegistrationsOuts\": {\n \"value\": \"no\"\n }\n }\n }\n }\n },\n \"customFields\": {\n \"nationalIdNumber\": \"784-1990-1234567-1\",\n \"whatsappNumber\": \"+971500000000\",\n \"telegramId\": \"@janedoe\"\n }\n}"
response = http.request(request)
puts response.read_body{
"userId": "6c4ba9af-978a-45ff-953f-729c593f14af",
"userType": "INDIVIDUAL",
"status": "INITIATED",
"sumsubApplicantId": "6a99986facbfab05e54c5719"
}{
"errors": [
{
"code": "400",
"message": "firstName is required",
"name": "PartnerOnboardingCreate failed to process"
},
{
"code": "400",
"message": "country must be an ISO 3166-1 alpha-3 code (e.g. ARE)",
"name": "PartnerOnboardingCreate failed to process"
}
]
}{
"code": "401",
"message": "Authentication Failed!",
"name": "PartnerOnboarding failed to process"
}{
"code": "403",
"message": "Onboarding is not permitted for this country",
"name": "PartnerOnboardingCreate failed to process"
}{
"data": null,
"code": 429,
"message": "Rate limit exceeded, please retry later",
"status": "Error",
"errors": [
{
"code": "429",
"message": "Rate limit exceeded, please retry later",
"field": "Rate limit exceeded, please retry later"
}
]
}{
"errors": [
{
"code": "503",
"message": "Service temporarily unavailable, please try again",
"name": "Downstream service error"
}
]
}Create customer
Creates an individual (KYC) or a business (KYB), or imports either from a share token. The body decides which: send userType: "BUSINESS" with a company block for a business, a shareToken to import, and neither for an individual.
The whole payload is validated before anything is created. If any single field is wrong the request fails with 400 and nothing is written.
curl --request POST \
--url https://qa-api.endl.xyz/api/v0/customer \
--header 'API-KEY: <api-key>' \
--header 'Content-Type: application/json' \
--data '
{
"email": "jane.doe@example.com",
"firstName": "Jane",
"lastName": "Doe",
"phone": "+971500000000",
"dateOfBirth": "01-01-1990",
"country": "ARE",
"nationality": "ARE",
"gender": "F",
"externalReferenceId": "partner-ref-001",
"questionnaire": {
"sections": {
"profileDetails": {
"items": {
"occupation": {
"value": "15-1132"
},
"annualSalary": {
"value": "50000_100000"
},
"accountPurpose": {
"value": "payroll"
},
"expectedMonthlyVolume": {
"value": "0_10000"
}
}
},
"birthNationalityTaxI": {
"items": {
"countryOfBirth": {
"value": "ARE"
},
"cityOfBirth": {
"value": "Dubai"
},
"nationalities": {
"values": [
"ARE"
]
},
"taxRegistrationsOuts": {
"value": "no"
}
}
}
}
},
"customFields": {
"nationalIdNumber": "784-1990-1234567-1",
"whatsappNumber": "+971500000000",
"telegramId": "@janedoe"
}
}
'import requests
url = "https://qa-api.endl.xyz/api/v0/customer"
payload = {
"email": "jane.doe@example.com",
"firstName": "Jane",
"lastName": "Doe",
"phone": "+971500000000",
"dateOfBirth": "01-01-1990",
"country": "ARE",
"nationality": "ARE",
"gender": "F",
"externalReferenceId": "partner-ref-001",
"questionnaire": { "sections": {
"profileDetails": { "items": {
"occupation": { "value": "15-1132" },
"annualSalary": { "value": "50000_100000" },
"accountPurpose": { "value": "payroll" },
"expectedMonthlyVolume": { "value": "0_10000" }
} },
"birthNationalityTaxI": { "items": {
"countryOfBirth": { "value": "ARE" },
"cityOfBirth": { "value": "Dubai" },
"nationalities": { "values": ["ARE"] },
"taxRegistrationsOuts": { "value": "no" }
} }
} },
"customFields": {
"nationalIdNumber": "784-1990-1234567-1",
"whatsappNumber": "+971500000000",
"telegramId": "@janedoe"
}
}
headers = {
"API-KEY": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'API-KEY': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
email: 'jane.doe@example.com',
firstName: 'Jane',
lastName: 'Doe',
phone: '+971500000000',
dateOfBirth: '01-01-1990',
country: 'ARE',
nationality: 'ARE',
gender: 'F',
externalReferenceId: 'partner-ref-001',
questionnaire: {
sections: {
profileDetails: {
items: {
occupation: {value: '15-1132'},
annualSalary: {value: '50000_100000'},
accountPurpose: {value: 'payroll'},
expectedMonthlyVolume: {value: '0_10000'}
}
},
birthNationalityTaxI: {
items: {
countryOfBirth: {value: 'ARE'},
cityOfBirth: {value: 'Dubai'},
nationalities: {values: ['ARE']},
taxRegistrationsOuts: {value: 'no'}
}
}
}
},
customFields: {
nationalIdNumber: '784-1990-1234567-1',
whatsappNumber: '+971500000000',
telegramId: '@janedoe'
}
})
};
fetch('https://qa-api.endl.xyz/api/v0/customer', 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://qa-api.endl.xyz/api/v0/customer",
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' => 'jane.doe@example.com',
'firstName' => 'Jane',
'lastName' => 'Doe',
'phone' => '+971500000000',
'dateOfBirth' => '01-01-1990',
'country' => 'ARE',
'nationality' => 'ARE',
'gender' => 'F',
'externalReferenceId' => 'partner-ref-001',
'questionnaire' => [
'sections' => [
'profileDetails' => [
'items' => [
'occupation' => [
'value' => '15-1132'
],
'annualSalary' => [
'value' => '50000_100000'
],
'accountPurpose' => [
'value' => 'payroll'
],
'expectedMonthlyVolume' => [
'value' => '0_10000'
]
]
],
'birthNationalityTaxI' => [
'items' => [
'countryOfBirth' => [
'value' => 'ARE'
],
'cityOfBirth' => [
'value' => 'Dubai'
],
'nationalities' => [
'values' => [
'ARE'
]
],
'taxRegistrationsOuts' => [
'value' => 'no'
]
]
]
]
],
'customFields' => [
'nationalIdNumber' => '784-1990-1234567-1',
'whatsappNumber' => '+971500000000',
'telegramId' => '@janedoe'
]
]),
CURLOPT_HTTPHEADER => [
"API-KEY: <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://qa-api.endl.xyz/api/v0/customer"
payload := strings.NewReader("{\n \"email\": \"jane.doe@example.com\",\n \"firstName\": \"Jane\",\n \"lastName\": \"Doe\",\n \"phone\": \"+971500000000\",\n \"dateOfBirth\": \"01-01-1990\",\n \"country\": \"ARE\",\n \"nationality\": \"ARE\",\n \"gender\": \"F\",\n \"externalReferenceId\": \"partner-ref-001\",\n \"questionnaire\": {\n \"sections\": {\n \"profileDetails\": {\n \"items\": {\n \"occupation\": {\n \"value\": \"15-1132\"\n },\n \"annualSalary\": {\n \"value\": \"50000_100000\"\n },\n \"accountPurpose\": {\n \"value\": \"payroll\"\n },\n \"expectedMonthlyVolume\": {\n \"value\": \"0_10000\"\n }\n }\n },\n \"birthNationalityTaxI\": {\n \"items\": {\n \"countryOfBirth\": {\n \"value\": \"ARE\"\n },\n \"cityOfBirth\": {\n \"value\": \"Dubai\"\n },\n \"nationalities\": {\n \"values\": [\n \"ARE\"\n ]\n },\n \"taxRegistrationsOuts\": {\n \"value\": \"no\"\n }\n }\n }\n }\n },\n \"customFields\": {\n \"nationalIdNumber\": \"784-1990-1234567-1\",\n \"whatsappNumber\": \"+971500000000\",\n \"telegramId\": \"@janedoe\"\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("API-KEY", "<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://qa-api.endl.xyz/api/v0/customer")
.header("API-KEY", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"email\": \"jane.doe@example.com\",\n \"firstName\": \"Jane\",\n \"lastName\": \"Doe\",\n \"phone\": \"+971500000000\",\n \"dateOfBirth\": \"01-01-1990\",\n \"country\": \"ARE\",\n \"nationality\": \"ARE\",\n \"gender\": \"F\",\n \"externalReferenceId\": \"partner-ref-001\",\n \"questionnaire\": {\n \"sections\": {\n \"profileDetails\": {\n \"items\": {\n \"occupation\": {\n \"value\": \"15-1132\"\n },\n \"annualSalary\": {\n \"value\": \"50000_100000\"\n },\n \"accountPurpose\": {\n \"value\": \"payroll\"\n },\n \"expectedMonthlyVolume\": {\n \"value\": \"0_10000\"\n }\n }\n },\n \"birthNationalityTaxI\": {\n \"items\": {\n \"countryOfBirth\": {\n \"value\": \"ARE\"\n },\n \"cityOfBirth\": {\n \"value\": \"Dubai\"\n },\n \"nationalities\": {\n \"values\": [\n \"ARE\"\n ]\n },\n \"taxRegistrationsOuts\": {\n \"value\": \"no\"\n }\n }\n }\n }\n },\n \"customFields\": {\n \"nationalIdNumber\": \"784-1990-1234567-1\",\n \"whatsappNumber\": \"+971500000000\",\n \"telegramId\": \"@janedoe\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://qa-api.endl.xyz/api/v0/customer")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["API-KEY"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"email\": \"jane.doe@example.com\",\n \"firstName\": \"Jane\",\n \"lastName\": \"Doe\",\n \"phone\": \"+971500000000\",\n \"dateOfBirth\": \"01-01-1990\",\n \"country\": \"ARE\",\n \"nationality\": \"ARE\",\n \"gender\": \"F\",\n \"externalReferenceId\": \"partner-ref-001\",\n \"questionnaire\": {\n \"sections\": {\n \"profileDetails\": {\n \"items\": {\n \"occupation\": {\n \"value\": \"15-1132\"\n },\n \"annualSalary\": {\n \"value\": \"50000_100000\"\n },\n \"accountPurpose\": {\n \"value\": \"payroll\"\n },\n \"expectedMonthlyVolume\": {\n \"value\": \"0_10000\"\n }\n }\n },\n \"birthNationalityTaxI\": {\n \"items\": {\n \"countryOfBirth\": {\n \"value\": \"ARE\"\n },\n \"cityOfBirth\": {\n \"value\": \"Dubai\"\n },\n \"nationalities\": {\n \"values\": [\n \"ARE\"\n ]\n },\n \"taxRegistrationsOuts\": {\n \"value\": \"no\"\n }\n }\n }\n }\n },\n \"customFields\": {\n \"nationalIdNumber\": \"784-1990-1234567-1\",\n \"whatsappNumber\": \"+971500000000\",\n \"telegramId\": \"@janedoe\"\n }\n}"
response = http.request(request)
puts response.read_body{
"userId": "6c4ba9af-978a-45ff-953f-729c593f14af",
"userType": "INDIVIDUAL",
"status": "INITIATED",
"sumsubApplicantId": "6a99986facbfab05e54c5719"
}{
"errors": [
{
"code": "400",
"message": "firstName is required",
"name": "PartnerOnboardingCreate failed to process"
},
{
"code": "400",
"message": "country must be an ISO 3166-1 alpha-3 code (e.g. ARE)",
"name": "PartnerOnboardingCreate failed to process"
}
]
}{
"code": "401",
"message": "Authentication Failed!",
"name": "PartnerOnboarding failed to process"
}{
"code": "403",
"message": "Onboarding is not permitted for this country",
"name": "PartnerOnboardingCreate failed to process"
}{
"data": null,
"code": 429,
"message": "Rate limit exceeded, please retry later",
"status": "Error",
"errors": [
{
"code": "429",
"message": "Rate limit exceeded, please retry later",
"field": "Rate limit exceeded, please retry later"
}
]
}{
"errors": [
{
"code": "503",
"message": "Service temporarily unavailable, please try again",
"name": "Downstream service error"
}
]
}Authorizations
Your partner API key. The key must carry the onboarding permission.
Body
- Option 1
- Option 2
- Option 3
Unique across the partner's customers.
100100DD-MM-YYYY. Must be a real past date, and the customer must be at least 18.
ISO 3166-1 alpha-3, e.g. ARE.
Sections of items. A single-select item uses { "value": "..." }; a multi-select uses { "values": [ ... ] }. Every accepted code is listed on the questionnaire reference page.
Show child attributes
Show child attributes
Show child attributes
Show child attributes
50ISO alpha-3. Defaults to country.
M, F ISO alpha-3.
Your own reference. Echoed back, not stored.