Create credential reference
Create a pending private_key_jwt credential reference for your owner account.
Moov Money determines whether the owner is an FI or integrator from the account.
You do not send an owner type. An account registered as both returns 409.
Registration: create the reference, give its returned jwksURL to the
receiver as-is; do not construct the opaque URL. Wait for the receiver to
issue a client ID, then complete the reference with that client ID.
Returns 201 with the pending reference. Returns 400 when the request is invalid, 401 when your credentials are missing or invalid, 403 when the authenticated caller is not the owner account, 404 when the owner account is not found, and 409 when the owner account is both an FI and an integrator.
Auth: API key or bearer token. Requires the moov-money-config.write scope
on the owner account.
curl -X POST https://api.moov.money/credential-owners/{ownerAccountID}/credential-references \
-u "$MOOV_API_KEY_ID:$MOOV_API_KEY_SECRET" \
-H "X-Moov-Version: v2026.10.00" \
-H "Content-Type: application/json" \
-d '{
"clientAuthenticationMethod": "private_key_jwt",
"keyAlgorithm": "ES256"
}'{
"clientAuthenticationMethod": "private_key_jwt",
"keys": [
{
"algorithm": "ES256",
"state": "active"
}
],
"ownerAccountID": "acc_01HF5J9ZKQT4RXP8M2VYBN3D",
"ownerType": "fi",
"state": "pending"
}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
requiredHeaders
X-Moov-Version
stringv2026.10.00). When omitted, the server applies its default version.Path parameters
ownerAccountID
string
requiredRequest
clientAuthenticationMethod
string<enum>
requiredprivate_key_jwt is supported.private_key_jwtkeyAlgorithm
string<enum>ES256.ES256,
PS256,
RS256Response
credentialReferenceID
string
requiredownerType
string<enum>
requiredfi,
integratorownerAccountID
string
requiredclientAuthenticationMethod
string<enum>
requiredprivate_key_jwtstate
string<enum>
requiredpending, active, or revoked.pending,
active,
revokedclientID
string
requiredtokenURL
string
requiredscopes
array | null
requiredaudience
stringresource
stringjwksURL
string
requiredkeys
array<object>
requiredShow child attributes
keys[]
keyID
string
requiredalgorithm
string<enum>
requiredES256,
PS256,
RS256state
string<enum>
requiredactive or next.active,
nextcreatedOn
string<date-time>
requiredcreatedOn
string<date-time>
requiredupdatedOn
string<date-time>
requiredrevokedOn
string<date-time> | null
required