Skip to main content

Overview

Positive Pay helps protect accounts from fraudulent or unexpected payments by giving account holders proactive control. Customers pre-approve the ACH originators, check payments, and wire drawdowns they want to allow. When a payment is received, Unit automatically evaluates it against the configured Positive Pay rules to deterministically allow it to proceed or block it at the Positive Pay layer. For wire drawdowns specifically, after passing Positive Pay checks based on the configured rules and any uploaded authorization documentation, the drawdown may still be subject to the bank's manual review and potential return under the bank's standard processes.

More details in the positive pay guide.

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
originatorNamestringName of the ACH Received Payment originator. Required if originatorEntityId is not provided.
originatorEntityIdstringEntity ID of the ACH Received Payment originator. Required if originatorName is not provided.
amountintegerOptional. Maximum allowed debit amount in cents. Decisioning uses this as a maximum.
expirationDateRFC3339 DateOptional. When the authorization expires.
tagsobjectOptional. 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
accountJSON: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

FieldTypeDescription
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 Received ACH Credit Positive Pay

Creates a Positive Pay rule for incoming ACH credits.

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

Attributes

NameTypeDescription
originatorNamestringName of the ACH credit originator. Required if originatorEntityId is not provided.
originatorEntityIdstringEntity ID of the ACH credit originator. Required if originatorName is not provided.
amountintegerOptional. Maximum allowed credit amount in cents. Decisioning uses this as a maximum.
expirationDateRFC3339 DateOptional. When the authorization expires.
tagsobjectOptional. 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
accountJSON: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": "receivedAchCreditPositivePay",
"attributes": {
"originatorName": "ACME Payouts",
"originatorEntityId": "9988776",
"amount": 1000000,
"expirationDate": "2026-12-31",
"tags": {
"purpose": "refund"
}
},
"relationships": {
"account": {
"data": {
"type": "account",
"id": "123"
}
}
}
}
}'

Response

Response is a JSON:API document.

201 Created

FieldTypeDescription
datareceivedAchCreditPositivePayThe requested resource after the operation was completed.
Example Response:
{
"data": {
"type": "receivedAchCreditPositivePay",
"id": "2",
"attributes": {
"createdAt": "2026-01-15T10:00:00.000Z",
"status": "Active",
"originatorName": "ACME Payouts",
"originatorEntityId": "9988776",
"amount": 1000000,
"expirationDate": "2026-12-31",
"tags": {
"purpose": "refund"
}
},
"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
checkNumberstringRequired. Check number to authorize.
amountintegerRequired. Expected amount in cents. Must match within 1$ tolerance.
payeeNamestringOptional. Payee name to add specificity.
expirationDateRFC3339 DateOptional. When the authorization expires.
tagsobjectOptional. See Tags. Tags that will be copied to any transaction that this payment creates (see Tag Inheritance).

Relationships

NameTypeDescription
accountrelationshipRequired. 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

FieldTypeDescription
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
expirationDateRFC3339 DateOptional. When the authorization expires.
tagsobjectOptional. Internal labels for your own use.

Relationships

NameTypeDescription
accountrelationshipRequired. 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

FieldTypeDescription
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

FieldTypeDescription
dataOne of receivedAchDebitPositivePay, receivedAchCreditPositivePay, 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, receivedAchCreditPositivePay, checkPaymentPositivePay, drawdownPositivePay.
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

FieldTypeDescription
dataArray of receivedAchDebitPositivePay, receivedAchCreditPositivePay, 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

FieldTypeDescription
dataOne of receivedAchDebitPositivePay, receivedAchCreditPositivePay, 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"
}
}
}
}
}