Plans and Limits
One table for every entitlement the product enforces, with the feature code beside it.
The entitlement matrix
Unlimited is the value -1 in the feed. Yes and No are the strings true and false. Not set means the code is absent from that plan's features array — see Reading the raw feed.
| Feature | Code | Free | Solo | Basic | Plus | Business | Enterprise |
|---|---|---|---|---|---|---|---|
| Shares included | max_shares | 3 per day | 50 | 100 | 200 | 500 | Unlimited |
| Fields per share | max_fields | 2 | 2 | 3 | 5 | Unlimited | Unlimited |
| Access-log retention, days | max_days_access_logs | 0 | 3 | 7 | 30 | 90 | 180 |
| Password protection | view_protection | No | Yes | Yes | Yes | Yes | Yes |
| Secure view prompt | secure_view_prompt | No | Yes | Yes | Yes | Yes | Yes |
| Failed attempts tolerance | failed_attemp_tolerance | Not set | Yes | Yes | Yes | Yes | Yes |
| IP Whitelist | ip_access_restriction | No | No | No | No | Yes | Yes |
| Zero-knowledge custody | zero_knowledge | No | No | No | No | Yes | Yes |
| Teams | multi_user | No | No | Yes | Yes | Yes | Yes |
| Included seats | included_seats | 0 | 0 | 1 | 5 | 5 | Unlimited |
| Secure Requests | secure_requests | Not set | Not set | Not set | Not set | Yes | Yes |
| Field templates | field_templates | No | No | No | No | Yes | Yes |
| Templates per organisation | max_field_templates_per_org | 0 | 0 | 0 | 0 | 25 | 100 |
| Fields per template | max_fields_per_template | 0 | 0 | 0 | 0 | 30 | 30 |
| Custom branding | custom_branding | No | No | No | No | Yes | Yes |
| Slack integration | slack_integration | No | No | No | Yes | Yes | Yes |
| API access | api_access | No | No | No | No | Yes | Yes |
| API rate limit, requests per minute | api_rate_limit_rpm | 0 | 0 | 0 | 0 | 100 | 600 |
| API keys | max_api_keys | 0 | 0 | 0 | 0 | 5 | 25 |
| Webhook endpoints | max_webhooks | 0 | 0 | 0 | 0 | 3 | 10 |
Annual plans carry exactly the same entitlements as their monthly equivalent. There are eleven plan codes in the feed — free, then a monthly and a yearly code for each of Solo, Basic, Plus, Business and Enterprise — but solo_yearly and solo resolve to an identical feature set, and so does every other pair. Only the price differs.
What some of these mean
- Shares included is a per-day allowance on Free and a per-billing-month allowance on every paid plan, anchored to your renewal day. Expired and deleted shares still count. See Plans and share allowance.
- Password protection, Secure view prompt, Failed attempts tolerance and IP Whitelist are the four gated controls in the share creation form. The first three are disabled outright on a plan without them; IP Whitelist stays typeable but the addresses are dropped from the request. All four are refused server-side if sent anyway, with
error_code53 and the messageYour plan doesn't support this feature, please upgrade to higher plan. - Zero-knowledge custody is not encryption. Content is end-to-end encrypted on every plan including Free — the key is generated in your browser and travels in the link. This entitlement buys custody: an account passphrase, device linking and key wraps, so you can reach your own content without the link. See Zero-knowledge custody.
- Included seats is how many team members the plan pays for.
multi_usercontrols whether team surfaces exist at all;included_seatscontrols how many people fit. A plan can have one without the other — Solo has neither, Basic has Teams with a single seat. - Custom branding adds a Branding tab under Account, and branding on a team.
- API rate limit is a sustained rate; the burst ceiling is twice it. See Errors and rate limits.
Entitlements can be overridden per account, so a negotiated agreement beats the plan value — but only for the twelve codes that are open to negotiation: api_access, api_rate_limit_rpm, max_api_keys, max_webhooks, max_shares, max_fields, max_days_access_logs, included_seats, zero_knowledge, multi_user, secure_requests and slack_integration. Every other row above comes from the plan and only from the plan. An entitlement change takes up to 30 seconds to reach the API.
Reading the raw feed
The matrix above is built from https://api.credenshare.io/plans/all, the same feed Account → Subscription reads. Two things in that payload mislead people.
max_shares is not your plan's allowance. It is 0 on all eleven plans, because it is a per-account remaining counter rather than a plan figure. The allowance is the max_shares entry inside the plan's features array. included_seats appears in both places too, but there the two agree on every plan, so either is safe to read.An absent code is not a denial. A feature the plan does not include is normally present with feature_value set to "false". Two codes are instead missing entirely: failed_attemp_tolerance on Free, and secure_requests on Free, Solo, Basic and Plus. Absence means no row was ever seeded for that plan — a gap in the data, not a recorded policy. Gates written to tolerate an unseeded code treat absence as allowed rather than refusing every tier, so only an explicit false is a settled denial. Both of the current absences are read by gates that require an explicit true, which is why they show as unavailable in the product; do not generalise from that to a code you find missing in future.
Where to check your own plan
Account → Subscription shows your current plan, the shares remaining on it, and the Annual and Monthly options. Enterprise is arranged directly rather than bought: the Enterprise card shows no price and a Contact Us button, which opens an inquiry form in the app. You can also write to hello@credenshare.io.
Billing and Subscription
Plan prices, when an upgrade or downgrade actually takes effect, invoices, payment cards, cancelling, and why owning a team blocks both.
Teams and Contexts
Every share belongs to exactly one context — your personal space or one team. How to switch, where a new share lands, and who can see it.