@clerk/backend
Version:
Clerk Backend SDK - REST Client for Backend API & JWT verification utilities
934 lines • 30 kB
TypeScript
import type { LastAuthenticationStrategy, SignUpStatus, VerificationStatus } from '@clerk/types';
import type { ActorTokenStatus, AllowlistIdentifierType, BlocklistIdentifierType, DomainsEnrollmentModes, InvitationStatus, OrganizationDomainVerificationStatus, OrganizationDomainVerificationStrategy, OrganizationEnrollmentMode, OrganizationInvitationStatus, OrganizationMembershipRole, SignInStatus, SignUpVerificationNextAction, WaitlistEntryStatus } from './Enums';
export declare const ObjectType: {
readonly AccountlessApplication: "accountless_application";
readonly ActorToken: "actor_token";
readonly AllowlistIdentifier: "allowlist_identifier";
readonly ApiKey: "api_key";
readonly BlocklistIdentifier: "blocklist_identifier";
readonly Client: "client";
readonly Cookies: "cookies";
readonly Domain: "domain";
readonly Email: "email";
readonly EmailAddress: "email_address";
readonly ExternalAccount: "external_account";
readonly FacebookAccount: "facebook_account";
readonly GoogleAccount: "google_account";
readonly Instance: "instance";
readonly InstanceRestrictions: "instance_restrictions";
readonly InstanceSettings: "instance_settings";
readonly Invitation: "invitation";
readonly Machine: "machine";
readonly MachineScope: "machine_scope";
readonly MachineSecretKey: "machine_secret_key";
readonly M2MToken: "machine_to_machine_token";
readonly JwtTemplate: "jwt_template";
readonly OauthAccessToken: "oauth_access_token";
readonly IdpOAuthAccessToken: "clerk_idp_oauth_access_token";
readonly OAuthApplication: "oauth_application";
readonly Organization: "organization";
readonly OrganizationDomain: "organization_domain";
readonly OrganizationInvitation: "organization_invitation";
readonly OrganizationMembership: "organization_membership";
readonly OrganizationSettings: "organization_settings";
readonly PhoneNumber: "phone_number";
readonly ProxyCheck: "proxy_check";
readonly RedirectUrl: "redirect_url";
readonly SamlAccount: "saml_account";
readonly SamlConnection: "saml_connection";
readonly Session: "session";
readonly SignInAttempt: "sign_in_attempt";
readonly SignInToken: "sign_in_token";
readonly SignUpAttempt: "sign_up_attempt";
readonly SmsMessage: "sms_message";
readonly User: "user";
readonly WaitlistEntry: "waitlist_entry";
readonly Web3Wallet: "web3_wallet";
readonly Token: "token";
readonly TotalCount: "total_count";
readonly TestingToken: "testing_token";
readonly Role: "role";
readonly Permission: "permission";
readonly BillingPayer: "commerce_payer";
readonly BillingPaymentAttempt: "commerce_payment_attempt";
readonly BillingSubscription: "commerce_subscription";
readonly BillingSubscriptionItem: "commerce_subscription_item";
readonly BillingPlan: "commerce_plan";
readonly Feature: "feature";
};
export type ObjectType = (typeof ObjectType)[keyof typeof ObjectType];
export interface ClerkResourceJSON {
/**
* The type of the resource.
*/
object: ObjectType;
/**
* The unique identifier for the resource.
*/
id: string;
}
export interface CookiesJSON {
object: typeof ObjectType.Cookies;
cookies: string[];
}
export interface TokenJSON {
object: typeof ObjectType.Token;
jwt: string;
}
export interface AccountlessApplicationJSON extends ClerkResourceJSON {
object: typeof ObjectType.AccountlessApplication;
publishable_key: string;
secret_key: string;
claim_url: string;
api_keys_url: string;
}
export interface ActorTokenJSON extends ClerkResourceJSON {
object: typeof ObjectType.ActorToken;
id: string;
status: ActorTokenStatus;
user_id: string;
actor: Record<string, unknown> | null;
token?: string | null;
url?: string | null;
created_at: number;
updated_at: number;
}
export interface AllowlistIdentifierJSON extends ClerkResourceJSON {
object: typeof ObjectType.AllowlistIdentifier;
identifier: string;
identifier_type: AllowlistIdentifierType;
instance_id?: string;
invitation_id?: string;
created_at: number;
updated_at: number;
}
export interface BlocklistIdentifierJSON extends ClerkResourceJSON {
object: typeof ObjectType.BlocklistIdentifier;
identifier: string;
identifier_type: BlocklistIdentifierType;
instance_id?: string;
created_at: number;
updated_at: number;
}
export interface ClientJSON extends ClerkResourceJSON {
object: typeof ObjectType.Client;
session_ids: string[];
sessions: SessionJSON[];
sign_in_id: string | null;
sign_up_id: string | null;
last_active_session_id: string | null;
last_authentication_strategy: LastAuthenticationStrategy | null;
created_at: number;
updated_at: number;
}
export interface CnameTargetJSON {
host: string;
value: string;
/**
* Denotes whether this CNAME target is required to be set in order for the domain to be considered deployed.
*/
required: boolean;
}
export interface DomainJSON extends ClerkResourceJSON {
object: typeof ObjectType.Domain;
id: string;
name: string;
is_satellite: boolean;
frontend_api_url: string;
/**
* null for satellite domains
*/
accounts_portal_url?: string | null;
proxy_url?: string;
development_origin: string;
cname_targets: CnameTargetJSON[];
}
export interface EmailJSON extends ClerkResourceJSON {
object: typeof ObjectType.Email;
slug?: string | null;
from_email_name: string;
to_email_address?: string;
email_address_id: string | null;
user_id?: string | null;
subject?: string;
body?: string;
body_plain?: string | null;
status?: string;
data?: Record<string, any> | null;
delivered_by_clerk: boolean;
}
export interface EmailAddressJSON extends ClerkResourceJSON {
object: typeof ObjectType.EmailAddress;
email_address: string;
verification: VerificationJSON | null;
linked_to: IdentificationLinkJSON[];
}
export interface ExternalAccountJSON extends ClerkResourceJSON {
object: typeof ObjectType.ExternalAccount;
provider: string;
identification_id: string;
provider_user_id: string;
approved_scopes: string;
email_address: string;
first_name: string;
last_name: string;
image_url?: string;
username: string | null;
phone_number: string | null;
public_metadata?: Record<string, unknown> | null;
label: string | null;
verification: VerificationJSON | null;
}
export interface JwksJSON {
keys?: JwksKeyJSON[];
}
export interface JwksKeyJSON {
use: string;
kty: string;
kid: string;
alg: string;
n: string;
e: string;
}
export interface JwtTemplateJSON extends ClerkResourceJSON {
object: typeof ObjectType.JwtTemplate;
id: string;
name: string;
claims: object;
lifetime: number;
allowed_clock_skew: number;
custom_signing_key: boolean;
signing_algorithm: string;
created_at: number;
updated_at: number;
}
export interface SamlAccountJSON extends ClerkResourceJSON {
object: typeof ObjectType.SamlAccount;
provider: string;
provider_user_id: string | null;
active: boolean;
email_address: string;
first_name: string;
last_name: string;
verification: VerificationJSON | null;
saml_connection: SamlAccountConnectionJSON | null;
last_authenticated_at: number | null;
enterprise_connection_id: string | null;
}
export interface IdentificationLinkJSON extends ClerkResourceJSON {
type: string;
}
export interface OrganizationSettingsJSON extends ClerkResourceJSON {
object: typeof ObjectType.OrganizationSettings;
enabled: boolean;
max_allowed_memberships: number;
max_allowed_roles: number;
max_allowed_permissions: number;
creator_role: string;
admin_delete_enabled: boolean;
domains_enabled: boolean;
slug_disabled: boolean;
domains_enrollment_modes: Array<DomainsEnrollmentModes>;
domains_default_role: string;
}
export interface InstanceJSON extends ClerkResourceJSON {
object: typeof ObjectType.Instance;
id: string;
environment_type: string;
allowed_origins: Array<string> | null;
}
export interface InstanceRestrictionsJSON extends ClerkResourceJSON {
object: typeof ObjectType.InstanceRestrictions;
allowlist: boolean;
blocklist: boolean;
block_email_subaddresses: boolean;
block_disposable_email_domains: boolean;
ignore_dots_for_gmail_addresses: boolean;
}
export interface InstanceSettingsJSON extends ClerkResourceJSON {
object: typeof ObjectType.InstanceSettings;
id: string;
restricted_to_allowlist: boolean;
from_email_address: string;
progressive_sign_up: boolean;
enhanced_email_deliverability: boolean;
}
export interface InvitationJSON extends ClerkResourceJSON {
object: typeof ObjectType.Invitation;
email_address: string;
public_metadata: Record<string, unknown> | null;
revoked?: boolean;
status: InvitationStatus;
url?: string;
created_at: number;
updated_at: number;
}
export interface OauthAccessTokenJSON {
external_account_id: string;
object: typeof ObjectType.OauthAccessToken;
token: string;
provider: string;
public_metadata: Record<string, unknown>;
label: string | null;
scopes?: string[];
token_secret?: string;
expires_at?: number;
}
export interface OAuthApplicationJSON extends ClerkResourceJSON {
object: typeof ObjectType.OAuthApplication;
id: string;
instance_id: string;
name: string;
client_id: string;
client_uri: string | null;
client_image_url: string | null;
dynamically_registered: boolean;
consent_screen_enabled: boolean;
pkce_required: boolean;
public: boolean;
scopes: string;
redirect_uris: Array<string>;
authorize_url: string;
token_fetch_url: string;
user_info_url: string;
discovery_url: string;
token_introspection_url: string;
created_at: number;
updated_at: number;
client_secret?: string;
}
export interface OrganizationJSON extends ClerkResourceJSON {
object: typeof ObjectType.Organization;
name: string;
slug: string;
image_url?: string;
has_image: boolean;
members_count?: number;
pending_invitations_count?: number;
max_allowed_memberships: number;
admin_delete_enabled: boolean;
public_metadata: OrganizationPublicMetadata | null;
private_metadata?: OrganizationPrivateMetadata;
created_by?: string;
created_at: number;
updated_at: number;
}
export interface OrganizationDomainJSON extends ClerkResourceJSON {
object: typeof ObjectType.OrganizationDomain;
id: string;
name: string;
organization_id: string;
enrollment_mode: OrganizationEnrollmentMode;
verification: OrganizationDomainVerificationJSON | null;
affiliation_email_address: string | null;
created_at: number;
updated_at: number;
total_pending_invitations: number;
total_pending_suggestions: number;
}
export interface OrganizationDomainVerificationJSON {
status: OrganizationDomainVerificationStatus;
strategy: OrganizationDomainVerificationStrategy;
attempts: number;
expires_at: number;
}
export interface OrganizationInvitationJSON extends ClerkResourceJSON {
email_address: string;
role: OrganizationMembershipRole;
role_name: string;
organization_id: string;
public_organization_data?: PublicOrganizationDataJSON | null;
status?: OrganizationInvitationStatus;
public_metadata: OrganizationInvitationPublicMetadata;
private_metadata: OrganizationInvitationPrivateMetadata;
url: string | null;
created_at: number;
updated_at: number;
expires_at: number;
}
export interface OrganizationInvitationAcceptedJSON extends OrganizationInvitationJSON {
status: 'accepted';
user_id: string;
}
/**
* @interface
*/
export interface PublicOrganizationDataJSON extends ClerkResourceJSON {
/**
* The name of the Organization.
*/
name: string;
/**
* The slug of the Organization.
*/
slug: string;
/**
* Holds the default Organization profile image. Compatible with Clerk's [Image Optimization](https://clerk.com/docs/guides/development/image-optimization).
*/
image_url?: string;
/**
* Whether the Organization has a profile image.
*/
has_image: boolean;
}
export interface OrganizationMembershipJSON extends ClerkResourceJSON {
object: typeof ObjectType.OrganizationMembership;
public_metadata: OrganizationMembershipPublicMetadata;
private_metadata?: OrganizationMembershipPrivateMetadata;
role: OrganizationMembershipRole;
permissions: string[];
created_at: number;
updated_at: number;
organization: OrganizationJSON;
public_user_data: OrganizationMembershipPublicUserDataJSON;
}
export interface OrganizationMembershipPublicUserDataJSON {
identifier: string;
first_name: string | null;
last_name: string | null;
image_url: string;
has_image: boolean;
user_id: string;
}
export interface PhoneNumberJSON extends ClerkResourceJSON {
object: typeof ObjectType.PhoneNumber;
phone_number: string;
reserved_for_second_factor: boolean;
default_second_factor: boolean;
reserved: boolean;
verification: VerificationJSON | null;
linked_to: IdentificationLinkJSON[];
backup_codes: string[];
}
export type ProxyCheckJSON = {
object: typeof ObjectType.ProxyCheck;
id: string;
domain_id: string;
last_run_at: number | null;
proxy_url: string;
successful: boolean;
created_at: number;
updated_at: number;
};
export interface RedirectUrlJSON extends ClerkResourceJSON {
object: typeof ObjectType.RedirectUrl;
url: string;
created_at: number;
updated_at: number;
}
export interface SessionActivityJSON extends ClerkResourceJSON {
id: string;
device_type?: string;
is_mobile: boolean;
browser_name?: string;
browser_version?: string;
ip_address?: string;
city?: string;
country?: string;
}
export interface SessionJSON extends ClerkResourceJSON {
object: typeof ObjectType.Session;
client_id: string;
user_id: string;
status: string;
last_active_organization_id?: string;
actor: Record<string, unknown> | null;
latest_activity?: SessionActivityJSON;
last_active_at: number;
expire_at: number;
abandon_at: number;
created_at: number;
updated_at: number;
}
/**
* Session webhook event payload extending `SessionJSON` interface with associated `User` information.
* Used for `session.created`, `session.ended`, `session.removed`, and `session.revoked` webhook events.
*/
export interface SessionWebhookEventJSON extends SessionJSON {
/**
* The user associated with the session, or null if not available.
*/
user: UserJSON | null;
}
export interface SignInJSON extends ClerkResourceJSON {
object: typeof ObjectType.SignInToken;
status: SignInStatus;
identifier: string;
created_session_id: string | null;
}
export interface SignInTokenJSON extends ClerkResourceJSON {
object: typeof ObjectType.SignInToken;
user_id: string;
token: string;
status: 'pending' | 'accepted' | 'revoked';
url: string;
created_at: number;
updated_at: number;
}
export interface SignUpJSON extends ClerkResourceJSON {
object: typeof ObjectType.SignUpAttempt;
id: string;
status: SignUpStatus;
required_fields: string[];
optional_fields: string[];
missing_fields: string[];
unverified_fields: string[];
verifications: SignUpVerificationsJSON;
username: string | null;
email_address: string | null;
phone_number: string | null;
web3_wallet: string | null;
password_enabled: boolean;
first_name: string | null;
last_name: string | null;
public_metadata?: Record<string, unknown> | null;
unsafe_metadata?: Record<string, unknown> | null;
custom_action: boolean;
external_id: string | null;
created_session_id: string | null;
created_user_id: string | null;
abandon_at: number | null;
legal_accepted_at: number | null;
/**
* @deprecated Please use `verifications.external_account` instead
*/
external_account: object | null;
}
export interface SignUpVerificationsJSON {
email_address: SignUpVerificationJSON;
phone_number: SignUpVerificationJSON;
web3_wallet: SignUpVerificationJSON;
external_account: VerificationJSON;
}
export interface SignUpVerificationJSON {
next_action: SignUpVerificationNextAction;
supported_strategies: string[];
}
export interface SMSMessageJSON extends ClerkResourceJSON {
object: typeof ObjectType.SmsMessage;
from_phone_number: string;
to_phone_number: string;
phone_number_id: string | null;
user_id?: string;
message: string;
status: string;
slug?: string | null;
data?: Record<string, any> | null;
delivered_by_clerk: boolean;
}
export interface UserJSON extends ClerkResourceJSON {
object: typeof ObjectType.User;
username: string | null;
first_name: string | null;
last_name: string | null;
image_url: string;
has_image: boolean;
primary_email_address_id: string | null;
primary_phone_number_id: string | null;
primary_web3_wallet_id: string | null;
password_enabled: boolean;
two_factor_enabled: boolean;
totp_enabled: boolean;
backup_code_enabled: boolean;
email_addresses: EmailAddressJSON[];
phone_numbers: PhoneNumberJSON[];
web3_wallets: Web3WalletJSON[];
organization_memberships: OrganizationMembershipJSON[] | null;
external_accounts: ExternalAccountJSON[];
saml_accounts: SamlAccountJSON[];
password_last_updated_at: number | null;
public_metadata: UserPublicMetadata;
private_metadata: UserPrivateMetadata;
unsafe_metadata: UserUnsafeMetadata;
external_id: string | null;
last_sign_in_at: number | null;
banned: boolean;
locked: boolean;
lockout_expires_in_seconds: number | null;
verification_attempts_remaining: number | null;
created_at: number;
updated_at: number;
last_active_at: number | null;
create_organization_enabled: boolean;
create_organizations_limit: number | null;
delete_self_enabled: boolean;
legal_accepted_at: number | null;
/**
* The locale of the user in BCP-47 format.
*/
locale: string | null;
}
export interface VerificationJSON extends ClerkResourceJSON {
status: VerificationStatus;
strategy: string;
attempts: number | null;
expire_at: number | null;
verified_at_client?: string;
external_verification_redirect_url?: string | null;
nonce?: string | null;
message?: string | null;
}
export interface WaitlistEntryJSON extends ClerkResourceJSON {
object: typeof ObjectType.WaitlistEntry;
id: string;
status: WaitlistEntryStatus;
email_address: string;
invitation: InvitationJSON | null;
is_locked: boolean;
created_at: number;
updated_at: number;
}
export interface Web3WalletJSON extends ClerkResourceJSON {
object: typeof ObjectType.Web3Wallet;
web3_wallet: string;
verification: VerificationJSON | null;
}
export interface DeletedObjectJSON {
object: string;
id?: string;
slug?: string;
deleted: boolean;
}
/**
* User deletion webhook event payload that extends `DeletedObjectJSON`.
* Includes the `external_id` field to identify the deleted user in external systems.
* Used for `user.deleted` webhook events.
*/
export interface UserDeletedJSON extends DeletedObjectJSON {
/**
* The external identifier associated with the deleted user, if one was set.
*/
external_id?: string;
}
export interface PaginatedResponseJSON {
data: object[];
total_count?: number;
}
export interface SamlConnectionJSON extends ClerkResourceJSON {
object: typeof ObjectType.SamlConnection;
name: string;
domain: string;
organization_id: string | null;
idp_entity_id: string;
idp_sso_url: string;
idp_certificate: string;
idp_metadata_url: string;
idp_metadata: string;
acs_url: string;
sp_entity_id: string;
sp_metadata_url: string;
active: boolean;
provider: string;
user_count: number;
sync_user_attributes: boolean;
allow_subdomains: boolean;
allow_idp_initiated: boolean;
created_at: number;
updated_at: number;
attribute_mapping: AttributeMappingJSON;
}
export interface AttributeMappingJSON {
user_id: string;
email_address: string;
first_name: string;
last_name: string;
}
export interface TestingTokenJSON {
object: typeof ObjectType.TestingToken;
token: string;
expires_at: number;
}
export interface RoleJSON extends ClerkResourceJSON {
object: typeof ObjectType.Role;
key: string;
name: string;
description: string;
permissions: PermissionJSON[];
is_creator_eligible: boolean;
created_at: number;
updated_at: number;
}
export interface PermissionJSON extends ClerkResourceJSON {
object: typeof ObjectType.Permission;
key: string;
name: string;
description: string;
created_at: number;
updated_at: number;
}
export interface SamlAccountConnectionJSON extends ClerkResourceJSON {
id: string;
name: string;
domain: string;
active: boolean;
provider: string;
sync_user_attributes: boolean;
allow_subdomains: boolean;
allow_idp_initiated: boolean;
disable_additional_identifications: boolean;
created_at: number;
updated_at: number;
}
export interface MachineJSON extends ClerkResourceJSON {
object: typeof ObjectType.Machine;
id: string;
name: string;
instance_id: string;
created_at: number;
updated_at: number;
default_token_ttl: number;
scoped_machines: MachineJSON[];
secret_key?: string;
}
export interface MachineScopeJSON {
object: typeof ObjectType.MachineScope;
from_machine_id: string;
to_machine_id: string;
created_at?: number;
deleted?: boolean;
}
export interface MachineSecretKeyJSON {
object: typeof ObjectType.MachineSecretKey;
secret: string;
}
export interface M2MTokenJSON extends ClerkResourceJSON {
object: typeof ObjectType.M2MToken;
token?: string;
subject: string;
scopes: string[];
claims: Record<string, any> | null;
revoked: boolean;
revocation_reason: string | null;
expired: boolean;
expiration: number | null;
created_at: number;
updated_at: number;
}
export interface APIKeyJSON extends ClerkResourceJSON {
object: typeof ObjectType.ApiKey;
type: string;
name: string;
secret?: string;
subject: string;
scopes: string[];
claims: Record<string, any> | null;
revoked: boolean;
revocation_reason: string | null;
expired: boolean;
expiration: number | null;
created_by: string | null;
description: string | null;
last_used_at: number | null;
created_at: number;
updated_at: number;
}
export interface IdPOAuthAccessTokenJSON extends ClerkResourceJSON {
object: typeof ObjectType.IdpOAuthAccessToken;
client_id: string;
type: string;
subject: string;
scopes: string[];
revoked: boolean;
revocation_reason: string | null;
expired: boolean;
expiration: number | null;
created_at: number;
updated_at: number;
}
export interface BillingPayerJSON extends ClerkResourceJSON {
object: typeof ObjectType.BillingPayer;
instance_id: string;
user_id?: string;
first_name?: string;
last_name?: string;
email: string;
organization_id?: string;
organization_name?: string;
image_url: string;
created_at: number;
updated_at: number;
}
interface BillingPayeeJSON {
id: string;
gateway_type: string;
gateway_external_id: string;
gateway_status: 'active' | 'pending' | 'restricted' | 'disconnected';
}
interface BillingMoneyAmountJSON {
amount: number;
amount_formatted: string;
currency: string;
currency_symbol: string;
}
interface BillingTotalsJSON {
subtotal: BillingMoneyAmountJSON;
tax_total: BillingMoneyAmountJSON;
grand_total: BillingMoneyAmountJSON;
}
export interface FeatureJSON extends ClerkResourceJSON {
object: typeof ObjectType.Feature;
name: string;
description?: string | null;
slug: string;
avatar_url?: string | null;
}
/**
* @experimental This is an experimental API for the Billing feature that is available under a public beta, and the API is subject to change. It is advised to [pin](https://clerk.com/docs/pinning) the SDK version and the clerk-js version to avoid breaking changes.
*/
export interface BillingPlanJSON extends ClerkResourceJSON {
object: typeof ObjectType.BillingPlan;
id: string;
name: string;
slug: string;
description: string | null;
is_default: boolean;
is_recurring: boolean;
has_base_fee: boolean;
publicly_visible: boolean;
fee: BillingMoneyAmountJSON;
annual_fee: BillingMoneyAmountJSON | null;
annual_monthly_fee: BillingMoneyAmountJSON | null;
for_payer_type: 'org' | 'user';
features?: FeatureJSON[];
}
type BillingSubscriptionItemStatus = 'abandoned' | 'active' | 'canceled' | 'ended' | 'expired' | 'incomplete' | 'past_due' | 'upcoming';
/**
* @experimental This is an experimental API for the Billing feature that is available under a public beta, and the API is subject to change. It is advised to [pin](https://clerk.com/docs/pinning) the SDK version and the clerk-js version to avoid breaking changes.
*/
export interface BillingSubscriptionItemJSON extends ClerkResourceJSON {
object: typeof ObjectType.BillingSubscriptionItem;
status: BillingSubscriptionItemStatus;
plan_period: 'month' | 'annual';
payer_id?: string;
period_start: number;
period_end: number | null;
is_free_trial?: boolean;
ended_at: number | null;
created_at: number;
updated_at: number;
canceled_at: number | null;
past_due_at: number | null;
lifetime_paid: BillingMoneyAmountJSON | null;
next_payment?: {
amount: number;
date: number;
} | null;
amount: BillingMoneyAmountJSON;
plan?: BillingPlanJSON | null;
plan_id?: string | null;
}
/**
* Webhooks specific interface for BillingSubscriptionItem.
*/
export interface BillingSubscriptionItemWebhookEventJSON extends ClerkResourceJSON {
object: typeof ObjectType.BillingSubscriptionItem;
status: BillingSubscriptionItemStatus;
credit: {
amount: BillingMoneyAmountJSON;
cycle_days_remaining: number;
cycle_days_total: number;
cycle_remaining_percent: number;
};
proration_date: string;
plan_period: 'month' | 'annual';
period_start: number;
period_end?: number;
canceled_at?: number;
past_due_at?: number;
lifetime_paid: number;
next_payment_amount: number;
next_payment_date: number;
amount: BillingMoneyAmountJSON;
plan?: {
id: string;
instance_id: string;
product_id: string;
name: string;
slug: string;
description?: string;
is_default: boolean;
is_recurring: boolean;
amount: number;
period: 'month' | 'annual';
interval: number;
has_base_fee: boolean;
currency: string;
annual_monthly_amount: number;
publicly_visible: boolean;
} | null;
plan_id?: string | null;
payer?: BillingPayerJSON;
}
/**
* Webhooks specific interface for BillingPaymentAttempt.
*/
export interface BillingPaymentAttemptWebhookEventJSON extends ClerkResourceJSON {
object: typeof ObjectType.BillingPaymentAttempt;
instance_id: string;
payment_id: string;
statement_id: string;
gateway_external_id: string;
status: 'pending' | 'paid' | 'failed';
created_at: number;
updated_at: number;
paid_at?: number;
failed_at?: number;
failed_reason?: {
code: string;
decline_code: string;
};
billing_date: number;
charge_type: 'checkout' | 'recurring';
payee: BillingPayeeJSON;
payer: BillingPayerJSON;
totals: BillingTotalsJSON;
payment_source: {
id: string;
gateway: string;
gateway_external_id: string;
gateway_external_account_id?: string;
payment_method: string;
status: 'active' | 'disconnected';
card_type?: string;
last4?: string;
};
subscription_items: BillingSubscriptionItemWebhookEventJSON[];
}
/**
* Webhooks specific interface for BillingSubscription.
*/
export interface BillingSubscriptionWebhookEventJSON extends ClerkResourceJSON {
object: typeof ObjectType.BillingSubscription;
status: 'abandoned' | 'active' | 'canceled' | 'ended' | 'expired' | 'incomplete' | 'past_due' | 'upcoming';
active_at?: number;
canceled_at?: number;
created_at: number;
ended_at?: number;
past_due_at?: number;
updated_at: number;
latest_payment_id: string;
payer_id: string;
payer: BillingPayerJSON;
payment_source_id: string;
items: BillingSubscriptionItemWebhookEventJSON[];
}
export interface BillingSubscriptionJSON extends ClerkResourceJSON {
object: typeof ObjectType.BillingSubscription;
status: 'active' | 'past_due' | 'canceled' | 'ended' | 'abandoned' | 'incomplete';
payer_id: string;
created_at: number;
updated_at: number;
active_at: number | null;
past_due_at: number | null;
subscription_items: BillingSubscriptionItemJSON[];
next_payment?: {
date: number;
amount: BillingMoneyAmountJSON;
};
eligible_for_free_trial?: boolean;
}
export interface WebhooksSvixJSON {
svix_url: string;
}
export {};
//# sourceMappingURL=JSON.d.ts.map