Skip to content

Track Operation Status

Poll this endpoint to check whether an async operation has completed.

Endpoint

GET /fineract/track/{tracking_id}

Headers

KeyValue
X-Internal-TokenYour internal orchestration token

Example URL

https://turnomifos.incentius.net/api/fineract/track/CLIENT_CREATE|406362bf-f3da-4bc6-a506-d67e0878b7b6

Responses

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

FieldTypeDescription
tracking_idstringUnique ID in format OPERATION_TYPE|<uuid>
operation_typestringThe operation that was performed
statusstring"processing", "success", or "failed"
success_responseobject | nullFineract response body on success
failure_responseobject | nullFineract error response on failure
error_messagestring | nullHuman-readable error message
processed_atstring | nullISO 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)

Turno Fineract LMS Documentation