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

# Create a User Profile

> Create a new User Profile under your Primary Profile.

export const PlansAvailable = ({plans = [], maxPackRequired}) => {
  let displayPlans = plans;
  if (plans && plans.length === 1) {
    const lowerCasePlan = plans[0].toLowerCase();
    if (lowerCasePlan === "business") {
      displayPlans = ["Launch", "Business", "Enterprise"];
    } else if (lowerCasePlan === "premium") {
      displayPlans = ["Premium", "Launch", "Business", "Enterprise"];
    }
  }
  return <Note>
Available on {displayPlans.length === 1 ? "the " : ""}
{displayPlans.join(", ").replace(/\b\w/g, l => l.toUpperCase())}{" "}
{displayPlans.length > 1 ? "plans" : "plan"}.

{maxPackRequired && <span onClick={() => window.open('https://www.ayrshare.com/docs/additional/maxpack', '_self')} className="flex items-center mt-2 cursor-pointer">
 <span className="px-1.5 py-0.5 rounded text-sm" style={{
    backgroundColor: '#C264B6',
    color: 'white',
    fontSize: '12px'
  }}>
   Max Pack required
 </span>
</span>}
</Note>;
};

export const HeaderAPI = ({noProfileKey, profileKeyRequired}) => <>
    <ParamField header="Authorization" type="string" required>
      <a href="/apis/overview#authorization">API Key</a> of the Primary Profile.
      <br />
      <br />
      Format: <code>Authorization: Bearer API_KEY</code>
    </ParamField>
    {!noProfileKey && (profileKeyRequired ? <ParamField header="Profile-Key" type="string" required>
          <a href="/apis/overview#profile-key-format">Profile Key</a> of a User Profile.
          <br />
          <br />
          Format: <code>Profile-Key: PROFILE_KEY</code>
        </ParamField> : <ParamField header="Profile-Key" type="string">
          <a href="/apis/overview#profile-key-format">Profile Key</a> of a User Profile.
          <br />
          <br />
          Format: <code>Profile-Key: PROFILE_KEY</code>
        </ParamField>)}
  </>;

<PlansAvailable plans={["business"]} maxPackRequired={false} />

Create a new profile under your Primary Profile. Upon successful creation of the User Profile, the API response will include the Profile Key associated with the newly created profile. Securely store the Profile Key in your system, as it will be required to make API calls on behalf of your user.

Please note that for security reasons, the Profile Keys are only returned in two specific cases:

1. User Profile Creation: When a new User Profile is created.
2. In the Ayrshare Dashboard: You can find the Profile Key for each profile within the Ayrshare Dashboard. Switch to the User Profile and then navigate to the Profile Key page.

We recommend you securely store the Profile Key in your system.

## Manage Social Networks

Use the disableSocial field to manage (add/remove) social networks from display. Please see [Manage Social Accounts](/apis/profiles/overview#enable-or-disable-social-networks) for more information.

## Manage Active User Profiles

Please see here for some recommendations on [managing active User Profiles](/multiple-users/manage-user-profiles#managing-active-user-profiles).

## Important Security Considerations

<Warning>
  <ul className="custom-bullets">
    <li>Avoid sharing Profile Keys publicly or exposing them in client-side code or public repositories.</li>
    <li>Profile Keys are sensitive credentials used to authenticate and authorize access to User Profiles.</li>
    <li>It is crucial to store Profile Keys securely in your system with appropriate access controls to maintain the integrity and confidentiality of your users' data.</li>
    <li>For security reasons, the Profile Key can't be retrieved again using the API. However, you can retrieve the Profile Key from the [dashboard](/multiple-users/manage-user-profiles#get-the-profile-key).</li>
    <li>The `refId` should also be stored to associate a profile to an endpoint return.</li>
  </ul>
</Warning>

## Header Parameters

<HeaderAPI noProfileKey />

## Body Parameters

<ParamField body="title" type="string" required>
  Title of the new profile. Must be unique. This title will be displayed on the social account linking page.
</ParamField>

<ParamField body="messagingActive" type="boolean" default={false}>
  Set to true to activate messaging for this user profile. Messaging must first be enabled for your Ayrshare account.
</ParamField>

<ParamField body="hideTopHeader" type="boolean" default={false}>
  Hide the top header on the social accounts linkage page.
</ParamField>

<ParamField body="topHeader" type="string">
  Change the header on the social accounts linkage page. If not set, then displays: "Social Accounts for "title" where "title" is the profile title.
</ParamField>

<ParamField body="disableSocial" type="array">
  Array of social networks that are disabled for this user's profile. The primary profile's list of disabled social networks takes precedence.

  Available networks: `bluesky`, `facebook`, `gmb`, `instagram`, `linkedin`, `pinterest`, `reddit`, `snapchat`, `telegram`, `threads`, `tiktok`, `twitter`, and `youtube`.

  See [enable or disable social networks](/apis/profiles/overview#enable-or-disable-social-networks) for more information.
</ParamField>

<ParamField body="team" type="boolean" default={false}>
  Create a new user profile as a team member by setting `team: true`. The `email` field will be used to send an invite email. See [inviting a team member](/multiple-users/manage-user-profiles#invite-a-team-member) for details on the requirements.
</ParamField>

<ParamField body="email" type="string">
  A valid email address where the team member invite will be sent. Required if `team: true`
</ParamField>

<ParamField body="subHeader" type="string">
  Change the sub header on the social accounts linkage page. Currently displays "Click an icon to link a social network".  Set to an empty string to remove.

  See how to change the [help link](/multiple-users/manage-user-profiles#help-links-visible).
</ParamField>

<ParamField body="tags" type="array">
  Tag user profiles using an array of strings. These tags serve as an internal organizational tool to categorize and manage your user profiles effectively.
</ParamField>

<RequestExample>
  ```javascript cURL theme={"system"}
  curl \
  -H "Authorization: Bearer API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"title": "ACME Profile"}' \
  -X POST https://api.ayrshare.com/api/profiles
  ```

  ```javascript JavaScript theme={"system"}
  const API_KEY = "API_KEY";

  fetch("https://api.ayrshare.com/api/profiles", {
        method: "POST",
        headers: {
          "Content-Type": "application/json",
          "Authorization": `Bearer ${API_KEY}`
        },
        body: JSON.stringify({
          title: "ACME Profile", // required
        }),
      })
        .then((res) => res.json())
        .then((json) => console.log(json))
        .catch(console.error);
  ```

  ```python Python theme={"system"}
  import requests

  payload = {'title': 'ACME Profile'}
  headers = {'Content-Type': 'application/json',
          'Authorization': 'Bearer API_KEY'}

  r = requests.post('https://api.ayrshare.com/api/profiles',
      json=payload,
      headers=headers)

  print(r.json())
  ```

  ```php PHP theme={"system"}
  <?php
  require 'vendor/autoload.php';    // Composer auto-loader using Guzzle. See .../guzzlephp.org/en/stable/overview.html

  $client = new GuzzleHttp\Client();
  $res = $client->request(
      'POST',
      'https://api.ayrshare.com/api/profiles',
      [
          'headers' => [
              'Content-Type'      => 'application/json',
              'Authorization'     => 'Bearer API_KEY'
          ],
          'title' => ['ACME Profile'],
      ]
  );

  echo json_encode(json_decode($res->getBody()), JSON_PRETTY_PRINT);
  ```

  ```go Go theme={"system"}
  package main

  import (
  	"bytes"
  	"encoding/json"
  	"log"
  	"net/http"
  )

  func main() {
  	message := map[string]interface{}{
  		"title": "ACME Profile"
  	}

  	bytesRepresentation, err := json.Marshal(message)
  	if err != nil {
  		log.Fatalln(err)
  	}

  	req, _ := http.NewRequest("POST", "https://api.ayrshare.com/api/profiles",
  		bytes.NewBuffer(bytesRepresentation))

  	req.Header.Add("Content-Type", "application/json; charset=UTF-8")
  	req.Header.Add("Authorization", "Bearer API_KEY")

  	res, err := http.DefaultClient.Do(req)
  	if err != nil {
  		log.Fatal("Error:", err)
  	}

  	res.Body.Close()
  }
  ```

  ```csharp C# theme={"system"}
  using System;
  using System.Net.Http;
  using System.Text;
  using System.Threading.Tasks;

  namespace CreateProfilePOSTRequest_csharp 
  {
    class CreateProfile
    {
        static async Task Main(string[] args)
        {
            string API_KEY = "API_KEY";
            string url = "https://api.ayrshare.com/api/profiles";
            string json = "{\"title\": \"ACME Profile\"}";

            using (var client = new HttpClient())
            {
                client.DefaultRequestHeaders.Add("Authorization", "Bearer " + API_KEY);

                try
                {
                    var content = new StringContent(json, Encoding.UTF8, "application/json");
                    HttpResponseMessage response = await client.PostAsync(url, content);
                    
                    response.EnsureSuccessStatusCode();
                    string responseBody = await response.Content.ReadAsStringAsync();
                    Console.WriteLine(responseBody);
                }
                catch (HttpRequestException e)
                {
                    Console.WriteLine($"Error: {e.Message}");
                }
            }
        }
    }
  }
  ```
</RequestExample>

<ResponseExample>
  ```json 200: Success theme={"system"}
  {
      "status": "success",
      "title": "Digg It",
      "refId": "140b8709bd6ade099b242d895e268fb886130c53",
      "profileKey": "7TVRLEZ-24A43C0-NJW0Z82-F11984N",
      "messagingActive": true // true if messaging for this user profile is active
  }
  ```

  ```json 400: Profile Title Already Exists theme={"system"}
  {
    "action": "create",
    "status": "error",
    "code": 146,
    "message": "Profile title already exists."
  }
  ```
</ResponseExample>
