> This page is for Developers.

> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.iot.telia.lt/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.iot.telia.lt/_mcp/server.

# Create user

POST https://iot.telia.lt/api/v1/user
Content-Type: application/json

Creates a user which is *not active and has no password assigned*.
The URL to get the user details is provided as Location Header in the response.

#### ACTIVATION

Upon creation, the user account undergoes an activation process (see services below ) in which she receives an email with activation link.
Following this link the user is asked to set the password and upon successful completion of this process, the account becomes active and operational.

Provided fields:

* `username` (String required) - has to be the email of this user
* `name` (String required)
* `organisation` (Object optional) -  **may be provided** by regular user, but **is required** for master user.
* `roles` (List of Objects optional) - List of one or more role Ids to be assigned at once. If missing, a default role is assigned

#### Notes

* Password is not provided. Separate calls provide password management.
* When the organisation of the new user is not specified in the request, it is inherited from the user creating the account.

A regular user is allowed to specify **only organisations which are direct children** of his/her own organisation, or his/her own organisation.
* The status field is not user editable at account creation time - the default imposed by server is ACTIVATION_PENDING.


Reference: https://docs.iot.telia.lt/developers/api/user-management/user-per-page-sort-by-q-and-page-post

## Authentication

- `Authorization` header (bearer token, required) — An `auth_token` should be provided to authenticate a session. To obtain an `auth_token`, see the [`/api/v1/authenticate` **POST** request](/developers/api/authentication/authenticate).

## Request

### Body (application/json)

This endpoint expects an object.

- `username` (string, required)
- `name` (string, required)
- `organisation` (ApiV1UserPostRequestBodyContentApplicationJsonSchemaOrganisation, required)
- `roles` (list of ApiV1UserPostRequestBodyContentApplicationJsonSchemaRolesItems, required)

## Response

### 201

Resource Created

## Errors

### 403 Forbidden Error

Your role doesn't include the permission this endpoint requires. Most endpoints return `error_code`, `error_token`, and `message`. Some return only `status_code` and `message`.

- `error_code` (integer, optional)
- `error_token` (string, optional)
- `status_code` (integer, optional)
- `message` (string, optional)

### 404 Not Found Error

Unexpected error in API call. See HTTP response body for details.

- `error_code` (integer, optional)
- `error_token` (string, optional)
- `message` (string, optional)

### 422 Unprocessable Entity Error

Unprocessable Entity. See HTTP response body for details.

- `error_code` (integer, optional)
- `error_token` (string, optional)
- `message` (string, optional)
- `errors` (list of ApiV1UserPostResponsesContentApplicationJsonSchemaErrorsItems, optional)

## Types

### ApiV1UserPostRequestBodyContentApplicationJsonSchemaOrganisation

### ApiV1UserPostRequestBodyContentApplicationJsonSchemaRolesItems

### ApiV1UserPostResponsesContentApplicationJsonSchemaErrorsItems

## Examples

**Request**

```json
{
  "username": "eabbot@flatland.org",
  "name": "Edwin Abbott",
  "organisation": {
    "id": 123
  },
  "roles": [
    {
      "id": 1
    },
    {
      "id": 2
    }
  ]
}
```

**Response**

```json
{}
```

**SDK Code**

```python
import requests

url = "https://iot.telia.lt/api/v1/user"

payload = {
    "username": "eabbot@flatland.org",
    "name": "Edwin Abbott",
    "organisation": { "id": 123 },
    "roles": [{ "id": 1 }, { "id": 2 }]
}
headers = {
    "Authorization": "Bearer <token>",
    "Content-Type": "application/json"
}

response = requests.post(url, json=payload, headers=headers)

print(response.json())
```

```javascript
const url = 'https://iot.telia.lt/api/v1/user';
const options = {
  method: 'POST',
  headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
  body: '{"username":"eabbot@flatland.org","name":"Edwin Abbott","organisation":{"id":123},"roles":[{"id":1},{"id":2}]}'
};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```go
package main

import (
	"fmt"
	"strings"
	"net/http"
	"io"
)

func main() {

	url := "https://iot.telia.lt/api/v1/user"

	payload := strings.NewReader("{\n  \"username\": \"eabbot@flatland.org\",\n  \"name\": \"Edwin Abbott\",\n  \"organisation\": {\n    \"id\": 123\n  },\n  \"roles\": [\n    {\n      \"id\": 1\n    },\n    {\n      \"id\": 2\n    }\n  ]\n}")

	req, _ := http.NewRequest("POST", url, payload)

	req.Header.Add("Authorization", "Bearer <token>")
	req.Header.Add("Content-Type", "application/json")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

```ruby
require 'uri'
require 'net/http'

url = URI("https://iot.telia.lt/api/v1/user")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n  \"username\": \"eabbot@flatland.org\",\n  \"name\": \"Edwin Abbott\",\n  \"organisation\": {\n    \"id\": 123\n  },\n  \"roles\": [\n    {\n      \"id\": 1\n    },\n    {\n      \"id\": 2\n    }\n  ]\n}"

response = http.request(request)
puts response.read_body
```

```java
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.post("https://iot.telia.lt/api/v1/user")
  .header("Authorization", "Bearer <token>")
  .header("Content-Type", "application/json")
  .body("{\n  \"username\": \"eabbot@flatland.org\",\n  \"name\": \"Edwin Abbott\",\n  \"organisation\": {\n    \"id\": 123\n  },\n  \"roles\": [\n    {\n      \"id\": 1\n    },\n    {\n      \"id\": 2\n    }\n  ]\n}")
  .asString();
```

```php
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('POST', 'https://iot.telia.lt/api/v1/user', [
  'body' => '{
  "username": "eabbot@flatland.org",
  "name": "Edwin Abbott",
  "organisation": {
    "id": 123
  },
  "roles": [
    {
      "id": 1
    },
    {
      "id": 2
    }
  ]
}',
  'headers' => [
    'Authorization' => 'Bearer <token>',
    'Content-Type' => 'application/json',
  ],
]);

echo $response->getBody();
```

```csharp
using RestSharp;

var client = new RestClient("https://iot.telia.lt/api/v1/user");
var request = new RestRequest(Method.POST);
request.AddHeader("Authorization", "Bearer <token>");
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{\n  \"username\": \"eabbot@flatland.org\",\n  \"name\": \"Edwin Abbott\",\n  \"organisation\": {\n    \"id\": 123\n  },\n  \"roles\": [\n    {\n      \"id\": 1\n    },\n    {\n      \"id\": 2\n    }\n  ]\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
```

```swift
import Foundation

let headers = [
  "Authorization": "Bearer <token>",
  "Content-Type": "application/json"
]
let parameters = [
  "username": "eabbot@flatland.org",
  "name": "Edwin Abbott",
  "organisation": ["id": 123],
  "roles": [["id": 1], ["id": 2]]
] as [String : Any]

let postData = JSONSerialization.data(withJSONObject: parameters, options: [])

let request = NSMutableURLRequest(url: NSURL(string: "https://iot.telia.lt/api/v1/user")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "POST"
request.allHTTPHeaderFields = headers
request.httpBody = postData as Data

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```