# RevCent MCP Guide: `CreateSubscriptionProfile`

AI/MCP-focused guide for creating Subscription Profiles in RevCent.

This document explains the `CreateSubscriptionProfile` operation, its schema, frequency models, payment and shipping behavior, occurrence rules, overdue handling, gateway preference, and the important `subscription_specific` workflow for creating a custom renewal cycle for an existing customer subscription.

---

## Related Overview

AI/MCP clients should also read:

```text
https://revcent.com/documentation/markdown/mcp/operation/OverviewSubscriptionProfile.md
```

Related context:

| Overview | Link |
|---|---|
| Product Overview | `https://revcent.com/documentation/markdown/mcp/operation/OverviewProduct.md` |
| Payment Profile Overview | `https://revcent.com/documentation/markdown/mcp/operation/OverviewPaymentProfile.md` |
| Shipping Profile Overview | `https://revcent.com/documentation/markdown/mcp/operation/OverviewShippingProfile.md` |
| Shop Overview | `https://revcent.com/documentation/markdown/mcp/operation/OverviewShop.md` |
| Email Template Overview | `https://revcent.com/documentation/markdown/mcp/operation/OverviewEmailTemplate.md` |
| AI Assistant Overview | `https://revcent.com/documentation/markdown/mcp/operation/OverviewAIAssistant.md` |
| AI Voice Agent Overview | `https://revcent.com/documentation/markdown/mcp/operation/OverviewAIVoiceAgent.md` |

---

## Operation Summary

Operation:

```text
CreateSubscriptionProfile
```

Title:

```text
Create A Subscription Profile
```

Purpose:

```text
Create a Subscription Profile, which will issue a unique Subscription Profile ID.
```

A Subscription Profile defines the renewal behavior for RevCent Subscriptions.

It can determine:

- how often subscriptions renew,
- whether renewals are indefinite or limited,
- how many overdue renewals are allowed before suspension,
- which Payment Profile processes renewal payments,
- whether a specific Shipping Profile rate override applies,
- whether advanced preferred-gateway behavior applies,
- whether the profile is reusable or created for one specific subscription.

Simple concept:

```text
Subscription Profile = recurring billing schedule + renewal payment behavior
```

---

## Relationship to Products and Subscriptions

A Product can be configured with a Subscription Profile.

When that Product is sold, RevCent can create a Subscription that uses the Product's Subscription Profile.

Conceptual flow:

```text
Product has subscription_profile
    ↓
Customer buys Product
    ↓
RevCent creates Sale and Product Sale
    ↓
RevCent creates Subscription
    ↓
Subscription renews based on Subscription Profile
```

A Subscription Profile is not the subscription itself.

| Object | Meaning |
|---|---|
| Subscription Profile | Defines the billing schedule/rules. |
| Subscription | Customer-level active recurring subscription. |
| Subscription Renewal | Individual renewal event/attempt. |
| Product | Item sold that can create a subscription when configured with a Subscription Profile. |

---

## Important WooCommerce / Shop Guidance

For WooCommerce and other third-party shops:

```text
WooCommerce = storefront
RevCent = subscription billing and management backend
```

WordPress/WooCommerce should not be used for subscriptions when RevCent is connected.

Do not use WordPress/WooCommerce subscription plugins for:

- subscription creation,
- subscription billing,
- renewals,
- cancellations,
- subscription lifecycle management.

Correct model:

```text
WooCommerce displays/sells the product
    ↓
RevCent Product has subscription_profile
    ↓
RevCent creates and manages the Subscription
    ↓
RevCent bills renewals
    ↓
RevCent handles failed renewals, recovery, shipping, emails, AI, voice, and reporting
```

---

## Input Schema Overview

`CreateSubscriptionProfile` input schema:

```text
type: object
additionalProperties: false
required:
  - name
  - payment_profile
  - frequency
```

Only send supported fields.

Unsupported fields should not be included.

---

## Required Fields

| Field | Type | Required | Description |
|---|---:|---:|---|
| `name` | string | Yes | Unique Subscription Profile name. |
| `payment_profile` | string | Yes | 20-character Payment Profile ID used for subscription renewals. |
| `frequency` | enum | Yes | Billing frequency type: `unit`, `calendar`, or `fiscal`. |

---

## Optional / Conditional Fields

| Field | Type | Purpose |
|---|---:|---|
| `description` | string | Human-readable explanation of the profile. |
| `enabled` | boolean | Whether the profile is enabled. |
| `frequency_unit` | object | Required when `frequency = "unit"`. |
| `frequency_calendar` | object | Required when `frequency = "calendar"`. |
| `frequency_fiscal` | object | Required when `frequency = "fiscal"`. |
| `occurrences` | enum | Whether renewals are `indefinite` or `specific`. |
| `occurrences_value` | integer | Number of renewals when `occurrences = "specific"`. |
| `overdue_limit` | integer | Maximum overdue renewals before automatic suspension. |
| `prefer_gateway` | object | Advanced gateway preference behavior. Usually disabled. |
| `shipping_profile` | string | Optional 20-character Shipping Profile ID for a specific rate override. |
| `subscription_specific` | boolean | Whether this profile is for one specific existing subscription. |
| `subscription_id` | string | Required when `subscription_specific = true`. |

---

## `name`

The Subscription Profile name must be unique.

Use a name that makes the renewal schedule obvious.

Good examples:

```text
Monthly Subscription
30 Day Replenishment
Every 2 Weeks Subscription
Quarterly Subscription
Annual Subscription
Six Renewal Plan
Custom 6 Week Renewal - Customer 123
```

Poor examples:

```text
Subscription
Profile
Test
Renewal
```

Best practice:

```text
Include the frequency in the name when possible.
```

---

## `description`

Use the description to explain:

- renewal schedule,
- Product or Product Group purpose,
- shop/brand/campaign context,
- whether it is reusable or subscription-specific,
- payment behavior,
- shipping behavior,
- overdue/suspension behavior.

Example:

```text
Renews every 30 days for supplement replenishment products. Uses the main subscription Payment Profile and allows up to 3 overdue renewals before suspension.
```

---

## `enabled`

Controls whether the Subscription Profile is enabled.

Example:

```json
"enabled": true
```

Best practice:

```text
Create production-ready profiles enabled only after the frequency, Payment Profile, shipping behavior, and Product usage are confirmed.
```

Create a profile disabled if the merchant is still reviewing or testing it.

---

## `payment_profile`

Required.

The Payment Profile determines the processing flow for subscription renewals using this Subscription Profile.

Example:

```json
"payment_profile": "PPPPPPPPPPPPPPPPPPPP"
```

This is critical because a subscription renewal is a payment attempt, not only a scheduled event.

Do not guess the Payment Profile ID.

Before creation, verify:

- the Payment Profile exists,
- it is the correct profile for subscription renewals,
- the user understands this Payment Profile will process renewal payments,
- WooCommerce/third-party shop subscription billing should be handled in RevCent, not WordPress.

---

# Frequency Configuration

Subscription Profiles support three frequency types:

```text
unit
calendar
fiscal
```

Each type requires a matching configuration object.

| `frequency` | Required Object | Meaning |
|---|---|---|
| `unit` | `frequency_unit` | Renew every X days/weeks/months/years. |
| `calendar` | `frequency_calendar` | Renew on the nth unit of a parent calendar period. |
| `fiscal` | `frequency_fiscal` | Renew on standard or infrequent fiscal periods. |

Critical rule:

```text
frequency must match the frequency object provided.
```

Do not send `frequency_unit` with `frequency = "calendar"`.

Do not send `frequency_calendar` with `frequency = "unit"`.

Do not send multiple frequency objects unless there is a clear schema/operation reason to do so. The correct pattern is to send the object matching the selected frequency.

---

## Frequency Type: `unit`

Use `unit` when the subscription renews every X units.

Examples:

- every 30 days,
- every 2 weeks,
- every 1 month,
- every 1 year.

Schema:

```json
{
  "frequency": "unit",
  "frequency_unit": {
    "unit": "days",
    "value": 30
  }
}
```

Allowed `frequency_unit.unit` values:

```text
days
weeks
months
years
```

Required `frequency_unit` fields:

| Field | Type | Required | Description |
|---|---:|---:|---|
| `unit` | enum | Yes | `days`, `weeks`, `months`, or `years`. |
| `value` | integer | Yes | Number of units between renewals. |

### Example: Every 30 Days

```json
{
  "frequency": "unit",
  "frequency_unit": {
    "unit": "days",
    "value": 30
  }
}
```

### Example: Every 2 Weeks

```json
{
  "frequency": "unit",
  "frequency_unit": {
    "unit": "weeks",
    "value": 2
  }
}
```

### Example: Every Month

```json
{
  "frequency": "unit",
  "frequency_unit": {
    "unit": "months",
    "value": 1
  }
}
```

Use `unit` for most standard ecommerce subscriptions, including supplement refills, subscription boxes, consumables, and monthly clubs.

---

## Frequency Type: `calendar`

Use `calendar` when the subscription should renew on a specific calendar-relative schedule.

Examples:

- 1st day of every month,
- 2nd week of every month,
- 1st month of every year.

Schema:

```json
{
  "frequency": "calendar",
  "frequency_calendar": {
    "unit": "day",
    "value": 1,
    "parent": "month"
  }
}
```

Allowed `frequency_calendar.unit` values:

```text
day
week
month
```

Allowed `frequency_calendar.parent` values:

```text
week
month
year
```

Required `frequency_calendar` fields:

| Field | Type | Required | Description |
|---|---:|---:|---|
| `unit` | enum | Yes | `day`, `week`, or `month`. |
| `value` | integer | Yes | Nth value of the selected unit. |
| `parent` | enum | Yes | Parent period: `week`, `month`, or `year`. |

### Example: 1st Day of Every Month

```json
{
  "frequency": "calendar",
  "frequency_calendar": {
    "unit": "day",
    "value": 1,
    "parent": "month"
  }
}
```

### Example: 2nd Week of Every Month

```json
{
  "frequency": "calendar",
  "frequency_calendar": {
    "unit": "week",
    "value": 2,
    "parent": "month"
  }
}
```

Use `calendar` when billing should align to calendar periods rather than a fixed interval from the last renewal.

---

## Frequency Type: `fiscal`

Use `fiscal` when the subscription should renew based on fiscal periods.

Examples:

- standard quarterly renewals,
- annual fiscal renewals,
- every 2nd quarter.

Schema:

```json
{
  "frequency": "fiscal",
  "frequency_fiscal": {
    "unit": "quarter",
    "setting": "standard"
  }
}
```

Allowed `frequency_fiscal.unit` values:

```text
quarter
year
```

Allowed `frequency_fiscal.setting` values:

```text
standard
infrequent
```

Required `frequency_fiscal` fields:

| Field | Type | Required | Description |
|---|---:|---:|---|
| `unit` | enum | Yes | `quarter` or `year`. |
| `setting` | enum | Yes | `standard` or `infrequent`. |
| `value` | integer | Conditional | Used when `setting = "infrequent"`. |

### Example: Standard Quarterly Renewal

```json
{
  "frequency": "fiscal",
  "frequency_fiscal": {
    "unit": "quarter",
    "setting": "standard"
  }
}
```

### Example: Every 2nd Quarter

```json
{
  "frequency": "fiscal",
  "frequency_fiscal": {
    "unit": "quarter",
    "setting": "infrequent",
    "value": 2
  }
}
```

---

# Occurrence Rules

## `occurrences`

Controls whether subscriptions associated with the profile renew indefinitely or for a specific number of renewals.

Allowed values:

```text
indefinite
specific
```

### `indefinite`

Use when subscriptions continue until suspended or cancelled.

```json
{
  "occurrences": "indefinite"
}
```

### `specific`

Use when subscriptions should renew a fixed number of times.

If `occurrences = "specific"`, provide:

```text
occurrences_value
```

Example:

```json
{
  "occurrences": "specific",
  "occurrences_value": 6
}
```

This means subscriptions using the profile renew for up to 6 renewal cycles.

Use `specific` for:

- installment plans,
- limited recurring programs,
- fixed-term subscriptions,
- subscription bundles that naturally end,
- finite membership periods.

---

## `overdue_limit`

The maximum number of overdue renewals a subscription associated with this profile can have before it is automatically suspended.

Example:

```json
{
  "overdue_limit": 3
}
```

Business meaning:

```text
How many failed/unpaid renewal periods should RevCent allow before suspension?
```

A good overdue strategy should consider:

- failed-payment recovery emails,
- customer payment method updates,
- AI Assistant recovery workflows,
- AI Voice Agent recovery calls,
- Customer Portal access,
- salvage transaction/retry workflows where applicable,
- merchant risk tolerance.

---

# Shipping Behavior

## `shipping_profile`

Optional 20-character Shipping Profile ID.

This field is meant for granting a specific shipping rate for all subscriptions associated with this Subscription Profile.

Important behavior:

```text
If shipping_profile is provided, the first rate listed in the Shipping Profile is used.
No product, Product Group, revenue rule, or country restrictions are taken into account within that Shipping Profile.
```

This is not normal best-match Shipping Profile logic.

It is a specific override-style behavior.

Use `shipping_profile` only when the merchant intentionally wants the first rate in that Shipping Profile to apply to all subscriptions using this Subscription Profile.

Example:

```json
{
  "shipping_profile": "SSSSSSSSSSSSSSSSSSSS"
}
```

If no `shipping_profile` is provided:

```text
RevCent calculates shipping by finding a match within all Shipping Profiles.
```

For shippable subscription products, make sure renewal shipping is configured.

Checklist for shippable subscription products:

- Product is marked shippable,
- Product has Fulfillment Account,
- Shipping Profiles exist for renewal shipping,
- User understands initial Sale shipping from WooCommerce is not the renewal shipping source,
- Subscription Profile shipping override is only used if intentionally desired.

---

# Advanced Gateway Behavior

## `prefer_gateway`

Advanced object.

Schema:

```json
{
  "prefer_gateway": {
    "enabled": false,
    "lock_gateway": false,
    "max": 0
  }
}
```

Fields:

| Field | Type | Purpose |
|---|---:|---|
| `enabled` | boolean | Whether to force renewals to use the last successful transaction gateway. |
| `lock_gateway` | boolean | If enabled, force renewals only on the originating Sale's successful transaction gateway. |
| `max` | integer | Maximum number of times to use the preferred gateway before falling back to the profile's Payment Profile. |

Important:

```text
prefer_gateway is for advanced users.
Recommended set to false.
```

Why to be careful:

- it can limit renewal attempts to a single/fixed gateway,
- it can override normal Payment Profile routing behavior,
- it can reduce flexibility in payment recovery,
- it can create issues if the preferred/locked gateway becomes unavailable.

Best practice:

```text
Leave prefer_gateway disabled unless the user explicitly requests and understands this behavior.
```

---

# Subscription-Specific Profiles

## What `subscription_specific` Does

A Subscription Profile can be specific to one existing subscription.

This is used when a specific customer requests a custom renewal cycle.

Example use cases:

- customer wants renewal every 6 weeks instead of monthly,
- customer wants renewal every 45 days instead of every 30 days,
- customer wants a slower replenishment schedule,
- customer wants a custom interval due to product usage,
- VIP/customer service approves a custom billing schedule,
- merchant wants to tailor one customer's subscription without affecting everyone else.

Field:

```text
subscription_specific
```

If:

```json
"subscription_specific": true
```

then the profile is created for one specific existing subscription and cannot be used for any other subscription.

You must also provide:

```text
subscription_id
```

---

## How Subscription-Specific Creation Works

When `subscription_specific = true` and `subscription_id` is provided:

```text
CreateSubscriptionProfile creates a customized profile
    ↓
The profile is automatically attached to the specified existing subscription
    ↓
The subscription no longer uses the profile it inherited from the original purchased product
    ↓
The customer's subscription now follows the custom renewal cycle
```

Important:

```text
A subscription-specific profile is one-time-use and is limited to the specified subscription.
```

Do not use a subscription-specific profile as a reusable product-level profile.

---

## Required Fields for Subscription-Specific Profile

To create a subscription-specific profile, provide:

| Field | Required | Purpose |
|---|---:|---|
| `name` | Yes | Unique name for the custom profile. |
| `payment_profile` | Yes | Payment Profile for renewals. |
| `frequency` | Yes | Custom frequency type. |
| Matching frequency object | Yes | `frequency_unit`, `frequency_calendar`, or `frequency_fiscal`. |
| `subscription_specific` | Yes | Set to `true`. |
| `subscription_id` | Yes | Existing subscription ID to attach the custom profile to. |

Example:

```json
{
  "name": "Custom 6 Week Renewal - Customer 123",
  "description": "Custom renewal cycle requested by customer. Renews every 6 weeks.",
  "enabled": true,
  "payment_profile": "PPPPPPPPPPPPPPPPPPPP",
  "frequency": "unit",
  "frequency_unit": {
    "unit": "weeks",
    "value": 6
  },
  "occurrences": "indefinite",
  "overdue_limit": 3,
  "subscription_specific": true,
  "subscription_id": "SSSSSSSSSSSSSSSSSSSS"
}
```

---

## Important Error Behavior

If the target subscription already has a custom profile attached, creating another subscription-specific profile for it will return an error.

In that case:

```text
Do not create a second custom profile.
Edit the target subscription's current custom profile instead.
```

Recommended workflow:

```text
1. GetSubscription to inspect the target subscription.
2. Determine whether it already uses a subscription-specific/custom profile.
3. If it does not:
       CreateSubscriptionProfile with subscription_specific = true.
4. If it does:
       Use EditSubscriptionProfile on the current custom profile.
```

---

## Subscription-Specific Best Practices

Use `subscription_specific = true` only when:

- a real existing customer subscription needs a custom schedule,
- the subscription ID is known,
- the customer/business has explicitly requested the custom renewal cycle,
- the change should not affect any other customers,
- the custom profile should not be reused.

Do not use `subscription_specific = true` when:

- creating a normal reusable subscription plan,
- creating a profile to attach to a Product,
- creating a profile for future subscriptions,
- multiple customers should use the same renewal schedule,
- the subscription ID is unknown.

For reusable plans, set:

```json
"subscription_specific": false
```

or omit it if not needed.

---

# Create Examples

## Example: Monthly Subscription Profile

```json
{
  "name": "Monthly Subscription",
  "description": "Reusable monthly subscription profile. Renews every 1 month.",
  "enabled": true,
  "payment_profile": "PPPPPPPPPPPPPPPPPPPP",
  "frequency": "unit",
  "frequency_unit": {
    "unit": "months",
    "value": 1
  },
  "occurrences": "indefinite",
  "overdue_limit": 3,
  "prefer_gateway": {
    "enabled": false,
    "lock_gateway": false,
    "max": 0
  },
  "subscription_specific": false
}
```

---

## Example: 30-Day Replenishment Subscription Profile

```json
{
  "name": "30 Day Replenishment",
  "description": "Reusable profile for replenishment products that renew every 30 days.",
  "enabled": true,
  "payment_profile": "PPPPPPPPPPPPPPPPPPPP",
  "frequency": "unit",
  "frequency_unit": {
    "unit": "days",
    "value": 30
  },
  "occurrences": "indefinite",
  "overdue_limit": 3,
  "prefer_gateway": {
    "enabled": false,
    "lock_gateway": false,
    "max": 0
  }
}
```

---

## Example: Six Renewal Plan

```json
{
  "name": "Six Renewal Plan",
  "description": "Renews monthly for six renewals, then stops.",
  "enabled": true,
  "payment_profile": "PPPPPPPPPPPPPPPPPPPP",
  "frequency": "unit",
  "frequency_unit": {
    "unit": "months",
    "value": 1
  },
  "occurrences": "specific",
  "occurrences_value": 6,
  "overdue_limit": 2,
  "prefer_gateway": {
    "enabled": false,
    "lock_gateway": false,
    "max": 0
  }
}
```

---

## Example: 1st Day of Every Month

```json
{
  "name": "Calendar Monthly - 1st Day",
  "description": "Renews on the 1st day of every month.",
  "enabled": true,
  "payment_profile": "PPPPPPPPPPPPPPPPPPPP",
  "frequency": "calendar",
  "frequency_calendar": {
    "unit": "day",
    "value": 1,
    "parent": "month"
  },
  "occurrences": "indefinite",
  "overdue_limit": 3
}
```

---

## Example: Quarterly Fiscal Subscription

```json
{
  "name": "Quarterly Subscription",
  "description": "Standard quarterly subscription billing.",
  "enabled": true,
  "payment_profile": "PPPPPPPPPPPPPPPPPPPP",
  "frequency": "fiscal",
  "frequency_fiscal": {
    "unit": "quarter",
    "setting": "standard"
  },
  "occurrences": "indefinite",
  "overdue_limit": 2
}
```

---

## Example: Custom Customer Renewal Cycle

Scenario:

```text
A customer with an existing subscription asks to renew every 6 weeks instead of every 30 days.
```

Correct operation:

```text
Create a subscription-specific Subscription Profile.
```

Example:

```json
{
  "name": "Custom 6 Week Renewal - Subscription SSSSS",
  "description": "Subscription-specific custom profile for customer-requested 6 week renewal cycle.",
  "enabled": true,
  "payment_profile": "PPPPPPPPPPPPPPPPPPPP",
  "frequency": "unit",
  "frequency_unit": {
    "unit": "weeks",
    "value": 6
  },
  "occurrences": "indefinite",
  "overdue_limit": 3,
  "prefer_gateway": {
    "enabled": false,
    "lock_gateway": false,
    "max": 0
  },
  "subscription_specific": true,
  "subscription_id": "SSSSSSSSSSSSSSSSSSSS"
}
```

This automatically associates the newly created profile with the specified subscription.

---

## Output Schema

Successful output can include:

| Field | Type | Description |
|---|---:|---|
| `api_call_id` | string | 20-character API call ID. |
| `api_call_unix` | integer | Unix timestamp when the API call was initiated. |
| `code` | integer | API response code. `1` indicates success. |
| `result` | string | Result message. |

Schema note:

```text
The live output schema may include an ID field label that should be read from the actual response.
The operation purpose is to create a Subscription Profile and issue a unique Subscription Profile ID.
AI/MCP clients should read the returned response/result carefully and store the created profile ID.
```

---

## Required Pre-Checks Before Calling `CreateSubscriptionProfile`

Before creating a Subscription Profile, verify:

- user explicitly confirmed creation,
- profile name is unique and descriptive,
- profile is meant to be reusable or subscription-specific,
- Payment Profile ID is correct,
- frequency type is known,
- matching frequency object is complete,
- occurrence behavior is known,
- `occurrences_value` is provided when `occurrences = "specific"`,
- overdue limit is intentional,
- shipping behavior is understood,
- if `shipping_profile` is used, user understands the first-rate-only behavior,
- `prefer_gateway` is disabled unless explicitly requested by an advanced user,
- if `subscription_specific = true`, subscription ID is known,
- if `subscription_specific = true`, the target subscription does not already have a custom profile,
- products or subscriptions that will use the profile are known.

---

## Recommended Creation Workflow

### Reusable Product-Level Subscription Profile

```text
1. Confirm product/plan purpose.
2. Confirm renewal frequency.
3. Confirm Payment Profile.
4. Confirm occurrence behavior.
5. Confirm overdue limit.
6. Confirm shipping behavior for shippable products.
7. Confirm prefer_gateway should remain disabled unless advanced need exists.
8. CreateSubscriptionProfile.
9. Attach profile to Product via CreateProduct/EditProduct.
10. Test purchase and subscription creation flow.
```

### Subscription-Specific Custom Profile

```text
1. Confirm customer has an existing subscription.
2. Retrieve the subscription with GetSubscription.
3. Confirm the customer requested a custom renewal cycle.
4. Confirm the new custom frequency.
5. Confirm the target subscription does not already have a custom profile.
6. Confirm Payment Profile.
7. CreateSubscriptionProfile with subscription_specific = true and subscription_id.
8. Verify the subscription now uses the custom profile.
9. Document the customer-specific custom renewal cycle.
```

---

## Common Mistakes to Avoid

Do not:

- create a profile without a confirmed Payment Profile ID,
- guess renewal frequency,
- use `frequency_unit` without `frequency = "unit"`,
- use `frequency_calendar` without `frequency = "calendar"`,
- use `frequency_fiscal` without `frequency = "fiscal"`,
- set `occurrences = "specific"` without `occurrences_value`,
- enable `prefer_gateway` casually,
- use `shipping_profile` without understanding first-rate-only behavior,
- create a reusable Product-level profile with `subscription_specific = true`,
- omit `subscription_id` when `subscription_specific = true`,
- create a subscription-specific profile when the target subscription already has a custom profile,
- use WordPress/WooCommerce subscription plugins instead of RevCent,
- forget that shippable subscription products need Shipping Profiles and Fulfillment Accounts,
- attach the wrong Subscription Profile to a Product.

---

## AI/MCP Decision Guide

| User Intent | Correct Action |
|---|---|
| Create normal subscription plan | `CreateSubscriptionProfile` with `subscription_specific = false` or omitted. |
| Create monthly renewal | `frequency = "unit"`, `frequency_unit.unit = "months"`, `value = 1`. |
| Create every-30-days renewal | `frequency = "unit"`, `frequency_unit.unit = "days"`, `value = 30`. |
| Create 1st-day-of-month renewal | `frequency = "calendar"`, `unit = "day"`, `value = 1`, `parent = "month"`. |
| Create quarterly renewal | `frequency = "fiscal"`, `unit = "quarter"`, `setting = "standard"`. |
| Create finite renewal plan | `occurrences = "specific"` with `occurrences_value`. |
| Create custom renewal cycle for one existing subscription | `subscription_specific = true` and provide `subscription_id`. |
| One customer already has a custom profile | Use `EditSubscriptionProfile` on the existing custom profile instead of creating another. |
| Shippable subscription product needs universal specific rate | Use `shipping_profile` only if first-rate-only behavior is desired. |
| Advanced gateway locking | Use `prefer_gateway` only with explicit advanced user confirmation. |

---

## Final AI/MCP Instruction

Use `CreateSubscriptionProfile` to create the renewal schedule and payment behavior used by RevCent Subscriptions.

The operation requires `name`, `payment_profile`, and `frequency`. The selected `frequency` must match the correct frequency object: `frequency_unit`, `frequency_calendar`, or `frequency_fiscal`.

Use reusable Subscription Profiles for normal product-level subscription plans. Use `subscription_specific = true` only when an existing customer subscription needs a custom renewal cycle. In that case, include `subscription_id`; the new profile is automatically attached to that subscription and cannot be used for other subscriptions.

For WooCommerce and third-party shops, subscription billing should be handled by RevCent through Products and Subscription Profiles, not WordPress/WooCommerce subscription plugins.


---
Document Parent Directory
* [Operations](https://revcent.com/documentation/markdown/mcp/operation/index.md) - AI/MCP details and overviews for operations available within the RevCent MCP.