---
title: "Reissue a subscription's access"
method: POST
path: "/v1/subscriptions/{subscription}/grants/reissue"
tags: ["Subscriptions"]
---

# Reissue a subscription's access

`POST /v1/subscriptions/{subscription}/grants/reissue`

## Request

- Base URL: `https://api.subscriby.net`
- URL: `https://api.subscriby.net/v1/subscriptions/{subscription}/grants/reissue`
- Auth: HTTP bearer

```bash
curl -X POST https://api.subscriby.net/v1/subscriptions/$SUBSCRIPTION_ID/grants/reissue \
  -H "Authorization: Bearer $SUBSCRIBY_TOKEN" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{ "resource_id": "c9e21f37-8a4b-4d56-b1e0-2f7c9d3a6e15" }'
```

The members page's **Refresh invite links**, for integrations. The grants the member holds are revoked (their personal invite links die) and the job that grants at purchase runs again, issuing fresh grants the bot sends to the member. `resource_id` is optional: name one resource of the plan to reissue it alone, leave it out to reissue every resource the subscription grants.

Answers `202` once the reissue is queued, where `reissued` counts the grants revoked; the fresh grants appear on the grants endpoint seconds later. Each revoked grant raises `member.resource_reissued` and each fresh one `member.resource_added`.

## Path parameters

- `subscription` string, uuid, required

## Headers

- `Idempotency-Key` string, uuid, required

## Request body

- ReissueSubscriptionGrantsRequest: Which access to reissue: one resource of the plan, or every resource the purchase grants when the body is empty.
  - `resource_id` string, uuid, nullable: A resource the plan grants, to reissue it alone; omit it to reissue every resource. A resource the plan does not grant answers 404.

## Response `202`

202 with `subscription_id`, `reissued` and `reissue_queued`.

- object
  - `data` object, required: The response's payload.
    - `subscription_id` string, required: The purchase whose access is being reissued.
    - `reissued` integer, required: How many grants were revoked; as many fresh ones follow from the queue.
    - `status` 'reissue_queued', required: Always `reissue_queued`: the fresh grants come from the background dispatcher.

## Other responses

- `400`: `IDEMPOTENCY_KEY_MISSING`: every write needs an `Idempotency-Key` header. Send a fresh UUID per distinct operation.
- `401`: `AUTHENTICATION_REQUIRED`: the request carries no bearer token, or one that is revoked, malformed, or minted for another environment (an `sbt_test_` token on production).
- `403`: `TOKEN_MISSING_ABILITY`: the token is valid but does not carry the ability this endpoint requires; `error.context.required_ability` names the one to grant. An endpoint that also checks who owns a row or which tier the account is on answers `FORBIDDEN`, `TEAM_TIER_REQUIRED` or `CONNECTOR_TIER_REQUIRED` with the same status, and says so in its own description.
- `404`: `RESOURCE_NOT_FOUND`: an id in the path names nothing the token can see. `TENANT_MISMATCH`: the project sits outside the token's `scope:project:` allow-list, or the token carries no team scope. Both answer 404 rather than 403 so that existence outside the token's scope cannot be inferred. On this endpoint: `RESOURCE_NOT_FOUND`: when `resource_id` is not one the plan grants.
- `409`: `IDEMPOTENCY_KEY_REUSED`: the key was already used in the last 24 hours with a different request body.
- `422`: `VALIDATION_FAILED`: the payload broke a rule, and `error.fields` maps each offending key to its messages. A refusal from the domain, such as a plan that cannot go on sale or a member who cannot be removed, uses the same code with `error.message` saying why and no `fields`. On this endpoint: `VALIDATION_FAILED`: when the subscription is not active; `error.context.subscription_id` names it.
- `425`: `IDEMPOTENCY_REPLAY_IN_PROGRESS`: the first request with this key is still running; retry in a few seconds and the original response is replayed.
- `429`: `RATE_LIMITED`: the token has spent its 300 requests a minute or 10,000 an hour; `Retry-After` says when the next one is accepted.

---

[API](https://skmtc.dev/memberpass/apis/subscriby-rest-api.md) · [All operations](https://skmtc.dev/memberpass/apis/subscriby-rest-api/llms.txt) · [OpenAPI document](https://skmtc.dev/memberpass/apis/subscriby-rest-api/revisions/59c4df91d764?raw)
