Use Remote Deposit Capture (API)

Learn how to use mobile RDC (remote deposit capture) to convert paper checks into electronic payments via the API

Applies to:Developers

Remote Deposit Capture (RDC) is a service that allows you to convert paper checks into electronic payments without physically depositing them at a bank. This guide explains how to implement RDC via the API.

Contact the Payabli support team to enable Remote Deposit Capture for your account.

The implementation process consists of two main API calls:

  1. Check image capture and OCR extraction
  2. Payment processing using the extracted check information

Before you begin, make sure you read Capturing in-person checks to understand the key concepts and requirements for Remote Deposit Capture (RDC).

Step 1: Process check images

First, send the check images to Payabli for processing using the /CheckCapture/CheckProcessing endpoint. You need to send the front and back images of the check in JPEG or PNG format, base64 encoded.

POST
/api/CheckCapture/CheckProcessing
1curl -X POST https://api-sandbox.payabli.com/api/CheckCapture/CheckProcessing \
2 -H "requestToken: <apiKey>" \
3 -H "Content-Type: application/json" \
4 -d '{
5 "entryPoint": "47abcfea12",
6 "frontImage": "/9j/4AAQSkZJRgABAQEASABIAAD...",
7 "rearImage": "/9j/4AAQSkZJRgABAQEASABIAAD...",
8 "checkAmount": 12550
9}'

A successful response includes the extracted check information, including the OCR account and routing numbers, as well as the check amount.

Response
1{
2 "id": "txn_abc123def456",
3 "success": true,
4 "processDate": "2025-04-10T04:17:09.875Z",
5 "ocrMicr": "⑆123456789⑆ ⑈123456⑈ 0123",
6 "ocrMicrStatus": "SUCCESS",
7 "ocrMicrConfidence": "95",
8 "ocrAccountNumber": "123456",
9 "ocrRoutingNumber": "123456789",
10 "ocrCheckNumber": "0123",
11 "ocrCheckTranCode": "",
12 "ocrAmount": "125.50",
13 "ocrAmountStatus": "SUCCESS",
14 "ocrAmountConfidence": "98",
15 "amountDiscrepancyDetected": false,
16 "endorsementDetected": true,
17 "errors": [],
18 "messages": [
19 "Check processed successfully"
20 ],
21 "carLarMatchConfidence": "97",
22 "carLarMatchStatus": "MATCH",
23 "checkType": 1,
24 "referenceNumber": "REF_XYZ789"
25}

If the check processing fails, the response includes error information to help you troubleshoot the issue. Some errors appear in the errors array of 200 response, and validation errors are returned as a 400 response.

1 {
2 "id": "",
3 "success": false,
4 "processDate": "0001-01-01T00:00:00",
5 "ocrMicr": null,
6 "ocrMicrStatus": "",
7 "ocrMicrConfidence": null,
8 "ocrAccountNumber": null,
9 "ocrRoutingNumber": null,
10 "ocrCheckNumber": null,
11 "ocrCheckTranCode": null,
12 "ocrAmount": "107",
13 "ocrAmountStatus": "",
14 "ocrAmountConfidence": null,
15 "amountDiscrepancyDetected": false,
16 "endorsementDetected": false,
17 "errors": [
18 "It appears you submitted 2 images of front of check. Please retake both front and rear photos."
19 ],
20 "messages": [],
21 "carLarMatchConfidence": null,
22 "carLarMatchStatus": null,
23 "frontImage": null,
24 "rearImage": null,
25 "checkType": 0,
26 "referenceNumber": "0"
27 }

Step 2: Process payment

After successfully processing the check images, use the extracted information to complete the payment transaction.

Send a POST request to /MoneyIn/getpaid:

1{
2 "entryPoint": "41035afaa7",
3 "paymentMethod": {
4 "method": "ach",
5 "achAccount": "123456", // Use ocrAccountNumber from step 1
6 "achRouting": "123456789", // Use ocrRoutingNumber from step 1
7 "achCode": "BOC", // Must be "BOC" for check conversion
8 "achHolder": "John Doe", // Account holder name
9 "achAccountType": "Checking" // Must be "Checking"
10 },
11 "paymentDetails": {
12 "totalAmount": 12550 // Same amount as in step 1 (in cents)
13 },
14 "referenceId": "abc123def456" // Use id from step 1 response
15}

This request has some differences from the standard transaction, pay attention to the following fields:

FieldValueDescription
methodachPayment method must be ACH
achCodeBOCACH SEC code must be BOC for check conversion
achAccountType”Checking”Account type must be Checking
totalAmount12550Amount in cents.
referenceId”abc123def456”ID from the check processing response

A successful request returns a 200 response.

Response
1{
2 "isSuccess": true,
3 "responseData": {
4 "authCode": "123456",
5 "avsResponseText": null,
6 "customerId": 4440,
7 "cvvResponseText": null,
8 "methodReferenceId": null,
9 "referenceId": "45-erre-324",
10 "resultCode": 1,
11 "resultText": "Approved"
12 },
13 "responseText": "Success"
14}

Implementation recommendations

When implementing RDC, consider the following recommendations, which can help create a smoother user experience and reduce errors.

Data validation

Before submitting to the API:

  • Ensure check images are correctly encoded and within size limits
  • Verify the check amount is in cents (integer value)
  • Check that the required parameters are correctly formatted

Error handling strategies

When implementing error handling, consider the following scenarios and strategies:

Error scenarioHandling strategy
OCR confidence below thresholdImplement manual review for low confidence results
Image quality issuesGive the user feedback to retake images
Amount discrepanciesShow warning and allow user to confirm correct amount
Connectivity problemsImplement retry logic with exponential backoff

Testing recommendations

When testing your RDC implementation, consider the following scenarios:

  1. Image quality testing: Test with varied image qualities and lighting conditions.
  2. Error handling: Test with intentionally poor images and various check types to verify error handling.
  3. End-to-end flow: Test the complete flow from image capture to payment processing.
  4. Integration testing: Verify proper integration with your existing systems.