Skip to content

Re-enroll a previously excluded customer

POST /customers/{customer_id}/reenroll
Scopecustomers:write
Customer session tokenNot accepted: call from your server with an API key
Rate limit classwrite (limits)
Idempotency keyRequired (idempotency)
MCP toolcharm_reenroll_customer
NameInTypeDescription
customer_idpathstringShopify customer GID (percent-encoded, e.g. gid%3A%2F%2Fshopify%2FCustomer%2F123) or the numeric customer id.

Returns CustomerWriteResult.

FieldTypeDescription
changedboolean
customerCustomer or CustomerState
previous_tier_idstring or null(optional, nullable)
bonus_pointsnumber(optional)
{
"changed": true,
"customer": {
"id": "gid://shopify/Customer/7712345",
"legacy_id": 7712345,
"email": "shopper@example.com",
"first_name": "Jane",
"last_name": "Doe",
"points_balance": 120,
"points_earned": 120,
"points_redeemed": 120,
"pending_points": 120,
"tier": null,
"next_tier": null,
"rewards": [
null
],
"history": [
null
],
"program": {
"enabled": null,
"program_name": null,
"points_name": null,
"points_expiry": null,
"reward_expiry": null,
"eligibility": null,
"referral": null,
"memberships_enabled": null,
"tiers_enabled": null,
"earning_rules": null,
"redemption_rules": null,
"revision": null,
"updated_at": null
},
"referral": null,
"referral_code": "JANE10",
"excluded_from_program": false,
"enrolled_at": "2026-10-01T09:30:00.000Z",
"enrolled_via": "Embedded Widget",
"birthday": null,
"orders_count": 1,
"lifetime_spend": 1,
"last_activity_at": "2026-10-01T09:30:00.000Z",
"updated_at": "2026-10-01T09:30:00.000Z"
},
"previous_tier_id": "silver",
"bonus_points": 120
}
Terminal window
curl -X POST "https://charm.appfleece.app/api/v1/customers/7712345/reenroll" \
-H "Authorization: Bearer chrm_live_..." \
-H "Idempotency-Key: $(uuidgen)"

unauthorized · invalid_token · insufficient_scope · access_required · not_found · validation_error · rate_limited · idempotency_conflict

Every error body carries code, message, request_id and a doc_url pointing at the matching entry in the error catalog.