Skip to content
Get started

Review

Paykeys are secure tokens that link verified customer identities to their bank accounts. Each Paykey includes built-in balance checking, fraud detection through LSTM machine learning models, and can be reused for subscriptions and recurring payments without storing sensitive data. Paykeys eliminate fraud by ensuring the person initiating payment owns the funding account.

Update a paykey's status
paykeys.review.decision(strid, ReviewDecisionParams**kwargs) -> PaykeyV1
PATCH/v1/paykeys/{id}/review
Get paykey review details
paykeys.review.get(strid, ReviewGetParams**kwargs) -> ReviewGetResponse
GET/v1/paykeys/{id}/review
Update a paykey's identity review decision
paykeys.review.refresh_review(strid, ReviewRefreshReviewParams**kwargs) -> PaykeyV1
PUT/v1/paykeys/{id}/refresh_review
ModelsExpand Collapse
class ReviewGetResponse:
data: Data
paykey_details: DataPaykeyDetails
id: str

Unique identifier for the paykey.

formatuuid
config: DataPaykeyDetailsConfig
processing_method: Optional[Literal["inline", "background", "skip"]]
One of the following:
"inline"
"background"
"skip"
sandbox_outcome: Optional[Literal["standard", "active", "rejected", "review"]]
One of the following:
"standard"
"active"
"rejected"
"review"
created_at: datetime

Timestamp of when the paykey was created.

formatdate-time
label: str

Human-readable label used to represent this paykey in a UI.

paykey: str

The tokenized paykey value. This value is used to create payments and should be stored securely.

source: Literal["bank_account", "straddle", "mx", 3 more]
One of the following:
"bank_account"
"straddle"
"mx"
"plaid"
"tan"
"quiltt"
status: Literal["pending", "active", "inactive", 3 more]
One of the following:
"pending"
"active"
"inactive"
"rejected"
"review"
"blocked"
updated_at: datetime

Timestamp of the most recent update to the paykey.

formatdate-time
balance: Optional[DataPaykeyDetailsBalance]
status: Literal["pending", "completed", "failed"]
One of the following:
"pending"
"completed"
"failed"
account_balance: Optional[int]

Account Balance when last retrieved

formatint32
updated_at: Optional[datetime]

Last time account balance was updated.

formatdate-time
bank_data: Optional[DataPaykeyDetailsBankData]
account_number: str

Bank account number. This value is masked by default for security reasons. Use the /unmask endpoint to access the unmasked value.

account_type: Literal["checking", "savings"]
One of the following:
"checking"
"savings"
routing_number: str

The routing number of the bank account.

minLength9
maxLength9
customer_id: Optional[str]

Unique identifier of the related customer object.

formatuuid
expires_at: Optional[datetime]

Expiration date and time of the paykey, if applicable.

formatdate-time
external_id: Optional[str]

Unique identifier for the paykey in your database, used for cross-referencing between Straddle and your systems.

institution_name: Optional[str]

Name of the financial institution.

metadata: Optional[Dict[str, str]]

Up to 20 additional user-defined key-value pairs. Useful for storing additional information about the paykey in a structured format.

status_details: Optional[DataPaykeyDetailsStatusDetails]
changed_at: datetime

The time the status change occurred.

formatdate-time
message: str

A human-readable description of the current status.

reason: Literal["insufficient_funds", "closed_bank_account", "invalid_bank_account", 24 more]
One of the following:
"insufficient_funds"
"closed_bank_account"
"invalid_bank_account"
"invalid_routing"
"disputed"
"payment_stopped"
"owner_deceased"
"frozen_bank_account"
"risk_review"
"fraudulent"
"duplicate_entry"
"invalid_paykey"
"payment_blocked"
"amount_too_large"
"too_many_attempts"
"internal_system_error"
"user_request"
"ok"
"other_network_return"
"payout_refused"
"cancel_request"
"failed_verification"
"require_review"
"blocked_by_system"
"watchtower_review"
"validating"
"auto_hold"
source: Literal["watchtower", "bank_decline", "customer_dispute", 2 more]
One of the following:
"watchtower"
"bank_decline"
"customer_dispute"
"user_action"
"system"
code: Optional[str]

The status code if applicable.

unblock_eligible: Optional[bool]

Indicates whether this paykey is eligible for client-initiated unblocking. Only present for blocked paykeys. True when blocked due to R29 returns and not previously unblocked, false otherwise. Null when paykey is not blocked.

verification_details: Optional[DataVerificationDetails]
id: str

Unique identifier for the verification details.

formatuuid
breakdown: DataVerificationDetailsBreakdown
account_validation: Optional[DataVerificationDetailsBreakdownAccountValidation]
codes: List[str]
decision: Literal["accept", "reject", "review"]
One of the following:
"accept"
"reject"
"review"
reason: Optional[str]
name_match: Optional[DataVerificationDetailsBreakdownNameMatch]
codes: List[str]
decision: Literal["accept", "reject", "review"]
One of the following:
"accept"
"reject"
"review"
correlation_score: Optional[float]
customer_name: Optional[str]
matched_name: Optional[str]
names_on_account: Optional[List[str]]
reason: Optional[str]
created_at: datetime

Timestamp of when the verification was initiated.

formatdate-time
decision: Literal["accept", "reject", "review"]
One of the following:
"accept"
"reject"
"review"
messages: Dict[str, str]

Dictionary of all messages from the paykey verification process.

updated_at: datetime

Timestamp of the most recent update to the verification details.

formatdate-time

Metadata about the API request, including an identifier and timestamp.

api_request_id: str

Unique identifier for this API request, useful for troubleshooting.

formatuuid
api_request_timestamp: datetime

Timestamp for this API request, useful for troubleshooting.

formatdate-time
response_type: Literal["object", "array", "error", "none"]

Indicates the structure of the returned content.

  • "object" means the data field contains a single JSON object.
  • "array" means the data field contains an array of objects.
  • "error" means the data field contains an error object with details of the issue.
  • "none" means no data is returned.
One of the following:
"object"
"array"
"error"
"none"