The system allows users to create subscriptions with a 'starts_at' date in the past. Whenever the starts_at field is populated on a subscription the subscription is automatically created with a state of "future".
There is a mechanism in the system, that periodically (about every hour) checks existing subscriptions and their starts_at value. If it finds a starts_at value in the past, it updates the subscription to "active" and updates the other date fields to their appropriate values and charges the account.
If a subscription is created with a starts_at value and is cancelled before the system updates it, the customer would not get charged.
To have the subscription start immediately, leave the 'starts_at' value empty to get the current time.
To have the subscription start in the future, pass it a value with a datetime in the future.
To have a subscription start in the past, set the starts_at to a datetime value in the past but be aware it may take up to an hour for the fields to be set correctly and the subscription charged, so plan that for accordingly.
It's worth noting that this applies to subscriptions without a trial. Depending on when the actual payment period is expected to start (i.e. if the intent is to change the trial_end date), then the Postpone Subscription request would be used to change the trial end date, which would be the start of the first billing cycle.