Passer au contenu principal
Pour les entreprises menant des mouvements de vente directe à plusieurs niveaux organisationnels, les hiérarchies de comptes vous permettent de modéliser des relations parent-enfant complexes dans Metronome. Cette fonctionnalité prend en charge les scénarios de contractualisation d’entreprise où les organisations parentes peuvent être responsables de la consommation, des engagements et de la facturation des filiales à travers différentes sous-organisations.

Présentation

Les hiérarchies de comptes vous permettent de :
  • Modéliser des relations parent-enfant entre des clients Metronome distincts (jusqu’à 10 nœuds)
  • Partager des engagements et des crédits entre les niveaux hiérarchiques
  • Configurer des arrangements de paiement flexibles (le parent paie, l’enfant paie ou mixte)
  • Consolider la consommation des enfants sur une seule facture au niveau du parent
  • Maintenir une tarification et des contrats distincts pour chaque entité
Considérez une multinationale comme Disney contractant avec un fournisseur d’infrastructure cloud pour des services de distribution de contenu. Disney et ses filiales (Hulu, ESPN, ABC) diffusent en streaming d’énormes quantités de contenu vidéo, payant pour chaque gigaoctet de données transférées via le CDN du fournisseur. Avec les hiérarchies de comptes, vous pouvez configurer divers modèles de facturation :
  • Disney pourrait payer pour tout le transfert de données CDN entre les filiales tandis que chacune maintient ses propres contrats et tarifs
  • Disney pourrait acheter un engagement partagé de 10 M$ pour le transfert de données CDN dans lequel Hulu, ESPN et d’autres filiales puisent avant de payer des dépassements
  • Chaque filiale pourrait avoir ses propres tarifs et engagements, Disney recevant une seule facture consolidée montrant des ventilations détaillées de la consommation

Prérequis

Avant de mettre en œuvre les hiérarchies de comptes, assurez-vous d’avoir :
  • Des objets client créés à la fois pour les organisations parentes et enfants
  • Une configuration de facturation mise en place pour chaque client. Actuellement, la facturation Stripe est prise en charge.
  • Une compréhension de votre structure de facturation organisationnelle et des flux de paiement
Remarque : les relations hiérarchiques sont configurées lors de la création du contrat, et non comme une étape distincte.

Exemple 1 : Parent avec pool d’engagements partagé

Dans ce scénario, Disney achète un engagement de 10 M$ auquel toutes les filiales peuvent accéder pour leur consommation. Créez le contrat parent avec engagement partagé :
curl -X POST https://api.metronome.com/v1/contracts/create \
  -H "Authorization: Bearer $METRONOME_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "customer_id": "disney_parent_id",
    "name": "Disney Master Agreement",
    "rate_card_id": "enterprise_rate_card_id",
    "starting_at": "2025-01-01T00:00:00Z",
    "commits": [{
      "type": "prepaid",
      "product_id": "prepaid_commit_product_id",
      "access_schedule": {
        "schedule_items": [{
          "amount": 10000000,
          "starting_at": "2025-01-01T00:00:00Z",
          "ending_before": "2026-01-01T00:00:00Z"
        }]
      },
      "invoice_schedule": {
        "schedule_items": [{
          "amount": 10000000,
          "timestamp": "2025-01-01T00:00:00Z"
        }]
      },
      "hierarchy_configuration": {
        "child_access": {
          "type": "all"
        }
      }
    }]
  }'
Créez des contrats enfants pouvant accéder à l’engagement partagé :
# Hulu contract - pays for own overages
curl -X POST https://api.metronome.com/v1/contracts/create \
  -H "Authorization: Bearer $METRONOME_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "customer_id": "hulu_customer_id",
    "name": "Hulu - Disney Subsidiary",
    "rate_card_id": "enterprise_rate_card_id",
    "starting_at": "2025-01-01T00:00:00Z",
    "hierarchy_configuration": {
      "parent": {
        "contract_id": "disney_contract_id",
        "customer_id": "disney_parent_id"
      },
      "payer": "SELF",
      "usage_statement_behavior": "SEPARATE"
    }
  }'

# ESPN contract - pays for own overages
curl -X POST https://api.metronome.com/v1/contracts/create \
  -H "Authorization: Bearer $METRONOME_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "customer_id": "espn_customer_id",
    "name": "ESPN - Disney Subsidiary",
    "rate_card_id": "enterprise_rate_card_id",
    "starting_at": "2025-01-01T00:00:00Z",
    "hierarchy_configuration": {
      "parent": {
        "contract_id": "disney_contract_id",
        "customer_id": "disney_parent_id"
      },
      "payer": "SELF",
      "usage_statement_behavior": "SEPARATE"
    }
  }'
Dans cette configuration :
  • Tous les enfants puisent dans l’engagement de 10 M$ de Disney
  • Chaque enfant paie ses propres dépassements une fois l’engagement partagé épuisé
  • Chaque enfant reçoit ses propres factures

Exemple 2 : Le parent paie avec facturation consolidée

Dans ce scénario, chaque filiale a ses propres engagements, mais Disney reçoit et paie toutes les factures avec la consommation consolidée en un seul relevé. Créez le contrat parent avec la consolidation des factures activée :
curl -X POST https://api.metronome.com/v1/contracts/create \
  -H "Authorization: Bearer $METRONOME_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "customer_id": "disney_parent_id",
    "name": "Disney Master Agreement - Consolidated Billing",
    "rate_card_id": "enterprise_rate_card_id",
    "starting_at": "2025-01-01T00:00:00Z",
    "hierarchy_configuration": {
      "parent_behavior": {
        "invoice_consolidation_type": "CONCATENATE"
      }
    },
    "commits": [{
      "type": "prepaid",
      "product_id": "prepaid_commit_product_id",
      "access_schedule": {
        "schedule_items": [{
          "amount": 200000,
          "starting_at": "2025-01-01T00:00:00Z",
          "ending_before": "2026-01-01T00:00:00Z"
        }]
      },
      "invoice_schedule": {
        "schedule_items": [{
          "amount": 200000,
          "timestamp": "2025-01-01T00:00:00Z"
        }]
      },
      "hierarchy_configuration": {
        "child_access": {
          "type": "none"
        }
      }
    }]
  }'
Créez les contrats enfants avec le parent comme payeur :
# Hulu with its own commit, parent pays
curl -X POST https://api.metronome.com/v1/contracts/create \
  -H "Authorization: Bearer $METRONOME_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "customer_id": "hulu_customer_id",
    "name": "Hulu - Disney Subsidiary",
    "rate_card_id": "enterprise_rate_card_id",
    "starting_at": "2025-01-01T00:00:00Z",
    "hierarchy_configuration": {
      "parent": {
        "contract_id": "disney_contract_id",
        "customer_id": "disney_parent_id"
      },
      "payer": "PARENT",
      "usage_statement_behavior": "CONSOLIDATE"
    },
    "commits": [{
      "type": "prepaid",
      "product_id": "prepaid_commit_product_id",
      "access_schedule": {
        "schedule_items": [{
          "amount": 500000,
          "starting_at": "2025-01-01T00:00:00Z",
          "ending_before": "2026-01-01T00:00:00Z"
        }]
      },
      "invoice_schedule": {
        "schedule_items": [{
          "amount": 500000,
          "timestamp": "2025-01-01T00:00:00Z"
        }]
      }
    }]
  }'
Dans cette configuration :
  • Disney a son propre engagement de 200 K$ auquel lui seul peut accéder (child_access: “none”)
  • Hulu a son propre engagement de 500 K$ auquel lui seul peut accéder
  • Disney paie tous les engagements y compris la facture de l’engagement de 500 K$ de Hulu
  • Disney reçoit une seule facture consolidée de relevé de consommation contenant la consommation de Disney et celle de Hulu avec des éléments de ligne indiquant le client et le contrat d’origine
  • Toutes les factures sont acheminées vers le fournisseur de facturation de Disney
Remarque : même dans un scénario de consolidation, tous les enfants et le parent auront toujours leurs propres relevés de consommation autonomes générés par Metronome qui seront visibles dans l’interface, l’API et l’export de données Metronome. Ces relevés de consommation autonomes ne seront cependant pas envoyés aux fournisseurs de facturation en aval lorsque la consolidation est configurée pour se produire. Vous voudrez peut-être filtrer le relevé de consommation parent autonome lorsque vous présentez le détail des dépenses au parent dans votre interface afin de ne pas compter en double les dépenses du parent entre les factures autonomes et consolidées.

Exemple 3 : Accès sélectif aux engagements avec tarification distincte

Dans ce scénario, Disney a plusieurs engagements avec un accès sélectif, et chaque filiale a une tarification personnalisée. Créez le contrat parent :
curl -X POST https://api.metronome.com/v1/contracts/create \
  -H "Authorization: Bearer $METRONOME_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "customer_id": "disney_parent_id",
    "name": "Disney Master Agreement - Selective Access",
    "rate_card_id": "enterprise_rate_card_id",
    "starting_at": "2025-01-01T00:00:00Z"
  }'
Créez les contrats enfants avec des surcharges de tarification :
# Hulu with 20% discount on cdn data transfer
curl -X POST https://api.metronome.com/v1/contracts/create \
  -H "Authorization: Bearer $METRONOME_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "customer_id": "hulu_customer_id",
    "name": "Hulu - Disney Subsidiary",
    "rate_card_id": "streaming_rate_card_id",
    "starting_at": "2025-01-01T00:00:00Z",
    "hierarchy_configuration": {
      "parent": {
        "contract_id": "disney_contract_id",
        "customer_id": "disney_parent_id"
      },
      "payer": "SELF",
      "usage_statement_behavior": "SEPARATE"
    },
    "overrides": [{
      "product_id": "cdn_data_transfer_gb_id",
      "multiplier": 0.8
    }]
  }'

# ABC (no access to premium commit)
curl -X POST https://api.metronome.com/v1/contracts/create \
  -H "Authorization: Bearer $METRONOME_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "customer_id": "abc_customer_id",
    "name": "ABC - Disney Subsidiary",
    "rate_card_id": "broadcast_rate_card_id",
    "starting_at": "2025-01-01T00:00:00Z",
    "hierarchy_configuration": {
      "parent": {
        "contract_id": "disney_contract_id",
        "customer_id": "disney_parent_id"
      },
      "payer": "SELF",
      "usage_statement_behavior": "SEPARATE"
    }
  }'
Ajoutez des engagements partagés avec accès sélectif au contrat parent :
curl -X POST https://api.metronome.com/v2/contracts/edit \
  -H "Authorization: Bearer $METRONOME_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "customer_id": "disney_parent_id",
    "contract_id": "disney_contract_id",
    "starting_at": "2025-01-01T00:00:00Z",
    "add_commits": [{
      "type": "prepaid",
      "name": "Premium Infrastructure Commit - Streaming Only",
      "product_id": "prepaid_commit_product_id",
      "applicable_product_ids": ["premium_cdn_transfer_gb"],
      "access_schedule": {
        "schedule_items": [{
          "amount": 5000000,
          "starting_at": "2025-01-01T00:00:00Z",
          "ending_before": "2026-01-01T00:00:00Z"
        }]
      },
      "invoice_schedule": {
        "schedule_items": [{
          "amount": 5000000,
          "timestamp": "2025-01-01T00:00:00Z"
        }]
      },
      "hierarchy_configuration": {
        "child_access": {
          "type": "contract_ids",
          "contract_ids": ["hulu_contract_id", "espn_contract_id"]
        }
      }
    }, {
      "type": "prepaid",
      "name": "Standard Infrastructure Commit - All Properties",
      "product_id": "prepaid_commit_product_id_2",
      "applicable_product_ids": ["standard_cdn_transfer_gb"],
      "access_schedule": {
        "schedule_items": [{
          "amount": 2000000,
          "starting_at": "2025-01-01T00:00:00Z",
          "ending_before": "2026-01-01T00:00:00Z"
        }]
      },
      "invoice_schedule": {
        "schedule_items": [{
          "amount": 2000000,
          "timestamp": "2025-01-01T00:00:00Z"
        }]
      },
      "hierarchy_configuration": {
        "child_access": {
          "type": "all"
        }
      }
    }]
  }'
Dans cette configuration :
  • Grilles tarifaires différentes : chaque filiale utilise une grille tarifaire adaptée à son activité (streaming vs diffusion) avec les produits et tarifs appropriés
  • Accès sélectif aux engagements : Hulu et ESPN peuvent accéder aux engagements premium et standard, tandis qu’ABC n’accède qu’à l’engagement standard
  • Tarification spécifique au contrat : Hulu obtient 20 % de réduction sur le Go de transfert de données CDN lors de la consommation de l’engagement premium ou du paiement des dépassements
  • Facturation individuelle : chaque filiale paie ses propres dépassements et maintient des configurations de facturation distinctes

Visualiser les relations hiérarchiques

Obtenir le contrat avec les détails de la hiérarchie

Récupérez les informations complètes de hiérarchie pour n’importe quel contrat :
curl -X POST https://api.metronome.com/v2/contracts/get \
  -H "Authorization: Bearer $METRONOME_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "customer_id": "disney_parent_id",
    "contract_id": "disney_contract_id"
  }'
Les contrats parents affichent leurs enfants :
{
  "hierarchy_configuration": {
    "parent_behavior": {
      "invoice_consolidation_type": "CONCATENATE"
    },
    "children": [{
      "contract_id": "hulu_contract_id",
      "customer_id": "hulu_customer_id"
    }, {
      "contract_id": "espn_contract_id",
      "customer_id": "espn_customer_id"
    }]
  }
}

Afficher les factures consolidées

Lorsque la consolidation est configurée, les factures parent incluent toute la consommation des filiales :
curl -X POST https://api.metronome.com/v1/invoices/get \
  -H "Authorization: Bearer $METRONOME_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "customer_id": "disney_parent_id",
    "invoice_id": "consolidated_invoice_id"
  }'
La réponse inclut les détails d’origine pour chaque élément de ligne :
{
  "type": "USAGE_CONSOLIDATED",
  "constituent_invoices": [
    {"invoice_id": "parent_invoice", "customer_id": "disney_parent_id", "contract_id": "disney_contract_id"},
    {"invoice_id": "hulu_invoice", "customer_id": "hulu_customer_id", "contract_id": "hulu_contract_id"},
    {"invoice_id": "espn_invoice", "customer_id": "espn_customer_id", "contract_id": "espn_contract_id"}
  ],
  "line_items": [{
    "type": "usage",
    "amount": 15000,
    "product_id": "streaming_compute_id",
    "origin": {
      "invoice_id": "hulu_invoice",
      "line_item_id": "hulu_line_item_id",
      "contract_id": "hulu_contract_id",
      "customer_id": "hulu_customer_id"
    }
  }]
}

Ventiler les factures consolidées

Analysez la répartition de la consommation à travers la hiérarchie en utilisant les ventilations de facture. C’est particulièrement utile pour comprendre les modèles de dépenses entre filiales.
curl -X POST https://api.metronome.com/v1/invoices/breakdown \
  -H "Authorization: Bearer $METRONOME_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "customer_id": "disney_parent_id",
    "invoice_id": "consolidated_invoice_id",
    "breakdown_start_timestamp": "2025-01-01T00:00:00Z",
    "breakdown_end_timestamp": "2025-01-02T00:00:00Z"
  }'
La réponse de ventilation pour les factures consolidées inclut les informations d’origine pour chaque élément de ligne :
{
  "breakdown_start_timestamp": "2025-01-01T00:00:00Z",
  "breakdown_end_timestamp": "2025-01-02T00:00:00Z",
  "id": "consolidated_invoice_id",
  "customer_id": "disney_parent_id",
  "type": "USAGE_CONSOLIDATED",
  "line_items": [
    {
      "amount": 15000,
      "product_id": "cdn_data_transfer_gb_id",
      "quantity": 1500,
      "unit_price": 10,
      "timestamp": "2025-01-01T08:00:00Z",
      "origin": {
        "invoice_id": "hulu_usage_invoice_123",
        "contract_id": "hulu_contract_id",
        "customer_id": "hulu_customer_id"
      }
    },
    {
      "amount": 8000,
      "product_id": "cdn_data_transfer_gb_id",
      "quantity": 800,
      "unit_price": 10,
      "timestamp": "2025-01-01T14:00:00Z",
      "origin": {
        "invoice_id": "espn_usage_invoice_456",
        "contract_id": "espn_contract_id",
        "customer_id": "espn_customer_id"
      }
    },
    {
      "amount": 5000,
      "product_id": "cdn_data_transfer_gb_id",
      "quantity": 500,
      "unit_price": 10,
      "timestamp": "2025-01-01T20:00:00Z",
      "origin": {
        "invoice_id": "disney_usage_invoice_789",
        "contract_id": "disney_contract_id",
        "customer_id": "disney_parent_id"
      }
    }
  ]
}
Utilisez les informations d’origine pour :
  • Analyser les dépenses par filiale : regroupez les éléments de ligne par origin.customer_id pour voir la consommation de chaque entité
  • Suivre les performances des contrats : utilisez origin.contract_id pour mesurer la consommation par rapport à des contrats spécifiques

Bonnes pratiques

Concevez votre hiérarchie avec soin
  • Cartographiez les relations organisationnelles avant la mise en œuvre
  • Considérez les flux de paiement et les exigences de routage des factures
Définissez des règles d’accès aux engagements claires
  • Utilisez type: "all" pour les ressources partagées à l’échelle de l’organisation
  • Utilisez type: "contract_ids" pour un accès spécifique au département ou au niveau
Surveillez les modèles de consommation
  • Examinez les factures consolidées pour comprendre la répartition de la consommation
  • Utilisez les ventilations de facture pour analyser les dépenses par filiale
Coordonnez le calendrier des contrats
  • Alignez les dates de début des contrats lorsque cela est possible
  • Planifiez les stratégies de renouvellement à travers la hiérarchie
  • Considérez les implications du report d’engagements pour les renouvellements

Dépannage

L’enfant ne peut pas accéder à l’engagement parent
  • Vérifiez que la configuration child_access de l’engagement parent inclut l’enfant
  • Assurez-vous que le contrat enfant référence correctement l’identifiant de contrat parent
  • Confirmez que les deux contrats sont actifs durant la même période
Les factures enfants n’apparaissent pas sur la facture consolidée :
  • Vérifiez que le contrat parent a invoice_consolidation_type: "CONCATENATE"
  • Vérifiez que le contrat enfant a usage_statement_behavior: "CONSOLIDATE"
  • Assurez-vous que la période de service de consommation de l’enfant est bornée par la période de service du parent
    • Exemple : si la facture parent couvre du 1er au 31 janvier et que la facture enfant couvre du 5 au 31 janvier, la consommation de l’enfant se consolidera. Mais si la facture enfant couvre du 28 décembre au 28 janvier, la consommation de l’enfant ne se consolidera pas
  • Confirmez que les dates d’émission s’alignent (même jour) entre les factures parent et enfant
Impossible de configurer la consolidation avec auto-paiement :
  • usage_statement_behavior: "CONSOLIDATE" nécessite payer: "PARENT"
  • Les contrats enfants payant eux-mêmes doivent utiliser usage_statement_behavior: "SEPARATE"

Limitations actuelles

  1. Profondeur de hiérarchie : un seul niveau pris en charge (parent-enfant) ; pas de petits-enfants ou de hiérarchies à plusieurs niveaux
  2. Taille de la hiérarchie : maximum 10 nœuds actifs pris en charge dans une hiérarchie
  3. Fournisseurs de facturation : seul Stripe est pris en charge ; la facturation Marketplace est à venir
  4. Structure du contrat : chaque client Metronome nécessite son propre contrat — aucun contrat unique ne peut s’appliquer automatiquement à tous les enfants
  5. Tarification de la consommation : la consommation de chaque enfant est tarifée séparément en fonction de son contrat. La tarification par paliers du parent ne s’applique qu’à la consommation directe du parent, pas à la consommation agrégée des enfants
  6. Portée des alertes :
    • Les alertes de solde d’engagement sur les contrats parents ne se déclenchent pas automatiquement lorsque les enfants consomment l’engagement
    • Les alertes sont évaluées lorsque le parent reçoit des données de consommation
    • Si seuls les enfants reçoivent de la consommation, les alertes parent peuvent être retardées jusqu’à l’arrivée de la consommation parent
    • De plus, les alertes de dépenses parent n’incluent que celles du parent
  7. Tableaux de bord intégrables : les tableaux de bord de factures et d’engagements ne fonctionnent pas avec les clients ayant un contrat dans une hiérarchie