Skip to main content

APIs

Configure Positive Pay Policy

Configure Positive Pay policy to control which payment types require matching Positive Pay rules before they can be processed.

Account-level Opt-In

Configures Positive Pay opt-in for a specific account.

VerbPOST
URLhttps://api.s.unit.sh/positive-pay-policy
Required Scopepayments-write
Data TypepositivePayPolicy
Timeout (Seconds)5

Attributes

NameTypeDescription
optInTypes Requiredarray of stringsRequired. Payment types to opt in. Supported values: CheckPayment, ReceivedAchDebit.

Relationships

NameTypeDescription
account RequiredJSON:API RelationshipRequired. The account this Positive Pay policy applies to.
Example Request:
curl -X POST 'https://api.s.unit.sh/positive-pay-policy'
-H 'Content-Type: application/vnd.api+json'
-H 'Authorization: Bearer ${TOKEN}'
--data-raw '{
"data": {
"type": "positivePayPolicy",
"attributes": {
"optInTypes": [
"CheckPayment",
"ReceivedAchDebit",
"ReceivedAchCredit"
]
},
"relationships": {
"account": {
"data": {
"type": "account",
"id": "{{accountId}}"
}
}
}
}
}'

Deposit Product-level Opt-In

Configures Positive Pay opt-in defaults for all accounts on a deposit product.

VerbPATCH
URLhttps://api.s.unit.sh/deposit-products/{depositProductId}
Data TypeupdateDepositProduct
Timeout (Seconds)5

Attributes

NameTypeDescription
positivePayOptIn Requiredarray of stringsRequired. Payment types to opt in by default. Supported values: CheckPayment, ReceivedAchDebit.
Example Request:
curl -X PATCH 'https://api.s.unit.sh/deposit-products/{depositProductId}'
-H 'Content-Type: application/vnd.api+json'
-H 'Authorization: Bearer ${TOKEN}'
--data-raw '{
"data": {
"type": "updateDepositProduct",
"attributes": {
"positivePayOptIn": [
"CheckPayment",
"ReceivedAchDebit",
"ReceivedAchCredit"
]
}
}
}'
Note

Account-level opt-in can be used for per-account overrides, while deposit product-level opt-in can be used as a shared default for accounts on the same deposit product.

Create Received ACH Debit Positive Pay

Creates a Positive Pay rule for incoming ACH debits.

VerbPOST
URLhttps://api.s.unit.sh/positive-pay
Required Scopepayments-write
Data TypereceivedAchDebitPositivePay
Timeout (Seconds)5

Attributes

NameTypeDescription
originatorName RequiredstringName of the ACH Received Payment originator. Required if originatorEntityId is not provided.
originatorEntityId RequiredstringEntity ID of the ACH Received Payment originator. Required if originatorName is not provided.
amount OptionalintegerOptional. Maximum allowed debit amount in cents. Decisioning uses this as a maximum.
expirationDate OptionalRFC3339 DateOptional. When the authorization expires.
tags OptionalobjectOptional. See Tags. Tags that will be copied to any transaction that this payment creates (see Tag Inheritance).
Note

At least one of originatorName or originatorEntityId must be provided.

Relationships

NameTypeDescription
account RequiredJSON:API RelationshipRequired. The account this Positive Pay rule applies to.
Example Request:
curl -X POST 'https://api.s.unit.sh/positive-pay'
-H 'Content-Type: application/vnd.api+json'
-H 'Authorization: Bearer ${TOKEN}'
--data-raw '{
"data": {
"type": "receivedAchDebitPositivePay",
"attributes": {
"originatorName": "Payroll Company Inc",
"originatorEntityId": "1234567",
"amount": 500000,
"expirationDate": "2026-12-31",
"tags": {
"purpose": "payroll"
}
},
"relationships": {
"account": {
"data": {
"type": "account",
"id": "123"
}
}
}
}
}'

Response

Response is a JSON:API document.

201 Created

NameTypeDescription
datareceivedAchDebitPositivePayThe requested resource after the operation was completed.
Example Response:
{
"data": {
"type": "receivedAchDebitPositivePay",
"id": "1",
"attributes": {
"createdAt": "2026-01-15T10:00:00.000Z",
"status": "Active",
"originatorName": "Payroll Company Inc",
"originatorEntityId": "1234567",
"amount": 500000,
"expirationDate": "2026-12-31",
"tags": {
"purpose": "payroll"
}
},
"relationships": {
"account": {
"data": {
"type": "depositAccount",
"id": "123"
}
}
}
}
}

Create Check Payment Positive Pay

Creates a Positive Pay rule for check payments.

VerbPOST
URLhttps://api.s.unit.sh/positive-pay
Required Scopepayments-write
Data TypecheckPaymentPositivePay
Timeout (Seconds)5

Attributes

NameTypeDescription
checkNumber RequiredstringRequired. Check number to authorize.
amount RequiredintegerRequired. Expected amount in cents. Must match within 1$ tolerance.
payeeName OptionalstringOptional. Payee name to add specificity.
expirationDate OptionalRFC3339 DateOptional. When the authorization expires.
tags OptionalobjectOptional. See Tags. Tags that will be copied to any transaction that this payment creates (see Tag Inheritance).

Relationships

NameTypeDescription
account RequiredrelationshipRequired. The account this Positive Pay rule applies to.
Example Request:
curl -X POST 'https://api.s.unit.sh/positive-pay'
-H 'Content-Type: application/vnd.api+json'
-H 'Authorization: Bearer ${TOKEN}'
--data-raw '{
"data": {
"type": "checkPaymentPositivePay",
"attributes": {
"checkNumber": "10045",
"payeeName": "ACME Corp",
"amount": 250000,
"expirationDate": "2026-12-31",
"tags": {
"category": "vendor"
}
},
"relationships": {
"account": {
"data": {
"type": "account",
"id": "123"
}
}
}
}
}'

Response

Response is a JSON:API document.

201 Created

NameTypeDescription
datacheckPaymentPositivePayThe requested resource after the operation was completed.
Example Response:
{
"data": {
"type": "checkPaymentPositivePay",
"id": "3",
"attributes": {
"createdAt": "2026-01-15T10:00:00.000Z",
"status": "Active",
"checkNumber": "10045",
"payeeName": "ACME Corp",
"amount": 250000,
"expirationDate": "2026-12-31",
"tags": {
"category": "vendor"
}
},
"relationships": {
"account": {
"data": {
"type": "depositAccount",
"id": "123"
}
}
}
}
}

Create Wire Drawdown Positive Pay

Positive Pay wire-drawdown rules aren't enforced when created; creation only records the rule and sets it to AwaitingDocuments. After you upload an authorization document, the rule becomes Active, and incoming drawdowns can be processed. Once those conditions are met, drawdowns referencing that rule are routed to the bank for manual review against the uploaded document. Each wire drawdown must include the Positive Pay Rule ID; if the referenced rule is not Active (for example, AwaitingDocuments, Expired, or Cancelled), the drawdown is rejected.

VerbPOST
URLhttps://api.s.unit.sh/positive-pay
Required Scopepayments-write
Data TypedrawdownPositivePay
Timeout (Seconds)5

Attributes

NameTypeDescription
expirationDate OptionalRFC3339 DateOptional. When the authorization expires.
tags OptionalobjectOptional. Internal labels for your own use.

Relationships

NameTypeDescription
account RequiredrelationshipRequired. The account this Positive Pay rule applies to.
Example Request:
curl -X POST 'https://api.s.unit.sh/positive-pay'
-H 'Content-Type: application/vnd.api+json'
-H 'Authorization: Bearer ${TOKEN}'
--data-raw '{
"data": {
"type": "drawdownPositivePay",
"attributes": {
"expirationDate": "2026-12-31",
"tags": {
"purpose": "vendor-payment"
}
},
"relationships": {
"account": {
"data": {
"type": "account",
"id": "123"
}
}
}
}
}'

Response

Response is a JSON:API document.

201 Created

NameTypeDescription
datadrawdownPositivePayThe requested resource after the operation was completed.
Example Response:
{
"data": {
"type": "drawdownPositivePay",
"id": "4",
"attributes": {
"createdAt": "2026-01-15T10:00:00.000Z",
"status": "AwaitingDocuments",
"expirationDate": "2026-12-31",
"tags": {
"purpose": "vendor-payment"
}
},
"relationships": {
"account": {
"data": {
"type": "depositAccount",
"id": "123"
}
}
}
}
}

Upload Document

Upload the authorization document required to activate a drawdown rule (Wire Drawdown Only).

Note

Maximum size for a document is 20 MB.

VerbPUT
URLhttps://api.s.unit.sh/positive-pay/{id}/documents
Required Scopepayments-write
Timeout (Seconds)5

Headers

NameDescription
Content-TypeOne of image/png, image/jpeg, or application/pdf.

Once uploaded, the rule transitions from AwaitingDocuments to Active.

curl -X PUT "https://api.s.unit.sh/positive-pay/1/documents" \
-H "Authorization: Bearer ${TOKEN}" \
-H "Content-Type: application/pdf" \
--data-binary @authorization.pdf

Get by ID

Get a Positive Pay rule by ID.

VerbGET
URLhttps://api.s.unit.sh/positive-pay/{positivePayId}
Required Scopepayments
Timeout (Seconds)5
curl -X GET "https://api.s.unit.sh/positive-pay/1" \
-H "Authorization: Bearer ${TOKEN}"

Response

Response is a JSON:API document.

200 OK

NameTypeDescription
dataOne of receivedAchDebitPositivePay, checkPaymentPositivePay, or drawdownPositivePayThe Positive Pay rule.
Example Response:
{
"data": {
"type": "receivedAchDebitPositivePay",
"id": "1",
"attributes": {
"createdAt": "2026-01-15T10:00:00.000Z",
"status": "Active",
"originatorName": "Payroll Company Inc",
"originatorEntityId": "1234567",
"amount": 500000,
"expirationDate": "2026-12-31",
"tags": {
"purpose": "payroll"
}
},
"relationships": {
"account": {
"data": {
"type": "depositAccount",
"id": "123"
}
}
}
}
}

List

List Positive Pay rules. Filtering, paging, and sorting can be applied.

VerbGET
URLhttps://api.s.unit.sh/positive-pay
Required Scopepayments
Timeout (Seconds)5

Query Parameters

NameTypeDefaultDescription
page[limit]integer100Optional. Maximum number of resources that will be returned. Maximum is 1000 resources. See Pagination.
page[offset]integer0Optional. Number of resources to skip. See Pagination.
filter[accountId]string(empty)Optional. Filters the results by the specified account id.
filter[status]string(empty)Optional. Filters by rule status. One of: AwaitingDocuments, Active, Expired, Cancelled.
filter[type]string(empty)Optional. Filters by rule type. One of: receivedAchDebitPositivePay, checkPaymentPositivePay, drawdownPositivePay.
filter[tags]Tags (JSON)(empty)Optional. Filter positive pay by Tags.
sortstringsort=-createdAtOptional. Leave empty or provide sort=createdAt for ascending order. Provide sort=-createdAt (leading minus sign) for descending order.
curl -X GET "https://api.s.unit.sh/positive-pay?filter[accountId]=123&filter[status]=Active&page[limit]=20" \
-H "Authorization: Bearer ${TOKEN}"

Response

Response is a JSON:API document.

200 OK

NameTypeDescription
dataArray of receivedAchDebitPositivePay, checkPaymentPositivePay, or drawdownPositivePayArray of positive pay rule resources. Each resource can be any of the listed rule types, as indicated by the type field.
metaJSON objectPagination data includes offset, limit and total (estimated total items).
Example Response:
{
"data": [
{
"type": "receivedAchDebitPositivePay",
"id": "1",
"attributes": {
"createdAt": "2026-01-15T10:00:00.000Z",
"status": "Active",
"originatorName": "Payroll Company Inc",
"originatorEntityId": "1234567",
"amount": 500000,
"expirationDate": "2026-12-31",
"tags": {
"purpose": "payroll"
}
},
"relationships": {
"account": {
"data": {
"type": "depositAccount",
"id": "123"
}
}
}
},
{
"type": "checkPaymentPositivePay",
"id": "2",
"attributes": {
"createdAt": "2026-01-16T14:30:00.000Z",
"status": "Active",
"checkNumber": "10045",
"payeeName": "ACME Corp",
"amount": 250000,
"expirationDate": "2026-12-31",
"tags": {
"category": "vendor"
}
},
"relationships": {
"account": {
"data": {
"type": "depositAccount",
"id": "123"
}
}
}
}
],
"meta": {
"pagination": {
"total": 2,
"limit": 20,
"offset": 0
}
}
}

Cancel

Cancel a Positive Pay rule by ID. Cancelled rules stop authorizing payments.

The positivePay.cancelled webhook event is fired.

VerbPOST
URLhttps://api.s.unit.sh/positive-pay/{positivePayId}/cancel
Required Scopepayments-write
Timeout (Seconds)5
curl -X POST "https://api.s.unit.sh/positive-pay/1/cancel" \
-H "Authorization: Bearer ${TOKEN}"

Response

Response is a JSON:API document.

200 OK

NameTypeDescription
dataOne of receivedAchDebitPositivePay, checkPaymentPositivePay, or drawdownPositivePayThe cancelled Positive Pay rule.
Example Response:
{
"data": {
"type": "receivedAchDebitPositivePay",
"id": "1",
"attributes": {
"createdAt": "2026-01-15T10:00:00.000Z",
"status": "Cancelled",
"originatorName": "Payroll Company Inc",
"originatorEntityId": "1234567",
"amount": 500000,
"expirationDate": "2026-12-31",
"tags": {
"purpose": "payroll"
}
},
"relationships": {
"account": {
"data": {
"type": "depositAccount",
"id": "123"
}
}
}
}
}