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

# Migrate CRM card views

> Échange une carte CRM existante contre une carte d'application dans les vues. Consultez la documentation « Migrer une carte CRM existante vers une carte d'application » pour plus d'informations

export const SupportedProducts = ({marketing, sales, service, cms, marketingLevel, salesLevel, serviceLevel, cmsLevel}) => {
  const translations = {
    header: "Produits pris en charge",
    description: "Exige l'un des produits suivants ou un produit supérieur.",
    productNames: {
      marketing: "Marketing Hub",
      sales: "Sales Hub",
      service: "Service Hub",
      cms: "Content Hub"
    },
    tiers: {
      free: "Gratuit",
      starter: "Starter",
      professional: "Pro",
      enterprise: "Entreprise"
    }
  };
  const translateTier = tier => {
    if (!tier) return '';
    const lowerTier = tier.toLowerCase();
    return translations.tiers[lowerTier] || tier;
  };
  const products = [{
    name: marketing ? translations.productNames.marketing : '',
    level: translateTier(marketingLevel),
    icon: "https://mintlify-assets.b-cdn.net/Icons/marketing-bolt.svg",
    alt: "Marketing Hub"
  }, {
    name: sales ? translations.productNames.sales : '',
    level: translateTier(salesLevel),
    icon: "https://mintlify-assets.b-cdn.net/Icons/sales-star.svg",
    alt: "Sales Hub"
  }, {
    name: service ? translations.productNames.service : '',
    level: translateTier(serviceLevel),
    icon: "https://mintlify-assets.b-cdn.net/Icons/service-heart.svg",
    alt: "Service Hub"
  }, {
    name: cms ? translations.productNames.cms : '',
    level: translateTier(cmsLevel),
    icon: "https://mintlify-assets.b-cdn.net/Icons/content-play.svg",
    alt: "Content Hub"
  }].filter(product => product.name && product.level);
  if (products.length === 0) return null;
  return <div>
      <div className="text-sm mb-2">{translations.description}</div>
      <div className={`grid ${products.length === 1 ? 'grid-cols-1' : 'grid-cols-2'} gap-1.5`}>
        {products.map((product, index) => <div key={index} style={{
    display: 'flex',
    alignItems: 'center'
  }}>
            <img src={product.icon} alt={product.alt} className="w-3.5 h-3.5 mr-1.5 mt-2.5 mb-2.5 flex-shrink-0 align-middle" />
            <span className="font-medium mr-1 text-sm">{product.name} -</span>
            <span className="text-sm">{product.level}</span>
          </div>)}
      </div>
    </div>;
};

<Accordion title="Supported products" defaultOpen="true" icon="cubes">
  <SupportedProducts marketing={true} sales={true} service={true} cms={true} marketingLevel="FREE" salesLevel="FREE" serviceLevel="FREE" cmsLevel="FREE" />
</Accordion>


## OpenAPI

````yaml specs/legacy/v3/crm-public-app-crm-cards-v3.json POST /crm/v3/extensions/cards-dev/{appId}/views/migrate
openapi: 3.0.1
info:
  title: Cartes CRM d'application publique
  description: >-
    Allows an app to extend the CRM UI by surfacing custom cards in the sidebar
    of record pages. These cards are defined up-front as part of app
    configuration, then populated by external data fetch requests when the
    record page is accessed by a user.
  version: v3
  x-hubspot-product-tier-requirements:
    marketing: FREE
    sales: FREE
    service: FREE
    cms: FREE
    commerce: FREE
    crmHub: FREE
    dataHub: FREE
  x-hubspot-api-use-case: >-
    Ajoutez une carte personnalisée aux fiches d'informations de contact qui
    affiche les données de votre logiciel de suivi des bugs externe.
  x-hubspot-related-documentation:
    - name: Custom Cards Guide
      url: https://developers.hubspot.com/docs/guides/api/crm/extensions/crm-cards
  x-hubspot-introduction: >-
    Créez des cartes personnalisées pour intégrer des données de systèmes
    externes sur les fiches d'informations du CRM. Une application publique est
    nécessaire. Ces cartes CRM se distinguent des extensions d'IU qui peuvent
    être créées avec les projets.
servers:
  - url: https://api.hubapi.com
security: []
tags:
  - name: Advanced
  - name: Basic
paths:
  /crm/v3/extensions/cards-dev/{appId}/views/migrate:
    post:
      tags:
        - Advanced
      summary: Migrer la carte dans les vues
      description: "Échange une carte CRM existante contre une carte d'application dans les vues. Consultez la documentation «\_Migrer une carte CRM existante vers une carte d'application\_» pour plus d'informations"
      operationId: >-
        post-/crm/v3/extensions/cards-dev/{appId}/views/migrate_/crm/v3/extensions/cards-dev/{appId}/views/migrate
      parameters:
        - name: appId
          in: path
          description: L'ID de l'application contenant la carte CRM héritée
          required: true
          style: simple
          explode: false
          schema:
            type: integer
            format: int32
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CardMigrateViewsRequest'
        required: true
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CardMigrateViewsResponse'
        default:
          $ref: '#/components/responses/Error'
          description: ''
      security:
        - oauth2:
            - developers-write
components:
  schemas:
    CardMigrateViewsRequest:
      required:
        - allowDuplicateAppCardIds
        - appCardId
        - legacyCrmCardId
      type: object
      properties:
        allowDuplicateAppCardIds:
          type: boolean
          description: "La valeur par défaut est «\_faux\_». Cela permet à plusieurs migrations de cartes CRM héritées de pointer vers la même carte d'extension. Ceci est empêché par défaut pour éviter la consolidation accidentelle des cartes."
        appCardId:
          type: integer
          description: >-
            L'ID de la carte d'application pour remplacer la carte CRM héritée
            dans les vues
          format: int64
        helpdeskAppCardId:
          type: integer
          description: >-
            L'ID de la carte d'application Helpdesk à remplacer par la carte CRM
            héritée dans les vues Helpdesk. Cela n'est nécessaire que si la
            carte CRM héritée prenait en charge les tickets, car elle aurait
            alors été disponible dans les vues Helpdesk.
          format: int64
        legacyCrmCardId:
          type: integer
          description: L'identifiant de la carte CRM héritée à échanger
          format: int64
    CardMigrateViewsResponse:
      required:
        - message
      type: object
      properties:
        endedAt:
          type: integer
          description: L'horodatage de la fin de la migration.
          format: int64
        message:
          type: string
          description: >-
            Un message lisible par la personne décrivant l'erreur ainsi que les
            mesures correctives possibles, le cas échéant
        remainingPortalCount:
          type: integer
          description: >-
            Le nombre de portails restant à échanger de la carte CRM héritée
            vers la carte d'application
          format: int64
        startedAt:
          type: integer
          description: L'horodatage du début de la migration.
          format: int64
        totalPortalCount:
          type: integer
          description: Le nombre total de portails ayant accès à la carte CRM héritée
          format: int64
    Error:
      required:
        - category
        - correlationId
        - message
      type: object
      properties:
        category:
          type: string
          description: La catégorie d'erreur
        context:
          type: object
          additionalProperties:
            type: array
            items:
              type: string
          description: Contexte concernant la condition d'erreur
          example: >-
            {invalidPropertyName=[propertyValue], missingScopes=[scope1,
            scope2]}
        correlationId:
          type: string
          description: >-
            Un identifiant unique pour la demande. Incluez cette valeur dans
            tous les rapports d'erreurs ou tickets d'assistance
          format: uuid
          example: aeb5f871-7f07-4993-9211-075dc63e7cbf
        errors:
          type: array
          description: informations supplémentaires à propos de l'erreur
          items:
            $ref: '#/components/schemas/ErrorDetail'
        links:
          type: object
          additionalProperties:
            type: string
          description: >-
            Une carte des noms de liens vers les URI associés contenant de la
            documentation sur l'erreur ou les mesures correctives recommandées
        message:
          type: string
          description: >-
            Un message lisible par la personne décrivant l'erreur ainsi que les
            mesures correctives possibles, le cas échéant
          example: An error occurred
        subCategory:
          type: string
          description: >-
            Une catégorie spécifique qui contient des détails plus précis sur
            l'erreur
      example:
        message: Invalid input (details will vary based on the error)
        correlationId: aeb5f871-7f07-4993-9211-075dc63e7cbf
        category: VALIDATION_ERROR
        links:
          knowledge-base: https://www.hubspot.com/products/service/knowledge-base
    ErrorDetail:
      required:
        - message
      type: object
      properties:
        code:
          type: string
          description: Le code du statut associé au détail de l'erreur
        context:
          type: object
          additionalProperties:
            type: array
            items:
              type: string
          description: Contexte concernant la condition d'erreur
          example: '{missingScopes=[scope1, scope2]}'
        in:
          type: string
          description: Le nom du champ ou du paramètre dans lequel l'erreur a été trouvée.
        message:
          type: string
          description: >-
            Un message lisible par la personne décrivant l'erreur ainsi que les
            mesures correctives possibles, le cas échéant
        subCategory:
          type: string
          description: >-
            Une catégorie spécifique qui contient des détails plus précis sur
            l'erreur
  responses:
    Error:
      description: An error occurred.
      content:
        '*/*':
          schema:
            $ref: '#/components/schemas/Error'
  securitySchemes:
    oauth2:
      type: oauth2
      flows:
        authorizationCode:
          authorizationUrl: https://app.hubspot.com/oauth/authorize
          tokenUrl: https://api.hubapi.com/oauth/v1/token
          scopes:
            developers-read: ''
            developers-write: ''
            private-apps-read: ''

````