• Messages
  • Agents gérés
  • Administration
Search...
⌘K
Premiers pas
Introduction à ClaudeDémarrage rapide
Développer avec Claude
Aperçu des fonctionnalitésUtilisation de l'API MessagesRaisons d'arrêt et repliRefus et repliCrédit de repli
Capacités du modèle
Réflexion étendueRéflexion adaptativeEffortBudgets de tâches (bêta)Mode rapide (aperçu de recherche)Sorties structuréesCitationsMessages en streamingTraitement par lotsRésultats de rechercheRefus en streamingPrise en charge multilingueEmbeddings
Outils
AperçuFonctionnement de l'utilisation d'outilsTutoriel : Créer un agent utilisant des outilsDéfinir des outilsGérer les appels d'outilsUtilisation d'outils en parallèleTool Runner (SDK)Utilisation d'outils stricteUtilisation d'outils avec mise en cache des promptsOutils serveurDépannageOutil de recherche webOutil de récupération webOutil d'exécution de codeOutil conseillerOutil de mémoireOutil BashOutil d'utilisation de l'ordinateurOutil d'éditeur de texte
Infrastructure des outils
Référence des outilsGérer le contexte des outilsCombinaisons d'outilsRecherche d'outilsAppel d'outils programmatiqueStreaming d'outils granulaire
Gestion du contexte
Fenêtres de contexteCompactageÉdition du contexteMise en cache des promptsMessages système en cours de conversationCréer un mode d'orchestrationDiagnostics de cache (bêta)Comptage de tokens
Travailler avec des fichiers
API FilesPrise en charge des PDFImages et vision
Compétences
AperçuDémarrage rapideBonnes pratiquesCompétences pour l'entrepriseCompétences dans l'API
MCP
Serveurs MCP distantsConnecteur MCP
Claude sur les plateformes cloud
Amazon BedrockAmazon Bedrock (ancienne version)Claude Platform sur AWSMicrosoft FoundryVertex AI
Log in
Traitement par lots
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...

Solutions

  • AI agents
  • Code modernization
  • Coding
  • Customer support
  • Education
  • Financial services
  • Government
  • Life sciences

Partners

  • Amazon Bedrock
  • Google Cloud's Vertex AI

Learn

  • Blog
  • Courses
  • Use cases
  • Connectors
  • Customer stories
  • Engineering at Anthropic
  • Events
  • Powered by Claude
  • Service partners
  • Startups program

Company

  • Anthropic
  • Careers
  • Economic Futures
  • Research
  • News
  • Responsible Scaling Policy
  • Security and compliance
  • Transparency

Learn

  • Blog
  • Courses
  • Use cases
  • Connectors
  • Customer stories
  • Engineering at Anthropic
  • Events
  • Powered by Claude
  • Service partners
  • Startups program

Help and security

  • Availability
  • Status
  • Support
  • Discord

Terms and policies

  • Privacy policy
  • Responsible disclosure policy
  • Terms of service: Commercial
  • Terms of service: Consumer
  • Usage policy
Messages/Capacités du modèle

Traitement par lots

Le traitement par lots est une approche puissante pour gérer efficacement de grands volumes de requêtes. Au lieu de traiter les requêtes une par une avec des réponses immédiates, le traitement par lots vous permet de soumettre plusieurs requêtes ensemble pour un traitement asynchrone. Ce modèle est particulièrement utile lorsque :

  • Vous devez traiter de grands volumes de données
  • Des réponses immédiates ne sont pas requises
  • Vous souhaitez optimiser la rentabilité
  • Vous effectuez des évaluations ou des analyses à grande échelle

L'API Message Batches est la première implémentation de ce modèle par Anthropic.

Cette fonctionnalité n'est pas éligible à la Zero Data Retention (ZDR). Les données sont conservées conformément à la politique de conservation standard de la fonctionnalité.


API Message Batches

L'API Message Batches est un moyen puissant et économique de traiter de manière asynchrone de grands volumes de requêtes Messages. Cette approche est bien adaptée aux tâches qui ne nécessitent pas de réponses immédiates, la plupart des lots étant terminés en moins d'une heure tout en réduisant les coûts de 50 % et en augmentant le débit.

Vous pouvez explorer directement la référence de l'API, en complément de ce guide.

Fonctionnement de l'API Message Batches

Lorsque vous envoyez une requête à l'API Message Batches :

  1. Le système crée un nouveau Message Batch avec les requêtes Messages fournies.
  2. Le lot est ensuite traité de manière asynchrone, chaque requête étant gérée indépendamment.
  3. Vous pouvez interroger l'état du lot et récupérer les résultats une fois le traitement terminé pour toutes les requêtes.

Cela est particulièrement utile pour les opérations en masse qui ne nécessitent pas de résultats immédiats, telles que :

  • Évaluations à grande échelle : traitez efficacement des milliers de cas de test.
  • Modération de contenu : analysez de grands volumes de contenu généré par les utilisateurs de manière asynchrone.
  • Analyse de données : générez des insights ou des résumés pour de grands ensembles de données.
  • Génération de contenu en masse : créez de grandes quantités de texte à diverses fins (par exemple, descriptions de produits, résumés d'articles).

Limitations des lots

  • Un Message Batch est limité à 100 000 requêtes Message ou à 256 Mo, selon la limite atteinte en premier.
  • Le système traite chaque lot aussi rapidement que possible, la plupart des lots étant terminés en moins d'une heure. Vous pouvez accéder aux résultats du lot lorsque tous les messages sont terminés ou après 24 heures, selon la première éventualité. Les lots expirent si le traitement n'est pas terminé dans les 24 heures.
  • Les résultats des lots sont disponibles pendant 29 jours après leur création. Après cela, vous pouvez toujours consulter le lot, mais ses résultats ne seront plus disponibles au téléchargement.
  • Les lots sont limités à un Workspace. Vous pouvez consulter tous les lots (et leurs résultats) qui ont été créés dans le Workspace auquel appartient votre clé API.
  • Les limites de débit s'appliquent à la fois aux requêtes HTTP de l'API Batches et au nombre de requêtes dans un lot en attente de traitement. Consultez Limites de débit de l'API Message Batches. De plus, le traitement peut être ralenti en fonction de la demande actuelle et de votre volume de requêtes. Dans ce cas, vous pourriez voir davantage de requêtes expirer après 24 heures.
  • En raison du débit élevé et du traitement concurrent, les lots peuvent légèrement dépasser la limite de dépenses configurée pour votre Workspace.
  • Chaque requête groupée doit avoir un max_tokens d'au moins . () n'est pas pris en charge dans un lot, car une entrée de cache éphémère écrite pendant le traitement du lot expirerait probablement avant l'exécution de la requête suivante.

Modèles pris en charge

Tous les modèles actifs prennent en charge l'API Message Batches.

Ce qui peut être traité par lots

Presque toutes les requêtes que vous pouvez effectuer auprès de l'API Messages peuvent être incluses dans un lot. Cela comprend :

  • Vision
  • Utilisation d'outils, y compris tous les outils serveur (recherche web, récupération web, exécution de code, connecteurs MCP, advisor et recherche d'outils)
  • Messages système
  • Conversations multi-tours
  • Réflexion étendue
  • La plupart des fonctionnalités bêta

Étant donné que chaque requête du lot est traitée indépendamment, vous pouvez mélanger différents types de requêtes au sein d'un même lot.

Un petit nombre de paramètres de l'API Messages ne sont pas pris en charge dans les requêtes par lots. L'inclusion de l'un d'entre eux renvoie une erreur de validation :

ParamètreRaison
stream: trueLes résultats des lots sont renvoyés sous forme de fichier unique, pas de flux.
speed (Mode rapide)Le mode rapide ajuste la latence synchrone, ce qui ne s'applique pas au traitement asynchrone par lots.
store / previous_thread_event_id (Threads)Les threads sont avec état ; les requêtes par lots ne le sont pas.
cache_hint / context_hintCes indications de routage s'appliquent uniquement à la planification des requêtes synchrones.
max_tokens: 0Voir Limitations des lots.
research_preview_2026_02: "active"

Étant donné que les lots peuvent prendre plus de 5 minutes à traiter, envisagez d'utiliser la durée de cache d'une heure avec la mise en cache des prompts pour obtenir de meilleurs taux de succès du cache lors du traitement de lots avec un contexte partagé.


Tarification

L'API Batches offre des économies de coûts significatives. Toute l'utilisation est facturée à 50 % des prix standard de l'API.

ModèleEntrée par lotSortie par lot
Claude Fable 55 $ / MTok25 $ / MTok
Claude Mythos 5 (disponibilité limitée)5 $ / MTok25 $ / MTok
Claude Opus 4.82,50 $ / MTok12,50 $ / MTok
Claude Opus 4.72,50 $ / MTok12,50 $ / MTok
Claude Opus 4.62,50 $ / MTok12,50 $ / MTok
Claude Opus 4.52,50 $ / MTok12,50 $ / MTok
Claude Opus 4.1 (obsolète)7,50 $ / MTok37,50 $ / MTok
Claude Opus 4 (obsolète)7,50 $ / MTok

Comment utiliser l'API Message Batches

Préparer et créer votre lot

Un Message Batch est composé d'une liste de requêtes pour créer un Message. La forme d'une requête individuelle comprend :

  • Un custom_id unique pour identifier la requête Messages. Doit comporter de 1 à 64 caractères et contenir uniquement des caractères alphanumériques, des tirets et des traits de soulignement (correspondant à ^[a-zA-Z0-9_-]{1,64}$).
  • Un objet params avec les paramètres standard de l'API Messages

Vous pouvez créer un lot en passant cette liste dans le paramètre requests :

Dans cet exemple, deux requêtes distinctes sont regroupées pour un traitement asynchrone. Chaque requête possède un custom_id unique et contient les paramètres standard que vous utiliseriez pour un appel à l'API Messages.

Testez vos requêtes par lots avec l'API Messages

La validation de l'objet params pour chaque requête de message est effectuée de manière asynchrone, et les erreurs de validation sont renvoyées une fois le traitement de l'ensemble du lot terminé. Vous pouvez vous assurer que vous construisez correctement votre entrée en vérifiant d'abord la forme de votre requête avec l'API Messages.

Lorsqu'un lot est créé pour la première fois, la réponse aura un statut de traitement in_progress.

Output
{
  "id": "msgbatch_01HkcTjaV5uDC8jWR4ZsDV8d",
  "type": "message_batch",
  "processing_status": "in_progress",
  "request_counts": {
    "processing": 2,
    "succeeded": 0,
    "errored": 0,
    "canceled": 0,
    "expired": 0
  },
  "ended_at": null,
  "created_at": "2024-09-24T18:37:24.100435Z",
  "expires_at": "2024-09-25T18:37:24.100435Z",
  "cancel_initiated_at": null,
  "results_url": null
}

Suivi de votre lot

Le champ processing_status du Message Batch indique l'étape de traitement dans laquelle se trouve le lot. Il commence par in_progress, puis passe à ended une fois que toutes les requêtes du lot ont terminé leur traitement et que les résultats sont prêts. Vous pouvez surveiller l'état de votre lot en visitant la Console, ou en utilisant le point de terminaison de récupération.

Interrogation pour la fin du Message Batch

Pour interroger un Message Batch, vous aurez besoin de son id, qui est fourni dans la réponse lors de la création d'un lot ou en listant les lots. Vous pouvez implémenter une boucle d'interrogation qui vérifie périodiquement l'état du lot jusqu'à ce que le traitement soit terminé :

Lister tous les Message Batches

Vous pouvez lister tous les Message Batches de votre Workspace en utilisant le point de terminaison de liste. L'API prend en charge la pagination, récupérant automatiquement les pages supplémentaires selon les besoins :

Récupération des résultats du lot

Une fois le traitement du lot terminé, chaque requête Messages du lot a un résultat. Il existe 4 types de résultats :

Type de résultatDescription
succeededLa requête a réussi. Inclut le résultat du message.
erroredLa requête a rencontré une erreur et aucun message n'a été créé. Les erreurs possibles incluent les requêtes invalides et les erreurs internes du serveur. Vous ne serez pas facturé pour ces requêtes.
canceledL'utilisateur a annulé le lot avant que cette requête ne puisse être envoyée au modèle. Vous ne serez pas facturé pour ces requêtes.
expiredLe lot a atteint son expiration de 24 heures avant que cette requête ne puisse être envoyée au modèle. Vous ne serez pas facturé pour ces requêtes.

Vous verrez un aperçu de vos résultats avec le request_counts du lot, qui indique combien de requêtes ont atteint chacun de ces quatre états.

Les résultats du lot sont disponibles au téléchargement via la propriété results_url du Message Batch et, si les permissions de l'organisation le permettent, dans la Console. En raison de la taille potentiellement importante des résultats, il est recommandé de diffuser les résultats plutôt que de les télécharger tous en une seule fois.

Les résultats sont au format .jsonl, où chaque ligne est un objet JSON valide représentant le résultat d'une seule requête dans le Message Batch. Pour chaque résultat diffusé, vous pouvez effectuer une action différente en fonction de son custom_id et de son type de résultat. Voici un exemple d'ensemble de résultats :

.jsonl file
{"custom_id":"my-second-request","result":{"type":"succeeded","message":{"id":"msg_014VwiXbi91y3JMjcpyGBHX5","type":"message","role":"assistant","model":"claude-opus-4-8","content":[{"type":"text","text":"Hello again! It's nice to see you. How can I assist you today? Is there anything specific you'd like to chat about or any questions you have?"}],"stop_reason":"end_turn","stop_sequence":null,"usage":{"input_tokens":11,"output_tokens":36}}}}
{"custom_id":"my-first-request","result":{"type":"succeeded","message":{"id":"msg_01FqfsLoHwgeFbguDgpz48m7","type":"message","role":"assistant","model":"claude-opus-4-8","content":[{"type":"text","text":"Hello! How can I assist you today? Feel free to ask me any questions or let me know if there's anything you'd like to chat about."}],"stop_reason":"end_turn","stop_sequence":null,"usage":{"input_tokens":10,"output_tokens":34}}}}

Si votre résultat comporte une erreur, son result.error sera défini selon la forme d'erreur standard.

Les résultats du lot peuvent ne pas correspondre à l'ordre d'entrée

Les résultats du lot peuvent être renvoyés dans n'importe quel ordre et peuvent ne pas correspondre à l'ordre des requêtes lors de la création du lot. Dans l'exemple ci-dessus, le résultat de la deuxième requête du lot est renvoyé avant la première. Pour faire correspondre correctement les résultats à leurs requêtes correspondantes, utilisez toujours le champ custom_id.

Annulation d'un Message Batch

Vous pouvez annuler un Message Batch en cours de traitement en utilisant le point de terminaison d'annulation. Immédiatement après l'annulation, le processing_status d'un lot sera canceling. Vous pouvez utiliser la même technique d'interrogation décrite ci-dessus pour attendre que l'annulation soit finalisée. Les lots annulés se terminent avec un statut ended et peuvent contenir des résultats partiels pour les requêtes qui ont été traitées avant l'annulation.

La réponse affichera le lot dans un état canceling :

Output
{
  "id": "msgbatch_013Zva2CMHLNnXjNJJKqJ2EF",
  "type": "message_batch",
  "processing_status": "canceling",
  "request_counts": {
    "processing": 2,
    "succeeded": 0,
    "errored": 0,
    "canceled": 0,
    "expired": 0
  },
  "ended_at": null,
  "created_at": "2024-09-24T18:37:24.100435Z",
  "expires_at": "2024-09-25T18:37:24.100435Z",
  "cancel_initiated_at": "2024-09-24T18:39:03.114875Z",
  "results_url": null
}

Utilisation de la mise en cache des prompts avec les Message Batches

L'API Message Batches prend en charge la mise en cache des prompts, ce qui vous permet de réduire potentiellement les coûts et le temps de traitement des requêtes par lots. Les remises tarifaires de la mise en cache des prompts et des Message Batches peuvent se cumuler, offrant des économies de coûts encore plus importantes lorsque les deux fonctionnalités sont utilisées ensemble. Cependant, étant donné que les requêtes par lots sont traitées de manière asynchrone et concurrente, les succès de cache sont fournis dans la mesure du possible. Les utilisateurs constatent généralement des taux de succès de cache allant de 30 % à 98 %, selon leurs modèles de trafic.

Pour maximiser la probabilité de succès de cache dans vos requêtes par lots :

  1. Incluez des blocs cache_control identiques dans chaque requête Message de votre lot
  2. Maintenez un flux constant de requêtes pour empêcher les entrées de cache d'expirer après leur durée de vie de 5 minutes
  3. Structurez vos requêtes pour partager autant de contenu mis en cache que possible

Exemple d'implémentation de la mise en cache des prompts dans un lot :

Dans cet exemple, les deux requêtes du lot incluent des messages système identiques et le texte intégral d'Orgueil et Préjugés marqué avec cache_control pour augmenter la probabilité de succès de cache.

Outils serveur et boucle agentique

Tous les outils serveur (recherche web, récupération web, exécution de code, connecteurs MCP, advisor et recherche d'outils) fonctionnent dans les requêtes par lots. Le worker de lot exécute la même boucle agentique côté serveur que l'API Messages synchrone.

Comme il n'y a pas de connexion ouverte à maintenir, la boucle de lot exécute plus d'itérations par tour qu'une requête synchrone avant de renvoyer stop_reason: "pause_turn". Si un résultat de lot revient avec pause_turn, le tour n'est pas terminé ; vous pouvez le poursuivre en soumettant le contenu assistant mis en pause dans une requête de suivi (par lot ou synchrone) exactement comme indiqué dans le modèle de continuation pause_turn.

Le worker de lot limite également web_search par organisation afin que le traitement par lots hautement concurrent n'épuise pas la limite de débit de recherche web de votre organisation. Le lot réessaie automatiquement les requêtes limitées ; vous n'avez pas besoin de gérer cela vous-même, mais les très grands lots de recherche web peuvent prendre plus de temps à se terminer.

Sortie étendue (bêta)

L'en-tête bêta output-300k-2026-03-24 augmente le plafond de max_tokens à 300 000 pour les requêtes par lots utilisant Claude Opus 4.8, Claude Opus 4.7, Claude Opus 4.6 ou Claude Sonnet 4.6. Incluez l'en-tête pour générer des sorties bien plus longues que la limite standard (64k à 128k selon le modèle) en un seul tour.

La sortie étendue est disponible uniquement sur l'API Message Batches, pas sur l'API Messages synchrone. Elle est prise en charge sur l'API Claude et Claude Platform sur AWS, et n'est actuellement pas disponible sur Amazon Bedrock, Vertex AI ou Microsoft Foundry.

Utilisez la sortie étendue pour la génération de contenu long tel que des brouillons de la longueur d'un livre et de la documentation technique, l'extraction exhaustive de données structurées, de grands échafaudages de génération de code et de longues chaînes de raisonnement.

Une seule génération de 300k tokens peut prendre plus d'une heure à se terminer, alors planifiez vos soumissions de lots en tenant compte de la fenêtre de traitement de 24 heures. La tarification standard des lots (50 % des prix standard de l'API) s'applique.

Bonnes pratiques pour un traitement par lots efficace

Pour tirer le meilleur parti de l'API Batches :

  • Surveillez régulièrement l'état du traitement des lots et implémentez une logique de nouvelle tentative appropriée pour les requêtes échouées.
  • Utilisez des valeurs custom_id significatives pour faire correspondre facilement les résultats aux requêtes, car l'ordre n'est pas garanti.
  • Envisagez de diviser les très grands ensembles de données en plusieurs lots pour une meilleure gestion.
  • Effectuez un test à blanc d'une forme de requête unique avec l'API Messages pour éviter les erreurs de validation.

Résolution des problèmes courants

Si vous rencontrez un comportement inattendu :

  • Vérifiez que la taille totale de la requête de lot ne dépasse pas 256 Mo. Si la taille de la requête est trop importante, vous pourriez obtenir une erreur 413 request_too_large.
  • Vérifiez que vous utilisez des modèles pris en charge pour toutes les requêtes du lot.
  • Assurez-vous que chaque requête du lot possède un custom_id unique.
  • Assurez-vous qu'il s'est écoulé moins de 29 jours depuis l'heure created_at du lot (et non l'heure ended_at du traitement). Si plus de 29 jours se sont écoulés, les résultats ne seront plus consultables.
  • Confirmez que le lot n'a pas été annulé.

Notez que l'échec d'une requête dans un lot n'affecte pas le traitement des autres requêtes.


Stockage des lots et confidentialité

  • Isolation par Workspace : les lots sont isolés dans le Workspace dans lequel ils sont créés. Ils ne sont accessibles que par les clés API associées à ce Workspace, ou par les utilisateurs ayant la permission de consulter les lots du Workspace dans la Console.

  • Disponibilité des résultats : les résultats des lots sont disponibles pendant 29 jours après la création du lot, ce qui laisse amplement le temps pour la récupération et le traitement.


Conservation des données

Le traitement par lots stocke les données de requête et de réponse pendant jusqu'à 29 jours après la création du lot. Vous pouvez supprimer un lot de messages à tout moment après le traitement en utilisant le point de terminaison DELETE /v1/messages/batches/{batch_id}. Pour supprimer un lot en cours, annulez-le d'abord. Le traitement asynchrone nécessite le stockage côté serveur des entrées et des sorties jusqu'à la fin du lot et la récupération des résultats.

Pour l'éligibilité ZDR sur toutes les fonctionnalités, consultez API et conservation des données.

FAQ

Was this page helpful?

  • Fonctionnement de l'API Message Batches
  • Limitations des lots
  • Modèles pris en charge
  • Ce qui peut être traité par lots
  • Tarification
  • Comment utiliser l'API Message Batches
  • Préparer et créer votre lot
  • Suivi de votre lot
  • Lister tous les Message Batches
  • Récupération des résultats du lot
  • Annulation d'un Message Batch
  • Utilisation de la mise en cache des prompts avec les Message Batches
  • Outils serveur et boucle agentique
  • Sortie étendue (bêta)
  • Bonnes pratiques pour un traitement par lots efficace
  • Résolution des problèmes courants
  • Stockage des lots et confidentialité
  • Conservation des données
  • FAQ
1
max_tokens: 0
préchauffage du cache
Le mode d'aperçu de recherche n'est pas disponible sur le chemin des lots.
37,50 $ / MTok
Claude Sonnet 4.61,50 $ / MTok7,50 $ / MTok
Claude Sonnet 4.51,50 $ / MTok7,50 $ / MTok
Claude Sonnet 4 (obsolète)1,50 $ / MTok7,50 $ / MTok
Claude Haiku 4.50,50 $ / MTok2,50 $ / MTok
Claude Haiku 3.5 (retiré, sauf sur Bedrock et Vertex AI)0,40 $ / MTok2 $ / MTok
from anthropic.types.message_create_params import MessageCreateParamsNonStreaming
from anthropic.types.messages.batch_create_params import Request

client = anthropic.Anthropic()

message_batch = client.messages.batches.create(
    requests=[
        Request(
            custom_id="my-first-request",
            params=MessageCreateParamsNonStreaming(
                model="claude-opus-4-8",
                max_tokens=1024,
                messages=[
                    {
                        "role": "user",
                        "content": "Hello, world",
                    }
                ],
            ),
        ),
        Request(
            custom_id="my-second-request",
            params=MessageCreateParamsNonStreaming(
                model="claude-opus-4-8",
                max_tokens=1024,
                messages=[
                    {
                        "role": "user",
                        "content": "Hi again, friend",
                    }
                ],
            ),
        ),
    ]
)

print(message_batch)
import time

client = anthropic.Anthropic()

MESSAGE_BATCH_ID = "msgbatch_01HkcTjaV5uDC8jWR4ZsDV8d"

message_batch = None
while True:
    message_batch = client.messages.batches.retrieve(MESSAGE_BATCH_ID)
    if message_batch.processing_status == "ended":
        break

    print(f"Batch {MESSAGE_BATCH_ID} is still processing...")
    time.sleep(60)
print(message_batch)
client = anthropic.Anthropic()

# Récupère automatiquement des pages supplémentaires selon les besoins.
for message_batch in client.messages.batches.list(limit=20):
    print(message_batch)
client = anthropic.Anthropic()

# Diffusez le fichier de résultats en blocs économes en mémoire, en les traitant un par un
for result in client.messages.batches.results(
    "msgbatch_01HkcTjaV5uDC8jWR4ZsDV8d",
):
    match result.result.type:
        case "succeeded":
            print(f"Success! {result.custom_id}")
        case "errored":
            if result.result.error.error.type == "invalid_request_error":
                # Le corps de la requête doit être corrigé avant de renvoyer la requête
                print(f"Validation error {result.custom_id}")
            else:
                # La requête peut être retentée directement
                print(f"Server error {result.custom_id}")
        case "expired":
            print(f"Request expired {result.custom_id}")
client = anthropic.Anthropic()

MESSAGE_BATCH_ID = "msgbatch_01HkcTjaV5uDC8jWR4ZsDV8d"

message_batch = client.messages.batches.cancel(
    MESSAGE_BATCH_ID,
)
print(message_batch)
from anthropic.types.message_create_params import MessageCreateParamsNonStreaming
from anthropic.types.messages.batch_create_params import Request

client = anthropic.Anthropic()

message_batch = client.messages.batches.create(
    requests=[
        Request(
            custom_id="my-first-request",
            params=MessageCreateParamsNonStreaming(
                model="claude-opus-4-8",
                max_tokens=1024,
                system=[
                    {
                        "type": "text",
                        "text": "You are an AI assistant tasked with analyzing literary works. Your goal is to provide insightful commentary on themes, characters, and writing style.\n",
                    },
                    {
                        "type": "text",
                        "text": "<the entire contents of Pride and Prejudice>",
                        "cache_control": {"type": "ephemeral"},
                    },
                ],
                messages=[
                    {
                        "role": "user",
                        "content": "Analyze the major themes in Pride and Prejudice.",
                    }
                ],
            ),
        ),
        Request(
            custom_id="my-second-request",
            params=MessageCreateParamsNonStreaming(
                model="claude-opus-4-8",
                max_tokens=1024,
                system=[
                    {
                        "type": "text",
                        "text": "You are an AI assistant tasked with analyzing literary works. Your goal is to provide insightful commentary on themes, characters, and writing style.\n",
                    },
                    {
                        "type": "text",
                        "text": "<the entire contents of Pride and Prejudice>",
                        "cache_control": {"type": "ephemeral"},
                    },
                ],
                messages=[
                    {
                        "role": "user",
                        "content": "Write a summary of Pride and Prejudice.",
                    }
                ],
            ),
        ),
    ]
)
from anthropic.types.beta.message_create_params import MessageCreateParamsNonStreaming
from anthropic.types.beta.messages.batch_create_params import Request

client = anthropic.Anthropic()

message_batch = client.beta.messages.batches.create(
    betas=["output-300k-2026-03-24"],
    requests=[
        Request(
            custom_id="long-form-request",
            params=MessageCreateParamsNonStreaming(
                model="claude-opus-4-8",
                max_tokens=300_000,
                messages=[
                    {
                        "role": "user",
                        "content": "Write a comprehensive technical guide to building distributed systems, covering architecture patterns, consistency models, fault tolerance, and operational best practices.",
                    }
                ],
            ),
        ),
    ],
)

print(message_batch)