---
schema_version: "1"
id: e32f13b3170a8c29ac20bb1dd75fbd452a12f1fff5a6765ca5125edce377242d
title: Content - Custom Font (Connect API)
collection: developer
version: current
locale: en-us
portal_url: https://docs.salesforce.com/developer/current/en-us/marketing-cloud/mc-core/references/generated-api-specs/mc-next-font.md
canonical_url: https://developer.salesforce.com/docs/marketing/marketing-cloud-growth/references/mc-next-font
source_site: developer.salesforce.com
content_type: documentation
content_hash: 23f5dc9fa6b32d8ecd73618cd3d5c46eef4a5908811a5c5c3f42fac840442d16
products:
  - Marketing Cloud Next
  - Marketing Cloud
---
Content - Custom Font (Connect API)

# Content - Custom Font (Connect API)

Add a custom font to a Marketing Cloud Next content workspace by using Connect API. Use custom fonts in emails, landing pages, forms, and content blocks without relying on a publicly available content delivery network (CDN) URL. You can upload a font file or specify a reference to a font file at an external URL.

This table lists the Custom Font content use cases that Connect API supports.

| Supported Use Case | HTTP Verb | URI |
| --- | --- | --- |
| Add a font | [POST](/docs/marketing/marketing-cloud-growth/references/mc-next-font?meta=createCustomFont) | /services/data/{apiVersion}/connect/cms/contents |
| Retrieve font information | [GET](/docs/marketing/marketing-cloud-growth/references/mc-next-font?meta=getCustomFont) | /services/data/{apiVersion}/connect/cms/contents/{contentId} |

To create Custom Font content from a file, send a `multipart/form-data` request that includes the content definition and the font file. To create Custom Font content from a URL, send an `application/json` request. For URL sources, the API doesn't validate that the URL resolves to a font file. Use a direct URL to a font binary, such as a `.woff2`, `.ttf`, or `.otf` file.

For more information, see [Manage Custom Fonts in Marketing Cloud Next](/docs/marketing/marketing-cloud-growth/guide/mc-manage-content-custom-fonts.html).

**Version:** 68.0

## Servers

*   `https://{subdomain}.my.salesforce.com`
    *   `subdomain (default None) The unique API subdomain for your Salesforce org.`

## Operations

### POST Create custom font content.

`POST /services/data/{apiVersion}/connect/cms/contents`

Operation ID: `createCustomFont`. Tags: Custom Font.

Add a font to your content workspace by uploading a font file or specifying an external font URL.

#### Parameters

*   `Authorization` (header, string, required) A unique, time-limited token that you can use to issue requests to Connect API. Replace `YOUR_ACCESS_TOKEN` with your authentication token.
    
    _Example_
    
    ```
    Bearer YOUR_ACCESS_TOKEN
    ```
    
*   `apiVersion` (path, string, required) The Salesforce API version, such as `v68.0`.

#### Request body (required)

The content item to create. Use the JSON media type for a URL source or the multipart media type for an uploaded file source.

Media type: `application/json`. Schema: `CustomFontUrlRequest`.

_Example: urlSource_ Add a font from an external URL.

```
{
  "contentSpaceOrFolderId": "0ZuQZ0000004YSv0AM",
  "contentType": "sfdc_cms__customFont",
  "title": "Brand Sans Regular",
  "contentBody": {
    "sfdc_cms:media": {
      "source": {
        "type": "url",
        "url": "https://fonts.example.com/brand-sans-regular.woff2"
      }
    }
  }
}
```

Media type: `multipart/form-data`. Schema: `CustomFontFileRequest`.

_Example: fileSource_ Upload a font file.

```
{
  "ManagedContentInputParam": {
    "contentSpaceOrFolderId": "0ZuQZ0000004YSv0AM",
    "contentType": "sfdc_cms__customFont",
    "title": "Brand Sans Regular",
    "contentBody": {
      "sfdc_cms:media": {
        "source": {
          "type": "file"
        }
      }
    }
  },
  "contentData": "BrandFont.woff2"
}
```

#### Responses

*   **201** Indicates that the API accepted your request to add a font.
    
    Media type: `application/json`. Schema: `CustomFontResponse`.
    
    _Example: fileSource_ Custom Font content created from an uploaded file.
    
    ```
    {
      "apiName": "MCJUR5WKNRHZFP7NAUQOMMNJ7CI4",
      "contentBody": {
        "sfdc_cms:media": {
          "source": {
            "type": "file",
            "ref": "069SB0000000001AAA",
            "mimeType": "font/woff2",
            "size": 1887436
          },
          "url": "/cms/media/MCJUR5WKNRHZFP7NAUQOMMNJ7CI4?version=1"
        }
      },
      "contentFqn": "marketing--Default_Content_Workspace.sfdc_cms__customFont--MCJUR5WKNRHZFP7NAUQOMMNJ7CI4",
      "contentKey": "MCJUR5WKNRHZFP7NAUQOMMNJ7CI4",
      "contentSpace": {
        "id": "0ZuRZ000000PrAo0AK",
        "resourceUrl": "/services/data/v68.0/connect/cms/spaces/0ZuRZ000000PrAo"
      },
      "contentType": {
        "fullyQualifiedName": "sfdc_cms__customFont"
      },
      "contentVersion": 1,
      "createdBy": {
        "id": "005SB00000eaki1YAA",
        "name": "D'Angelo Cunningham",
        "resourceUrl": "/services/data/v68.0/chatter/users/005SB00000eaki1YAA\""
      },
      "createdDate": "2026-07-30T15:04:32.000Z",
      "folder": {
        "id": "0ZuQZ0000004YSv0AM",
        "resourceUrl": "/services/data/v68.0/connect/cms/folders/0ZuQZ0000004YSv0AM"
      },
      "isPublished": false,
      "language": "en_US",
      "lastModifiedBy": {
        "id": "005SB00000eaki1YAA",
        "name": "D'Angelo Cunningham",
        "resourceUrl": "/services/data/v68.0/chatter/users/005SB00000eaki1YAA\""
      },
      "lastModifiedDate": "2026-07-30T15:04:32.000Z",
      "managedContentId": "20YSB000004SkOz2AK",
      "managedContentVariantId": "9PsSB0000045XAj0AM",
      "managedContentVersionId": "5OURZ000000e6Q54AI",
      "source": "User",
      "status": {
        "label": "Draft",
        "status": "Draft"
      },
      "title": "Brand Sans Regular",
      "urlName": "brand-sans-woff2-regular",
      "variantVersion": 1
    }
    ```
    
    _Example: urlSource_ Added a font from an external URL.
    
    ```
    {
      "apiName": "MCJUR5WKNRHZFP7NAUQOMMNJ7CI4",
      "contentBody": {
        "sfdc_cms:media": {
          "source": {
            "type": "url",
            "url": "/cms/media/MCJUR5WKNRHZFP7NAUQOMMNJ7CI4?version=1"
          },
          "url": "/cms/media/MCJUR5WKNRHZFP7NAUQOMMNJ7CI4?version=1"
        }
      },
      "contentFqn": "marketing--Default_Content_Workspace.sfdc_cms__customFont--MCJUR5WKNRHZFP7NAUQOMMNJ7CI4",
      "contentKey": "MCJUR5WKNRHZFP7NAUQOMMNJ7CI4",
      "contentSpace": {
        "id": "0ZuRZ000000PrAo0AK",
        "resourceUrl": "/services/data/v68.0/connect/cms/spaces/0ZuRZ000000PrAo"
      },
      "contentType": {
        "fullyQualifiedName": "sfdc_cms__customFont"
      },
      "contentVersion": 1,
      "createdBy": {
        "id": "005SB00000eaki1YAA",
        "name": "D'Angelo Cunningham",
        "resourceUrl": "/services/data/v68.0/chatter/users/005SB00000eaki1YAA\""
      },
      "createdDate": "2026-07-30T15:04:32.000Z",
      "folder": {
        "id": "0ZuQZ0000004YSv0AM",
        "resourceUrl": "/services/data/v68.0/connect/cms/folders/0ZuQZ0000004YSv0AM"
      },
      "isPublished": false,
      "language": "en_US",
      "lastModifiedBy": {
        "id": "005SB00000eaki1YAA",
        "name": "D'Angelo Cunningham",
        "resourceUrl": "/services/data/v68.0/chatter/users/005SB00000eaki1YAA\""
      },
      "lastModifiedDate": "2026-07-30T15:04:32.000Z",
      "managedContentId": "20YSB000004SkOz2AK",
      "managedContentVariantId": "9PsSB0000045XAj0AM",
      "managedContentVersionId": "5OURZ000000e6Q54AI",
      "source": "User",
      "status": {
        "label": "Draft",
        "status": "Draft"
      },
      "title": "Brand Sans Regular",
      "urlName": "brand-sans-woff2-regular",
      "variantVersion": 1
    }
    ```
    
*   **401** The request requires valid authentication credentials.
    
    Media type: `application/json`. Schema: `ErrorList`.
    
    _Example: unauthorized_ Authentication credentials are missing or invalid.
    
    ```
    [
      {
        "errorCode": "UNAUTHORIZED",
        "message": "Authentication credentials are missing or invalid"
      }
    ]
    ```
    
*   **403** You don't have access to the managed content system. Connect API performs this organization-level or user-level access check before it evaluates folder-level access or request parameters.
    
    Media type: `application/json`. Schema: `ErrorList`.
    
    _Example: managedContentUnavailable_ Managed content isn't enabled for the user.
    
    ```
    [
      {
        "errorCode": "INSUFFICIENT_ACCESS_OR_READONLY",
        "message": "This feature is not currently enabled for this user."
      }
    ]
    ```
    
*   **500** An internal server error occurred while the API processed the request.
    
    Media type: `application/json`. Schema: `ErrorList`.
    
    _Example: internalServerError_ An unexpected error occurred.
    
    ```
    [
      {
        "errorCode": "INTERNAL_SERVER_ERROR",
        "message": "An unexpected error occurred while processing the request"
      }
    ]
    ```
    
*   **503** The service is temporarily unavailable. Try the request again later.
    
    Media type: `application/json`. Schema: `ErrorList`.
    
    _Example: serviceUnavailable_ The service is temporarily unavailable.
    
    ```
    [
      {
        "errorCode": "SERVICE_UNAVAILABLE",
        "message": "The service is temporarily unavailable. Please try again later"
      }
    ]
    ```
    

### GET Retrieve a custom font.

`GET /services/data/{apiVersion}/connect/cms/contents/{contentId}`

Operation ID: `getCustomFont`. Tags: Custom Font.

Retrieve a Custom Font content item.

#### Parameters

*   `Authorization` (header, string, required) A unique, time-limited token that you can use to issue requests to Connect API. Replace `YOUR_ACCESS_TOKEN` with your authentication token.
    
    _Example_
    
    ```
    Bearer YOUR_ACCESS_TOKEN
    ```
    
*   `apiVersion` (path, string, required) The Salesforce API version, such as `v68.0`.
*   `contentId` (path, string, required) The ID of the font content item to retrieve.

#### Responses

*   **200** The Custom Font content item was retrieved successfully.
    
    Media type: `application/json`. Schema: `CustomFontResponse`.
    
    _Example: urlSource_ Custom Font content item retrieved from an external URL source.
    
    ```
    {
      "apiName": "MCYONP3DRPAVGRHJ5HOREVW47SZI",
      "contentBody": {
        "sfdc_cms:media": {
          "source": {
            "fileSize": null,
            "mimeType": null,
            "type": "url",
            "url": "https://fonts.example.com/brand-sans-regular.woff2"
          },
          "url": "https://fonts.example.com/brand-sans-regular.woff2"
        }
      },
      "contentFqn": "marketing--Default_Content_Workspace.sfdc_cms__customFont--MCYONP3DRPAVGRHJ5HOREVW47SZI",
      "contentKey": "MCYONP3DRPAVGRHJ5HOREVW47SZI",
      "contentSpace": {
        "id": "0ZuRZ000000PrAo0AK",
        "resourceUrl": "/services/data/v68.0/connect/cms/spaces/0ZuRZ000000PrAo"
      },
      "contentType": {
        "fullyQualifiedName": "sfdc_cms__customFont",
        "name": "Custom Font"
      },
      "contentVersion": 1,
      "createdBy": {
        "id": "005RZ000005m0UHYAY",
        "name": "D'Angelo Cunningham",
        "resourceUrl": "/services/data/v68.0/chatter/users/005RZ000005m0UHYAY"
      },
      "createdDate": "2026-09-17T18:17:08.000Z",
      "externalId": null,
      "folder": {
        "id": "9PuRZ000000njfE0AQ",
        "resourceUrl": "/services/data/v68.0/connect/cms/folders/9PuRZ000000njfE0AQ"
      },
      "isPublished": false,
      "language": "en_US",
      "lastModifiedBy": {
        "id": "005RZ000005m0UHYAY",
        "name": "D'Angelo Cunningham",
        "resourceUrl": "/services/data/v68.0/chatter/users/005RZ000005m0UHYAY"
      },
      "lastModifiedDate": "2026-09-17T18:17:08.000Z",
      "managedContentId": "20YRZ000000eurV2AQ",
      "managedContentVariantId": "9PsRZ000000e2W90AI",
      "managedContentVersionId": "5OURZ000000e5Yr4AI",
      "source": "User",
      "status": {
        "label": "Draft",
        "status": "Draft"
      },
      "title": "Brand Sans WOFF2 Regular",
      "urlName": "brand-sans-woff2-regular",
      "variantVersion": "1.1"
    }
    ```
    
*   **401** The request requires valid authentication credentials.
    
    Media type: `application/json`. Schema: `ErrorList`.
    
    _Example: unauthorized_ Authentication credentials are missing or invalid.
    
    ```
    [
      {
        "errorCode": "UNAUTHORIZED",
        "message": "Authentication credentials are missing or invalid"
      }
    ]
    ```
    
*   **403** You don't have access to the managed content system. Connect API performs this organization-level or user-level access check before it evaluates folder-level access or request parameters.
    
    Media type: `application/json`. Schema: `ErrorList`.
    
    _Example: managedContentUnavailable_ Managed content isn't enabled for the user.
    
    ```
    [
      {
        "errorCode": "INSUFFICIENT_ACCESS_OR_READONLY",
        "message": "This feature is not currently enabled for this user."
      }
    ]
    ```
    
*   **404** The requested content item wasn't found.
    
    Media type: `application/json`. Schema: `ErrorList`.
    
    _Example: contentNotFound_ The requested Custom Font content item doesn't exist.
    
    ```
    [
      {
        "errorCode": "NOT_FOUND",
        "message": "The requested resource does not exist"
      }
    ]
    ```
    
*   **500** An internal server error occurred while the API processed the request.
    
    Media type: `application/json`. Schema: `ErrorList`.
    
    _Example: internalServerError_ An unexpected error occurred.
    
    ```
    [
      {
        "errorCode": "INTERNAL_SERVER_ERROR",
        "message": "An unexpected error occurred while processing the request"
      }
    ]
    ```
    
*   **503** The service is temporarily unavailable. Try the request again later.
    
    Media type: `application/json`. Schema: `ErrorList`.
    
    _Example: serviceUnavailable_ The service is temporarily unavailable.
    
    ```
    [
      {
        "errorCode": "SERVICE_UNAVAILABLE",
        "message": "The service is temporarily unavailable. Please try again later"
      }
    ]
    ```
    

## Schemas

### CustomFontUrlRequest

*   `contentSpaceOrFolderId` (_string_, required) The ID of the workspace or folder to add the font to.
*   `contentType` (_string_, required) The Custom Font content type.  
    Allowed values: `sfdc_cms__customFont`.
*   `title` (_string_, required) A name that identifies the font in your content workspace.
*   `contentBody` (_CustomFontUrlContentBody_, required)

### CustomFontFileRequest

*   `ManagedContentInputParam` (_CustomFontFileInput_, required)
*   `contentData` (_string (binary)_, required) The font file to upload.

### CustomFontResponse

A Custom Font content record returned by a content management operation. The delivered font object that authoring surfaces use isn't represented by this response.

*   `apiName` (_string_) The API name of the content record.
*   `contentBody` (_CustomFontResponseContentBody_)
*   `contentFqn` (_string_, nullable) The fully qualified name of the content record, including its workspace and content type.
*   `contentKey` (_string_) The content key.
*   `contentSpace` (_ContentSpace_)
*   `contentType` (_ContentType_)
*   `contentVersion` (_integer | object_) The content version number.
    
    One of: `integer`, `object`.
    
*   `createdBy` (_UserReference | string_)
    
    One of: `UserReference`, `string`.
    
*   `createdDate` (_string (date-time)_) The date and time when the content record was created.
*   `externalId` (_string_, nullable) The external ID of the content record.
*   `folder` (_FolderReference_)
*   `isPublished` (_boolean_) Indicates whether the content record is published.
*   `language` (_string_) The language of the content record.
*   `lastModifiedBy` (_UserReference | string_)
    
    One of: `UserReference`, `string`.
    
*   `lastModifiedDate` (_string (date-time)_) The date and time when the content record was last modified.
*   `managedContentId` (_string_) The managed content ID.
*   `managedContentVariantId` (_string_) The managed content variant ID.
*   `managedContentVersionId` (_string_) The managed content version ID.
*   `source` (_string_) The source of the content record.
*   `status` (_ContentStatus_)
*   `title` (_string_) The display name for the font. This value maps to `name` in the delivered font object.
*   `urlName` (_string_) A URL-friendly value generated from `title`.
*   `variantVersion` (_string | integer_) The variant version number.
    
    One of: `string`, `integer`.
    

### ErrorList

Error responses are JSON arrays of error objects, not individual error objects.

Array of `Error`.

### CustomFontUrlContentBody

*   `sfdc_cms:media` (_CustomFontUrlMedia_, required)

### CustomFontFileInput

*   `contentSpaceOrFolderId` (_string_, required) The ID of the workspace or folder where you create the font.
*   `contentType` (_string_, required) The Custom Font content type.  
    Allowed values: `sfdc_cms__customFont`.
*   `title` (_string_, required) An identifying name for the font. This property is at the top level of the content definition.
*   `contentBody` (_CustomFontFileContentBody_, required)

### CustomFontResponseContentBody

*   `sfdc_cms:media` (_CustomFontResponseMedia_)

### ContentSpace

The content workspace that contains the record.

*   `id` (_string_) The content workspace ID.
*   `resourceUrl` (_string_) The API resource URL for the content workspace.

### ContentType

*   `fullyQualifiedName` (_string_) The fully qualified name of the content type. For font content, this value is `sfdc_cms__customFont`.
*   `name` (_string_) The display name of the content type.

### UserReference

The user associated with the content record.

*   `id` (_string_) The user ID.
*   `name` (_string_) The user's display name.
*   `resourceUrl` (_string_) The API resource URL for the user.

### FolderReference

The folder that contains the record.

*   `id` (_string_) The folder ID.
*   `resourceUrl` (_string_) The API resource URL for the folder.

### ContentStatus

*   `label` (_string_) The display label for the publication state.
*   `status` (_string_) The publication state of the content record, such as `Draft`.

### Error

*   `errorCode` (_string_) The error code.
*   `message` (_string_) A description of the error.

### CustomFontUrlMedia

*   `source` (_CustomFontUrlSource_, required)

### CustomFontFileContentBody

*   `sfdc_cms:media` (_CustomFontFileMedia_, required)

### CustomFontResponseMedia

*   `source` (_CustomFontFileSourceResponse | CustomFontUrlSourceResponse_)
    
    One of: `CustomFontFileSourceResponse`, `CustomFontUrlSourceResponse`.
    
*   `url` (_string_) The font URL. For a file source, this value is the CMS delivery path. For a URL source, this value matches `source.url`.

### CustomFontUrlSource

*   `type` (_string_, required) The media source type.  
    Allowed values: `url`.
*   `url` (_string (uri)_, required) The URL where the font file is hosted.

### CustomFontFileMedia

*   `source` (_CustomFontFileSourceRequest_, required)

### CustomFontFileSourceResponse

*   `type` (_string_) The media source type.  
    Allowed values: `file`.
*   `ref` (_string_) The Salesforce record ID of the uploaded file. The server assigns this value.
*   `mimeType` (_string_) The MIME type of the uploaded file, as detected during upload.
*   `size` (_number_) The uploaded file size in bytes.

### CustomFontUrlSourceResponse

*   `fileSize` (_number_, nullable) The font file size in bytes.
*   `mimeType` (_string_, nullable) The MIME type of the font file.
*   `type` (_string_) The media source type.  
    Allowed values: `url`.
*   `url` (_string (uri)_) The URL where the font file is hosted.

### CustomFontFileSourceRequest

*   `type` (_string_, required) The media source type.  
    Allowed values: `file`.