- Add generate_block_docs.py script that introspects block code to
generate markdown
- Support manual content preservation via <!-- MANUAL: --> markers
- Add migrate_block_docs.py to preserve existing manual content from git
HEAD
- Add CI workflow (docs-block-sync.yml) to fail if docs drift from code
- Add Claude PR review workflow (docs-claude-review.yml) for doc changes
- Add manual LLM enhancement workflow (docs-enhance.yml)
- Add GitBook configuration (.gitbook.yaml, SUMMARY.md)
- Fix non-deterministic category ordering (categories is a set)
- Add comprehensive test suite (32 tests)
- Generate docs for 444 blocks with 66 preserved manual sections
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
<!-- Clearly explain the need for these changes: -->
### Changes 🏗️
<!-- Concisely describe all of the changes made in this pull request:
-->
### Checklist 📋
#### For code changes:
- [x] I have clearly listed my changes in the PR description
- [x] I have made a test plan
- [x] I have tested my changes according to the test plan:
<!-- Put your test plan here: -->
- [x] Extensively test code generation for the docs pages
<!-- CURSOR_SUMMARY -->
---
> [!NOTE]
> Introduces an automated documentation pipeline for blocks and
integrates it into CI.
>
> - Adds `scripts/generate_block_docs.py` (+ tests) to introspect blocks
and generate `docs/integrations/**`, preserving `<!-- MANUAL: -->`
sections
> - New CI workflows: **docs-block-sync** (fails if docs drift),
**docs-claude-review** (AI review for block/docs PRs), and
**docs-enhance** (optional LLM improvements)
> - Updates existing Claude workflows to use `CLAUDE_CODE_OAUTH_TOKEN`
instead of `ANTHROPIC_API_KEY`
> - Improves numerous block descriptions/typos and links across backend
blocks to standardize docs output
> - Commits initial generated docs including
`docs/integrations/README.md` and many provider/category pages
>
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
631e53e0f6. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
---------
Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
4.4 KiB
Smartlead Campaign
Blocks for managing email outreach campaigns in SmartLead.
Add Lead To Campaign
What it is
Add a lead to a campaign in SmartLead
How it works
This block adds up to 100 leads to an existing SmartLead campaign using the SmartLead API. Each lead includes contact details and optional custom fields for personalization.
Configure upload settings to control duplicate handling and campaign status. The response includes counts for successful uploads, duplicates, and invalid entries.
Inputs
| Input | Description | Type | Required |
|---|---|---|---|
| campaign_id | The ID of the campaign to add the lead to | int | Yes |
| lead_list | An array of JSON objects, each representing a lead's details. Can hold max 100 leads. | List[LeadInput] | No |
| settings | Settings for lead upload | LeadUploadSettings | No |
Outputs
| Output | Description | Type |
|---|---|---|
| error | Error message if the lead was not added to the campaign | str |
| campaign_id | The ID of the campaign the lead was added to (passed through) | int |
| upload_count | The number of leads added to the campaign | int |
| already_added_to_campaign | The number of leads that were already added to the campaign | int |
| duplicate_count | The number of emails that were duplicates | int |
| invalid_email_count | The number of emails that were invalidly formatted | int |
| is_lead_limit_exhausted | Whether the lead limit was exhausted | bool |
| lead_import_stopped_count | The number of leads that were not added to the campaign because the lead import was stopped | int |
Possible use case
Lead Import: Bulk import leads from CRM exports, web forms, or enrichment services.
Campaign Automation: Automatically add qualifying leads to outreach campaigns.
Multi-Source Aggregation: Consolidate leads from multiple sources into unified campaigns.
Create Campaign
What it is
Create a campaign in SmartLead
How it works
This block creates a new email campaign in SmartLead using the SmartLead API. Provide a campaign name and the block returns the created campaign's ID and metadata.
Use the campaign ID with other SmartLead blocks to add leads, configure sequences, and manage the campaign.
Inputs
| Input | Description | Type | Required |
|---|---|---|---|
| name | The name of the campaign | str | Yes |
Outputs
| Output | Description | Type |
|---|---|---|
| error | Error message if the search failed | str |
| id | The ID of the created campaign | int |
| name | The name of the created campaign | str |
| created_at | The date and time the campaign was created | str |
Possible use case
Dynamic Campaigns: Create campaigns programmatically for different products or segments.
Workflow Automation: Spin up new outreach campaigns as part of sales or marketing workflows.
Campaign Templating: Create campaigns from templates with standardized configurations.
Save Campaign Sequences
What it is
Save sequences within a campaign
How it works
This block saves email sequences to an existing SmartLead campaign. Sequences define the email content, timing, and follow-up structure for the campaign's outreach.
Each sequence includes the email subject, body, and delay settings for automated follow-up emails.
Inputs
| Input | Description | Type | Required |
|---|---|---|---|
| campaign_id | The ID of the campaign to save sequences for | int | Yes |
| sequences | The sequences to save | List[Sequence] | No |
Outputs
| Output | Description | Type |
|---|---|---|
| error | Error message if the sequences were not saved | str |
| data | Data from the API | Dict[str, Any] | str |
| message | Message from the API | str |
Possible use case
Email Automation: Define multi-step email sequences for nurturing leads.
A/B Testing: Create variant sequences to test different messaging approaches.
Campaign Configuration: Set up complete outreach flows programmatically.