Skip to content
Back to skills

1570 Gotchas B14bc1f8

ASecurity

**Smart Shield Note:** Argo Smart Routing evolving into Smart Shield. Best practices below remain applicable; monitor Cloudflare changelog for Smart Shield updates.

  • 9 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added October 11, 2026
developmenttypescriptpythongogitapiperformance

Works with

  • cli
  • api

Security analysis

A100/100

Scanned October 11, 2026

npx -y skills add tools-only/X-Skills --skill 1570-gotchas_b14bc1f8 --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of 1570 Gotchas B14bc1f8?

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

Security grade badge for 1570 Gotchas B14bc1f8
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/tools-only-1570-gotchas-b14bc1f8/badge)](https://www.skillsdirectory.com/skills/tools-only-1570-gotchas-b14bc1f8)

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

SKILL.md
## Best Practices Summary

**Smart Shield Note:** Argo Smart Routing evolving into Smart Shield. Best practices below remain applicable; monitor Cloudflare changelog for Smart Shield updates.

1. **Always check editability** before attempting to enable/disable Argo
2. **Set up billing notifications** to avoid unexpected costs
3. **Combine with Tiered Cache** for maximum performance benefit
4. **Use in production only** - disable for dev/staging to control costs
5. **Monitor analytics** - require 500+ requests in 48h for detailed metrics
6. **Handle errors gracefully** - check for billing, permissions, zone compatibility
7. **Test configuration changes** in staging before production
8. **Use TypeScript SDK** for type safety and better developer experience
9. **Implement retry logic** for API calls in production systems
10. **Document zone-specific settings** for team visibility

## Common Errors

### "Argo unavailable"

**Problem:** API returns error "Argo Smart Routing is unavailable for this zone"

**Cause:** Zone not eligible or billing not set up

**Solution:**

1. Verify zone has Enterprise or higher plan
2. Check billing is configured in Account → Billing
3. Ensure payment method is valid and current
4. Contact Cloudflare support if eligibility unclear

### "Cannot enable/disable"

**Problem:** API call succeeds but status remains unchanged, or `editable: false` in GET response

**Cause:** Insufficient permissions or zone restrictions

**Solution:**

1. Check API token has `Zone:Argo Smart Routing:Edit` permission
2. Verify `editable: true` in GET response before attempting PATCH
3. If `editable: false`, check:
   - Billing configured for account
   - Zone plan includes Argo (Enterprise+)
   - No active zone holds or suspensions
   - API token has correct scopes

### `editable: false` Error

**Problem:** GET request returns `"editable": false`, preventing enable/disable

**Cause:** Zone-level restrictions from billing, plan, or permissions

**Solution Pattern:**

```typescript
const status = await client.argo.smartRouting.get({ zone_id: zoneId })

if (!status.editable) {
  // Don't attempt to modify - will fail
  console.error('Cannot modify Argo settings:')
  console.error('- Check billing is configured')
  console.error('- Verify zone has Enterprise+ plan')
  console.error('- Confirm API token has Edit permission')
  throw new Error('Argo is not editable for this zone')
}

// Safe to proceed with enable/disable
await client.argo.smartRouting.edit({ zone_id: zoneId, value: 'on' })
```

### Rate Limiting

**Problem:** `429 Too Many Requests` error from API

**Cause:** Exceeded API rate limits (typically 1200 requests per 5 minutes)

**Solution:**

```typescript
import { RateLimitError } from 'cloudflare'

try {
  await client.argo.smartRouting.edit({ zone_id: zoneId, value: 'on' })
} catch (error) {
  if (error instanceof RateLimitError) {
    const retryAfter = error.response?.headers.get('retry-after')
    console.log(`Rate limited. Retry after ${retryAfter} seconds`)

    // Implement exponential backoff
    await new Promise((resolve) => setTimeout(resolve, (retryAfter || 60) * 1000))
    // Retry request
  }
}
```

## Limits

| Resource/Limit             | Value              | Notes                                   |
| -------------------------- | ------------------ | --------------------------------------- |
| Min requests for analytics | 500 in 48h         | For detailed metrics via GraphQL        |
| Zones supported            | Enterprise+        | Check zone plan in dashboard            |
| Billing requirement        | Must be configured | Before enabling; verify payment method  |
| API rate limit             | 1200 req / 5 min   | Per API token across all endpoints      |
| Spectrum apps              | No hard limit      | Each app can enable Argo independently  |
| Traffic counting           | Proxied only       | Only orange-clouded DNS records count   |
| DDoS/WAF exemption         | Yes                | Mitigated traffic excluded from billing |
| Analytics latency          | 1-5 minutes        | Real-time metrics not available         |

## Additional Resources

- [Official Argo Smart Routing Docs](https://developers.cloudflare.com/argo-smart-routing/)
- [Cloudflare Smart Shield](https://developers.cloudflare.com/smart-shield/)
- [API Authentication](https://developers.cloudflare.com/fundamentals/api/get-started/create-token/)
- [Cloudflare TypeScript SDK](https://github.com/cloudflare/cloudflare-typescript)
- [Cloudflare Python SDK](https://github.com/cloudflare/cloudflare-python)

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.