Submit Combined Analysis
curl --request POST \
--url https://gateway.manka.tz/v1/api/analysis-combined \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"files": [
null
],
"callback_url": "<string>",
"passwords": "<string>"
}
'import requests
url = "https://gateway.manka.tz/v1/api/analysis-combined"
payload = {
"files": [None],
"callback_url": "<string>",
"passwords": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({files: [null], callback_url: '<string>', passwords: '<string>'})
};
fetch('https://gateway.manka.tz/v1/api/analysis-combined', 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://gateway.manka.tz/v1/api/analysis-combined",
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([
'files' => [
null
],
'callback_url' => '<string>',
'passwords' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$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://gateway.manka.tz/v1/api/analysis-combined"
payload := strings.NewReader("{\n \"files\": [\n null\n ],\n \"callback_url\": \"<string>\",\n \"passwords\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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://gateway.manka.tz/v1/api/analysis-combined")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"files\": [\n null\n ],\n \"callback_url\": \"<string>\",\n \"passwords\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://gateway.manka.tz/v1/api/analysis-combined")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"files\": [\n null\n ],\n \"callback_url\": \"<string>\",\n \"passwords\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"status": "processing",
"task_id": "8b1c4e2f-3a5d-4f9e-b6a7-d8c9e0f1a2b3"
}
Combined Analysis
Submit Combined Analysis
Submit two or more statements for a single combined asynchronous analysis.
POST
/
analysis-combined
Submit Combined Analysis
curl --request POST \
--url https://gateway.manka.tz/v1/api/analysis-combined \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"files": [
null
],
"callback_url": "<string>",
"passwords": "<string>"
}
'import requests
url = "https://gateway.manka.tz/v1/api/analysis-combined"
payload = {
"files": [None],
"callback_url": "<string>",
"passwords": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({files: [null], callback_url: '<string>', passwords: '<string>'})
};
fetch('https://gateway.manka.tz/v1/api/analysis-combined', 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://gateway.manka.tz/v1/api/analysis-combined",
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([
'files' => [
null
],
'callback_url' => '<string>',
'passwords' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$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://gateway.manka.tz/v1/api/analysis-combined"
payload := strings.NewReader("{\n \"files\": [\n null\n ],\n \"callback_url\": \"<string>\",\n \"passwords\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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://gateway.manka.tz/v1/api/analysis-combined")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"files\": [\n null\n ],\n \"callback_url\": \"<string>\",\n \"passwords\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://gateway.manka.tz/v1/api/analysis-combined")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"files\": [\n null\n ],\n \"callback_url\": \"<string>\",\n \"passwords\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"status": "processing",
"task_id": "8b1c4e2f-3a5d-4f9e-b6a7-d8c9e0f1a2b3"
}
Submits two or more bank statement PDFs for a combined asynchronous analysis. Useful when a borrower has multiple accounts (e.g. M-Pesa + bank) and you want a single consolidated view.
A
callback_url is required for this endpoint — there is no polling fallback.Request body
One or more bank statement PDFs. Repeat the
files field once per file in the multipart form.URL that will receive the combined result. See Callback payload.
JSON-encoded array of passwords positionally matching
files. Use an empty string for files that are not encrypted, e.g. ["", "secret", ""].Response
Returns the initial acknowledgement from the analysis service. The combined result itself is delivered tocallback_url when ready.
{
"status": "processing",
"task_id": "8b1c4e2f-3a5d-4f9e-b6a7-d8c9e0f1a2b3"
}
Error responses
| Status | Reason |
|---|---|
400 | No files provided, callback_url missing, or unrecognisable PDF format |
401 | Missing or invalid API token |
402 | Insufficient analysis credits |
500 | Internal error processing the combined analysis |
Example
curl -X POST https://gateway.manka.tz/v1/api/analysis-combined \
-H "Authorization: Bearer $MANKA_API_TOKEN" \
-F "files=@equity.pdf" \
-F "files=@mpesa.pdf" \
-F 'passwords=["", "hunter2"]' \
-F "callback_url=https://example.com/manka/webhook"
import json, requests
files = [
("files", open("equity.pdf", "rb")),
("files", open("mpesa.pdf", "rb")),
]
r = requests.post(
"https://gateway.manka.tz/v1/api/analysis-combined",
headers={"Authorization": f"Bearer {token}"},
files=files,
data={
"callback_url": "https://example.com/manka/webhook",
"passwords": json.dumps(["", "hunter2"]),
},
)
⌘I