Data quality and troubleshooting
What do the error codes mean?
Every rejection carries a code together with a title, explanation, data effect and resolution steps. This table lists all codes of the collector and of processing with their meaning.
The collector answers with a code. What does it mean?
| Code | Meaning | What to do |
|---|---|---|
| SCHEMA_INVALID | required field missing or format invalid | check the event against the schema; the response names the field |
| EVENT_TOO_OLD | timestamp older than 30 days | send events promptly; backfill is limited |
| EVENT_IN_FUTURE | timestamp more than 5 minutes ahead | check the clock of the sending system |
| PII_DETECTED | plaintext email address or phone number; we only store which field was affected | remove the field or pseudonymise it first; the response and the finding name the field |
| CONSENT_MISSING | no matching consent | pass the consent state correctly; the rejected event is not stored |
| CONSENT_WITHDRAWN | consent was withdrawn for this browser; nothing stored | nothing; this is intended. If the person consents again, measurement continues |
| SUBJECT_SUPPRESSED | an attribute is on the suppression list (objection or deletion); nothing stored | nothing; this is intended. If the person consents again, lift the suppression under “Privacy” |
| DUPLICATE_EVENT | event ID already present | not an error; the repeat was detected |
| WRITE_KEY_INVALID | key unknown or revoked | check the key in “Setup” |
| SERVER_KEY_INVALID | server key unknown, revoked or expired; or a write key on the server route | create or regenerate a server key in “Setup”, “Server Events API” tab |
| SITE_UNKNOWN | site ID does not belong to the key | check the site ID |
| TOKEN_INVALID | token of a tracking element unknown, revoked or altered | generate the tracking element again and replace the code in the creative |
| DOMAIN_NOT_ALLOWED | origin not allowed | add the domain in “Setup” |
| SIGNATURE_INVALID | signature does not match the body | sign the raw body, not the reformatted one |
| REPLAY_DETECTED | signature already used | sign afresh per request |
| PAYLOAD_TOO_LARGE | request too large | reduce the batch, shorten metadata |
| RATE_LIMITED | too many requests | throttle the send rate, batch events |
| QUOTA_EXCEEDED | monthly event quota on the Start plan used up; further events are not stored until the month changes | move to a larger plan or contact support |
| INDIVIDUAL_TARIFF_REQUIRED | more events this month than the highest public plan covers; without agreeing to the individual plan nothing more is stored | agree to the individual plan under “Plan & usage” |
| TENANT_INACTIVE | the account is suspended, usually because of an open payment; nothing is accepted | pay the open invoice in the portal, otherwise contact support |
| SITE_PAUSED | the website is paused because the plan covers fewer websites than are set up | move to a plan with more websites or ask support to swap the websites |
| IMPRESSIONS_NOT_IN_PLAN | impression pixel or viewability tag on the free Start plan; impressions and viewability are only stored from Pro upwards | move to Pro or a higher plan, or remove the pixel and tag from your creatives |
| PROCESSING_AGREEMENT_MISSING | no data processing agreement concluded; nothing is accepted | conclude the DPA in the portal under “Privacy” or in the Shopify app |
| REFUND_WITHOUT_PURCHASE | refund accepted, but no purchase with the same order number, environment and currency for 24 hours, so not applied and deleted. A count per website and day under “Data status”, without order numbers, not a collector response | compare order number, environment and currency of purchase and refund; then send again with a new event_id |
| ORDER_ALREADY_COUNTED | the same order number arrived as a purchase more than once on the same website; it is counted once, with the value of the first server report, or without one the first browser report. A processing finding under “Data status”, not a collector response | nothing if browser and server both report; otherwise check whether a retry gets a new event_id |
| ORDER_VALUE_FROM_SERVER | the purchase came from the browser first, then from your server with a different value or currency; Metrunio took value and currency from the server, customer and contacts stay as the browser reported them. A processing finding under “Data status”, not a collector response | check whether the tracking script reports the same amount as the shop; if the browser value is far off, someone may have reported the order number in advance |
Every code has its own page at /hilfe/fehlercodes/<code>, with the code in lowercase, for example /hilfe/fehlercodes/domain_not_allowed. It names the cause, the effect, the steps to fix it, and the HTTP status the collector answers with. Every finding in the portal links straight there.
For PII_DETECTED, a phone number is a digit sequence with a country code (+49 30 …) or with separators between the blocks (030-1234 5678). Plain digit sequences and identifiers in UUID format remain allowed: order numbers, product IDs, timestamps and UUIDs in a URL do not lead to a rejection.
Note
DUPLICATE_EVENT is not a problem but evidence that idempotency works: a repeated event is detected and not counted twice.
Last reviewed on 17 Oct 2026
Also asked
- SCHEMA_INVALID
- PII_DETECTED
- RATE_LIMITED
- DOMAIN_NOT_ALLOWED
- CONSENT_MISSING
- QUOTA_EXCEEDED
- PROCESSING_AGREEMENT_MISSING
- REFUND_WITHOUT_PURCHASE
- ORDER_ALREADY_COUNTED
- ORDER_VALUE_FROM_SERVER
- SERVER_KEY_INVALID
- Look up an error code
- Open the matching guide
- What counts as a phone number?
- PII_DETECTED although the event contains no phone number
Related articles
- Why are my events rejected?
The collector does not accept events. How do I find the cause?
The collector response states a status per event and, on failure, the reason. Check that response first; “Data status” in the portal additionally summarises the reasons over the period.
- Why do I have to allow domains?
What does DOMAIN_NOT_ALLOWED mean and how do I add a domain?
The write key is visible in your page source; to stop a foreign website using it in its visitors’ browsers, the collector checks the origin of the request. If the domain is not in the allowed list, the event is rejected with DOMAIN_NOT_ALLOWED. A request from outside a browser is not stopped by this check, so it is best to report purchases from your server as well.
- What happens without consent?
Is nothing really stored without consent?
By default, Metrunio stores nothing without matching consent, not even a raw event, and the tracking script sends nothing before a decision. One documented case differs: purchases and refunds your server reports without consent count towards measured revenue for revenue reconciliation, with their order number and without browser, customer or advertising identifiers, and are not attributed. After a refusal this only applies with an activated additional instruction. Without consent on the ad side, the click redirect passes on only the campaign, no click ID.
- How do I conclude the data processing agreement?
How do I conclude the DPA with Metrunio, and why is nothing measured before?
For every account, measurement starts only once the data processing agreement (DPA) is concluded; until then Metrunio accepts nothing and stores nothing. You conclude it in the portal under “Privacy” or in the setup step “Conclude the DPA”, and for a Shopify store also right in the app: enter the company, its address and the person concluding it, confirm they are authorised, done. Data arrives a few seconds later, without any change to your installation.
- How do refunds reach Metrunio?
How do I report a refund, and how can I tell that it has been applied?
Your shop server reports a refund through the Server Events API as
refund, with the same order number, environment and currency as the purchase. Metrunio then reduces the value of that order. If it finds no matching purchase for 24 hours, it does not apply the refund and deletes it. Under “Data status”, the finding REFUND_WITHOUT_PURCHASE then counts how many there were per website and day, without order numbers.