Update UPA display profile
curl --request PUT \
--url https://prod-api.stableyard.fi/v2/accounts/{accountId}/display-profile \
--header 'Authorization: Basic <encoded-value>' \
--header 'Content-Type: application/json' \
--data '
{
"displayName": "Acme Downtown",
"logoUrl": "https://cdn.example.com/acme-downtown.png",
"expectedVersion": 0,
"reason": "Update the payer-facing store identity."
}
'import requests
url = "https://prod-api.stableyard.fi/v2/accounts/{accountId}/display-profile"
payload = {
"displayName": "Acme Downtown",
"logoUrl": "https://cdn.example.com/acme-downtown.png",
"expectedVersion": 0,
"reason": "Update the payer-facing store identity."
}
headers = {
"Authorization": "Basic <encoded-value>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {Authorization: 'Basic <encoded-value>', 'Content-Type': 'application/json'},
body: JSON.stringify({
displayName: 'Acme Downtown',
logoUrl: 'https://cdn.example.com/acme-downtown.png',
expectedVersion: 0,
reason: 'Update the payer-facing store identity.'
})
};
fetch('https://prod-api.stableyard.fi/v2/accounts/{accountId}/display-profile', 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://prod-api.stableyard.fi/v2/accounts/{accountId}/display-profile",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'displayName' => 'Acme Downtown',
'logoUrl' => 'https://cdn.example.com/acme-downtown.png',
'expectedVersion' => 0,
'reason' => 'Update the payer-facing store identity.'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Basic <encoded-value>",
"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://prod-api.stableyard.fi/v2/accounts/{accountId}/display-profile"
payload := strings.NewReader("{\n \"displayName\": \"Acme Downtown\",\n \"logoUrl\": \"https://cdn.example.com/acme-downtown.png\",\n \"expectedVersion\": 0,\n \"reason\": \"Update the payer-facing store identity.\"\n}")
req, _ := http.NewRequest("PUT", url, payload)
req.Header.Add("Authorization", "Basic <encoded-value>")
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.put("https://prod-api.stableyard.fi/v2/accounts/{accountId}/display-profile")
.header("Authorization", "Basic <encoded-value>")
.header("Content-Type", "application/json")
.body("{\n \"displayName\": \"Acme Downtown\",\n \"logoUrl\": \"https://cdn.example.com/acme-downtown.png\",\n \"expectedVersion\": 0,\n \"reason\": \"Update the payer-facing store identity.\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://prod-api.stableyard.fi/v2/accounts/{accountId}/display-profile")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["Authorization"] = 'Basic <encoded-value>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"displayName\": \"Acme Downtown\",\n \"logoUrl\": \"https://cdn.example.com/acme-downtown.png\",\n \"expectedVersion\": 0,\n \"reason\": \"Update the payer-facing store identity.\"\n}"
response = http.request(request)
puts response.read_body{
"account": {
"id": "acct_123",
"externalUserId": "user_123",
"subjectType": "individual",
"status": "active",
"paymentAcceptance": {
"publicReceiveEnabled": false,
"version": 1
},
"metadata": {},
"createdAt": "2026-08-28T10:00:00.000Z",
"updatedAt": "2026-08-28T10:00:00.000Z"
},
"paymentHandle": {
"id": "handle_123",
"accountId": "acct_123",
"namespace": "partner",
"handle": "alice",
"status": "active",
"createdAt": "2026-08-28T10:00:00.000Z",
"updatedAt": "2026-08-28T10:00:00.000Z"
},
"connectedWallets": [
{
"id": "wallet_123",
"accountId": "acct_123",
"kind": "evm",
"chainId": 42161,
"address": "0x1111111111111111111111111111111111111111",
"label": "Connected wallet",
"status": "active",
"ownershipVerificationStatus": "unverified",
"ownershipVerificationMethod": "eip712_signature",
"settlementProfileId": "settle_123",
"createdAt": "2026-08-28T10:00:00.000Z",
"updatedAt": "2026-08-28T10:00:00.000Z"
}
],
"settlementProfile": {
"id": "settle_123",
"accountId": "acct_123",
"version": 2,
"connectedWalletId": "wallet_123",
"settlementDestinationId": "destination_123",
"status": "active",
"destinationType": "connected_wallet",
"chainId": 42161,
"destinationAddress": "0x1111111111111111111111111111111111111111",
"assetSymbol": "USDC",
"tokenAddress": "0xaf88d065e77c8cC2239327C5EDb3A432268e5831",
"snapshot": {}
}
}{
"error": {
"code": "bad_request",
"message": "The request is invalid"
}
}{
"error": {
"code": "unauthorized",
"message": "Authentication is required"
}
}{
"error": {
"code": "forbidden",
"message": "The credential does not allow this operation"
}
}{
"error": {
"code": "not_found",
"message": "The resource was not found"
}
}{
"error": {
"code": "idempotency_conflict",
"message": "The Idempotency-Key was already used with a different request"
}
}{
"error": {
"code": "chain_config_missing",
"message": "The requested network is not configured for this environment"
}
}{
"error": {
"code": "rate_limited",
"message": "Too many requests"
}
}Universal Payment Accounts
Update display profile
Set the name and logo payers see for this UPA.
PUT
/
v2
/
accounts
/
{accountId}
/
display-profile
Update UPA display profile
curl --request PUT \
--url https://prod-api.stableyard.fi/v2/accounts/{accountId}/display-profile \
--header 'Authorization: Basic <encoded-value>' \
--header 'Content-Type: application/json' \
--data '
{
"displayName": "Acme Downtown",
"logoUrl": "https://cdn.example.com/acme-downtown.png",
"expectedVersion": 0,
"reason": "Update the payer-facing store identity."
}
'import requests
url = "https://prod-api.stableyard.fi/v2/accounts/{accountId}/display-profile"
payload = {
"displayName": "Acme Downtown",
"logoUrl": "https://cdn.example.com/acme-downtown.png",
"expectedVersion": 0,
"reason": "Update the payer-facing store identity."
}
headers = {
"Authorization": "Basic <encoded-value>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {Authorization: 'Basic <encoded-value>', 'Content-Type': 'application/json'},
body: JSON.stringify({
displayName: 'Acme Downtown',
logoUrl: 'https://cdn.example.com/acme-downtown.png',
expectedVersion: 0,
reason: 'Update the payer-facing store identity.'
})
};
fetch('https://prod-api.stableyard.fi/v2/accounts/{accountId}/display-profile', 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://prod-api.stableyard.fi/v2/accounts/{accountId}/display-profile",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'displayName' => 'Acme Downtown',
'logoUrl' => 'https://cdn.example.com/acme-downtown.png',
'expectedVersion' => 0,
'reason' => 'Update the payer-facing store identity.'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Basic <encoded-value>",
"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://prod-api.stableyard.fi/v2/accounts/{accountId}/display-profile"
payload := strings.NewReader("{\n \"displayName\": \"Acme Downtown\",\n \"logoUrl\": \"https://cdn.example.com/acme-downtown.png\",\n \"expectedVersion\": 0,\n \"reason\": \"Update the payer-facing store identity.\"\n}")
req, _ := http.NewRequest("PUT", url, payload)
req.Header.Add("Authorization", "Basic <encoded-value>")
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.put("https://prod-api.stableyard.fi/v2/accounts/{accountId}/display-profile")
.header("Authorization", "Basic <encoded-value>")
.header("Content-Type", "application/json")
.body("{\n \"displayName\": \"Acme Downtown\",\n \"logoUrl\": \"https://cdn.example.com/acme-downtown.png\",\n \"expectedVersion\": 0,\n \"reason\": \"Update the payer-facing store identity.\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://prod-api.stableyard.fi/v2/accounts/{accountId}/display-profile")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["Authorization"] = 'Basic <encoded-value>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"displayName\": \"Acme Downtown\",\n \"logoUrl\": \"https://cdn.example.com/acme-downtown.png\",\n \"expectedVersion\": 0,\n \"reason\": \"Update the payer-facing store identity.\"\n}"
response = http.request(request)
puts response.read_body{
"account": {
"id": "acct_123",
"externalUserId": "user_123",
"subjectType": "individual",
"status": "active",
"paymentAcceptance": {
"publicReceiveEnabled": false,
"version": 1
},
"metadata": {},
"createdAt": "2026-08-28T10:00:00.000Z",
"updatedAt": "2026-08-28T10:00:00.000Z"
},
"paymentHandle": {
"id": "handle_123",
"accountId": "acct_123",
"namespace": "partner",
"handle": "alice",
"status": "active",
"createdAt": "2026-08-28T10:00:00.000Z",
"updatedAt": "2026-08-28T10:00:00.000Z"
},
"connectedWallets": [
{
"id": "wallet_123",
"accountId": "acct_123",
"kind": "evm",
"chainId": 42161,
"address": "0x1111111111111111111111111111111111111111",
"label": "Connected wallet",
"status": "active",
"ownershipVerificationStatus": "unverified",
"ownershipVerificationMethod": "eip712_signature",
"settlementProfileId": "settle_123",
"createdAt": "2026-08-28T10:00:00.000Z",
"updatedAt": "2026-08-28T10:00:00.000Z"
}
],
"settlementProfile": {
"id": "settle_123",
"accountId": "acct_123",
"version": 2,
"connectedWalletId": "wallet_123",
"settlementDestinationId": "destination_123",
"status": "active",
"destinationType": "connected_wallet",
"chainId": 42161,
"destinationAddress": "0x1111111111111111111111111111111111111111",
"assetSymbol": "USDC",
"tokenAddress": "0xaf88d065e77c8cC2239327C5EDb3A432268e5831",
"snapshot": {}
}
}{
"error": {
"code": "bad_request",
"message": "The request is invalid"
}
}{
"error": {
"code": "unauthorized",
"message": "Authentication is required"
}
}{
"error": {
"code": "forbidden",
"message": "The credential does not allow this operation"
}
}{
"error": {
"code": "not_found",
"message": "The resource was not found"
}
}{
"error": {
"code": "idempotency_conflict",
"message": "The Idempotency-Key was already used with a different request"
}
}{
"error": {
"code": "chain_config_missing",
"message": "The requested network is not configured for this environment"
}
}{
"error": {
"code": "rate_limited",
"message": "Too many requests"
}
}Send
displayName, an optional logoUrl, a reason, and the account’s current displayProfile.version (from the account bundle) as expectedVersion. If another request changed the profile in the meantime, the call returns 409.
Changes apply to future Payments. Existing Payments keep the recipient details captured when they were created.Authorizations
HTTP Basic auth. Username is the Stableyard app ID. Password is the app secret. The optional Stableyard-Version request header must match the environment pin.
Headers
Optional contract-version assertion. Omit it to use the app environment's pinned version. A different supported version is accepted only after that environment is explicitly migrated.
Available options:
2026-09-09 Path Parameters
Canonical account id returned by the Accounts API.
Example:
"acct_123"
Body
application/json
Required string length:
1 - 120Example:
"Acme Downtown"
Use 0 when setting the profile for the first time.
Required range:
x >= 0Required string length:
10 - 500Example:
"Update the payer-facing store identity."
Maximum string length:
2048Example:
"https://cdn.example.com/acme-downtown.png"