---
title: Perfiles de usuario para la atribución a clientes finales
url: https://platform.claude.com/docs/es/manage-claude/user-profiles
description: Atribuye las solicitudes de API a los clientes finales a los que atiende tu plataforma, para que una medida de aplicación por motivos de seguridad pueda aplicarse a un solo perfil en lugar de a toda tu organización.
---

Los "user profiles" (perfiles de usuario, o "perfiles") le indican a Anthropic para cuál de tus clientes finales es cada solicitud de API. Así, una medida de aplicación por motivos de seguridad, como una retención o un bloqueo, puede aplicarse a un solo cliente final en lugar de a toda tu organización. Cuando esto ocurre, el resto de tu tráfico no se ve afectado.

Si operas una plataforma o un gateway, o revendes acceso a la API, las solicitudes que envías para tus clientes finales llegan bajo tu organización. Anthropic ejecuta clasificadores de seguridad automatizados sobre el tráfico de la API. Sin un perfil en la solicitud, un solo cliente final puede desencadenar una medida de aplicación que se aplique a toda tu organización.

Registras a cada cliente final una vez con `POST /v1/user_profiles` y guardas el ID `uprof_` que devuelve. Luego envías ese ID en el encabezado `anthropic-user-profile-id` en cada solicitud que hagas en nombre de ese cliente final.

Los perfiles no son facturables y no afectan los precios.

## Decide quién recibe un perfil

Lo que representa un perfil depende de cómo vendes Claude: una persona que usa tu producto o una empresa a la que revendes acceso a la API. Estos dos casos cubren la mayoría de las plataformas. El campo `access_type` del perfil indica cuál aplica.

| Para quién es el tráfico                                                | Perfil                                                                                                                                                                                                        | `access_type`                                                                         |
| ----------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- |
| Un usuario registrado de tu producto                                    | Uno por cada usuario, creado cuando se registra.                                                                                                                                                              | `application` (el valor predeterminado, que se establece cuando omites `access_type`) |
| Una empresa a la que revendes acceso a la API, por ejemplo como gateway | Uno por cada empresa, no por cada persona dentro de ella.                                                                                                                                                     | `passthrough` (no es el valor predeterminado, así que tienes que enviarlo)            |
| Tu propia organización                                                  | Ninguno. Anthropic cuenta una solicitud sin ID de perfil como tu propio uso. Mantén ese uso en una [organización separada](https://platform.claude.com/docs/es/manage-claude/user-profiles#before-you-begin). | No aplica                                                                             |
| Un espacio de trabajo en tu organización                                | Ningún perfil separado. Un perfil pertenece a tu organización, y su ID funciona en solicitudes a través de cualquier espacio de trabajo de ella.                                                              | No aplica                                                                             |

## Qué contiene un perfil y cómo lo usa Anthropic

Un perfil contiene solo lo que envías sobre el cliente final, más cualquier [estado de programa](https://platform.claude.com/docs/es/manage-claude/user-profiles-verification-portal#after-the-end-customer-links-the-profile) que Anthropic establezca. No contiene contenido de conversaciones. Anthropic usa los detalles que envías para atribuir solicitudes, para supervisar posibles abusos, para hacer cumplir la [Política de Uso](https://www.anthropic.com/legal/aup) y para permitir la postulación y el acceso a programas de acceso de confianza. Anthropic no verifica los detalles.

Anthropic procesa los perfiles de acuerdo con la [Política de privacidad](https://www.anthropic.com/legal/privacy).

## Antes de comenzar

Creas y administras perfiles en uno de los siguientes:

* Una organización en la Claude API.
* Una organización en [Claude Platform on AWS](https://platform.claude.com/docs/es/build-with-claude/claude-platform-on-aws). La entidad principal que realiza la llamada necesita las [acciones de IAM de perfiles de usuario](https://platform.claude.com/docs/es/api/claude-platform-on-aws-iam-actions#user-profiles).
* Una implementación de [Microsoft Foundry](https://platform.claude.com/docs/es/build-with-claude/claude-in-microsoft-foundry) [alojada en Anthropic](https://platform.claude.com/docs/es/build-with-claude/claude-in-microsoft-foundry#hosting-options), no una alojada en Azure. No necesitas una organización en la Claude API ni en Claude Platform on AWS. Usa tu endpoint de Foundry, con la misma URL base y autenticación que usas para la inferencia.

Amazon Bedrock y Google Cloud no tienen los endpoints `/v1/user_profiles`. Si tu inferencia se ejecuta allí, crea tus perfiles en una organización en la Claude API o en Claude Platform on AWS. En Amazon Bedrock, los perfiles funcionan solo con [Claude en Amazon Bedrock](https://platform.claude.com/docs/es/build-with-claude/claude-in-amazon-bedrock). Consulta [Atribuye solicitudes en Amazon Bedrock y Google Cloud](https://platform.claude.com/docs/es/manage-claude/user-profiles#attribute-requests-on-amazon-bedrock-and-google-cloud).

Mantén el tráfico que envías para tus clientes finales en una organización y tu propio uso interno en otra. Los perfiles pertenecen a una organización, no a un espacio de trabajo, así que no basta con espacios de trabajo separados en una misma organización. Solo la organización para el tráfico de clientes finales necesita perfiles de usuario. Para crear otra organización en la Claude API, consulta la sección "How to create a new organization" de [Creating and managing Workspaces in the Claude Console](https://support.claude.com/en/articles/9796807) en el Centro de ayuda de Claude.

Los ejemplos llaman a la Claude API con una clave de API. No necesitas una [clave de API de administrador](https://platform.claude.com/docs/es/manage-claude/admin-api-keys). En Claude Platform on AWS, usa su URL base y su autenticación.

## Crea un perfil para cada cliente final

Crea un perfil para cada cliente final cuyo tráfico envíes a Claude. Créalo una sola vez, en tu flujo de incorporación de clientes. `POST /v1/user_profiles` no es idempotente, así que cada llamada crea un perfil nuevo, incluso cuando `reference_id` coincide con uno existente. Si ya tienes clientes finales sin perfiles, consulta las indicaciones sobre cómo registrar una base de clientes existente más adelante en esta sección.

El siguiente ejemplo registra una empresa que compra acceso a la API a través de un gateway, por lo que establece `access_type` en `passthrough`. Para un perfil `application`, omite `access_type` y describe a un usuario final en `name` y `external_user_details` en lugar de una empresa. [Decide quién recibe un perfil](https://platform.claude.com/docs/es/manage-claude/user-profiles#decide-who-gets-a-profile) compara los dos tipos de acceso.

<CodeGroup>
  ```bash cURL
  curl https://api.anthropic.com/v1/user_profiles \
    -H "x-api-key: $ANTHROPIC_API_KEY" \
    -H "anthropic-version: 2023-06-01" \
    -H "content-type: application/json" \
    -d '{
      "name": "Acme Analytics, Inc.",
      "access_type": "passthrough",
      "external_user_details": {
        "reference_id": "cust-8f2a1c",
        "country": "US"
      }
    }'
  ```

  ```bash CLI
  ant user-profiles create \
    --name "Acme Analytics, Inc." \
    --access-type passthrough \
    --external-user-details '{reference_id: cust-8f2a1c, country: US}'
  ```

  ```python Python
  client = anthropic.Anthropic()

  profile = client.user_profiles.create(
      name="Acme Analytics, Inc.",
      access_type="passthrough",
      external_user_details={"reference_id": "cust-8f2a1c", "country": "US"},
  )

  print(profile.id)
  ```

  ```typescript TypeScript
  const client = new Anthropic();

  const profile = await client.userProfiles.create({
    name: "Acme Analytics, Inc.",
    access_type: "passthrough",
    external_user_details: { reference_id: "cust-8f2a1c", country: "US" }
  });

  console.log(profile.id);
  ```

  ```csharp C#
  AnthropicClient client = new();

  var profile = await client.UserProfiles.Create(new()
  {
      Name = "Acme Analytics, Inc.",
      AccessType = UserProfileAccessType.Passthrough,
      ExternalUserDetails = new()
      {
          ReferenceID = "cust-8f2a1c",
          Country = "US"
      }
  });

  Console.WriteLine(profile.ID);
  ```

  ```go Go
  client := anthropic.NewClient()

  profile, err := client.UserProfiles.New(context.Background(), anthropic.UserProfileNewParams{
  	Name:       anthropic.String("Acme Analytics, Inc."),
  	AccessType: anthropic.UserProfileAccessTypePassthrough,
  	ExternalUserDetails: anthropic.UserProfileExternalUserDetailsParams{
  		ReferenceID: anthropic.String("cust-8f2a1c"),
  		Country:     anthropic.String("US"),
  	},
  })
  if err != nil {
  	log.Fatal(err)
  }

  fmt.Println(profile.ID)
  ```

  ```java Java
  import com.anthropic.models.userprofiles.UserProfileAccessType;
  import com.anthropic.models.userprofiles.UserProfileCreateParams;
  import com.anthropic.models.userprofiles.UserProfileExternalUserDetailsParams;

  void main() {
      AnthropicClient client = AnthropicOkHttpClient.fromEnv();

      var params = UserProfileCreateParams.builder()
          .name("Acme Analytics, Inc.")
          .accessType(UserProfileAccessType.PASSTHROUGH)
          .externalUserDetails(UserProfileExternalUserDetailsParams.builder()
              .referenceId("cust-8f2a1c")
              .country("US")
              .build())
          .build();
      var profile = client.userProfiles().create(params);

      IO.println(profile.id());
  }
  ```

  ```php PHP
  $client = new Client();

  $profile = $client->userProfiles->create(
      name: 'Acme Analytics, Inc.',
      accessType: 'passthrough',
      externalUserDetails: ['referenceID' => 'cust-8f2a1c', 'country' => 'US'],
  );

  echo $profile->id, PHP_EOL;
  ```

  ```ruby Ruby
  client = Anthropic::Client.new

  profile = client.user_profiles.create(
    name: "Acme Analytics, Inc.",
    access_type: :passthrough,
    external_user_details: { reference_id: "cust-8f2a1c", country: "US" }
  )

  puts profile.id
  ```
</CodeGroup>

La respuesta es el nuevo perfil:

```json
{
  "type": "user_profile",
  "id": "uprof_011CZkZCu8hGbp5mYRQgUmz9",
  "name": "Acme Analytics, Inc.",
  "access_type": "passthrough",
  "external_user_details": {
    "reference_id": "cust-8f2a1c",
    "onboarded_at": null,
    "account_status": null,
    "entity_type": null,
    "country": "US",
    "name_hash": null,
    "email_hash": null
  },
  "metadata": {},
  "programs": {
    "cyber": null,
    "efs": null
  },
  "created_at": "2026-03-15T10:00:00Z",
  "updated_at": "2026-03-15T10:00:00Z"
}
```

Guarda el `id` en tu registro de cliente y haz que tus instancias de servicio lo lean desde allí en lugar de crear su propio perfil. Recuperas, actualizas y eliminas un perfil mediante ese `id`. El campo `programs` es de solo lectura y la atribución no lo usa. Contiene el estado del cliente final en cada programa que gestiona Anthropic. Para saber qué significan sus valores, consulta [qué programas se aplican a un perfil](https://platform.claude.com/docs/es/manage-claude/user-profiles-verification-portal#after-the-end-customer-links-the-profile).

No hay un límite en la cantidad de perfiles de una organización, pero la creación de perfiles está sujeta a un "rate limit" (límite de velocidad). Antes de registrar una base de clientes existente de forma masiva, comunícate con tu equipo de cuenta de Anthropic.

### Qué decirle a Anthropic sobre un cliente final

Todos los campos son opcionales. Puedes enviar `name`, `metadata` y estos campos en `external_user_details`: `entity_type`, `country`, `reference_id`, `onboarded_at`, `account_status`, `name_hash` y `email_hash`. La referencia [Crear un perfil](https://platform.claude.com/docs/es/api/beta/user_profiles/create) describe cada campo, con su tipo, formato y límite de longitud.

Sigue estas reglas al establecer los campos:

* **Valores desconocidos:** Si no conoces un valor, omítelo en lugar de enviar un marcador de posición. Puedes reemplazar un valor en `external_user_details` más adelante, pero no puedes borrarlo.
* **Nombres de empresas:** Para un perfil `passthrough`, envía el nombre legal de la empresa en `name` si lo conoces.
* **País:** En `country`, envía el país del cliente final, no el tuyo.
* **Tu propio ID:** En `reference_id`, envía tu propio identificador estable para el cliente final. No tiene que ser único.
* **Nombres y direcciones de correo electrónico que no puedes compartir:** Omite `name` y envía `external_user_details.name_hash` en su lugar. Para la dirección de correo electrónico, envía `external_user_details.email_hash`. Un perfil no tiene ningún campo para la dirección en sí.
* **Hashes:** Calcula los hashes tú mismo, con una función que elijas. Le muestran a Anthropic cuáles de tus perfiles comparten un nombre o una dirección de correo electrónico. Usa la misma función y la misma normalización de mayúsculas/minúsculas y espacios en blanco para cada perfil, porque solo coinciden los valores calculados de la misma manera.

## Atribuye cada solicitud

Envía el ID del perfil en el encabezado `anthropic-user-profile-id` en cada solicitud que hagas en nombre del cliente final. Los SDK y la CLI tienen un argumento que envía el encabezado por ti: `user_profile_id` (java: `userProfileId`; php: `userProfileID`; csharp, go: `UserProfileID`; cli: `--user-profile-id`).

<CodeGroup>
  ```bash cURL
  curl https://api.anthropic.com/v1/messages \
    -H "x-api-key: $ANTHROPIC_API_KEY" \
    -H "anthropic-version: 2023-06-01" \
    -H "anthropic-user-profile-id: uprof_011CZkZCu8hGbp5mYRQgUmz9" \
    -H "content-type: application/json" \
    -d '{
      "model": "claude-opus-5-5",
      "max_tokens": 1024,
      "messages": [
        {"role": "user", "content": "Hello, Claude"}
      ]
    }'
  ```

  ```bash CLI
  ant messages create \
    --model claude-opus-5-5 \
    --max-tokens 1024 \
    --message '{role: user, content: "Hello, Claude"}' \
    --user-profile-id uprof_011CZkZCu8hGbp5mYRQgUmz9
  ```

  ```python Python
  client = anthropic.Anthropic()

  message = client.messages.create(
      model="claude-opus-5-5",
      max_tokens=1024,
      messages=[{"role": "user", "content": "Hello, Claude"}],
      user_profile_id="uprof_011CZkZCu8hGbp5mYRQgUmz9",
  )

  print(message)
  ```

  ```typescript TypeScript
  const client = new Anthropic();

  const message = await client.messages.create({
    model: "claude-opus-5-5",
    max_tokens: 1024,
    messages: [{ role: "user", content: "Hello, Claude" }],
    user_profile_id: "uprof_011CZkZCu8hGbp5mYRQgUmz9"
  });

  console.log(message);
  ```

  ```csharp C#
  AnthropicClient client = new();

  var parameters = new MessageCreateParams
  {
      Model = Model.ClaudeOpus5_5,
      MaxTokens = 1024,
      Messages = [new() { Role = Role.User, Content = "Hello, Claude" }],
      UserProfileID = "uprof_011CZkZCu8hGbp5mYRQgUmz9"
  };
  var message = await client.Messages.Create(parameters);

  Console.WriteLine(message);
  ```

  ```go Go
  client := anthropic.NewClient()

  message, err := client.Messages.New(context.Background(), anthropic.MessageNewParams{
  	Model:     anthropic.ModelClaudeOpus5_5,
  	MaxTokens: 1024,
  	Messages: []anthropic.MessageParam{
  		anthropic.NewUserMessage(anthropic.NewTextBlock("Hello, Claude")),
  	},
  	UserProfileID: anthropic.String("uprof_011CZkZCu8hGbp5mYRQgUmz9"),
  })
  if err != nil {
  	log.Fatal(err)
  }

  fmt.Println(message)
  ```

  ```java Java
  import com.anthropic.models.messages.MessageCreateParams;
  import com.anthropic.models.messages.Model;

  void main() {
      AnthropicClient client = AnthropicOkHttpClient.fromEnv();

      var params = MessageCreateParams.builder()
          .model(Model.CLAUDE_OPUS_5_5)
          .maxTokens(1024L)
          .addUserMessage("Hello, Claude")
          .userProfileId("uprof_011CZkZCu8hGbp5mYRQgUmz9")
          .build();
      var message = client.messages().create(params);

      IO.println(message);
  }
  ```

  ```php PHP
  $client = new Client();

  $message = $client->messages->create(
      maxTokens: 1024,
      messages: [['role' => 'user', 'content' => 'Hello, Claude']],
      model: Model::CLAUDE_OPUS_5_5,
      userProfileID: 'uprof_011CZkZCu8hGbp5mYRQgUmz9',
  );

  echo json_encode($message, JSON_PRETTY_PRINT), PHP_EOL;
  ```

  ```ruby Ruby
  client = Anthropic::Client.new

  message = client.messages.create(
    model: Anthropic::Model::CLAUDE_OPUS_5_5,
    max_tokens: 1024,
    messages: [{ role: "user", content: "Hello, Claude" }],
    user_profile_id: "uprof_011CZkZCu8hGbp5mYRQgUmz9"
  )

  puts message
  ```
</CodeGroup>

El encabezado funciona de la misma manera en las solicitudes de [conteo de tokens](https://platform.claude.com/docs/es/build-with-claude/token-counting), [Message Batches](https://platform.claude.com/docs/es/build-with-claude/batch-processing) y [compatibilidad con el SDK de OpenAI](https://platform.claude.com/docs/es/cli-sdks-libraries/libraries/openai-sdk). En un lote, se aplica a cada solicitud del lote.

La Claude API, Claude Platform on AWS y las implementaciones de Microsoft Foundry alojadas en Anthropic comprueban el ID en cada solicitud. Si el ID tiene un formato incorrecto o no pertenece a la organización que envía la solicitud, la API devuelve un `400` `invalid_request_error`. De forma predeterminada, estas plataformas aceptan un ID de perfil solo en solicitudes de la organización que creó el perfil. Esto significa que si envías tráfico bajo más de una organización, por ejemplo una en la Claude API y otra en Claude Platform on AWS, una solicitud de una organización que no creó el perfil recibe el mismo `400`.

Message Batches es la excepción: al crear un lote solo se comprueba el formato del ID. Si un ID con formato correcto no pertenece a la organización que envía el lote, el lote se crea de todos modos, y luego cada solicitud en él falla con un resultado `errored` que contiene el mismo `invalid_request_error`.

### Atribuye solicitudes en Amazon Bedrock y Google Cloud

Un ID de perfil de cualquiera de los dos tipos de acceso también funciona en [Claude en Amazon Bedrock](https://platform.claude.com/docs/es/build-with-claude/claude-in-amazon-bedrock) y en Google Cloud. No funciona con la [integración anterior de Amazon Bedrock](https://platform.claude.com/docs/es/build-with-claude/claude-on-amazon-bedrock-legacy) que llamas con `InvokeModel` o `Converse`. Usas las credenciales de tu organización de Anthropic solo para crear y administrar perfiles. La inferencia sigue usando tus credenciales existentes de AWS o Google Cloud.

| Plataforma                                                                                                                                     | Crear perfiles                                            | Enviar el ID del perfil en                           |
| ---------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------- | ---------------------------------------------------- |
| Claude API                                                                                                                                     | Sí                                                        | Encabezado `anthropic-user-profile-id`               |
| [Claude Platform on AWS](https://platform.claude.com/docs/es/build-with-claude/claude-platform-on-aws)                                         | Sí                                                        | Encabezado `anthropic-user-profile-id`               |
| [Microsoft Foundry](https://platform.claude.com/docs/es/build-with-claude/claude-in-microsoft-foundry), implementaciones alojadas en Anthropic | Sí                                                        | Encabezado `anthropic-user-profile-id`               |
| [Google Cloud](https://platform.claude.com/docs/es/build-with-claude/claude-on-vertex-ai)                                                      | No. Créalos en la Claude API o en Claude Platform on AWS. | Encabezado `anthropic-user-profile-id`               |
| [Claude en Amazon Bedrock](https://platform.claude.com/docs/es/build-with-claude/claude-in-amazon-bedrock)                                     | No. Créalos en la Claude API o en Claude Platform on AWS. | Campo `user_profile_id` en el cuerpo de la solicitud |

En Claude en Amazon Bedrock, coloca el ID en el nivel superior del cuerpo de la solicitud:

```json
{
  "model": "anthropic.claude-opus-5-5",
  "max_tokens": 1024,
  "user_profile_id": "uprof_011CZkZCu8hGbp5mYRQgUmz9",
  "messages": [{ "role": "user", "content": "Hello, Claude" }]
}
```

Vincula cada cuenta de AWS que envía solicitudes a Claude en Amazon Bedrock, y cada proyecto de Google Cloud que envía solicitudes en Google Cloud, a la organización de Anthropic que crea tus perfiles:

1. Un administrador o propietario de esa organización inicia la vinculación en el Verification Portal en `portal.anthropic.com`, en **Linked accounts**.
2. Alguien que pueda administrar IAM en la cuenta de AWS o en el proyecto de Google Cloud ejecuta un comando que proporciona el portal.
3. El administrador o propietario completa la verificación en el portal.

Los programas que se aplican a un perfil se aplican a las solicitudes de una cuenta solo después de que la cuenta esté vinculada y el portal la muestre como **Linked**. Esos programas incluyen aquellos para los que se aprueba la organización de un cliente final después de que el cliente final [vincula el perfil a esa organización](https://platform.claude.com/docs/es/manage-claude/user-profiles-verification-portal).

Claude en Amazon Bedrock y Google Cloud comprueban el formato del ID, pero no buscan el perfil. Rechazan un ID con formato incorrecto con un `400`. Aceptan cualquier ID con formato correcto, así que una respuesta exitosa no confirma que el ID corresponda a un perfil. Una solicitud sin ID se procesa sin atribución y, si desencadena una medida de aplicación, la medida se aplica a toda tu organización.

### Identifica a usuarios individuales dentro de una empresa

Un perfil `passthrough` identifica a una empresa, no a la persona que realiza la solicitud. Si una solicitud proviene de una persona identificable, envía también un identificador para esa persona en el campo [`metadata.user_id`](https://platform.claude.com/docs/es/api/messages/create) de la solicitud de Messages. Este es el propio objeto `metadata` de la solicitud, no el campo `metadata` del perfil. El identificador es opcional y ayuda a Anthropic a detectar el uso indebido por parte de una persona.

## Mantén los perfiles actualizados

Actualiza un perfil cuando cambien los detalles o el estado de la cuenta del cliente final, y elimínalo cuando cierre su cuenta o te pida que borres sus datos.

### Actualiza un perfil

[`POST /v1/user_profiles/{id}`](https://platform.claude.com/docs/es/api/beta/user_profiles/update) cambia solo los campos que envías. Por ejemplo, úsalo cuando una empresa cambia de marca o cuando suspendes una cuenta.

* `name` y `access_type` reemplazan el valor almacenado.
* Cada campo que envías en `external_user_details` reemplaza el valor almacenado. No puedes borrar un valor. La API rechaza `null` con un `400`.
* `metadata` se combina clave por clave. Una clave que envías sobrescribe el valor almacenado, una cadena vacía elimina la clave y las claves que omites permanecen como están.

El siguiente ejemplo marca la cuenta como suspendida y elimina una clave de metadatos `trial_cohort`.

<CodeGroup>
  ```bash cURL
  curl https://api.anthropic.com/v1/user_profiles/uprof_011CZkZCu8hGbp5mYRQgUmz9 \
    -H "x-api-key: $ANTHROPIC_API_KEY" \
    -H "anthropic-version: 2023-06-01" \
    -H "content-type: application/json" \
    -d '{
      "external_user_details": {"account_status": "suspended"},
      "metadata": {"trial_cohort": ""}
    }'
  ```

  ```bash CLI
  ant user-profiles update \
    --user-profile-id uprof_011CZkZCu8hGbp5mYRQgUmz9 \
    --external-user-details '{account_status: suspended}' \
    --metadata '{trial_cohort: ""}'
  ```

  ```python Python
  client = anthropic.Anthropic()

  profile = client.user_profiles.update(
      "uprof_011CZkZCu8hGbp5mYRQgUmz9",
      external_user_details={"account_status": "suspended"},
      metadata={"trial_cohort": ""},
  )

  print(profile)
  ```

  ```typescript TypeScript
  const client = new Anthropic();

  const profile = await client.userProfiles.update("uprof_011CZkZCu8hGbp5mYRQgUmz9", {
    external_user_details: { account_status: "suspended" },
    metadata: { trial_cohort: "" }
  });

  console.log(profile);
  ```

  ```csharp C#
  AnthropicClient client = new();

  var profile = await client.UserProfiles.Update("uprof_011CZkZCu8hGbp5mYRQgUmz9", new()
  {
      ExternalUserDetails = new()
      {
          AccountStatus = UserProfileExternalUserAccountStatus.Suspended
      },
      Metadata = new Dictionary<string, string> { ["trial_cohort"] = "" }
  });

  Console.WriteLine(profile);
  ```

  ```go Go
  client := anthropic.NewClient()

  profile, err := client.UserProfiles.Update(
  	context.Background(),
  	"uprof_011CZkZCu8hGbp5mYRQgUmz9",
  	anthropic.UserProfileUpdateParams{
  		ExternalUserDetails: anthropic.UserProfileExternalUserDetailsParams{
  			AccountStatus: anthropic.UserProfileExternalUserAccountStatusSuspended,
  		},
  		Metadata: map[string]string{"trial_cohort": ""},
  	},
  )
  if err != nil {
  	log.Fatal(err)
  }

  fmt.Println(profile)
  ```

  ```java Java
  import com.anthropic.core.JsonValue;
  import com.anthropic.models.userprofiles.UserProfileExternalUserAccountStatus;
  import com.anthropic.models.userprofiles.UserProfileExternalUserDetailsParams;
  import com.anthropic.models.userprofiles.UserProfileUpdateParams;

  void main() {
      AnthropicClient client = AnthropicOkHttpClient.fromEnv();

      var params = UserProfileUpdateParams.builder()
          .userProfileId("uprof_011CZkZCu8hGbp5mYRQgUmz9")
          .externalUserDetails(UserProfileExternalUserDetailsParams.builder()
              .accountStatus(UserProfileExternalUserAccountStatus.SUSPENDED)
              .build())
          .metadata(UserProfileUpdateParams.Metadata.builder()
              .putAdditionalProperty("trial_cohort", JsonValue.from(""))
              .build())
          .build();
      var profile = client.userProfiles().update(params);

      IO.println(profile);
  }
  ```

  ```php PHP
  $client = new Client();

  $profile = $client->userProfiles->update(
      'uprof_011CZkZCu8hGbp5mYRQgUmz9',
      externalUserDetails: ['accountStatus' => 'suspended'],
      metadata: ['trial_cohort' => ''],
  );

  echo json_encode($profile, JSON_PRETTY_PRINT), PHP_EOL;
  ```

  ```ruby Ruby
  client = Anthropic::Client.new

  profile = client.user_profiles.update(
    "uprof_011CZkZCu8hGbp5mYRQgUmz9",
    external_user_details: { account_status: :suspended },
    metadata: { trial_cohort: "" }
  )

  puts profile
  ```
</CodeGroup>

### Elimina un perfil

`DELETE /v1/user_profiles/{id}` elimina permanentemente un perfil y todo lo que proporcionaste para él, incluidos `name`, `external_user_details` y `metadata`. No elimina los registros de confianza y seguridad que Anthropic conserva sobre ese ID de perfil.

Elimina un perfil cuando un cliente final cierre su cuenta o te pida que borres sus datos. Antes de eliminar un perfil, deja de enviar su ID en las solicitudes de ese cliente final. Si el cliente final sigue contigo después de una solicitud de borrado, crea un perfil nuevo y cambia a su ID. Luego elimina el anterior.

<CodeGroup>
  ```bash cURL
  curl -X DELETE https://api.anthropic.com/v1/user_profiles/uprof_011CZkZCu8hGbp5mYRQgUmz9 \
    -H "x-api-key: $ANTHROPIC_API_KEY" \
    -H "anthropic-version: 2023-06-01"
  ```

  ```bash CLI
  ant user-profiles delete --user-profile-id uprof_011CZkZCu8hGbp5mYRQgUmz9
  ```

  ```python Python
  client = anthropic.Anthropic()

  deleted = client.user_profiles.delete("uprof_011CZkZCu8hGbp5mYRQgUmz9")

  print(deleted.id)
  ```

  ```typescript TypeScript
  const client = new Anthropic();

  const deleted = await client.userProfiles.delete("uprof_011CZkZCu8hGbp5mYRQgUmz9");

  console.log(deleted.id);
  ```

  ```csharp C#
  AnthropicClient client = new();

  var deleted = await client.UserProfiles.Delete("uprof_011CZkZCu8hGbp5mYRQgUmz9");

  Console.WriteLine(deleted.ID);
  ```

  ```go Go
  client := anthropic.NewClient()

  deleted, err := client.UserProfiles.Delete(
  	context.Background(),
  	"uprof_011CZkZCu8hGbp5mYRQgUmz9",
  	anthropic.UserProfileDeleteParams{},
  )
  if err != nil {
  	log.Fatal(err)
  }

  fmt.Println(deleted.ID)
  ```

  ```java Java
  void main() {
      AnthropicClient client = AnthropicOkHttpClient.fromEnv();

      var deleted = client.userProfiles().delete("uprof_011CZkZCu8hGbp5mYRQgUmz9");

      IO.println(deleted.id());
  }
  ```

  ```php PHP
  $client = new Client();

  $deleted = $client->userProfiles->delete('uprof_011CZkZCu8hGbp5mYRQgUmz9');

  echo $deleted->id, PHP_EOL;
  ```

  ```ruby Ruby
  client = Anthropic::Client.new

  deleted = client.user_profiles.delete("uprof_011CZkZCu8hGbp5mYRQgUmz9")

  puts deleted.id
  ```
</CodeGroup>

La respuesta repite el ID con `"type": "user_profile_deleted"`. Si una eliminación devuelve un error del servidor, vuelve a intentarla. Un `404` en el reintento significa que la primera eliminación se completó.

Después de una eliminación, los endpoints de perfiles devuelven un `404` para ese ID. Durante un máximo de unos 10 minutos, las solicitudes de inferencia que llevan el ID eliminado aún pueden tener éxito. Después de eso, las plataformas que comprueban el ID en cada solicitud rechazan la solicitud con un `400`. Claude en Amazon Bedrock y Google Cloud no buscan los perfiles, así que siguen aceptándola.

## Próximos pasos

La referencia de la API contiene los campos, tipos y límites de cada endpoint: [Crear un perfil](https://platform.claude.com/docs/es/api/beta/user_profiles/create), [Recuperar un perfil](https://platform.claude.com/docs/es/api/beta/user_profiles/retrieve), [Actualizar un perfil](https://platform.claude.com/docs/es/api/beta/user_profiles/update) y [Listar perfiles](https://platform.claude.com/docs/es/api/beta/user_profiles/list).

Si las aprobaciones de programas de un cliente final deben aplicarse cuando usa Claude a través de tu plataforma, consulta [Envía a un cliente final un enlace al Verification Portal](https://platform.claude.com/docs/es/manage-claude/user-profiles-verification-portal).

<CardGroup cols={2}>
  <Card title="Autenticación" href="https://platform.claude.com/docs/es/manage-claude/authentication">
    Elige cómo se autentican tus servicios en la Claude API.
  </Card>

  <Card title="API de uso y costos" href="https://platform.claude.com/docs/es/manage-claude/usage-cost-api">
    Realiza un seguimiento del uso de tokens de la API y de los costos de tu organización.
  </Card>

  <Card title="Residencia de datos" href="https://platform.claude.com/docs/es/manage-claude/data-residency">
    Administra dónde se ejecuta la inferencia del modelo y dónde se almacenan los datos.
  </Card>

  <Card title="Compliance API" href="https://platform.claude.com/docs/es/manage-claude/compliance-api">
    Audita la actividad en toda tu organización.
  </Card>
</CardGroup>
