Batch Progress and Results
curl --request GET \
--url https://api.finosu.com/customers/batch/{jobId} \
--header 'X-API-Key: <api-key>'import requests
url = "https://api.finosu.com/customers/batch/{jobId}"
headers = {"X-API-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-Key': '<api-key>'}};
fetch('https://api.finosu.com/customers/batch/{jobId}', 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/customers/batch/{jobId}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"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"
"net/http"
"io"
)
func main() {
url := "https://api.finosu.com/customers/batch/{jobId}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-API-Key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.finosu.com/customers/batch/{jobId}")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.finosu.com/customers/batch/{jobId}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-API-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"jobId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"status": "pending",
"totalCustomers": 123,
"processed": 123,
"failed": 123,
"progressPercentage": 123,
"createdAt": "2023-11-07T05:31:56Z",
"processingStartedAt": "2023-11-07T05:31:56Z",
"processingCompletedAt": "2023-11-07T05:31:56Z",
"errorMessage": "<string>",
"failures": [
{
"index": 4,
"customerId": "CUST127",
"message": "422: Missing required fields: phoneNumber"
}
],
"results": [
{
"index": 123,
"customerId": "<string>",
"status": "scheduled",
"loanId": "<string>",
"replayed": false,
"retryable": false,
"code": "<string>",
"message": "<string>",
"origination": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"status": "scheduled",
"customerId": "<string>",
"loanId": "<string>",
"scheduleId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"scheduledCallId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"scheduledTime": "2023-11-07T05:31:56Z",
"scheduledCallCount": 123
}
}
]
}{
"detail": "<string>"
}{
"detail": "<string>"
}Origination
Batch Progress and Results
Company-scoped job progress. Origination jobs return ordered per-row results and failures; customer-create jobs return failures with results empty. Partial while running. completed can include failed rows, so always inspect failed and the row outcomes.
GET
/
customers
/
batch
/
{jobId}
Batch Progress and Results
curl --request GET \
--url https://api.finosu.com/customers/batch/{jobId} \
--header 'X-API-Key: <api-key>'import requests
url = "https://api.finosu.com/customers/batch/{jobId}"
headers = {"X-API-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-Key': '<api-key>'}};
fetch('https://api.finosu.com/customers/batch/{jobId}', 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/customers/batch/{jobId}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"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"
"net/http"
"io"
)
func main() {
url := "https://api.finosu.com/customers/batch/{jobId}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-API-Key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.finosu.com/customers/batch/{jobId}")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.finosu.com/customers/batch/{jobId}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-API-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"jobId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"status": "pending",
"totalCustomers": 123,
"processed": 123,
"failed": 123,
"progressPercentage": 123,
"createdAt": "2023-11-07T05:31:56Z",
"processingStartedAt": "2023-11-07T05:31:56Z",
"processingCompletedAt": "2023-11-07T05:31:56Z",
"errorMessage": "<string>",
"failures": [
{
"index": 4,
"customerId": "CUST127",
"message": "422: Missing required fields: phoneNumber"
}
],
"results": [
{
"index": 123,
"customerId": "<string>",
"status": "scheduled",
"loanId": "<string>",
"replayed": false,
"retryable": false,
"code": "<string>",
"message": "<string>",
"origination": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"status": "scheduled",
"customerId": "<string>",
"loanId": "<string>",
"scheduleId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"scheduledCallId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"scheduledTime": "2023-11-07T05:31:56Z",
"scheduledCallCount": 123
}
}
]
}{
"detail": "<string>"
}{
"detail": "<string>"
}Use the
jobId or Location returned by batch enrollment.
Authenticate with the company key used for submission. Another company’s job
returns 404.
202 acceptance does not mean processing is complete. While a job is running,
results contains only finished origination rows, ordered by the submitted
zero-based index. A completed job can include failures; inspect failed,
failures, and the per-row result before declaring the list successful.
For the existing customer-create batch workflow, results is empty; use
failures and the job counts. See retry rules
before resubmitting an origination row.Response
Batch job status