Skip to content

Enterprise

This page covers KEPCA's enterprise features: team management, custom domains, audit logging, and billing plans.

Team management

KEPCA supports multi-user organizations with role-based access control. A team (organization) can own multiple sites and share access across members.

Roles

RoleSitesSettingsBillingMembersOwner transfer
OwnerCRUDCRUDCRUDCRUDYes
AdminCRUDCRUDReadCRUNo
MemberReadRead----No
ViewerRead------No

Creating a team

bash
curl -X POST https://api.kepca.com/v1/teams \
  -H "Authorization: Bearer <jwt>" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Acme Corp",
    "slug": "acme-corp"
  }'
json
{
  "team_id": "team_abc123",
  "name": "Acme Corp",
  "slug": "acme-corp",
  "owner_id": "usr_abc123",
  "created_at": "2026-04-09T12:00:00.000Z"
}

Inviting members

bash
curl -X POST https://api.kepca.com/v1/teams/team_abc123/invites \
  -H "Authorization: Bearer <jwt>" \
  -H "Content-Type: application/json" \
  -d '{
    "email": "colleague@example.com",
    "role": "admin"
  }'

The invited user receives an email with a link to accept. Pending invites expire after 7 days.

Listing team members

bash
curl https://api.kepca.com/v1/teams/team_abc123/members \
  -H "Authorization: Bearer <jwt>"
json
{
  "members": [
    {
      "user_id": "usr_abc123",
      "email": "owner@example.com",
      "name": "Ada Lovelace",
      "role": "owner",
      "joined_at": "2026-04-01T00:00:00.000Z"
    },
    {
      "user_id": "usr_def456",
      "email": "colleague@example.com",
      "name": "Grace Hopper",
      "role": "admin",
      "joined_at": "2026-04-05T00:00:00.000Z"
    }
  ]
}

Updating a member's role

bash
curl -X PATCH https://api.kepca.com/v1/teams/team_abc123/members/usr_def456 \
  -H "Authorization: Bearer <jwt>" \
  -H "Content-Type: application/json" \
  -d '{ "role": "member" }'

Removing a member

bash
curl -X DELETE https://api.kepca.com/v1/teams/team_abc123/members/usr_def456 \
  -H "Authorization: Bearer <jwt>"

Custom domains (CNAME)

Enterprise plans can serve the KEPCA widget and API from a custom subdomain (e.g., captcha.yourdomain.com). This avoids ad-blocker interference and provides a branded experience.

Setup steps

  1. Add the domain in the dashboard or API:
bash
curl -X POST https://api.kepca.com/v1/domains \
  -H "Authorization: Bearer <jwt>" \
  -H "Content-Type: application/json" \
  -d '{
    "domain": "captcha.example.com",
    "site_key": "mpt_site_abc123"
  }'

Response:

json
{
  "domain_id": "dom_abc123",
  "domain": "captcha.example.com",
  "status": "pending_verification",
  "cname_target": "cname.kepca.com",
  "txt_record": "_kepca-verify.captcha.example.com",
  "txt_value": "kepca-verify=abc123xyz"
}
  1. Add the DNS records with your DNS provider:
TypeHostValue
CNAMEcaptcha.example.comcname.kepca.com
TXT_kepca-verify.captcha.example.comkepca-verify=abc123xyz
  1. Wait for verification. KEPCA checks DNS records every 5 minutes. Once verified, the status changes to active and TLS certificates are provisioned automatically.

  2. Update your widget to use the custom domain:

html
<script src="https://captcha.example.com/v1/maptcha.js" defer></script>

<maptcha-widget
  data-sitekey="mpt_site_abc123"
  data-endpoint="https://captcha.example.com"
></maptcha-widget>

Listing domains

bash
curl https://api.kepca.com/v1/domains \
  -H "Authorization: Bearer <jwt>"

Removing a domain

bash
curl -X DELETE https://api.kepca.com/v1/domains/dom_abc123 \
  -H "Authorization: Bearer <jwt>"

Audit log

Every administrative action in KEPCA is recorded in an immutable audit log. The audit log is available on Pro and Enterprise plans.

What is logged

Action CategoryExamples
AuthenticationLogin, logout, password change
Site managementSite created, settings changed, key rotated
Team managementMember invited, role changed, member removed
Domain managementDomain added, verified, removed
Webhook managementWebhook created, updated, deleted
BillingPlan changed, payment method updated

Querying the audit log

bash
curl "https://api.kepca.com/v1/audit?from=2026-04-01T00:00:00Z&limit=50" \
  -H "Authorization: Bearer <jwt>"
json
{
  "entries": [
    {
      "id": "aud_001",
      "timestamp": "2026-04-09T12:00:00.000Z",
      "actor": {
        "user_id": "usr_abc123",
        "email": "admin@example.com",
        "ip": "203.0.113.42"
      },
      "action": "site.settings_updated",
      "resource": {
        "type": "site",
        "id": "mpt_site_abc123"
      },
      "changes": {
        "mode": { "from": "adaptive", "to": "always-challenge" }
      }
    }
  ],
  "has_more": true,
  "cursor": "aud_001"
}

Query parameters

ParamTypeDefaultDescription
fromstring30d agoStart time (ISO 8601)
tostringnowEnd time (ISO 8601)
actorstring--Filter by user ID
actionstring--Filter by action (e.g., site.*)
limitnumber50Results per page (max 100)
cursorstring--Pagination cursor from previous page

Audit log entries are retained for 90 days on Pro and 1 year on Enterprise plans.

Billing plans

KEPCA offers three plans to match different usage levels.

Plan comparison

FeatureFreeProEnterprise
Verifications/month10,000500,000Unlimited
Sites220Unlimited
Challenge typesPoW, CheckboxAll 6All 6
Team members110Unlimited
Custom domains--1Unlimited
Audit log--90 days1 year
Webhooks--5Unlimited
Rate limitsStandardElevatedCustom
SupportCommunityEmailDedicated
SLA--99.9%99.99%
Price$0$29/monthCustom

Checking current plan

bash
curl https://api.kepca.com/v1/billing/plan \
  -H "Authorization: Bearer <jwt>"
json
{
  "plan": "pro",
  "status": "active",
  "current_period_start": "2026-04-01T00:00:00.000Z",
  "current_period_end": "2026-05-01T00:00:00.000Z"
}

Usage and limits

bash
curl https://api.kepca.com/v1/billing/usage \
  -H "Authorization: Bearer <jwt>"
json
{
  "period": "2026-04",
  "verifications": {
    "used": 142500,
    "limit": 500000,
    "percentage": 28.5
  },
  "sites": {
    "used": 5,
    "limit": 20
  },
  "team_members": {
    "used": 4,
    "limit": 10
  }
}

Overage

On the Pro plan, if you exceed your monthly verification limit, additional verifications are billed at $0.50 per 10,000. You receive email alerts at 80% and 100% of your limit. On the Free plan, verifications are blocked once the limit is reached.

Helm chart

For Kubernetes deployments, KEPCA provides an official Helm chart.

Installation

bash
helm repo add kepca https://charts.kepca.com
helm repo update

helm install kepca kepca/kepca \
  --namespace kepca \
  --create-namespace \
  --set postgresql.enabled=true \
  --set valkey.enabled=true \
  --set ingress.enabled=true \
  --set ingress.hostname=captcha.example.com

Key values

ValueDefaultDescription
replicaCount2Pods per service
postgresql.enabledtrueDeploy PostgreSQL subchart
valkey.enabledtrueDeploy Valkey (Redis) subchart
ingress.enabledfalseCreate Ingress resource
ingress.hostname""Ingress hostname
ingress.tlstrueEnable TLS via cert-manager
metrics.enabledtrueExpose Prometheus metrics
autoscaling.enabledfalseEnable HPA
autoscaling.minReplicas2Minimum replicas
autoscaling.maxReplicas10Maximum replicas

See the full values.yaml reference in the infra/helm/kepca directory.

Next steps

  • Security -- rate limiting, key rotation, and token verification
  • Challenge Types -- all six challenge types with configuration
  • REST API -- full endpoint reference

KVKK/GDPR Uyumlu — Verileriniz yurt icinde kalir.