curl -X POST "https://api.services.payward.com/v1/users/AA45N8G4MLDYWAR7/accounts" \
-H "API-Key: $PWS_API_KEY" \
-H "API-Nonce: $PWS_API_NONCE" \
-H "API-Sign: $PWS_API_SIGN" \
-H "Content-Type: application/json" \
-d '{
"name": "Savings",
"description": "Long-term savings balance",
"notes": "Opened for the 2026 savings product pilot"
}'import requests
url = "https://api.services.payward.com/v1/users/{user_id}/accounts"
payload = {
"name": "Savings",
"description": "Long-term savings balance",
"notes": "Opened for the 2026 savings product pilot"
}
headers = {
"API-Key": "<api-key>",
"API-Sign": "<api-key>",
"API-Nonce": "<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>',
'API-Sign': '<api-key>',
'API-Nonce': '<api-key>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
name: 'Savings',
description: 'Long-term savings balance',
notes: 'Opened for the 2026 savings product pilot'
})
};
fetch('https://api.services.payward.com/v1/users/{user_id}/accounts', 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.services.payward.com/v1/users/{user_id}/accounts",
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([
'name' => 'Savings',
'description' => 'Long-term savings balance',
'notes' => 'Opened for the 2026 savings product pilot'
]),
CURLOPT_HTTPHEADER => [
"API-Key: <api-key>",
"API-Nonce: <api-key>",
"API-Sign: <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.services.payward.com/v1/users/{user_id}/accounts"
payload := strings.NewReader("{\n \"name\": \"Savings\",\n \"description\": \"Long-term savings balance\",\n \"notes\": \"Opened for the 2026 savings product pilot\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("API-Key", "<api-key>")
req.Header.Add("API-Sign", "<api-key>")
req.Header.Add("API-Nonce", "<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.services.payward.com/v1/users/{user_id}/accounts")
.header("API-Key", "<api-key>")
.header("API-Sign", "<api-key>")
.header("API-Nonce", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"Savings\",\n \"description\": \"Long-term savings balance\",\n \"notes\": \"Opened for the 2026 savings product pilot\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.services.payward.com/v1/users/{user_id}/accounts")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["API-Key"] = '<api-key>'
request["API-Sign"] = '<api-key>'
request["API-Nonce"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"Savings\",\n \"description\": \"Long-term savings balance\",\n \"notes\": \"Opened for the 2026 savings product pilot\"\n}"
response = http.request(request)
puts response.read_body{
"data": {
"id": "WC9RDEFHPSGLXRVX"
}
}{
"error": {
"type": "<string>",
"status": 400,
"instance": "<string>",
"code": "bad_request",
"doc_url": "<string>",
"causes": [
{
"field": "<string>",
"message": "<string>"
}
]
}
}{
"error": {
"type": "<string>",
"status": 401,
"instance": "<string>",
"code": "unauthenticated",
"doc_url": "<string>",
"causes": [
{}
]
}
}{
"error": {
"type": "<string>",
"status": 403,
"instance": "<string>",
"code": "forbidden",
"doc_url": "<string>",
"causes": [
{}
]
}
}{
"error": {
"type": "<string>",
"status": 429,
"instance": "<string>",
"code": "resource_exhausted",
"doc_url": "<string>",
"causes": [
{}
]
}
}{
"error": {
"type": "<string>",
"status": 500,
"instance": "<string>",
"code": "internal",
"doc_url": "<string>",
"causes": [
{}
]
}
}{
"error": {
"type": "<string>",
"status": 501,
"instance": "<string>",
"code": "unimplemented",
"doc_url": "<string>",
"causes": [
{}
]
}
}{
"error": {
"type": "<string>",
"status": 503,
"instance": "<string>",
"code": "unavailable",
"doc_url": "<string>",
"causes": [
{}
]
}
}{
"error": {
"type": "<string>",
"status": 504,
"instance": "<string>",
"code": "deadline_exceeded",
"doc_url": "<string>",
"causes": [
{}
]
}
}Create User Account
Create an additional account for an existing user.
Every user is created with one account. Use this endpoint to add further accounts — for example to separate a user’s savings from their day-to-day balance. name is required; description and notes are optional and stored verbatim for your own reference.
curl -X POST "https://api.services.payward.com/v1/users/AA45N8G4MLDYWAR7/accounts" \
-H "API-Key: $PWS_API_KEY" \
-H "API-Nonce: $PWS_API_NONCE" \
-H "API-Sign: $PWS_API_SIGN" \
-H "Content-Type: application/json" \
-d '{
"name": "Savings",
"description": "Long-term savings balance",
"notes": "Opened for the 2026 savings product pilot"
}'import requests
url = "https://api.services.payward.com/v1/users/{user_id}/accounts"
payload = {
"name": "Savings",
"description": "Long-term savings balance",
"notes": "Opened for the 2026 savings product pilot"
}
headers = {
"API-Key": "<api-key>",
"API-Sign": "<api-key>",
"API-Nonce": "<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>',
'API-Sign': '<api-key>',
'API-Nonce': '<api-key>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
name: 'Savings',
description: 'Long-term savings balance',
notes: 'Opened for the 2026 savings product pilot'
})
};
fetch('https://api.services.payward.com/v1/users/{user_id}/accounts', 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.services.payward.com/v1/users/{user_id}/accounts",
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([
'name' => 'Savings',
'description' => 'Long-term savings balance',
'notes' => 'Opened for the 2026 savings product pilot'
]),
CURLOPT_HTTPHEADER => [
"API-Key: <api-key>",
"API-Nonce: <api-key>",
"API-Sign: <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.services.payward.com/v1/users/{user_id}/accounts"
payload := strings.NewReader("{\n \"name\": \"Savings\",\n \"description\": \"Long-term savings balance\",\n \"notes\": \"Opened for the 2026 savings product pilot\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("API-Key", "<api-key>")
req.Header.Add("API-Sign", "<api-key>")
req.Header.Add("API-Nonce", "<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.services.payward.com/v1/users/{user_id}/accounts")
.header("API-Key", "<api-key>")
.header("API-Sign", "<api-key>")
.header("API-Nonce", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"Savings\",\n \"description\": \"Long-term savings balance\",\n \"notes\": \"Opened for the 2026 savings product pilot\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.services.payward.com/v1/users/{user_id}/accounts")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["API-Key"] = '<api-key>'
request["API-Sign"] = '<api-key>'
request["API-Nonce"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"Savings\",\n \"description\": \"Long-term savings balance\",\n \"notes\": \"Opened for the 2026 savings product pilot\"\n}"
response = http.request(request)
puts response.read_body{
"data": {
"id": "WC9RDEFHPSGLXRVX"
}
}{
"error": {
"type": "<string>",
"status": 400,
"instance": "<string>",
"code": "bad_request",
"doc_url": "<string>",
"causes": [
{
"field": "<string>",
"message": "<string>"
}
]
}
}{
"error": {
"type": "<string>",
"status": 401,
"instance": "<string>",
"code": "unauthenticated",
"doc_url": "<string>",
"causes": [
{}
]
}
}{
"error": {
"type": "<string>",
"status": 403,
"instance": "<string>",
"code": "forbidden",
"doc_url": "<string>",
"causes": [
{}
]
}
}{
"error": {
"type": "<string>",
"status": 429,
"instance": "<string>",
"code": "resource_exhausted",
"doc_url": "<string>",
"causes": [
{}
]
}
}{
"error": {
"type": "<string>",
"status": 500,
"instance": "<string>",
"code": "internal",
"doc_url": "<string>",
"causes": [
{}
]
}
}{
"error": {
"type": "<string>",
"status": 501,
"instance": "<string>",
"code": "unimplemented",
"doc_url": "<string>",
"causes": [
{}
]
}
}{
"error": {
"type": "<string>",
"status": 503,
"instance": "<string>",
"code": "unavailable",
"doc_url": "<string>",
"causes": [
{}
]
}
}{
"error": {
"type": "<string>",
"status": 504,
"instance": "<string>",
"code": "deadline_exceeded",
"doc_url": "<string>",
"causes": [
{}
]
}
}Authorizations
Your public API key. Identifies the partner making the request.
HMAC signature over the request, computed with your private key.
Monotonically increasing nonce included in the request signature.
Path Parameters
ID of the user the new account belongs to. For partners operating in the B2B2C model, this is the Sub-User the request is acting on behalf of.
14 - 42Body
Human-friendly name for the account. Payward stores this verbatim and does not interpret it. Names are not required to be unique for a user.
4 - 64"Savings"
Optional description for the account.
1 - 128"Long-term savings balance"
Response
Created
Created account payload.
Show child attributes
Show child attributes