API KeysCredits

Credits

Read the current Credit balance, account plan, quota usage, feature access, and per-note limits.

Credits

The Credits API helps your integration determine whether an account has enough resources to perform an operation.

You can use it to:

  • Display the current Credit balance.
  • Identify the account plan.
  • Track quota usage.
  • Check per-feature and per-note limits.
  • Determine which features are enabled for the current plan.

Base URL:

https://api.notexapp.com

Send the API key through the X-API-Key header:

-H "X-API-Key: ntx_live_..."

All Credit and quota information belongs to the account that created the API key.

Response format

interface ApiResponse<T> {
  statusCode: number;
  message?: string;
  data: T;
}

Get credit information

GET /v2/credits/me

Returns the current plan and Credit balance.

Use this endpoint to:

  • Display the current Credit balance.
  • Check whether the account is a paid user.
  • Identify the current plan.
  • Read the next renewal date.
  • Check the account before starting a Credit-consuming operation.

Request

This endpoint does not require query parameters or a request body.

curl https://api.notexapp.com/v2/credits/me \
  -H "X-API-Key: ntx_live_..."

Example response

{
  "statusCode": 200,
  "data": {
    "plan_code": "pro",
    "plan_name": "Pro",
    "total_credits": 1250,
    "reward_credits": 200,
    "purchased_credits": 500,
    "has_purchased": true,
    "is_paid_user": true,
    "renew_date": "2026-08-01T00:00:00Z"
  }
}

Response fields

FieldTypeDescription
plan_codestringCurrent plan code
plan_namestringHuman-readable plan name, when available
total_creditsnumberTotal Credits currently available
reward_creditsnumberLegacy reward Credits, when available
purchased_creditsnumberCredits purchased separately, when available
has_purchasedbooleanWhether the account has purchased a plan or Credits
is_paid_userbooleanWhether the account has paid-feature access
renew_datestring | nullPlan renewal date in ISO 8601 UTC format

Plan codes

plan_codePlan
freeFree
pro_litePro Lite
proPro
plusPlus
businessBusiness
business_plusBusiness Plus
lifetimeLifetime

New plan codes may be added in the future. Avoid restricting your integration to this list.

TypeScript types
export type KnownPlanCode =
  | 'free'
  | 'pro_lite'
  | 'pro'
  | 'business'
  | 'plus'
  | 'business_plus'
  | 'lifetime';

export type PlanCode = KnownPlanCode | (string & {});

export interface UserCreditsMeData {
  plan_code: PlanCode;
  plan_name?: string;
  total_credits: number;
  reward_credits?: number;
  purchased_credits?: number;
  has_purchased: boolean;
  is_paid_user: boolean;
  renew_date?: string | null;
}

export type GetCreditsMeResponse =
  ApiResponse<UserCreditsMeData>;

Get quota usage

GET /v2/credits/quota

Returns the account's quota, usage counters, per-note limits, and enabled features.

Use this endpoint to:

  • Check how many uses or minutes remain.
  • Display quota progress.
  • Validate an input against per-note limits.
  • Check whether a feature is available on the current plan.
  • Prevent requests that would exceed a known limit.

Request

This endpoint does not require query parameters or a request body.

curl https://api.notexapp.com/v2/credits/quota \
  -H "X-API-Key: ntx_live_..."

Response structure

FieldMeaning
quota_snapshotQuota granted for the current billing or usage period
quota_per_note_snapshotFeature limits applied to each note
quota_lifetime_snapshotLifetime quota
per_note_capsHard limits for one note or input
period_usage_counterUsage recorded during the current period
features_snapshotFeatures enabled or disabled for the current plan

Example response

{
  "statusCode": 200,
  "data": {
    "plan_code": "pro",
    "quota_snapshot": {
      "notes": 200,
      "recording_minutes": 1000,
      "meeting_minutes": 500,
      "nova_chat_single_note": 300
    },
    "quota_per_note_snapshot": {
      "create_mindmap": 3,
      "create_slideshow": 2,
      "create_flashcards_sets": 5,
      "create_quizzes_sets": 5,
      "create_podcast": 1,
      "note_translation": 3
    },
    "quota_lifetime_snapshot": {
      "live_transcribe": 100
    },
    "per_note_caps": {
      "recording_minutes_per_note": 180,
      "youtube_max_duration": 7200,
      "document_max_megabytes": 100,
      "images_max_input": 20
    },
    "period_usage_counter": {
      "recording_minutes_used": 320,
      "meeting_minutes_used": 120,
      "notes_created": 46,
      "nova_chat_single_note": 80
    },
    "periodStartDate": "2026-07-01T00:00:00Z",
    "resetDate": "2026-08-01T00:00:00Z",
    "features_snapshot": {
      "integrate_notion": true,
      "live_transcribe": true,
      "share_note_public": true,
      "connect_google_calendar": true
    },
    "hasPurchased": true
  }
}

Fields inside each quota group depend on the account plan. Fields that do not apply may be omitted.

Period quota

quota_snapshot contains quota granted for the current period.

FieldUnitDescription
notesnotesNumber of notes that can be created
notes_with_multiple_filesnotesNumber of multi-file notes allowed
recording_minutesminutesTotal recording time
meeting_minutesminutesTotal meeting time
live_meetingmeetingsNumber of live meetings
nova_chat_single_noterequestsAI chat requests for a single note
nova_chat_all_notesrequestsAI chat requests across all notes

Usage is returned in period_usage_counter.

const remainingRecordingMinutes =
  (quota.quota_snapshot.recording_minutes ?? 0) -
  (quota.period_usage_counter.recording_minutes_used ?? 0);

Per-note feature quota

quota_per_note_snapshot describes limits for features used on an individual note.

FieldDescription
create_mindmapGenerate a mind map
create_slideshowGenerate a slideshow
create_flashcards_setsGenerate flashcard sets
create_quizzes_setsGenerate quiz sets
create_shortsGenerate short-form videos
create_podcastGenerate a podcast
regenerate_summaryRegenerate the summary
note_translationTranslate the note

Per-note caps

per_note_caps contains hard limits for a single note or input.

FieldUnitDescription
recording_minutes_per_noteminutesMaximum recording duration for one note
meeting_minutes_per_noteminutesMaximum meeting duration for one note
youtube_max_durationsecondsMaximum YouTube video duration
document_max_megabytesMBMaximum document size
images_max_inputimagesMaximum number of input images
short_max_secondssecondsMaximum short-video duration
podcast_max_secondssecondsMaximum podcast duration

Check these values before uploading or processing content.

Feature access

features_snapshot indicates whether a feature is available:

{
  "integrate_notion": true,
  "bot_auto_join": false,
  "share_note_public": true
}
ValueMeaning
trueThe feature is available
falseThe feature is not available for the current plan
Field omittedDo not assume the feature is available

Supported feature flags include:

FieldFeature
integrate_notionNotion integration
integrate_google_docsGoogle Docs integration
live_transcribeLive transcription
bot_auto_joinMeeting bot auto-join
share_note_publicPublic note sharing
share_note_specificShare with specific users
share_note_organizationOrganization-wide sharing
summary_note_with_templateTemplate-based summaries
connect_google_calendarGoogle Calendar integration
connect_outlook_calendarOutlook Calendar integration

Quota reset

FieldTypeDescription
periodStartDatestringStart of the current quota period
resetDatestringNext quota reset time

Both fields use ISO 8601 UTC format.

TypeScript types
export type PeriodQuotaBucket =
  | 'notes'
  | 'notes_with_multiple_files'
  | 'recording_minutes'
  | 'meeting_minutes'
  | 'live_meeting'
  | 'nova_chat_single_note'
  | 'nova_chat_all_notes';

export type PerNoteQuotaBucket =
  | 'create_mindmap'
  | 'create_slideshow'
  | 'create_flashcards_sets'
  | 'create_quizzes_sets'
  | 'create_shorts'
  | 'create_podcast'
  | 'regenerate_summary'
  | 'note_translation';

export type LifetimeQuotaBucket =
  | 'live_transcribe';

export type PerNoteCapKey =
  | 'recording_minutes_per_note'
  | 'meeting_minutes_per_note'
  | 'youtube_max_duration'
  | 'document_max_megabytes'
  | 'images_max_input'
  | 'short_max_seconds'
  | 'podcast_max_seconds';

export type FeatureFlag =
  | 'integrate_notion'
  | 'integrate_google_docs'
  | 'live_transcribe'
  | 'bot_auto_join'
  | 'share_note_public'
  | 'share_note_specific'
  | 'share_note_organization'
  | 'summary_note_with_template'
  | 'connect_google_calendar'
  | 'connect_outlook_calendar';

export type QuotaSnapshot =
  Partial<Record<PeriodQuotaBucket, number>>;

export type QuotaPerNoteSnapshot =
  Partial<Record<PerNoteQuotaBucket, number>>;

export type QuotaLifetimeSnapshot =
  Partial<Record<LifetimeQuotaBucket, number>>;

export type PerNoteCapsSnapshot =
  Partial<Record<PerNoteCapKey, number>>;

export type FeaturesSnapshot =
  Partial<Record<FeatureFlag, boolean>>;

export interface PeriodUsageCounter {
  recording_minutes_used?: number;
  meeting_minutes_used?: number;
  notes_created?: number;
  live_meeting?: number;
  nova_chat_single_note?: number;
  nova_chat_all_notes?: number;
}

export interface QuotaData {
  plan_code: PlanCode;
  quota_snapshot: QuotaSnapshot;
  quota_per_note_snapshot: QuotaPerNoteSnapshot;
  quota_lifetime_snapshot: QuotaLifetimeSnapshot;
  per_note_caps: PerNoteCapsSnapshot;
  period_usage_counter: PeriodUsageCounter;
  periodStartDate?: string;
  resetDate?: string;
  features_snapshot: FeaturesSnapshot;
  hasPurchased?: boolean;
}

export type GetQuotaResponse =
  ApiResponse<QuotaData>;

Credits and quota

EndpointUse it to check
GET /v2/credits/meCurrent plan and available Credit balance
GET /v2/credits/quotaUsage, limits, caps, and feature access

An account may still have Credits while already reaching a feature-specific quota.

Important notes

  • Do not hard-code plan limits.
  • Read the latest quota before important operations.
  • Optional quota fields may differ between plans.
  • Reload Credit and quota data after completing a resource-consuming task.
  • Keep the API key on a controlled backend or server.
Was this page helpful?