> ## Documentation Index
> Fetch the complete documentation index at: https://docs.turnkey.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Create session profile

> Create a new session profile for an organization.

export const EndpointPath = ({type, path}) => {
  return <div class="flex w-full flex-col bg-background-light dark:bg-background-dark border-standard rounded-2xl p-1.5">
      <div class="flex items-center space-x-1.5">
        <div class="relative flex-1 flex gap-2 min-w-0 rounded-xl items-center cursor-pointer p-1.5 border-standard">
          <div class="rounded-lg font-bold px-1.5 py-0.5 text-sm leading-5 bg-blue-400/20 dark:bg-blue-400/20 text-blue-700 dark:text-blue-400">
            POST
          </div>
          <div class="flex items-center space-x-2 overflow-x-auto flex-1 no-scrollbar">
            <div class="group flex items-center flex-1 gap-0.5 font-mono">
              <div class="absolute right-0 p-2 bg-background-light dark:bg-background-dark rounded-lg hidden group-hover:block">
                <svg class="w-4 h-4 bg-gray-400 dark:bg-white/30"></svg>
              </div>
              <div class="text-sm text-gray-400">/</div>
              <div class="text-sm font-medium text-gray-800 dark:text-white min-w-max">
                public
              </div>
              <div class="text-sm text-gray-400">/</div>
              <div class="text-sm font-medium text-gray-800 dark:text-white min-w-max">
                v1
              </div>
              <div class="text-sm text-gray-400">/</div>
              <div class="text-sm font-medium text-gray-800 dark:text-white min-w-max">
                {type}
              </div>
              <div class="text-sm text-gray-400">/</div>
              <div class="text-sm font-medium text-gray-800 dark:text-white min-w-max">
                {path}
              </div>
            </div>
          </div>
        </div>
      </div>
    </div>;
};

export const NestedParam = ({parentKey, childKey, type, required, description, children}) => {
  const fullKey = `${parentKey}.${childKey}`;
  const anchorId = `body-${fullKey.replace(/\./g, '-')}`;
  return <div className="py-6 border-gray-100 dark:border-gray-800 border-b last:border-b-0">
  <div className="flex font-mono text-sm group/param-head param-head break-all relative" id={anchorId}>
    <div className="flex-1 flex content-start py-0.5 mr-5">
      <div className="flex items-center flex-wrap gap-2">
        <div className="absolute -top-1.5">
          <a href={`#${anchorId}`} className="-ml-[2.1rem] flex items-center opacity-0 border-0 group-hover/param-head:opacity-100 py-2 [.expandable-content_&]:-ml-[2.1rem]" aria-label="Navigate to header">
            <div className="w-6 h-6 text-gray-400 rounded-md flex items-center justify-center zinc-box bg-white ring-1 ring-gray-400/30 dark:ring-gray-700/25 hover:ring-gray-400/60 dark:hover:ring-white/20">
              <svg xmlns="http://www.w3.org/2000/svg" fill="gray" height="12px" viewBox="0 0 576 512">
                <path d="M0 256C0 167.6 71.6 96 160 96h72c13.3 0 24 10.7 24 24s-10.7 24-24 24H160C98.1 144 48 194.1 48 256s50.1 112 112 112h72c13.3 0 24 10.7 24 24s-10.7 24-24 24H160C71.6 416 0 344.4 0 256zm576 0c0 88.4-71.6 160-160 160H344c-13.3 0-24-10.7-24-24s10.7-24 24-24h72c61.9 0 112-50.1 112-112s-50.1-112-112-112H344c-13.3 0-24-10.7-24-24s10.7-24 24-24h72c88.4 0 160 71.6 160 160zM184 232H392c13.3 0 24 10.7 24 24s-10.7 24-24 24H184c-13.3 0-24-10.7-24-24s10.7-24 24-24z"></path>
              </svg>
            </div>
          </a>
        </div>
        <div className="font-semibold text-primary dark:text-primary-light cursor-pointer overflow-wrap-anywhere">
          <span className="text-gray-500 dark:text-gray-400">{parentKey}.</span>
          {childKey}
        </div>
        <div className="inline items-center gap-2 text-xs font-medium [&_div]:inline [&_div]:mr-2 [&_div]:leading-5">
          <div className="flex items-center px-2 py-0.5 rounded-md bg-gray-100/50 dark:bg-white/5 text-gray-600 dark:text-gray-200 font-medium break-all">
            <span>{type}</span>
          </div>
          {required && <span className="px-2 py-0.5 rounded-md bg-red-100/50 dark:bg-red-400/10 text-red-600 dark:text-red-300 font-medium whitespace-nowrap">
              required
            </span>}
        </div>
      </div>
    </div>
  </div>
  {children && <div className="mt-4">
      <div className="prose prose-sm prose-gray dark:prose-invert">
        {children}
      </div>
    </div>}
</div>;
};

export const H3Bordered = ({text}) => <h3 id={text.toLowerCase()} className="border-b pb-2.5 border-gray-100 dark:border-gray-800">
    {text}
  </h3>;

export const Authorizations = () => {
  return <div>
      <H3Bordered text="Authorizations" />

      <Tabs>
        <Tab title="API Key">
          <div className="flex text-sm group/param-head param-head break-all relative" id="authorization-x-stamp">
            <ParamField header="X-Stamp" type="string" required={true}>
              Cryptographically signed (stamped) request to be passed in as a header. For more info, see <a href="https://docs.turnkey.com/developer-reference/api-overview/stamps">here</a>.
            </ParamField>
          </div>
        </Tab>

        <Tab title="WebAuthn (Passkey)">
         <div className="flex text-sm group/param-head param-head break-all relative" id="authorization-x-stamp-webauthn">
            <ParamField body="X-Stamp-WebAuthn" type="string" required={true}>
              Cryptographically signed (stamped) request to be passed in as a header. For more info, see <a href="https://docs.turnkey.com/developer-reference/api-overview/stamps">here</a>.
            </ParamField>
          </div>
        </Tab>
      </Tabs>
    </div>;
};

<EndpointPath type="submit" path="create_session_profile" />

<Authorizations />

<H3Bordered text="Body" />

<ParamField body="type" type="enum<string>" required={true}>
  Enum options: `ACTIVITY_TYPE_CREATE_SESSION_PROFILE`
</ParamField>

<ParamField body="timestampMs" type="string" required={true}>
  Timestamp (in milliseconds) of the request, used to verify liveness of user requests.
</ParamField>

<ParamField body="organizationId" type="string" required={true}>
  Unique identifier for a given Organization.
</ParamField>

<ParamField body="parameters" type="object" required={true} path="parameters">
  <p>The parameters object containing the specific intent data for this activity.</p>

  <Expandable title="details">
    <NestedParam parentKey="parameters" childKey="sessionProfileName" type="string" required={true} default="">
      Human-readable name for a Session Profile.
    </NestedParam>

    <NestedParam parentKey="parameters" childKey="scope" type="string" required={true} default="">
      The scope string that defines the permissions for this Session Profile.
    </NestedParam>

    <NestedParam parentKey="parameters" childKey="expirationSeconds" type="string" required={false} default="">
      The duration in seconds for which sessions created with this Session Profile are valid. If not set, expiration will be determined by the value passed in to the intent of login activities.
    </NestedParam>

    <NestedParam parentKey="parameters" childKey="notes" type="string" required={false} default="">
      Notes for a Session Profile.
    </NestedParam>
  </Expandable>
</ParamField>

<H3Bordered text="Response" />

A successful response returns the following fields:

<ResponseField name="activity" type="object" required={true}>
  The activity object containing type, intent, and result

  <Expandable title="activity details">
    <NestedParam parentKey="activity" childKey="id" type="string" required={true}>
      Unique identifier for a given Activity object.
    </NestedParam>

    <NestedParam parentKey="activity" childKey="organizationId" type="string" required={true}>
      Unique identifier for a given Organization.
    </NestedParam>

    <NestedParam parentKey="activity" childKey="status" type="string" required={true}>
      The activity status
    </NestedParam>

    <NestedParam parentKey="activity" childKey="type" type="string" required={true}>
      The activity type
    </NestedParam>

    <NestedParam parentKey="activity" childKey="intent" type="object" required={true}>
      The intent of the activity

      <Expandable title="intent details">
        <NestedParam parentKey="activity.intent" childKey="createSessionProfileIntent" type="object" required={true}>
          The createSessionProfileIntent object

          <Expandable title="createSessionProfileIntent details">
            <NestedParam parentKey="activity.intent.createSessionProfileIntent" childKey="sessionProfileName" type="string" required={true}>
              Human-readable name for a Session Profile.
            </NestedParam>

            <NestedParam parentKey="activity.intent.createSessionProfileIntent" childKey="scope" type="string" required={true}>
              The scope string that defines the permissions for this Session Profile.
            </NestedParam>

            <NestedParam parentKey="activity.intent.createSessionProfileIntent" childKey="expirationSeconds" type="string" required={false}>
              The duration in seconds for which sessions created with this Session Profile are valid. If not set, expiration will be determined by the value passed in to the intent of login activities.
            </NestedParam>

            <NestedParam parentKey="activity.intent.createSessionProfileIntent" childKey="notes" type="string" required={false}>
              Notes for a Session Profile.
            </NestedParam>
          </Expandable>
        </NestedParam>
      </Expandable>
    </NestedParam>

    <NestedParam parentKey="activity" childKey="result" type="object" required={true}>
      The result of the activity

      <Expandable title="result details">
        <NestedParam parentKey="activity.result" childKey="createSessionProfileResult" type="object" required={true}>
          The createSessionProfileResult object

          <Expandable title="createSessionProfileResult details">
            <NestedParam parentKey="activity.result.createSessionProfileResult" childKey="sessionProfileId" type="string" required={true}>
              Unique identifier for a given Session Profile.
            </NestedParam>
          </Expandable>
        </NestedParam>
      </Expandable>
    </NestedParam>

    <NestedParam parentKey="activity" childKey="votes" type="array" required={true}>
      A list of objects representing a particular User's approval or rejection of a Consensus request, including all relevant metadata.
    </NestedParam>

    <NestedParam parentKey="activity" childKey="fingerprint" type="string" required={true}>
      An artifact verifying a User's action.
    </NestedParam>

    <NestedParam parentKey="activity" childKey="canApprove" type="boolean" required={true}>
      Whether the activity can be approved.
    </NestedParam>

    <NestedParam parentKey="activity" childKey="canReject" type="boolean" required={true}>
      Whether the activity can be rejected.
    </NestedParam>

    <NestedParam parentKey="activity" childKey="createdAt" type="string" required={true}>
      The creation timestamp.
    </NestedParam>

    <NestedParam parentKey="activity" childKey="updatedAt" type="string" required={true}>
      The last update timestamp.
    </NestedParam>
  </Expandable>
</ResponseField>

<RequestExample>
  ```bash title="cURL" theme={"system"}
  curl --request POST \
    --url https://api.turnkey.com/public/v1/submit/create_session_profile \
    --header 'Accept: application/json' \
    --header 'Content-Type: application/json' \
    --header "X-Stamp: <string> (see Authorizations)" \
    --data '{
      "type": "ACTIVITY_TYPE_CREATE_SESSION_PROFILE",
      "timestampMs": "<string> (e.g. 1746736509954)",
      "organizationId": "<string> (Your Organization ID)",
      "parameters": {
          "sessionProfileName": "<string>",
          "scope": "<string>",
          "expirationSeconds": "<string>",
          "notes": "<string>"
      }
  }'
  ```

  ```javascript title="JavaScript" theme={"system"}
  import { Turnkey } from "@turnkey/sdk-server";

  const turnkeyClient = new Turnkey({
    apiBaseUrl: "https://api.turnkey.com",
    apiPublicKey: process.env.API_PUBLIC_KEY!,
    apiPrivateKey: process.env.API_PRIVATE_KEY!,
    defaultOrganizationId: process.env.ORGANIZATION_ID!,
  });

  const response = await turnkeyClient.apiClient().createSessionProfile({
    sessionProfileName: "<string> (Human-readable name for a Session Profile.)",
    scope: "<string> (The scope string that defines the permissions for this Session Profile.)",
    expirationSeconds: "<string> (The duration in seconds for which sessions created with this Session Profile are valid. If not set, expiration will be determined by the value passed in to the intent of login activities.)",
    notes: "<string> (Notes for a Session Profile.)"
  });
  ```
</RequestExample>

<ResponseExample>
  ```json 200 theme={"system"}
  {
    "activity": {
      "id": "<activity-id>",
      "status": "ACTIVITY_STATUS_COMPLETED",
      "type": "ACTIVITY_TYPE_CREATE_SESSION_PROFILE",
      "organizationId": "<organization-id>",
      "timestampMs": "<timestamp> (e.g. 1746736509954)",
      "result": {
        "activity": {
          "id": "<string>",
          "organizationId": "<string>",
          "status": "<string>",
          "type": "<string>",
          "intent": {
            "createSessionProfileIntent": {
              "sessionProfileName": "<string>",
              "scope": "<string>",
              "expirationSeconds": "<string>",
              "notes": "<string>"
            }
          },
          "result": {
            "createSessionProfileResult": {
              "sessionProfileId": "<string>"
            }
          },
          "votes": "<array>",
          "fingerprint": "<string>",
          "canApprove": "<boolean>",
          "canReject": "<boolean>",
          "createdAt": "<string>",
          "updatedAt": "<string>"
        }
      }
    }
  }
  ```
</ResponseExample>
