---
agentTools:
  projectIndex: https://docs.thinknum.com/llms.txt
---

# Upload API

[block:api-header]
{
  "title": "Upload CSV file"
}
[/block]

First all, you can upload CSV file.

[block:code]
{
  "codes": [
    {
      "code": "POST /uploads/ HTTP/1.1\nAuthorization: token 01234567890123456789\nX-API-Version: 20151130\nfile=@/Users/thinknum/data.csv",
      "language": "curl"
    },
    {
      "code": "response = requests.post(\n    url='https://data.thinknum.com/uploads/', \n    headers={\n        'Authorization': 'token 01234567890123456789',\n        'X-API-Version': '20151130', \n        'Accept': 'application/json'\n    }, \n    files={'file': open(filepath, 'rb')}\n)",
      "language": "python"
    }
  ]
}
[/block]

A sample response follows as

[block:code]
{
  "codes": [
    {
      "code": "{\n    \"display_name\": \"data_csv_1657634147\",\n    \"visibility\": \"private\",\n    \"summary\": null,\n    \"is_geo\": false,\n    \"state\": \"uploaded\",\n    \"total\": 79675,\n    \"id\": \"57a38b5f-aedd-451a-94ae-23ddfda30341\"\n}",
      "language": "json"
    }
  ]
}
[/block]

You will see `state` as `uploaded` which mean your CSV is successfully uploaded to Thinknum server. The `id` in response will be `upload_id` which is necessary for columns setup and status check.

[block:api-header]
{
  "title": "Setup CSV columns"
}
[/block]

Once CSV is uploaded to server, you can set up CSV information along with columns. Then data in CSV will start to be importing to Thinknum database.

[block:code]
{
  "codes": [
    {
      "code": "POST /uploads/<upload_id>/setup/ HTTP/1.1\nAuthorization: token 01234567890123456789\nX-API-Version: 20151130\n\nrequest={\n    \"columns\": [\n        {\n            \"display_name\": \"id\",\n            \"type\": \"string\",\n            \"id\": \"column_1\",\n            \"format\": null\n        },\n        {\n            \"display_name\": \"name\",\n            \"type\": \"string\",\n            \"id\": \"column_2\",\n            \"format\": null\n        }\n    ],\n    \"display_name\": \"data_csv\",\n    \"header\": true,\n    \"encoding\": \"utf8\",\n    \"visibility\": \"private\",\n    \"id\": \"<upload_id>\"\n}",
      "language": "curl"
    },
    {
      "code": "response = requests.post(\n    url='https://data.thinknum.com/uploads/{}/setup'.format(upload_id), \n    headers={\n        'Authorization': 'token 01234567890123456789',\n        'X-API-Version': '20151130', \n        'Accept': 'application/json'\n    },\n    data={\n        \"request\": json.dumps({\n            \"columns\": [\n                {\n                    \"display_name\": \"id\",\n                    \"type\": \"string\",\n                    \"id\": \"column_1\",\n                    \"format\": None\n                },\n                {\n                    \"display_name\": \"name\",\n                    \"type\": \"string\",\n                    \"id\": \"column_2\",\n                    \"format\": None\n                }\n            ],\n            \"display_name\": \"data_csv_1657633393\",\n            \"header\": True,\n            \"encoding\": \"utf8\",\n            \"visibility\": \"private\",\n            \"id\": upload_id\n        })\n    }\n)",
      "language": "python"
    }
  ]
}
[/block]

A sample response follows as

[block:code]
{
  "codes": [
    {
      "code": "{\n    \"display_name\": \"data_csv_1657633393\",\n    \"visibility\": \"private\",\n    \"summary\": null,\n    \"is_geo\": false,\n    \"state\": \"create\",\n    \"id\": \"57a38b5f-aedd-451a-94ae-23ddfda30341\"\n}",
      "language": "json"
    }
  ]
}
[/block]

[block:api-header]
{
  "title": "CSV status"
}
[/block]

You can check status of all CSV that you uploaded. Please use `upload_id` to find out upload dataset.

[block:code]
{
  "codes": [
    {
      "code": "GET /uploads/ HTTP/1.1\nAuthorization: token 01234567890123456789\nX-API-Version: 20151130",
      "language": "curl"
    },
    {
      "code": "response = requests.get(\n    url='https://data.thinknum.com/uploads/',\n    headers={\n        'Authorization': 'token 01234567890123456789',\n        'X-API-Version': '20151130', \n        'Accept': 'application/json'\n    }\n)",
      "language": "python"
    }
  ]
}
[/block]

A sample response follows as.

[block:code]
{
  "codes": [
    {
      "code": "{\n    \"uploads\": [\n        {\n            \"display_name\": \"data_csv_1657676743\",\n            \"visibility\": \"private\",\n            \"summary\": null,\n            \"is_geo\": false,\n            \"state\": \"ready\",\n            \"total\": 79675,\n            \"id\": \"74742c7b-cf6b-4892-bed6-c0b61e6261fe\"\n        }\n    ]\n}%",
      "language": "json"
    }
  ]
}
[/block]

You will see `state` as `ready` which mean importing is completed.