Create participant
Create a participant: your customer who sends money with Moov Money. The
externalID is unique within your provider. Creating one that already
exists returns 201 with the existing participantID and leaves the
stored record unchanged.
A participant is scoped to one provider. The same person can be a
participant of more than one provider; each provider keeps its own
externalID and record.
Creation is asynchronous. The 201 response returns the assigned
participantID and echoes the identity fields from the request
(externalID, name fields, dateOfBirth, address, phones,
emails). Optional fundingSources on the request are persisted but are
not returned in the 201 body. Read the canonical record, including
status, at
GET /providers/{providerID}/participants/{participantID} once creation
completes.
Send an X-Idempotency-Key header so a retried create is processed once.
The server echoes that header on the response. The key is retained for
24 hours after the create completes. Replaying the same key with the
same request body within that window returns the original 201
response. Replaying it with a different body within that window
returns a 409 with error code idempotency-key-reused. After the
window, the same key starts a new create. Returns a 409 with error
code idempotency-request-in-progress when a request with this key is
still running. Returns 400 when the header is missing or malformed.
Auth: API key or bearer token. Scoped to the calling provider. Returns 422 when the body fails validation.
curl -X POST https://api.moov.money/providers/{providerID}/participants \
-u "$MOOV_API_KEY_ID:$MOOV_API_KEY_SECRET" \
-H "X-Moov-Version: v2026.10.00" \
-H "X-Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{
"address": {
"addressLine1": "123 Main St",
"addressLine2": "Apt 4B",
"city": "San Francisco",
"country": "US",
"postalCode": "94105",
"stateOrProvince": "CA"
},
"emails": [
"[email protected]"
],
"externalID": "customer-abc-123",
"familyName": "Smith",
"fundingSources": [
{
"displayName": "First National Checking",
"fundingType": "bank_account",
"last4": "4321",
"providerSourceID": "src_01HP5J9ZKQT4RXP8M2VYBN3D"
}
],
"givenName": "Jane",
"phones": [
{
"countryCode": "1",
"number": "5555550101"
}
]
}'{
"address": {
"addressLine1": "123 Main St",
"addressLine2": "Apt 4B",
"city": "San Francisco",
"country": "US",
"postalCode": "94105",
"stateOrProvince": "CA"
},
"emails": [
"[email protected]"
],
"externalID": "customer-abc-123",
"familyName": "Smith",
"givenName": "Jane",
"participantID": "3v2whagmwvbujhwbt7v3nl6ffq_user",
"phones": [
{
"countryCode": "1",
"number": "5555550101"
}
]
}Response body application/problem+json
application/problem+json.
From v2026.10.00, every error response that has a body uses this schema.type
string
requiredhttps://api.moov.money/errors#<code> (for
example invalid-request, idempotency-key-reused, or
idempotency-request-in-progress). Treat the value as
an opaque constant and do not fetch it. about:blank means the HTTP
status code says everything there is to know.title
string
requiredstatus
integer<int32>
requireddetail
stringinstance
stringerrors
array<object>Show child attributes
errors[]
pointer
string
requireddetail
string
requiredResponse body application/problem+json
application/problem+json.
From v2026.10.00, every error response that has a body uses this schema.type
string
requiredhttps://api.moov.money/errors#<code> (for
example invalid-request, idempotency-key-reused, or
idempotency-request-in-progress). Treat the value as
an opaque constant and do not fetch it. about:blank means the HTTP
status code says everything there is to know.title
string
requiredstatus
integer<int32>
requireddetail
stringinstance
stringerrors
array<object>Show child attributes
errors[]
pointer
string
requireddetail
string
requiredResponse body application/problem+json
application/problem+json.
From v2026.10.00, every error response that has a body uses this schema.type
string
requiredhttps://api.moov.money/errors#<code> (for
example invalid-request, idempotency-key-reused, or
idempotency-request-in-progress). Treat the value as
an opaque constant and do not fetch it. about:blank means the HTTP
status code says everything there is to know.title
string
requiredstatus
integer<int32>
requireddetail
stringinstance
stringerrors
array<object>Show child attributes
errors[]
pointer
string
requireddetail
string
requiredHeaders
X-Moov-Version
stringv2026.10.00). When omitted, the server applies its default version.X-Idempotency-Key
string
requiredPath parameters
providerID
string
requiredRequest
externalID must be unique within your provider scope. Creating a
participant with an externalID that already exists returns 201 with the
existing participantID and does not update the record.externalID
string
requiredgivenName
string
requiredmiddleName
stringfamilyName
string
requirednickName
stringBob for Robert.dateOfBirth
string<date>YYYY-MM-DD. Used for identity checks,
such as flipping an OFAC hit.address
object
requiredShow child attributes
address
addressLine1
string
requiredaddressLine2
stringcity
string
requiredstateOrProvince
string
requiredpostalCode
string
requiredcountry
string
requiredphones
array<object>
requiredShow child attributes
phones[]
countryCode
string
requirednumber
string
requiredemails
array<string>fundingSources
array<object>fundingType and providerSourceID must be unique in
the array. Re-sending the same source on a later create converges to the
existing record. These values are not returned in the 201 body.Show child attributes
fundingSources[]
fundingType
string<enum>
requiredcard,
bank_accountproviderSourceID
string
[1 to 256] characters
requireddisplayName
string
[1 to 256] characters
requiredlast4
stringcard, or the bank account number for bank_account. Rendered with displayName in the UI. At most 4 characters.Response
participantID and echoes the accepted request. Read the canonical
record at the get-participant endpoint once creation completes.externalID
string
requiredgivenName
string
requiredmiddleName
stringfamilyName
string
requirednickName
stringBob for Robert.dateOfBirth
string<date>YYYY-MM-DD. Used for identity checks,
such as flipping an OFAC hit.address
object
requiredShow child attributes
address
addressLine1
string
requiredaddressLine2
stringcity
string
requiredstateOrProvince
string
requiredpostalCode
string
requiredcountry
string
requiredphones
array<object>
requiredShow child attributes
phones[]
countryCode
string
requirednumber
string
requiredemails
array<string>participantID
string
required