PageSourceSearch

https://json2video.com/pricing/

html json2video.com collected 2026-10-02 05:53:43 UTC 60,430 bytes, 886 lines download raw bytes

1
2<!DOCTYPE html>
3    <html lang="en">
4    <head>
5            <!-- Global site tag (gtag.js) - Google Analytics -->
vendor: 68 bytes, lines 5-6
5
6    <script async src="https://www.googletagmanager.com/gtag/js?id=
6G-Z0YPW0QY8X
vendor: 16 bytes, lines 6-7
6"></script>
7    
7<script>
8        window.__userCountry = "US";
9
10        // Seed the `userCountry` cookie that the login app reads, using the
11        // reliable CloudFront-Viewer-Country value (~99% coverage). Without
12        // this, the login app falls back to the flaky third-party
13        // api.country.is call (adblockable, rate-limited, racy), which is the
14        // main reason a large share of accounts end up with no country. Cookie
15        // is scoped to .json2video.com so login (and other subdomains) can read
16        // it; login only calls api.country.is when this cookie is absent.
17        (function () {
18            var cc = window.__userCountry;
19            if (cc && /^[A-Z]{2}$/.test(cc)) {
20                var d = new Date();
21                d.setTime(d.getTime() + 365 * 24 * 60 * 60 * 1000);
22                document.cookie = 'userCountry=' + cc + ';expires=' + d.toUTCString() +
23                    ';path=/;domain=.json2video.com;SameSite=Lax';
24            }
25        })();
26
27        window.dataLayer = window.dataLayer || [];
28        function gtag(){dataLayer.push(arguments);}
29
30        // Consent Mode v2 — default denied (EU compliant). Cookie-consent banner
31        // updates these via gtag('consent', 'update', ...) once the visitor chooses.
32        // For non-EU visitors, cookieconsent-config.js grants analytics consent
33        // immediately and skips the banner. See /external/cookieconsent-config.js.
34        gtag('consent', 'default', {
35            'ad_storage':            'denied',
36            'analytics_storage':     'denied',
37            'ad_user_data':          'denied',
38            'ad_personalization':    'denied',
39            'functionality_storage': 'granted',
40            'security_storage':      'granted',
41            'wait_for_update':       500
42        });
43
44        gtag('js', new Date());
45        // `app_area` tags every event with the surface it came from, so each
46        // app can be split back out of the shared GA4 property. It must ride
47        // on `config` — a `gtag('set', …)` never reaches the payload.
48        gtag('config', 'G-Z0YPW0QY8X', { 'anonymize_ip': true, 'app_area': 'website' });
49    </script>
49
50    <!-- Cookie consent banner (self-hosted Orestbida vanilla-cookieconsent v3.1.0) -->
51    <link rel="stylesheet" href="/external/cookieconsent.css">
52    
52<script defer src="/external/cookieconsent.umd.js"></script>
52
53    
53<script defer src="/external/cookieconsent-config.js"></script>
53
54    <!-- Product analytics (PostHog) through the shared journey loader. It loads PostHog only once
55         the banner grants analytics. On the website it is anonymous: pageviews, internal CTA clicks
56         and checkout start; no identify, no replay, no autocapture. Kill switch: ENABLED in
57         /external/j2v-journey.js. See architecture/analytics/posthog.md. -->
58    
58<script defer src="https://json2video.com/external/j2v-journey.js" data-surface="website"></script>
58
59    <!-- First/last-touch attribution tracker (consent-gated analytics cookies) -->
60    
60<script defer src="/external/attribution.js"></script>
60
61    <meta charset="UTF-8">
62    <meta http-equiv="X-UA-Compatible" content="IE=edge">
63    <meta name="viewport" content="width=device-width, initial-scale=1.0">
64
65    <meta property="og:title" content="Pricing - Video Editing API - JSON2Video" />
66    <meta property="og:description" content="JSON2Video API offers free entry plans for getting started with video automation. Paid plans include pre-paid and subscription plans, starting at $19.95/month." />
67    <meta property="og:type" content="website" />
68    <meta property="og:image" content="https://json2video.com/pricing/images/og-index.jpg" />
69
70    <meta name="twitter:card" content="summary_large_image" />
71    <meta name="twitter:site" content="@json2video" />
72    <meta name="twitter:title" content="Pricing - Video Editing API - JSON2Video" />
73    <meta name="twitter:description" content="JSON2Video API offers free entry plans for getting started with video automation. Paid plans include pre-paid and subscription plans, starting at $19.95/month." />
74    <meta name="twitter:image" content="https://json2video.com/pricing/images/og-index.jpg" />
75
76    <link rel="canonical" href="https://json2video.com/pricing/"/>
77    <link rel="icon" type="image/svg+xml" href="/images/json2video-logo.svg">
78    <link rel="alternate icon" href="/favicon.ico">
79        <!--script src="https://cdn.tailwindcss.com"></script-->
80    <!-- Tailwind Play CDN replaced by a static, purged build (see website/tailwind.config.js).
81         Rebuild with `npm run build:css` from the website/ directory after touching markup.
82         When a page sets `$inline_tailwind_css = true;` before including common.php (e.g. the
83         new home, which is the most latency-sensitive page), we inline the whole purged CSS
84         in a <style> block — 15 KB over the wire after gzip — to kill the render-blocking
85         round-trip to /external/tailwind.css. Other pages keep the cacheable external link. -->
86        <link rel="stylesheet" href="/external/tailwind.css">
87        <!-- Preload Lato-300-latin (body default weight) so the browser starts fetching it during HTML
88         parse, before discovering the @font-face declarations inside style.css. -->
89    <link rel="preload" href="/fonts/lato/lato-v25-latin-300.woff2" as="font" type="font/woff2" crossorigin>
90    <link rel="stylesheet" href="/style.css">
91
92    <link rel="stylesheet" href="/highlight/styles/a11y-light.min.css"> <!-- stackoverflow-dark -->
93    <!-- link rel="stylesheet" href="/highlight/styles/a11y-light.min.css" --><!-- stackoverflow-dark -->
94    <!-- highlight.js bundles use `defer`: they all execute in order after HTML parse but before
95         DOMContentLoaded, which is when we now call hljs.highlightAll() (see inline script below).
96         Before this change they were render-blocking at the top of <head>. -->
97    
97<script defer src="/highlight/highlight.min.js"></script>
97
98    
98<script defer src="/highlight/languages/php.min.js"></script>
98
99    
99<script defer src="/highlight/languages/javascript.min.js"></script>
99
100    
100<script defer src="/highlight/languages/json.min.js"></script>
100
101        
101<script defer src="/highlight/languages/php.min.js"></script>
101
102        
102<script defer src="/highlight/languages/javascript.min.js"></script>
102
103    
104    
105    
105<script>
106        // highlight.js scripts are `defer`red, so they finish loading right before DOMContentLoaded.
107        // Calling highlightAll() on that event guarantees `hljs` is defined and the DOM is parsed.
108        document.addEventListener('DOMContentLoaded', function () {
109            if (window.hljs) hljs.highlightAll();
110        });
111
112        function player_setup(player_id) {
113            return;
114
115            let player = document.getElementById(player_id);
116
117            player.addEventListener("click", function() { 
118                this.style.backgroundImage = "url(data:image/svg+xml;base64,PHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IgogIHdpZHRoPSI3MCIgaGVpZ2h0PSI0MCIgdmlld0JveD0iMCAwIDEwMCUgMTAwJSIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+CiAgPGNpcmNsZSBmaWxsPSIjRjAwIiBzdHJva2U9Im5vbmUiIGN4PSI2IiBjeT0iMjAiIHI9IjYiPgogICAgPGFuaW1hdGVUcmFuc2Zvcm0gCiAgICAgICBhdHRyaWJ1dGVOYW1lPSJ0cmFuc2Zvcm0iIAogICAgICAgZHVyPSIwLjVzIiAKICAgICAgI
118HR5cGU9InRyYW5zbGF0ZSIgCiAgICAgICB2YWx1ZXM9IjAgMTUgOyAwIC0xNTsgMCAxNSIgCiAgICAgICByZXBlYXRDb3VudD0iaW5kZWZpbml0ZSIgCiAgICAgICBiZWdpbj0iMC4xIi8+CiAgPC9jaXJjbGU+CiAgPGNpcmNsZSBmaWxsPSIjMEYwIiBzdHJva2U9Im5vbmUiIGN4PSIzMCIgY3k9IjIwIiByPSI2Ij4KICAgIDxhbmltYXRlVHJhbnNmb3JtIAogICAgICAgYXR0cmlidXRlTmFtZT0idHJhbnNmb3JtIiAKICAgICAgIGR1cj0iMC41cyIgCiAgICAgICB0eXBlPSJ0cmFuc2xhdGUiIAogICAgICAgdmFsdWVzPSIwIDEwIDsgMCAtMTA7IDAgMTAiIAogICAgICAgcmVwZWF0Q291bnQ9ImluZGVmaW5pdGUiIAogICAgICAgYmVnaW49IjAuMiIvPgogIDwvY2lyY2xlPgogIDxjaXJjbGUgZmlsbD0iIzAwRiIgc3Ryb2tlPSJub25lIiBjeD0iNTQiIGN5PSIyMCIgcj0iNiI+CiAgICA8YW5pbWF0ZVRyYW5zZm9ybSAKICAgICAgIGF0dHJpYnV0ZU5hbWU9InRyYW5zZm9ybSIgCiAgICAgICBkdXI9IjAuNXMiIAogICAgICAgdHlwZT0idHJhbnNsYXRlIiAKICAgICAgIHZhbHVlcz0iMCA1IDsgMCAtNTsgMCA1IiAKICAgICAgIHJlcGVhdENvdW50PSJpbmRlZmluaXRlIiAKICAgICAgIGJlZ2luPSIwLjMiLz4KICA8L2NpcmNsZT4KPC9zdmc+)";
119                if (this.paused) this.play();
120                else this.pause();
121                gtag('event', 'play', {
122                    'event_category' : 'player',
123                    'event_label' : 'show_next_example'
124                });
125            });
126
127            player.addEventListener("ended", function() { 
128                this.style.backgroundImage = "url(data:image/svg+xml;base64,PHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IgogIHdpZHRoPSIzMCIgaGVpZ2h0PSIzMCIgdmlld0JveD0iMCAwIDMwIDMwIiB4bWw6c3BhY2U9InByZXNlcnZlIj4KICA8ZGVmcz4KICAgIDxzdHlsZT4KICAgICAgLmNscy0xIHsKICAgICAgICBmaWxsOiAjZmZmOwogICAgICAgIHN0cm9rZTogI2ZmZjsKICAgICAgICBzdHJva2Utd2lkdGg6IDFweDsKICAgICAgICBmaWxsLXJ1bGU6IGV2ZW5vZGQ7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgPC9kZWZzPgogIDxwYXRoIGlkPSJUcmlhbmdsZV8xIiBkYXRhLW5hbWU9IlRyaWFuZ2xlIDEiIGNsYXNzPSJjbHMtMSIgZD0iTTI4LjYyNSwxNS4xMjVMMy44NzUsMjkuNDA2VjAuODQ0WiIvPgo8L3N2Zz4K)";
129                let src = this.currentSrc;
130                this.src = null;
131                this.src = src;
132            });
133
134        }
135    </script>
135
136    
136<script src="/app.js"></script>
136
137    <style>
138        #menu-check:checked~div {
139          display: block;
140        }
141    </style>
142    <title>Pricing - Video Editing API - JSON2Video</title>
143    <meta name="description" content="JSON2Video API offers free entry plans for getting started with video automation. Paid plans include pre-paid and subscription plans, starting at $19.95/month.">
144    <!-- clearbit -->
145    <!-- 
145<script async src="https://tag.clearbitscripts.com/v1/pk_0b072acc3127eb041c3801f3b1f313e3/tags.js" referrerpolicy="strict-origin-when-cross-origin"></script>
145 -->
146        </head>
147    <body class="">
148            <div class="bg-gray-900 sticky top-0 z-50">
149        <!--div class="bg-yellow-400 text-black text-center text-sm font-bold p-1">
150            🚨 We are rolling out the version 2 of the API.
151            <span class="whitespace-nowrap">Please <a class="underline" href="/contact-us/">report us</a> any issue</span>
152        </div-->
153        <div class="bg-yellow-400 text-black text-center text-sm font-bold p-1">
154            <a href="/video-automation/" class="mx-3"><span>Video automation</span></a>
155            <a href="/video-api/" class="mx-3"><span>Video API</span></a>
156            <a href="/video-automation/json-to-video/" class="mx-3"><span>Convert JSON to video</span></a>
157            <a href="/ai-voices/" class="mx-3"><span>Text-to-speech voices</span></a>
158        </div>
159        <nav id="top-header" class="mx-auto h-14 flex text-white justify-between items-center max-w-screen-lg">
160            <a href="/"><div class="ml-2 flex items-center"><img src="/images/json2video-logo.svg" style="height:30px;"><span class="mx-3 text-2xl">JSON2Video</span></div></a>
161            <ul class="hidden lg:flex list-none text-xl font-bold">
162                <!-- <li class="pr-4 "><a href="/video-api/">Video API</a></li> -->
163                <li class="px-4 "><a href="/docs/v2/">Docs</a></li>
164                <li class="px-4 "><a href="/how-to/">Learn</a></li>
165                <li class="px-4 "><a href="/templates/">Templates</a></li>
166                <li class="px-4 "><a href="/editor/">Editor</a> <!--<sup class="text-yellow-400">new</sup>--></li>
167                <li class="pl-4 "><a href="/pricing/">Pricing</a></li>
168                <li class="px-4 "><a href="/partners/">Affiliates</a></li>
169            </ul>
170            <div class="hidden lg:flex items-center">
171                <a id="getAPIKeyButton" href="/login/?utm_source=website&utm_medium=internal_cta&utm_campaign=header&utm_content=login_button"><button class="m-2 py-2 px-4 bg-custom2 rounded-lg hover:bg-red-500 hover:text-white focus:bg-red-700 focus:text-white">Login / Sign up</button></a>
172            </div>
173            
174            <div class="lg:hidden m-5">
175                <label for="menu-check" id="menu-label">
176                    <svg class="w-5 text-white" viewBox="0 0 24 24">
177                        <path fill="currentColor" d="M23,13H1c-0.6,0-1-0.4-1-1s0.4-1,1-1h22c0.6,0,1,0.4,1,1S23.6,13,23,13z"></path>
178                        <path fill="currentColor" d="M23,6H1C0.4,6,0,5.6,0,5s0.4-1,1-1h22c0.6,0,1,0.4,1,1S23.6,6,23,6z"></path>
179                        <path fill="currentColor" d="M23,20H1c-0.6,0-1-0.4-1-1s0.4-1,1-1h22c0.6,0,1,0.4,1,1S23.6,20,23,20z"></path>
180                    </svg>
181                </label>
182
183                <input type="checkbox" id="menu-check" class="hidden">
184
185                <div class="hidden absolute top-0 left-0 w-full z-50">
186                    <div class="p-5 bg-gray-200 shadow-lg">
187                        <div class="flex items-center justify-between mb-4">
188                            <div>
189                                <a href="/" title="JSON2Video" class="inline-flex items-center">
190                                    <span class="text-3xl text-black">JSON2Video</span>
191                                </a>
192                            </div>
193                            <label for="menu-check">
194                                <svg class="w-5 text-gray-600" viewBox="0 0 24 24">
195                                    <path fill="currentColor" d="M19.7,4.3c-0.4-0.4-1-0.4-1.4,0L12,10.6L5.7,4.3c-0.4-0.4-1-0.4-1.4,0s-0.4,1,0,1.4l6.3,6.3l-6.3,6.3 c-0.4,0.4-0.4,1,0,1.4C4.5,19.9,4.7,20,5,20s0.5-0.1,0.7-0.3l6.3-6.3l6.3,6.3c0.2,0.2,0.5,0.3,0.7,0.3s0.5-0.1,0.7-0.3 c0.4-0.4,0.4-1,0-1.4L13.4,12l6.3-6.3C20.1,5.3,20.1,4.7,19.7,4.3z"></path>
196                                </svg>
197                            </label>
198                        </div>
199                        <nav class="ml-5 mt-10">
200                            <ul class="space-y-4 text-gray-700 text-2xl font-medium tracking-wide">
201                                <li><a href="/video-api/">Video API</a></li>
202                                <li><a href="/docs/v2/">Docs</a></li>
203                                <li><a href="/how-to/">Learn</a></li>
204                                <li><a href="/templates/">Templates</a></li>
205                                <li><a href="/docs/resources/basic/">Components</a></li>                        
206                                <li><a href="/pricing/">Pricing</a></li>
207                                <li><a href="/partners/">Affiliates</a></li>
208                            </ul>
209                        </nav>
210                        <div class="my-10 text-center">
211                            <a id="getAPIKeyButtonMobile" href="/login/?utm_source=website&utm_medium=internal_cta&utm_campaign=header_mobile&utm_c
211ontent=login_button"><button class="m-2 py-2 px-4 bg-custom2 rounded-lg">Login / Sign up</button></a>
212                        </div>
213                    </div>
214                </div>
215            </div>
216        </nav>
217    </div>
218    
218<script>
219    (function() {
220        var s = localStorage.getItem("userSession") || "";
221        var k = localStorage.getItem("userAPIKey") || "";
222        if (s.length === 40 || k.length === 40) {
223            var btn = document.getElementById("getAPIKeyButton");
224            if (btn) { btn.href = "/dashboard/"; btn.querySelector("button").textContent = "Go to dashboard"; }
225            var btnM = document.getElementById("getAPIKeyButtonMobile");
226            if (btnM) { btnM.href = "/dashboard/"; btnM.querySelector("button").textContent = "Go to dashboard"; }
227        }
228    })();
229    </script>
229
230    <!-- <div class="w-full bg-gray-700">
231        <nav id="sub-header" class="mx-auto h-8 flex text-white justify-start items-center max-w-screen-lg">
232            <div class="w-64"></div>
233            <div class="w-5"></div>
234            <ul class="flex font-bold">
235                <li class="pr-3">Video Automation</li>
236                <li class="px-3">Video SaaS</li>
237            </ul>
238        </nav>
239    </div> -->
240    
241        <div class="color-gradient">
242        <div class="mx-auto text-white flex items-center max-w-screen-lg">
243            <div class="m-10 md:m-20">
244                <div class="text-sm uppercase">Get started for free</div>                <h1 class="text-5xl font-bold">API Pricing</h1>                <p class="mt-5 text-lg">JSON2Video API offers free entry plans for getting started with video automation and paid plans that include pre-paid and subscription offers</p>            </div>
245        </div>
246    </div>
247                <div id="body-header" class="py-10 mx-auto max-w-screen-lg md:flex bg-white">
248                <div class="pricing-page md:w-full shrink-0 grow px-3 md:px-16 overflow-hidden">
248<script>
249    let userData, userEmailAddress = null;
250    userData = localStorage.getItem("userCredentials") || localStorage.getItem("userProfile") || localStorage.getItem("userSignUp");
251    if (userData) {
252        userEmailAddress = JSON.parse(userData).email;
253    }
254</script>
254
255<style>
256    #pricing a {
257        color: #397bc4;
258        text-decoration: none;
259        background: linear-gradient(0deg, rgb(237 244 251) 0%, rgb(237 244 251) 35%, transparent 35%);
260    }
261</style>
262<div class="bg-white mx-auto max-w-screen-lg">
263    <div class="container px-3 mx-auto">
264
265        <!-- FREE -->
266        <a name="free"></a>
267        <div class="bg-gray-50 border border-gray-400 rounded-lg px-8 py-6 flex items-center justify-between gap-4">
268            <div>
269                <h2 class="text-2xl font-bold">Start for free</h2>
270                <p class="text-gray-500 mt-1">Get 600 credits — no credit card needed</p>
271            </div>
272            <a href="https://json2video.com/login/?utm_source=website&utm_medium=internal_cta&utm_campaign=pricing_free_account&utm_content=free_account_button" class="inline-block bg-custom2 text-white font-bold px-6 py-3 rounded-lg hover:opacity-90 whitespace-nowrap flex-shrink-0">
273                Create free account &rarr;
274            </a>
275        </div>
276
277        <!-- PAID PLANS -->
278        <a name="paid_plans"></a>
279        <div class="my-20">
280            <div class="text-center">
281                <h2 class="text-3xl font-bold">Paid plans</h2>
282                <p class="mt-2 text-lg">
283                    Plans are sized in minutes of produced videos, and
284                    consumed with a granularity of a second.
285                </p>
286            </div>
287
288            <div class="mt-10 md:flex md:flex-row md:justify-center">
289                <a href="#pre-paid">
290                    <div class="md:w-72 p-5 border border-gray-200 rounded-lg pr-2 bg-gray-50 hover:bg-gray-100">
291                        <h3 class="font-semibold">Pre-paid</h3>
292                        <p class="text-gray-600">Top up your account with minutes and use the API at your own pace</p>
293                    </div>
294                </a>
295
296                <a href="#subscriptions">
297                    <div class="mt-8 md:mt-0 md:ml-10 md:w-72 p-5 border border-gray-200 rounded-lg pr-2 bg-gray-50 hover:bg-gray-100">
298                        <h3 class="font-semibold">Subscriptions</h3>
299                        <p class="text-gray-600">For projects that want to optimize costs and get premium support</p>
300                    </div>
301                </a>
302            </div>
303        </div>
304
305        <!-- PRE-PAID PLANS -->
306        <a name="pre-paid"></a>
307        <div class="my-20">
308            <h2 class="text-3xl font-bold text-center">Pre-paid plans</h2>
309            <p class="mt-3 text-lg text-center">
310                One-time payments to top up your account. No ties.
311            </p>
312                            <div class="mt-5">
313                    <div class="flex border border-gray-200 rounded-lg overflow-hidden">
314                        <div class="text-lg bg-gray-50 p-5 border-r border-gray-200">
315                            <div class="text-center text-3xl font-bold"><span class="text-sm relative -top-2">$</span>49.95</div>
316                            <div class="text-center text-sm">one payment</div>
317                        </div>
318                        <div class="grow flex flex-col md:flex-row md:items-center px-5 justify-between">
319                            <div>
320                                <p class="text-xl font-semibold">
321                                    <span>7,200 credits</span>
322                                </p>
323                                <p class="text-sm">
324                                    Up to 120 minutes of rendered videos<br>
325                                    With access to all API features, <u>watermark removal</u> and priority support<br>
326                                    <span class="text-xs"><a href="/pricing/credit-consumption.html" target="_blank" class="link">Read more</a></span>
327                                </p>
328                            </div>
329                            <div class="p-5 flex flex-col items-center">
330                                <button class="py-2 text-sm rounded-lg bg-custom2 text-white font-bold w-28 hover:bg-white hover:text-black hover:border hover:border-black" onclick="buyPlan('108040', 'paypro')">Buy</button>
331                            </div>
332                        </div>
333                    </div>
334                </div>
335                            <div class="mt-5">
336                    <div class="flex border border-gray-200 rounded-lg overflow-hidden">
337                        <div class="text-lg bg-gray-50 p-5 border-r border-gray-200">
338                            <div class="text-center text-3xl font-bold"><span class="text-sm relative -top-2">$</span>99.95</div>
339                            <div class="text-center text-sm">one payment</div>
340                        </div>
341                        <div class="grow flex flex-col md:flex-row md:items-center px-5 justify-between">
342                            <div>
343                                <p class="text-xl font-semibold">
344                                    <span>15,600 credits</span>
345                                </p>
346                                <p class="text-sm">
347                                    Up to 260 minutes of rendered videos<br>
348                                    With access to all API features, <u>watermark removal</u> and priority support<br>
349                                    <span class="text-xs"><a href="/pricing/credit-consumption.html" target="_blank" class="link">Read more</a></span>
350                                </p>
351                            </div>
352                            <div class="p-5 flex flex-col items-center">
353                                <button class="py-2 text-sm rounded-lg bg-custom2 text-white font-bold w-28 hover:bg-white hover:text-black hover:border hover:border-black" onclick="buyPlan('108041', 'paypro')">Buy</button>
354                            </div>
355                        </div>
356                    </div>
357                </div>
358                    </div>
359
360        <!-- SUBSCRIPTION PLANS -->
361        <a name="subscriptions"></a>
362        <div class="my-20">
363            <h2 class="text-3xl font-bold text-center">Subscription plans</h2>
364            <p class="mt-3 text-lg text-center">
365                Choose from the list of subscription plans.
366            </p>
367            <div class="mt-8 grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6">
368                                    <div class="border border-gray-200 rounded-lg p-6 flex flex-col ">
369                        
370                        <div class="mb-2 mt-2 font-bold uppercase text-sm">Hobby</div>
371                        <div class="text-sm text-gray-600 mb-4">3,000 credits per month</div>
372
373                        <div class="mb-6">
374                                                        <span class="text-3xl font-bold"><span class="text-sm relative -top-2">$</span>16.63</span>
375                            <span class="text-sm text-gray-500">USD/month</span>
376                                                            <div class="text-xs text-gray-400 mt-1">Billed yearly ($199.50)</div>
377                                                    </div>
378
379                        <ul class="space-y-2 mb-6 flex-grow">
380                            <li class="flex items-center text-sm text-gray-700">
381                                <svg class="w-5 h-5 text-green-500 mr-2 flex-shrink-0" fill="currentColor" viewBox="0 0 20 20"><path fill-rule="evenodd" d="M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z" clip-rule="evenodd"/></svg>
382                                Up to 50 minutes of rendered output videos
383                            </li>
384                            <li class="flex items-center text-sm text-gray-700">
385                                <svg class="w-5 h-5 text-green-500 mr-2 flex-shrink-0" fill="currentColor" viewBox="0 0 20 20"><path fill-rule="evenodd" d="M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z" clip-rule="evenodd"/></svg>
386                                Max video length: 1 min                            </li>
387                            <li class="flex items-center text-sm text-gray-700">
388                                <svg class="w-5 h-5 text-green-500 mr-2 flex-shrink-0" fill="currentColor" viewBox="0 0 20 20"><path fill-rule="evenodd" d="M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z" clip-rule="evenodd"/></svg>
389                                Text-to-speech voices
390                            </li>
391                            <li class="flex items-center text-sm text-gray-700">
392                                <svg class="w-5 h-5 text-green-500 mr-2 flex-shrink-0" fill="currentColor" viewBox="0 0 20 20"><path fill-rule="evenodd" d="M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z" clip-rule="evenodd"/></svg>
393                                All component libraries &amp; SDKs
394                            </li>
395                                                            <li class="flex items-center text-sm text-gray-700">
396                                    <svg class="w-5 h-5 text-green-500 mr-2 flex-shrink-0" fill="currentColor" viewBox="0 0 20 20"><path fill-rule="evenodd" d="M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z" clip-rule="evenodd"/></svg>
397                                    Chatbot support                                </li>
398                                                    </ul>
399
400                        <div class="mt-auto text-center">
401                            <button class="py-2 text-sm rounded-lg bg-custom2 text-white font-bold w-full hover:bg-white hover:text-black hover:border hover:border-black" onclick="buyPlan('133343', 'paypro')">Buy</button>
402                        </div>
403                    </div>
404                                    <div class="border border-2 border-gray-900 rounded-lg p-6 flex flex-col bg-gray-50 relative">
405                                                    <div class="absolute -top-3 left-1/2 transform -translate-x-1/2">
406                                <span class="bg-gray-900 text-white text-xs font-medium px-3 py-1 rounded-full">RECOMMENDED</span>
407                            </div>
408                        
409                        <div class="mb-2 mt-2 font-bold uppercase text-sm">Professional</div>
410                        <div class="text-sm text-gray-600 mb-4">12,000 credits per month</div>
411
412                        <div class="mb-6">
413                                                        <span class="text-3xl font-bold"><span class="text-sm relative -top-2">$</span>49.95</span>
414                            <span class="text-sm text-gray-500">USD/month</span>
415                                                    </div>
416
417                        <ul class="space-y-2 mb-6 flex-grow">
418                            <li class="flex items-center text-sm text-gray-700">
419                                <svg class="w-5 h-5 text-green-500 mr-2 flex-shrink-0" fill="currentColor" viewBox="0 0 20 20"><path fill-rule="evenodd" d="M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z" clip-rule="evenodd"/></svg>
420                                Up to 200 minutes of rendered output videos
421                            </li>
422                            <li class="flex items-center text-sm text-gray-700">
423                                <svg class="w-5 h-5 text-green-500 mr-2 flex-shrink-0" fill="currentColor" viewBox="0 0 20 20"><path fill-rule="evenodd" d="M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z" clip-rule="evenodd"/></svg>
424                                Max video length: 10 min                            </li>
425                            <li class="flex items-center text-sm text-gray-700">
426                                <svg class="w-5 h-5 text-green-500 mr-2 flex-shrink-0" fill="currentColor" viewBox="0 0 20 20"><path fill-rule="evenodd" d="M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z" clip-rule="evenodd"/></svg>
427                                Text-to-speech voices
428                            </li>
429                            <li class="flex items-center text-sm text-gray-700">
430                                <svg class="w-5 h-5 text-green-500 mr-2 flex-shrink-0" fill="currentColor" viewBox="0 0 20 20"><path fill-rule="evenodd" d="M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z" clip-rule="evenodd"/></svg>
431                                All component libraries &amp; SDKs
432                            </li>
433                                                            <li class="flex items-center text-sm text-gray-700">
434                                    <svg class="w-5 h-5 text-green-500 mr-2 flex-shrink-0" fill="currentColor" viewBox="0 0 20 20"><path fill-rule="evenodd" d="M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z" clip-rule="evenodd"/></svg>
435                                    Chatbot support                                </li>
436                                                            <li class="flex items-center text-sm text-gray-700">
437                                    <svg class="w-5 h-5 text-green-500 mr-2 flex-shrink-0" fill="currentColor" viewBox="0 0 20 20"><path fill-rule="evenodd" d="M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z" clip-rule="evenodd"/></svg>
438                                    Email support                                </li>
439                                                    </ul>
440
441                        <div class="mt-auto text-center">
442                            <button class="py-2 text-sm rounded-lg bg-custom2 text-white font-bold w-full hover:bg-white hover:text-black hover:border hover:border-black" onclick="buyPlan('104394', 'paypro')">Buy</button>
443                        </div>
444                    </div>
445                                    <div class="border border-gray-200 rounded-lg p-6 flex flex-col ">
446                        
447                        <div class="mb-2 mt-2 font-bold uppercase text-sm">Startup</div>
448                        <div class="text-sm text-gray-600 mb-4">30,000 credits per month</div>
449
450                        <div class="mb-6">
451                                                        <span class="text-3xl font-bold"><span class="text-sm relative -top-2">$</span>99.95</span>
452                            <span class="text-sm text-gray-500">USD/month</span>
453                                                    </div>
454
455                        <ul class="space-y-2 mb-6 flex-grow">
456                            <li class="flex items-center text-sm text-gray-700">
457                                <svg class="w-5 h-5 text-green-500 mr-2 flex-shrink-0" fill="currentColor" viewBox="0 0 20 20"><path fill-rule="evenodd" d="M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z" clip-rule="evenodd"/></svg>
458                                Up to 500 minutes of rendered output videos
459                            </li>
460                            <li class="flex items-center text-sm text-gray-700">
461                                <svg class="w-5 h-5 text-green-500 mr-2 flex-shrink-0" fill="currentColor" viewBox="0 0 20 20"><path fill-rule="evenodd" d="M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z" clip-rule="evenodd"/></svg>
462                                Max video length: 30 min                            </li>
463                            <li class="flex items-center text-sm text-gray-700">
464                                <svg class="w-5 h-5 text-green-500 mr-2 flex-shrink-0" fill="currentColor" viewBox="0 0 20 20"><path fill-rule="evenodd" d="M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z" clip-rule="evenodd"/></svg>
465                                Text-to-speech voices
466                            </li>
467                            <li class="flex items-center text-sm text-gray-700">
468                                <svg class="w-5 h-5 text-green-500 mr-2 flex-shrink-0" fill="currentColor" viewBox="0 0 20 20"><path fill-rule="evenodd" d="M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z" clip-rule="evenodd"/></svg>
469                                All component libraries &amp; SDKs
470                            </li>
471                                                            <li class="flex items-center text-sm text-gray-700">
472                                    <svg class="w-5 h-5 text-green-500 mr-2 flex-shrink-0" fill="currentColor" viewBox="0 0 20 20"><path fill-rule="evenodd" d="M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z" clip-rule="evenodd"/></svg>
473                                    Chatbot support                                </li>
474                                                            <li class="flex items-center text-sm text-gray-700">
475                                    <svg class="w-5 h-5 text-green-500 mr-2 flex-shrink-0" fill="currentColor" viewBox="0 0 20 20"><path fill-rule="evenodd" d="M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z" clip-rule="evenodd"/></svg>
476                                    Email support                                </li>
477                                                            <li class="flex items-center text-sm text-gray-700">
478                                    <svg class="w-5 h-5 text-green-500 mr-2 flex-shrink-0" fill="currentColor" viewBox="0 0 20 20"><path fill-rule="evenodd" d="M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z" clip-rule="evenodd"/></svg>
479                                    Video call support                                </li>
480                                                    </ul>
481
482                        <div class="mt-auto text-center">
483                            <button class="py-2 text-sm rounded-lg bg-custom2 text-white font-bold w-full hover:bg-white hover:text-black hover:border hover:border-black" onclick="buyPlan('108018', 'paypro')">Buy</button>
484                        </div>
485                    </div>
486                            </div>
487            <p class="mt-6 text-sm text-gray-500 text-center">
488                Looking for higher volumes? Additional Enterprise plans are available in the <a href="/dashboard/credits/subscriptions" class="link">Dashboard &rarr; Credits &rarr; Subscriptions</a>.
489            </p>
490            <p class="mt-5 text-sm text-gray-600 text-center">
491            Learn more about how credits are consumed <a href="./credit-consumption.html" target="_blank" class="link">here</a>.
492        </p>
493        </div>
494    </div>
495</div>
496
497<!-- FAQs -->
498
499<div class="bg-white mx-auto max-w-screen-lg mt-20">
500    <div class="main-content px-3 mx-auto">
501        <h2>Frequently Asked Questions</h2>
502
503        <h3>Quotas</h3>
504        <h4>How many videos can I create?</h4>
505        <p>
506            This will depend on the length of your videos.<br />
507            Your free or paid plan includes a quota of credits that you consume every time you create a new video.
508            Learn more about how credits are consumed <a href="./credit-consumption.html" target="_blank">here</a>.
509        </p>
510
511        <h4>What happens if I run out of credits?</h4>
512        <p>
513            If you are on a free plan, a pre-paid plan or a subscription plan, and you run out of credits you can buy a pre-paid plan and top up your account with more credits.
514        </p>
515
516        <h4>Do credits expire?</h4>
517        <p>
518            Pre-paid credits do not expire.
519        </p>
520        <p>
521            Subscription credits expire at the end of the monthly period.
522        </p>
523
524        <h4>Can I have pre-paid and subscription plans at the same time?</h4>
525        <p>
526            Yes, you can buy a subscription plan and a pre-paid plan at the same time.
527            A usual use case is that you run out of credits of your subscription and you buy a pre-paid plan to top up your account with more credits until the new month starts.
528        </p>
529
530        <h4>If I have a subscription plan and I top up my account, how minutes are deducted?</h4>
531        <p>
532            In case you have at the same time a subscription plan and a pre-paid plan, the API will deduct the minutes from the subscription plan first, and if there aren't
533            enough minutes, it will deduct the minutes from the pre-paid plan.
534        </p>
535
536        <h4>How many credits are deducted if I render 30 seconds videos?</h4>
537        <p>
538            If you render a 30 seconds video, the API will deduct 30 credits from your quota. That simple.
539        </p>
540        <p>
541            External text-to-speech or transcription services may incur additional costs.
542            Learn more about how credits are consumed <a href="./credit-consumption.html" target="_blank" class="link">here</a>.
543        </p>
544
545        <h4>Can I create images or videos with AI?</h4>
546        <p>
547            Plans include access to JSON2Video’s video editing, composition, template, subtitle, voiceover and rendering
548            features. JSON2Video does not support natively AI image generation, AI video generation, avatar generation or face-swap.
549        </p>
550
551        <h4>How many credits are deducted if I render 4K videos?</h4>
552        <p>
553            4K videos have 3840x2160 pixels, that is, 4 times more resolution than full HD video (1920x1080).
554            If you render 4K videos, the API will deduct 4x times the length of your video from your quota.
555            Example: A 4K 30 seconds video will deduct 120 seconds from your quota.
556        </p>
557
558        <h4>Do free plan videos have a watermark?</h4>
559        <p>
560            Unfortunately some users abuse the free trial plans by creating multiple accounts and using the trial accounts for commercial purposes. This has forced us to add a watermark to the videos generated by the free plans.
561        </p>
562
563        <h3>Billing</h3>
564        <h4>Can I cancel at any time?</h4>
565        <p>
566            Yes, just cancel your subscription and you will not be billed again. You will be able to continue using the API until the end of the current period.
567            Go to the  <a href="/dashboard/credits/subscriptions">Dashboard &gt; Credits &gt; Subscriptions</a> to cancel your subscription.
568        </p>
569
570        <h4>Can you refund my payment if I'm not happy with the service?</h4>
571        <p>
572            We want you to be confident when trying JSON2Video. That's why we offer a refund under the following conditions:
573        </p>
574        <ul>
575            <li>Refunds are available only for your first payment.</li>
576            <li>You must request the refund within 24 hours of that first payment.</li>
577            <li>Refunds apply only if you have used less than 10% of your credits.</li>
578            <li>We do not provide refunds for subscription renewals or for any payments made after your first one (including additional top-ups).</li>
579        </ul>
580
581        <h4>Can I upgrade at any time?</h4>
582        <p>
583            Yes, you can upgrade at any time by <a href="/dashboard/credits/subscriptions">subscribing to another plan</a> and using the same email address.
584        </p>
585
586        <h4>Are taxes included?</h4>
587        <p>
588            The prices stated above are taxes excluded.
589        </p>
590
591        <h3>About Paddle.com</h3>
592        <h4>What is Paddle?</h4>
593        <p>
594            Invoicing, paying taxes and being compliant with all country laws is <u>complex and expensive</u>.
595        </p>
596        <p>
597            At JSON2Video, we prefer to focus our time in improving the API and the service, not wasting time with the paperwork.
598            That's why we partner with <a href="https://paddle.com">Paddle.com</a> (our payment partner) that takes care of all these details.
599        </p>
600        <p>
601            Our customers pay to Paddle, and Paddle pays to us.
602        </p>
603
604        <h4>Why I received a charge from Paddle</h4>
605        <p>
606            As said above, Paddle charges you the subscription cost and then it pays to us.
607            In your credit card transactions you will see something like <code>Paddle.net* Json2video</code>.
608        </p>
609
610    </div>
611</div>
612
613<div id="popupWait" class="absolute inset-0 items-center justify-center bg-gray-900 bg-opacity-80" style="display: none; z-index: 99999;">
614    <div class="loader text-white">
615        <div class="p-3 bg-black">Wait a second...</div>
616    </div>
617</div>
618
619<div id="emailPopup" class="fixed inset-0 bg-black bg-opacity-50 flex items-center justify-center hidden" style="z-index: 99999;">
620    <div class="bg-white rounded-lg p-8 max-w-lg mx-4">
621        <h3 class="text-xl font-bold mb-4">Important!</h3>
622        <p>
623            In the purchase form, <b>enter the same email address</b> you used to sign up to JSON2Video.<br/>
624        </p>
625        <p class="mt-2">
626            If you use a different email address, a new account will be created with the purchased credits.
627        </p>
628        <div class="mt-6 flex justify-end">
629            <button onclick="closeEmailPopup()" class="px-4 py-2 bg-custom2 text-white font-bold rounded-lg">Continue</button>
630        </div>
631    </div>
632</div>
633
634<!-- <pre>
635    Country: \n
636    Timestamp: 2026-10-02 05:53:41</pre> -->
637
638<!-- Tips -->
639<script src="https://unpkg.com/@popperjs/core@2"></script>
vendor: 1 bytes, line 639
639
640<script src="https://unpkg.com/tippy.js@6"></script>
vendor: 1 bytes, line 640
640
641<script>
642    tippy('[data-tippy-content]', {
643        trigger: 'click'
644    });
645</script>
645
646
647<!-- Custom -->
648<script>
649    function buyPlan(productId, account) {
650        window.productId = productId;
651        window.productAccount = account;
652
653        if (!userEmailAddress) {
654            document.getElementById('emailPopup').classList.remove('hidden');
655            return;
656        }
657
658        processCheckout(productId, account);
659    }
660
661    // Build attribution payload from the cookies set by /external/attribution.js
662    // (j2v_ft / j2v_lt) plus current URL UTMs. Passed through Paddle's
663    // `passthrough` (Classic) and `customData` (Billing) so the webhook can
664    // attach `acquisition` to brand-new users created via direct checkout.
665    function buildAcquisition() {
666        function getCookie(name) {
667            var m = document.cookie.match(new RegExp('(^| )' + name + '=([^;]+)'));
668            try { return m ? JSON.parse(decodeURIComponent(m[2])) : null; } catch (e) { return null; }
669        }
670        var params = new URLSearchParams(location.search);
671        var signup_utm = {};
672        ['utm_source','utm_medium','utm_campaign','utm_content','utm_term'].forEach(function(k){
673            var v = params.get(k); if (v) signup_utm[k.replace('utm_','')] = v;
674        });
675        return {
676            first_touch: getCookie('j2v_ft'),
677            last_touch:  getCookie('j2v_lt'),
678            signup_utm:  signup_utm,
679            signup_referrer: document.referrer || null,
680            signup_landing: location.pathname + location.search,
681            signup_at:   new Date().toISOString()
682        };
683    }
684
685    function processCheckout(productId, account) {
686        gtag('event', 'begin_checkout', {
687            provider: account,
688            items: [{ item_id: productId }]
689        });
690
691        // PostHog, same moment as GA4 begin_checkout. plan_id is the provider's product id,
692        // like GA4 item_id and the dashboard. The loader sends it at once (a navigation to
693        // PayPro follows) and drops it without consent. Never blocks the checkout.
694        try {
695            if (window.j2vJourney) {
696                window.j2vJourney.capture('checkout_started', { provider: account, plan_id: productId, from: 'website' });
697            }
698        } catch (e) { /* analytics must never break the checkout */ }
699
700        if (account === 'paypro') {
701            // Best-effort email prefill (orphan-payment fix P2): seed billing-email
702            // with the account email. PayPro's hosted checkout has no "lock email"
703            // URL param, so the buyer can still edit it and processors may override
704            // it. Authoritative account matching relies on client_id (P1), not this.
705            var email = encodeURIComponent(userEmailAddress);
706            var acq = encodeURIComponent(JSON.stringify({ acquisition: buildAcquisition() }));
707            window.location.href = 'https://store.payproglobal.com/checkout?products[1][id]=' + productId + '&billing-email=' + email + '&x-acquisition=' + acq;
708        } else {
709            var acquisition = buildAcquisition();
710            // Best-effort email defense-in-depth (orphan-payment fix P2): prefill the
711            // checkout email and lock it (Paddle Classic `disableLogout`) so the buyer
712            // cannot switch addresses. Best-effort only — PayPal / some processors may
713            // still override the email, which is why client_id (P1) is the real fix.
714            Paddle.Checkout.open({
715                product: productId,
716                email: userEmailAddress || undefined,
717                disableLogout: !!userEmailAddress,
718                passthrough: JSON.stringify({ acquisition: acquisition }),
719                customData: { acquisition: acquisition }
720            });
721        }
722    }
723
724    function closeEmailPopup() {
725        document.getElementById('emailPopup').classList.add('hidden');
726        processCheckout(window.productId, window.productAccount);
727    }
728</script>
728
729
730<!-- Paddle.com -->
731<script src="https://cdn.paddle.com/paddle/paddle.js"></script>
vendor: 1 bytes, line 731
731
732<script type="text/javascript">
733
734    function showWaitPopup() {
735        const paddlePopup = document.querySelectorAll("iframe[name='paddle_frame']")[0];
736        if (paddlePopup) paddlePopup.remove();
737        
738        window.scrollTo(0, 0);
739        document.getElementById("popupWait").style.display = "flex";
740        document.body.style.overflow = "hidden";
741    }
742
743    function hideWaitPopup() {
744        document.getElementById("popupWait").style.display = "none";
745        document.body.style.overflow = "auto";
746    }
747
748
749    function myEventCallback(data) {
750        
751        if (data.event === 'Checkout.PaymentComplete') {
752            showWaitPopup();
753            // Check to ensure the payment has not been flagged for manual fraud review
754            if (!data.eventData.flagged) {
755                var checkoutId = data.eventData.checkout.id;
756                Paddle.Order.details(checkoutId, function(data) {
757                    if (!!data) {
758                        // Order data, downloads, receipts etc... available within 'data' variable
759                        console.log(data);
760                        const eventObject = {
761                            value: data.order.total,
762                            tax: data.order.total_tax,
763                            currency: data.order.currency,
764                            transaction_id: data.order.order_id,
765                            affiliation: 'JSON2Video',
766                            items: [{
767                                id: data.order.product_id ?? data.checkout.title,
768                                name: data.checkout.title,
769                                brand: 'JSON2Video',
770                                category: data.order.is_subscription ? 'Subscription' : 'Product',
771                                quantity: data.order.quantity ?? 1
772                            }]
773                        };
774                        console.log("Event Object", eventObject);
775                        gtag('event', 'purchase', eventObject);
776                        setTimeout(() => { hideWaitPopup(); window.location.href = "/pricing/thank-you/" }, 1500);
777                    } else {
778                        // Order processing delay - order details cannot be retrieved at the moment
779                        console.log('Order is being processed')
780                        setTimeout(hideWaitPopup, 1500);
781                    }
782                });
783            } else {
784                // Payment has not been fully processed at the moment, so order details cannot be retrieved
785                console.log('Transaction pending review');
786                setTimeout(hideWaitPopup, 1500);
787            }
788        }
789    }
790
791
792            Paddle.Setup({
793            vendor: 144186,
794            eventCallback: myEventCallback
795        }); // live
796    </script>
796
797    </div>        </div>
798            <footer class="bg-gray-900">
799    <div class="max-w-screen-lg px-6 py-4 mx-auto">
800        <div class="lg:flex">
801            <div class="w-full -mx-6 lg:w-2/5">
802                <div class="px-6">
803                    <div>
804                        <a href="#" class="text-xl font-bold text-white hover:text-gray-300">JSON2Video</a>
805                    </div>
806                    
807                    <p class="max-w-md mt-2 text-gray-400">
808                        <strong>Your video editing API</strong><br/>
809                        Create engaging videos from simple JSON snippets.
810                    </p>
811                    
812                    <div class="flex mt-4 -mx-2">
813                        <a href="https://www.linkedin.com/in/david-bosch-rein/" target="_blank" rel="nofollow" class="mx-2 text-gray-200 hover:text-gray-400" aria-label="Linkedin">
814                            <svg class="w-4 h-4 fill-current" viewBox="0 0 512 512">
815                                <path d="M444.17,32H70.28C49.85,32,32,46.7,32,66.89V441.61C32,461.91,49.85,480,70.28,480H444.06C464.6,480,480,461.79,480,441.61V66.89C480.12,46.7,464.6,32,444.17,32ZM170.87,405.43H106.69V205.88h64.18ZM141,175.54h-.46c-20.54,0-33.84-15.29-33.84-34.43,0-19.49,13.65-34.42,34.65-34.42s33.85,14.82,34.31,34.42C175.65,160.25,162.35,175.54,141,175.54ZM405.43,405.43H341.25V296.32c0-26.14-9.34-44-32.56-44-17.74,0-28.24,12-32.91,23.69-1.75,4.2-2.22,9.92-2.22,15.76V405.43H209.38V205.88h64.18v27.77c9.34-13.3,23.93-32.44,57.88-32.44,42.13,0,74,27.77,74,87.64Z"/>
816                            </svg>
817                        </a>
818
819                        <a href="https://twitter.com/json2video" target="_blank" rel="nofollow" class="mx-2 text-gray-200 hover:text-gray-400" aria-label="Twitter">
820                            <svg class="w-4 h-4 fill-current" viewBox="0 0 512 512">
821                                <path d="M496,109.5a201.8,201.8,0,0,1-56.55,15.3,97.51,97.51,0,0,0,43.33-53.6,197.74,197.74,0,0,1-62.56,23.5A99.14,99.14,0,0,0,348.31,64c-54.42,0-98.46,43.4-98.46,96.9a93.21,93.21,0,0,0,2.54,22.1,280.7,280.7,0,0,1-203-101.3A95.69,95.69,0,0,0,36,130.4C36,164,53.53,193.7,80,211.1A97.5,97.5,0,0,1,35.22,199v1.2c0,47,34,86.1,79,95a100.76,100.76,0,0,1-25.94,3.4,94.38,94.38,0,0,1-18.51-1.8c12.51,38.5,48.92,66.5,92.05,67.3A199.59,199.59,0,0,1,39.5,405.6,203,203,0,0,1,16,404.2,278.68,278.68,0,0,0,166.74,448c181.36,0,280.44-147.7,280.44-275.8,0-4.2-.11-8.4-.31-12.5A198.48,198.48,0,0,0,496,109.5Z"/>
822                            </svg>
823                        </a>
824                    </div>
825                </div>
826            </div>
827
828            <div class="mt-6 lg:mt-0 lg:flex-1">
829                <div class="grid grid-cols-2 gap-6 sm:grid-cols-3 md:grid-cols-4">
830                    
831                    <div>
832                        <h3 class="uppercase text-white">Documentation</h3>
833                        <a href="/docs/api/" class="block mt-2 text-sm text-gray-400 hover:underline">Video Editing API specification</a>
834                        <a href="/docs/tutorial/" class="block mt-2 text-sm text-gray-400 hover:underline">Tutorial</a>
835                        <a href="/templates/" class="block mt-2 text-sm text-gray-400 hover:underline">Templates</a>
836                        <a href="/examples/" class="block mt-2 text-sm text-gray-400 hover:underline">Examples</a>
837                    </div>
838
839                    <div>
840                        <h3 class="uppercase text-white">Learn</h3>
841                        <a href="/video-automation/" class="block mt-2 text-sm text-gray-400 hover:underline">Video automation</a>
842                        <a href="/video-api/" class="block mt-2 text-sm text-gray-400 hover:underline">Video API</a>
843                        <a href="/video-automation/json-to-video/" class="block mt-2 text-sm text-gray-400 hover:underline">Convert JSON to video</a>
844                        <a href="/how-to/json2video/video-news-summary.html" class="block mt-2 text-sm text-gray-400 hover:underline">News video summary</a>
845                    </div>
846
847                    <div>
848                        <h3 class="uppercase text-white">Contact</h3>
849                        <a href="/contact-us/" class="block mt-2 text-sm text-gray-400 hover:underline">Drop us a message</a>
850                        <a href="https://endcredits.pro" target="_blank" class="block mt-2 text-sm text-gray-400 hover:underline">EndCredits.pro</a>
851                    </div>
852
853                    <div>
854                        <h3 class="uppercase text-white">Legal</h3>
855                        <a href="/legal/" class="block mt-2 text-sm text-gray-400 hover:underline">Legal home page</a>
856                        <a href="/legal/terms-of-use.html" class="block mt-2 text-sm text-gray-400 hover:underline">API Terms of use</a>
857                        <a href="/legal/privacy-policy.html" class="block mt-2 text-sm text-gray-400 hover:underline">Privacy Policy</a>
858                        <a href="/legal/cookies/" class="block mt-2 text-sm text-gray-400 hover:underline">Cookie Policy</a>
859                        <a href="#" onclick="event.preventDefault(); if (window.showCookiePreferences) window.showCookiePreferences();" class="block mt-2 text-sm text-gray-400 hover:underline">Cookie preferences</a>
860                    </div>
861                </div>
862            </div>
863        </div>
864
865        <hr class="h-px my-6 border-none bg-gray-700">
866
867        <div>
868            <p class="text-center text-white">© JSON2Video - The video editing API - 2026 - All rights reserved</p>
869        </div>
870    </div>
871    <a href="/contact-us/">
872        <div class="color-gradient" style="position:fixed;bottom:2vh;right:2vh;width:7vh;height:7vh;background-color:#555;color:white;display:flex;align-items:center;justify-items:center;border-radius:15%;z-index:9999;">
873            <svg id="Layer_1" style="width:100%;height:60%;" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><defs><style>.cls-1{fill:#DDD;}</style></defs><title>
873speech-bubble-5-outline</title><path stroke="white" class="cls-1" d="M487.67,416C503.1,393.65,512,367.41,512,339.34c0-51.81-30.29-97.38-76.1-123.67C434.76,110.31,337.63,25.22,218,25.22,97.59,25.22,0,111.32,0,217.54c0,36.62,11.61,70.85,31.74,100L4,368.95c-11.63,19.38,3.92,40.91,23,40.91a26.89,26.89,0,0,0,13.93-4l54.4-29.34A235.57,235.57,0,0,0,197.6,409c28.19,46.29,83.57,77.76,147.29,77.76,34.88,0,67.24-9.44,94-25.56l41.71,22.49a20.63,20.63,0,0,0,10.68,3.07c14.61,0,26.53-16.5,17.61-31.36ZM108.53,354.54,96,347l-12.87,6.94-54.4,29.34-.52.28-.5.3a4.79,4.79,0,0,1-.71.35,2.53,2.53,0,0,1-1.36-1.3,2.69,2.69,0,0,1,.35-.77l.3-.5.28-.52,27.74-51.43,7.46-13.83-8.93-12.92C35,277.2,25.64,247.66,25.64,217.54c0-91.91,86.27-166.68,192.32-166.68,100.53,0,183.28,67.2,191.62,152.49a186,186,0,0,0-64.68-11.46c-92.29,0-167.11,66-167.11,147.45a131.45,131.45,0,0,0,7,42.38A207.85,207.85,0,0,1,108.53,354.54Zm358,46.87-8.93,12.92,7.46,13.83,13.72,25.43L451.1,438.65l-12.87-6.94-12.53,7.54c-23.79,14.32-51.74,21.89-80.81,21.89-78,0-141.46-54.64-141.46-121.8s63.46-121.8,141.46-121.8,141.46,54.64,141.46,121.8A108.94,108.94,0,0,1,466.57,401.41ZM397.46,294.46a12.82,12.82,0,0,1-12.82,12.82H307.71a12.82,12.82,0,1,1,0-25.64h76.93A12.82,12.82,0,0,1,397.46,294.46Zm0,38.46a12.82,12.82,0,0,1-12.82,12.82H307.71a12.82,12.82,0,1,1,0-25.64h76.93A12.82,12.82,0,0,1,397.46,332.93Zm0,38.46a12.82,12.82,0,0,1-12.82,12.82H307.71a12.82,12.82,0,1,1,0-25.64h76.93A12.82,12.82,0,0,1,397.46,371.39Z"/></svg>
874        </div>
875    </a>
876</footer>
877
878<div id="modal-window" class="fixed hidden inset-0 bg-gray-600 overflow-y-auto h-full w-full p-5 pb-20" style="top:52px;">
879    <pre><code id="modal-code" class="language-json rounded-lg bg-black"></code></pre>
880    <div onclick="closeModal();" class="absolute text-white" style="cursor:pointer; width:32px; height:32px; right: 32px; top: 30px; border-radius: 4px; background-color: #CCC; background-image: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjMycHgiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDUxMiA1MTI7IiB2ZXJzaW9uPSIxLjEiIHZpZXdCb3g9IjAgMCA1MTIgNTEyIiB3aWR0aD0iMzJweCIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+CiAgICA8ZGVmcz4KICAgICAgICA8c3R5bGU+CiAgICAgICAgLmNscy0xIHsKICAgICAgICAgICAgZmlsbDogI2ZmZjsKICAgICAgICAgICAgc3Ryb2tlOiAjZmZmOwogICAgICAgICAgICBzdHJva2Utd2lkdGg6IDFweDsKICAgICAgICAgICAgZmlsbC1ydWxlOiBldmVub2RkOwogICAgICAgIH0KICAgICAgICA8L3N0eWxlPgogICAgPC9kZWZzPgogICAgPHBhdGggY2xhc3M9ImNscy0xIiBkPSJNNDQzLjYsMzg3LjFMMzEyLjQsMjU1LjRsMTMxLjUtMTMwYzUuNC01LjQsNS40LTE0LjIsMC0xOS42bC0zNy40LTM3LjZjLTIuNi0yLjYtNi4xLTQtOS44LTRjLTMuNywwLTcuMiwxLjUtOS44LDQgIEwyNTYsMTk3LjhMMTI0LjksNjguM2MtMi42LTIuNi02LjEtNC05LjgtNGMtMy43LDAtNy4yLDEuNS05LjgsNEw2OCwxMDUuOWMtNS40LDUuNC01LjQsMTQuMiwwLDE5LjZsMTMxLjUsMTMwTDY4LjQsMzg3LjEgIGMtMi42LDIuNi00LjEsNi4xLTQuMSw5LjhjMCwzLjcsMS40LDcuMiw0LjEsOS44bDM3LjQsMzcuNmMyLjcsMi43LDYuMiw0LjEsOS44LDQuMWMzLjUsMCw3LjEtMS4zLDkuOC00LjFMMjU2LDMxMy4xbDEzMC43LDEzMS4xICBjMi43LDIuNyw2LjIsNC4xLDkuOCw0LjFjMy41LDAsNy4xLTEuMyw5LjgtNC4xbDM3LjQtMzcuNmMyLjYtMi42LDQuMS02LjEsNC4xLTkuOEM0NDcuNywzOTMuMiw0NDYuMiwzODkuNyw0NDMuNiwzODcuMXoiLz4KPC9zdmc+)"></div>
881    <div onclick="copyCode(this);" class="absolute cursor-pointer text-white" style="top:30px;right:80px;"><svg width="32" height="32" fill="none" viewBox="0 0 24 24" stroke="currentColor" class="transform transition-transform duration-500 ease-in-out"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z"></path></svg></path></svg></div>
882</div>
883<script>footer_event();</script>
883
884    </body>
885</html>
886    

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.