> ## Documentation Index
> Fetch the complete documentation index at: https://cantonfoundation-generated-reference-full-stack-preview.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# POST /v2/users

> Create a new user.

<div class="x2mdx-ref-page x2mdx-ref-page--operation x2mdx-ref-page--manual-api" />

<div class="x2mdx-ref-hero">
  <p class="x2mdx-ref-summary">Create a new user.</p>

  <div class="x2mdx-ref-badges">
    <span class="x2mdx-ref-badge x2mdx-ref-badge--protocol">OpenAPI</span>

    <a class="x2mdx-ref-badge x2mdx-ref-badge--changed" href="#history-updated-3-5">Updated 3.5</a>
  </div>
</div>

<RequestExample>
  ```bash cURL theme={"theme":{"light":"github-light","dark":"github-dark"}}
  curl --request POST \
    --url 'http://localhost:7575/v2/users' \
    --header 'Authorization: Bearer $TOKEN' \
    --header 'Content-Type: application/json' \
    --data '{
    "user": {
      "id": "<string>",
      "primaryParty": "<string>",
      "isDeactivated": false,
      "metadata": {
        "resourceVersion": "<string>",
        "annotations": {}
      },
      "identityProviderId": "<string>",
      "primaryPartyAuthentication": false
    },
    "rights": [
      {
        "kind": {
          "CanActAs": {
            "value": {
              "party": "<string>"
            }
          }
        }
      }
    ]
  }'
  ```

  ```python Python theme={"theme":{"light":"github-light","dark":"github-dark"}}
  import json
  import requests

  url = "http://localhost:7575/v2/users"
  headers = {'Authorization': 'Bearer <token>', 'Content-Type': 'application/json'}
  payload = json.loads(r'''{
    "user": {
      "id": "<string>",
      "primaryParty": "<string>",
      "isDeactivated": false,
      "metadata": {
        "resourceVersion": "<string>",
        "annotations": {}
      },
      "identityProviderId": "<string>",
      "primaryPartyAuthentication": false
    },
    "rights": [
      {
        "kind": {
          "CanActAs": {
            "value": {
              "party": "<string>"
            }
          }
        }
      }
    ]
  }''')
  response = requests.request(
      "POST", url, headers=headers, json=payload
  )

  print(response.text)
  ```

  ```javascript JavaScript theme={"theme":{"light":"github-light","dark":"github-dark"}}
  const response = await fetch('http://localhost:7575/v2/users', {
    method: 'POST',
    headers: {
    "Authorization": "Bearer <token>",
    "Content-Type": "application/json"
  },
    body: JSON.stringify({
    "user": {
      "id": "<string>",
      "primaryParty": "<string>",
      "isDeactivated": false,
      "metadata": {
        "resourceVersion": "<string>",
        "annotations": {}
      },
      "identityProviderId": "<string>",
      "primaryPartyAuthentication": false
    },
    "rights": [
      {
        "kind": {
          "CanActAs": {
            "value": {
              "party": "<string>"
            }
          }
        }
      }
    ]
  }),
  });

  console.log(await response.text());
  ```

  ```php PHP theme={"theme":{"light":"github-light","dark":"github-dark"}}
  <?php
  $curl = curl_init();

  curl_setopt_array($curl, [
      CURLOPT_URL => 'http://localhost:7575/v2/users',
      CURLOPT_RETURNTRANSFER => true,
      CURLOPT_CUSTOMREQUEST => 'POST',
      CURLOPT_POSTFIELDS => <<<'JSON'
  {
    "user": {
      "id": "<string>",
      "primaryParty": "<string>",
      "isDeactivated": false,
      "metadata": {
        "resourceVersion": "<string>",
        "annotations": {}
      },
      "identityProviderId": "<string>",
      "primaryPartyAuthentication": false
    },
    "rights": [
      {
        "kind": {
          "CanActAs": {
            "value": {
              "party": "<string>"
            }
          }
        }
      }
    ]
  }
  JSON,
      CURLOPT_HTTPHEADER => [
          "Authorization: Bearer <token>",
          "Content-Type: application/json"
      ],
  ]);

  $response = curl_exec($curl);
  echo $response;
  ```

  ```go Go theme={"theme":{"light":"github-light","dark":"github-dark"}}
  package main

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

  func main() {
    req, _ := http.NewRequest("POST", "http://localhost:7575/v2/users", bytes.NewBufferString(`{
    "user": {
      "id": "<string>",
      "primaryParty": "<string>",
      "isDeactivated": false,
      "metadata": {
        "resourceVersion": "<string>",
        "annotations": {}
      },
      "identityProviderId": "<string>",
      "primaryPartyAuthentication": false
    },
    "rights": [
      {
        "kind": {
          "CanActAs": {
            "value": {
              "party": "<string>"
            }
          }
        }
      }
    ]
  }`))
    req.Header.Set("Authorization", "Bearer <token>")
    req.Header.Set("Content-Type", "application/json")
    response, _ := http.DefaultClient.Do(req)
    defer response.Body.Close()
    body, _ := io.ReadAll(response.Body)
    fmt.Println(string(body))
  }
  ```

  ```java Java theme={"theme":{"light":"github-light","dark":"github-dark"}}
  import java.net.URI;
  import java.net.http.HttpClient;
  import java.net.http.HttpRequest;
  import java.net.http.HttpResponse;

  var request = HttpRequest.newBuilder()
      .uri(URI.create("http://localhost:7575/v2/users"))
      .header("Authorization", "Bearer <token>")
      .header("Content-Type", "application/json")
      .method("POST", HttpRequest.BodyPublishers.ofString("""
  {
    "user": {
      "id": "<string>",
      "primaryParty": "<string>",
      "isDeactivated": false,
      "metadata": {
        "resourceVersion": "<string>",
        "annotations": {}
      },
      "identityProviderId": "<string>",
      "primaryPartyAuthentication": false
    },
    "rights": [
      {
        "kind": {
          "CanActAs": {
            "value": {
              "party": "<string>"
            }
          }
        }
      }
    ]
  }
  """))
      .build();
  var response = HttpClient.newHttpClient().send(
      request, HttpResponse.BodyHandlers.ofString());
  System.out.println(response.body());
  ```

  ```ruby Ruby theme={"theme":{"light":"github-light","dark":"github-dark"}}
  require 'net/http'
  require 'uri'

  uri = URI('http://localhost:7575/v2/users')
  request = Net::HTTP::Post.new(uri)
  request['Authorization'] = 'Bearer <token>'
  request['Content-Type'] = 'application/json'
  request.body = <<~JSON
  {
    "user": {
      "id": "<string>",
      "primaryParty": "<string>",
      "isDeactivated": false,
      "metadata": {
        "resourceVersion": "<string>",
        "annotations": {}
      },
      "identityProviderId": "<string>",
      "primaryPartyAuthentication": false
    },
    "rights": [
      {
        "kind": {
          "CanActAs": {
            "value": {
              "party": "<string>"
            }
          }
        }
      }
    ]
  }
  JSON
  response = Net::HTTP.start(uri.hostname, uri.port) do |http|
    http.request(request)
  end
  puts response.body
  ```
</RequestExample>

<ResponseExample>
  ```json 200 theme={"theme":{"light":"github-light","dark":"github-dark"}}
  {
    "user": {
      "id": "<string>",
      "primaryParty": "<string>",
      "isDeactivated": false,
      "metadata": {
        "resourceVersion": "<string>",
        "annotations": {}
      },
      "identityProviderId": "<string>",
      "primaryPartyAuthentication": false
    }
  }
  ```

  ```text 400 theme={"theme":{"light":"github-light","dark":"github-dark"}}
  <string>
  ```

  ```json default theme={"theme":{"light":"github-light","dark":"github-dark"}}
  {
    "code": "<string>",
    "cause": "<string>",
    "correlationId": "<string>",
    "traceId": "<string>",
    "context": {},
    "resources": [
      [
        "<string>"
      ]
    ],
    "errorCategory": 123,
    "grpcCodeValue": 123,
    "retryInfo": "<string>",
    "definiteAnswer": false
  }
  ```
</ResponseExample>

## Authorizations

### httpAuth

<ParamField header="Authorization" type="string" required>
  HTTP bearer authentication. Send the token as `Authorization: Bearer &lt;token&gt;`. Ledger API standard JWT token
</ParamField>

### apiKeyAuth

<ParamField header="Sec-WebSocket-Protocol" type="string" required>
  API key authentication in the header. Ledger API standard JWT token (websocket)
</ParamField>

## Body

<div class="x2mdx-ref-badges">
  <span class="x2mdx-ref-badge x2mdx-ref-badge--neutral">application/json</span>
</div>

<ParamField body="user" type="object" required>
  OpenAPI type: <code>User</code>.

  Users and rights ///////////////// Users are used to dynamically manage the rights given to Daml applications. They are stored and managed per participant node.

  <Expandable title="child attributes">
    <ParamField body="id" type="string" required>
      The user identifier, which must be a non-empty string of at most 128 characters that are either alphanumeric ASCII characters or one of the symbols "@^\$.!\`-#+'\~\_|:()". Required
    </ParamField>

    <ParamField body="primaryParty" type="string">
      The primary party as which this user reads and acts by default on the ledger *provided* it has the corresponding `CanReadAs(primary_party)` or `CanActAs(primary_party)` rights. Ledger API clients SHOULD set this field to a non-empty value for all users to enable the users to act on the ledger using their own Daml party. Users for participant administrators MAY have an associated primary party. Modifiable Optional
    </ParamField>

    <ParamField body="isDeactivated" type="boolean">
      When set, then the user is denied all access to the Ledger API. Otherwise, the user has access to the Ledger API as per the user's rights. Modifiable Optional
    </ParamField>

    <ParamField body="metadata" type="object">
      OpenAPI type: <code>ObjectMeta</code>.

      Represents metadata corresponding to a participant resource (e.g. a participant user or participant local information about a party). Based on `ObjectMeta` meta used in Kubernetes API. See [https://github.com/kubernetes/apimachinery/blob/master/pkg/apis/meta/v1/generated.proto#L640](https://github.com/kubernetes/apimachinery/blob/master/pkg/apis/meta/v1/generated.proto#L640)

      <Expandable title="child attributes">
        <ParamField body="resourceVersion" type="string">
          An opaque, non-empty value, populated by a participant server which represents the internal version of the resource this `ObjectMeta` message is attached to. The participant server will change it to a unique value each time the corresponding resource is updated. You must not rely on the format of resource version. The participant server might change it without notice. You can obtain the newest resource version value by issuing a read request. You may use it for concurrent change detection by passing it back unmodified in an update request. The participant server will then compare the passed value with the value maintained by the system to determine if any other updates took place since you had read the resource version. Upon a successful update you are guaranteed that no other update took place during your read-modify-write sequence. However, if another update took place during your read-modify-write sequence then your update will fail with an appropriate error. Concurrent change control is optional. It will be applied only if you include a resource version in an update request. When creating a new instance of a resource you must leave the resource version empty. Its value will be populated by the participant server upon successful resource creation. Optional
        </ParamField>

        <ParamField body="annotations" type="object">
          OpenAPI type: <code>Map\_String</code>.

          A set of modifiable key-value pairs that can be used to represent arbitrary, client-specific metadata. Constraints: 1. The total size over all keys and values cannot exceed 256kb in UTF-8 encoding. 2. Keys are composed of an optional prefix segment and a required name segment such that: - key prefix, when present, must be a valid DNS subdomain with at most 253 characters, followed by a '/' (forward slash) character, - name segment must have at most 63 characters that are either alphanumeric (\[a-z0-9A-Z]), or a '.' (dot), '-' (dash) or '\_' (underscore); and it must start and end with an alphanumeric character. 3. Values can be any non-empty strings. Keys with empty prefix are reserved for end-users. Properties set by external tools or internally by the participant server must use non-empty key prefixes. Duplicate keys are disallowed by the semantics of the protobuf3 maps. See: [https://developers.google.com/protocol-buffers/docs/proto3#maps](https://developers.google.com/protocol-buffers/docs/proto3#maps) Annotations may be a part of a modifiable resource. Use the resource's update RPC to update its annotations. In order to add a new annotation or update an existing one using an update RPC, provide the desired annotation in the update request. In order to remove an annotation using an update RPC, provide the target annotation's key but set its value to the empty string in the update request. Modifiable Optional: can be empty
        </ParamField>
      </Expandable>
    </ParamField>

    <ParamField body="identityProviderId" type="string">
      The ID of the identity provider configured by `Identity Provider Config` If not set, assume the user is managed by the default identity provider. Optional
    </ParamField>

    <ParamField body="primaryPartyAuthentication" type="boolean">
      If set to true, the user may authenticate against the Ledger API by signing a Party JWT using the primary party's signing key. Modifiable Optional
    </ParamField>
  </Expandable>
</ParamField>

<ParamField body="rights" type="object[]">
  OpenAPI type: <code>Right\[]</code>.

  The rights to be assigned to the user upon creation, which SHOULD include appropriate rights for the `user.primary_party`. Optional: can be empty

  <Expandable title="child attributes">
    <ParamField body="kind" type="object">
      OpenAPI type: <code>Kind</code>.

      Required

      <Expandable title="child attributes">
        <ParamField body="Variant 1" type="object">
          <Expandable title="child attributes">
            <ParamField body="CanActAs" type="object" required>
              OpenAPI type: <code>CanActAs</code>.

              <Expandable title="child attributes">
                <ParamField body="value" type="object" required>
                  OpenAPI type: <code>CanActAs1</code>.

                  <Expandable title="child attributes">
                    <ParamField body="party" type="string" required>
                      The right to authorize commands for this party. Required
                    </ParamField>
                  </Expandable>
                </ParamField>
              </Expandable>
            </ParamField>
          </Expandable>
        </ParamField>

        <ParamField body="Variant 2" type="object">
          <Expandable title="child attributes">
            <ParamField body="CanExecuteAs" type="object" required>
              OpenAPI type: <code>CanExecuteAs</code>.

              <Expandable title="child attributes">
                <ParamField body="value" type="object" required>
                  OpenAPI type: <code>CanExecuteAs1</code>.

                  <Expandable title="child attributes">
                    <ParamField body="party" type="string" required>
                      The right to prepare and execute submissions as this party. This right does not entitle the user to perform any reads. If reading is required, a separate ReadAs right must be added. Right to execute as a party is also implicitly contained in the CanActAs right. Required
                    </ParamField>
                  </Expandable>
                </ParamField>
              </Expandable>
            </ParamField>
          </Expandable>
        </ParamField>

        <ParamField body="Variant 3" type="object">
          <Expandable title="child attributes">
            <ParamField body="CanExecuteAsAnyParty" type="object" required>
              OpenAPI type: <code>CanExecuteAsAnyParty</code>.

              The rights of a user to prepare and execute transactions as any party. Its utility is predominantly for users that perform interactive submissions on behalf of many parties.

              <Expandable title="child attributes">
                <ParamField body="value" type="object" required>
                  OpenAPI type: <code>CanExecuteAsAnyParty1</code>.

                  The rights of a user to prepare and execute transactions as any party. Its utility is predominantly for users that perform interactive submissions on behalf of many parties.
                </ParamField>
              </Expandable>
            </ParamField>
          </Expandable>
        </ParamField>

        <ParamField body="Variant 4" type="object">
          <Expandable title="child attributes">
            <ParamField body="CanReadAs" type="object" required>
              OpenAPI type: <code>CanReadAs</code>.

              <Expandable title="child attributes">
                <ParamField body="value" type="object" required>
                  OpenAPI type: <code>CanReadAs1</code>.

                  <Expandable title="child attributes">
                    <ParamField body="party" type="string" required>
                      The right to read ledger data visible to this party. Required
                    </ParamField>
                  </Expandable>
                </ParamField>
              </Expandable>
            </ParamField>
          </Expandable>
        </ParamField>

        <ParamField body="Variant 5" type="object">
          <Expandable title="child attributes">
            <ParamField body="CanReadAsAnyParty" type="object" required>
              OpenAPI type: <code>CanReadAsAnyParty</code>.

              The rights of a participant's super reader. Its utility is predominantly for feeding external tools, such as PQS, continually without the need to change subscriptions as new parties pop in and out of existence.

              <Expandable title="child attributes">
                <ParamField body="value" type="object" required>
                  OpenAPI type: <code>CanReadAsAnyParty1</code>.

                  The rights of a participant's super reader. Its utility is predominantly for feeding external tools, such as PQS, continually without the need to change subscriptions as new parties pop in and out of existence.
                </ParamField>
              </Expandable>
            </ParamField>
          </Expandable>
        </ParamField>

        <ParamField body="Variant 6" type="object">
          <Expandable title="child attributes">
            <ParamField body="Empty" type="object" required>
              OpenAPI type: <code>Empty8</code>.
            </ParamField>
          </Expandable>
        </ParamField>

        <ParamField body="Variant 7" type="object">
          <Expandable title="child attributes">
            <ParamField body="IdentityProviderAdmin" type="object" required>
              OpenAPI type: <code>IdentityProviderAdmin</code>.

              The right to administer the identity provider that the user is assigned to. It means, being able to manage users and parties that are also assigned to the same identity provider.

              <Expandable title="child attributes">
                <ParamField body="value" type="object" required>
                  OpenAPI type: <code>IdentityProviderAdmin1</code>.

                  The right to administer the identity provider that the user is assigned to. It means, being able to manage users and parties that are also assigned to the same identity provider.
                </ParamField>
              </Expandable>
            </ParamField>
          </Expandable>
        </ParamField>

        <ParamField body="Variant 8" type="object">
          <Expandable title="child attributes">
            <ParamField body="ParticipantAdmin" type="object" required>
              OpenAPI type: <code>ParticipantAdmin</code>.

              The right to administer the participant node.

              <Expandable title="child attributes">
                <ParamField body="value" type="object" required>
                  OpenAPI type: <code>ParticipantAdmin1</code>.

                  The right to administer the participant node.
                </ParamField>
              </Expandable>
            </ParamField>
          </Expandable>
        </ParamField>
      </Expandable>
    </ParamField>
  </Expandable>
</ParamField>

## Responses

### 200

<div class="x2mdx-ref-badges">
  <span class="x2mdx-ref-badge x2mdx-ref-badge--neutral">application/json</span>
</div>

<ResponseField name="user" type="User" required>
  Users and rights ///////////////// Users are used to dynamically manage the rights given to Daml applications. They are stored and managed per participant node.

  <Expandable title="child attributes">
    <ResponseField name="id" type="string" required>
      The user identifier, which must be a non-empty string of at most 128 characters that are either alphanumeric ASCII characters or one of the symbols "@^\$.!\`-#+'\~\_|:()". Required
    </ResponseField>

    <ResponseField name="primaryParty" type="string">
      The primary party as which this user reads and acts by default on the ledger *provided* it has the corresponding `CanReadAs(primary_party)` or `CanActAs(primary_party)` rights. Ledger API clients SHOULD set this field to a non-empty value for all users to enable the users to act on the ledger using their own Daml party. Users for participant administrators MAY have an associated primary party. Modifiable Optional
    </ResponseField>

    <ResponseField name="isDeactivated" type="boolean">
      When set, then the user is denied all access to the Ledger API. Otherwise, the user has access to the Ledger API as per the user's rights. Modifiable Optional
    </ResponseField>

    <ResponseField name="metadata" type="ObjectMeta">
      Represents metadata corresponding to a participant resource (e.g. a participant user or participant local information about a party). Based on `ObjectMeta` meta used in Kubernetes API. See [https://github.com/kubernetes/apimachinery/blob/master/pkg/apis/meta/v1/generated.proto#L640](https://github.com/kubernetes/apimachinery/blob/master/pkg/apis/meta/v1/generated.proto#L640)

      <Expandable title="child attributes">
        <ResponseField name="resourceVersion" type="string">
          An opaque, non-empty value, populated by a participant server which represents the internal version of the resource this `ObjectMeta` message is attached to. The participant server will change it to a unique value each time the corresponding resource is updated. You must not rely on the format of resource version. The participant server might change it without notice. You can obtain the newest resource version value by issuing a read request. You may use it for concurrent change detection by passing it back unmodified in an update request. The participant server will then compare the passed value with the value maintained by the system to determine if any other updates took place since you had read the resource version. Upon a successful update you are guaranteed that no other update took place during your read-modify-write sequence. However, if another update took place during your read-modify-write sequence then your update will fail with an appropriate error. Concurrent change control is optional. It will be applied only if you include a resource version in an update request. When creating a new instance of a resource you must leave the resource version empty. Its value will be populated by the participant server upon successful resource creation. Optional
        </ResponseField>

        <ResponseField name="annotations" type="Map_String">
          A set of modifiable key-value pairs that can be used to represent arbitrary, client-specific metadata. Constraints: 1. The total size over all keys and values cannot exceed 256kb in UTF-8 encoding. 2. Keys are composed of an optional prefix segment and a required name segment such that: - key prefix, when present, must be a valid DNS subdomain with at most 253 characters, followed by a '/' (forward slash) character, - name segment must have at most 63 characters that are either alphanumeric (\[a-z0-9A-Z]), or a '.' (dot), '-' (dash) or '\_' (underscore); and it must start and end with an alphanumeric character. 3. Values can be any non-empty strings. Keys with empty prefix are reserved for end-users. Properties set by external tools or internally by the participant server must use non-empty key prefixes. Duplicate keys are disallowed by the semantics of the protobuf3 maps. See: [https://developers.google.com/protocol-buffers/docs/proto3#maps](https://developers.google.com/protocol-buffers/docs/proto3#maps) Annotations may be a part of a modifiable resource. Use the resource's update RPC to update its annotations. In order to add a new annotation or update an existing one using an update RPC, provide the desired annotation in the update request. In order to remove an annotation using an update RPC, provide the target annotation's key but set its value to the empty string in the update request. Modifiable Optional: can be empty
        </ResponseField>
      </Expandable>
    </ResponseField>

    <ResponseField name="identityProviderId" type="string">
      The ID of the identity provider configured by `Identity Provider Config` If not set, assume the user is managed by the default identity provider. Optional
    </ResponseField>

    <ResponseField name="primaryPartyAuthentication" type="boolean">
      If set to true, the user may authenticate against the Ledger API by signing a Party JWT using the primary party's signing key. Modifiable Optional
    </ResponseField>
  </Expandable>
</ResponseField>

### 400

Invalid value, Invalid value for: body

<div class="x2mdx-ref-badges">
  <span class="x2mdx-ref-badge x2mdx-ref-badge--neutral">text/plain</span>
</div>

<ResponseField name="value" type="string" required />

### default

<div class="x2mdx-ref-badges">
  <span class="x2mdx-ref-badge x2mdx-ref-badge--neutral">application/json</span>
</div>

<ResponseField name="code" type="string" required />

<ResponseField name="cause" type="string" required />

<ResponseField name="correlationId" type="string" />

<ResponseField name="traceId" type="string" />

<ResponseField name="context" type="Map_String" required />

<ResponseField name="resources" type="Tuple2_String_String[]" />

<ResponseField name="errorCategory" type="integer (int32)" required />

<ResponseField name="grpcCodeValue" type="integer (int32)" />

<ResponseField name="retryInfo" type="string" />

<ResponseField name="definiteAnswer" type="boolean" />

## History

<div class="x2mdx-ref-history" aria-label="Reference history">
  <div class="x2mdx-ref-history-event x2mdx-ref-history-event--changed" id="history-updated-3-5">
    <div class="x2mdx-ref-history-event-head">
      <span class="x2mdx-ref-history-event-label">Updated</span>
      <code class="x2mdx-ref-history-event-version">3.5</code>
    </div>

    <p class="x2mdx-ref-history-event-detail">The POST /v2/users operation changed in this snapshot.</p>
  </div>
</div>
