{"openapi":"3.1.0","info":{"title":"PushNotif Public & Agent Self-Onboarding API","version":"2.5.0","description":"Official REST API for PushNotif.biz.id — Web Push (VAPID), Android (FCM), iOS (APNs), In-App Popup Banners, Live Activity Toast, Universal Incoming Webhook (9 Formats), Zero-Downtime VAPID Migration, Auto-Push RSS, and Live QRIS Top-Up."},"servers":[{"url":"https://pushnotif.biz.id","description":"Production PushNotif Server"}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","description":"Personal PushNotif API Key (pn_live_...) in Authorization: Bearer header"},"apiKeyHeader":{"type":"apiKey","in":"header","name":"X-API-Key","description":"Personal PushNotif API Key (pn_live_...) in X-API-Key header"}},"schemas":{"SendOtpRequest":{"type":"object","required":["email"],"properties":{"email":{"type":"string","description":"User email address to receive 6-digit registration OTP"},"purpose":{"type":"string","default":"register","description":"Must be 'register'"}}},"LoginAccountRequest":{"type":"object","required":["email","password"],"properties":{"email":{"type":"string","description":"Registered account email address"},"password":{"type":"string","description":"Account password"}}},"RegisterAccountRequest":{"type":"object","required":["name","email","password","otp_code"],"properties":{"name":{"type":"string","description":"Workspace or company name"},"email":{"type":"string","description":"User email address"},"password":{"type":"string","description":"Account password (min 6 characters)"},"otp_code":{"type":"string","description":"6-digit OTP code sent to user's email"},"site_name":{"type":"string","description":"First website/application name"},"site_url":{"type":"string","description":"First website https:// URL"}}},"CreateAppRequest":{"type":"object","required":["site_name","site_url"],"properties":{"site_name":{"type":"string","description":"Application or website display name"},"site_url":{"type":"string","description":"Full https:// website URL"}}},"BroadcastPushRequest":{"type":"object","required":["app_id","title","body"],"properties":{"app_id":{"type":"string","description":"Target App ID (e.g. app_xxxx)"},"title":{"type":"string","description":"Notification headline"},"body":{"type":"string","description":"Notification message body"},"url":{"type":"string","description":"Target URL when notification is clicked"},"segment":{"type":"string","default":"all","description":"Target audience segment (default: all)"},"scheduled_for":{"type":"string","description":"Optional ISO timestamp for scheduled send (e.g. 2026-10-20T07:00:00+07:00)"},"scheduled_at":{"type":"string","description":"Alias of scheduled_for (ISO-8601 timestamp)"},"recurrence_rule":{"type":"string","default":"once","description":"Optional recurrence: once, daily, twice_daily, weekly"},"repeat_rule":{"type":"string","default":"none","description":"Alias of recurrence_rule: none, daily, weekly"}}},"UpdateInAppBannerRequest":{"type":"object","required":["inapp_title","inapp_body"],"properties":{"inapp_enabled":{"type":"boolean","default":true},"inapp_style":{"type":"string","default":"modal","description":"Style: modal, top_bar, bottom_slide, or social_toast"},"inapp_trigger":{"type":"string","default":"immediate","description":"Trigger: immediate, delay_5s, scroll_50"},"inapp_title":{"type":"string","description":"Banner or toast headline"},"inapp_body":{"type":"string","description":"Banner or toast message body"},"inapp_cta_text":{"type":"string","default":"Buka Sekarang"},"inapp_cta_url":{"type":"string","default":"https://pushnotif.biz.id"}}},"UpdateRssAutomationRequest":{"type":"object","required":["rss_feed_url"],"properties":{"rss_enabled":{"type":"boolean","default":true},"rss_feed_url":{"type":"string","description":"Full URL to RSS / Sitemap / Atom XML feed"},"rss_interval":{"type":"string","default":"1h","description":"Check interval: 15m, 1h, daily_digest"},"rss_prefix":{"type":"string","default":"Artikel Baru:"}}},"UpdateWelcomeJourneyRequest":{"type":"object","required":["welcome_title","welcome_body"],"properties":{"welcome_enabled":{"type":"boolean","default":true},"welcome_title":{"type":"string","description":"Welcome notification title sent immediately after user subscribes"},"welcome_body":{"type":"string","description":"Welcome notification message body"}}},"CreateQrisOrderRequest":{"type":"object","properties":{"package_id":{"type":"string","default":"starter","description":"Package ID ('starter', 'growth', 'scale', or 'custom')"},"amount_rp":{"type":"integer","default":20000,"description":"Top-up amount in IDR (minimum Rp 1,000, max Rp 100,000,000; Rp 1,000 = 5,000 Credits)"},"custom_amount_rp":{"type":"integer","default":20000,"description":"Alias of amount_rp for custom IDR top-up"}}},"SupportTicketRequest":{"type":"object","required":["message"],"properties":{"category":{"type":"string","default":"Bantuan Pasang SDK","description":"Support ticket category or topic"},"subject":{"type":"string","description":"Optional alias for category/subject"},"website_url":{"type":"string","description":"Optional website URL related to the issue"},"message":{"type":"string","description":"Detailed question or issue description"}}}}},"security":[],"paths":{"/api/v1/auth/send-otp":{"post":{"operationId":"requestRegistrationOtp","summary":"Step 1 to Create New Account: Send 6-digit verification OTP to user email","security":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SendOtpRequest"}}}},"responses":{"200":{"description":"OTP sent to email"}}}},"/api/v1/auth/register":{"post":{"operationId":"registerNewAccount","summary":"Step 2 to Create New Account: Verify OTP, create PushNotif account (free 1,000 credits), and return API Key","security":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegisterAccountRequest"}}}},"responses":{"200":{"description":"Account created with api_key and initial app_id"}}}},"/api/v1/overview":{"get":{"operationId":"getWorkspaceOverview","summary":"List all registered apps, subscriber counts, credit balance, Campaigns CTR, and QRIS invoices","responses":{"200":{"description":"Workspace overview and apps list","content":{"application/json":{"schema":{"type":"object"}}}}},"parameters":[{"name":"api_key","in":"query","required":false,"schema":{"type":"string"},"description":"User's personal PushNotif API Key (pn_live_...) returned by registerNewAccount or from https://pushnotif.biz.id dashboard"}]}},"/api/v1/apps":{"post":{"operationId":"createApp","summary":"Register a new website or application and generate VAPID keys","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateAppRequest"}}}},"responses":{"200":{"description":"Created application details and VAPID public key","content":{"application/json":{"schema":{"type":"object"}}}}},"parameters":[{"name":"api_key","in":"query","required":false,"schema":{"type":"string"},"description":"User's personal PushNotif API Key (pn_live_...) returned by registerNewAccount or from https://pushnotif.biz.id dashboard"}]}},"/api/v1/apps/{app_id}":{"delete":{"operationId":"deleteApp","summary":"Delete a registered website or application and its subscriptions","parameters":[{"name":"app_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"api_key","in":"query","required":false,"schema":{"type":"string"},"description":"User's personal PushNotif API Key (pn_live_...) returned by registerNewAccount or from https://pushnotif.biz.id dashboard"}],"responses":{"200":{"description":"Application deleted","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/api/v1/apps/{app_id}/ai-guide.md":{"get":{"operationId":"getIntegrationGuide","summary":"Get ready-to-paste SDK integration code for HTML, Laravel, Next.js, WordPress, Android, and iOS","security":[],"parameters":[{"name":"app_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"framework","in":"query","required":false,"schema":{"type":"string","default":"auto"}},{"name":"api_key","in":"query","required":false,"schema":{"type":"string"},"description":"User's personal PushNotif API Key (pn_live_...) returned by registerNewAccount or from https://pushnotif.biz.id dashboard"}],"responses":{"200":{"description":"Markdown integration guide with exact app_id and VAPID key","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/api/v1/notifications":{"post":{"operationId":"sendOrSchedulePushNotification","summary":"Broadcast instant Web/Mobile Push notification or schedule recurring campaign","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BroadcastPushRequest"}}}},"responses":{"200":{"description":"Broadcast delivery or schedule result","content":{"application/json":{"schema":{"type":"object"}}}}},"parameters":[{"name":"api_key","in":"query","required":false,"schema":{"type":"string"},"description":"User's personal PushNotif API Key (pn_live_...) returned by registerNewAccount or from https://pushnotif.biz.id dashboard"}]}},"/api/v1/apps/{app_id}/inapp-banner":{"post":{"operationId":"configureInAppBanner","summary":"Configure In-App Popup Modal, Top Sticky Bar, Bottom Slide Card, or Live Activity Toast","parameters":[{"name":"app_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"api_key","in":"query","required":false,"schema":{"type":"string"},"description":"User's personal PushNotif API Key (pn_live_...) returned by registerNewAccount or from https://pushnotif.biz.id dashboard"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateInAppBannerRequest"}}}},"responses":{"200":{"description":"In-App Banner updated","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/api/v1/apps/{app_id}/rss-automation":{"post":{"operationId":"configureRssAutopush","summary":"Enable automated RSS / Sitemap / Atom feed monitoring for automatic push broadcasts","parameters":[{"name":"app_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"api_key","in":"query","required":false,"schema":{"type":"string"},"description":"User's personal PushNotif API Key (pn_live_...) returned by registerNewAccount or from https://pushnotif.biz.id dashboard"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateRssAutomationRequest"}}}},"responses":{"200":{"description":"RSS Auto-Push updated","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/api/v1/apps/{app_id}/welcome-journey":{"post":{"operationId":"configureWelcomePush","summary":"Configure automatic Welcome Push notification when a new visitor subscribes","parameters":[{"name":"app_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"api_key","in":"query","required":false,"schema":{"type":"string"},"description":"User's personal PushNotif API Key (pn_live_...) returned by registerNewAccount or from https://pushnotif.biz.id dashboard"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateWelcomeJourneyRequest"}}}},"responses":{"200":{"description":"Welcome Push updated","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/api/v1/wallet/qris-order":{"post":{"operationId":"createQrisTopupInvoice","summary":"Generate a live QRIS payment invoice (starting from Rp 1,000) to top up quota credits","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateQrisOrderRequest"}}}},"responses":{"200":{"description":"QRIS invoice checkout URL and QR payload","content":{"application/json":{"schema":{"type":"object"}}}}},"parameters":[{"name":"api_key","in":"query","required":false,"schema":{"type":"string"},"description":"User's personal PushNotif API Key (pn_live_...) returned by registerNewAccount or from https://pushnotif.biz.id dashboard"}]}},"/api/v1/wallet/pay/{order_id}/status":{"get":{"operationId":"checkQrisPaymentStatus","summary":"Check real-time payment status (PENDING or PAID) of a QRIS top-up invoice","security":[],"parameters":[{"name":"order_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Invoice payment status"}}}},"/api/v1/support/ticket":{"post":{"operationId":"submitSupportTicket","summary":"Submit a technical support question or ticket to the PushNotif engineering team","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SupportTicketRequest"}}}},"responses":{"200":{"description":"Ticket submitted"}}}},"/api/v1/apps/{app_id}/incoming-event":{"post":{"operationId":"triggerUniversalIncomingWebhook","summary":"Universal Incoming Webhook Router (auto-detects Midtrans, Xendit, Mayar, Lynk.id, Duitku, Tripay, Supabase, Saweria, Trakteer, Shopify, WooCommerce, GitHub, and Custom JSON)","security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"parameters":[{"name":"app_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"mode","in":"query","required":false,"schema":{"type":"string","enum":["both","toast_only","push_only"],"default":"both"}},{"name":"api_key","in":"query","required":false,"schema":{"type":"string"},"description":"User's personal PushNotif API Key (pn_live_...) returned by registerNewAccount or from https://pushnotif.biz.id dashboard"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Event parsed and dispatched across Live Toast, Web Push, and/or Email","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/api/v1/apps/{app_id}/custom-vapid":{"post":{"operationId":"saveCustomVapidKeys","summary":"Save Custom VAPID Public & Private keys for Zero-Downtime Migration from OneSignal, LaraPush, or Webpushr","security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"parameters":[{"name":"app_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"api_key","in":"query","required":false,"schema":{"type":"string"},"description":"User's personal PushNotif API Key (pn_live_...) returned by registerNewAccount or from https://pushnotif.biz.id dashboard"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["vapid_public_key","vapid_private_key"],"properties":{"vapid_public_key":{"type":"string"},"vapid_private_key":{"type":"string"}}}}}},"responses":{"200":{"description":"Custom VAPID keys saved","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/api/v1/apps/{app_id}/subscribers/import":{"post":{"operationId":"bulkImportSubscribers","summary":"Bulk import up to 10,000 existing Web Push subscribers (CSV or JSON array) at 0 credit cost","security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"parameters":[{"name":"app_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"api_key","in":"query","required":false,"schema":{"type":"string"},"description":"User's personal PushNotif API Key (pn_live_...) returned by registerNewAccount or from https://pushnotif.biz.id dashboard"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"csv_text":{"type":"string"},"subscribers":{"type":"array","items":{"type":"object"}}}}}}},"responses":{"200":{"description":"Subscribers imported and deduplicated","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/api/v1/apps/{app_id}/subscribers/export":{"get":{"operationId":"exportSubscribers","summary":"Export all active Web/Mobile Push subscribers as CSV or JSON backup","security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"parameters":[{"name":"app_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"format","in":"query","required":false,"schema":{"type":"string","enum":["csv","json"],"default":"csv"}},{"name":"api_key","in":"query","required":false,"schema":{"type":"string"},"description":"User's personal PushNotif API Key (pn_live_...) returned by registerNewAccount or from https://pushnotif.biz.id dashboard"}],"responses":{"200":{"description":"Subscriber export payload","content":{"application/json":{"schema":{"type":"object"}}}}}}}}}