Skip to main content
POST
/
members
/
access
curl --request POST \
  --url https://api.kardow.com/members/access \
  --header 'Content-Type: application/json' \
  --header 'x-api-key: <api-key>' \
  --data '
{
  "email": "member@example.com",
  "action": "expire_now",
  "stripeSubscriptionId": "sub_123"
}
'
{
  "data": {
    "id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
    "organizationId": 123,
    "userId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
    "planId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
    "status": "<string>",
    "stripeSubscriptionId": "<string>",
    "currentPeriodStart": "2023-11-07T05:31:56Z",
    "currentPeriodEnd": "2023-11-07T05:31:56Z",
    "cancelAt": "2023-11-07T05:31:56Z",
    "canceledAt": "2023-11-07T05:31:56Z",
    "jobsRemaining": 123,
    "metadata": {}
  }
}
Use this endpoint when the member already exists and you only need to change access state.

Supported Actions

action
string
required
activate, expire_now, cancel_now, cancel_at_period_end, reactivate, or mark_past_due.
email
string
Member email. Required if userId is not provided.
userId
string
Member UUID. Required if email is not provided.
stripeSubscriptionId
string
Existing external subscription identifier to target.
planId
string
Needed for activate if you do not send another plan identifier.
effectiveAt
string
Optional timestamp for a scheduled cancel or expiration.

Examples

Expire access immediately

cURL
curl --request POST \
  --url https://api.kardow.com/members/access \
  --header "Content-Type: application/json" \
  --header "x-api-key: your-api-key-here" \
  --data '{
    "email": "member@example.com",
    "action": "expire_now",
    "stripeSubscriptionId": "sub_123"
  }'

Cancel at period end

cURL
curl --request POST \
  --url https://api.kardow.com/members/access \
  --header "Content-Type: application/json" \
  --header "x-api-key: your-api-key-here" \
  --data '{
    "email": "member@example.com",
    "action": "cancel_at_period_end",
    "stripeSubscriptionId": "sub_123",
    "effectiveAt": "2026-04-09T12:00:00.000Z"
  }'

Activate a new plan

cURL
curl --request POST \
  --url https://api.kardow.com/members/access \
  --header "Content-Type: application/json" \
  --header "x-api-key: your-api-key-here" \
  --data '{
    "email": "member@example.com",
    "action": "activate",
    "stripePriceId": "price_paywall_monthly",
    "startsAt": "2026-03-10T12:00:00.000Z"
  }'

Reactivate a paused or canceled subscription

cURL
curl --request POST \
  --url https://api.kardow.com/members/access \
  --header "Content-Type: application/json" \
  --header "x-api-key: your-api-key-here" \
  -d '{
    "email": "member@example.com",
    "action": "reactivate",
    "stripeSubscriptionId": "sub_123"
  }'

Response Shape

data
object
required
The updated subscription record after the action is applied.

Example response

{
  "data": {
    "id": "22222222-2222-2222-2222-222222222222",
    "organizationId": 42,
    "userId": "11111111-1111-1111-1111-111111111111",
    "planId": "33333333-3333-3333-3333-333333333333",
    "status": "active",
    "stripeSubscriptionId": "sub_123",
    "currentPeriodStart": "2026-03-10T12:00:00.000Z",
    "currentPeriodEnd": "2026-04-10T12:00:00.000Z",
    "cancelAt": null,
    "canceledAt": null,
    "jobsRemaining": null,
    "metadata": null
  }
}

Authorizations

x-api-key
string
header
required

API key for authentication. Get yours from Settings > API Keys in the Kardow dashboard.

Body

application/json
action
enum<string>
required
Available options:
activate,
expire_now,
cancel_now,
cancel_at_period_end,
reactivate,
mark_past_due
email
string<email>
userId
string<uuid>
planId
string<uuid>
stripePriceId
string
paypalPlanId
string
planName
string
subscriptionId
string<uuid>
stripeSubscriptionId
string
effectiveAt
string<date-time>
startsAt
string<date-time>
endsAt
string<date-time>
jobsRemaining
integer | null
metadata
object

Response

Subscription updated

data
object
required