Initiate check return
Relevant webhooks
For this endpoint be sure you have registered for these webhooks:
API reference
Initiates return of an inbound forward check. An inbound check payment can only be returned after it successfully posts to the Cross River account it was drawn on.
Return of an inbound forward payment is known as an outbound return payment, so the response includes a payment ID.
A Cross River Partner ID is associated with an inbound payment only after it has successfully posted to the receiver’s Cross River account. Therefore, you will not see inbound payments that fail to post for reasons such as an invalid routing number or an active account restriction.
Endpoint: /checks/v1/payments/{id}/returns
POST
https://sandbox.crbcos.com/checks/v1/payments/{id}/returns
Path Parameters
- idstringrequiredDescription
Body Parameters
- returnCodestringrequiredDescription
Response
- idstringDescription
- accountNumberstringDescription
- referenceIdstringDescription
- paymentTypestringDescription
- checkTypestringDescription
- direction stringDescription
- statusstringDescription
- sourcestringDescription
- postingstringDescription
- rejectionReasonstringDescription
- positivePayResultstringDescription
- positivePayMatchIdstringDescription
- postingCodestringDescription
- clientBatchIdstringDescription
- clientBatchSequenceintegerDescription
- fedBatchIdstringDescription
- fedBatchSequenceintegerDescription
- coreTransactionIdstringDescription
- memoPostIdstringDescription
- originalPaymentIdstringDescription
- customerIdstringDescription
- payerRoutingNumberstringDescription
- payerAccountNumberstringDescription
- payeeNamestringDescription
- checkNumberstringDescription
- bofdRoutingNumberstringDescription
- sequenceNumberstringDescription
- amountintegerDescription
- currencystringDescription
- micrstringDescription
- recognizedAmountintegerDescription
- iqaPassedbooleanDescription
- returnCodestringDescription
- hasFrontImagebooleanDescription
- hasBackImagebooleanDescription
- isRedepositbooleanDescription
- policy stringDescription
- schedulearrayDescription
- createdAtstringDescription
- canceledAtstringDescription
- rejectedAtstringDescription
- processedAtstringDescription
- completedAtstringDescription
- postedAtstringDescription
- wasReturnedbooleanDescription
- purposestringDescription
- clientIdentifierstringDescription
- depositBusinessDatestringDescription
- lockboxVendorIdstringDescription
- productIdstringDescription
- partnerIdstringDescription
- lastModifiedAtstringDescription
curl
curl --location 'https://sandbox.crbcos.com/checks/v1/payments/d147462c-64c4-480a-b80a-b449006b04ff/returns' \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"returnCode": "I"
}'nodejs
var https = require('follow-redirects').https;
var fs = require('fs');
var options = {
'method': 'POST',
'hostname': 'sandbox.crbcos.com',
'path': '/checks/v1/payments/d147462c-64c4-480a-b80a-b449006b04ff/returns',
'headers': {
'Authorization': 'Bearer <token>',
'Content-Type': 'application/json'
},
'maxRedirects': 20
};
var req = https.request(options, function (res) {
var chunks = [];
res.on("data", function (chunk) {
chunks.push(chunk);
});
res.on("end", function (chunk) {
var body = Buffer.concat(chunks);
console.log(body.toString());
});
res.on("error", function (error) {
console.error(error);
});
});
var postData = "{\r\n \"returnCode\": \"I\"\r\n}";
req.write(postData);
req.end();python
import http.client
conn = http.client.HTTPSConnection("sandbox.crbcos.com")
payload = "{\r\n \"returnCode\": \"I\"\r\n}"
headers = {
'Authorization': 'Bearer <token>',
'Content-Type': 'application/json'
}
conn.request("POST", "/checks/v1/payments/d147462c-64c4-480a-b80a-b449006b04ff/returns", payload, headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))ruby
require "uri"
require "net/http"
url = URI("https://sandbox.crbcos.com/checks/v1/payments/d147462c-64c4-480a-b80a-b449006b04ff/returns")
https = Net::HTTP.new(url.host, url.port)
https.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = "Bearer <token>"
request["Content-Type"] = "application/json"
request.body = "{\r\n \"returnCode\": \"I\"\r\n}"
response = https.request(request)
puts response.read_body
go
package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://sandbox.crbcos.com/checks/v1/payments/d147462c-64c4-480a-b80a-b449006b04ff/returns"
method := "POST"
payload := strings.NewReader(`{
"returnCode": "I"
}`)
client := &http.Client {
}
req, err := http.NewRequest(method, url, payload)
if err != nil {
fmt.Println(err)
return
}
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, err := client.Do(req)
if err != nil {
fmt.Println(err)
return
}
defer res.Body.Close()
body, err := io.ReadAll(res.Body)
if err != nil {
fmt.Println(err)
return
}
fmt.Println(string(body))
}200
{
"id": "f5a8f301-6508-4345-a570-b449006bb824",
"accountNumber": "2846220461",
"referenceId": "C133QA018017",
"paymentType": "Return",
"checkType": "Unknown",
"direction": "Outbound",
"status": "Created",
"source": "Api",
"posting": "Pending",
"postingCode": "OK",
"coreTransactionId": "70259003-10c1-4ae4-9cec-b449006bb824",
"memoPostId": "e12d64be-9052-4145-b2a0-b449006bb824",
"originalPaymentId": "d147462c-64c4-480a-b80a-b449006b04ff",
"customerId": "05106466-9144-4f3f-8fb1-b345005d18ba",
"payerRoutingNumber": "021214891",
"payerAccountNumber": "2846220461",
"payeeName": "string",
"checkNumber": "2846220461",
"bofdRoutingNumber": "021214891",
"sequenceNumber": "5599498374",
"amount": 5556,
"currency": "usd",
"recognizedAmount": 0,
"iqaPassed": false,
"returnCode": "I",
"hasFrontImage": true,
"hasBackImage": true,
"isRedeposit": false,
"policy": "Standard",
"schedule": [],
"createdAt": "2026-05-13T02:32:11.6396438-04:00",
"wasReturned": false,
"decisionRequired": false,
"wasDecisioned": false,
"productId": "83bed086-8182-4151-a1e3-af5b01362783",
"partnerId": "cd9c12f4-7691-424a-b38b-af5b0134c611",
"lastModifiedAt": "2026-05-13T02:32:11.6396701-04:00"
}400
{
"errors": [
{
"code": 2012,
"message": "Payment must be status completed or rejected to be returned"
}
]
}