Check management APIs
You can manage both deposit and withdrawal checking for your customers using Cross River APIs.
Checks APIs are found in the checks
module of our COS sandbox.
Get started with Cross River APIs.
This table presents checks management APIs that we describe in detail.
Action |
API Call |
Description |
---|---|---|
Deposit a Check | POST /checks/v1/payments
|
Sends COS the information needed to deposit a check into a CR account |
Cancel a check deposit | POST /checks/v1/payments/{id}/cancel
|
Cancels a check deposit |
View check images | GET /checks/v1/payments/{id}/images/{view}
|
Returns the image of the front or back of the check encoded in Base64 |
Payment analysis | GET /checks/v1/payments/{id}/analysis
|
Returns an analysis of the check's image quality assurance (IQA) status based on the Fed's metrics |
Positive Pay: Authorize a check | POST /checks/v1/positive-pay-authorizations
|
Authorizes a check using Check management APIs |
Positive Pay: Revoke authorization |
|
Revokes Positive Pay authorization already given for a specific check |
Deposit a Check
Sends the CR system information needed to deposit a check into a CR account using the API. This information includes images of both the front and the back of the check. You submit these images after converting each one to a Base64-encoded value.
Request attributes
accountNumber string Required CR account number |
|
amount integer Required Money amount that appears on the check Note
Money amounts in API calls and responses are written without a decimal point between the dollars and the cents. |
|
frontImage string Required The base64-encoded image of the front of the check |
|
backImage string Required The base64-encoded image of the back of the check |
|
purpose string Optional Purpose of the deposited check 50 characters maximum |
|
clientIdentifier string Optional Use this attribute to add your own unique identifying string to a payment call or COS record. This attribute is useful for idempotency purposes. 50 characters maximum |
|
isRedeposit boolean Optional True if the check was deposited before. Otherwise false. |
id string Check payment ID. This ID is in GUID format. |
|
accountNumber string Number of the CR account |
|
referenceId string The reference ID of the check payment, indicating the rail type in the first element of the string. In this case it is C. This is an internal CR attribute. |
|
paymentType string The check
|
|
checkType string Type of check being dealt with. There are several check types. |
|
direction string Check direction:
|
|
status string Status of the check payment. There are several possible payment statuses. |
|
source string Source of the payment request:
|
|
posting string Posting status:
|
|
rejectionReason string Reason a check payment was rejected. There are several rejection reasons. |
|
positivePayResult string If Positive Pay is enabled, the positive pay status of the check:
|
|
positivePayMatchId string If Positive Pay is enabled, ID of the positive pay record associated with the payment |
|
postingCode string Code related to the CR system transaction tied to the payment. Any value other than “OK” indicates a rejection. |
|
clientBatchId string ID for the batch received from the CR lockbox vendor |
|
clientBatchSequence string Sequence number of the payment inside the batch received from the CR lockbox vendor |
|
fedBatchId string ID of the distribution that the check was included in |
|
fedBatchSequence string Sequence number of the payment inside the distribution |
|
coreTransactionId string Internal CR unique ID for the transaction |
|
memoPostId string Unique identifier for the memo post. This ID is in GUID format. |
|
originalPaymentId string The original payment ID, when a check has been returned or redeposited |
|
customerId string The unique ID assigned to a customer when the customer record is created ( The ID is in GUID format. |
|
payerRoutingNumber string The payer’s routing number (printed on the check) |
|
payerAccountNumber string The payer’s account number (printed on the check) |
|
payeeName string Name written on the pay to the order of line of the check |
|
checkNumber string The serial number that appears on the check |
|
bofdRoutingNumber string The routing number of the bank where the check was first deposited |
|
sequenceNumber string The check sequence number |
|
amount integer Money amount that appears on the check |
|
currency string Currency of the check. For example, USD (US dollars) |
|
micr string The magnetic ink character recognition line, consisting of the routing number, account number and check number |
|
recognizedAmount integer The check amount recognized from the check image via OCR |
|
iqaPassed boolean True if the check has passed the Fed’s image quality assurance standards, otherwise false |
|
returnCode string The return code indicates why the check was returned. There are several return codes. |
|
hasFrontImage boolean True if the check image file includes the front of the check. Otherwise false. |
|
hasBackImage boolean True if the check image file includes the back of the check. Otherwise false. |
|
isRedeposit boolean True if the check was deposited before. Otherwise false. |
|
policy string The current availability policy type assigned to the deposit, defining the schedule for making funds available |
|
schedule array (integer) Funds availability schedule, determined by the policy, and based on whenever the check was released to the Fed in a distribution. Consists of a day-by-day breakdown based on calendar day, with each day’s availability amount displayed. |
|
createdAt string Date and time the check payment was created. In this case, the date and time are in this format: yyyy-mm-ddThh:mm:ss[.mmm] |
|
canceledAt string Date and time the check payment was canceled. In this case, the date and time are in this format: yyyy-mm-ddThh:mm:ss[.mmm] |
|
rejectedAt string Date and time the check payment was rejected. In this case, the date and time are in this format: yyyy-mm-ddThh:mm:ss[.mmm] |
|
processedAt string Date and time the check payment was processed. In this case, the date and time are in this format: yyyy-mm-ddThh:mm:ss[.mmm] |
|
completedAt string Date and time the check payment was completed. In this case, the date and time are in this format: yyyy-mm-ddThh:mm:ss[.mmm] |
|
postedAt string Date and time the check payment was posted In this case, the date and time are in this format: yyyy-mm-ddThh:mm:ss[.mmm] |
|
wasReturned boolean True if the check was returned. Otherwise false. |
|
purpose string Purpose of the deposited check |
|
clientIdentifier string Use this attribute to add your own unique identifying string to a payment call or COS record. This attribute is useful for idempotency purposes. |
|
depositBusinessDate string The business date of the deposit in the format of yymmdd. This date is usually Day 1 of the schedule for making the funds available. If the check is deposited after the day's deposit cut-off time, Day 1 might be a different date. In that case, the |
|
lockboxVendorId string ID of the lockbox service receiving the paper checks and sending them via ICL to CR |
|
productId string The product ID for the account involved in the check payment, in GUID format |
|
partnerId string Your ID in the CR system. This ID is in GUID format. |
|
lastModifiedAt string Internal CR value. Date and time the database entry was last modified. |
Sample request
curl -X POST
--header 'Content-Type: application/json'
--header 'Accept: application/json'
--header 'Authorization: Bearer <token>'
-d '{ \
{
"accountNumber": "2193590144",
"amount": 100,
"frontImage": "image/jpg;base64,/9j/4REyRXhpZgAATU0AKgA...",
"backImage": "image/jpg;base64,/9j/4QuqRXhpZgAATU0AKg...",
"isRedeposit": false
}'https://sandbox.crbcos.com/Checks/v1/payments'
Sample response
{
"id": "9a44fdbf-89e2-4300-8f05-ad9501439bb1",
"accountNumber": "2193590144",
"referenceId": "C2436F698K0D",
"paymentType": "Forward",
"checkType": "Standard",
"direction": "Outbound",
"status": "Created",
"source": "OpsPortal",
"posting": "Pending",
"postingCode": "OK",
"coreTransactionId": "21ba5fb0-e609-4560-a36f-ad9501439bb1",
"memoPostId": "dc20e619-c5f7-4890-b3c8-ad9501439bb1",
"originalPaymentId": "9a44fdbf-89e2-4300-8f05-ad9501439bb1",
"customerId": "700f0d35-9940-4132-8608-ad89013927a9",
"payerRoutingNumber": "",
"payerAccountNumber": "",
"payeeName": "",
"checkNumber": "",
"bofdRoutingNumber": "021214891",
"sequenceNumber": "1353885824",
"amount": 100,
"currency": "usd",
"recognizedAmount": 0,
"iqaPassed": false,
"hasFrontImage": true,
"hasBackImage": true,
"isRedeposit": false,
"policy": "NewAccount",
"schedule": [
0,
0,
100
],
"createdAt": "2021-08-31T15:38:13.2795042-04:00",
"wasReturned": false,
"purpose": "",
"depositBusinessDate": "210831",
"productId": "d5dc52bb-df80-4a5d-a5a8-ad89013844bd",
"partnerId": "ede1a60d-3d51-47e8-9a9b-ad8901381f9e",
"lastModifiedAt": "2021-08-31T15:38:13.2951299-04:00"
Cancel a check deposit
Cancels a specific check deposit according to its payment ID.
There are times when you need to cancel a check deposit. For example, to prevent a loss on an account where check kiting activity has been identified. You can only cancel a check if the payment hasn't been processed yet.
Path parameters
id string Required Check payment ID, in GUID format |
Response attributes
The response attributes for this call are the same as for Deposit a check.
Request sample
curl -X POST
--header 'Accept: application/json'
--header 'Authorization: Bearer token
https://sandbox.crbcos.com/Checks/v1/payments/d94c5c62-f0c1-4e50-8b68-ad8f00fbcc6c/cancel
GET /v1/payments/{id}
{
"id": "d94c5c62-f0c1-4e50-8b68-ad8f00fbcc6c",
"accountNumber": "2150856074",
"referenceId": "C2371LM3D88Q",
"paymentType": "Forward",
"checkType": "Standard",
"direction": "Outbound",
"status": "Canceled",
"source": "OpsPortal",
"posting": "Canceled",
"postingCode": "OK",
"coreTransactionId": "b5215fda-f720-4530-abe7-ad8f00fbcc6c",
"memoPostId": "88509b68-ea34-407c-b934-ad8f00fbcc6c",
"originalPaymentId": "d94c5c62-f0c1-4e50-8b68-ad8f00fbcc6c",
"customerId": "7aa966b5-bbff-438a-b20d-ad870144dc85",
"payerRoutingNumber": "021200339",
"payerAccountNumber": "123456789",
"payeeName": "",
"checkNumber": "1241",
"bofdRoutingNumber": "021214891",
"sequenceNumber": "1767120148",
"amount": 100,
"currency": "usd",
"micr": "d021200339dc12345678c1237",
"recognizedAmount": 100,
"iqaPassed": true,
"hasFrontImage": true,
"hasBackImage": true,
"isRedeposit": false,
"policy": "NewAccount",
"schedule": [
0,
0,
100
],
"createdAt": "2021-08-25T11:16:46.22-04:00",
"canceledAt": "2021-08-25T11:16:49.467-04:00",
"wasReturned": false,
"purpose": "ENTERED BY #60C367E26DD36A0068580230#",
"depositBusinessDate": "210825",
"productId": "2f885dc0-850f-4e1f-b5f2-ad870144660e",
"partnerId": "560ba513-848c-49ae-8edc-ad8701446094",
"lastModifiedAt": "2021-08-25T11:16:49.4725995-04:00"
}
View check images
Returns the Base64-encoded image of the requested side of the check.
Use a Base64 decoder to view the requested check side as a human-visible image.
Path parameters
id string Required Check payment ID, in GUID format |
|
view string Required What part of the check image to view:
|
Response attributes
content string Requested image as a Base64-encoded value |
Payment analysis
Returns an analysis of the check's image quality assurance (IQA) status based on the Fed's metrics.
Path parameters
id string Required Check payment ID, in GUID format |
Response attributes
analysis object Analysis results |
|||||||||||||||||||||
data object Specific data analysis results child attributes
|
The remaining response attributes for this call are the same as for Deposit a check.
Request sample
curl -X GET
--header 'Accept: application/json'
--header 'Authorization: Bearer token
https://sandbox.crbcos.com/Checks/v1/payments/278801a3-042f-4963-ae68-ad9e00bf082a/analysis
GET /v1/payments/{id}/analysis
{
"analysis": {
"data": {
"accepted": true,
"processingStatus": "Passed",
"requestStatus": "Succeeded",
"processingId": "dfeb2604-8b93-49f6-bbe3-84fa99d7add4",
"iqaMessage": "IQAGOOD",
"transactionStatusCode": 0,
"transactionId": 508567,
"groupName": "Cross River Group",
"organizationName": "Cross River",
"submissionDate": "2021-09-09T07:35:33.7421852-04:00",
"flexibleFields": {},
"readFields": [
{
"name": "MICR",
"value": "d314074269dc28293886c1237",
"confidence": 1000
},
{
"name": "CheckRoutingNumber",
"value": "123456789"
},
{
"name": "CheckAccountNumber",
"value": "423651472"
},
{
"name": "CheckNumber",
"value": "101"
},
{
"name": "RecognizedAmount",
"value": "1.00",
"confidence": 984
}
],
"testResults": [
{
"checkSide": "Front",
"name": "MICR Confidence",
"value": "Passed",
"threshold": 500,
"confidence": 1000
},
{
"checkSide": "Front",
"name": "Amounts Match",
"value": "Passed",
"threshold": 500,
"confidence": 984
},
{
"checkSide": "Front",
"name": "Front Focus",
"value": "Passed",
"threshold": 350,
"confidence": 1000
},
{
"checkSide": "Back",
"name": "Back Focus",
"value": "Passed",
"threshold": 100,
"confidence": 262
},
{
"checkSide": "Front",
"name": "Shadow on Image",
"value": "Passed",
"threshold": 851,
"confidence": 1000
},
{
"checkSide": "Back",
"name": "Shadow on Image",
"value": "Passed",
"threshold": 851,
"confidence": 1000
},
{
"checkSide": "Front",
"name": "Contrast of Image",
"value": "Passed",
"threshold": 401,
"confidence": 1000
},
{
"checkSide": "Back",
"name": "Contrast of Image",
"value": "ManualReview",
"threshold": 401,
"confidence": 340
},
{
"checkSide": "Front",
"name": "Cut Corners",
"value": "Passed",
"threshold": 751,
"confidence": 1000
},
{
"checkSide": "Back",
"name": "Cut Corners",
"value": "Passed",
"threshold": 751,
"confidence": 1000
},
{
"checkSide": "Front",
"name": "Image Too Small",
"value": "Passed",
"threshold": 501,
"confidence": 1000
},
{
"checkSide": "Back",
"name": "Image Too Small",
"value": "Passed",
"threshold": 501,
"confidence": 1000
},
{
"checkSide": "Front",
"name": "Darkness",
"value": "Passed",
"threshold": 401,
"confidence": 863
},
{
"checkSide": "Back",
"name": "Darkness",
"value": "Passed",
"threshold": 401,
"confidence": 839
},
{
"checkSide": "Front",
"name": "View Angle",
"value": "Passed",
"threshold": 701,
"confidence": 970
},
{
"checkSide": "Back",
"name": "View Angle",
"value": "Passed",
"threshold": 701,
"confidence": 967
},
{
"checkSide": "Front",
"name": "Rotation Angle",
"value": "Passed",
"threshold": 701,
"confidence": 991
},
{
"checkSide": "Back",
"name": "Rotation Angle",
"value": "Passed",
"threshold": 701,
"confidence": 998
},
{
"checkSide": "Front",
"name": "Folded Or Torn Corner",
"value": "Unknown",
"threshold": 0,
"confidence": 0
},
{
"checkSide": "Back",
"name": "Folded Or Torn Corner",
"value": "Unknown",
"threshold": 0,
"confidence": 0
},
{
"checkSide": "Front",
"name": "Folded Or Torn Edge",
"value": "Unknown",
"threshold": 0,
"confidence": 0
},
{
"checkSide": "Front",
"name": "Folded Or Torn Edge",
"value": "Unknown",
"threshold": 0,
"confidence": 0
},
{
"checkSide": "Front",
"name": "Excessive Skew",
"value": "Unknown",
"threshold": 0,
"confidence": 0
},
{
"checkSide": "Back",
"name": "Excessive Skew",
"value": "Unknown",
"threshold": 0,
"confidence": 0
},
{
"checkSide": "Front",
"name": "Piggyback Document",
"value": "Unknown",
"threshold": 0,
"confidence": 0
},
{
"checkSide": "Back",
"name": "Piggyback Document",
"value": "Unknown",
"threshold": 0,
"confidence": 0
},
{
"checkSide": "Front",
"name": "Too Light",
"value": "Unknown",
"threshold": 0,
"confidence": 0
},
{
"checkSide": "Back",
"name": "Too Light",
"value": "Unknown",
"threshold": 0,
"confidence": 0
},
{
"checkSide": "Front",
"name": "Too Dark",
"value": "Unknown",
"threshold": 0,
"confidence": 0
},
{
"checkSide": "Back",
"name": "Too Dark",
"value": "Unknown",
"threshold": 0,
"confidence": 0
},
{
"checkSide": "Front",
"name": "Undersize Image",
"value": "Unknown",
"threshold": 0,
"confidence": 0
},
{
"checkSide": "Back",
"name": "Undersize Image",
"value": "Unknown",
"threshold": 0,
"confidence": 0
},
{
"checkSide": "Front",
"name": "Oversize Image",
"value": "Unknown",
"threshold": 0,
"confidence": 0
},
{
"checkSide": "Back",
"name": "Oversize Image",
"value": "Unknown",
"threshold": 0,
"confidence": 0
},
{
"checkSide": "Front",
"name": "Excessive Spot Noise",
"value": "Unknown",
"threshold": 0,
"confidence": 0
},
{
"checkSide": "Back",
"name": "Excessive Spot Noise",
"value": "Unknown",
"threshold": 0,
"confidence": 0
},
{
"checkSide": "Back",
"name": "Endorsement Presence",
"value": "ManualReview",
"threshold": 101,
"confidence": 0
},
{
"checkSide": "Front",
"name": "Aspect Ratio Validation",
"value": "Passed",
"threshold": 900,
"confidence": 998
},
{
"checkSide": "Front",
"name": "MICR Intrusion Detection",
"value": "Passed",
"threshold": 100,
"confidence": 1000
},
{
"checkSide": "Front",
"name": "Check Length",
"value": "Unknown",
"threshold": 0,
"confidence": 0
},
{
"checkSide": "Front",
"name": "Check Height",
"value": "Unknown",
"threshold": 0,
"confidence": 0
},
{
"checkSide": "Front",
"name": "Bitonal Image Size",
"value": "Passed",
"threshold": 500,
"confidence": 1000
},
{
"checkSide": "Back",
"name": "Bitonal Image Size",
"value": "Passed",
"threshold": 500,
"confidence": 1000
}
]
}
},
"id": "278801a3-042f-4963-ae68-ad9e00bf082a",
"accountNumber": "2523350615",
"referenceId": "C25277523IA4",
"paymentType": "Forward",
"checkType": "Standard",
"direction": "Outbound",
"status": "Pending",
"source": "Api",
"posting": "Authorized",
"postingCode": "OK",
"coreTransactionId": "a1208c1b-f3d6-45b7-8660-ad9e00bf082a",
"memoPostId": "02444ecb-1bbb-4c9e-a8da-ad9e00bf082a",
"originalPaymentId": "278801a3-042f-4963-ae68-ad9e00bf082a",
"customerId": "81539818-c25c-4f5b-ac1f-ad9e00bef5b8",
"payerRoutingNumber": "123456789",
"payerAccountNumber": "423651472",
"payeeName": "",
"checkNumber": "101",
"bofdRoutingNumber": "021214891",
"sequenceNumber": "8844243179",
"amount": 100,
"currency": "usd",
"micr": "d123456789dc223651472c1237",
"recognizedAmount": 100,
"iqaPassed": true,
"hasFrontImage": true,
"hasBackImage": true,
"isRedeposit": true,
"policy": "RedepositedCheck",
"schedule": [
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
100
],
"createdAt": "2021-09-09T07:35:31.55-04:00",
"wasReturned": false,
"depositBusinessDate": "210909",
"productId": "95fec0a3-64ba-4b6e-a1ed-ad9e00bef6a1",
"partnerId": "e0e835f0-ee60-4c65-bada-ad9e00bef422",
"lastModifiedAt": "2021-09-09T07:35:34.3285628-04:00"
}
Authorize a check
Authorizes a check using Positive Pay.
Request attributes
accountNumber string Required Number of the account receiving the check |
amount integer Required Money amount that appears on the check Note
Money amounts in API calls and responses are written without a decimal point between the dollars and the cents. |
checkNumber string Required The serial number that appears on the check 20 characters maximum |
payeeName string Required Name written on the pay to the order of line of the check 255 characters maximum |
expiresAt string Optional The date and time the authorization expires. In this case, the date and time are in this format: yyyy-mm-ddThh:mm:ss[.mmm] |
id string Positive pay authorization ID. Save this GUID format ID as proof that the check was authorized using Positive Pay, and for use if you revoke authorization. |
status string Status of the positive pay record:
|
accountNumber string Number of the account receiving the check |
payeeName string Name written on the pay to the order of line of the check |
checkNumber string The serial number that appears on the check |
amount integer Money amount that appears on the check Note
Money amounts in API calls and responses are written without a decimal point between the dollars and the cents. |
relatedPaymentId string
|
createdAt string The date and time the record was created. In this case, the date and time are in this format: yyyy-mm-ddThh:mm:ss[.mmm] |
expiresAt string The date and time the authorization expires. In this case, the date and time are in this format: yyyy-mm-ddThh:mm:ss[.mmm] |
revokedAt string The date and time authorization was revoked. In this case, the date and time are in this format: yyyy-mm-ddThh:mm:ss[.mmm] |
productId string ID in GUID format of your specific product type on which the account is based. Provided by CR. In this case, it's the product ID of the payee account. |
partnerId string Your ID in the CR system. This ID is in GUID format. |
lastModifiedAt string Internal CR value. Date and time the database entry was last modified. |
curl -X POST
--header 'Content-Type: application/json'
--header 'Accept: application/json'
--header 'Authorization: Bearer <token>'
-d '{
"accountNumber": "2645256591",
"amount": 10000,
"checkNumber": "3001",
"payeeName": "Cleveland Brown",
"expiresAt": "2021-08-20T21:16:58.722Z"
} 'https://sandbox.crbcos.com/Checks/v1/positive-pay-authorizations'
{
"id": "6bcd87b9-58d5-4ccc-90c1-ad860161ce7a",
"status": "Authorized",
"accountNumber": "2645256591",
"payeeName": "Cleveland Brown",
"checkNumber": "3001",
"amount": 10000,
"createdAt": "2021-08-16T17:28:10.2151554-04:00",
"expiresAt": "2021-08-20T17:16:58.722-04:00",
"productId": "d3e6c8ce-3277-4cdd-bfa4-ad800131bd92",
"partnerId": "4c5b488d-711d-428a-bdae-ad800131970d",
"lastModifiedAt": "2021-08-16T17:28:10.2171568-04:00"
}
Revoke authorization
Revokes authorization already given for a specific check. You can only revoke authorization prior to the authorization expiration date.
Path parameters
id string Required Positive pay authorization ID received in the initial authorization response. |
Response attributes
The response attributes for this call are the same as for Authorize a check.
curl -X POST
--header 'Accept: application/json'
--header 'Authorization: Bearer <token>'
https://sandbox.crbcos.com/Checks/v1/positive-pay-authorizations/6bcd87b9-58d5-4ccc-90c1-ad860161ce7a/revoke
{
"id": "6bcd87b9-58d5-4ccc-90c1-ad860161ce7a",
"status": "Revoked",
"accountNumber": "2645256591",
"payeeName": "Cleveland Brown",
"checkNumber": "3001",
"amount": 10000,
"createdAt": "2021-08-16T17:28:10.217-04:00",
"expiresAt": "2021-08-20T17:16:58.723-04:00",
"revokedAt": "2021-08-16T17:52:54.4898879-04:00",
"productId": "d3e6c8ce-3277-4cdd-bfa4-ad800131bd92",
"partnerId": "4c5b488d-711d-428a-bdae-ad800131970d",
"lastModifiedAt": "2021-08-16T17:52:54.4978951-04:00"
}
Associated webhook envents
Event Name |
Description |
---|---|
Check.Payment.Sent |
A check deposit has been sent to the Federal Reserve for clearing |
Check.Payment.Received |
A check drawn on an account in COS has been deposited at another bank and has been received from the Federal Reserve for posting |
Check.Payment.Canceled |
An outbound payment has been canceled at the request of the partner |
Check.Payment.Rejected |
Outbound check could not be processed due to compliance reasons or was rejected by the Federal Reserve |
Check.Return.Received |
A previously deposited check has been returned by the receiving bank |
Check.Details.Changed |
Details of a check have been changed |
Check.Hold.Escalated |
A hold relating to either an inbound or outbound check was marked for escalation by a member of the Operations team. Commonly this is used to indicate additional documentation or action is needed by the partner. |
Check.Policy.Changed |
A check's Reg CC Policy has been updated |
Check.PositivePay.Created |
A check has been authorized for Positive Pay |
Check.PositivePay.Revoked |
A check's Positive Pay status has been revoked |
Check.Payment.Unauthorized |
A check drawn on an account in COS has been presented but was not authorized for Positive Pay |
Related topics
Tutorials