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

# Create a CRM card

> Define um novo cartão que se tornará ativo em uma conta quando este aplicativo for instalado.

export const SupportedProducts = ({marketing, sales, service, cms, marketingLevel, salesLevel, serviceLevel, cmsLevel}) => {
  const translations = {
    header: "Produtos suportados",
    description: "Requer um dos seguintes produtos ou superior.",
    productNames: {
      marketing: "Marketing Hub",
      sales: "Sales Hub",
      service: "Service Hub",
      cms: "Content Hub"
    },
    tiers: {
      free: "Grátis",
      starter: "Starter",
      professional: "Professional",
      enterprise: "Enterprise"
    }
  };
  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: Cartões de CRM do aplicativo público
  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: >-
    Adicione um cartão personalizado aos registros de contato para exibir dados
    do seu software externo de rastreamento de bugs.
  x-hubspot-related-documentation:
    - name: Custom Cards Guide
      url: https://developers.hubspot.com/docs/guides/api/crm/extensions/crm-cards
  x-hubspot-introduction: >-
    Crie cartões personalizados para dados de sistemas externos em registros do
    CRM. Requer um aplicativo público. Esses cartões do CRM são diferentes das
    extensões de UI que você pode criar com projetos.
servers:
  - url: https://api.hubapi.com
security: []
tags:
  - name: Advanced
  - name: Basic
paths:
  /crm/v3/extensions/cards-dev/{appId}:
    post:
      tags:
        - Basic
      summary: Criar um novo cartão
      description: >-
        Define um novo cartão que se tornará ativo em uma conta quando este
        aplicativo for instalado.
      operationId: post-/crm/v3/extensions/cards-dev/{appId}_create
      parameters:
        - name: appId
          in: path
          description: O ID do aplicativo que deverá conter o cartão de CRM antigo
          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: >-
            O título de nível superior para este cartão, exibido aos usuários na
            interface do CRM. É uma string.
      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: >-
            Uma lista das ações realizadas no cartão, incluindo criação,
            exclusão e atualizações.
          items:
            $ref: '#/components/schemas/CardAuditResponse'
        createdAt:
          type: string
          description: A data e a hora em que o cartão foi criado.
          format: date-time
        display:
          $ref: '#/components/schemas/CardDisplayBody'
        fetch:
          $ref: '#/components/schemas/PublicCardFetchBody'
        id:
          type: string
          description: O ID exclusivo do cartão.
        title:
          type: string
          description: >-
            O título de nível superior para este cartão. Exibido para os
            usuários na UI do CRM.
        updatedAt:
          type: string
          description: A data e a hora da última atualização do cartão.
          format: date-time
    CardActions:
      required:
        - baseUrls
      type: object
      properties:
        baseUrls:
          type: array
          description: >-
            Uma lista de prefixos de URL que serão aceitos para URLs de ação do
            cartão. Se a resposta de busca de dados incluir um URL de ação que
            não comece com um desses valores, isso resultará em um erro e o
            cartão não será exibido.
          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: >-
            Propriedades de exibição do cartão. Estas serão renderizadas como
            pares "rótulo : valor" na interface do cartão. Consulte o [exemplo
            de cartão](#) na documentação de visão geral para obter mais
            detalhes.
          items:
            $ref: '#/components/schemas/CardDisplayProperty'
      description: Configuration for displayed info on a card
    CardFetchBody:
      required:
        - objectTypes
        - targetUrl
      type: object
      properties:
        cardType:
          type: string
          description: Um campo obsoleto para determinar o tipo de cartão retornado.
          enum:
            - EXTERNAL
            - SERVERLESS
        objectTypes:
          type: array
          description: >-
            Uma matriz de tipos de objeto do CRM em que este cartão deve ser
            exibido. O HubSpot chamará o URL de busca de dados sempre que um
            usuário visitar uma página de registro dos tipos definidos aqui.
          items:
            $ref: '#/components/schemas/CardObjectTypeBody'
        serverlessFunction:
          type: string
          description: >-
            Um campo obsoleto para especificar a funcionalidade sem servidor com
            o cartão
        targetUrl:
          type: string
          description: >-
            O URL de um ponto de extremidade de serviço que responderá com
            detalhes do cartão. O HubSpot chamará este ponto de extremidade
            sempre que um usuário visitar uma página de registro do CRM onde
            este cartão deve ser exibido.
      description: Configuration for this card's data fetch request.
    CardAuditResponse:
      required:
        - actionType
        - applicationId
        - authSource
        - changedAt
        - initiatingUserId
        - objectTypeId
      type: object
      properties:
        actionType:
          type: string
          description: >-
            O tipo de ação realizada, com os valores possíveis: CRIAR, EXCLUIR,
            ATUALIZAR.
          enum:
            - CREATE
            - DELETE
            - UPDATE
        applicationId:
          type: integer
          description: O ID do aplicativo associado ao cartão.
          format: int32
        authSource:
          type: string
          description: >-
            A fonte de autenticação da ação, com os valores possíveis:
            APLICATIVO, EXTERNO, INTERNO.
          enum:
            - APP
            - EXTERNAL
            - INTERNAL
        changedAt:
          type: integer
          description: A data e a hora da alteração.
          format: int64
        initiatingUserId:
          type: integer
          description: O ID do usuário que iniciou a ação.
          format: int32
        objectTypeId:
          type: integer
          description: O ID do cartão.
          format: int64
    PublicCardFetchBody:
      required:
        - objectTypes
        - targetUrl
      type: object
      properties:
        objectTypes:
          type: array
          description: >-
            Uma matriz de tipos de objeto do CRM em que este cartão deve ser
            exibido. O HubSpot chamará o URL de destino sempre que um usuário
            visitar uma página de registro dos tipos definidos aqui.
          items:
            $ref: '#/components/schemas/CardObjectTypeBody'
        targetUrl:
          type: string
          description: >-
            O URL de um ponto de extremidade que responderá com detalhes para
            este cartão. O HubSpot chamará este ponto de extremidade sempre que
            um usuário visitar uma página de registro do CRM onde este cartão
            deve ser exibido.
    Error:
      required:
        - category
        - correlationId
        - message
      type: object
      properties:
        category:
          type: string
          description: A categoria de erro
        context:
          type: object
          additionalProperties:
            type: array
            items:
              type: string
          description: Contexto sobre a condição do erro
          example: >-
            {invalidPropertyName=[propertyValue], missingScopes=[scope1,
            scope2]}
        correlationId:
          type: string
          description: >-
            Um identificador exclusivo para a solicitação. Inclua este valor em
            relatórios de erro ou tickets de suporte
          format: uuid
          example: aeb5f871-7f07-4993-9211-075dc63e7cbf
        errors:
          type: array
          description: mais informações sobre o erro
          items:
            $ref: '#/components/schemas/ErrorDetail'
        links:
          type: object
          additionalProperties:
            type: string
          description: >-
            Um mapa de nomes de links para URIs associados que contêm
            documentação sobre o erro ou as etapas de correção recomendadas
        message:
          type: string
          description: >-
            Uma mensagem legível por humanos que descreve o erro, juntamente com
            as etapas de correção, quando apropriado
          example: An error occurred
        subCategory:
          type: string
          description: >-
            Uma categoria específica que contém mais detalhes específicos sobre
            o erro
      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: O tipo de dados representado por esta propriedade.
          enum:
            - BOOLEAN
            - CURRENCY
            - DATE
            - DATETIME
            - EMAIL
            - LINK
            - NUMERIC
            - STATUS
            - STRING
        label:
          type: string
          description: >-
            O rótulo desta propriedade como você gostaria que fosse exibido aos
            usuários.
        name:
          type: string
          description: >-
            Um identificador interno para esta propriedade. Este valor deve ser
            TODO exclusivo.
        options:
          type: array
          description: >-
            Uma matriz de opções disponíveis que podem ser exibidas. Usado
            apenas quando "dataType" é "STATUS".
          items:
            $ref: '#/components/schemas/DisplayOption'
      description: Definition for a card display property.
    CardObjectTypeBody:
      required:
        - name
        - propertiesToSend
      type: object
      properties:
        name:
          type: string
          description: Um tipo de objeto do CRM em que este cartão deve ser exibido.
          enum:
            - companies
            - contacts
            - deals
            - marketing_events
            - tickets
        propertiesToSend:
          type: array
          description: >-
            Uma matriz de propriedades que devem ser enviadas para o URL de
            destino deste cartão quando a solicitação de busca de dados for
            feita. Devem ser propriedades válidas para o tipo de objeto do CRM
            correspondente.
          items:
            type: string
    ErrorDetail:
      required:
        - message
      type: object
      properties:
        code:
          type: string
          description: O código de status associado ao detalhe do erro
        context:
          type: object
          additionalProperties:
            type: array
            items:
              type: string
          description: Contexto sobre a condição do erro
          example: '{missingScopes=[scope1, scope2]}'
        in:
          type: string
          description: O nome do campo ou parâmetro no qual o erro foi encontrado.
        message:
          type: string
          description: >-
            Uma mensagem legível por humanos que descreve o erro, juntamente com
            as etapas de correção, quando apropriado
        subCategory:
          type: string
          description: >-
            Uma categoria específica que contém mais detalhes específicos sobre
            o erro
    DisplayOption:
      required:
        - label
        - name
        - type
      type: object
      properties:
        label:
          type: string
          description: O texto que será exibido aos usuários para esta opção.
        name:
          type: string
          description: Nome exclusivo compatível com JSON para a opção.
        type:
          type: string
          description: O tipo de status.
          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: ''

````