## 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)
