Skip to main content
Scheduled transfers execute on a cadence you define — daily, weekly, biweekly, monthly, or custom. Each execution creates a transfer with idempotency; retries are automatic within a configurable window. Use for: payroll, recurring vendor payouts, subscription revenue deposits, scheduled rebalancing, anything that repeats. Compare to AP2 mandates — mandates are pre-authorized envelopes agents spend within; scheduled transfers are unconditional cadence-based executions.

Create a schedule

Frequency options

Timezone matters: "America/New_York" means 9am Eastern regardless of DST.

Retry policy

When an execution fails (rail outage, insufficient funds), Sly retries automatically:
Retries:
  • Happen hourly for 24 hours
  • Then daily up to retryWindowDays
  • Up to maxRetryAttempts total
  • On final failure, schedule moves to failed state
retryEnabled: false = single-attempt only; failures go to failed immediately.

List schedules

Each schedule shows its next_execution_at, last_execution_at, executions_completed, and executions_remaining.

Schedule detail

Includes recent execution history + status of each execution.

Pause and resume

Paused schedules skip all executions until resumed. Previously-executed transfers are unaffected.

End a schedule

Either let it run out (hits endDate or maxOccurrences) or cancel:
Cancellation doesn’t undo already-executed transfers — those already moved money.

Execution state machine

Worker cadence

A background worker polls for scheduled transfers with scheduled_at <= NOW():
  • Dev / sandbox: every 30 seconds
  • Production: every 60 seconds
So a schedule at “9:00 am” may actually fire at 9:00:45. For most partner use cases this doesn’t matter; for time-sensitive flows (market-open trading), don’t rely on sub-minute precision.

Endpoints

Webhooks

  • scheduled_transfer.executed — per execution, with status: completed | failed
  • scheduled_transfer.retrying — retry attempt initiated
  • scheduled_transfer.failed — exhausted retries
  • scheduled_transfer.completed — schedule finished (endDate / maxOccurrences)

Common patterns

Payroll (bi-weekly every other Friday):
Quarterly subscription:
Weekly merchant payout:
(with a settlement rule calculating the balance) One-time delayed transfer (not technically a schedule): For single future-dated transfers, use POST /v1/scheduled-transfers with frequency: daily, startDate: <future>, maxOccurrences: 1, or better — the direct POST /v1/transfers with scheduled_at param.

Coordinating with mandates

If you’re already using AP2 mandates for recurring payments, do you also need scheduled transfers? Usually not: Use mandates for agent-mediated recurring flow, scheduled transfers for partner-mediated recurring flow.