Skip to content
Back to skills

Clade Webhooks Events

ASecurity

'Use Anthropic Message Batches for async bulk processing and event handling.

  • 2,719 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added September 21, 2026
ai-agentstypescriptpythonbashapi

Works with

  • claude code
  • cli
  • api

Security analysis

A100/100

Pro scans all 2 files and shows the line behind each finding

Scanned September 21, 2026

npx -y skills add jeremylongshore/claude-code-plugins-plus --skill clade-webhooks-events --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Clade Webhooks Events?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Clade Webhooks Events
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/jeremylongshore-clade-webhooks-events-596e1009/badge)](https://www.skillsdirectory.com/skills/jeremylongshore-clade-webhooks-events-596e1009)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: clade-webhooks-events
description: 'Use Anthropic Message Batches for async bulk processing and event handling.

  Use when working with webhooks-events patterns.

  Trigger with "anthropic batches", "claude batch api", "anthropic async",

  "bulk claude processing", "anthropic webhook".

  '
allowed-tools: Read, Write, Edit, Bash(curl:*)
version: 1.1.0
license: MIT
author: Jeremy Longshore <jeremy@intentsolutions.io>
tags:
- saas
- anthropic
- claude
- batches
- async
compatibility: Designed for Claude Code
---
# Anthropic Message Batches & Async Processing

## Overview

Anthropic doesn't have traditional webhooks. Instead, use **Message Batches** for async bulk processing — up to 10,000 requests per batch at 50% off, with a 24-hour processing SLA.

## Prerequisites

- Completed `clade-install-auth`
- Multiple prompts/documents to process in bulk
- Tolerance for async processing (results within 24 hours)

## Instructions

### Step 1: Create a Batch

```typescript
import Anthropic from '@claude-ai/sdk';

const client = new Anthropic();

const batch = await client.messages.batches.create({
  requests: documents.map((doc, i) => ({
    custom_id: `doc-${i}`,
    params: {
      model: 'claude-sonnet-4-20250514',
      max_tokens: 1024,
      messages: [{ role: 'user', content: `Summarize: ${doc.text}` }],
    },
  })),
});

console.log(`Batch ${batch.id} created — ${batch.request_counts.processing} processing`);
```

### Step 2: Poll for Completion

```typescript
async function waitForBatch(batchId: string): Promise<Anthropic.Messages.MessageBatch> {
  while (true) {
    const batch = await client.messages.batches.retrieve(batchId);

    if (batch.processing_status === 'ended') {
      console.log(`Batch complete:
        Succeeded: ${batch.request_counts.succeeded}
        Errored: ${batch.request_counts.errored}
        Expired: ${batch.request_counts.expired}`);
      return batch;
    }

    console.log(`Processing... ${batch.request_counts.processing} remaining`);
    await new Promise(r => setTimeout(r, 30_000)); // Check every 30s
  }
}
```

### Step 3: Retrieve Results

```typescript
const results = await client.messages.batches.results(batch.id);

for await (const result of results) {
  if (result.result.type === 'succeeded') {
    const text = result.result.message.content[0].text;
    console.log(`${result.custom_id}: ${text.substring(0, 100)}...`);
  } else {
    console.error(`${result.custom_id}: ${result.result.type} — ${result.result.error?.message}`);
  }
}
```

## Python Example

```python
import anthropic
import time

client = anthropic.Anthropic()

batch = client.messages.batches.create(
    requests=[
        {
            "custom_id": f"doc-{i}",
            "params": {
                "model": "claude-sonnet-4-20250514",
                "max_tokens": 1024,
                "messages": [{"role": "user", "content": f"Summarize: {doc}"}],
            },
        }
        for i, doc in enumerate(documents)
    ]
)

# Poll
while batch.processing_status != "ended":
    time.sleep(30)
    batch = client.messages.batches.retrieve(batch.id)

# Get results
for result in client.messages.batches.results(batch.id):
    if result.result.type == "succeeded":
        print(result.custom_id, result.result.message.content[0].text[:100])
```

## Batch Limits

| Limit | Value |
|-------|-------|
| Max requests per batch | 10,000 |
| Max concurrent batches | 100 |
| Processing SLA | 24 hours |
| Pricing | 50% of standard per-token pricing |
| Result availability | 29 days after creation |

## Output

- Batch created with up to 10,000 requests
- Processing status tracked via polling
- Results retrieved with per-request success/error status
- Failed requests identified for retry in a new batch

## Error Handling

| Result Type | Meaning | Action |
|-------------|---------|--------|
| `succeeded` | Normal response | Process `result.message` |
| `errored` | API error | Check `result.error` — retry failed items in new batch |
| `expired` | Not processed within 24h | Resubmit in new batch |
| `canceled` | Batch was canceled | Resubmit if needed |

## Examples

See Step 1 (batch creation), Step 2 (polling), Step 3 (result retrieval), Python example, and Batch Limits table above.

## Resources

- [Message Batches API](https://platform.claude.com/docs/en/api/messages/batches/create)
- [Batch Pricing](https://www.anthropic.com/pricing) — 50% off standard

## Next Steps

See `clade-ci-integration` for using batches in CI pipelines.

Files in this skill

  • SKILL.md4.4 KB
  • references/one-pager.md1.8 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.