Track Operation Status
Poll this endpoint to check whether an async operation has completed.
Endpoint
GET /fineract/track/{tracking_id}Headers
| Key | Value |
|---|---|
X-Internal-Token | Your internal orchestration token |
Example URL
https://turnomifos.incentius.net/api/fineract/track/CLIENT_CREATE|406362bf-f3da-4bc6-a506-d67e0878b7b6Responses
Still Processing (HTTP 200)
json
{
"tracking_id": "CLIENT_CREATE|406362bf-f3da-4bc6-a506-d67e0878b7b6",
"status": "processing"
}Completed Successfully (HTTP 200)
json
{
"tracking_id": "CLIENT_CREATE|406362bf-f3da-4bc6-a506-d67e0878b7b6",
"operation_type": "CLIENT_CREATE",
"status": "success",
"success_response": {
"officeId": 1,
"clientId": 42,
"resourceId": 42
},
"failure_response": null,
"error_message": null,
"processed_at": "2026-03-13T10:01:02.940713"
}Failed (HTTP 200)
json
{
"tracking_id": "LOAN_DISBURSE|c8e2f1a0-1234-5678-abcd-ef0123456789",
"operation_type": "LOAN_DISBURSE",
"status": "failed",
"success_response": null,
"failure_response": {
"httpStatusCode": "403",
"errors": [
{
"defaultUserMessage": "Loan can't be disbursed, disburse amount is exceeding approved principal."
}
]
},
"error_message": "Fineract returned 403",
"processed_at": "2026-03-13T10:02:15.123456"
}Response Fields
| Field | Type | Description |
|---|---|---|
tracking_id | string | Unique ID in format OPERATION_TYPE|<uuid> |
operation_type | string | The operation that was performed |
status | string | "processing", "success", or "failed" |
success_response | object | null | Fineract response body on success |
failure_response | object | null | Fineract error response on failure |
error_message | string | null | Human-readable error message |
processed_at | string | null | ISO 8601 timestamp of completion |
Polling Strategy
TIP
Poll every 2-3 seconds until status is no longer "processing". Most operations complete within 5 seconds.
python
import time
import requests
tracking_id = "CLIENT_CREATE|406362bf-..."
url = f"https://turnomifos.incentius.net/api/fineract/track/{tracking_id}"
headers = {"X-Internal-Token": "your-token"}
while True:
resp = requests.get(url, headers=headers).json()
if resp["status"] != "processing":
print(resp)
break
time.sleep(2)