Skip to main content
Post a decisioned KYC verification result performed by an external identity provider. Fluz validates the payload, creates a verification record and updates the user’s KYC status according to the result. Requires the VERIFY_KYC scope on a user access token. Use this mutation when your platform runs its own KYC and pushes the outcome to Fluz. To have Fluz run the verification instead, use verifyUserInformation or verifyUserPrefillInformation.
Send this mutation to the dedicated secure ingestion endpoint, not the standard API host. This endpoint securely tokenizes PII data like person.ssn in transit. A request whose SSN or other PII data arrive untokenized is rejected. Always pass the arguments as GraphQL variables; values inlined into the query document cannot be tokenized.
  • Staging: https://secure.transactional-graph.staging.fluzapp.com/api/v1/graphql
  • Production: provided during onboarding

Key behaviors

  • Idempotency. Submissions are idempotent on externalVerificationId: replaying the same identifier returns the original result and writes nothing. A re-decisioned verification must be submitted with a new identifier.
  • Only decisioned results. decision must be PASSED or FAILED — do not send pending or undecisioned verifications.
  • KYC status transitions. A PASSED result moves an unverified user to PASS (US address) or PASS_INTERNATIONAL (non-US address). If the user is already verified, the verification is still recorded for audit but the status is never changed — the response message notes that the existing status was preserved. A FAILED result is recorded and leaves the status untouched.
  • Photo URLs must be HTTPS and remain fetchable for at least 24 hours after delivery — Fluz fetches and stores the images.

Arguments

String!
required
Version of the payload contract. Currently "1.0".
String!
required
The external KYC provider that performed the verification: IDOLOGY, OSCILAR, PERSONA, or CUSTOM for a provider not listed.
String!
required
The provider’s globally unique identifier for this verification attempt (for example a Persona inquiry id). This is the idempotency key — one attempt, one id, forever.
String!
required
The final decision for this verification attempt: PASSED or FAILED.
String
Human-readable reason or rule that produced the decision; recorded on the KYC status log when present.
String
When the decision was made, as an ISO 8601 / RFC 3339 timestamp (UTC preferred). Defaults to the time of ingestion.
JSON!
required
The verified identity, exactly as established by the provider (not raw user input).
JSON!
required
The provider verifications backing the decision. At least one of document, ssn, or database is required. Presence is semantic: a ssn section means the SSN was validated against an authoritative source; person.ssn without a ssn section means the SSN was merely collected.
JSON
Freeform provider context for audit (template ids, partner reference ids, original provider identifiers). Must not contain clear PII beyond what the typed fields already carry.

Returns

PostKycVerificationResponse — Response type for the postKycVerification mutation.

Example

Variables
Response