Close origination
curl --request POST \
--url https://api.finosu.com/originations/{id}/close \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"reason": "FUNDED"
}
'import requests
url = "https://api.finosu.com/originations/{id}/close"
payload = { "reason": "FUNDED" }
headers = {
"X-API-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-API-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({reason: 'FUNDED'})
};
fetch('https://api.finosu.com/originations/{id}/close', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.finosu.com/originations/{id}/close",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'reason' => 'FUNDED'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-API-Key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.finosu.com/originations/{id}/close"
payload := strings.NewReader("{\n \"reason\": \"FUNDED\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-API-Key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.finosu.com/originations/{id}/close")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"reason\": \"FUNDED\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.finosu.com/originations/{id}/close")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-API-Key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"reason\": \"FUNDED\"\n}"
response = http.request(request)
puts response.read_body{
"id": "<string>",
"reason": "FUNDED",
"cancelledCallSchedules": 123,
"cancelledEmailSchedules": 123,
"cancelledSmsSchedules": 123,
"cancelledCalls": 123,
"cancelledEmails": 123,
"cancelledSms": 123,
"status": "CLOSED"
}{
"detail": "<string>"
}{
"detail": "<string>"
}{
"detail": "<string>"
}{
"detail": [
{}
]
}{
"detail": "<string>"
}Origination
Close Origination
Record the final outcome for an enrolled application and cancel its active/paused call, SMS and email cadences and pending communications atomically. No lender-side writes. Same-reason retries reassert closure; conflicting outcomes and active funded loans return 409. Queue-claimed calls remain owned by delivery/recovery and are excluded from cancelledCalls. In-progress communications cannot be recalled.
POST
/
originations
/
{id}
/
close
Close origination
curl --request POST \
--url https://api.finosu.com/originations/{id}/close \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"reason": "FUNDED"
}
'import requests
url = "https://api.finosu.com/originations/{id}/close"
payload = { "reason": "FUNDED" }
headers = {
"X-API-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-API-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({reason: 'FUNDED'})
};
fetch('https://api.finosu.com/originations/{id}/close', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.finosu.com/originations/{id}/close",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'reason' => 'FUNDED'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-API-Key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.finosu.com/originations/{id}/close"
payload := strings.NewReader("{\n \"reason\": \"FUNDED\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-API-Key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.finosu.com/originations/{id}/close")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"reason\": \"FUNDED\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.finosu.com/originations/{id}/close")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-API-Key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"reason\": \"FUNDED\"\n}"
response = http.request(request)
puts response.read_body{
"id": "<string>",
"reason": "FUNDED",
"cancelledCallSchedules": 123,
"cancelledEmailSchedules": 123,
"cancelledSmsSchedules": 123,
"cancelledCalls": 123,
"cancelledEmails": 123,
"cancelledSms": 123,
"status": "CLOSED"
}{
"detail": "<string>"
}{
"detail": "<string>"
}{
"detail": "<string>"
}{
"detail": [
{}
]
}{
"detail": "<string>"
}Close an enrolled application’s origination outreach when it has been funded,
withdrawn, or rejected. Use the external application reference (
The body and
Retry with the same reference and reason after an uncertain response; no
A funded loan that is already active in collections is rejected even if it has
origination history. Use the collections API for collections lifecycle changes.
loanId from
enrollment) as {id}, with the same company’s X-API-Key.
curl --request POST 'https://api.finosu.com/originations/APPLICATION-123/close' \
--header 'X-API-Key: YOUR_API_KEY' \
--header 'Content-Type: application/json' \
--data '{"reason":"FUNDED"}'
Required reason
| Reason | Meaning |
|---|---|
FUNDED | The lender has funded the application. |
WITHDRAWN | The application has been withdrawn. |
REJECTED | The application has been declined or rejected. |
reason are required. Values are case-sensitive. Retrieve the
catalog with List Origination Close Reasons.
Collections reasons such as PAID_OFF and BANKRUPTCY are not accepted.
Effect and response
The operation records the final application outcome, closes its active or paused call/email/SMS cadences and their pending work in one transaction. Other applications and loans belonging to the customer are unaffected. This records an outcome reported by the lender; it does not fund, withdraw, or reject the application in the lender’s LMS. Calls and messages already in progress cannot be recalled. Queue-claimed calls remain owned by the delivery worker and are excluded fromcancelledCalls; the parent
cadence is closed, and pending delivery is subject to the existing eligibility
checks. Closure does not erase queue claims or processing leases.
{
"id": "APPLICATION-123",
"status": "CLOSED",
"reason": "FUNDED",
"cancelledCallSchedules": 1,
"cancelledEmailSchedules": 0,
"cancelledSmsSchedules": 0,
"cancelledCalls": 4,
"cancelledEmails": 0,
"cancelledSms": 0
}
Idempotency-Key is required. A repeat returns CLOSED and the same reason,
with counts of items cancelled by that request (normally zero). It also closes
any active or paused cadences that have reappeared. A different final reason
returns 409 and does not overwrite the existing outcome. This endpoint does
not reopen an application; a new enrollment cannot restart the closed application.
Errors
| Status | Meaning |
|---|---|
401 | Missing, invalid, or inactive API key. |
404 | No non-deleted application with that reference exists in your company. |
409 | Ambiguous reference, missing recorded origination enrollment, a funded active loan, a changed scope, or a different existing final outcome. |
422 | Missing body/reason, invalid reason, or unexpected fields. |
500 | Operation failed; transaction rolled back. Retry the same request. |
Authorizations
Path Parameters
External application reference (loanId from enrollment)
Body
application/json
Available options:
FUNDED, WITHDRAWN, REJECTED Response
Origination closed; counts reflect work cancelled by this request
Available options:
FUNDED, WITHDRAWN, REJECTED Allowed value:
"CLOSED"