Suspend participant
Suspend your provider’s relationship with a participant. From the next
attempt, the participant cannot send payouts or create requests through
your provider, including from a session that is already open. Money that
a payer sends for one of their existing requests is not paid out to them
until you reactivate them or the request expires. Signing in, payments
that already started, reversals, and refunds are not affected. The
suspension does not change the global participant status or the
participant’s relationships with other providers.
Send the relationship.versionID from your latest participant read as
expectedVersionID. Returns a 409 version-conflict problem when the
value is stale. Read the participant again before you retry. Returns a
409 state-conflict problem when the participant is already suspended.
Both 409 problems use the same status code, so check type to tell them
apart.
Returns 201 with the committed relationship state. Returns 422 when
reasonCode or expectedVersionID is missing, when reasonCode is
unrecognized, when reasonCode is other and note is missing, or when
note is empty or longer than 512 characters. Returns 404 when neither
key matches a participant within your provider.
Send an X-Idempotency-Key header so a retried suspension is processed
once. The server echoes that header on the response. Replaying the same
key with the same request body within 24 hours returns the original 201
response. Replaying it with a different body returns a 409 with error
code idempotency-key-reused. 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.
curl -X POST https://api.moov.money/providers/{providerID}/participants/{participantID}/suspensions \
-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 '{
"expectedVersionID": "relationship-v3",
"note": "Unusual activity reported by the customer",
"reasonCode": "suspected-fraud"
}'{
"relationship": {
"actor": {
"applicationKeyID": "5f0c3b2a-8d4e-4b7a-9c1f-2e6d7a8b9c0d",
"callingAccountID": "acc_01HF5J9ZKQT4RXP8M2VYBN3D",
"kind": "user",
"userID": "ec7e1848-dc80-4ab0-8827-dd7fc0737b43"
},
"externalID": "customer-abc-123",
"note": "Unusual activity reported by the customer",
"participantID": "3v2whagmwvbujhwbt7v3nl6ffq_user",
"reasonCode": "suspected-fraud",
"suspended": false,
"suspendedOn": "2026-10-06T16:00:00Z",
"versionID": "relationship-v3"
}
}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.X-Idempotency-Key
string
requiredPath parameters
providerID
string
requiredparticipantID
string
requiredparticipantID, or your externalID for them. Both
resolve to the same participant.Request
reasonCode of other requires a note.reasonCode
string<enum>
requiredsuspected-fraud,
account-compromise,
customer-request,
compliance-review,
legal-hold,
policy-violation,
othernote
string
[1 to 512] charactersreasonCode is other.expectedVersionID
string
requiredrelationship.versionID from your latest participant read. A stale value returns a 409 version-conflict problem.Response
relationship.relationship
object
requiredShow child attributes
relationship
participantID
string
requiredexternalID
string
requiredsuspended
boolean
requiredversionID
string
requiredexpectedVersionID
on your next suspension or reactivation. It is not a relationship ID.suspendedOn
string<date-time>reasonCode
string<enum>suspended is true.suspected-fraud,
account-compromise,
customer-request,
compliance-review,
legal-hold,
policy-violation,
othernote
stringactor
objectShow child attributes
relationship.actor
kind
string<enum>
requireduser,
application,
systemuserID
stringkind is user. Omitted when kind is application or system.applicationKeyID
stringkind is application. Omitted when kind is user or system.callingAccountID
stringkind is user or application. Omitted when kind is system.