> ## 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.

# Create a CRM card

> Définit une nouvelle carte qui deviendra active sur un compte lorsque cette application est installée.

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}
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}:
    post:
      tags:
        - Basic
      summary: Créer une nouvelle carte
      description: >-
        Définit une nouvelle carte qui deviendra active sur un compte lorsque
        cette application est installée.
      operationId: post-/crm/v3/extensions/cards-dev/{appId}_create
      parameters:
        - name: appId
          in: path
          description: L'ID de l'application qui doit contenir 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/CardCreateRequest'
        required: true
      responses:
        '201':
          description: successful operation
          headers:
            Location:
              description: URL of the newly created resource
              style: simple
              explode: false
              schema:
                type: string
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicCardResponse'
        default:
          $ref: '#/components/responses/Error'
          description: ''
      security:
        - oauth2:
            - developers-write
components:
  schemas:
    CardCreateRequest:
      required:
        - actions
        - display
        - fetch
        - title
      type: object
      properties:
        actions:
          $ref: '#/components/schemas/CardActions'
        display:
          $ref: '#/components/schemas/CardDisplayBody'
        fetch:
          $ref: '#/components/schemas/CardFetchBody'
        title:
          type: string
          description: >-
            Le titre de niveau supérieur de cette carte, affiché aux
            utilisateurs dans l'interface utilisateur du CRM. Il s'agit d'une
            chaîne de caractères.
      description: State of card definition to be created
      example:
        actions:
          baseUrls:
            - https://www.example.com/hubspot
        display:
          properties:
            - dataType: STRING
              label: Pets Name
              name: pet_name
        fetch:
          objectTypes:
            - name: contacts
              propertiesToSend:
                - email
                - firstname
          targetUrl: https://www.example.com/hubspot/target
        title: PetSpot
    PublicCardResponse:
      required:
        - actions
        - auditHistory
        - display
        - fetch
        - id
        - title
      type: object
      properties:
        actions:
          $ref: '#/components/schemas/CardActions'
        auditHistory:
          type: array
          description: >-
            Une liste des actions effectuées sur la carte, y compris la
            création, la suppression et les mises à jour.
          items:
            $ref: '#/components/schemas/CardAuditResponse'
        createdAt:
          type: string
          description: La date et l'heure de création de la carte.
          format: date-time
        display:
          $ref: '#/components/schemas/CardDisplayBody'
        fetch:
          $ref: '#/components/schemas/PublicCardFetchBody'
        id:
          type: string
          description: L'ID unique de la carte.
        title:
          type: string
          description: >-
            Le titre de niveau supérieur pour cette carte. Affiché aux
            utilisateurs dans l'interface CRM.
        updatedAt:
          type: string
          description: La date et heure de la dernière mise à jour de la carte.
          format: date-time
    CardActions:
      required:
        - baseUrls
      type: object
      properties:
        baseUrls:
          type: array
          description: >-
            Une liste de préfixes d'URL qui seront acceptés pour les URL
            d'action de carte. Si votre réponse de récupération de données
            inclut une URL d'action qui ne commence pas par l'une de ces
            valeurs, cela entraînera une erreur et la carte ne sera pas
            affichée.
          items:
            type: string
      description: Configuration for custom user actions on cards.
      example:
        baseUrls:
          - https://www.example.com/hubspot
    CardDisplayBody:
      required:
        - properties
      type: object
      properties:
        properties:
          type: array
          description: "Propriétés d'affichage des cartes. Elles seront affichées sous forme de paires «\_libellé : valeur\_» dans l'UI de la carte. Consultez la [carte exemple](#) dans les docs d'aperçu pour plus d'informations."
          items:
            $ref: '#/components/schemas/CardDisplayProperty'
      description: Configuration for displayed info on a card
    CardFetchBody:
      required:
        - objectTypes
        - targetUrl
      type: object
      properties:
        cardType:
          type: string
          description: Un champ obsolète permettant de déterminer le type de carte renvoyé.
          enum:
            - EXTERNAL
            - SERVERLESS
        objectTypes:
          type: array
          description: >-
            Un tableau de types d'objets CRM où cette carte doit être affichée.
            HubSpot appellera votre URL de récupération de données chaque fois
            qu'un utilisateur visite une page de fiches d'informations des types
            définis ici.
          items:
            $ref: '#/components/schemas/CardObjectTypeBody'
        serverlessFunction:
          type: string
          description: >-
            Un champ obsolète permettant de spécifier la fonctionnalité sans
            serveur avec la carte
        targetUrl:
          type: string
          description: >-
            URL des points de terminaison de service répondant avec les détails
            de la carte. HubSpot appellera ce point de terminaison chaque fois
            qu'un utilisateur visite la page d'une fiche d'informations du CRM
            où cette carte doit être affichée.
      description: Configuration for this card's data fetch request.
    CardAuditResponse:
      required:
        - actionType
        - applicationId
        - authSource
        - changedAt
        - initiatingUserId
        - objectTypeId
      type: object
      properties:
        actionType:
          type: string
          description: "Le type d'action effectué, avec les valeurs possibles\_: CRÉER, SUPPRIMER, METTRE \x81À JOUR."
          enum:
            - CREATE
            - DELETE
            - UPDATE
        applicationId:
          type: integer
          description: L'ID de l'application associée à la carte.
          format: int32
        authSource:
          type: string
          description: "Source d'authentification pour l'action, avec les valeurs possibles suivantes\_: APPLICATION, EXTERNE, INTERNE."
          enum:
            - APP
            - EXTERNAL
            - INTERNAL
        changedAt:
          type: integer
          description: L'horodatage indiquant quand le changement s'est produit.
          format: int64
        initiatingUserId:
          type: integer
          description: L'ID de l'utilisateur qui a initié l'action.
          format: int32
        objectTypeId:
          type: integer
          description: L'ID de la carte.
          format: int64
    PublicCardFetchBody:
      required:
        - objectTypes
        - targetUrl
      type: object
      properties:
        objectTypes:
          type: array
          description: >-
            Un tableau de types d'objets CRM où cette carte doit être affichée.
            HubSpot appellera votre URL cible chaque fois qu'un utilisateur
            visite une page de fiches d'informations des types définis ici.
          items:
            $ref: '#/components/schemas/CardObjectTypeBody'
        targetUrl:
          type: string
          description: >-
            URL du point de terminaison de service répondant avec les détails
            pour cette carte. HubSpot appellera ce point de terminaison chaque
            fois qu'un utilisateur visite la page d'une fiche d'informations du
            CRM où cette carte doit être affichée.
    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
    CardDisplayProperty:
      required:
        - dataType
        - label
        - name
        - options
      type: object
      properties:
        dataType:
          type: string
          description: Type des données représentées par cette propriété.
          enum:
            - BOOLEAN
            - CURRENCY
            - DATE
            - DATETIME
            - EMAIL
            - LINK
            - NUMERIC
            - STATUS
            - STRING
        label:
          type: string
          description: >-
            Le libellé de cette propriété telle que vous souhaitez qu'elle soit
            affichée aux utilisateurs.
        name:
          type: string
          description: >-
            Un identifiant interne pour cette propriété. Cette valeur doit être
            unique TODO.
        options:
          type: array
          description: "Un tableau d'options disponibles qui peuvent être affichées. Utilisé uniquement lorsque «\_dataType\_» est «\_STATUT\_»."
          items:
            $ref: '#/components/schemas/DisplayOption'
      description: Definition for a card display property.
    CardObjectTypeBody:
      required:
        - name
        - propertiesToSend
      type: object
      properties:
        name:
          type: string
          description: Un type d'objet CRM où cette carte doit être affichée.
          enum:
            - companies
            - contacts
            - deals
            - marketing_events
            - tickets
        propertiesToSend:
          type: array
          description: >-
            Un tableau de propriétés qui doivent être envoyées à l'URL cible de
            cette carte lorsque la demande de récupération de données est
            effectuée. Doit être des propriétés valides pour le type d'objet CRM
            correspondant.
          items:
            type: string
    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
    DisplayOption:
      required:
        - label
        - name
        - type
      type: object
      properties:
        label:
          type: string
          description: Le texte qui sera affiché aux utilisateurs pour cette option.
        name:
          type: string
          description: Nom unique compatible JSON pour l'option.
        type:
          type: string
          description: Le type de statut.
          enum:
            - DANGER
            - DEFAULT
            - INFO
            - SUCCESS
            - WARNING
      description: Option definition for STATUS dataTypes.
  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: ''

````