Key Takeaway
Indonesia's Government Regulation 33 of 2026 (PP 33/2026) implements the PDP Law and takes effect on 16 January 2027. The 3x24-hour breach notice, DPO triggers and 2% fine ceiling were already in the 2022 law. The regulation adds the clock-start rule, rights deadlines, processing records and AI-relevant duties, while the supervisory agency is still not established.
Every summary I saw of PP 33/2026 opened with the same three numbers: a 3x24-hour breach notice, a 2% fine ceiling and a data protection officer. They read like new burdens. Before writing any ticket for them I wanted to know which of those the regulation actually introduced, and which were already sitting in Law 27 of 2022.
This post reads the regulation article by article against the 2022 law, then turns the parts an engineer can act on into code. It is a different angle from the existing UU PDP posts, which cover the law and AI features; this one is about the implementing regulation. Research date: 17 October 2026.
Research date and disclaimer
Researched on 17 October 2026. This is an engineering reading, not legal advice. I read the regulation's full text on a third-party mirror, because two searches on peraturan.bpk.go.id did not surface it, and the UU 27/2022 text on the official BPK site. The signed, promulgated document governs. Check it, and ask counsel, before relying on any article number here.
What PP 33/2026 is, checked by its title
The instrument is Peraturan Pemerintah Nomor 33 Tahun 2026 tentang Peraturan Pelaksanaan Undang-Undang Nomor 27 Tahun 2022 tentang Pelindungan Data Pribadi. The full text records that it was set in Jakarta on 16 July 2026, promulgated the same day, and published as Lembaran Negara Republik Indonesia Tahun 2026 Nomor 88. Meridian Hukum lists the same gazette number plus Tambahan Lembaran Negara 7190.
Pasal 225 says it takes effect six months after promulgation. Counting from 16 July 2026 gives 16 January 2027, which is also the date Katadata gives. ABNR counts 225 articles in 12 chapters, and the chapter headings in the text I read agree: general provisions, personal data categories, processing, rights and duties, cross-border transfer, international cooperation, public participation, supervision, administrative sanctions, dispute resolution, transition and closing.
The preamble says it exists to carry out ten delegations the 2022 law left open: objections to automated processing, compensation, portability, processing implementation, impact assessments, mergers, data protection officers, cross-border transfer, sanction procedure and the agency's powers. That list is the useful frame. The regulation is mostly procedure, and procedure is what turns into tickets.
Which headline numbers are actually new
I put the five most quoted items side by side with the 2022 law, using the BPK PDF of UU 27/2022 for the left column and the full regulation text for the right.
| Topic | UU 27/2022 (BPK PDF) | PP 33/2026 (full text) |
|---|---|---|
| Breach notice | Pasal 46(1): written notice within 3x24 jam to the data subject and the agency, with three minimum contents; Pasal 46(3): public notice in certain cases. | Pasal 114: same window. New: the clock starts when the failure is known pasti, patut, dan wajar, judged from your incident documentation. Adds the contact in the notice, Pasal 115 public notice, Pasal 116 documentation, Pasal 118 processor reports at the first opportunity. |
| Fine ceiling | Pasal 57(3): at most 2% of annual revenue or receipts, scaled to the violation. | Pasal 185: same ceiling. New: ten named variables, a fine that may be set as low as Rp0 or 0%, and PNBP rules for calculation. Pasal 184: several sanctions at once, with or without a prior written warning. |
| DPO trigger | Pasal 53(1): three triggers: public service, regular large-scale monitoring, large-scale specific or criminal-offence data. The BPK PDF text joins them with dan. | Pasal 142: same three triggers, now joined with dan/atau, which ABNR reads as alternative rather than cumulative. Adds processors, organisation size and an internal or external DPO (Pasal 144), duties and independence (Pasal 145 and 146). |
| DPIA | Pasal 34(2): the same seven high-risk cases, including automated decisions and new technology. | Pasal 120 repeats the seven. New: Pasal 121 sets four minimum contents, requires it before processing and a review when risk changes. The explanation names artificial intelligence and machine learning as new technology. |
| Automated decisions | Pasal 10: a right to object to solely automated decisions with legal or significant effect; details delegated to a regulation. | Pasal 93 to 95: worked examples, a duty to give information about the technology, a human-involvement alternative once an objection is accepted, and two cumulative grounds for refusal. Pasal 96 leaves further detail to an agency regulation. |
So the 3x24-hour notice, the 2% ceiling and the DPO triggers are carried over from the law, and the claim that notification is required regardless of severity describes wording that Pasal 46 already had: neither article mentions a severity threshold. That is a correction to how the regulation is sold, not a reason to relax. What is new is everything that turns a duty into something an auditor can test: when the clock starts, what the record contains, how a fine is built.
The breach clock, Pasal 114 to 119
Pasal 114 requires written notice to the data subject and to the agency within 3x24 jam, and Pasal 114(3) sets three minimum contents: which data was exposed, when and how, and what you are doing about it. Pasal 114(4) adds the DPO or designated contact. Pasal 116 then requires documentation of the incident and says it is submitted to the agency, and Pasal 117 requires a written policy covering roles, classification, documentation, reporting and periodic review.
The sentence that matters for engineers is in the explanation of Pasal 114(2): a controller is treated as knowing the failure pasti, patut, dan wajar based on the conclusion in the documentation it produced about the incident. The start of the clock is therefore a recorded decision. That makes the timestamp and its reasoning a data model problem, not a legal footnote.
// incident-record.ts
// The record Pasal 116(1) says you must be able to hand to the Lembaga,
// plus the contact Pasal 114(4) says every notice must carry.
export type PdpIncident = {
id: string;
protectedData: string[]; // 116(1)a: which personal data was protected
description: string; // 116(1)b: what happened, when and how
impact: string; // 116(1)c: effect on data subjects and on you
response: string[]; // 116(1)d: handling and recovery done, running, planned
contact: string; // 114(4): the DPO or the designated contact
// Pasal 114(2) starts the clock when the failure is known "secara pasti,
// patut, dan wajar". The Penjelasan says that is judged from the
// documentation YOU produced about the incident. So this field is a decision
// you record with a name and a reason, not the instant an alert fired.
establishedAt: string; // ISO 8601
establishedBy: string;
establishedBecause: string;
notifiedSubjectsAt?: string; // 114(1)a
notifiedAuthorityAt?: string; // 114(1)b - the Lembaga, see section 7
notifiedPublicAt?: string; // 115: only for public-service or serious public impact
};
// "3 x 24 (tiga kali dua puluh empat) jam" is 72 elapsed hours as written.
// The text I read does not say business days.
const NOTICE_WINDOW_MS = 3 * 24 * 60 * 60 * 1000;
export function noticeDeadline(i: PdpIncident): Date {
return new Date(Date.parse(i.establishedAt) + NOTICE_WINDOW_MS);
}
export function isOverdue(i: PdpIncident, now = new Date()): boolean {
const late = now.getTime() > noticeDeadline(i).getTime();
return late && !(i.notifiedSubjectsAt && i.notifiedAuthorityAt);
}
// Wrong: backfill establishedAt to the day the postmortem was signed.
// Nothing in Pasal 114 says that is "wajar", and the evidence of when you
// knew is your own ticket history.
// Right: write establishedAt in the incident ticket at the time of the
// decision, with the reason, and let the postmortem refer to it.Two more rules sit close by. A processor must report a failure to the controller pada kesempatan pertama, at the first opportunity (Pasal 118), so your processor contracts need an explicit hand-off time. Pasal 115 requires public notice when a failure disrupts public service or has serious impact on the public. Pasal 119 leaves further detail on notification to an agency regulation, which I could not read because it does not exist yet.
Rights deadlines, records and defaults
The part of the regulation that most changes a backlog is not the breach article. It is a set of fixed 3x24 jam deadlines on data subject requests, plus a records duty with a minimum field list. I read each of these in the full text.
| Duty | Pasal | What to build |
|---|---|---|
| Correct inaccurate data within 3x24 jam of receiving the request | 71(1) | A correction endpoint and a queue with a 72-hour timer |
| Give access within 3x24 jam of receiving the request | 77(1) | A per-subject export job; verification (77(2)) runs inside the window |
| Stop processing within 3x24 jam of consent withdrawal | 92(2) | Revocation that reaches queues, caches, analytics and vendor syncs |
| Suspend or restrict processing within 3x24 jam | 99(1) | A per-subject processing flag that every pipeline checks |
| Record every processing activity with thirteen minimum fields | 74(2) | A ropa.yaml reviewed in the pull request that changes the processing |
| Plan security from system design, collect only what the purpose needs by default | 123 and 124 | Schema review: optional fields off by default, retention set per field |
| Run a DPIA before high-risk processing and review it when risk changes | 120 and 121 | A DPIA template and a release checklist item for AI, scoring and large-scale features |
One tension is worth flagging. Pasal 77(2) lets you grant access after verifying the request, but Pasal 77(1) counts the 3x24 jam from receipt. I read that as verification having to fit inside the window, not pausing it, and I would build the timer that way until the agency says otherwise. ABNR describes the periods as generally running from receipt and, where applicable, verification, so treat my stricter timer as a design choice.
-- data_subject_request.sql (PostgreSQL)
-- One timer for the four 3 x 24 jam duties: correction (Pasal 71), access
-- (77), stopping after consent withdrawal (92), restriction (99).
create table data_subject_request (
id bigserial primary key,
kind text not null check (kind in ('correct','access','withdraw','restrict')),
subject_ref text not null,
received_at timestamptz not null default now(),
verified_at timestamptz, -- verification is a step, not a pause button
fulfilled_at timestamptz
);
-- Run this every hour and page whoever owns the queue.
-- The clock is received_at, not verified_at: Pasal 71(1), 77(1), 92(2) and
-- 99(1) all count "terhitung sejak ... menerima permintaan".
select id, kind, received_at,
received_at + interval '72 hours' as due_at
from data_subject_request
where fulfilled_at is null
and now() > received_at + interval '72 hours'
order by received_at;What the regulation means for AI features
The regulation touches AI in two places. Pasal 93 defines the objection right with examples: a decision has legal effect if it affects legal status or rights, such as a visa refusal, and significant effect if it greatly affects life, behaviour or choices, such as credit refusal, job rejection or differential pricing based on personal data. Pasal 94 then requires a mechanism to answer objections, adequate information about the technology and its consequences, and, when a verified objection is accepted, an alternative involving human intervention.
The second place is the DPIA. Pasal 120(2) lists automated decisions with legal or significant effect, and the new technology case, which the explanation says includes artificial intelligence and machine learning. So an AI feature that scores, ranks or prices people is a DPIA case by the text, before any agency regulation arrives. The code below is the minimum I would log to be able to answer an objection.
// automated-decision-log.ts
// What Pasal 93-95 and 120 push an AI feature to be able to show.
export type AutomatedDecision = {
id: string;
subjectRef: string;
feature: string; // e.g. "credit-prescreen", "cv-ranking", "dynamic-price"
modelVersion: string;
solelyAutomated: boolean; // 93: the right covers decisions "hanya didasarkan"
effect: "legal" | "significant" | "none"; // 93: akibat hukum / berdampak signifikan
inputsSummary: string[]; // which personal data categories fed the decision
outcome: string;
decidedAt: string;
objection?: {
receivedAt: string;
accepted: boolean | null; // null = still being assessed
humanReviewerRef?: string; // 94(3): accepted objection -> human involvement
outcomeAfterReview?: string;
};
};
// Pasal 94(3): when a verified objection is accepted, offer an alternative
// that involves a person and/or does not rest on the automated result.
export function requiresHumanPath(d: AutomatedDecision): boolean {
return Boolean(d.objection?.accepted) && !d.objection?.humanReviewerRef;
}
// Pasal 95(1) lets you refuse an objection only when BOTH hold:
// a. there is no legal or significant effect, and
// b. you have very accurate systems and mitigation.
// So "effect: none" must be a reasoned entry, never the default.Pasal 95 allows refusing an objection only when both conditions hold: no legal or significant effect, and a system with very good accuracy and mitigation. Pasal 96 leaves detail on automated processing to an agency regulation, so ABNR is right that parts are left for later, but the right, the human alternative and the DPIA trigger are already written.
The right applies to decisions based solely on automated processing. Whether a person who approves every output without real review takes you outside it is not answered in the text I read. Log who reviewed what and how long they spent, and ask counsel before you rely on the human step to avoid the objection route.
DPO and cross-border transfer
Pasal 142 requires a DPO, which the regulation calls PPDP, from controllers and processors in three cases: public service processing, core activities needing regular and systematic large-scale monitoring, or core activities consisting of large-scale processing of specific or criminal-offence data. Pasal 144 says the duty must consider structure, size and needs, and that the DPO can be one person or several, from inside or outside the organisation. Pasal 146 requires independence, access to top management, adequate resources, and no conflict of interest.
Cross-border transfer is the other gate an engineering team meets. Pasal 160 defines a transfer as making personal data available to a controller or processor outside Indonesian jurisdiction. By my reading that covers a foreign-hosted analytics, support or LLM API that receives personal data. Pasal 165 sets three tiers, tried in order.
| Tier | Condition in Pasal 165 | What you must have ready |
|---|---|---|
| 1. Equivalent or higher protection | The recipient's country has a level of protection equal to or higher than the PDP Law; the agency assesses it (Pasal 167). | A record of which country you rely on and why. The assessment belongs to the agency (Pasal 167), which does not exist yet. |
| 2. Adequate and binding protection | If tier 1 is not met, protection that is adequate and binding. | The assessed legal instrument, its effectiveness check including public-authority access, supplementary measures (Pasal 161 and 162). |
| 3. Data subject consent | If neither tier 1 nor 2 is met, consent of the data subject. | Prior information on purpose, safeguards and risks (Pasal 164) and a consent record. |
Before any of the tiers, Pasal 161 asks for a mapped transfer cycle, data limited to what the purpose needs, an identified legal instrument, an effectiveness assessment before transfer and periodic re-evaluation, and Pasal 162 lists the data format as a factor, including whether it travels as plain text, masked or encrypted. That is a reason to redact before the request leaves your network, which is also the cheapest control you own.
The failure mode: a regulator that does not exist yet
The notices in Pasal 114 go to the Lembaga, the agency the PDP Law creates. ABNR, writing on 15 September 2026, says that agency is to be created by Presidential Regulation, that none had been issued, and that until then the Directorate General of Digital Space Supervision under KOMDIGI administers personal data protection matters. I could not verify that statement against a primary source, so treat it as dated reporting.
The consequence is structural. In the full text I counted 34 sentences that delegate detail to a Peraturan Lembaga, while ABNR says about 30 provisions need agency regulations. I did not reconcile the two counts. Pasal 223 says that until those regulations exist, processing is allowed so long as it does not contradict the regulation, and Pasal 224 keeps existing rules in force where consistent. So the substantive duties arrive on 16 January 2027 while the channels, forms and thresholds do not.
Three mistakes this invites. First, hard-coding an authority endpoint or mailbox into the incident runbook: I found no source naming an intake channel, so record the attempt you made instead of inventing one. Second, waiting for the agency regulations before starting: the 3x24 jam deadlines in Pasal 71, 77, 92 and 99 do not depend on any of them. Third, treating automated decisions as left for later, when the objection right and the DPIA trigger are already in the text.
The trade-off is cost against rework. Building the timers, records and logs now costs engineering time against rules that an agency may still reshape. Waiting costs a scramble in January. I would build the pieces that are already fully specified, the deadlines, the records and the incident record, and leave the pieces that depend on the agency, such as forms and country lists, as configuration.
What to do on Monday
None of this needs the agency. Six things can be started this week, in this order, and each produces something a reviewer can open.
- Read the signed text for the articles named above and note any difference from this post. Mark the date you checked.
- Write a ropa.yaml entry for every processing activity, using the thirteen fields of Pasal 74(2). Start with the ones that call an external API.
- Add the 72-hour timer to correction, access, consent withdrawal and restriction requests, and alert on overdue items.
- Add establishedAt, establishedBy and establishedBecause to your incident template, and add the processor hand-off time to every processor contract.
- Run a DPIA for each AI feature that scores, ranks or prices people, using the four contents of Pasal 121(2).
- List every foreign vendor that receives personal data and record which tier of Pasal 165 you rely on, even if the answer is still unknown.
# ropa.yaml - one entry per processing activity, kept in the repo.
# The thirteen keys are the minimum list in Pasal 74(2) a-m. Pasal 74(7)
# says update it when any of them changes, so review it in the same pull
# request that changes the processing.
- activity: "support-chat-summarisation"
controller: { name: "PT Contoh Digital", contact: "privacy@example.co.id" } # a
dpo_contact: "dpo@example.co.id" # b
collected_from: ["customer chat widget"] # c
sent_to: ["LLM API (hosted outside Indonesia)"] # c
lawful_basis: "consent" # d
purpose: "summarise a support conversation for the agent" # e
data_types: ["name", "email", "order id", "free-text message"] # f
subject_categories: ["customers"] # g
other_parties_with_access: ["LLM API vendor", "support contractor"] # h
rights_handling: "DSR queue, 72h timer, owner: support-lead" # i
data_flow_map: "docs/flows/support-chat.md" # j
retention: "transcripts 90 days, summaries 30 days" # k
security_measures: ["TLS 1.2+", "field-level redaction of card numbers"] # l
transfers_abroad: # m
- { to: "LLM API vendor", instrument: "to be assessed (Pasal 162)", assessed_on: null }
dpia_required: true # automated outputs plus new technology: Pasal 120(2)The record below is the artefact I would start with, because it feeds three other duties: the DPIA flag, the transfer inventory and the rights timer.
PP 33/2026 does not make Indonesian privacy law stricter in the places the headlines point to, because the 3x24 jam notice, the 2% ceiling and the DPO triggers were already in the 2022 law. It makes them testable: a defined clock start, fixed rights deadlines, a records list and an AI objection route. Build to the testable parts now and treat the agency-dependent parts as configuration.
Related reading on this site
Sources and further reading (checked 17 October 2026)
- PP 33/2026 full text on datahukum.com (third-party mirror, read in full)
- JDIH BPK: UU 27/2022 on Pelindungan Data Pribadi (official record)
- JDIH BPK: UU 27/2022 PDF, Pasal 10, 34, 46, 53 and 57
- Meridian Hukum: PP 33/2026 title, dates and gazette numbers
- ABNR: Indonesia's PDP Law enters a new phase under GR 33/2026
- Katadata: PP PDP takes effect January 2027, children's data rules

