Checks management
Deposit a check
7min
in this tutorial, you'll learn how to ✅ deposit a check ✅ handle rejected checks if you are new to check management we recommend you read the checks management docid\ xvibuejbxphn6uxinpkt5 before starting this tutorial the tutorial assumes you have a knowledge of apis and how they work for more information on sending api calls, see the api basics docid\ hjr4y6ml96zuyj6trytom the tutorial uses these api endpoints api description check management docid\ nrrvehm 6ju3udzxmyzo provides the necessary information and images to deposit a check the tutorial uses these webhooks webhook description check payment sent a check deposit was sent to the federal reserve for clearing check payment rejected an outbound check wasn't processed due to compliance reasons or rejection by the federal reserve check payment returned receiving bank returned a check to the sender before you begin make sure you have api basics docid\ hjr4y6ml96zuyj6trytom cross river bank account number images of the front and back of the check in base64 (c9 check) format register the relevant webhook events to receive the webhook events for this tutorial both partner accounts need to banking and payments docid\ dgnysfx9f7pnesmuxnwsp each specific webhook event type once you are registered, the event objects are sent to the registered urls the event object contains a list of resource identifiers used to download details on each event deposit a check in this tutorial you're a banking as a service (baas) partner that offers a deposit account product to consumers your app allows your customers to perform mobile deposits one of your customers just made a $1 check deposit into their account using your app, which is calling the cr system to pass the deposit details to deposit a check call post /checks/v1/payments for this call, you must supply the number of the account where the check is being deposited and images of both the front and back of the check as base64 encoded values a full list of attributes is found check management docid\ nrrvehm 6ju3udzxmyzo sample request post /v1/payments { "accountnumber" "2193590144", "amount" 100, "frontimage" "image/jpg;base64,/9j/4reyrxhpzgaatu0akga ", "backimage" "image/jpg;base64,/9j/4quqrxhpzgaatu0akg ", "isredeposit" false } a successful api call returns a json response with the details of the check the status attribute in the response only tells you that the payment was created it's not an indicator of a successful payment the id attribute provides you with the payment id in this case, it's 9a44fdbf 89e2 4300 8f05 ad9501439bb1 the schedule attribute shows the schedule for paying the deposit into the account 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" "entered by #60c367e26dd36a0068580230#", "depositbusinessdate" "210831", "productid" "d5dc52bb df80 4a5d a5a8 ad89013844bd", "partnerid" "ede1a60d 3d51 47e8 9a9b ad8901381f9e", "lastmodifiedat" "2021 08 31t15 38 13 2951299 04 00" the cr system executes its ocr process to convert the check images into a format that complies with federal reserve standards cr sends the check deposit to the federal reserve for clearing, which triggers the check payment sent webhook event note that the payment id appears in the resources array if you are registered for the core transaction completed webhook event, you also receive that webhook at this point when the check payment is released to the federal reserve, the cr system executes the core transaction related to the payment this does not mean the funds are available the schedule attribute in the response indicates the availability schedules of the deposited funds { "id" "160e52d2 4355 4fa3 a421 ad8800f886a2", "eventname" "check payment sent", "status" "pending", "partnerid" "4c5b488d 711d 428a bdae ad800131970d", "createdat" "2021 08 31t15 39 51 3 04 00", "resources" \[ "checks/v1/payments/9a44fdbf 89e2 4300 8f05 ad9501439bb1" ], "details" \[ { "paymentid" "9a44fdbf 89e2 4300 8f05 ad9501439bb1", "paymenttype" "forward", "coretransactionid" "21ba5fb0 e609 4560 a36f ad9501439bb1", "memopostid" "dc20e619 c5f7 4890 b3c8 ad9501439bb1", "accountnumber" "2193590144", "depositbusinessdate" "230808", "postingcode" "ok", "amount" "10000", "recognizedamount" "100", "payerroutingnumber" "314074269", "payeraccountnumber" "28293886", "checknumber" "1237", "checktype" "standard", "sequencenumber" "1353885824", "micr" "1237", "purpose" "skip iqa", "clientidentifier" null, "schedule" "0,0,10000", "policy" "standard", "rejectionreason" null, "isredeposit" "false", "originalpaymentid" "9a44fdbf 89e2 4300 8f05 ad9501439bb1" } ] } check validation a check is systemically validated for compliance when you deposit it, for example the system verifies that the check has a valid micr number results of this validation appear in the body of the response to the deposit request non compliant checks are rejected and the request and response codes docid\ wd9ku qkbonzvwmps2lb appears in the rejectionreason field rejected checks check rejection triggers the check payment rejected webhook event in this case the payment id is b9e53e1c 683e 469c 8f79 ad8800f1ccc check payment rejected webhook event { "id" "96595e06 508f 4d5f ba80 ad8800f1e69d", "eventname" "check payment rejected", "status" "pending", "partnerid" "4c5b488d 711d 428a bdae ad800131970d", "createdat" "2021 08 18t10 40 44 033 04 00", "resources" \[ "checks/v1/payments/b9e53e1c 683e 469c 8f79 ad8800f1ccc3" ], "details" \[ { "paymentid" "b9e53e1c 683e 469c 8f79 ad8800f1ccc3", "paymenttype" "forward", "coretransactionid" "2c9292b0 cf01 44c5 b416 b05800de64c7", "memopostid" "ef1aee23 1546 438a a2bd b05800de64c7", "accountnumber" "2151546989", "depositbusinessdate" "230808", "postingcode" "ok", "amount" "70000", "recognizedamount" "100", "payerroutingnumber" "314074269", "payeraccountnumber" "28293886", "checknumber" "1237", "checktype" "standard", "sequencenumber" "0283216503", "micr" "1237", "purpose" "skip iqa", "clientidentifier" null, "schedule" "0,0,70000", "policy" "standard", "rejectionreason" "duplicate", "isredeposit" "false", "originalpaymentid" "b9e53e1c 683e 469c 8f79 ad8800f1ccc3" } ] } as already described, the request and response codes docid\ wd9ku qkbonzvwmps2lb appears in the rejectionreason field of the event in the example above, the check payment is rejected because of duplicate address any check issues with the customer prior to resubmitting the check deposit to avoid subsequent rejections