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.
| Verb | POST |
| URL | https://api.s.unit.sh/positive-pay-policy |
| Required Scope | payments-write |
| Data Type | positivePayPolicy |
| Timeout (Seconds) | 5 |
Attributes
| Name | Type | Description |
|---|---|---|
| optInTypes Required | array of strings | Required. Payment types to opt in. Supported values: CheckPayment, ReceivedAchDebit. |
Relationships
| Name | Type | Description |
|---|---|---|
| account Required | JSON:API Relationship | Required. The account this Positive Pay policy applies to. |
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.
| Verb | PATCH |
| URL | https://api.s.unit.sh/deposit-products/{depositProductId} |
| Data Type | updateDepositProduct |
| Timeout (Seconds) | 5 |
Attributes
| Name | Type | Description |
|---|---|---|
| positivePayOptIn Required | array of strings | Required. Payment types to opt in by default. Supported values: CheckPayment, ReceivedAchDebit. |
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"
]
}
}
}'
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.
| Verb | POST |
| URL | https://api.s.unit.sh/positive-pay |
| Required Scope | payments-write |
| Data Type | receivedAchDebitPositivePay |
| Timeout (Seconds) | 5 |
Attributes
| Name | Type | Description |
|---|---|---|
| originatorName Required | string | Name of the ACH Received Payment originator. Required if originatorEntityId is not provided. |
| originatorEntityId Required | string | Entity ID of the ACH Received Payment originator. Required if originatorName is not provided. |
| amount Optional | integer | Optional. Maximum allowed debit amount in cents. Decisioning uses this as a maximum. |
| expirationDate Optional | RFC3339 Date | Optional. When the authorization expires. |
| tags Optional | object | Optional. See Tags. Tags that will be copied to any transaction that this payment creates (see Tag Inheritance). |
At least one of originatorName or originatorEntityId must be provided.
Relationships
| Name | Type | Description |
|---|---|---|
| account Required | JSON:API Relationship | Required. The account this Positive Pay rule applies to. |
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
| Name | Type | Description |
|---|---|---|
| data | receivedAchDebitPositivePay | The requested resource after the operation was completed. |
{
"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.
| Verb | POST |
| URL | https://api.s.unit.sh/positive-pay |
| Required Scope | payments-write |
| Data Type | checkPaymentPositivePay |
| Timeout (Seconds) | 5 |
Attributes
| Name | Type | Description |
|---|---|---|
| checkNumber Required | string | Required. Check number to authorize. |
| amount Required | integer | Required. Expected amount in cents. Must match within 1$ tolerance. |
| payeeName Optional | string | Optional. Payee name to add specificity. |
| expirationDate Optional | RFC3339 Date | Optional. When the authorization expires. |
| tags Optional | object | Optional. See Tags. Tags that will be copied to any transaction that this payment creates (see Tag Inheritance). |
Relationships
| Name | Type | Description |
|---|---|---|
| account Required | relationship | Required. The account this Positive Pay rule applies to. |
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
| Name | Type | Description |
|---|---|---|
| data | checkPaymentPositivePay | The requested resource after the operation was completed. |
{
"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.
| Verb | POST |
| URL | https://api.s.unit.sh/positive-pay |
| Required Scope | payments-write |
| Data Type | drawdownPositivePay |
| Timeout (Seconds) | 5 |
Attributes
| Name | Type | Description |
|---|---|---|
| expirationDate Optional | RFC3339 Date | Optional. When the authorization expires. |
| tags Optional | object | Optional. Internal labels for your own use. |
Relationships
| Name | Type | Description |
|---|---|---|
| account Required | relationship | Required. The account this Positive Pay rule applies to. |
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
| Name | Type | Description |
|---|---|---|
| data | drawdownPositivePay | The requested resource after the operation was completed. |
{
"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).
Maximum size for a document is 20 MB.
| Verb | PUT |
| URL | https://api.s.unit.sh/positive-pay/{id}/documents |
| Required Scope | payments-write |
| Timeout (Seconds) | 5 |
Headers
| Name | Description |
|---|---|
| Content-Type | One 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.
| Verb | GET |
| URL | https://api.s.unit.sh/positive-pay/{positivePayId} |
| Required Scope | payments |
| 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
| Name | Type | Description |
|---|---|---|
| data | One of receivedAchDebitPositivePay, checkPaymentPositivePay, or drawdownPositivePay | The Positive Pay rule. |
{
"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.
| Verb | GET |
| URL | https://api.s.unit.sh/positive-pay |
| Required Scope | payments |
| Timeout (Seconds) | 5 |
Query Parameters
| Name | Type | Default | Description |
|---|---|---|---|
| page[limit] | integer | 100 | Optional. Maximum number of resources that will be returned. Maximum is 1000 resources. See Pagination. |
| page[offset] | integer | 0 | Optional. 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. |
| sort | string | sort=-createdAt | Optional. 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
| Name | Type | Description |
|---|---|---|
| data | Array of receivedAchDebitPositivePay, checkPaymentPositivePay, or drawdownPositivePay | Array of positive pay rule resources. Each resource can be any of the listed rule types, as indicated by the type field. |
| meta | JSON object | Pagination data includes offset, limit and total (estimated total items). |
{
"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.
| Verb | POST |
| URL | https://api.s.unit.sh/positive-pay/{positivePayId}/cancel |
| Required Scope | payments-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
| Name | Type | Description |
|---|---|---|
| data | One of receivedAchDebitPositivePay, checkPaymentPositivePay, or drawdownPositivePay | The cancelled Positive Pay rule. |
{
"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"
}
}
}
}
}