Skip to content

Payments

Payment methods are tokenized cards. Movmo stores last4, brand, expiration, and the paymentMethodId token; the full PAN never reaches Movmo infrastructure. Tokenization happens client-side via Stripe Elements today; a Spreedly migration is planned.

  • The full PAN is not in Movmo. Card capture must happen in a PCI-compliant tokenization surface before the token is POSTed to Movmo.
  • Update is intentionally narrow. PUT accepts only expMonth, expYear, isDefault; other fields are ignored. Replacing a card means delete + create.
  • isDefault is mutually exclusive across a user’s cards — setting one to true unsets the others atomically.
  • Delete detaches at the provider first. A 5xx leaves the local row intact to avoid orphaning a charge token.
OperationPath
listPaymentMethodsGET /v1/users/{userid}/payment-methods
createPaymentMethodPOST /v1/users/{userid}/payment-methods
getPaymentMethodGET /v1/users/{userid}/payment-methods/{methodid}
updatePaymentMethodPUT /v1/users/{userid}/payment-methods/{methodid}
deletePaymentMethodDELETE /v1/users/{userid}/payment-methods/{methodid}

Full schemas in the OpenAPI spec under tags: [Payments].

Model Context Protocol (MCP) wrappers for this domain:

ToolMaps to
get_payment_methodsGET /v1/users/{userid}/payment-methods
delete_payment_methodGET + DELETE /v1/users/{userid}/payment-methods/{methodid}

Card addition is not exposed over MCP — adding a card requires a tokenization surface that an LLM has no business holding. The delete_payment_method tool’s confirmation message redirects users to the accounts UI for new cards.

Should I integrate now or wait for Spreedly?

Section titled “Should I integrate now or wait for Spreedly?”

Integrate now. Saved payment methods work end-to-end today. The Spreedly migration is a server-side abstraction; the partner contract holds, provided you follow one rule: read customer_id from GET /v1/users/{userid}/payment-methods at booking time, never persist it. Pass the freshly-read id and customer_id into POST .../bookings. When Spreedly lands, customer_id will be re-pointed server-side; partners that read-at-booking need no code changes.

  • The internal payment-customer endpoints (GET/POST /v1/users/{userid}/payment-customer) leak the underlying provider concept and are deliberately omitted from the partner surface. Do not depend on them.