---
title: "Get Sender Profile API Reference"
description: "Fetch the DMT-Levin profile of a sender by mobile number, including monthly, used and remaining limits."
canonical: "https://eps.eko.in/docs/dmt-levin-get-sender"
---


> **Canonical URL:** https://eps.eko.in/docs/dmt-levin-get-sender
> This is a machine-readable Markdown version of the page for AI agents and LLMs. The primary (HTML) version lives at the canonical URL above.

# Get Sender Profile API Reference

`GET https://staging.eko.in/ekoapi/v3/customer/profile/{customer_id}/dmt-levin`

Fetch the DMT-Levin profile of a sender by mobile number, including monthly, used and remaining limits.

> [!WARNING]
> The UAT / Sandbox environment is not available for this API — requests to `https://staging.eko.in/ekoapi/v3` return an error response. Test it in Production.

The first step in the DMT Levin flow. Call this to check whether the sender exists on the platform. For an existing sender (response_type_id 309) the response returns their monthly limit, used amount and remaining limit. For a new sender (response_type_id 2136) it returns an `otp_ref_id` — proceed to Validate Aadhaar & Generate OTP to create the sender before using other services.

> View product & pricing details: [Domestic Money Transfer (DMT)](https://eps.eko.in/products/dmt-api.md)

## Path parameters

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| customer_id | string | yes | Sender's 10-digit mobile number. e.g. 9999999999 |

## Query parameters

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| initiator_id | string | yes | Registered mobile number of the API user (see Platform Credentials). e.g. 9962981729 |
| client_ref_id | string | no | Unique reference ID per API call, generated by your system (10–20 characters; 10 recommended). The SDKs generate one for every non-GET call when you don't. e.g. 2026010100123456789 |
| user_code | string | yes | Agent user code (sent as a query parameter). e.g. 20180020 |

## Headers

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| developer_key | string | yes | Static API key issued to your account after KYC. |
| secret-key | string | yes | Dynamic per-request signature: base64(HMAC-SHA256(timestamp, base64(access_key))). |
| secret-key-timestamp | string | yes | Current time in milliseconds since UNIX epoch, used to compute secret-key. Must match server time. |
| content-type | string | yes | application/json e.g. application/json |

## Response

⭐ marks fields highlighted as verifiable.

| Field | Type | Description |
| --- | --- | --- |
| status | number | Primary success indicator (0 = success). |
| message | string | Human-readable response / error message. |
| response_status_id | number | UI display hint only (-1/0 success, 1 failure, 2 initiated, 3 refund initiated, 4 refunded). Never branch on it — use `status` (and `tx_status` for financial APIs), or `response_type_id` where documented. |
| response_type_id | number | A unique id for every possible response shape (success or error) — useful for client logic branching and analytics. |
| data | object | API-specific response payload. |
| data.is_registered | number | Registration flag from the profile lookup. Read customer_profile.kyc_state to determine KYC completion. |
| data.next_allowed_limit ⭐ | number | Remaining remittance limit currently available (INR). |
| data.kyc_state | number | Top-level KYC flag for the lookup response. |
| data.customer_profile ⭐ | object | Sender profile summary. |
| data.customer_profile.name ⭐ | string | Sender name (null until set). |
| data.customer_profile.mobile | string | Sender's mobile number. |
| data.customer_profile.balance | string | Sender wallet balance (INR). |
| data.customer_profile.total_monthly_limit | string | Sender's monthly remittance limit (INR). |
| data.customer_profile.next_allowed_limit | string | Remaining limit currently available (INR). |
| data.customer_profile.kyc_state ⭐ | number | Sender KYC state (1 = KYC complete on the profile). |
| data.customer_profile.chart | array | Per-period limit-usage breakdown. |
| data.customer_profile.chart.data_type_id | number | Identifier for the limit period/bucket. |
| data.customer_profile.chart.data | object | Limit usage for the period. |
| data.customer_profile.chart.data.unavailable | number | Amount blocked/unavailable (INR). |
| data.customer_profile.chart.data.used | number | Amount already used (INR). |
| data.customer_profile.chart.data.remaining | number | Remaining limit for the period (INR). |
| data.customer_profile.chart.label | string | Display label for the period. |

## Response types

Branch on `response_type_id` to decide the next call:

| response_type_id | Meaning | Next step |
| --- | --- | --- |
| 309 | Sender found | [dmt-levin-get-recipients](https://eps.eko.in/docs/dmt-levin-get-recipients.md) |
| 2136 | Sender not found, Aadhaar validation pending | [aadhaar-dmt-levin-validate](https://eps.eko.in/docs/aadhaar-dmt-levin-validate.md) |

## Example response

`response_type_id` `309` — Sender found. Next step: [dmt-levin-get-recipients](https://eps.eko.in/docs/dmt-levin-get-recipients.md).

```json
{
  "response_status_id": -1,
  "data": {
    "customer_profile": {
      "total_monthly_limit": "25000",
      "mobile": "9999999999",
      "kyc_id": "",
      "ekyc_enabled": 0,
      "kyc_validity": "",
      "kyc_remark": "",
      "kyc_type": "",
      "balance": "0.00",
      "next_allowed_limit": "24900.0",
      "name": null,
      "digital_ekyc": 0,
      "chart": [
        {
          "data_type_id": 10,
          "data": {
            "unavailable": 0,
            "used": 100,
            "remaining": 24900
          },
          "label": ""
        }
      ],
      "email": "",
      "kyc_state": 0
    },
    "wallet_token": "",
    "id_proof_type_id": "",
    "is_registered": 0,
    "id_proof": "",
    "otpOptionalSum": "",
    "sender_name": "",
    "otpNotRequiredSum": "",
    "ekyc_enabled": "",
    "wallet_id": "",
    "otpNotRequiredSumNeft": "",
    "next_allowed_limit": 24900,
    "kyc_state": 0,
    "otpOptionalSumNeft": ""
  },
  "response_type_id": 309,
  "message": "Success!",
  "status": 0
}
```

## Error scenarios

| Status | response_type_id | Scenario |
| --- | --- | --- |
| 200 | `2136` — Sender not found, Aadhaar validation pending | New sender — Aadhaar validation pending, proceed to Validate Aadhaar & Generate OTP |
