---
title: Personal
slug: eco-for-tiktok/personal
docTags: 
createdAt: 2025-04-02T09:05:14.927Z
---

:::ApiMethodV2
```json
{
  "name": "Personal Eco-dynamic",
  "method": "POST",
  "url": "https://api-sandbox.klavi.ai/data/eco-dynamic/v1/personal/report",
  "description": "Get personal data by taxId",
  "tab": "examples",
  "examples": {
    "languages": [
      {
        "id": "WEVIVR6-rS0lXtkL0t9RC",
        "language": "curl",
        "code": "curl --location 'https://api-sandbox.klavi.ai/data/eco-dynamic/v1/personal/report' \\\n--header 'Accept: application/json' \\\n--header 'Content-Type: application/json' \\\n--data '{\n    \"taxId\": \"String\",\n    \"kycVerified\": \"Boolean\",\n    \"products\":\n    [\n        \"pf_balance_check_eco_dynamic\"\n    ],\n    \"externalInfo\":\n    {\n        \"balanceCheck\":\n        {\n            \"purchaseAmount\": \"11111\",\n            \"mode\": \"SUM\"\n        }\n    }\n}'",
        "customLabel": ""
      },
      {
        "id": "JUSleX5hDE1ipacNfOex6",
        "language": "nodejs",
        "code": "var request = require('request');\nvar options = {\n   'method': 'POST',\n   'url': 'https://api-sandbox.klavi.ai/data/eco-dynamic/v1/personal/report',\n   'headers': {\n      'Accept': 'application/json',\n      'Content-Type': 'application/json'\n   },\n   body: JSON.stringify({\n      \"taxId\": \"String\",\n      \"kycVerified\": \"Boolean\"\n   })\n\n};\nrequest(options, function (error, response) {\n   if (error) throw new Error(error);\n   console.log(response.body);\n});\n",
        "customLabel": ""
      },
      {
        "id": "qdETd4GJEgAH_2LKBqnsE",
        "language": "javascript",
        "code": "var myHeaders = new Headers();\nmyHeaders.append(\"Accept\", \"application/json\");\nmyHeaders.append(\"Content-Type\", \"application/json\");\n\nvar raw = JSON.stringify({\n   \"taxId\": \"String\",\n   \"kycVerified\": \"Boolean\"\n});\n\nvar requestOptions = {\n   method: 'POST',\n   headers: myHeaders,\n   body: raw,\n   redirect: 'follow'\n};\n\nfetch(\"https://api-sandbox.klavi.ai/data/eco-dynamic/v1/personal/report\", requestOptions)\n   .then(response => response.text())\n   .then(result => console.log(result))\n   .catch(error => console.log('error', error));",
        "customLabel": ""
      },
      {
        "id": "CROvuSZEK1OX1_uPmZxaa",
        "language": "python",
        "code": "import requests\nimport json\n\nurl = \"https://api-sandbox.klavi.ai/data/eco-dynamic/v1/personal/report\"\n\npayload = json.dumps({\n   \"taxId\": \"String\",\n   \"kycVerified\": \"Boolean\"\n})\nheaders = {\n   'Accept': 'application/json',\n   'Content-Type': 'application/json'\n}\n\nresponse = requests.request(\"POST\", url, headers=headers, data=payload)\n\nprint(response.text)\n",
        "customLabel": ""
      },
      {
        "id": "bxUlbCMmhis4JC0rSMG90",
        "language": "ruby",
        "code": "require \"uri\"\nrequire \"json\"\nrequire \"net/http\"\n\nurl = URI(\"https://api-sandbox.klavi.ai/data/eco-dynamic/v1/personal/report\")\n\nhttps = Net::HTTP.new(url.host, url.port)\nhttps.use_ssl = true\n\nrequest = Net::HTTP::Post.new(url)\nrequest[\"Accept\"] = \"application/json\"\nrequest[\"Content-Type\"] = \"application/json\"\nrequest.body = JSON.dump({\n   \"taxId\": \"String\",\n   \"kycVerified\": \"Boolean\"\n})\n\nresponse = https.request(request)\nputs response.read_body\n",
        "customLabel": ""
      }
    ],
    "selectedLanguageId": "WEVIVR6-rS0lXtkL0t9RC"
  },
  "results": {
    "languages": [
      {
        "id": "HZUTL3GBcm2OEo_Hb7gUZ",
        "language": "200",
        "customLabel": "",
        "code": "{\n\t\"requestId\": \"c69e4cd41d360008631c6db1fb47a00c\",\n\t\"message\": \"ok\"\n}"
      }
    ],
    "selectedLanguageId": "HZUTL3GBcm2OEo_Hb7gUZ"
  },
  "request": {
    "pathParameters": [],
    "queryParameters": [],
    "headerParameters": [
      {
        "name": "Authorization",
        "kind": "required",
        "type": "string",
        "description": "Bearer access token, it returned by the /auth",
        "": "Bearer access token, it returned by the /auth"
      }
    ],
    "bodyDataParameters": [
      {
        "name": "taxId",
        "kind": "required",
        "type": "string",
        "description": "The CPF of the end-user, for Personal Accounts only\n",
        "": "The CPF of the end-user, for Personal Accounts only\n"
      },
      {
        "name": "kycVerified",
        "kind": "required",
        "type": "boolean",
        "description": "Has the end user completed the KYC process on the partner side. Only after completing the KYC process will corresponding data be generated, this means that you must pass \"true\" in order to generate the corresponding report.",
        "": "Has the end user completed the KYC process on the partner side. Only after completing the KYC process will corresponding data be generated, this means that you must pass \"true\" in order to generate the corresponding report."
      },
      {
        "name": "products",
        "kind": "optional",
        "type": "array",
        "description": "Product list",
        "": "array"
      },
      {
        "name": "productsCallbackURL",
        "kind": "optional",
        "type": "object",
        "description": "Report products callback URL, Priority highest",
        "": "object"
      },
      {
        "name": "externalInfo",
        "kind": "optional",
        "type": "object",
        "description": "Used for partner to transmit information, which will be carried in reports sent to partner",
        "": "Used for partner to transmit information, which will be carried in reports sent to partner",
        "children": [
          {
            "name": "balanceCheck",
            "kind": "optional",
            "type": "object",
            "description": "Validate whether the user's balance is greater than or equal to the input amount.When products include the pf_balance_check_eco_dynamic report, this field is required.",
            "children": [
              {
                "name": "purchaseAmount",
                "kind": "optional",
                "type": "string",
                "description": "Calculated amount, in cents"
              },
              {
                "name": "mode",
                "kind": "optional",
                "type": "string",
                "description": "Calculation mode, Enum [SUM, ANY]"
              }
            ]
          }
        ],
        "schema": [
          {
            "name": "balanceCheck",
            "kind": "optional",
            "type": "object",
            "description": "Validate whether the user's balance is greater than or equal to the input amount.When products include the pf_balance_check_eco_dynamic report, this field is required.",
            "children": [
              {
                "name": "purchaseAmount",
                "kind": "optional",
                "type": "string",
                "description": "Calculated amount, in cents"
              },
              {
                "name": "mode",
                "kind": "optional",
                "type": "string",
                "description": "Calculation mode, Enum [SUM, ANY]"
              }
            ]
          }
        ]
      }
    ],
    "formDataParameters": []
  },
  "currentNewParameter": {
    "label": "Body Parameter",
    "value": "bodyDataParameters"
  },
  "hasTryItOut": false,
  "autoGeneratedAnchorSlug": "personal-eco-dynamic",
  "legacyHash": "hZCLz2UEEi1_oXNpT9wR4"
}
```
:::

## Body parameters

### institutionCodes

If partner wants to obtain data from one or more specific institutions for a `taxId`, partner can use this parameter to pass the code of the corresponding institutions in the form of an array. For example:&#x20;

```json
"institutionCodes": ["001","033"]
```

If partner want to obtain data for a `taxId` across all institutions in Klavi, leave it blank. For example:

```json
"institutionCodes": []
```

The institutional code is [here](https://docs.klavi.ai/connect/participant-institutions).

### productsCallbackURL

With this parameter, you can submit specific or all reports generated sending addresses to Klavi backend.

**1.Specific reports example**

```json
{
    "productsCallbackURL":{
        "financial_entries_eco":"https://www.yourdomain.com/financial/yourpath",
        "credit_risk_eco":"https://www.yourdomain.com/credit_risk/yourpath"
    }
}
```

After the report is generated, the Klavi backend will send the report `financial_entries_eco` to  `https://www.yourdomain.com/financial/yourendpoint` and send the report `credit_risk_eco` to `https://www.yourdomain.com/credit_risk/yourpath`.

**2.Specific and other reports example**

```json
{
    "productsCallbackURL":{
        "income_eco":"https://www.yourdomain.com/income/yourpath",
        "other":"https://www.yourdomain.com/yourpath"
    }
}
```

In this case, the Klavi backend will send the report `income_eco` to  `https://www.yourdomain.com/income/yourpath` and send the other report to `https://www.yourdomain.com/yourpath`.

**3.All reports example**

```json
{
    "productsCallbackURL":{
        "all":"https://www.yourdomain.com/yourpath"
    }
}
```

After the report is generated, the Klavi backend will send all reports(you selected it when you onborading) to `https://www.yourdomain.com/yourpath`.

:::hint{type="info"}
Please note that:

The parameter `all` is mutually exclusive with the parameters `other` and specific and cannot exist simultaneously. If it exists, the system will return an error.
:::

### externalInfo

You can submit any content you want with this parameter, and Klavi will temporarily save it. After the report is generated, it will be returned to you in the `externalInfo` data node of the report.

For example:

```json
{
    "externalInfo":{
        "myTraceId":"yourtraceid",
        "myUUID":"youruuid"
    }
}
```

## Response

### Return code:200

If the `taxId ` has Open Finance authorization  and LGPD authorization in Klavi Eco, return:

```json
{
	"requestId": "c69e4cd41d360008631c6db1fb47a00c",
	"message": "ok"
}
```

The system will immediately process the data and generate a report that you have pre configured. If you pass the `productsCallbackURL `in the request, the report will be sent to that URL first after it is generated. If this parameter has no value, the system will send the report to the webhook you configured to receive the report in [Klavi Console](https://console.klavi.ai).

### Status code: 4008

If the `taxId `does not have Open Finance authorization and LGPD authorization in Klavi Eco, return:

```json
{
    "statusCode": 4008,
    "error": "Insufficient authorization info",
    "message": "No Open Finance consent available"
}
```

### Status code: 4009

If the `kycVerified` parameter is `false`, it means that the partner has not completed KYC verification, and the API will directly return a failure.

```json
{
    "statusCode": 4009,
    "error": "Insufficient authorization info",
    "message": "KYC process needed for data inquiry"
}
```

You can call the [conecte ](https://docs.klavi.ai/connect/EX4R-overview)API to allow the end user to complete Open Finance and LGPD authorizations and obtain the corresponding report data.



## Asynchronous response example

```json
{
    "code": 200,
    "message": "OK",
    "enquiryCpf": "12345678909",
    "requestId": "d2aa83884889000865dc9d910befd007",
    "productName": "pf_balance_check_eco_dynamic",
    "productReportId": "4b857b20-f130-4ed7-a168-241437a0e01e",
    "productReportTime": "2026-10-14T09:49:35.373Z",
    "productVersion": "V1",
    "balanceCheckResult": false,
    "externalInfo":
    {
        "balanceCheck":
        {
            "mode": "SUM",
            "purchaseAmount": "100882789216"
        },
        "uuid": "test001"
    }
}
```

