Skip to content
Get started

Paykeys

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.

Lookup a paykey
PaykeyV1 Paykeys.Get(PaykeyGetParamsparameters, CancellationTokencancellationToken = default)
GET/v1/paykeys/{id}
Unmask a paykey
PaykeyUnmaskedV1 Paykeys.Unmasked(PaykeyUnmaskedParamsparameters, CancellationTokencancellationToken = default)
GET/v1/paykeys/{id}/unmasked
List paykeys
PaykeySummaryPagedV1 Paykeys.List(PaykeyListParams?parameters, CancellationTokencancellationToken = default)
GET/v1/paykeys
Retrieve an unmasked paykey token
PaykeyRevealResponse Paykeys.Reveal(PaykeyRevealParamsparameters, CancellationTokencancellationToken = default)
GET/v1/paykeys/{id}/reveal
Cancel
PaykeyV1 Paykeys.Cancel(PaykeyCancelParamsparameters, CancellationTokencancellationToken = default)
PUT/v1/paykeys/{id}/cancel
Update a paykey's balance
PaykeyV1 Paykeys.UpdateBalance(PaykeyUpdateBalanceParamsparameters, CancellationTokencancellationToken = default)
PUT/v1/paykeys/{id}/refresh_balance
ModelsExpand Collapse
class PaykeySummaryPagedV1:
required IReadOnlyList<Data> Data
required string ID

Unique identifier for the paykey.

formatuuid
required Config Config
ProcessingMethod ProcessingMethod
One of the following:
"inline"Inline
"background"Background
"skip"Skip
SandboxOutcome SandboxOutcome
One of the following:
"standard"Standard
"active"Active
"rejected"Rejected
"review"Review
required DateTimeOffset CreatedAt

Timestamp of when the paykey was created.

formatdate-time
required string Label

Human-readable label that combines the bank name and masked account number to help easility represent this paykey in a UI

required string Paykey

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

required Source Source
One of the following:
"bank_account"BankAccount
"straddle"Straddle
"mx"Mx
"plaid"Plaid
"tan"Tan
"quiltt"Quiltt
required Status Status
One of the following:
"pending"Pending
"active"Active
"inactive"Inactive
"rejected"Rejected
"review"Review
"blocked"Blocked
required DateTimeOffset UpdatedAt

Timestamp of the most recent update to the paykey.

formatdate-time
BankData BankData
required string AccountNumber

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

required AccountType AccountType
One of the following:
"checking"Checking
"savings"Savings
required string RoutingNumber

The routing number of the bank account.

minLength9
maxLength9
string? CustomerID

Unique identifier of the related customer object.

formatuuid
DateTimeOffset? ExpiresAt

Expiration date and time of the paykey, if applicable.

formatdate-time
string? ExternalID

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

string? InstitutionName

Name of the financial institution.

StatusDetails StatusDetails
required DateTimeOffset ChangedAt

The time the status change occurred.

formatdate-time
required string Message

A human-readable description of the current status.

required Reason Reason
One of the following:
"insufficient_funds"InsufficientFunds
"closed_bank_account"ClosedBankAccount
"invalid_bank_account"InvalidBankAccount
"invalid_routing"InvalidRouting
"disputed"Disputed
"payment_stopped"PaymentStopped
"owner_deceased"OwnerDeceased
"frozen_bank_account"FrozenBankAccount
"risk_review"RiskReview
"fraudulent"Fraudulent
"duplicate_entry"DuplicateEntry
"invalid_paykey"InvalidPaykey
"payment_blocked"PaymentBlocked
"amount_too_large"AmountTooLarge
"too_many_attempts"TooManyAttempts
"internal_system_error"InternalSystemError
"user_request"UserRequest
"ok"Ok
"other_network_return"OtherNetworkReturn
"payout_refused"PayoutRefused
"cancel_request"CancelRequest
"failed_verification"FailedVerification
"require_review"RequireReview
"blocked_by_system"BlockedBySystem
"watchtower_review"WatchtowerReview
"validating"Validating
"auto_hold"AutoHold
required Source Source
One of the following:
"watchtower"Watchtower
"bank_decline"BankDecline
"customer_dispute"CustomerDispute
"user_action"UserAction
"system"System
string? Code

The status code if applicable.

Boolean? UnblockEligible

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.

required Meta Meta
required string ApiRequestID

Unique identifier for this API request, useful for troubleshooting.

formatuuid
required DateTimeOffset ApiRequestTimestamp

Timestamp for this API request, useful for troubleshooting.

formatdate-time
required Int MaxPageSize

Maximum allowed page size for this endpoint.

formatint32
required Int PageNumber

Page number for paginated results.

formatint32
required Int PageSize

Number of items per page in this response.

formatint32
required string SortBy

The field that the results were sorted by.

required SortOrder SortOrder
One of the following:
"asc"Asc
"desc"Desc
required Int TotalItems
required Int TotalPages

The number of pages available.

formatint32
required ResponseType ResponseType

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"Object
"array"Array
"error"Error
"none"None
class PaykeyUnmaskedV1:
required Data Data
required string ID

Unique identifier for the paykey.

formatuuid
required Config Config
ProcessingMethod ProcessingMethod
One of the following:
"inline"Inline
"background"Background
"skip"Skip
SandboxOutcome SandboxOutcome
One of the following:
"standard"Standard
"active"Active
"rejected"Rejected
"review"Review
required DateTimeOffset CreatedAt

Timestamp of when the paykey was created.

formatdate-time
required string Label

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

required string Paykey

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

required Source Source
One of the following:
"bank_account"BankAccount
"straddle"Straddle
"mx"Mx
"plaid"Plaid
"tan"Tan
"quiltt"Quiltt
required Status Status
One of the following:
"pending"Pending
"active"Active
"inactive"Inactive
"rejected"Rejected
"review"Review
"blocked"Blocked
required DateTimeOffset UpdatedAt

Timestamp of the most recent update to the paykey.

formatdate-time
Balance Balance
required Status Status
One of the following:
"pending"Pending
"completed"Completed
"failed"Failed
Int? AccountBalance

Account Balance when last retrieved

formatint32
DateTimeOffset? UpdatedAt

Last time account balance was updated.

formatdate-time
BankData BankData
required string AccountNumber

The bank account number

required AccountType AccountType
One of the following:
"checking"Checking
"savings"Savings
required string RoutingNumber

The routing number of the bank account.

minLength9
maxLength9
string? CustomerID

Unique identifier of the related customer object.

formatuuid
DateTimeOffset? ExpiresAt

Expiration date and time of the paykey, if applicable.

formatdate-time
string? ExternalID

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

string? InstitutionName

Name of the financial institution.

IReadOnlyDictionary<string, string>? Metadata

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

StatusDetails StatusDetails
required DateTimeOffset ChangedAt

The time the status change occurred.

formatdate-time
required string Message

A human-readable description of the current status.

required Reason Reason
One of the following:
"insufficient_funds"InsufficientFunds
"closed_bank_account"ClosedBankAccount
"invalid_bank_account"InvalidBankAccount
"invalid_routing"InvalidRouting
"disputed"Disputed
"payment_stopped"PaymentStopped
"owner_deceased"OwnerDeceased
"frozen_bank_account"FrozenBankAccount
"risk_review"RiskReview
"fraudulent"Fraudulent
"duplicate_entry"DuplicateEntry
"invalid_paykey"InvalidPaykey
"payment_blocked"PaymentBlocked
"amount_too_large"AmountTooLarge
"too_many_attempts"TooManyAttempts
"internal_system_error"InternalSystemError
"user_request"UserRequest
"ok"Ok
"other_network_return"OtherNetworkReturn
"payout_refused"PayoutRefused
"cancel_request"CancelRequest
"failed_verification"FailedVerification
"require_review"RequireReview
"blocked_by_system"BlockedBySystem
"watchtower_review"WatchtowerReview
"validating"Validating
"auto_hold"AutoHold
required Source Source
One of the following:
"watchtower"Watchtower
"bank_decline"BankDecline
"customer_dispute"CustomerDispute
"user_action"UserAction
"system"System
string? Code

The status code if applicable.

required ResponseMetadata Meta

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

required string ApiRequestID

Unique identifier for this API request, useful for troubleshooting.

formatuuid
required DateTimeOffset ApiRequestTimestamp

Timestamp for this API request, useful for troubleshooting.

formatdate-time
required ResponseType ResponseType

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"Object
"array"Array
"error"Error
"none"None
class PaykeyV1:
required Data Data
required string ID

Unique identifier for the paykey.

formatuuid
required Config Config
ProcessingMethod ProcessingMethod
One of the following:
"inline"Inline
"background"Background
"skip"Skip
SandboxOutcome SandboxOutcome
One of the following:
"standard"Standard
"active"Active
"rejected"Rejected
"review"Review
required DateTimeOffset CreatedAt

Timestamp of when the paykey was created.

formatdate-time
required string Label

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

required string Paykey

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

required Source Source
One of the following:
"bank_account"BankAccount
"straddle"Straddle
"mx"Mx
"plaid"Plaid
"tan"Tan
"quiltt"Quiltt
required Status Status
One of the following:
"pending"Pending
"active"Active
"inactive"Inactive
"rejected"Rejected
"review"Review
"blocked"Blocked
required DateTimeOffset UpdatedAt

Timestamp of the most recent update to the paykey.

formatdate-time
Balance Balance
required Status Status
One of the following:
"pending"Pending
"completed"Completed
"failed"Failed
Int? AccountBalance

Account Balance when last retrieved

formatint32
DateTimeOffset? UpdatedAt

Last time account balance was updated.

formatdate-time
BankData BankData
required string AccountNumber

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

required AccountType AccountType
One of the following:
"checking"Checking
"savings"Savings
required string RoutingNumber

The routing number of the bank account.

minLength9
maxLength9
string? CustomerID

Unique identifier of the related customer object.

formatuuid
DateTimeOffset? ExpiresAt

Expiration date and time of the paykey, if applicable.

formatdate-time
string? ExternalID

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

string? InstitutionName

Name of the financial institution.

IReadOnlyDictionary<string, string>? Metadata

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

StatusDetails StatusDetails
required DateTimeOffset ChangedAt

The time the status change occurred.

formatdate-time
required string Message

A human-readable description of the current status.

required Reason Reason
One of the following:
"insufficient_funds"InsufficientFunds
"closed_bank_account"ClosedBankAccount
"invalid_bank_account"InvalidBankAccount
"invalid_routing"InvalidRouting
"disputed"Disputed
"payment_stopped"PaymentStopped
"owner_deceased"OwnerDeceased
"frozen_bank_account"FrozenBankAccount
"risk_review"RiskReview
"fraudulent"Fraudulent
"duplicate_entry"DuplicateEntry
"invalid_paykey"InvalidPaykey
"payment_blocked"PaymentBlocked
"amount_too_large"AmountTooLarge
"too_many_attempts"TooManyAttempts
"internal_system_error"InternalSystemError
"user_request"UserRequest
"ok"Ok
"other_network_return"OtherNetworkReturn
"payout_refused"PayoutRefused
"cancel_request"CancelRequest
"failed_verification"FailedVerification
"require_review"RequireReview
"blocked_by_system"BlockedBySystem
"watchtower_review"WatchtowerReview
"validating"Validating
"auto_hold"AutoHold
required Source Source
One of the following:
"watchtower"Watchtower
"bank_decline"BankDecline
"customer_dispute"CustomerDispute
"user_action"UserAction
"system"System
string? Code

The status code if applicable.

Boolean? UnblockEligible

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.

required ResponseMetadata Meta

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

required string ApiRequestID

Unique identifier for this API request, useful for troubleshooting.

formatuuid
required DateTimeOffset ApiRequestTimestamp

Timestamp for this API request, useful for troubleshooting.

formatdate-time
required ResponseType ResponseType

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"Object
"array"Array
"error"Error
"none"None

PaykeysReview

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
PaykeyV1 Paykeys.Review.Decision(ReviewDecisionParamsparameters, CancellationTokencancellationToken = default)
PATCH/v1/paykeys/{id}/review
Get paykey review details
ReviewGetResponse Paykeys.Review.Get(ReviewGetParamsparameters, CancellationTokencancellationToken = default)
GET/v1/paykeys/{id}/review
Update a paykey's identity review decision
PaykeyV1 Paykeys.Review.RefreshReview(ReviewRefreshReviewParamsparameters, CancellationTokencancellationToken = default)
PUT/v1/paykeys/{id}/refresh_review