---
title: "Sent to your URL when data changes (type dataset.changed; type test from the test endpoint)"
method: POST
path: "datasetChanged"
---

# Sent to your URL when data changes (type dataset.changed; type test from the test endpoint)

`POST datasetChanged` (webhook)

Change events are queued and delivered by a job that runs every 15 minutes; the test endpoint delivers at once. Verify the ACD-Signature header: t=<unix seconds>,v1=<hex HMAC-SHA256 of t + '.' + raw body, keyed with your webhook secret>; reject events older than 5 minutes. Answer with a 2xx within 10 seconds. A 2xx, a 3xx (redirects are not followed) or a 4xx other than 429 ends the delivery (4xx answers are not retried); timeouts, network errors, 429 and 5xx are retried on the following runs, about every 15 minutes, up to 3 attempts in all, with the same event id (ACD-Event-Id), so receivers can de-duplicate. Up to 50 queued events are kept per key until delivered. VAT-history changes arrive under feature 'vat', tax-treaty changes under 'wht'.

## Headers

- `ACD-Signature` string, required
- `ACD-Event` 'dataset.changed' | 'test', required
- `ACD-Event-Id` string, required

## Payload

- WebhookEvent
  - `id` string, required: Stable event id (evt_...; evt_test_... for tests), also in header ACD-Event-Id
  - `type` 'dataset.changed' | 'test', required
  - `created` string, date-time, required
  - `dataset_version` string, required
  - `previous_version` string: Not on test events
  - `changes` object[], required: Empty on test events
    - `country` string
    - `country_name` string
    - `feature` 'holidays' | 'vat' | 'wht' | 'tin_format' | 'filing_deadlines'
    - `holidays_confirmed` object[]: For holidays changes: dates newly confirmed by an official announcement
      - `date` string, date
      - `name` string
      - `rule_id` string, nullable
      - `source_url` string, nullable
      - `source_note` string: When the official notice is not online, or the date is known from a press report (can accompany source_url)
  - `docs` string: Link to the webhook documentation (not on test events)

## Acknowledgement `2XX`

Received

## Other responses

- `4XX`: Rejected by the receiver: not retried (except 429)

---

[API](https://skmtc.dev/africacompliancedata/apis/africa-compliance-data-api.md) · [All operations](https://skmtc.dev/africacompliancedata/apis/africa-compliance-data-api/llms.txt) · [OpenAPI document](https://skmtc.dev/africacompliancedata/apis/africa-compliance-data-api/revisions/cb17c8aafda8?raw)
