---
title: "Sync the plan with the store"
method: POST
path: "/api/billing/sync"
tags: ["Account"]
---

# Sync the plan with the store

`POST /api/billing/sync`

## Request

- Base URL: `https://trvlrr.app`
- URL: `https://trvlrr.app/api/billing/sync`
- Auth: HTTP bearer

After a purchase or restore: asks RevenueCat whether a subscription is active and grants Plus if so. Sync only ever grants; taking Plus away is the store webhook's job.

## Response `200`

The plan now, and whether the store changed it.

- BillingSync
  - `plan` 'free' | 'plus', required
  - `source` 'revenuecat' | 'unchanged', required

## Other responses

- `401`: No usable credential: a Clerk session token, a device token or an OAuth access token is required.
- `403`: The caller may not do this to this account or trip.

---

[API](https://skmtc.dev/trvlrr/apis/trvlrr-api.md) · [All operations](https://skmtc.dev/trvlrr/apis/trvlrr-api/llms.txt) · [OpenAPI document](https://skmtc.dev/trvlrr/apis/trvlrr-api/revisions/ea024946b293?raw)
