---
schema_version: "1"
id: 19b7815b5defff3bfd87d9ba593e47c7e46b8e11c2212c8d2b99572a77e2dce4
title: Profile
collection: legacydeveloper
version: current
locale: en-us
portal_url: https://docs.salesforce.com/legacydeveloper/current/en-us/api_meta/meta_profile.md
canonical_url: https://developer.salesforce.com/docs/atlas.en-us.api_meta.meta/api_meta/meta_profile.htm
source_site: developer.salesforce.com
content_type: documentation
content_hash: d6a1a446516595061535bd623cf24edac73616c745073b965fac90a9b6af6910
description: Represents a user profile. A profile defines a user’s permission to perform different functions within Salesforce. This type extends the Metadata metadata type and inherits its fullName field.
---
# Profile

Represents a user profile. A profile defines a user’s permission to perform different functions within Salesforce. This type extends the Metadata metadata type and inherits its fullName field.

In API version 29.0 and later, you can retrieve and deploy access settings for these managed components in profiles and permission sets:

- Apex classes
- Apps
- Custom field permissions
- Custom object permissions
- Custom tab settings
- External data sources
- Record types
- Visualforce pages

In API version 51.0 and later, you can retrieve and deploy access settings for login flows. For more information, see Managed Component Access in the Components in a Module section of [Sample package.xml Manifest Files](https://developer.salesforce.com/docs/atlas.en-us.api_meta.meta/api_meta/manifest_samples.htm "This section includes sample package.xml manifest files that show you how to work with different subsets of metadata. A manifest file can include multiple <types> elements so you could combine the individual samples into one package.xml manifest file if you want to work with all the metadata in one batch.").

As of API version 50.0 and later, only users with correct permissions can view profile names other than their own if the Profile Filtering setting is enabled.

![Important](https://developer.salesforce.com/docs/atlas.en-us.api_meta.meta/api_meta/images/icon_note_important.png)

#### Important

Profile names are also exposed when users with permissions to perform the following tasks take these actions:

- Create a tab or record type with a wizard step that includes the assignment of tabs and record types to profiles.
- Configure a login flow where viewing profile lists is required to make flow associations.
- Set up delegated admins where looking up profiles is needed to identify assignable profiles.
- Administer an org as a delegated customer admin.
- Administer an org as a delegated admin to view and assign profiles of the delegated group.

## Declarative Metadata File Suffix and Directory Location

The file suffix is .profile. There's one file for each profile, stored in the profiles folder in the corresponding package directory.

## Version

Profiles are available in API version 10.0 and later.

## Special Access Rules

As of Summer ’20 and later, Customer Portal and Partner Portal users can’t access this type.

To view the following settings, assignments, and permissions for standard and custom objects in a specified profile, the View Setup and Configuration permission is required.

- Client settings
- Field permissions
- Layout assignments
- Object permissions
- Permission dependencies
- Permission set tab settings
- Permission set group components
- Record types

## Fields

The content of a profile returned by Metadata API depends on the content requested in the [RetrieveRequest](https://developer.salesforce.com/docs/atlas.en-us.api_meta.meta/api_meta/meta_retrieve_request.htm "The RetrieveRequest parameter specified on a retrieve() call encapsulates options for determining which packages or files are retrieved.") message. For example, profiles only include field-level security for fields included in custom objects returned in the same RetrieveRequest as the profiles. The profile definition contains the following fields:

![Important](https://developer.salesforce.com/docs/atlas.en-us.api_meta.meta/api_meta/images/icon_note_important.png)

#### Important

We designed Profile metadata deployment to overlay the existing Profile settings in a target org. For example, if you disable permissions for a profile, the newly disabled permission information isn't exported. To force all Profile changes to deploy through metadata, including permission disablement, add code that explicitly indicates disabled permissions. For example, add this code to the Profile metadata .xml file before deploying into a target org: <value>false</value>.

If you deploy a profile that doesn’t exist in the target org and don't specify any permissions or settings, then the resulting profile contains all permissions and settings in the standard Minimum Access - Salesforce profile (API version 60.0 and later) or the standard Standard User profile (API version 59.0 and earlier).

![Note](https://developer.salesforce.com/docs/atlas.en-us.api_meta.meta/api_meta/images/icon_note.png)

#### Note

As of API version 38.0, you can change field permissions to make a field editable using the Metadata API for fields that you can't change through the user interface. For example, you can deploy Asset.ProductCode as an editable field even though you can't through the user interface.

<table class="featureTable sort_table" summary="">



          <thead class="thead sorted" align="left">
            <tr>
              <th class="featureTableHeader  " id="d762099e223">Field Name</th>

              <th class="featureTableHeader  " id="d762099e226">Field Type </th>

              <th class="featureTableHeader  " id="d762099e229">Description</th>

            </tr>

          </thead>

          <tbody class="tbody">
            <tr>
              <td class="entry" headers="d762099e223" data-title="Field Name"><span class="keyword parmname">agentAccesses</span></td>

              <td class="entry" headers="d762099e226" data-title="Field Type">
                <a class="xref" href="#profile_agentaccess">ProfileAgentAccess</a>[]
              </td>

              <td class="entry" headers="d762099e229" data-title="Description">Indicates which agents are visible to users assigned to this
                profile. Available in API version 63.0 and later.</td>

            </tr>

            <tr>
              <td class="entry" headers="d762099e223" data-title="Field Name"><span class="keyword parmname">applicationVisibilities</span></td>

              <td class="entry" headers="d762099e226" data-title="Field Type">
                <a class="xref" href="#profileapplicationvisibility_title">ProfileApplicationVisibility</a>[]
              </td>

              <td class="entry" headers="d762099e229" data-title="Description">Indicates which apps are visible to users assigned to this
                profile. In API version 29.0 and earlier, this field supports custom
                apps only. In API version 30.0 and later, this field supports both
                standard and custom apps.</td>

            </tr>

            <tr>
              <td class="entry" headers="d762099e223" data-title="Field Name"><span class="keyword parmname">categoryGroupVisibilities</span></td>

              <td class="entry" headers="d762099e226" data-title="Field Type">
                <a class="xref" href="#profileCategoryGroupVisibility_title">ProfileCategoryGroupVisibility</a>[]
              </td>

              <td class="entry" headers="d762099e229" data-title="Description">Indicates which data category groups are visible to users
                assigned to this profile. Available in API version 41.0 and
                later.</td>

            </tr>

            <tr>
              <td class="entry" headers="d762099e223" data-title="Field Name"><span class="keyword parmname">classAccesses</span></td>

              <td class="entry" headers="d762099e226" data-title="Field Type">
                <a class="xref" href="#profileApexClassAccess_title">ProfileApexClassAccess</a>[]
              </td>

              <td class="entry" headers="d762099e229" data-title="Description">Indicates which top-level Apex classes have methods that users
                assigned to this profile can execute.</td>

            </tr>

            <tr>
              <td class="entry" headers="d762099e223" data-title="Field Name"><span class="keyword parmname">custom</span></td>

              <td class="entry" headers="d762099e226" data-title="Field Type">boolean</td>

              <td class="entry" headers="d762099e229" data-title="Description">Indicates whether the profile is a custom (<samp class="codeph java">true</samp>) or standard (<samp class="codeph java">false</samp>) profile. Available in API
                version 30.0 and later.</td>

            </tr>

            <tr>
              <td class="entry" headers="d762099e223" data-title="Field Name"><span class="keyword parmname">customMetadataTypeAccesses</span></td>

              <td class="entry" headers="d762099e226" data-title="Field Type">
                <a class="xref" href="#ProfileCustomMetadataTypeAccess_title">ProfileCustomMetadataTypeAccess</a>[]
              </td>

              <td class="entry" headers="d762099e229" data-title="Description">Indicates the custom metadata types that are read-accessible to a
                user assigned to this profile. Available in API version 47.0 and
                later.</td>

            </tr>

            <tr>
              <td class="entry" headers="d762099e223" data-title="Field Name"><span class="keyword parmname">customPermissions</span></td>

              <td class="entry" headers="d762099e226" data-title="Field Type">
                <a class="xref" href="#ProfileCustomPermissions_title">ProfileCustomPermissions</a>[]
              </td>

              <td class="entry" headers="d762099e229" data-title="Description">Indicates which custom permissions are available to users
                assigned to this profile. Available in API version 31.0 and
                later.</td>

            </tr>

            <tr>
              <td class="entry" headers="d762099e223" data-title="Field Name"><span class="keyword parmname">customSettingAccesses</span></td>

              <td class="entry" headers="d762099e226" data-title="Field Type">
                <a class="xref" href="#ProfileCustomSettingAccesses_title">ProfileCustomSettingAccesses</a>[]
              </td>

              <td class="entry" headers="d762099e229" data-title="Description">Indicates the custom settings that are read-accessible to a user
                assigned to this profile. Available in API version 47.0 and
                later.</td>

            </tr>

            <tr>
              <td class="entry" headers="d762099e223" data-title="Field Name"><span class="keyword parmname">description</span></td>

              <td class="entry" headers="d762099e226" data-title="Field Type">string</td>

              <td class="entry" headers="d762099e229" data-title="Description">The profile description. Limit: 255 characters. Available in API
                version 30.0 and later.</td>

            </tr>

            <tr>
              <td class="entry" headers="d762099e223" data-title="Field Name"><span class="keyword parmname">externalDataSourceAccesses</span></td>

              <td class="entry" headers="d762099e226" data-title="Field Type">
                <a class="xref" href="#profileExternalDataSourceAccess_title">ProfileExternalDataSourceAccess</a>[]
              </td>

              <td class="entry" headers="d762099e229" data-title="Description">Indicates which data sources with identity type of <span class="keyword parmname">Per
                  User</span> are available to users assigned to this profile.
                <span class="ph" id="externalDataSourceBeta_Note"><a name="externalDataSourceBeta_Note"><!-- --></a>Available in API version
                  27.0 and later.</span>
              </td>

            </tr>

            <tr>
              <td class="entry" headers="d762099e223" data-title="Field Name"><span class="keyword parmname">fieldLevelSecurities</span></td>

              <td class="entry" headers="d762099e226" data-title="Field Type">
                <a class="xref" href="#profilefieldlevelsecurity_title">ProfileFieldLevelSecurity</a>[]
              </td>

              <td class="entry" headers="d762099e229" data-title="Description">Indicates which fields are visible to a user assigned to this
                profile, and the kind of access available (editable or hidden). This
                field is available in API version 22.0 and earlier.</td>

            </tr>

            <tr>
              <td class="entry" headers="d762099e223" data-title="Field Name"><span class="keyword parmname" id="fieldPermissions_field"><a name="fieldPermissions_field"><!-- --></a>fieldPermissions</span></td>

              <td class="entry" headers="d762099e226" data-title="Field Type">
                <a class="xref" href="#profilefieldlevelsecurity_title">ProfileFieldLevelSecurity</a>[]
              </td>

              <td class="entry" headers="d762099e229" data-title="Description">Indicates which fields are visible to a user assigned to this
                profile, and the kind of access available (editable or readable).
                This field is available in API version 23.0 and later.</td>

            </tr>

            <tr>
              <td class="entry" headers="d762099e223" data-title="Field Name"><span class="keyword parmname">flowAccesses</span></td>

              <td class="entry" headers="d762099e226" data-title="Field Type">
                <a class="xref" href="#ProfileFlowAccess_title">ProfileFlowAccess</a>[]
              </td>

              <td class="entry" headers="d762099e229" data-title="Description">Indicates which flows can be accessed by a user assigned to this
                profile. Available in API version 47.0 and later.</td>

            </tr>

            <tr>
              <td class="entry" headers="d762099e223" data-title="Field Name"><span class="keyword parmname">genComputingSummaryDefAccesses</span></td>

              <td class="entry" headers="d762099e226" data-title="Field Type">
                <a class="xref" href="#ProfileGenComputingSummaryDefAccess">ProfileGenComputingSummaryDefAccess</a>[]
              </td>

              <td class="entry" headers="d762099e229" data-title="Description">Indicates enhanced summary access configuration for users
                assigned to this profile. Available in API version 66.0 and
                later.</td>

            </tr>

            <tr>
              <td class="entry" headers="d762099e223" data-title="Field Name"><span class="keyword parmname">fullName</span></td>

              <td class="entry" headers="d762099e226" data-title="Field Type">string</td>

              <td class="entry" headers="d762099e229" data-title="Description">The name can only contain characters, letters, and the underscore
                (_) character. The name must start with a letter, and can’t end with
                an underscore or contain two consecutive underscore
                characters.<p class="p">Inherited from the <a class="xref" href="https://developer.salesforce.com/docs/atlas.en-us.api_meta.meta/api_meta/metadata.htm" title="The base class for all metadata types. You can’t edit this object. A component is an instance of a metadata type.">Metadata</a> component, this field isn’t defined in
                  the WSDL for this component. It must be specified when creating,
                  updating, or deleting. See <a class="xref" href="https://developer.salesforce.com/docs/atlas.en-us.api_meta.meta/api_meta/meta_create.htm" title="Deprecated. Adds one or more new metadata components to your organization asynchronously. This call is removed as of API version 31.0 and is available in earlier versions only. Use createMetadata() instead.">create()</a> to see an example of this field
                  specified for a call.</p>
              </td>

            </tr>

            <tr>
              <td class="entry" headers="d762099e223" data-title="Field Name"><span class="keyword parmname">layoutAssignments</span></td>

              <td class="entry" headers="d762099e226" data-title="Field Type">
                <a class="xref" href="#profilelayoutassignments">ProfileLayoutAssignments</a>[]
              </td>

              <td class="entry" headers="d762099e229" data-title="Description">Indicates which layout to use for this profile. </td>

            </tr>

            <tr>
              <td class="entry" headers="d762099e223" data-title="Field Name"><span class="keyword parmname">loginFlows</span></td>

              <td class="entry" headers="d762099e226" data-title="Field Type">
                <a class="xref" href="#loginflow_title">LoginFlow</a>[]
              </td>

              <td class="entry" headers="d762099e229" data-title="Description">Indicates a business process that you direct users to before they
                access Salesforce.</td>

            </tr>

            <tr>
              <td class="entry" headers="d762099e223" data-title="Field Name"><span class="keyword parmname">loginHours</span></td>

              <td class="entry" headers="d762099e226" data-title="Field Type">
                <a class="xref" href="#ProfileLoginHours_title">ProfileLoginHours</a>[]
              </td>

              <td class="entry" headers="d762099e229" data-title="Description">
                <span class="ph" id="field_loginHours_desc"><a name="field_loginHours_desc"><!-- --></a>Indicates the hours within which a
                  user with this profile can log in. If not specified, the profile
                  doesn’t restrict a user’s login hours.</span>
                <p class="p">This field is
                  available in API version 25.0 and later.</p>
              </td>

            </tr>

            <tr>
              <td class="entry" headers="d762099e223" data-title="Field Name"><span class="keyword parmname" id="field_loginIpRanges"><a name="field_loginIpRanges"><!-- --></a>loginIpRanges</span></td>

              <td class="entry" headers="d762099e226" data-title="Field Type">
                <a class="xref" href="#ProfileLoginIpRange_title">ProfileLoginIpRange</a>[]
              </td>

              <td class="entry" headers="d762099e229" data-title="Description">
                <span class="ph" id="field_field_loginIpRanges_desc"><a name="field_field_loginIpRanges_desc"><!-- --></a>The list of IP address
                  ranges from which users with a particular profile can log
                  in.</span>
                <p class="p">This field is available in API version 17.0 and
                  later.</p>
              </td>

            </tr>

            <tr>
              <td class="entry" headers="d762099e223" data-title="Field Name"><span class="keyword parmname">objectPermissions</span></td>

              <td class="entry" headers="d762099e226" data-title="Field Type">
                <a class="xref" href="#profileobjectpermissions_title">ProfileObjectPermissions</a>[]
              </td>

              <td class="entry" headers="d762099e229" data-title="Description">
                <span class="ph" id="field_objectPermissions_desc"><a name="field_objectPermissions_desc"><!-- --></a>Indicates which objects are
                  accessible to a user assigned to this profile, and the kind of
                  access available (create, read, edit, delete, and so on). In API
                  version 28.0 and later, this field is only retrieved when
                  <span class="keyword parmname">allowRead</span> is <samp class="codeph java">true</samp>.</span>
                <p class="p">In
                  API version 50.0 and later, editing standard objects on standard
                  profiles is disabled.</p>
              </td>

            </tr>

            <tr>
              <td class="entry" headers="d762099e223" data-title="Field Name"><span class="keyword parmname">pageAccesses</span></td>

              <td class="entry" headers="d762099e226" data-title="Field Type">
                <a class="xref" href="#profileApexPageAccess_title">ProfileApexPageAccess</a>[]
              </td>

              <td class="entry" headers="d762099e229" data-title="Description">Indicates which Visualforce pages that users assigned to this
                profile can execute.</td>

            </tr>

            <tr>
              <td class="entry" headers="d762099e223" data-title="Field Name"><span class="keyword parmname">profileActionOverrides</span></td>

              <td class="entry" headers="d762099e226" data-title="Field Type">
                <a class="xref" href="#ProfileActionOverride_title">ProfileActionOverride</a>[]
              </td>

              <td class="entry" headers="d762099e229" data-title="Description">
                <span class="ph" id="profileActionOverrides_desc"><a name="profileActionOverrides_desc"><!-- --></a>A list of the Lightning
                  Experience Home page action overrides that are assigned to this
                  profile. When a user logs in with a profile, a matching
                  ProfileActionOverride assignment takes precedence over existing
                  overrides for the Home tab specified in <a class="xref" href="https://developer.salesforce.com/docs/atlas.en-us.api_meta.meta/api_meta/actionoverride.htm#actionoverride" title="Represents an action override on a standard or custom object. Use it to create, update, edit, or delete action overrides. You can access ActionOverride only by accessing its encompassing CustomObject.">ActionOverride</a>.</span>
                <p class="p">This field is available in API versions 37.0 to
                  44.0.</p>
              </td>

            </tr>

            <tr>
              <td class="entry" headers="d762099e223" data-title="Field Name"><span class="keyword parmname">recordTypeVisibilities</span></td>

              <td class="entry" headers="d762099e226" data-title="Field Type">
                <a class="xref" href="#profilerecordtypevisibility_title">ProfileRecordTypeVisibility</a>[]
              </td>

              <td class="entry" headers="d762099e229" data-title="Description">Indicates the visibility of record types for users assigned to
                this profile. In API version 29.0 and later, this field isn’t
                retrieved or deployed for inactive record types.</td>

            </tr>

            <tr>
              <td class="entry" headers="d762099e223" data-title="Field Name"><span class="keyword parmname">ServicePresenceStatusAccesses</span></td>

              <td class="entry" headers="d762099e226" data-title="Field Type"><a class="xref" href="#section_w4v_tg4_1fc">ProfileServicePresenceStatusAccess[]</a></td>

              <td class="entry" headers="d762099e229" data-title="Description">Indicates which Service presence statuses that the user assigned
                to this profile can execute. Available in API version 64.0 and
                later.</td>

            </tr>

            <tr>
              <td class="entry" headers="d762099e223" data-title="Field Name"><span class="keyword parmname">tabVisibilities</span></td>

              <td class="entry" headers="d762099e226" data-title="Field Type">
                <a class="xref" href="#profiletabvisibility_title">ProfileTabVisibility</a>[]
              </td>

              <td class="entry" headers="d762099e229" data-title="Description">Indicates which record types are visible to a user assigned to
                this profile, and therefore which tabs within an app are
                visible.</td>

            </tr>

            <tr>
              <td class="entry" headers="d762099e223" data-title="Field Name"><span class="keyword parmname" id="field_userLicense"><a name="field_userLicense"><!-- --></a>userLicense</span></td>

              <td class="entry" headers="d762099e226" data-title="Field Type">string</td>

              <td class="entry" headers="d762099e229" data-title="Description">
                <span class="ph" id="field_userLicense_desc"><a name="field_userLicense_desc"><!-- --></a>The <span class="keyword parmname">User
                    License</span> for the profile. A user license
                  determines the baseline of features that the user can access.
                  Every user must have exactly one user license.</span>
                <p class="p">This field
                  is available in API version 17.0 and later.</p>
              </td>

            </tr>

            <tr>
              <td class="entry" headers="d762099e223" data-title="Field Name"><span class="keyword parmname">userPermissions</span></td>

              <td class="entry" headers="d762099e226" data-title="Field Type">
                <a class="xref" href="#profileUserPerm_title">ProfileUserPermission</a>[]
              </td>

              <td class="entry" headers="d762099e229" data-title="Description">Specifies a user permission (such as “API Enabled”)
                and whether it’s enabled for this profile. This field
                retrieves only enabled user permissions. Available in API version
                29.0 and later.</td>

            </tr>

          </tbody>

        </table>

## LoginFlow

LoginFlow represents a business process that you direct users to before they access Salesforce. You can use Metadata API to define existing flows as login flows and to edit login flow definitions. To delete login flow definitions, use the [Login Flow page](https://help.salesforce.com/articleView?id=security_login_flow_associate.htm&language=en_US "HTML (New Window)").

<table class="featureTable sort_table" summary="">



          <thead class="thead sorted" align="left">
            <tr>
              <th class="featureTableHeader  " id="d762099e757">Field Name</th>

              <th class="featureTableHeader  " id="d762099e760">Field Type</th>

              <th class="featureTableHeader  " id="d762099e763">Description</th>

            </tr>

          </thead>

          <tbody class="tbody">
            <tr>
              <td class="entry" headers="d762099e757" data-title="Field Name"><span class="keyword parmname">flow</span></td>

              <td class="entry" headers="d762099e760" data-title="Field Type">string</td>

              <td class="entry" headers="d762099e763" data-title="Description">Required only if the <span class="keyword parmname">uiLoginFlowType</span> is
                <samp class="codeph java">VisualWorkflow</samp>. The
                <span class="keyword parmname">fullName</span> of the <a class="xref" href="https://developer.salesforce.com/docs/atlas.en-us.264.0.api_meta.meta/api_meta/meta_visual_workflow.htm" target="_blank">Flow</a>. <p class="p">Before you can
                  deploy the LoginFlow, the Flow referenced here must be deployed
                  in your org and its status must be <samp class="codeph nolang">Active</samp>.</p>
              </td>

            </tr>

            <tr>
              <td class="entry" headers="d762099e757" data-title="Field Name"><span class="keyword parmname">flowtype</span></td>

              <td class="entry" headers="d762099e760" data-title="Field Type">LoginFlowType (<a class="xref" href="https://developer.salesforce.com/docs/atlas.en-us.api_meta.meta/api_meta/meta_objects_intro.htm#enumeration_title">enumeration</a> of type string)</td>

              <td class="entry" headers="d762099e763" data-title="Description">Required. The value is <samp class="codeph java">UI</samp>.</td>

            </tr>

            <tr>
              <td class="entry" headers="d762099e757" data-title="Field Name"><span class="keyword parmname">friendlyname</span></td>

              <td class="entry" headers="d762099e760" data-title="Field Type">string</td>

              <td class="entry" headers="d762099e763" data-title="Description">Required. The name of the LoginFlow.</td>

            </tr>

            <tr>
              <td class="entry" headers="d762099e757" data-title="Field Name"><span class="keyword parmname">uiLoginFlowType</span></td>

              <td class="entry" headers="d762099e760" data-title="Field Type">UiLoginFlowType (<a class="xref" href="https://developer.salesforce.com/docs/atlas.en-us.api_meta.meta/api_meta/meta_objects_intro.htm#enumeration_title">enumeration</a> of type string)</td>

              <td class="entry" headers="d762099e763" data-title="Description">Required. The type of login flow. These are valid values.<ul class="ul bulletList">
                  <li class="li">
                    <samp class="codeph java">VisualWorkflow</samp>—Indicates
                    a Salesforce <a class="xref" href="https://developer.salesforce.com/docs/atlas.en-us.264.0.api_meta.meta/api_meta/meta_visual_workflow.htm" target="_blank">Flow</a>. You can
                    create these flows using Flow Builder.
                  </li>

                  <li class="li">
                    <samp class="codeph java">VisualForce</samp>—Indicates a
                    flow created using Visualforce.
                  </li>

                </ul>
              </td>

            </tr>

            <tr>
              <td class="entry" headers="d762099e757" data-title="Field Name"><span class="keyword parmname">useLightningRuntime</span></td>

              <td class="entry" headers="d762099e760" data-title="Field Type">boolean</td>

              <td class="entry" headers="d762099e763" data-title="Description">Indicates if Lightning Runtime is used (<samp class="codeph java">true</samp>) or not (<samp class="codeph java">false</samp>
                (default)). Used only if <span class="keyword parmname">uiLoginFlowType</span> is
                <samp class="codeph java">VisualWorkflow</samp>.
              </td>

            </tr>

            <tr>
              <td class="entry" headers="d762099e757" data-title="Field Name"><span class="keyword parmname">vfFlowPage</span></td>

              <td class="entry" headers="d762099e760" data-title="Field Type">string</td>

              <td class="entry" headers="d762099e763" data-title="Description">Required only if the <span class="keyword parmname">uiLoginFlowType</span> is
                <samp class="codeph java">VisualForce</samp>. The name of the
                VisualForce page.
              </td>

            </tr>

            <tr>
              <td class="entry" headers="d762099e757" data-title="Field Name"><span class="keyword parmname">vfFlowPageTitle</span></td>

              <td class="entry" headers="d762099e760" data-title="Field Type">string</td>

              <td class="entry" headers="d762099e763" data-title="Description">Required only if the <span class="keyword parmname">uiLoginFlowType</span> is
                <samp class="codeph java">VisualForce</samp>. The name of the
                VisualForce page.
              </td>

            </tr>

          </tbody>

        </table>

## ProfileActionOverride

ProfileActionOverride represents a user profile-based override of an [ActionOverride](https://developer.salesforce.com/docs/atlas.en-us.api_meta.meta/api_meta/actionoverride.htm#actionoverride "Represents an action override on a standard or custom object. Use it to create, update, edit, or delete action overrides. You can access ActionOverride only by accessing its encompassing CustomObject.") on a standard Home tab in Lightning Experience.

![Note](https://developer.salesforce.com/docs/atlas.en-us.api_meta.meta/api_meta/images/icon_note.png)

#### Note

- ProfileActionOverride can be defined only on Profile for API version 39.0 to 44.0. In API version 45.0 and later, ProfileActionOverride must be defined for CustomApplication instead. Beginning with API version 45.0, Home page assignments related to user profile must also have a corresponding app assignment because more granular Home page assignments are supported. As a result, ProfileActionOverride is defined for CustomApplication rather than Profile.
- ProfileActionOverride settings aren’t retrieved in the .profile file unless a Lightning page is referenced in the package.xml file.

<table class="featureTable sort_table" summary="">



          <thead class="thead sorted" align="left">
            <tr>
              <th class="featureTableHeader  " id="d762099e986">Field Name</th>

              <th class="featureTableHeader  " id="d762099e989">Field Type</th>

              <th class="featureTableHeader  " id="d762099e992">Description</th>

            </tr>

          </thead>

          <tbody class="tbody">
            <tr>
              <td class="entry" headers="d762099e986" data-title="Field Name"><span class="keyword parmname">actionName</span></td>

              <td class="entry" headers="d762099e989" data-title="Field Type">string</td>

              <td class="entry" headers="d762099e992" data-title="Description">Required. The possible values are the same as the actions you can override:<ul class="ul bulletList">
                  <li class="li"><samp class="codeph nolang">accept</samp></li>

                  <li class="li"><samp class="codeph nolang">clone</samp></li>

                  <li class="li"><samp class="codeph nolang">delete</samp></li>

                  <li class="li"><samp class="codeph nolang">edit</samp></li>

                  <li class="li"><samp class="codeph nolang">list</samp></li>

                  <li class="li"><samp class="codeph nolang">new</samp></li>

                  <li class="li"><samp class="codeph nolang">tab</samp></li>

                  <li class="li"><samp class="codeph nolang">view</samp></li>

                </ul>
              </td>

            </tr>

            <tr>
              <td class="entry" headers="d762099e986" data-title="Field Name"><span class="keyword parmname">content</span></td>

              <td class="entry" headers="d762099e989" data-title="Field Type">string</td>

              <td class="entry" headers="d762099e992" data-title="Description">Set this field if <span class="keyword parmname">type</span> is set to <samp class="codeph nolang">flexipage</samp>, <samp class="codeph nolang">lightningcomponent</samp>, <samp class="codeph nolang">scontrol</samp>, or <samp class="codeph nolang">visualforce</samp>. It refers to the name
                of the Lightning page, Lightning component, s-control, or
                Visualforce page to use as the override. To reference installed
                components, use this format: <samp class="codeph nolang"><var class="keyword varname">Component_namespace</var>__<var class="keyword varname">Component_name</var></samp>.</td>

            </tr>

            <tr>
              <td class="entry" headers="d762099e986" data-title="Field Name"><span class="keyword parmname">formFactor</span></td>

              <td class="entry" headers="d762099e989" data-title="Field Type">FormFactor (<a class="xref" href="https://developer.salesforce.com/docs/atlas.en-us.api_meta.meta/api_meta/meta_objects_intro.htm#enumeration_title">enumeration</a> of type string)</td>

              <td class="entry" headers="d762099e992" data-title="Description">The size of the page being overridden.<p class="p">The <samp class="codeph nolang">Large</samp> value represents the
                  Lightning Experience desktop environment and is valid only for
                  the <samp class="codeph nolang">flexipage</samp> and <samp class="codeph nolang">lightningcomponent</samp> types. The
                  <samp class="codeph nolang">Small</samp> value represents
                  the Salesforce mobile app on a phone or tablet. The <samp class="codeph nolang">Medium</samp> value is reserved for
                  future use. The <samp class="codeph nolang">null</samp> value
                  (which is the same as specifying no value) represents Salesforce
                  Classic.
                </p>
              </td>

            </tr>

            <tr>
              <td class="entry" headers="d762099e986" data-title="Field Name"><span class="keyword parmname">pageOrSobjectType</span></td>

              <td class="entry" headers="d762099e989" data-title="Field Type">string</td>

              <td class="entry" headers="d762099e992" data-title="Description">The name of the sObject type being overridden. Valid values are
                <samp class="codeph nolang">standard</samp> and <samp class="codeph nolang">custom</samp>.<p class="p">This
                  value must be <samp class="codeph nolang">standard-home</samp>
                  when actionName is <samp class="codeph nolang">tab</samp>.</p>
              </td>

            </tr>

            <tr>
              <td class="entry" headers="d762099e986" data-title="Field Name"><span class="keyword parmname">recordType</span></td>

              <td class="entry" headers="d762099e989" data-title="Field Type">string</td>

              <td class="entry" headers="d762099e992" data-title="Description">The record type assigned to the ProfileActionOverride. If the
                <span class="keyword parmname">PageOrSobjectType</span> is <samp class="codeph nolang">standard-home</samp>, this field is
                null.
              </td>

            </tr>

            <tr>
              <td class="entry" headers="d762099e986" data-title="Field Name"><span class="keyword parmname">type</span></td>

              <td class="entry" headers="d762099e989" data-title="Field Type">ActionOverrideType (<a class="xref" href="https://developer.salesforce.com/docs/atlas.en-us.api_meta.meta/api_meta/meta_objects_intro.htm#enumeration_title">enumeration</a> of type string)</td>

              <td class="entry" headers="d762099e992" data-title="Description">Required. Represents the type of action override. Valid values
                are described in <a class="xref" href="https://developer.salesforce.com/docs/atlas.en-us.api_meta.meta/api_meta/actionoverride.htm#actionOverrideType_section">ActionOverrideType</a>.</td>

            </tr>

          </tbody>

        </table>

## ProfileAgentAccess

ProfileAgentAccess represents the agent access configuration for users assigned through a profile.

| Field Name | Field Type | Description |
| --- | --- | --- |
| agentName | string | Required. The name of the employee agent. |
| enabled | boolean | Required. Indicates whether users assigned to this profile can use the Agentforce Employee Agent (true) or not (false). |

## ProfileApplicationVisibility

ProfileApplicationVisibility determines whether an app is visible to a user assigned to this profile.

| Field Name | Field Type | Description |
| --- | --- | --- |
| application | string | Required. The name of the app. |
| default | boolean | Required. Indicates whether the app is the default app (true) or not (false). Only one app per profile can be set to true. |
| visible | boolean | Required. Indicates whether this app is visible to users assigned to this profile (true) or not (false). |

## ProfileCategoryGroupVisibility

ProfileCategoryGroupVisibility determines whether a data category group is visible to a user assigned to this profile. Available in API version 41.0 and later.

<table class="featureTable sort_table" summary="">



          <thead class="thead sorted" align="left">
            <tr>
              <th class="featureTableHeader  " id="d762099e1379">Field Name</th>

              <th class="featureTableHeader  " id="d762099e1382">Field Type</th>

              <th class="featureTableHeader  " id="d762099e1385">Description</th>

            </tr>

          </thead>

          <tbody class="tbody">
            <tr>
              <td class="entry" headers="d762099e1379" data-title="Field Name"><span class="keyword parmname">dataCategories</span></td>

              <td class="entry" headers="d762099e1382" data-title="Field Type">string[]</td>

              <td class="entry" headers="d762099e1385" data-title="Description">Array of one or more data category names.</td>

            </tr>

            <tr>
              <td class="entry" headers="d762099e1379" data-title="Field Name"><span class="keyword parmname">dataCategoryGroup</span></td>

              <td class="entry" headers="d762099e1382" data-title="Field Type">string</td>

              <td class="entry" headers="d762099e1385" data-title="Description">Required. The name of the data category group.</td>

            </tr>

            <tr>
              <td class="entry" headers="d762099e1379" data-title="Field Name"><span class="keyword parmname">visibility</span></td>

              <td class="entry" headers="d762099e1382" data-title="Field Type">CategoryGroupVisibility (<a class="xref" href="https://developer.salesforce.com/docs/atlas.en-us.api_meta.meta/api_meta/meta_objects_intro.htm#enumeration_title">enumeration</a> of type string)</td>

              <td class="entry" headers="d762099e1385" data-title="Description">Required. Indicates the visibility of the data category. Valid
                values are:<ul class="ul bulletList">
                  <li class="li"><samp class="codeph nolang">ALL</samp></li>

                  <li class="li"><samp class="codeph nolang">CUSTOM</samp></li>

                  <li class="li"><samp class="codeph nolang">NONE</samp></li>

                </ul>
              </td>

            </tr>

          </tbody>

        </table>

## ProfileCustomMetadataTypeAccess

[ProfileCustomMetadataTypeAccess](#ProfileCustomMetadataTypeAccess_title) represents the custom metadata type access for users assigned to a profile. Available in API version 47.0 and later.

| Field | Field Type | Description |
| --- | --- | --- |
| enabled | boolean | Required. Indicates whether the records for this custom metadata type are readable (true) or not (false). |
| name | string | Required. The custom metadata type name. |

## ProfileApexClassAccess

ProfileApexClassAccess determines which top-level Apex classes have methods that users assigned to this profile can execute.

| Field Name | Field Type | Description |
| --- | --- | --- |
| apexClass | string | Required. The Apex class name. |
| enabled | boolean | Required. Indicates whether users assigned to this profile can execute methods in the top-level class (true) or not (false). |

## ProfileCustomPermissions

ProfileCustomPermissions represents the custom permissions access for users assigned to a profile. Only enabled custom permissions are retrieved.

| Field Name | Field Type | Description |
| --- | --- | --- |
| enabled | boolean | Required. Indicates whether the custom permission is enabled (true) or not (false). |
| name | string | Required. The custom permission name. |

## ProfileCustomSettingAccesses

ProfileCustomSettingAccesses represents the custom setting access for users assigned to a profile. Available in API version 47.0 and later.

| Field | Field Type | Description |
| --- | --- | --- |
| enabled | boolean | Required. Indicates whether the records for this custom setting are readable (true) or not (false). |
| name | string | Required. The custom setting name. |

## ProfileExternalDataSourceAccess

ProfileExternalDataSourceAccess represents the data source access for users with identity type of Available in API version 27.0 and later.Per User.

| Field Name | Field Type | Description |
| --- | --- | --- |
| enabled | boolean | Required. Indicates whether the data source is enabled (true) or not (false). |
| externalDataSource | string | The name of the external data source. |

## ProfileFieldLevelSecurity

ProfileFieldLevelSecurity represents the field level security for users assigned to a profile. In API version 30.0 and later, permissions for required fields can’t be retrieved or deployed.

<table class="featureTable sort_table" summary="">



          <thead class="thead sorted" align="left">
            <tr>
              <th class="featureTableHeader  " id="d762099e1837">Field Name</th>

              <th class="featureTableHeader  " id="d762099e1840">Field Type</th>

              <th class="featureTableHeader  " id="d762099e1843">Description</th>

            </tr>

          </thead>

          <tbody class="tbody">
            <tr>
              <td class="entry" headers="d762099e1837" data-title="Field Name"><span class="keyword parmname">editable</span></td>

              <td class="entry" headers="d762099e1840" data-title="Field Type">boolean</td>

              <td class="entry" headers="d762099e1843" data-title="Description">Required. Indicates whether this field is editable (<samp class="codeph java">true</samp>) or not (<samp class="codeph java">false</samp>). <p class="p">In API version 30.0 and
                  later, when deploying a new custom field, this field is <samp class="codeph java">false</samp> by default.</p>
              </td>

            </tr>

            <tr>
              <td class="entry" headers="d762099e1837" data-title="Field Name"><span class="keyword parmname">field</span></td>

              <td class="entry" headers="d762099e1840" data-title="Field Type">string</td>

              <td class="entry" headers="d762099e1843" data-title="Description">Required. Indicates the name of the field.<p class="p">When referencing
                  shared Activity fields, specify Event or Task. For example,
                  <samp class="codeph nolang">Event.Meeting__c</samp>.
                </p>
              </td>

            </tr>

            <tr>
              <td class="entry" headers="d762099e1837" data-title="Field Name"><span class="keyword parmname" id="profileFLSHidden_field"><a name="profileFLSHidden_field"><!-- --></a>hidden</span></td>

              <td class="entry" headers="d762099e1840" data-title="Field Type">boolean</td>

              <td class="entry" headers="d762099e1843" data-title="Description">Indicates whether this field is hidden (<samp class="codeph java">true</samp>) or not (<samp class="codeph java">false</samp>). This field is available in API version 22.0 and
                earlier. <p class="p">For portal profiles, this field is set to <samp class="codeph java">true</samp> by default in API version
                  19.0 and later.</p>
              </td>

            </tr>

            <tr>
              <td class="entry" headers="d762099e1837" data-title="Field Name"><span class="keyword parmname" id="profileFLSReadable_field"><a name="profileFLSReadable_field"><!-- --></a>readable</span></td>

              <td class="entry" headers="d762099e1840" data-title="Field Type">boolean</td>

              <td class="entry" headers="d762099e1843" data-title="Description">Indicates whether this field is readable (<samp class="codeph java">true</samp>) or not (<samp class="codeph java">false</samp>). This field is available in
                API version 23.0 and later. It replaces the
                <span class="keyword parmname">hidden</span> field.<p class="p">In API version 30.0 and
                  later, when deploying a new custom field, this field is <samp class="codeph java">false</samp> by default.</p>
                <p class="p">For
                  portal profiles, this field is set to <samp class="codeph java">false</samp> by default.</p>
              </td>

            </tr>

          </tbody>

        </table>

## ProfileFlowAccess

[ProfileFlowAccess](#ProfileFlowAccess_title) represents which flows a profile grants access to. Available in API version 47.0 and later.

| Field | Field Type | Description |
| --- | --- | --- |
| enabled | boolean | Required. Indicates whether users assigned this profile can access the flow (true) or not (false). The default value is false. |
| flow | string | Required. The name of the flow to which access is granted. |

## ProfileGenComputingSummaryDefAccess

ProfileGenComputingSummaryDefAccess represents the enhanced summary access configuration for users assigned through a profile. Available in API version 66.0 and later.

| Field | Field Type | Description |
| --- | --- | --- |
| configName | string | Required. The enhanced summary access configuration name given by the admin. |
| enabled | boolean | Required. Indicates whether the configuration is enabled (true) or not (false). |

## ProfileLayoutAssignments

ProfileLayoutAssignments determines which layout to use for a profile and a given entity.

| Field Name | Field Type | Description |
| --- | --- | --- |
| layout | string | Required. Indicates the layout for this particular entity. |
| recordType | string | This field is optional. If the recordType of the record matches a layout assignment rule, it uses the specified layout. |

## ProfileLoginHours

ProfileLoginHours restricts the days and times within which users with a particular profile can log in.

<table class="featureTable sort_table" summary="">



          <thead class="thead sorted" align="left">
            <tr>
              <th class="featureTableHeader  " id="d762099e2198">Field Name</th>

              <th class="featureTableHeader  " id="d762099e2201">Field Type</th>

              <th class="featureTableHeader  " id="d762099e2204">Description</th>

            </tr>

          </thead>

          <tbody class="tbody">
            <tr>
              <td class="entry" headers="d762099e2198" data-title="Field Name"><span class="keyword parmname"><var class="keyword varname">weekday</var>Start</span></td>

              <td class="entry" headers="d762099e2201" data-title="Field Type">string</td>

              <td class="entry" headers="d762099e2204" data-title="Description">Specifies the earliest time on that day that a user with this
                profile can log in. If a start time for a particular day is
                specified, an end time for that day also must be specified. Start
                can’t be greater than end for a particular day.<ul class="ul bulletList">
                  <li class="li">Valid values for <span class="keyword parmname">weekday</span>:
                    <span class="keyword parmname">monday</span>,
                    <span class="keyword parmname">tuesday</span>,
                    <span class="keyword parmname">wednesday</span>,
                    <span class="keyword parmname">thursday</span>,
                    <span class="keyword parmname">friday</span>,
                    <span class="keyword parmname">saturday</span>, or
                    <span class="keyword parmname">sunday</span>. For example,
                    <span class="keyword parmname">mondayStart</span> indicates the beginning
                    of the login period for Monday.
                  </li>

                  <li class="li">Valid values for Start: the number of minutes since
                    midnight. Must be evenly divisible by 60 (full hours). For
                    example, <samp class="codeph nolang">300</samp> is 5:00
                    AM.</li>

                </ul>
              </td>

            </tr>

            <tr>
              <td class="entry" headers="d762099e2198" data-title="Field Name"><span class="keyword parmname"><var class="keyword varname">weekday</var>End</span></td>

              <td class="entry" headers="d762099e2201" data-title="Field Type">string</td>

              <td class="entry" headers="d762099e2204" data-title="Description">Specifies the time on that day that a user with this profile must
                log out by. <ul class="ul bulletList">
                  <li class="li">Valid values for <span class="keyword parmname">weekday</span>:
                    <span class="keyword parmname">monday</span>,
                    <span class="keyword parmname">tuesday</span>,
                    <span class="keyword parmname">wednesday</span>,
                    <span class="keyword parmname">thursday</span>,
                    <span class="keyword parmname">friday</span>,
                    <span class="keyword parmname">saturday</span>, or
                    <span class="keyword parmname">sunday</span>. For example,
                    <span class="keyword parmname">mondayEnd</span> indicates the close of
                    the login period for Monday.
                  </li>

                  <li class="li">Valid values for End: the number of minutes since midnight.
                    Must be evenly divisible by 60 (full hours). For example,
                    <samp class="codeph nolang">1020</samp> is 5:00
                    PM.
                  </li>

                </ul>
              </td>

            </tr>

          </tbody>

        </table>

To delete login hour restrictions from a profile that previously had them, you must explicitly include an empty loginHours tag without any start or end times.

## ProfileLoginIpRange

ProfileLoginIpRange IP defines an IP address range that users with a particular profile can log in from.

| Field Name | Field Type | Description |
| --- | --- | --- |
| description | string | Use this field to identify the purpose of the range, such as which part of a network corresponds to this range. This field is available in API version 31.0 and later. |
| endAddress | string | Required. The end IP address for the range. |
| startAddress | string | Required. The start IP address for the range. |

## ProfileObjectPermissions

ProfileObjectPermissions represents a user's access to objects.

![Note](https://developer.salesforce.com/docs/atlas.en-us.api_meta.meta/api_meta/images/icon_note.png)

#### Note

- In API version 18.0 and later, these permissions are disabled in new custom objects for any profiles where “View All Data” or “Modify All Data” is disabled.
- In API version 50.0 and later, editing standard objects on standard profiles is disabled.

<table class="featureTable sort_table" summary="">



          <thead class="thead sorted" align="left">
            <tr>
              <th class="featureTableHeader  " id="d762099e2438">Field Name</th>

              <th class="featureTableHeader  " id="d762099e2441">Field Type</th>

              <th class="featureTableHeader  " id="d762099e2444">Description</th>

            </tr>

          </thead>

          <tbody class="tbody">
            <tr>
              <td class="entry" headers="d762099e2438" data-title="Field Name"><span class="keyword parmname">allowCreate</span></td>

              <td class="entry" headers="d762099e2441" data-title="Field Type">boolean</td>

              <td class="entry" headers="d762099e2444" data-title="Description">Indicates whether the object referenced by the
                <span class="keyword parmname">object</span> field can be created by the users
                assigned to this profile (<samp class="codeph java">true</samp>)
                or not (<samp class="codeph java">false</samp>).<p class="p" id="field_allowCreate_old_name"><a name="field_allowCreate_old_name"><!-- --></a>This field is named
                  <span class="keyword parmname">revokeCreate</span> before version 14.0 and
                  the logic is reversed. <span class="ph" id="boolean_logic_flip"><a name="boolean_logic_flip"><!-- --></a>The field
                    name change and the update from <samp class="codeph java">true</samp> to <samp class="codeph java">false</samp> and the reverse is automatically handled
                    between versions and doesn’t require any manual editing of
                    existing XML component files.</span>
                </p>
              </td>

            </tr>

            <tr>
              <td class="entry" headers="d762099e2438" data-title="Field Name"><span class="keyword parmname">allowDelete</span></td>

              <td class="entry" headers="d762099e2441" data-title="Field Type">boolean</td>

              <td class="entry" headers="d762099e2444" data-title="Description">Indicates whether the object referenced by the
                <span class="keyword parmname">object</span> field can be deleted by the users
                assigned to this profile (<samp class="codeph java">true</samp>)
                or not (<samp class="codeph java">false</samp>).<p class="p" id="field_allowDelete_old_name"><a name="field_allowDelete_old_name"><!-- --></a>This field is named
                  The field
                  name change and the update from <span class="keyword parmname">revokeDelete</span> before version 14.0 and
                  the logic is reversed. <samp class="codeph java">true</samp> to <samp class="codeph java">false</samp> and the reverse is automatically handled
                  between versions and doesn’t require any manual editing of
                  existing XML component files.</p>
              </td>

            </tr>

            <tr>
              <td class="entry" headers="d762099e2438" data-title="Field Name"><span class="keyword parmname">allowEdit</span></td>

              <td class="entry" headers="d762099e2441" data-title="Field Type">boolean</td>

              <td class="entry" headers="d762099e2444" data-title="Description">Indicates whether the object referenced by the
                <span class="keyword parmname">object</span> field can be edited by the users
                assigned to this profile (<samp class="codeph java">true</samp>)
                or not (<samp class="codeph java">false</samp>).<p class="p" id="field_allowEdit_old_name"><a name="field_allowEdit_old_name"><!-- --></a>This field is named
                  The field
                  name change and the update from <span class="keyword parmname">revokeEdit</span> before version 14.0 and the
                  logic is reversed. <samp class="codeph java">true</samp> to <samp class="codeph java">false</samp> and the reverse is automatically handled
                  between versions and doesn’t require any manual editing of
                  existing XML component files.</p>
              </td>

            </tr>

            <tr>
              <td class="entry" headers="d762099e2438" data-title="Field Name"><span class="keyword parmname">allowRead</span></td>

              <td class="entry" headers="d762099e2441" data-title="Field Type">boolean</td>

              <td class="entry" headers="d762099e2444" data-title="Description">Indicates whether the object referenced by the
                <span class="keyword parmname">object</span> field can be seen by the users
                assigned to this profile (<samp class="codeph java">true</samp>)
                or not (<samp class="codeph java">false</samp>).<p class="p" id="field_allowRead_old_name"><a name="field_allowRead_old_name"><!-- --></a>This field is named
                  The field
                  name change and the update from <span class="keyword parmname">revokeRead</span> before version 14.0 and the
                  logic is reversed. <samp class="codeph java">true</samp> to <samp class="codeph java">false</samp> and the reverse is automatically handled
                  between versions and doesn’t require any manual editing of
                  existing XML component files.</p>
              </td>

            </tr>

            <tr>
              <td class="entry" headers="d762099e2438" data-title="Field Name"><span class="keyword parmname">modifyAllRecords</span></td>

              <td class="entry" headers="d762099e2441" data-title="Field Type">boolean</td>

              <td class="entry" headers="d762099e2444" data-title="Description">Indicates whether all records for the object referenced by the
                <span class="keyword parmname">object</span> field can be read, edited, or
                deleted by the users assigned to this profile (<samp class="codeph java">true</samp>) or not (<samp class="codeph java">false</samp>), regardless of the sharing
                settings for the object. This setting is equivalent to the Modify
                All Data user permission limited to the individual object level.
                Available in API version 15.0 and later. <p class="p">This field isn’t
                  available for all objects. Refer to the profile in the user
                  interface to determine which objects currently support these
                  permissions. Profiles with Modify All Data ignore
                  <span class="keyword parmname">modifyAllRecords</span> entries in Metadata
                  API and don't return an error if Modify All Data is enabled on
                  the profile.
                </p>
              </td>

            </tr>

            <tr>
              <td class="entry" headers="d762099e2438" data-title="Field Name"><span class="keyword parmname" id="profileOobjectPermissions_object"><a name="profileOobjectPermissions_object"><!-- --></a>object</span></td>

              <td class="entry" headers="d762099e2441" data-title="Field Type">string</td>

              <td class="entry" headers="d762099e2444" data-title="Description">Required. The name of the object whose permissions are altered by
                this profile, for example, <samp class="codeph nolang">MyCustomObject__c</samp>.</td>

            </tr>

            <tr>
              <td class="entry" headers="d762099e2438" data-title="Field Name"><span class="keyword parmname">viewAllFields</span></td>

              <td class="entry" headers="d762099e2441" data-title="Field Type">boolean</td>

              <td class="entry" headers="d762099e2444" data-title="Description">Indicates whether all fields and field data for the object
                referenced by the <span class="keyword parmname">object</span> field can be read by
                the users assigned to this profile (<samp class="codeph java">true</samp>) or not (<samp class="codeph java">false</samp>). Available in API version 63.0 and later.</td>

            </tr>

            <tr>
              <td class="entry" headers="d762099e2438" data-title="Field Name"><span class="keyword parmname">viewAllRecords</span></td>

              <td class="entry" headers="d762099e2441" data-title="Field Type">boolean</td>

              <td class="entry" headers="d762099e2444" data-title="Description">Indicates whether all records for the object referenced by the
                <span class="keyword parmname">object</span> field can be read by the users
                assigned to this profile (<samp class="codeph java">true</samp>)
                or not (<samp class="codeph java">false</samp>), regardless of the
                sharing settings for the object. This setting includes private
                records (records with no parent object). This setting is equivalent
                to the View All Data user permission limited to the individual
                object level. Available in API version 15.0 and later. <p class="p">This field
                  isn’t available for all objects. Refer to the profile in the
                  user interface to determine which objects currently support
                  these permissions. Profiles with "View All Data" ignore
                  <span class="keyword parmname">viewAllRecords</span> entries in the Metadata
                  API and don't return an error if View All Data is enabled on the
                  profile.
                </p>
              </td>

            </tr>

          </tbody>

        </table>

## ProfileApexPageAccess

ProfileApexPageAccess determines which Visualforce pages that users assigned to this profile can execute.

| Field Name | Field Type | Description |
| --- | --- | --- |
| apexPage | string | Required. The Visualforce page name. |
| enabled | boolean | Required. Indicates whether users assigned to this profile can execute the Visualforce page (true) or not (false). |

## ProfileRecordTypeVisibility

ProfileRecordTypeVisibility represents the visibility of record types for this profile. Record types let you offer different business processes, picklist values, and page layouts to different users.

<table class="featureTable sort_table" summary="">



          <thead class="thead sorted" align="left">
            <tr>
              <th class="featureTableHeader  " id="d762099e2777">Field Name</th>

              <th class="featureTableHeader  " id="d762099e2780">Field Type</th>

              <th class="featureTableHeader  " id="d762099e2783">Description</th>

            </tr>

          </thead>

          <tbody class="tbody">
            <tr>
              <td class="entry" headers="d762099e2777" data-title="Field Name"><span class="keyword parmname">default</span></td>

              <td class="entry" headers="d762099e2780" data-title="Field Type">boolean</td>

              <td class="entry" headers="d762099e2783" data-title="Description">Required. Indicates whether the record type is the default when
                users with this profile create records for this object (<samp class="codeph java">true</samp>) or not (<samp class="codeph java">false</samp>).</td>

            </tr>

            <tr>
              <td class="entry" headers="d762099e2777" data-title="Field Name"><span class="keyword parmname">personAccountDefault</span></td>

              <td class="entry" headers="d762099e2780" data-title="Field Type">boolean</td>

              <td class="entry" headers="d762099e2783" data-title="Description">
                <span class="ph" id="field_personAccountDefault_desc"><a name="field_personAccountDefault_desc"><!-- --></a>When Person Accounts is
                  enabled, this field indicates whether the record type is this
                  profile’s default person account record type (<samp class="codeph nolang">true</samp>) or not (<samp class="codeph nolang">false</samp>). When Person Accounts is
                  disabled, this field’s value has no impact.</span>
                <p class="p">Person
                  accounts aren’t enabled by default in Salesforce. To request
                  person accounts, contact Salesforce.</p>
              </td>

            </tr>

            <tr>
              <td class="entry" headers="d762099e2777" data-title="Field Name"><span class="keyword parmname">recordType</span></td>

              <td class="entry" headers="d762099e2780" data-title="Field Type">string</td>

              <td class="entry" headers="d762099e2783" data-title="Description">Required. The record type name, for example <samp class="codeph nolang">Account.MyRecordType</samp>.</td>

            </tr>

            <tr>
              <td class="entry" headers="d762099e2777" data-title="Field Name"><span class="keyword parmname">visible</span></td>

              <td class="entry" headers="d762099e2780" data-title="Field Type">boolean</td>

              <td class="entry" headers="d762099e2783" data-title="Description">Required. Indicates whether this record type is visible to users
                assigned to this profile (<samp class="codeph java">true</samp>)
                or not (<samp class="codeph java">false</samp>).</td>

            </tr>

          </tbody>

        </table>

## ProfileTabVisibility

ProfileTabVisibility represents the visibility of tabs for this profile. For version 17.0 and later, ProfileTabVisibility supports visibility of tabs for standard objects. The manifest file must include the standard object corresponding to a standard tab to retrieve the tab visibility in a profile.

<table class="featureTable sort_table" summary="">



          <thead class="thead sorted" align="left">
            <tr>
              <th class="featureTableHeader  " id="d762099e2892">Field Name</th>

              <th class="featureTableHeader  " id="d762099e2895">Field Type</th>

              <th class="featureTableHeader  " id="d762099e2898">Description</th>

            </tr>

          </thead>

          <tbody class="tbody">
            <tr>
              <td class="entry" headers="d762099e2892" data-title="Field Name"><span class="keyword parmname">tab</span></td>

              <td class="entry" headers="d762099e2895" data-title="Field Type">string</td>

              <td class="entry" headers="d762099e2898" data-title="Description">Required. The name of the tab.</td>

            </tr>

            <tr>
              <td class="entry" headers="d762099e2892" data-title="Field Name"><span class="keyword parmname">visibility</span></td>

              <td class="entry" headers="d762099e2895" data-title="Field Type">TabVisibility (<a class="xref" href="https://developer.salesforce.com/docs/atlas.en-us.api_meta.meta/api_meta/meta_objects_intro.htm#enumeration_title">enumeration</a> of type string)</td>

              <td class="entry" headers="d762099e2898" data-title="Description">Required. Indicates the visibility of the tab. Valid values are:<ul class="ul bulletList">
                  <li class="li">
                    <samp class="codeph nolang">DefaultOff</samp>—The
                    tab is available on the All Tabs page. Users can
                    individually customize their display to make the tab visible
                    in any app.
                  </li>

                  <li class="li">
                    <samp class="codeph nolang">DefaultOn</samp>—The
                    tab is available on the All Tabs page and appears in the
                    visible tabs for its associated app. Users can individually
                    customize their display to hide the tab or make it visible
                    in other apps.
                  </li>

                  <li class="li">
                    <samp class="codeph nolang">Hidden</samp>—The tab
                    isn’t available on the All Tabs page or visible in any
                    apps.
                  </li>

                </ul>

                <p class="p">In API version 36.0 and earlier, <samp class="codeph nolang">Hidden</samp> is returned only if <span class="keyword parmname">visibility</span>
                  was set using the API. If it was set to <samp class="codeph nolang">Hidden</samp> from the profile in Salesforce, the API doesn’t return
                  a visibility value. For version 37.0 and later, when tab visibility is set to
                  hidden, the API returns <samp class="codeph nolang">Hidden</samp>,
                  regardless of how the value was set.</p>
              </td>

            </tr>

          </tbody>

        </table>

## ProfileUserPermission

ProfileUserPermission represents an app or system permission for a profile. Use one of these elements for each permission.

| Field | Field Type | Description |
| --- | --- | --- |
| enabled | boolean | Required. Indicates whether the permission is enabled (true) or disabled (false). |
| name | string | Required. The permission name. |

## ProfileServicePresenceStatusAccess

Represents the presence statuses that reps assigned to this profile have access. Available in API version 64.0 and later.

| Field | Field Type | Description |
| --- | --- | --- |
| servicePresenceStatus | string | Required. The name of Service Presence Status. |
| enabled | boolean | Required. Indicates whether the rep assigned to this profile has access to the presence status (true) or not (false). |

## Java Sample

This sample uses picklists, profiles, record types, and a custom app:

public void profileSample() {
  try {
    // Create an expense report record, tab and app...
    CustomObject expenseRecord = new CustomObject();
    expenseRecord.setFullName("ExpenseReport\_\_c");
    expenseRecord.setLabel("Expense Report");
    expenseRecord.setPluralLabel("Expense Reports");
    
    expenseRecord.setDeploymentStatus(DeploymentStatus.Deployed);
    expenseRecord.setSharingModel(SharingModel.ReadWrite);
    
    CustomField nameField = new CustomField();
    nameField.setType(FieldType.AutoNumber);
    nameField.setLabel("Expense Report Number");
    nameField.setDisplayFormat("ER-{0000}");
    expenseRecord.setNameField(nameField);
    
    AsyncResult\[\] arsExpenseRecord =
        metadataConnection.create(new Metadata\[\] {expenseRecord});
    
    Picklist expenseStatus = new Picklist();
    PicklistValue unsubmitted = new PicklistValue();
    unsubmitted.setFullName("Unsubmitted");
    PicklistValue submitted = new PicklistValue();
    submitted.setFullName("Submitted");
    PicklistValue approved = new PicklistValue();
    approved.setFullName("Approved");
    PicklistValue rejected = new PicklistValue();
    rejected.setFullName("Rejected");
    expenseStatus.setPicklistValues(new PicklistValue\[\] {
        unsubmitted, submitted, approved, rejected}
    );
    
    CustomField expenseStatusField = new CustomField();
    expenseStatusField.setFullName(
        "ExpenseReport\_\_c.ExpenseStatus\_\_c"
    );
    expenseStatusField.setLabel("Expense Report Status");
    expenseStatusField.setType(FieldType.Picklist);
    expenseStatusField.setPicklist(expenseStatus);
    AsyncResult\[\] arsStatusField =
        metadataConnection.create(new Metadata\[\] 
            {expenseStatusField});
    
    CustomTab expenseTab = new CustomTab();
    expenseTab.setFullName("ExpenseReport\_\_c");
    expenseTab.setMotif("Custom70: Handsaw");
    expenseTab.setCustomObject(true);
    AsyncResult\[\] arsTab =
        metadataConnection.create(new Metadata\[\] {expenseTab});
    
    CustomApplication application = new CustomApplication();
    application.setFullName("ExpenseForce");
    application.setTab(new String\[\] {expenseTab.getFullName()});
    AsyncResult\[\] arsApp =
        metadataConnection.create(new Metadata\[\] {application});
    
    // Employees and managers have the same app visibility...
    ProfileApplicationVisibility appVisibility =
        new ProfileApplicationVisibility();
    appVisibility.setApplication("ExpenseForce");
    appVisibility.setVisible(true);
    
    Profile employee = new Profile(); 
    employee.setFullName("Employee");
    employee.setApplicationVisibilities(
        new ProfileApplicationVisibility\[\] {appVisibility}
    );
    AsyncResult\[\] arsProfileEmp =
    metadataConnection.create(new Metadata\[\] {employee});
    
    Profile manager = new Profile();
    manager.setFullName("Manager");
    manager.setApplicationVisibilities(
        new ProfileApplicationVisibility\[\] {appVisibility}
    );
    AsyncResult\[\] arsProfileMgr =
        metadataConnection.create(new Metadata\[\] {manager});
    
    // But employees and managers have different access
    // to the state of the expense sheet
    RecordType edit = new RecordType();
    edit.setFullName("ExpenseReport\_\_c.Edit");
    RecordTypePicklistValue editStatuses =
        new RecordTypePicklistValue();
    editStatuses.setPicklist("ExpenseStatus\_\_c");
    editStatuses.setValues(new PicklistValue\[\] 
        {unsubmitted, submitted});
    edit.setPicklistValues(new RecordTypePicklistValue\[\] 
        {editStatuses});
    AsyncResult\[\] arsRecTypeEdit =
        metadataConnection.create(new Metadata\[\] {edit});
    
    RecordType approve = new RecordType();
    approve.setFullName("ExpenseReport\_\_c.Approve");
    RecordTypePicklistValue approveStatuses =
        new RecordTypePicklistValue();
    approveStatuses.setPicklist("ExpenseStatus\_\_c");
    approveStatuses.setValues(new PicklistValue\[\] 
        {approved, rejected});
    approve.setPicklistValues(new RecordTypePicklistValue\[\]
        {approveStatuses});
    AsyncResult\[\] arsRecTypeApp =
        metadataConnection.create(new Metadata\[\] {approve});
  } catch (ConnectionException ce) {
    ce.printStackTrace();
  }
}

## Declarative Metadata Sample Definition

The definition of a profile in an organization with a custom app, custom object, record type, tab, and user permission is:

<?xml version="1.0" encoding="UTF-8"?>
<Profile xmlns="http://soap.sforce.com/2006/04/metadata">
    <applicationVisibilities\>
        <application\>PubApps\_\_Myriad\_Publishing</application\>
        <default\>false</default\>
        <visible\>true</visible\>
    </applicationVisibilities\>
    <custom\>true</custom\>
    <objectPermissions\>
        <object\>TestWeblinks\_\_c</object\>
        <allowCreate\>true</allowCreate\>
        <allowDelete\>true</allowDelete\>
        <allowEdit\>true</allowEdit\>
        <allowRead\>true</allowRead\>
        <viewAllRecords\>false</viewAllRecords\>
        <modifyAllRecords\>false</modifyAllRecords\>
        <viewAllFields\>false</viewAllFields\>
    </objectPermissions\>
    <recordTypeVisibilities\>
        <default\>true</default\>
        <recordType\>TestWeblinks\_\_c.My First Recordtype</recordType\>
        <visible\>true</visible\>
    </recordTypeVisibilities\>
    <tabVisibilities\>
        <tab\>Myriad Publications</tab\>
        <visibility\>DefaultOn</visibility\>
    </tabVisibilities\>
    <userPermissions\>
        <enabled\>true</enabled\>
        <name\>APIEnabled</name\>
    </userpermissions\>
</Profile\>

## Usage

To create custom profiles, we recommend that you use the Profile object instead of the [deploy()](https://developer.salesforce.com/docs/atlas.en-us.api_meta.meta/api_meta/meta_deploy.htm "Uses file representations of components to create, update, or delete those components in a Salesforce org.") call on the Profile Metadata type. The Profile object allows you to create empty profiles that start without any permissions enabled except for required permissions for the profile’s user license.

When you use the [retrieve()](https://developer.salesforce.com/docs/atlas.en-us.api_meta.meta/api_meta/meta_retrieve.htm "The retrieve() call retrieves XML file representations of components in an organization.") call to get information about profiles, the returned .profile files only include security settings for the other metadata types referenced in the retrieve request. Exceptions include user permissions, IP address ranges, and login hours, which are always retrieved. For example, the following package.xml file contains a types element that matches all custom objects. The returned profiles contain object and field permissions for all custom objects in your organization but don’t include permissions for standard objects, such as Account, and standard fields.

<?xml version="1.0" encoding="UTF-8"?>
<Package xmlns="http://soap.sforce.com/2006/04/metadata">
    <types\>
        <members\>\*</members\>
        <name\>CustomObject</name\>
    </types\>
   <types\>
        <members\>\*</members\>
        <name\>Profile</name\>
    </types\>
    <version\>68.0</version\>
</Package\>

The wildcard “\*” on CustomObject doesn’t match standard objects. This wildcard behavior helps you to avoid making unintended, high-impact profile changes. If you create a few custom objects in a Developer Edition organization, [retrieve()](https://developer.salesforce.com/docs/atlas.en-us.api_meta.meta/api_meta/meta_retrieve.htm "The retrieve() call retrieves XML file representations of components in an organization.") the information, and later [deploy()](https://developer.salesforce.com/docs/atlas.en-us.api_meta.meta/api_meta/meta_deploy.htm "Uses file representations of components to create, update, or delete those components in a Salesforce org.") the custom objects to your production org, the profile and field-level security for all your standard objects and fields aren’t overwritten. You can only overwrite these standard objects and fields by explicitly creating separate types elements for the objects or fields.

Metadata API intentionally makes it difficult to include standard fields in [retrieve()](https://developer.salesforce.com/docs/atlas.en-us.api_meta.meta/api_meta/meta_retrieve.htm "The retrieve() call retrieves XML file representations of components in an organization.") calls to prevent unexpected profile changes. But you can still retrieve and deploy profile permissions for custom and standard fields in standard objects, such as Account.

This package.xml file allows you to return profile permissions for Account standard and custom fields. Note how the standard Account object is defined in a types element by specifying it as a member of a CustomObject type.

<?xml version="1.0" encoding="UTF-8"?>
<Package xmlns="http://soap.sforce.com/2006/04/metadata">
    <types\>
        <members\>Account</members\>
        <name\>CustomObject</name\>
    </types\>
   <types\>
        <members\>\*</members\>
        <name\>Profile</name\>
    </types\>
    <version\>68.0</version\>
</Package\>

This package.xml file allows you to return profile permissions for the MyCustomField\_\_c custom field in the Account object.

<?xml version="1.0" encoding="UTF-8"?>
<Package xmlns="http://soap.sforce.com/2006/04/metadata">
   <types\>
        <members\>Account.MyCustomField\_\_c</members\>
        <name\>CustomField</name\>
   </types\>
   <types\>
        <members\>\*</members\>
        <name\>Profile</name\>
   </types\>
   <version\>68.0</version\>
</Package\>

To retrieve field permissions for relationship fields, remove the “Id” part of the field. For example, in this package.xml file, to retrieve field permissions for the AccountId field for Contacts, you reference this field as Contact.Account not Contact.AcccountId.

<?xml version="1.0" encoding="UTF-8"?>
<Package xmlns="http://soap.sforce.com/2006/04/metadata">
   <types\>
        <members\>Contact.Account</members\>
        <name\>CustomField</name\>
   </types\>
   <types\>
        <members\>\*</members\>
        <name\>Profile</name\>
   </types\>
   <version\>68.0</version\>
</Package\>

## Wildcard Support in the Manifest File

This metadata type supports the wildcard character \* (asterisk) in the package.xml manifest file. For information about using the manifest file, see [Deploying and Retrieving Metadata with the Zip File](https://developer.salesforce.com/docs/atlas.en-us.264.0.api_meta.meta/api_meta/file_based_zip_file.htm).

#### See Also

- [_Salesforce DX Developer Guide_: Retrieve Changes to Profiles with Source Tracking](https://developer.salesforce.com/docs/atlas.en-us.264.0.sfdx_dev.meta/sfdx_dev/sfdx_dev_source_tracking_source_tracking_profiles.htm "Salesforce DX Developer Guide: Retrieve Changes to
    Profiles with Source Tracking - HTML (New Window)")