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

# Upsert deal splits

> Créer ou remplacer les répartitions de transactions pour les transactions avec les ID fournis. Les pourcentages de répartition de transactions pour chaque transaction doivent s'additionner à 1,0 (100 %) et peuvent avoir jusqu'à 8 décimales.

export const ScopesList = ({scopes = [], description = "Cette API requiert l'une des portées suivantes :"}) => {
  if (!scopes || scopes.length === 0) {
    return null;
  }
  const sortedScopes = scopes.sort((a, b) => a.localeCompare(b));
  return <div>
      <div className="text-sm mb-2">{description}</div>
      <div>
        {sortedScopes.map((scope, index) => <div key={index}>
            <code>
              <span className="text-xs">{scope}</span>
            </code>
          </div>)}
      </div>
    </div>;
};

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>;
};

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

  <Accordion title="Required Scopes" icon="key">
    <ScopesList
      scopes={[
  'crm.dealsplits.read_write'
]}
    />
  </Accordion>
</AccordionGroup>


## OpenAPI

````yaml specs/2026-03/crm-deal-splits-v2026-03.json POST /deal-splits/2026-03/batch/upsert
openapi: 3.0.1
info:
  title: CRM Deal Splits
  description: Basepom for all HubSpot Projects
  version: 2026-03
  x-hubspot-product-tier-requirements:
    marketing: FREE
    sales: ENTERPRISE
    service: FREE
    cms: FREE
    commerce: FREE
    crmHub: FREE
    dataHub: FREE
  x-hubspot-api-use-case: >-
    When two sales reps work together to close a deal, add a split to the deal
    to reflect that the credit and commission are being shared.
  x-hubspot-introduction: >-
    Use the deal splits API to split existing deals between owners when credit
    and/or commission are shared between them. 
servers:
  - url: https://api.hubapi.com
security: []
tags:
  - name: Batch
paths:
  /deal-splits/2026-03/batch/upsert:
    post:
      tags:
        - Batch
      summary: "Créer ou remplacer les répartitions de transactions pour les transactions avec les ID fournis. Les pourcentages de répartition de transactions pour chaque transaction doivent s'additionner à\_1,0 (100\_%) et peuvent avoir jusqu'à 8\_décimales."
      description: "Créer ou remplacer les répartitions de transactions pour les transactions avec les ID fournis. Les pourcentages de répartition de transactions pour chaque transaction doivent s'additionner à\_1,0 (100\_%) et peuvent avoir jusqu'à 8\_décimales."
      operationId: >-
        post-/deal-splits/2026-03/batch/upsert_/crm/objects/v3/deals/splits/batch/upsert
      parameters: []
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PublicDealSplitsBatchCreateRequest'
        required: true
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BatchResponseDealToDealSplits'
        '207':
          description: multiple statuses
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BatchResponseDealToDealSplitsWithErrors'
        default:
          $ref: '#/components/responses/Error'
          description: ''
      security:
        - oauth2:
            - crm.dealsplits.read_write
components:
  schemas:
    PublicDealSplitsBatchCreateRequest:
      required:
        - inputs
      type: object
      properties:
        inputs:
          type: array
          description: Un tableau d'entrées de répartition de transactions
          items:
            $ref: '#/components/schemas/PublicDealSplitsCreateRequest'
    BatchResponseDealToDealSplits:
      required:
        - completedAt
        - results
        - startedAt
        - status
      type: object
      properties:
        completedAt:
          type: string
          description: >-
            L'horodatage indiquant la date et l'heure auxquelles l'opération par
            lots a été effectuée, au format date-heure.
          format: date-time
        links:
          type: object
          additionalProperties:
            type: string
          description: >-
            Une carte des noms de liens vers les URI associés pour des
            ressources ou de la documentation supplémentaires.
        requestedAt:
          type: string
          description: >-
            L'horodatage indiquant la date et l'heure auxquelles l'opération par
            lots a été demandée, au format date-heure.
          format: date-time
        results:
          type: array
          description: >-
            Un tableau d'objets de répartition de transaction par transaction
            représentant les résultats de l'opération par lots.
          items:
            $ref: '#/components/schemas/DealToDealSplits'
        startedAt:
          type: string
          description: >-
            L'horodatage indiquant la date et l'heure auxquelles l'opération par
            lots a commencé, au format date-heure.
          format: date-time
        status:
          type: string
          description: "Statut actuel de l'opération par lots, avec les valeurs possibles suivantes\_: ANNULÉ, TERMINÉ, EN ATTENTE, EN COURS DE TRAITEMENT."
          enum:
            - CANCELED
            - COMPLETE
            - PENDING
            - PROCESSING
    BatchResponseDealToDealSplitsWithErrors:
      required:
        - completedAt
        - results
        - startedAt
        - status
      type: object
      properties:
        completedAt:
          type: string
          description: >-
            L'horodatage indiquant la date et l'heure auxquelles l'opération par
            lots a été effectuée, au format date-heure.
          format: date-time
        errors:
          type: array
          description: >-
            Tableau d'objets d'erreur détaillant les erreurs survenues pendant
            l'opération par lots.
          items:
            $ref: '#/components/schemas/StandardError'
        links:
          type: object
          additionalProperties:
            type: string
          description: >-
            Une carte des noms de liens vers les URI associés pour des
            ressources ou de la documentation supplémentaires.
        numErrors:
          type: integer
          description: Le nombre total d'erreurs rencontrées pendant l'opération par lot.
          format: int32
        requestedAt:
          type: string
          description: >-
            L'horodatage indiquant la date et l'heure auxquelles l'opération par
            lots a été demandée, au format date-heure.
          format: date-time
        results:
          type: array
          description: >-
            Un tableau d'objets de répartition de transaction par transaction
            représentant les résultats de l'opération par lots.
          items:
            $ref: '#/components/schemas/DealToDealSplits'
        startedAt:
          type: string
          description: >-
            L'horodatage indiquant la date et l'heure auxquelles l'opération par
            lots a commencé, au format date-heure.
          format: date-time
        status:
          type: string
          description: "Statut actuel de l'opération par lots, avec les valeurs possibles suivantes\_: ANNULÉ, TERMINÉ, EN ATTENTE, EN COURS DE TRAITEMENT."
          enum:
            - CANCELED
            - COMPLETE
            - PENDING
            - PROCESSING
    PublicDealSplitsCreateRequest:
      required:
        - id
        - splits
      type: object
      properties:
        id:
          type: integer
          description: L'identifiant unique de la transaction.
          format: int64
        splits:
          type: array
          description: >-
            Un tableau d'entrées de répartition de transactions, chacune
            contenant un ID de propriétaire et un pourcentage de la répartition
            de transaction.
          items:
            $ref: '#/components/schemas/PublicDealSplitInput'
    DealToDealSplits:
      required:
        - id
        - splits
      type: object
      properties:
        id:
          type: string
          description: >-
            L'identifiant unique de la transaction associée à la répartition de
            transaction.
        splits:
          type: array
          description: >-
            Un tableau d'objets de répartition des transactions, chacun
            représentant une partie de la transaction attribuée à un
            propriétaire.
          items:
            $ref: '#/components/schemas/SimplePublicObject'
    StandardError:
      required:
        - category
        - context
        - errors
        - links
        - message
        - status
      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
        errors:
          type: array
          description: The detailed error objects.
          items:
            $ref: '#/components/schemas/ErrorDetail'
        id:
          type: string
          description: L'ID de l'erreur
        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: Le message d'erreur
        status:
          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: object
          properties: {}
          description: >-
            Une catégorie spécifique qui contient des détails plus précis sur
            l'erreur
      description: Ye olde error
    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
      description: >-
        Représente une réponse d'erreur renvoyée par l'API lorsqu'une opération
        échoue. Ce composant est utilisé dans divers points de terminaison pour
        fournir des informations détaillées sur l'erreur rencontrée.
      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
    PublicDealSplitInput:
      required:
        - ownerId
        - percentage
      type: object
      properties:
        ownerId:
          type: integer
          description: >-
            L'identifiant unique du propriétaire bénéficiant de la répartition
            de transaction.
          format: int32
        percentage:
          type: number
          description: "La part de la transaction attribuée au propriétaire, exprimée en pourcentage. Le pourcentage total de toutes les répartitions d'une transaction doit être égal à 1,0 (100\_%) et peut comporter jusqu'à 8\_décimales."
    SimplePublicObject:
      required:
        - archived
        - createdAt
        - id
        - properties
        - updatedAt
      type: object
      properties:
        archived:
          type: boolean
          description: Whether the object is archived.
        archivedAt:
          type: string
          description: The timestamp when the object was archived, in ISO 8601 format.
          format: date-time
        createdAt:
          type: string
          description: The timestamp when the object was created, in ISO 8601 format.
          format: date-time
        id:
          type: string
          description: The unique ID of the object.
        objectWriteTraceId:
          type: string
          description: An identifier used for tracing the write request for the object.
        properties:
          type: object
          additionalProperties:
            type: string
          description: Key-value pairs representing the properties of the object.
        propertiesWithHistory:
          type: object
          additionalProperties:
            type: array
            items:
              $ref: '#/components/schemas/ValueWithTimestamp'
          description: >-
            Key-value pairs representing the properties of the object along with
            their history.
        updatedAt:
          type: string
          description: The timestamp when the object was last updated, in ISO 8601 format.
          format: date-time
        url:
          type: string
          description: The URL associated with the object.
      description: A simple public object.
    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
      description: >-
        Représente des informations détaillées sur une erreur survenue dans
        l'API. Ce composant est utilisé pour fournir un contexte et des
        spécificités supplémentaires sur les erreurs, généralement dans le cadre
        d'une réponse d'erreur.
    ValueWithTimestamp:
      required:
        - sourceType
        - timestamp
        - value
      type: object
      properties:
        sourceId:
          type: string
          description: The unique ID of the property.
        sourceLabel:
          type: string
          description: A human-readable label.
        sourceType:
          type: string
          description: The property type.
        timestamp:
          type: string
          description: The timestamp when the property was updated, in ISO 8601 format.
          format: date-time
        updatedByUserId:
          type: integer
          description: The ID of the user who last updated the property.
          format: int32
        value:
          type: string
          description: The property value.
      description: Property model that includes timestamp.
  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:
            crm.dealsplits.read_write: ''

````