abusend: privacy and data handling

This page covers what abusend stores, how long it keeps it, how to erase it, and who else sees it. It is written for the teams integrating the service and for their privacy/DPO reviewers. It describes the software's behaviour, not a legal opinion: check your own privacy notice and legal basis (fraud prevention and security are commonly handled as a legitimate interest) with your counsel.

What abusend does with the data. It makes rule-based access decisions and orchestrates verifications: your rules, on facts you send (account age, amount, country, usage) and on client signals it measures (hints, not verdicts), decide whether a request is allowed, left to your app, blocked, or asked to pass a check (a captcha widget, or your own SMS, e-mail, KYC or custom flow). It does not build profiles for marketing and does not sell or share data.

For a hosted (SaaS) deployment the service operator processes this data on your behalf. A self-hosted deployment keeps everything in your own PostgreSQL, ClickHouse and Valkey services.

Türkiye / KVKK: see the KVKK annex (in Turkish, with an English summary) for roles, legal basis, cross-border transfer and a ready-to-paste privacy notice. Hosted service: where the data lives, sub-processors and a data processing agreement template.

What is stored

1. Per token request (POST /v1/assess, from the browser) — signals

data details
IP address Taken from the connection (or PROXY protocol / X-Forwarded-For from trusted proxies only).
TLS fingerprint JA4 string and JA4N (the same fingerprint computed without the session-resumption extensions), GREASE flag, protocol (h2/http/1.1). Describes the client software, not the person.
HTTP/2 fingerprint SETTINGS/WINDOW_UPDATE/PRIORITY/pseudo-header order.
Request headers (allowlist) Values of only: user-agent, accept, accept-language, accept-encoding, origin, referer, sec-ch-ua, sec-ch-ua-mobile, sec-ch-ua-platform, sec-fetch-site, sec-fetch-mode, sec-fetch-dest, dnt, x-requested-with, via, forwarded, content-type. Each value is truncated to 512 characters.
Header names The sorted list of header names of the request (no values).
Never stored Cookie values (other than abusend's own device id, below), Authorization values and any header outside the allowlist. The SDK sends requests with credentials: "include" so that the browser can return abusend's device cookie; the only cookie abusend reads is __Host-ab_did on its own host.
Page context Origin and the action name (e.g. login).
Probe outcome Whether the sealed browser probe opened (probe.status).
JavaScript signals See the table below.
Device id A random, signed, per-project identifier (d1.…), see device identity. Not stored when the project turns it off.
Fingerprint hash A 128-bit hash (SHA-256, truncated) of the TLS fingerprint, the browser family and the stable JS signals (screen size, time zone, number of languages, platform, CPU cores). The inputs are listed here; the hash cannot be reversed into them.
IP data Datacenter/VPN/Tor/proxy/relay flags, ASN, network owner, country, a reputation score when a remote provider is enabled, which sources answered.
Redemption state How often and when the token was redeemed by a verdict, the end user it bound to (an opaque derived id) and the client IP of that first redemption. Kept in Valkey with the hot record of the assessment, for the token's lifetime plus 10 s; not written to the assessment row.

No decision is made or stored at this step.

JavaScript signals (collected by abusend.js at the moment a token is requested):

key value notes
wd navigator.webdriver automation flag
ua navigator.userAgent (≤ 512 chars)
lang number of preferred languages a count, not the languages
tz IANA time zone, e.g. Europe/Istanbul
sw,sh,ow,oh,iw,ih screen, outer and inner window sizes
hc CPU core count
pl number of plugins
chr presence of window.chrome
tp max touch points
ev count of mouse/keyboard/touch/scroll/focus events, capped at 100 no keys, text, coordinates or targets are recorded
pq notification-permission quirk (boolean)
t ms since the SDK loaded
pf navigator.platform, e.g. MacIntel (optional)

Deep signals (the hardened probe). Additional client signals; each is bucketed or hashed where possible, and only signals relevant to spotting automation and tampering are collected (never clipboard, precise geolocation, or contacts). Like every client signal, they are hints that feed rules and a risk score, not decisions.

Rendering / device fingerprints — only collected when device identity is on (settings.privacy.device_id = on or recognition). When it is off, the SDK is told not to collect them (the handshake returns policy.fp = false) and the edge additionally discards them if a stale client sends them anyway, so no fingerprint is stored:

key value notes
canvas_hash,webgl_hash,audio_hash,fonts_hash,math_hash 8-byte non-cryptographic hashes of a canvas / WebGL / AudioContext render, the measured font set and float/Math quirks for grouping only; never an identity, cannot be reversed into the render
webgl_vendor,webgl_renderer WebGL UNMASKED_VENDOR/RENDERER_WEBGL strings (≤ 64 / ≤ 128 chars) names the GPU/driver (e.g. a software renderer)
fp_randomized boolean: the canvas or audio render changed between two identical draws, or a solid fill read back altered the browser randomises fingerprints (a privacy protection); such a probe is never used to recognise a device

Consistency cross-checks and tamper/hook detection — collected regardless of the device id setting; they are booleans about the browser environment, not personal data: ua_platform_mismatch, ua_ch_mismatch, tz_lang_mismatch, clean_dirty_mismatch, screen_anomaly, native_tostring_tampered, navigator_getter_overridden, timing_hooked, debugger_present, vm_selfcheck_fail, bytecode_integrity_fail, cdp_detected, webdriver_advanced.

Behavioural entropy — pointer_entropy, untrusted_events, interaction_timing: bucketed counts / coarse timings of pre-submit interaction. No keystrokes, text, pointer coordinates or event targets are recorded — only aggregate numbers. (The one exception is the task box of abusend's own visible checks, and only while the visitor does the task: see verifications.)

Unknown keys are dropped and all values are length-capped on the server.

Device identity

Unless the project turns it off (settings.privacy.device_id = "off", panel → Setup → Privacy), /v1/assess gives the browser a device id: 16 random bytes, the project id, the creation time and an HMAC signature (d1.…). It carries no information about the person or the device; it only lets abusend recognise the same browser again (e.g. "this browser was used by 12 accounts today", "this browser passed a check an hour ago").

Under the EU ePrivacy rules (and similar national laws) storing an identifier on the visitor's device needs consent unless it is strictly necessary for a service the user requested; abuse and fraud prevention on login, sign-up and checkout is commonly treated as strictly necessary security processing. Check this with your counsel and mention the cookie in your cookie notice; if in doubt, turn device ids off.

Device recognition (opt-in)

Off by default. With settings.privacy.device_id = "recognition" (panel → Setup → Privacy → Recognise devices in private windows; test and live projects alike) abusend also links a desktop browser that sends no device id — a private / incognito window, a browser whose storage was cleared — to a known device on the same network, from the fingerprint of the browser. It links, it never merges: the browser always gets its own new device id.

2. Per verdict (POST /v1/verdict, from your server) — decisions and their inputs

data details
Your user id user.id as you send it (1–256 chars; use an opaque HMAC, never an e-mail or phone number). Stored as an end user of your project.
User attributes user.attributes (≤ 32 keys, typed, merged into the stored user). You decide what goes here, see recommendations.
Context context (≤ 32 keys, ≤ 4 KB): facts about this request (amount, currency, plan). Stored only with the verdict, never on the user.
Client IP The client_ip your server passed, if any.
Verdict Decision, would-decision, what decided it (decided_by), the rules that matched, risk score and level, reasons, action, the flow it belongs to, the verifications it consumed and issued, the API key used, review_handling, timestamp. Unusable-token verdicts are recorded too.
Verdict inputs For replay and simulation: the user's attributes as used by the rules (a snapshot), the context, the verdict-time counters (e.g. verifications of this device in the last hour), the event counts, value totals and last times the rules read, and the flow's verification states.
Events (POST /v1/events) Facts your server reports after they happened (a completed top-up, payment, withdrawal): your user id, the event type, an optional number (value), up to 32 scalar properties (≤ 4 KB), when it happened, when it arrived and your optional idempotency id. You decide what goes here: types and amounts, never names, e-mails, phone numbers, card or account numbers — in the id and properties too. Per project, the catalogue of event types (type, optional label, first/last seen, count; no user link).
Device–user link When the token has a device id and you name a user: which device the user used, first/last seen, verdict count, last decision.
Feedback Label (fraud/legit) and an optional note (≤ 1000 chars) on a verdict's flow.
Attribute catalogue Per project, the attribute keys seen for users and contexts (sampled: at most one write per key per minute), their scope, guessed or configured type, counters (incl. values sent with the wrong type) and at most 3 example values per key, truncated to 64 characters. No examples are kept for keys that look like personal data (email, phone, name, address, ip, card, …) or for values that look like e-mail addresses or phone numbers. Examples are not linked to a user.

3. Per verification (checks and challenges)

A check is a verification tool your project connects; a challenge is one issued verification of it.

Enabling a widget check makes that provider a recipient of your visitors' data — list it in your privacy notice (KVKK art. 9 / GDPR chapter V, see the annex). abusend's own checks add no recipient; mention in your notice that the visible ones process pointer movement on the task box to score the attempt (and do not store it).

4. Panel

Retention

data kept for
Assessments (IP, headers, fingerprints, JS signals, device id, fingerprint hash, IP data) settings.privacy.retention_days: default 30 days, configurable 1–730 per project (panel → Data retention). They live in the analytics store (ClickHouse), which expires each row by itself (retain_until); a shortened retention deletes older rows at the next retention pass, which runs every 10 minutes.
Verdicts, including their inputs (attribute snapshot, context, counters) and feedback Same retention and store as assessments.
The verification history (ClickHouse; without the caller identity and the stored answer) Same retention and store as assessments. The traffic rollups (counts per action, country and ASN; rule hits; counter values) hold no user data and expire after 8 days, 35 days and 25 hours.
Challenges in the main database (PostgreSQL), including the consumed caller and the stored verdict answer Only as long as running flows, the one-hour counters and remembered passes need them: 8 days, or retention_days when that is shorter.
Events (POST /v1/events) settings.privacy.event_retention_days: default 90 days, configurable 1–1095 (rules never look further back than 30 days; a longer retention keeps the history for the panel), counted from when the event happened; stored in the analytics store (ClickHouse) and deleted when the user is erased (see Erasure API). Event types without a label are dropped from the catalogue after 90 days without events.
Devices and device–user links Deleted once not seen within retention_days; device–user links also on erasure of the user.
Device recognition prints (keyed hashes of desktop browsers; only with device_id = recognition) 30 days after last seen, or retention_days when shorter; also on erasure of a user linked to the device, and all at once when the project leaves recognition.
Shared-print marks (keyed hashes of prints seen on two devices at once; only with device_id = recognition) while the project stays in recognition; on erasure of a user whose device had the print; all at once when the project leaves recognition.
What rules read, in the fast store (Valkey): per user and event type the event log (an opaque hash id, the event's value and time; no properties) and the sums of its values per minute, hour and day, per user and action the flow ids of attempts, an index of those keys, the event idempotency keys (hashed) with a per-user list of their key names, and the shared counters' minute and hour buckets (a group is what group_by reads: personal data if it groups by one) events and their sums for the project's event retention (event_retention_days, at most 31 days), attempts for the project's traffic retention (retention_days, at most 30 days; a shorter setting takes effect on the next read and write, and rules never read what the analytics store has deleted), idempotency keys 31 days, counters 25 hours after their last write, all bounded by key expiry; the keys of an erased user (events, their sums, attempts and the idempotency keys of their events, found through the user's index and marker list) are deleted at once, before and again after the database erasure (the newest 50 000 idempotency keys per user are listed; an older one of a user with more is a hash that expires by itself); a deleted project's or counter's keys expire by themselves (31 days at most). Idempotency keys are stored as a hash.
Hot state in Valkey (short-lived, next to the database): the record of each assessment a verdict can still redeem (its signals, with the redemption state) and the velocity windows the rules read (sorted sets of opaque assessment, verdict and device ids by time, under keys naming the project and an IP address, a device id, a fingerprint hash or the derived end-user id) The record: the token's lifetime plus 10 seconds (default 10 minutes 10 s, at most 1 hour 10 s). The windows: an hour (verdicts of a user, assessments of an IP or a device, devices of a fingerprint) or a day (deny verdicts of a device) after the last write, each holding at most its newest 1000 (5000 for a fingerprint's devices) entries. Everything expires by itself; the user's own window and the records of the assessments its verdicts redeemed (they hold the derived user id and the client IP of the redemption) are also deleted on erasure. Valkey writes to disk (an append-only file synced every second): a restart keeps this state and loses at most the last second of writes; only losing the volume empties it.
Accepted provider-token hashes and own-check recording hashes 1 day.
Pointer recordings of abusend's own visible checks Not stored: scored in memory while the /verify request is handled.
Rule hit counts (no personal data) 35 days.
Check provider secrets Until an admin deletes the check (panel) or the project is deleted.
Everything of a deleted project The project, its keys and its configuration go at once; its traffic data (verdicts, verifications, assessments, events, end users, devices, device–user links, recognition prints, rule hits, traffic counters, in the main database and in the analytics store) is purged in the background in batches, normally within minutes and longer for a very large project. Audit log entries stay (365 days).
Attribute examples (≤ 3 per key) retention_days, like assessments; user attribute examples are removed at once when the user they belong to is erased. Attribute keys never declared or configured are deleted after 90 days without traffic.
End users (id + attributes) Until you erase them (DELETE /v1/users/{id}), or automatically once they have not been seen within settings.privacy.user_retention_days (default 365 days, 1–1095; 0 = until erased); their verdicts, assessments and events in the analytics store expire with their own retention above.
List entries Until removed, or 30 days after their expires_at.
Device id cookie / localStorage copy In the visitor's browser: cookie one year from the last token request; localStorage until the visitor clears it. Server-side it is only meaningful while the device row exists.
Panel sessions Until expiry (14 days sliding).
Personal access tokens Until revoked or expired (1–365 days, default 90); revoked and expired tokens are listed for 30 more days.
AI assistant conversations (messages, tool calls and results) Each message is deleted automatically once it is older than the project's retention_days or 30 days, whichever is shorter (tool results contain verdict data); a conversation goes 30 days after its last message, or once its messages are gone. The user can delete a conversation at any time, and erasing an end user deletes the conversations that mention the id.
AI assistant settings and encrypted provider key Until an admin removes the key or the organization is deleted.
Watch traffic buckets (counts per action, country and ASN in 5-minute buckets; no personal data) 8 days.
Watch runs (the findings' numbers, the model's summary, the ids of what Watch created; a note about a rule that applies to a counter's values keeps up to 50 of those values with their numbers, which can be IP addresses, user ids or device ids when the counter is grouped by them) and the scanner's state (which includes the open counter episodes and up to 200 values they have named) 90 days for runs (the conversation itself follows the assistant's 30 days); a summary that names an erased end user is cleared on erasure, and so are the findings and the open episodes that name it.
Notification outbox (e-mail address or destination id, subject / event, status, attempts, error) 30 days after the notification was queued, for sent and failed rows; the message body is dropped as soon as it is sent or given up (queued rows keep it until they are).
Audit log (panel changes: actor, time, IP, before/after) 365 days, then deleted automatically. End-user ids are scrubbed from it on erasure (see Erasure API).
IP reputation cache In memory only, per server instance, default 1 hour.

Erasure API

DELETE /v1/users/{id}          Authorization: Bearer sk_…   → {"ok": true, "erased": true}
                                                            → {"ok": true, "erased": false}   (nothing stored for this id)

The call is idempotent: erasing an id that is unknown or already erased succeeds with "erased": false (never 404), so retries and repeated data-subject requests are safe.

Admins can also erase a user from the panel. The part in the main database runs in one transaction; the parts in the analytics store and in Valkey follow in the same call (see What "erased" means below). Together the erasure:

  1. deletes the end user, all their attributes and every event your server reported for them (POST /v1/events, with its properties and id; events live in the analytics store),
  2. removes the user id from every user list of the project (e.g. allow/block users),
  3. anonymises the user's assessments (found through the verdicts that redeemed them): IP truncated to its /24 (IPv4) or /48 (IPv6) network; headers, header names, JS signals, user agent, origin, device id and fingerprint hash cleared; the link to the user removed,
  4. deletes the user's device–user links (the devices themselves stay until retention removes them; they no longer point to the user) and the recognition prints of those devices, the prints of the browsers linked to them and the shared marks of their prints; the user's assessments lose their recognition link, and every other assessment's link to those devices is cleared,
  5. anonymises the user's verdicts: client IP truncated the same way, the stored inputs (attribute snapshot, context, counters) and the feedback note cleared, device id and user link removed,
  6. unlinks the user's verifications (and those of the user's flows): user link, device id, fingerprint hash, the consumed caller identity and the stored verdict answer are cleared; the network prefix and the outcome stay until retention,
  7. removes the user's attribute values from the project's attribute examples,
  8. deletes the organization's AI assistant conversations that mention the user id (typed in a question, or in a tool call or result; Watch's investigations are such conversations), clears the summary of any Watch run that names it and the findings and open counter episodes of Watch that list it as a value,
  9. scrubs the user id from the audit log (e.g. entries recording that an analyst allow- or block-listed the user). The audit entry for the erasure itself stores only a hash reference of the id, never the id, so you can show that an erasure happened (by hashing the id from the request again) without keeping the identifier.
  10. deletes the user's window of verdict ids in Valkey and the hot records of the assessments its verdicts redeemed (a record holds the derived user id and the client IP of the redemption). The other short-lived state there (the windows of a device, an IP address or a fingerprint, which hold opaque ids and no user id, and the records of assessments no verdict has redeemed yet) expires on its own within the times in Retention (at most 24 hours; a record within its token's lifetime plus 10 seconds).

What "erased" means. The call answers 200 once the erasure is recorded and its part in the main database is done. abusend then also changes the analytics store and Valkey in the same call and waits up to 10 seconds for the analytics store's mutations. Whatever fails or is still running at that point stays as a pending erasure: a row in the main database that names the user only by its derived ids (and by the assessments, flows and devices its verdicts named), never by your id, which abusend retries with a growing delay until every step succeeded. It also runs once more about 30 seconds after the call, for rows another pod wrote in between. So the erasure is guaranteed to finish without another call, normally within a minute; an outage of the analytics store or of Valkey delays it until the service is back, and the operator is alerted (AbusendErasurePending) when one has been pending for 15 minutes. The answer does not say whether those parts are already done: if you must be certain of the state at a given moment, wait a minute before you tell the person that it is complete.

Verdicts written behind the answer. Verdict rows are written a few milliseconds after the answer (log.async; operator documentation: "Write-behind verdict log") and reach the analytics store about a second later. Erasure fences that queue and the analytics store's own: rows of the user still waiting on any of abusend's pods are anonymised (IP cut to its network, user, device and inputs dropped) before they are written, every pod is told, and the erasure is repeated about 30 seconds later to catch rows another pod wrote in between. What a queued verdict names, although the masked verdict no longer names the user (the assessment behind it with its IP, user agent, headers and JS signals, the verifications of its flow, the recognition prints of its device and the hot record in Valkey), is erased with the user: the pod that masked the row records it as a pending erasure of its own. A row is masked only if it is not newer than the erasure, so a user who returns afterwards starts a new record. A call for a user whose row was still queued can answer "erased": false although its queued rows were masked. Traffic of the same user sent while the erasure runs may leave a row that the repeat removes.

The analytics store. abusend keeps verdicts, assessments, events and the verification history in its ClickHouse service (same processor and location as the main database); these are the only copies of that data. Erasure changes them: events are deleted, the IP is cut to its network block, the user, device, fingerprint, inputs and feedback note are cleared; rows still waiting to be written are anonymised before they are. The mutations name the user only by its derived ids, never by your id (the server keeps the text of its mutations). If that service is unreachable at that moment the erasure of the main database still succeeds and the analytics rows are changed by the pending erasure as soon as it is back (see What "erased" means). The verdict rows are changed last, and only when every other step succeeded: they are what the other rows are found through, so a failed step is retried from the unchanged verdicts.

Backups. The nightly backups of the analytics store are kept for 7 days: an erased user's rows in a backup are not changed and leave with the backup when it ages out. The same holds for the dumps of the main database, for as long as the operator keeps them (data location). After a restore from a backup, repeat the erasures made since it was taken (each one leaves a hash reference in the audit log).

What stays until normal retention removes it is not linked to the user: TLS/HTTP-2 fingerprints, the truncated network, IP data (ASN/owner/country), decisions, reasons and verification outcomes. Erasure cannot be undone. Call it from your account-deletion flow. A later verdict that sends the same user id creates a new, empty user.

Only the user's own events are anonymised. An assessment is linked to a user through the verdicts that redeemed its token; assessments that were never redeemed with a user id carry no user link and expire through retention.

Third-party IP reputation

Where the data lives (data residency)

All stored data lives in services chosen by whoever runs the server: end users, devices, running challenges, lists, the audit log and panel accounts in one PostgreSQL database; the traffic data (assessments, verdicts, reported events, the verification history) in the operator's ClickHouse next to it; and the short-lived hot state (assessment records, velocity windows, what rules read of events and counters) in the operator's Valkey, see Retention. Nothing is copied to a service outside the operator's stack; the IP reputation cache is in memory only.

Data location (operator to fill in): servers and database: [country, city / data centre, provider or "own hardware"]. Backups: [country, location, encryption, retention]. Remote administrative access from: [countries]. Any change is announced [N] days in advance to [contact].

If any of these locations is outside Türkiye, that is a cross-border transfer under KVKK art. 9 (see the annex); outside the EEA, check GDPR chapter V.

Sub-processors

By default there are none. A default installation sends no personal data to any third party: IP data uses local datasets, no check is connected, and the hosting of the reference deployment is the operator's own infrastructure.

sub-processor when data
widget check providers: Cloudflare, Inc. (Turnstile), Google LLC (reCAPTCHA / reCAPTCHA Enterprise), Intuition Machines, Inc. (hCaptcha) — all US only when your project connects that widget check (your choice, your account with the provider) server-side verification: provider response token, end-user IP address (Turnstile: an idempotency key; hCaptcha: the site key; Enterprise: site key, action, User-Agent). The widget in the browser is loaded from the provider under its own terms.
Friendly Captcha GmbH (Friendly Captcha) — Germany, EU only when your project connects a Friendly Captcha check server-side verification: the widget's response and the site key (no IP address), to the global API or, with region: eu, the EU API. The widget in the browser is loaded from cdn.jsdelivr.net and talks to *.frcapi.com under Friendly Captcha's terms.
Wuhan Jiyi Network Technology Co., Ltd. (GeeTest v4) — China only when your project connects a GeeTest check server-side verification: the widget's result (lot_number, captcha_output, pass_token, gen_time), the captcha_id and an HMAC signature (no IP address). The widget in the browser sends GeeTest the visitor's IP address, network and device data, stored in China for one year per GeeTest's policy: a transfer to a third country (GDPR chapter V; KVKK art. 9).
third-party IP reputation provider (scamalytics, or the operator's httpjson provider) only when the operator enabled the driver and your project turned on third_party_iprep end-user IP address only
LLM provider chosen by your organization (for example OpenAI, Anthropic, or any OpenAI-compatible service) for the AI assistant only when an admin of your organization enables the assistant with your own API key (your account with the provider) what the assistant reads to answer a user's question: panel data including verdict and flow details (IP address, User-Agent, end-user id, device id, reasons, attributes, context), rules and settings, plus the user's messages; with Watch on, the same kinds of data during investigations abusend starts when traffic looks unusual
the SMTP provider (or relay) of the operator's mail server; the customers' own webhook and Slack endpoints e-mail: only when the operator sets up e-mail (System → E-mail), with a server the operator chooses and contracts (not abusend). Webhooks: only when a project admin adds a destination (the customer's endpoint). e-mail: the addresses, names and message texts of invitations, reports and alerts. Webhooks: the event data (project name and id, report and alert summaries).
hosting / backup provider only if the operator does not run its own infrastructure; must be listed in the operator's data location statement all stored data

App checks are not sub-processors of abusend. The SMS gateway, e-mail service or KYC vendor behind an app check is chosen, contracted and called by you; abusend only records the outcome your server reports.

abusend's own checks (abusend_pow, abusend_hold, abusend_trace) have no sub-processor: the abusend edge verifies them itself and sends nothing anywhere.

Operators keep this list current and notify customers before adding a sub-processor.

AI assistant and MCP

Data processing agreement (DPA) template

Not legal advice. A starting point for the agreement between you (controller) and the operator of a hosted deployment (processor) under GDPR art. 28 / KVKK art. 12(2). Have it reviewed by counsel; fill in the […] fields. A Turkish version is in the annex. Self-hosted installations need no DPA with an abusend operator.

DATA PROCESSING AGREEMENT

Parties: [Customer legal name, address] ("Controller") and [Operator legal name, address]
("Processor"), under the service agreement dated [date] ("Agreement").

1. Subject and duration. The Processor processes personal data only to provide the
   abusend rule-based access decision and verification orchestration service for the
   term of the Agreement.
2. Nature and purpose. Evaluating login, sign-up, payment and similar requests against
   the Controller's rules to decide whether to allow them, leave them to the Controller's
   application, block them or ask for an additional verification, in order to prevent
   fraud, abuse and account takeover; recording the outcome of such verifications. No
   profiling for marketing, no sale or other use of the data.
3. Data subjects. Visitors and users of the Controller's websites and apps; the
   Controller's panel users.
4. Data categories. IP address; User-Agent and an allowlist of HTTP headers; TLS/HTTP-2
   fingerprints; browser signals listed in the privacy documentation; a per-project device
   identifier (cookie / local storage) and a fingerprint hash, unless disabled; the opaque
   user id, attributes and request context the Controller sends; decisions with their
   inputs; verification records (outcome, network prefix, device binding); panel account
   data and audit log. The Controller will not send special categories of data, e-mail
   addresses, phone numbers or national ids.
5. Instructions. The Processor acts only on the Controller's documented instructions
   (this Agreement, the project configuration chosen in the panel, API calls) and informs
   the Controller if an instruction appears unlawful.
6. Confidentiality. Persons authorised to process the data are bound by confidentiality.
7. Security. The Processor implements the measures in the privacy documentation (TLS,
   role-based access with 2FA, hashed credentials and keys, encrypted provider secrets,
   audit log, retention) and keeps them at least at that level.
8. Sub-processors. None at signature, except: [none / list]. The Processor gives [30]
   days' notice of a new sub-processor; the Controller may object on reasonable grounds.
   Widget check providers (Cloudflare Turnstile, Google reCAPTCHA, hCaptcha, Friendly
   Captcha, GeeTest) and a third-party IP reputation provider are used only if the
   Controller enables them in its project; abusend's own checks involve none. Providers behind the Controller's own app checks (SMS, e-mail, KYC) are the
   Controller's processors, not the Processor's.
9. Location. Data is processed and stored in [country / data centre]; see the operator's
   data location statement. No transfer outside [country] without the Controller's prior
   written consent and a lawful transfer mechanism.
10. Data subject requests. The Processor enables the Controller to answer requests
    (access: GET /v1/users/{id}; erasure: DELETE /v1/users/{id}) and assists with others.
11. Personal data breaches. The Processor notifies the Controller without undue delay and
    within [24/48] hours of becoming aware, with the information the Controller needs for
    its own notifications (KVKK: to the Board within 72 hours).
12. Retention and deletion. Data is deleted per the retention settings ([30] days by
    default for assessments, verdicts and verifications, 365 days for the audit log). On
    termination the Processor deletes all Controller data within [30] days, including
    backups within [N] days, and confirms in writing.
13. Audits. The Processor provides the information needed to demonstrate compliance and
    allows audits by the Controller or its auditor on [30] days' notice, [once a year].
14. Liability and governing law. [As in the Agreement.] Governing law: [ ]. Courts: [ ].

Signatures: [Controller]  [Processor]  Date: [ ]

Recommendations

Access control

Annex: KVKK (Law No. 6698) / Ek: KVKK (6698 sayılı Kanun)

Not legal advice / Hukuki tavsiye değildir. This annex describes how the software processes data so that you and your counsel can map it to KVKK. It does not replace your own assessment, your VERBİS registration or your privacy notice. Bu ek, yazılımın veriyi nasıl işlediğini KVKK açısından değerlendirmenize yardımcı olmak için hazırlanmıştır; kendi hukuki değerlendirmenizin, VERBİS kaydınızın ve aydınlatma metninizin yerine geçmez.

English summary. You (the customer running abusend on your site) are the data controller (veri sorumlusu); the service operator of a hosted deployment is your data processor (veri işleyen). Purpose: rule-based access decisions and verification orchestration to prevent fraud and abuse; legal basis: legitimate interest (KVKK art. 5(2)(f)). Data processed: IP address, User-Agent and an allowlist of headers, TLS/HTTP-2 fingerprints (JA4/JA4N), the JavaScript signals listed above, the user id you send (use an opaque HMAC), the attributes and request context you choose, decisions with their inputs, verification records (outcome, network prefix, device binding), and — unless turned off — a per-project device id kept in a partitioned cookie and the site's localStorage, with device–user links. Only when you opt in (privacy.device_id = recognition), device recognition across private windows: per desktop device (never phones or tablets), keyed hashes (no raw values) of stable browser fingerprint components and of the last network block, used to link a desktop browser that sends no id to a known device on the same network (it keeps its own new id; busy networks and prints shared by identical machines are skipped) — device fingerprinting for fraud prevention under legitimate interest, a hint for the controller's rules and never a decision on its own (no automatic block, no carried trust), not effective against browsers that randomise fingerprints, kept 30 days after last seen and erased with a linked user. Retention: traffic 30 days by default (1–730), events 90 days (1–1095), inactive users 365 days (or until erased), per project, purged automatically every 10 minutes; audit log 365 days, with erased user ids scrubbed. Third-party IP reputation is off by default; switching it on sends end-user IP addresses to the provider. Widget checks (Cloudflare Turnstile, Google reCAPTCHA, hCaptcha, Friendly Captcha, GeeTest) are also off until you connect one; connecting a US one sends the end-user IP address (and, for reCAPTCHA Enterprise, the User-Agent) to that US provider, and every widget loads in the visitor's browser from its provider (Friendly Captcha: Germany; GeeTest: China) — cross-border transfers under art. 9. abusend's own checks (abusend_pow, abusend_hold, abusend_trace) involve no third party: the visible ones send the pointer movements on their task box to the abusend edge, which scores them and does not store them (only the score, the outcome and a one-day replay hash remain). App checks (SMS, e-mail, KYC) are run by you with your own processors; abusend records only the outcome. Erasure: DELETE /v1/users/{id} (idempotent) or the panel. Panel access is role-based with optional or organisation-enforced 2FA. Data location: operator-configured (see data residency); sub-processors: none by default. A Turkish data processing agreement template and a ready-to-paste Turkish privacy notice paragraph are at the end.

1. Roller

taraf KVKK'daki rolü
abusend'i kendi web sitesinde / uygulamasında kullanan şirket (müşteri) veri sorumlusu (m. 3/1-ı): amaçları (kurallara dayalı erişim kararları ve ek doğrulama ile dolandırıcılık ve kötüye kullanımın önlenmesi), kuralları ve hangi verilerin gönderileceğini (ör. user.id, öznitelikler, bağlam) belirler
barındırılan (SaaS) kurulumda hizmet operatörü veri işleyen (m. 3/1-ğ): veriyi yalnızca müşterinin talimatıyla ve onun adına işler. Aradaki ilişkiyi bir veri işleme sözleşmesiyle düzenleyin (m. 12/2: veri sorumlusu, veri işleyenle birlikte müştereken sorumludur).
kendi sunucunuzda (self-host) kurulum operatör de sizsiniz; tüm veriler kendi PostgreSQL veritabanınızda kalır
widget doğrulama sağlayıcısı (Cloudflare, Google, hCaptcha/Intuition Machines, Friendly Captcha GmbH, GeeTest/Wuhan Jiyi Network Technology Co., Ltd.; yalnızca bağlanırsa) operatörün alt işleyeni; sunucu tarafı doğrulama için yanıt jetonunu ve (Cloudflare, Google, hCaptcha) IP adresini alır
uzak IP itibar sağlayıcısı (yalnızca açılırsa) operatörün alt işleyeni; yalnızca IP adresini alır
uygulama doğrulamalarınızın sağlayıcıları (SMS, e-posta, KYC) sizin veri işleyenleriniz; abusend'in değil. abusend yalnızca sonucu kaydeder.

2. İşlenen kişisel veri kategorileri

kategori veri kaynak
İşlem güvenliği / ağ IP adresi (tarayıcının ve sunucunuzun gördüğü client_ip) tarayıcı bağlantısı, sizin sunucunuz
Cihaz / tarayıcı User-Agent, izin listesindeki HTTP başlıkları (ör. accept-language, sec-ch-ua, referer, origin), başlık adları tarayıcı isteği
Teknik parmak izleri TLS parmak izi (JA4 ve oturum devam ettirme uzantıları hariç hesaplanan JA4N), HTTP/2 parmak izi. Kişiyi değil istemci yazılımını tanımlar; IP ve diğer verilerle birlikte kişisel veri sayılabilir. TLS / HTTP/2 el sıkışması
JavaScript sinyalleri navigator.webdriver, User-Agent, dil sayısı, saat dilimi, ekran/pencere boyutları, çekirdek sayısı, eklenti sayısı, dokunma noktası sayısı, etkileşim olaylarının sayısı (tuş, metin, koordinat kaydedilmez), SDK yüklenme süresi. Ayrıca derin sinyaller: yalnızca cihaz kimliği açıkken toplanan render parmak izi özetleri (canvas/WebGL/ses/yazı tipi/Math — geri döndürülemez) ve WebGL üretici/işleyici dizeleri; tutarlılık çapraz denetimleri ile kurcalama/otomasyon bayrakları (boolean, kişisel veri değil); ve gönderim öncesi etkileşimin gruplanmış entropi/zamanlama sayıları (tuş/metin/koordinat kaydedilmez). Hepsi karar değil, ipucudur. abusend.js
Cihaz tanıma (yalnızca açılırsa: privacy.device_id = recognition) Cihaz kimliği göndermeyen (gizli pencere, temizlenmiş depolama) bir masaüstü tarayıcıyı aynı ağdaki bilinen bir cihaza bağlamak için (tarayıcı her zaman kendi yeni kimliğini alır; birleştirme yapılmaz), yalnızca masaüstü cihazlarda (telefon ve tabletlerde asla) cihaz başına gizli pencerede değişmeyen parmak izi bileşenlerinin (canvas, WebGL, ses, yazı tipi ve Math özetleri, WebGL üretici/işleyici, ekran, saat dilimi, dil sayısı ve ilk dil, işletim sistemi, çekirdek ve dokunma noktası sayısı, TLS parmak izi, tarayıcı ailesi ve ana sürümü) ve son ağ bloğunun anahtarlı özetleri (HMAC-SHA256, projeye bağlı; ham değer saklanmaz, anahtarsız geri döndürülemez); aynı anda iki cihazda görülen parmak izlerinin paylaşılan işaretleri; assessment kaydında bağlanan cihaz kimliği ve güven (high · medium). Yoğun ağlar (7 günde 20'den fazla cihaz) ve paylaşılan parmak izleri kullanılmaz; parmak izini rastgeleleştiren tarayıcılar (Safari gizli modu, Firefox, Brave) tanınmaz. Bir ipucudur, tek başına karar değildir: kendiliğinden engellemez, güven taşımaz. abusend, abusend.js
Cihaz kimliği Proje başına, rastgele ve imzalı bir kimlik (d1.…): abusend alan adında bölümlenmiş (partitioned) __Host-ab_did çerezinde ve sitenizin localStorage alanında (abusend.did) tutulur; cihaz kaydı (ilk/son görülme), cihaz–kullanıcı bağlantıları (ilk/son görülme, karar sayısı, son karar) ve parmak izi özeti (TLS parmak izi, tarayıcı ailesi, ekran, saat dilimi, dil sayısı, platform ve çekirdek sayısının SHA-256 özeti). Proje ayarından (privacy.device_id = off) kapatılabilir; kapalıyken hiçbiri oluşturulmaz ve saklanmaz. abusend, abusend.js
Müşteri kullanıcı kimliği user.id, sizin gönderdiğiniz haliyle. Yalnızca sizin bildiğiniz bir anahtarla HMAC kullanın; e-posta adresi, telefon numarası veya T.C. kimlik numarası göndermeyin. sizin sunucunuz
Öznitelikler ve bağlam user.attributes (hesaba ait, türetilmiş bilgiler, ör. registered_at, payment_count) ve context (bu isteğe ait bilgiler, ör. tutar, para birimi). Özel nitelikli kişisel veri (m. 6), kimlik, iletişim veya ödeme kartı verisi göndermeyin. sizin sunucunuz
Olaylar Sunucunuzun gerçekleştikten sonra bildirdiği bilgiler (POST /v1/events; ör. tamamlanan yükleme, ödeme, para çekme): kullanıcı kimliği, olay tipi, isteğe bağlı sayı (value), en fazla 32 skaler özellik (≤ 4 KB), olayın zamanı, alınma zamanı ve isteğe bağlı idempotency kimliği. Ad, e-posta, telefon, kart veya hesap numarası göndermeyin (kimlikte ve özelliklerde de). sizin sunucunuz
Kararlar ve girdileri karar, kararı veren (decided_by), eşleşen kurallar, risk skoru (ipucu), nedenler, işlem, akış, zaman damgası; yeniden oynatma için kullanılan girdiler (kullanıcı özniteliklerinin o anki kopyası, bağlam, sayaçlar, kuralların okuduğu olay sayıları ve toplamları), IP verisi (ASN, ağ sahibi, ülke, veri merkezi/VPN/Tor bayrakları) abusend
abusend'in kendi doğrulamaları (abusend_hold, abusend_trace) Yalnızca görev kutusunda ve görev sürerken işaretçi olayları: zaman, kutu içindeki konum, basma / bırakma, işaretçi türü (fare, dokunma, kalem), kutunun boyutu ve piksel oranı, sayfanın kendisinin gönderdiği olayların sayısı. Tuş vuruşu ve kutu dışındaki hiçbir şey kaydedilmez. Edge'de bellekte puanlanır (sezgisel kurallar, bir ipucu), saklanmaz ve günlüğe yazılmaz; yalnızca puan, sonuç ve tekrar gönderimi reddetmek için bir günlük özet kalır. abusend_pow yalnızca tarayıcının işlemci süresini kullanır. abusend.js
Doğrulama adımları doğrulama türü ve sağlayıcısı, işlem, akış, durum ve kısa ayrıntı kodu, sağlayıcı skoru (abusend'in kendi doğrulamalarında hareket puanı), deneme sayısı ve zamanlar; kullanıcı bağlantısı, cihaz kimliği, parmak izi özeti ve ağ öneki (IPv4 /24 · IPv6 /48, tam IP değil); tüketildiğinde çağıranın kimliği (kullanıcı kimliği, istemci IP'si, cihaz, işlem) ve 5 saniyelik aynı tekrar için verdict yanıtının kopyası; kabul edilen sağlayıcı jetonlarının ve abusend'in kendi doğrulamalarındaki hareket kayıtlarının SHA-256 özeti (1 gün) abusend, doğrulama sağlayıcısı, sizin sunucunuz (uygulama doğrulamalarının sonucu)
Geri bildirim fraud/legit etiketi ve isteğe bağlı not (kişisel veri yazmayın) sizin ekibiniz
Panel kullanıcıları (çalışanlarınız) e-posta, ad, parola özeti (argon2id), oturum bilgileri, 2FA verileri, denetim kaydı (işlem, zaman, IP) panel

SDK, cihaz kimliği açıkken yalnızca abusend'in kendi __Host-ab_did çerezini ve sitenizde abusend.did localStorage anahtarını kullanır; başka çerez okumaz ve saklamaz. Çerezin bölümlenmiş (CHIPS) olması, aynı tarayıcının farklı sitelerde farklı kimlik alması demektir: kimlik siteler ve projeler arasında paylaşılmaz. Cihaz kimliğini çerez politikanızda belirtin; güvenlik amaçlı "zorunlu" çerez sayılıp sayılmayacağını hukuk danışmanınızla değerlendirin.

Uygulama doğrulamalarında (SMS, e-posta, KYC) telefon numarası, kod, belge veya sonuç ayrıntısı abusend'e hiç gelmez: bunları siz kendi sağlayıcılarınızla işlersiniz; abusend yalnızca bir doğrulama adımı verildiğini ve sunucunuzun bildirdiği sonucu (passed, failed, abandoned) kaydeder.

3. Amaç ve hukuki sebep

4. Saklama ve imha

veri süre
assessment, verdict (girdileri dahil) ve doğrulama adımı geçmişi (IP, başlıklar, parmak izleri, JS sinyalleri, kararlar, bağlam, geri bildirim) proje ayarı retention_days: varsayılan 30 gün, 1–730 gün arası ayarlanabilir (panel → Veri saklama). Bu kayıtlar analitik depoda (ClickHouse) tutulur ve süresi dolunca depo kendisi siler; kısaltılan süre 10 dakikada bir çalışan işle hemen uygulanır. Ana veritabanındaki doğrulama adımı kayıtları yalnızca akışların ihtiyacı kadar (8 gün, ya da daha kısaysa retention_days) tutulur.
olaylar (POST /v1/events) proje ayarı event_retention_days: varsayılan 90 gün, 1–1095 gün (olayın gerçekleştiği andan itibaren; kurallar 30 günden geriye bakmaz, daha uzun saklama geçmişi panel için tutar); kullanıcı silindiğinde hemen silinir
son kullanıcı kaydı (user.id + öznitelikler) silme API'si ile silinene kadar veya user_retention_days (varsayılan 365 gün, 1–1095; 0 = silinene kadar) içinde görülmemişse otomatik olarak (assessment, verdict ve olay kayıtları kendi saklama süreleriyle silinir)
cihaz kayıtları ve cihaz–kullanıcı bağlantıları retention_days süresince görülmeyince otomatik silinir; kullanıcı silindiğinde onun cihaz bağlantıları hemen silinir
cihaz tanıma özetleri (yalnızca device_id = recognition) cihaz son görüldükten 30 gün sonra (veya daha kısaysa retention_days); cihaza bağlı bir kullanıcı silindiğinde hemen (ona bağlanan tarayıcıların özetleri ve bağlantılarla birlikte); proje tanımayı kapattığında projenin tüm özetleri hemen silinir
paylaşılan parmak izi işaretleri (yalnızca device_id = recognition) proje tanımada kaldıkça saklanır; parmak izi silinen bir kullanıcının cihazına aitse hemen; proje tanımayı kapattığında hemen silinir
öznitelik örnekleri (panelin öznitelik listesi; anahtar başına en fazla 3 değer, 64 karaktere kısaltılmış, kişisel veriye benzeyen anahtarlar ve e-posta/telefona benzeyen değerler için hiç saklanmaz) retention_days süresince; silinen kullanıcıya ait örnekler silme anında kaldırılır
kuralların okuduğu hızlı depo (Valkey): kullanıcı ve olay tipi başına olay kaydı (anlamsız özet kimlik, olayın değeri ve zamanı; özellikler yok) ve değerlerinin dakika, saat ve gün toplamları, kullanıcı ve işlem başına deneme akışlarının kimlikleri, bu anahtarların dizini, olay idempotency anahtarları (özet olarak) ve kullanıcı başına anahtar adları listesi, paylaşılan sayaçların dakika ve saat kovaları (grup, group_by'ın okuduğu değerdir: onunla gruplanıyorsa kişisel veri olabilir) olaylar ve toplamları projenin olay saklama süresi kadar (event_retention_days, en çok 31 gün), denemeler projenin trafik saklama süresi kadar (retention_days, en çok 30 gün; daha kısa bir ayar bir sonraki okuma ve yazmada geçerli olur, kurallar analitik depodan silinmiş olanı okumaz), idempotency anahtarları 31 gün, sayaçlar son yazımdan 25 saat sonra; silinen kullanıcının anahtarları (olaylar, toplamları, denemeler, olaylarının idempotency anahtarları; kullanıcının dizini ve anahtar listesi üzerinden) veritabanı silmesinden önce ve sonra hemen silinir (kullanıcı başına en yeni 50 000 idempotency anahtarı listelenir; daha fazlasını bildirmiş bir kullanıcının daha eskisi, özet olarak, kendiliğinden düşer); silinen bir projenin veya sayacın anahtarları kendiliğinden düşer (en çok 31 gün)
sıcak durum (Valkey; veritabanının yanında, kısa ömürlü): bir doğrulamanın hâlâ kullanabileceği her assessment'ın kaydı (sinyalleri, kullanım durumu, ilk kullanımı yapan opak türetilmiş kullanıcı kimliği ve o kullanımın istemci IP'si) ve kuralların okuduğu hız pencereleri (projeyi ve bir IP adresini, cihaz kimliğini, parmak izi özetini ya da türetilmiş son kullanıcı kimliğini adlandıran anahtarlar altında, zamana göre sıralı, anlamsız assessment, verdict ve cihaz kimlikleri) kayıt: jetonun ömrü + 10 sn (varsayılan 10 dk 10 sn, en çok 1 sa 10 sn); pencereler: son yazımdan 1 saat (bir kullanıcının verdict'leri, bir IP'nin veya cihazın assessment'ları, bir parmak izinin cihazları) veya 1 gün (bir cihazın engel verdict'leri), her biri en yeni 1000 (parmak izinin cihazları için 5000) girdiyle sınırlı; hepsi kendiliğinden düşer; silinen kullanıcının penceresi ve verdict'lerinin kullandığı assessment kayıtları silmeyle birlikte silinir. Valkey diske yazar (her saniye eşitlenen append-only dosya): yeniden başlatma bu durumu korur ve en çok son saniyenin yazımlarını kaybeder; yalnızca diskin kaybı onu boşaltır
kabul edilen doğrulama sağlayıcısı jetonlarının ve abusend'in kendi doğrulamalarındaki hareket kayıtlarının özetleri 1 gün
abusend'in kendi görünür doğrulamalarındaki işaretçi kayıtları saklanmaz: /verify isteği işlenirken bellekte puanlanır
kural eşleşme sayıları (kişisel veri değil) 35 gün
widget doğrulama sağlayıcısı gizli anahtarı yönetici doğrulamayı silene veya proje silinene kadar (şifreli)
liste girdileri (izin/engel listeleri) kaldırılana kadar veya expires_at tarihinden 30 gün sonra
panel denetim kaydı (işlem yapan, zaman, IP, önce/sonra) 365 gün, sonra otomatik silinir. Bir son kullanıcı silindiğinde kimliği denetim kaydından da temizlenir; silme işleminin kendi kaydı kimliği değil yalnızca bir hash referansını tutar.
IP itibar önbelleği yalnızca bellekte, varsayılan 1 saat
yapay zekâ asistanı konuşmaları (mesajlar, araç çağrıları ve sonuçları) her mesaj, projenin retention_days süresinden veya 30 günden (hangisi kısaysa) eski olunca otomatik silinir (araç sonuçları verdict verisi içerir); konuşma son mesajdan 30 gün sonra veya mesajları bitince silinir; kullanıcı konuşmayı istediği zaman silebilir; bir son kullanıcıyı silmek, kimliğini içeren konuşmaları da siler
Nöbet trafik kovaları (işlem, ülke ve ASN başına 5 dakikalık sayılar; kişisel veri yok) 8 gün
Nöbet çalışmaları (bulguların sayıları, modelin özeti, Nöbet'in oluşturduklarının kimlikleri; bir sayacın değerleri için devrede olan bir kuralla ilgili not, o değerlerden en fazla 50 tanesini sayılarıyla saklar: sayaç IP adresi, kullanıcı ya da cihaz kimliğine göre gruplanmışsa bunlar IP adresi ya da kimlik olabilir) ve tarayıcının durumu (açık sayaç dönemleri ve anmış oldukları en fazla 200 değer dahil) 90 gün; konuşmanın kendisi asistanın 30 gününü izler; bir son kullanıcıyı silmek, onu anan özeti, bulguları ve açık dönemleri temizler
kişisel erişim anahtarları (yalnızca özet) iptal edilene veya süresi dolana kadar (1–365 gün, varsayılan 90)
bildirim kuyruğu (e-posta adresi veya hedef kimliği, konu / olay, durum, deneme sayısı, hata metni) kuyruğa alındıktan 30 gün sonra (gönderilmiş ve başarısız kayıtlar); ileti gövdesi gönderildiği veya vazgeçildiği anda silinir

Bu süreleri kişisel veri saklama ve imha politikanıza yansıtın.

5. Yurt dışına aktarım (m. 9) ve üçüncü taraflar

Yapay zekâ asistanı (BYOK) ve MCP. Kuruluşunuzun bir yöneticisi panel içi asistanı kendi API anahtarınızla açarsa, kullanıcıların soruları ve asistanın yanıt için okuduğu panel verileri (IP adresi, User-Agent, son kullanıcı kimliği, cihaz kimliği, öznitelikler ve bağlam dahil verdict ve akış ayrıntıları, kurallar, ayarlar) sizin seçtiğiniz LLM sağlayıcısına, sizin o sağlayıcıyla olan sözleşmeniz kapsamında gönderilir. Bu aktarımı siz kontrol edersiniz. Sağlayıcı yurt dışındaysa bu aktarım m. 9 kapsamındadır ve aydınlatma metninize eklenmelidir. Asistanı kapatmak veya anahtarı silmek aktarımı durdurur. Bir kullanıcı kişisel erişim anahtarıyla bir MCP istemcisi (Claude, Cursor, VS Code…) bağlarsa, araç sonuçları o istemciye ve onun model sağlayıcısına gider.

Nöbet (Watch). Bir yönetici bir proje için Nöbet'i açarsa (varsayılan kapalı) ve asistan etkinse, trafik alışılmadık göründüğünde abusend incelemeleri kendiliğinden başlatır: aynı asistan, aynı anahtar ve sağlayıcı, aynı türden panel verilerini (IP adresi, son kullanıcı kimliği, cihaz kimliği, öznitelikler, akış ayrıntıları) okur — ama o sırada kimse izlemiyordur; projenin çalışma sınırlarına kadar (aksi ayarlanmadıkça saatte 4, günde 24). Bu yüzden Nöbet açık olduğu sürece aktarım süreklidir: durdurmak için Nöbet'i (ya da asistanı, ya da anahtarı) kapatın. Trafikten gelen her şey modele güvenilmez veri olarak sunulur, talimat olarak değil; kendi başına yalnızca İzleniyor durumunda kural ve yeni sayaç ekleyebilir, diğer her değişiklik bir yöneticinin onayını bekler. Nöbet'in kendi sakladığı toplamlardır: proje, işlem, ülke ve ASN başına 5 dakikalık sayılar (8 gün, kişisel veri yok) ve çalışmaları (bulguların sayıları, modelin özeti; 90 gün). Uyarıları ve raporları sayı, işlem adı, ülke kodu veya ASN ve o özeti taşır; tasarım gereği e-posta adresi yok. Bir sayacın değerleri için devreye giren, Uygulanıyor durumundaki bir kuralla ilgili not (değer başına değil, kural başına tek not) ayrıca bu değerlerden en fazla beşini örnek olarak anar, çalışma kaydı ise 50 tanesini saklar: sayaç IP adresi, son kullanıcı kimliği ya da cihaz kimliğine göre gruplanmışsa bunlar IP adresi ya da kimliktir; alıcıları ve webhook hedeflerini buna göre seçin. Model tarafından yazılan bir özet de okuduğundan alıntı yapabilir.

6. İlgili kişi hakları (m. 11) ve silme

7. Veri güvenliği (m. 12)

8. Aydınlatma metni için örnek paragraf (m. 10)

Aşağıdaki paragrafı kendi aydınlatma metninize uyarlayarak ekleyebilirsiniz. Köşeli parantez içindeki alanları doldurun ve kullanmadığınız seçenekleri çıkarın.

Güvenlik, dolandırıcılığın ve kötüye kullanımın önlenmesi

[Şirket unvanı] olarak, internet sitemizde ve uygulamamızda giriş, üyelik ve ödeme gibi
işlemlerde, belirlediğimiz kurallara göre işleminize izin verilmesine, ek doğrulama
istenmesine veya işlemin engellenmesine karar veren bir hizmet kullanıyoruz. Bu kapsamda
IP adresiniz, tarayıcınızın gönderdiği teknik bilgiler (User-Agent ve bazı HTTP başlıkları,
TLS/HTTP-2 bağlantı parmak izleri), tarayıcınıza ilişkin teknik sinyaller (ör. ekran boyutu,
saat dilimi, etkileşim olaylarının sayısı; yazdıklarınız ve tıklama konumlarınız
kaydedilmez), hesabınıza ve işleminize ilişkin bilgiler (ör. hesap oluşturma tarihi, işlem
tutarı) ile tarafımızca atanan ve sizi doğrudan tanımlamayan bir kullanıcı kimliği
işlenmektedir. [Cihaz kimliği açıksa: Tarayıcınızı tekrar tanıyabilmek için tarayıcınızda
rastgele bir cihaz kimliği (çerez ve yerel depolama) saklanır.] [Cihaz tanıma açıksa:
Cihaz kimliği gönderilmediğinde (ör. gizli pencerede) tarayıcınızı tanıyabilmek için,
tarayıcınızın teknik özelliklerinden (ekran, saat dilimi, grafik ve ses işleme özellikleri
gibi) türetilen ve geri döndürülemeyen özetler en fazla 30 gün saklanır.] [Widget doğrulaması
bağlıysa: Gerekli durumlarda [Cloudflare Turnstile / Google reCAPTCHA / hCaptcha /
Friendly Captcha / GeeTest] ile bir insan doğrulaması yapılır; bu sırada IP adresiniz ve
tarayıcı bilgileriniz, KVKK'nın 9. maddesine uygun olarak [ABD'deki Cloudflare, Inc. /
Google LLC / Intuition Machines, Inc. / Almanya'daki Friendly Captcha GmbH / Çin'deki Wuhan
Jiyi Network Technology Co., Ltd. (GeeTest)] ile paylaşılır.] [abusend'in kendi
görünür doğrulaması kullanılıyorsa: Gerekli durumlarda ekranda gösterilen küçük bir görevi
(noktalara basılı tutma veya bir alanda imleç gezdirme) yapmanız istenir; bu sırada yalnızca
o alandaki imleç veya dokunma hareketleriniz, işlemin bir kişi tarafından yapılıp
yapılmadığını değerlendirmek için işlenir ve saklanmaz; üçüncü bir tarafla paylaşılmaz.] [SMS / e-posta doğrulaması kullanılıyorsa: Gerekli durumlarda
[telefonunuza / e-posta adresinize] bir doğrulama kodu gönderilir; bu gönderim
[sağlayıcı adı] aracılığıyla tarafımızca yapılır.] Bu veriler, 6698 sayılı Kişisel
Verilerin Korunması Kanunu'nun 5/2-f maddesi uyarınca, temel hak ve özgürlüklerinize
zarar vermemek kaydıyla meşru menfaatimiz için zorunlu olması hukuki sebebine
dayanılarak, otomatik yollarla işlenir. Veriler, hizmet sağlayıcımız [hizmet sağlayıcı /
operatör unvanı] tarafından veri işleyen sıfatıyla adımıza işlenir ve [30] gün sonra
otomatik olarak silinir. [Üçüncü taraf IP itibar hizmeti kullanılıyorsa: IP adresiniz,
risk skoru alınması amacıyla [sağlayıcı adı, ülke] ile KVKK'nın 9. maddesine uygun olarak
paylaşılır.] KVKK'nın 11. maddesindeki haklarınızı, otomatik sistemlerle yapılan analiz
sonucunda aleyhinize bir sonucun ortaya çıkmasına itiraz hakkınız dahil, [başvuru adresi /
e-posta] üzerinden kullanabilirsiniz.

9. Veri işleme sözleşmesi şablonu (m. 12/2)

Hukuki tavsiye değildir. Barındırılan kurulumda sizinle (veri sorumlusu) operatör (veri işleyen) arasındaki sözleşme için bir başlangıç metnidir. Hukuk danışmanınıza inceletin ve […] alanlarını doldurun. Kendi sunucunuzda çalıştırdığınız kurulumda bir abusend operatörüyle sözleşme gerekmez. İngilizce sürüm: DPA template.

VERİ İŞLEME SÖZLEŞMESİ

Taraflar: [Müşteri unvanı, adresi] ("Veri Sorumlusu") ve [Operatör unvanı, adresi]
("Veri İşleyen"); [tarih] tarihli hizmet sözleşmesi ("Ana Sözleşme") kapsamında.

1. Konu ve süre. Veri İşleyen kişisel verileri yalnızca abusend kurallara dayalı erişim
   kararı ve doğrulama orkestrasyonu hizmetini sunmak için, Ana Sözleşme süresince işler.
2. Niteliği ve amacı. Giriş, üyelik, ödeme ve benzeri isteklerin Veri Sorumlusunun
   kurallarına göre değerlendirilmesi; isteğe izin verilmesi, Veri Sorumlusunun
   uygulamasına bırakılması, engellenmesi veya ek doğrulama istenmesi ile dolandırıcılık,
   kötüye kullanım ve hesap ele geçirmenin önlenmesi; bu doğrulamaların sonucunun
   kaydedilmesi. Pazarlama amaçlı profil çıkarılmaz; veriler satılmaz veya başka amaçla
   kullanılmaz.
3. İlgili kişiler. Veri Sorumlusunun internet sitesi ve uygulamalarının ziyaretçileri ve
   kullanıcıları; Veri Sorumlusunun panel kullanıcıları.
4. Veri kategorileri. IP adresi; User-Agent ve izin listesindeki HTTP başlıkları; TLS/HTTP-2
   parmak izleri; gizlilik belgesinde listelenen tarayıcı sinyalleri; kapatılmadıkça proje
   başına cihaz kimliği (çerez / yerel depolama) ve parmak izi özeti; Veri Sorumlusunun
   gönderdiği opak kullanıcı kimliği, öznitelikler ve istek bağlamı; kararlar ve girdileri;
   doğrulama adımı kayıtları (sonuç, ağ öneki, cihaz bağı); panel hesap verileri ve denetim
   kaydı. Veri Sorumlusu özel nitelikli kişisel veri, e-posta adresi, telefon numarası veya
   T.C. kimlik numarası göndermez.
5. Talimatlar. Veri İşleyen yalnızca Veri Sorumlusunun belgelenmiş talimatlarıyla (bu
   sözleşme, panelde seçilen proje yapılandırması, API çağrıları) hareket eder; hukuka
   aykırı görünen bir talimatı Veri Sorumlusuna bildirir.
6. Gizlilik. Verileri işleyen kişiler gizlilik yükümlülüğü altındadır.
7. Güvenlik (m. 12/1). Veri İşleyen gizlilik belgesindeki tedbirleri (TLS, 2FA'lı rol tabanlı
   erişim, özetlenmiş parola ve anahtarlar, şifreli sağlayıcı anahtarları, denetim kaydı,
   saklama süreleri) uygular ve en az bu seviyede tutar.
8. Alt işleyenler. İmza tarihinde: [yok / liste]. Veri İşleyen yeni bir alt işleyeni [30] gün
   önceden bildirir; Veri Sorumlusu makul gerekçeyle itiraz edebilir. Widget doğrulama
   sağlayıcıları (Cloudflare Turnstile, Google reCAPTCHA, hCaptcha, Friendly Captcha, GeeTest)
   ve üçüncü taraf IP itibar sağlayıcısı yalnızca Veri Sorumlusu projesinde açarsa
   kullanılır. Veri Sorumlusunun kendi
   uygulama doğrulamalarının (SMS, e-posta, KYC) sağlayıcıları Veri Sorumlusunun veri
   işleyenleridir, Veri İşleyenin alt işleyenleri değildir.
9. Konum. Veriler [ülke / veri merkezi] içinde işlenir ve saklanır (operatörün veri konumu
   beyanı). Veri Sorumlusunun önceden yazılı onayı ve KVKK m. 9'a uygun bir aktarım
   mekanizması olmadan [ülke] dışına aktarılmaz.
10. İlgili kişi başvuruları. Veri İşleyen, Veri Sorumlusunun başvuruları yanıtlamasını
    sağlar (bilgi: GET /v1/users/{id}; silme: DELETE /v1/users/{id}) ve diğerlerinde destek olur.
11. Veri ihlalleri. Veri İşleyen bir ihlali öğrendiğinde gecikmeksizin ve en geç [24/48] saat
    içinde, Veri Sorumlusunun Kurul'a (72 saat) ve ilgili kişilere bildirim yapabilmesi için
    gereken bilgilerle birlikte bildirir.
12. Saklama ve imha. Veriler saklama ayarlarına göre silinir (assessment, verdict ve
    doğrulama adımı kayıtları için varsayılan [30] gün, denetim kaydı 365 gün). Sözleşme
    sona erdiğinde Veri İşleyen tüm verileri [30] gün içinde, yedekleri [N] gün içinde siler
    ve bunu yazılı olarak teyit eder.
13. Denetim. Veri İşleyen uyumu göstermek için gereken bilgileri sağlar ve Veri Sorumlusunun
    veya denetçisinin [30] gün önceden bildirilen denetimlerine [yılda bir] izin verir.
14. Sorumluluk ve uygulanacak hukuk. [Ana Sözleşmedeki gibi.] Uygulanacak hukuk: Türk
    hukuku. Yetkili mahkeme: [ ].

İmzalar: [Veri Sorumlusu]  [Veri İşleyen]  Tarih: [ ]