Skip to content

Terminate

Permanently deletes a user account using either soft or hard delete strategy. This is an irreversible operation that requires authentication.

Endpoint

POST /auth/terminate

Authentication: Tenant authentication and user authentication required

Description

The terminate endpoint allows authenticated users to delete their account permanently. The endpoint supports two deletion strategies:

  • Soft delete (suspended): The account is marked as suspended and hidden from the system, but the data is retained. This allows for potential account recovery in the future.
  • Hard delete (terminated): The account is permanently deleted and marked as terminated. This is a more permanent deletion strategy.

After successful termination:

  • The user's status is transitioned to suspended (soft delete) or terminated (hard delete)
  • The operation returns a success response
  • If the account is terminated (hard delete), it can no longer be used for authentication

Important: After a successful termination, the application must immediately discard and stop using the access token. Terminated accounts (hard delete) cannot be used for any API requests.

Request

Body

json
{
  "reason": "User requested account deletion",
  "strategy": "soft"
}
ParameterTypeRequiredDescriptionConstraints
reasonstringYesReason for account terminationNon-empty string
strategystringYesDeletion strategyMust be "soft" or "hard"

Response

Status Code: 201 Created

json
{
  "meta": {
    "requestId": "req-12345",
    "timestamp": "2025-01-15T10:30:00.000Z"
  },
  "data": {
    "success": true
  }
}
FieldTypeDescription
successbooleanAlways true on success

Rate Limiting

Rate limiting is applied to prevent abuse and ensure system stability. The terminate endpoint has the following rate limits:

Limit TypeRateWindow
Per IP10 requests1 hour

When rate limits are exceeded, the API returns a 429 Too Many Requests status code.

For information about rate limit headers, see Rate Limiting in the overview.

Errors

For detailed explanations of all error codes, see the Error Codes page where you can find all system errors.

400 Bad Request - Validation Error

Occurs when the request body fails validation. Common causes include missing required fields or invalid strategy value.

json
{
  "meta": {
    "requestId": "req-12345",
    "timestamp": "2025-01-15T10:30:00.000Z"
  },
  "error": {
    "message": "The provided request data is invalid.",
    "code": "VALIDATION_ERROR",
    "status": 400,
    "validation": {
      "reason": "Required",
      "strategy": "Invalid enum value. Expected 'soft' | 'hard', received 'invalid'"
    }
  }
}
FieldError MessageCause
reasonRequiredReason is missing
strategyInvalid enum valueStrategy is not "soft" or "hard"

403 Forbidden - Restricted Capability

Occurs when the terminate capability is restricted for the tenant or user.

json
{
  "meta": {
    "requestId": "req-12345",
    "timestamp": "2025-01-15T10:30:00.000Z"
  },
  "error": {
    "message": "Capability terminate is restricted",
    "code": "RESTRICTED_CAPABILITY",
    "status": 403
  }
}

429 Too Many Requests - Rate Limit Exceeded

Occurs when the rate limit is exceeded. See Rate Limiting section for details.

json
{
  "meta": {
    "requestId": "req-12345",
    "timestamp": "2025-01-15T10:30:00.000Z"
  },
  "error": {
    "message": "Too many requests",
    "code": "TOO_MANY_REQUESTS",
    "status": 429
  }
}

500 Internal Server Error

Occurs when an internal error happens during account termination. Common causes include missing terminate reason or strategy, missing user context, or other unexpected system state.

Error codes:

  • UNEXPECTED_STATE - Unexpected system state (e.g., missing terminate reason or strategy, missing user context)
  • INTERNAL_SERVER - General internal server error
json
{
  "meta": {
    "requestId": "req-12345",
    "timestamp": "2025-01-15T10:30:00.000Z"
  },
  "error": {
    "message": "Missing terminate reason or strategy",
    "code": "UNEXPECTED_STATE",
    "status": 500
  }
}
json
{
  "meta": {
    "requestId": "req-12345",
    "timestamp": "2025-01-15T10:30:00.000Z"
  },
  "error": {
    "message": "Something went wrong on our side.",
    "code": "INTERNAL_SERVER",
    "status": 500
  }
}

Notes

  • The terminate endpoint requires user authentication via a valid JWT access token
  • After termination, the application must delete the access token from local storage and never use it again
  • Soft delete (suspended) allows for potential account recovery, while hard delete (terminated) is permanent
  • Terminated accounts (hard delete) cannot be used for authentication or API requests