Charge: Update subscription card details
In the end I worked out the card is related to a customer, not a subscription.

I couldn't see any public endpoint to update a customer's card, so I added this method in charge/controllers/ChargeController.php (not ideal to update the plugin directly I know):

public function actionUpdateCard()
{
  $this-&gt;requirePostRequest();
  $customer = craft()-&gt;charge_customer-&gt;find();
  $cardToken = craft()-&gt;request-&gt;getRequiredPost('cardToken');

  if ($customer-&gt;addCard($cardToken)) {
    $this-&gt;returnJson(['success' =&gt; true]);
  } else {
    $this-&gt;returnJson(['success' =&gt; false]);
  }
}


and then can make requests to the charge/updateCard endpoint:

getStripeToken(cardToken =&gt; {
  post({
    params: {
      action: 'charge/updateCard',
      cardToken
    },
    then: ({ success }) =&gt; console.log(`Card updated: ${success}`)
    url: '/'
  })
})