License & updates
Pricing model
Section titled “Pricing model”€99 one-time. Lifetime updates included. No yearly renewal, no support contract upsell — every future v3.x and v4.x release ships to your composer repository the moment we publish it, and your license stays valid forever.
Initial activation
Section titled “Initial activation”You receive your license key and Composer token only after purchase — there’s no separate trial download. The plugin’s storefront and admin start working immediately on install. To activate without waiting for the daily cron:
- Open Stores → Configuration → CDA → Custom Fields → Licensing
- Paste your license key into License Key
- Click Save Config, then Verify Now
Status flips to ACTIVE in one round-trip.
Domain binding
Section titled “Domain binding”One license = one production domain. On the first heartbeat from a “production” host, the license binds permanently to that domain in our database. Future heartbeats from a different production host are rejected with:
License is already bound to
example.com. Email office@creativdigital.ro to transfer this license tonewshop.com.
What counts as a “production” host
Section titled “What counts as a “production” host”Any hostname EXCEPT loopback and private-network IPs:
| Exempt (no binding consumed) | Counts as production |
|---|---|
localhost | myshop.com |
127.0.0.0/8 | staging.myshop.com |
10.0.0.0/8 | magento.test resolved to public IP |
172.16.0.0/12 | 51-12-95-149.sslip.io |
192.168.0.0/16 | (anything else) |
::1 |
So localhost and 127.0.0.1 are safe dev environments — they never consume your binding. Other dev hostnames mapped via /etc/hosts to a private IP work too.
Transferring to a new domain
Section titled “Transferring to a new domain”Email office@creativdigital.ro from the email address on your Stripe receipt, with your license key and the reason for the transfer (rebrand, hosting move, migration). We reset the binding within 1 business day — your next heartbeat will re-bind to the new domain automatically.
Heartbeat — how license verification works
Section titled “Heartbeat — how license verification works”Every day at 03:30 UTC, your store runs the cda_customfields_license_heartbeat cron job:
- Reads your license key from
core_config_data(encrypted at rest). - POSTs to
https://magento.creativdigital.ro/api/heartbeatwith your license key, domain, Magento version, and active CDA modules. - Receives one of:
ACTIVE,INVALID,SUSPENDED,EXPIRED,FAILED. - Saves status to
cda_customfields/licensing/status.
The heartbeat retries with throttling:
- ACTIVE status → re-check weekly
- Failed status → re-check daily until it succeeds
Network failure handling
Section titled “Network failure handling”If our licensing server is unreachable (DNS hiccup, your firewall blocks egress, our outage), the cron retains your previous status. A single failed call never flips a healthy ACTIVE license to LOCKED. Only an explicit non-ACTIVE response from our server (e.g. a refunded or transferred license) downgrades you.
Verify Now button
Section titled “Verify Now button”Don’t want to wait until 03:30? In Stores → Configuration → CDA → Custom Fields → Licensing, after saving your license key, click Verify Now. It runs the heartbeat synchronously and shows the result inline:
License verified — status: ACTIVE.
Receiving updates
Section titled “Receiving updates”After purchase you have a Composer token (cda_tok_…). Updates are just:
composer update cda/magento2-custom-fieldsbin/magento setup:upgradebin/magento setup:di:compilebin/magento cache:flushThis pulls the latest version from our Composer repository (magento.creativdigital.ro). The token authenticates your install; the same token works forever (or until you ask us to rotate it).
Each new release is tagged on our git repo and built into a downloadable ZIP automatically via GitHub Actions. You’ll see all available versions when you run composer require or composer update.
What stops working if my license becomes INVALID or EXPIRED?
Section titled “What stops working if my license becomes INVALID or EXPIRED?”Same as trial-expired:
- Storefront fields keep rendering.
- Existing field admin edits still work.
- New field creation, Quick-Add presets, and Use Case template application are paused until status returns to ACTIVE.
We never touch your data — your cda_custom_field_* tables are inviolate regardless of license state.
Refunds
Section titled “Refunds”If something doesn’t work, email office@creativdigital.ro within 30 days of purchase. We’ll either fix it or refund you, no questions about why. Stripe fees are non-refundable (~€0.30 + 1.4%) but we eat them — you get the full €99 back.