---
title: "Mark Annual Pro"
method: POST
path: "/api/admin/users/{user_id}/mark-annual-pro"
tags: ["Admin"]
---

# Mark Annual Pro

`POST /api/admin/users/{user_id}/mark-annual-pro`

## Request

- Base URL: `https://api.xfinlab.com` (the document declares no server; this is the origin it was published from)
- URL: `https://api.xfinlab.com/api/admin/users/{user_id}/mark-annual-pro`
- Auth: none declared

2026-07-27: manual stand-in for a real payment webhook -- confirms
`user_id` paid for an ANNUAL Pro subscription (there is no live Stripe/
PayPal integration yet). Sets their real plan to Pro with a genuine
1-year expiry, and -- if they were referred -- grants the referrer 1
year of Pro (or Pro+, once they've referred REFERRAL_PROPLUS_THRESHOLD
paying annual-Pro conversions) via services/referral_service.py. Once
a real payment gateway exists, its webhook should call
ReferralService.mark_annual_pro_payment() directly instead of this
endpoint; the reward logic itself doesn't change.

## Path parameters

- `user_id` integer, required

## Query parameters

- `token` string, required

## Response `200`

Successful Response

- unknown

## Other responses

- `422`: Validation Error

---

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