# RevCent MCP Operation: `EditFulfillmentAccount`

This document explains the `EditFulfillmentAccount` operation in depth so MCP clients can correctly update existing Fulfillment Accounts in RevCent.

This is an operation-specific MCP guide. It explains partial edit behavior, editable fields, secure credential updates, changing Site Fulfillment Centers, product-association risks, and validation rules.

Sources:
- RevCent API/MCP schema for `EditFulfillmentAccount`
- RevCent API/MCP schema for `GetFulfillmentAccount`
- RevCent API/MCP schema for `GetSiteFulfillmentCenters`
- RevCent API/MCP schema for `GetSiteFulfillmentCenter`
- RevCent API/MCP schema for `CreateSecureForm`
- RevCent API/MCP schema references for shippable product fulfillment assignment
- RevCent Fulfillment Overview

---

## Operation Summary

`EditFulfillmentAccount` edits a previously created Fulfillment Account using the required `fulfillment_account_id`.

The operation is a partial update operation.

The schema is explicit:

```text
Only include the properties you wish to modify.
```

For example:

- If only changing the name, include only `fulfillment_account_id` and `name`.
- If only disabling the account, include only `fulfillment_account_id` and `enabled`.
- If changing credentials, include `secure_form_id`.
- If changing the Site Fulfillment Center, include the new `fulfillment_center` and a new `secure_form_id` for the required fields/credentials.

---

# Required Field

| Field | Type | Required | Description |
|---|---:|---:|---|
| `fulfillment_account_id` | string | Yes | 20-character Fulfillment Account ID to edit. |

Minimal shape:

```json
{
  "fulfillment_account_id": "XXXXXXXXXXXXXXXXXXXX"
}
```

A real edit should include at least one additional field to modify.

---

# Editable Fields

| Field | Type | Required | Description |
|---|---:|---:|---|
| `fulfillment_account_id` | string | Yes | 20-character Fulfillment Account ID. |
| `name` | string | No | Fulfillment Account name. Must be unique from other Fulfillment Account names. |
| `description` | string | No | Fulfillment Account description. |
| `enabled` | boolean | No | Whether the Fulfillment Account is enabled. |
| `fulfillment_center` | string | No | 20-character Site Fulfillment Center ID. |
| `secure_form_id` | string | No | 20-character Secure Form ID. Only provide if changing credentials or changing the Site Fulfillment Center. |

The schema has:

```json
"additionalProperties": false
```

Do not send unknown fields.

---

# Critical Edit Rule: Only Include Fields Being Modified

`EditFulfillmentAccount` is a partial-update operation.

Correct name-only edit:

```json
{
  "fulfillment_account_id": "XXXXXXXXXXXXXXXXXXXX",
  "name": "Brand A US Fulfillment"
}
```

Correct disable-only edit:

```json
{
  "fulfillment_account_id": "XXXXXXXXXXXXXXXXXXXX",
  "enabled": false
}
```

Correct credentials update:

```json
{
  "fulfillment_account_id": "XXXXXXXXXXXXXXXXXXXX",
  "secure_form_id": "YYYYYYYYYYYYYYYYYYYY"
}
```

Do not include unrelated fields.

---

# Why Editing a Fulfillment Account Is High Impact

A Fulfillment Account can be associated with shippable products.

Editing it can affect real product fulfillment.

A change may impact:

- Which provider receives orders
- Which warehouse ships products
- Whether fulfillment credentials work
- Whether shipment notifications are sent
- Whether tracking numbers are received
- Whether refunds/voids can cancel shipment
- Whether shippable products route correctly
- Whether customers receive shipping/tracking updates
- Whether shipping events trigger downstream workflows

Because Fulfillment Accounts are operational infrastructure, edits should be handled carefully.

---

# Before Editing: Retrieve Existing Settings

Before making significant edits, MCP should retrieve the current Fulfillment Account using:

```text
GetFulfillmentAccount
```

Review:

```text
id
name
description
enabled
cancel_on_void
fulfillment_center
fulfillment_center_fields_saved
```

This helps avoid accidental changes and confirms whether required fields are saved.

---

# Safe Edit Workflow

Recommended workflow:

```text
1. Identify the fulfillment_account_id.
2. Retrieve current Fulfillment Account details.
3. Determine exactly which field(s) need to change.
4. If changing credentials or fulfillment center, create a new Secure Form.
5. Have the user complete the Secure Form.
6. Submit only the intended edit fields.
7. Verify fulfillment_center_fields_saved afterward.
8. Review shippable products associated with this Fulfillment Account.
9. Confirm the account should remain enabled or disabled.
10. Test/verify fulfillment behavior before relying on production shipments.
```

For high-risk edits:

```text
Disable account → edit settings/credentials → verify required fields → verify product assignments → re-enable intentionally
```

---

# `name`

The `name` should clearly identify the Fulfillment Account.

Example:

```json
{
  "fulfillment_account_id": "XXXXXXXXXXXXXXXXXXXX",
  "name": "Brand A US Fulfillment"
}
```

Good names:

```text
Brand A Fulfillment
Main Warehouse Account
US 3PL Fulfillment
WooCommerce Store A Fulfillment
Subscription Product Fulfillment
```

Avoid generic names:

```text
Fulfillment
Account
Test
Warehouse
```

---

# `description`

The `description` should explain when the Fulfillment Account is used.

Example:

```json
{
  "fulfillment_account_id": "XXXXXXXXXXXXXXXXXXXX",
  "description": "Primary fulfillment account for Brand A physical products sold through the main WooCommerce store."
}
```

A good description may include:

- Brand
- Store
- Website
- Product category
- Region
- Fulfillment provider
- Warehouse
- Production vs test status
- Which shippable products should use it

---

# `enabled`

`enabled` controls whether the Fulfillment Account is enabled.

Disable:

```json
{
  "fulfillment_account_id": "XXXXXXXXXXXXXXXXXXXX",
  "enabled": false
}
```

Enable:

```json
{
  "fulfillment_account_id": "XXXXXXXXXXXXXXXXXXXX",
  "enabled": true
}
```

Do not enable until:

1. Credentials/configuration are valid.
2. Required fulfillment center fields are saved.
3. Shippable product assignments are correct.
4. The account is intended for live fulfillment.
5. Any provider testing is complete.

If the Fulfillment Account is linked to shippable products, disabling it can affect fulfillment for those products. If those products are actively being sold, they may not ship while the Fulfillment Account is disabled.

---

---

# Critical Requirement: Enabled Status and Active Product Sales

If a Fulfillment Account is associated with shippable products that are actively being sold, the Fulfillment Account must remain enabled.

A product may be correctly configured with:

```text
is_shippable = true
shipping_attributes.fulfillment_account = FULFILLMENT_ACCOUNT_ID
```

but if the associated Fulfillment Account is disabled, the product may not be shipped.

Conceptually:

```text
Customer buys shippable product
  ↓
Product points to Fulfillment Account
  ↓
Fulfillment Account is disabled
  ↓
Shipment may not be sent to fulfillment provider
  ↓
Product may not be shipped
```

This means disabling a Fulfillment Account is a high-impact operational change.

---

## MCP Guidance Before Disabling

Before setting:

```json
"enabled": false
```

MCP should determine:

1. Are any active shippable products assigned to this Fulfillment Account?
2. Are those products currently being sold?
3. Should fulfillment be intentionally paused?
4. Is there a replacement Fulfillment Account?
5. Have the products been reassigned to the replacement account?
6. Is the business aware that products attached to a disabled Fulfillment Account may not ship?

MCP should warn the user before disabling an account used by active shippable products.

---

## MCP Guidance Before Enabling

Before setting:

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

MCP should verify:

1. Required fulfillment center fields are saved.
2. Secure credentials/configuration are valid.
3. The Fulfillment Account is connected to the correct Site Fulfillment Center.
4. Assigned shippable products should actually route through this account.
5. The business is ready for live fulfillment through this provider/account.

---

## Replacement Account Migration

If a Fulfillment Account is being replaced, the safer order is:

```text
1. Create or verify replacement Fulfillment Account.
2. Confirm replacement account is enabled and ready.
3. Reassign affected shippable products to the replacement account.
4. Verify product routing.
5. Disable the old Fulfillment Account only after migration is complete.
```

Do not disable an old Fulfillment Account before migrating active shippable products unless the business intentionally wants fulfillment to stop.


# `fulfillment_center`

`fulfillment_center` is the 20-character Site Fulfillment Center ID.

Changing it is high impact.

It changes which RevCent-supported provider/integration definition the user Fulfillment Account is associated with.

Example:

```json
{
  "fulfillment_account_id": "XXXXXXXXXXXXXXXXXXXX",
  "fulfillment_center": "YYYYYYYYYYYYYYYYYYYY",
  "secure_form_id": "ZZZZZZZZZZZZZZZZZZZZ"
}
```

---

## Changing the Site Fulfillment Center

If modifying the fulfillment center, the new Site Fulfillment Center’s required fields/credentials must be provided.

MCP should satisfy this through a new Secure Form, not by asking the user to paste credentials into chat.

Workflow:

```text
1. Use GetSiteFulfillmentCenters or GetSiteFulfillmentCenter to choose/verify the new Site Fulfillment Center.
2. Review the required fields.
3. Create Secure Form with form_source = fulfillment_center and form_source_id = new Site Fulfillment Center ID.
4. User completes Secure Form.
5. Call EditFulfillmentAccount with new fulfillment_center and secure_form_id.
6. Verify fulfillment_center_fields_saved afterward.
```

Important:

```text
Changing fulfillment_center without supplying updated credentials/required fields may leave the account unusable.
```

---

# `secure_form_id`

`secure_form_id` is used when changing credentials or changing the Site Fulfillment Center.

The schema says:

```text
Only provide if changing credentials or if changing the site fulfillment center.
```

Use `CreateSecureForm` to create a new Secure Form.

Secure Form request for fulfillment:

```json
{
  "form_source": "fulfillment_center",
  "form_source_id": "SITE_FULFILLMENT_CENTER_ID"
}
```

Use the returned 20-character `secure_form_id` after the user completes the form.

Do not include sensitive credentials in the `EditFulfillmentAccount` request body.

---

# Secure Form Expiration

Secure Forms expire after 1 hour.

If the form expires before the user completes it:

```text
Do not reuse it.
Create a new Secure Form.
```

A completed Secure Form cannot be modified.

If credentials need to change again later, create another Secure Form.

---

# Shippable Product Association Is Critical

A Fulfillment Account is operationally important because shippable products reference it.

In RevCent product configuration:

```text
is_shippable = true
```

means the product physically ships.

For shippable products, the product should include:

```text
shipping_attributes.fulfillment_account
```

This is the 20-character Fulfillment Account ID associated with the product.

This association tells RevCent which Fulfillment Account should handle the shipment when the product is sold.

---

## Why Product Association Matters During Edits

Editing a Fulfillment Account can affect every shippable product associated with it.

For example:

```text
Fulfillment Account is disabled
  ↓
Products assigned to that account may no longer route correctly for fulfillment
```

```text
Fulfillment Account changes provider/fulfillment center
  ↓
Products assigned to that account may now route to a different provider
```

```text
Fulfillment credentials are invalid
  ↓
Products assigned to that account may fail fulfillment submission
```

Therefore, before high-impact edits, MCP should determine which shippable products use the Fulfillment Account.

---

## MCP Rule: Review Product Assignments After Edits

After editing a Fulfillment Account, MCP should remind the user to review affected shippable products.

Relevant product setting:

```text
shipping_attributes.fulfillment_account = edited fulfillment_account_id
```

Review is especially important when:

- Disabling a Fulfillment Account
- Changing the Site Fulfillment Center
- Updating credentials
- Renaming/reorganizing Fulfillment Accounts
- Moving products between brands, stores, providers, warehouses, or regions
- Retiring a fulfillment provider
- Creating a replacement Fulfillment Account

---

## If a Fulfillment Account Is Being Replaced

If a Fulfillment Account is being replaced by a new one:

```text
1. Create or verify the replacement Fulfillment Account.
2. Confirm required fields are saved.
3. Assign relevant shippable products to the replacement account.
4. Confirm shipments are routing correctly.
5. Disable the old account only after product migration is complete.
```

Do not disable an old Fulfillment Account before updating products that depend on it, unless the business intentionally wants fulfillment to stop.

---

## Product-Level Fulfillment Routing

Product-level assignment supports routing by:

- Brand
- Store
- Website
- Product line
- Warehouse
- Region
- Provider
- Subscription product type
- Trial product type

Examples:

```text
Brand A Supplement → Brand A Fulfillment Account
Brand B Product → Brand B Fulfillment Account
US Product → US Warehouse Fulfillment Account
EU Product → EU Warehouse Fulfillment Account
Subscription Refill → Subscription Fulfillment Account
```

MCP should preserve this routing logic when editing Fulfillment Accounts.

---

# Retrieved Status Fields

When using `GetFulfillmentAccount`, review these fields.

## `enabled`

Shows whether the account is currently enabled.

## `cancel_on_void`

Indicates whether RevCent should automatically contact the fulfillment center and cancel a shipment if the shipment is fully refunded and/or voided in RevCent.

The schema recommends this be true.

`cancel_on_void` helps avoid:

- Shipping cancelled orders
- Shipping refunded orders
- Unnecessary fulfillment cost
- Customer confusion
- Inventory issues

## `fulfillment_center`

Shows the Site Fulfillment Center associated with the user Fulfillment Account.

## `fulfillment_center_fields_saved`

Indicates whether required fulfillment center fields have been saved.

If false:

```text
The account may not be fully configured.
```

Use a new Secure Form and `EditFulfillmentAccount` to update required credentials/configuration.

---

# Example Requests

## Rename Only

```json
{
  "fulfillment_account_id": "XXXXXXXXXXXXXXXXXXXX",
  "name": "Brand A US Fulfillment"
}
```

---

## Update Description Only

```json
{
  "fulfillment_account_id": "XXXXXXXXXXXXXXXXXXXX",
  "description": "Primary fulfillment account for Brand A products shipped from the US warehouse."
}
```

---

## Disable Account

```json
{
  "fulfillment_account_id": "XXXXXXXXXXXXXXXXXXXX",
  "enabled": false
}
```

Before disabling, review shippable products using this account.

---

## Enable Account

```json
{
  "fulfillment_account_id": "XXXXXXXXXXXXXXXXXXXX",
  "enabled": true
}
```

Enable only after credentials, required fields, and product assignments are verified.

---

## Update Credentials

```json
{
  "fulfillment_account_id": "XXXXXXXXXXXXXXXXXXXX",
  "secure_form_id": "YYYYYYYYYYYYYYYYYYYY"
}
```

---

## Change Site Fulfillment Center

```json
{
  "fulfillment_account_id": "XXXXXXXXXXXXXXXXXXXX",
  "fulfillment_center": "YYYYYYYYYYYYYYYYYYYY",
  "secure_form_id": "ZZZZZZZZZZZZZZZZZZZZ"
}
```

---

# MCP Questions Before Editing

Before calling `EditFulfillmentAccount`, MCP should determine:

1. Which Fulfillment Account should be edited?
2. What is the `fulfillment_account_id`?
3. What field or fields need to change?
4. Is the change low risk, such as name or description?
5. Is the account being enabled or disabled?
6. Is the Site Fulfillment Center changing?
7. Are credentials/configuration changing?
8. Is a new Secure Form required?
9. Has the user completed the Secure Form?
10. Are required fulfillment center fields saved?
11. Which shippable products are associated with this Fulfillment Account?
12. Will disabling or changing this account affect live fulfillment?
13. Is this account being replaced by another Fulfillment Account?
14. Should products be reassigned before disabling the old account?
15. Does the brand/store/warehouse/product routing still make sense?
16. Should EasyPost or Shippo be considered if delivery visibility is needed?

---

# Validation Checklist

Before submitting `EditFulfillmentAccount`:

1. `fulfillment_account_id` is present.
2. `fulfillment_account_id` is a 20-character ID.
3. At least one editable field is included.
4. Only fields being modified are included.
5. No unknown fields are included.
6. If `name` is included, it is unique and clear.
7. If `description` is included, it explains the account purpose.
8. If `enabled` is included, the enable/disable impact is understood.
9. If disabling, affected shippable products have been considered.
10. If disabling and products are actively being sold, the user has been warned that those products may not ship.
10. If `fulfillment_center` is included, it is a 20-character Site Fulfillment Center ID.
11. If changing `fulfillment_center`, the new required fields were reviewed.
12. If changing `fulfillment_center`, a new Secure Form was created and completed.
13. If changing credentials, `secure_form_id` is included.
14. If `secure_form_id` is included, it is 20 characters.
15. Credentials were not pasted into chat or request body fields.
16. After high-impact edits, product assignments should be reviewed.
17. After credential/provider edits, `fulfillment_center_fields_saved` should be verified.
18. If the account is being replaced, shippable products should be migrated before disabling the old account.

---

# Common Mistakes

## Mistake: Sending the Full Object for a Simple Edit

Wrong:

```json
{
  "fulfillment_account_id": "XXXXXXXXXXXXXXXXXXXX",
  "name": "New Name",
  "enabled": true,
  "fulfillment_center": "YYYYYYYYYYYYYYYYYYYY"
}
```

if only the name should change.

Correct:

```json
{
  "fulfillment_account_id": "XXXXXXXXXXXXXXXXXXXX",
  "name": "New Name"
}
```

---

## Mistake: Changing Fulfillment Center Without Credentials

Wrong:

```json
{
  "fulfillment_account_id": "XXXXXXXXXXXXXXXXXXXX",
  "fulfillment_center": "YYYYYYYYYYYYYYYYYYYY"
}
```

if the new Site Fulfillment Center requires credentials/configuration.

Correct:

```json
{
  "fulfillment_account_id": "XXXXXXXXXXXXXXXXXXXX",
  "fulfillment_center": "YYYYYYYYYYYYYYYYYYYY",
  "secure_form_id": "ZZZZZZZZZZZZZZZZZZZZ"
}
```

---

## Mistake: Disabling an Account Without Reviewing Products

A Fulfillment Account may be assigned to many shippable products.

Disabling it without reviewing product assignments can break fulfillment routing. If products assigned to that Fulfillment Account are actively being sold, they may not ship while the account is disabled.

---

## Mistake: Asking for Credentials in Chat

Use Secure Forms instead.

---

## Mistake: Forgetting Product Association

Editing the Fulfillment Account does not automatically ensure products are correctly associated.

Shippable products still need:

```text
shipping_attributes.fulfillment_account
```

set to the correct Fulfillment Account ID.

---

# Output Schema

Successful response:

```json
{
  "api_call_id": "XXXXXXXXXXXXXXXXXXXX",
  "api_call_unix": 1740000000,
  "code": 1,
  "fulfillment_account_id": "YYYYYYYYYYYYYYYYYYYY",
  "result": "..."
}
```

| Field | Description |
|---|---|
| `api_call_id` | 20-character API call ID. |
| `api_call_unix` | Unix timestamp when the API call was initiated. |
| `code` | API response code. `1` indicates success. |
| `fulfillment_account_id` | 20-character Fulfillment Account ID edited by the operation. |
| `result` | Human-readable result message. |

---

# Quick Reference

Minimum edit shape:

```json
{
  "fulfillment_account_id": "XXXXXXXXXXXXXXXXXXXX"
}
```

Credentials update:

```json
{
  "fulfillment_account_id": "XXXXXXXXXXXXXXXXXXXX",
  "secure_form_id": "YYYYYYYYYYYYYYYYYYYY"
}
```

Change provider/fulfillment center:

```json
{
  "fulfillment_account_id": "XXXXXXXXXXXXXXXXXXXX",
  "fulfillment_center": "YYYYYYYYYYYYYYYYYYYY",
  "secure_form_id": "ZZZZZZZZZZZZZZZZZZZZ"
}
```

Most important rules:

```text
EditFulfillmentAccount is a partial-update operation.
Only include fields being modified.
Use secure_form_id for credential updates.
Use secure_form_id when changing fulfillment_center if required fields/credentials are needed.
Do not collect credentials in chat.
Review affected shippable products before disabling or changing a Fulfillment Account. Fulfillment Accounts associated with actively sold shippable products must remain enabled or those products may not ship.
Every shippable product should be associated with the correct Fulfillment Account using shipping_attributes.fulfillment_account.
After high-impact edits, verify fulfillment_center_fields_saved and product assignments.
```


---
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.