{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "title": "Arenza browser action API",
  "description": "Minimal documented browser request and success-response shapes. HTTP Origin, delivery UUID and bearer token are validated separately from JSON bodies.",
  "$defs": {
    "visitorId": {
      "type": "string",
      "pattern": "^arz_v_[A-Za-z0-9_-]{12,80}$"
    },
    "sessionRequest": {
      "type": "object",
      "required": ["arenza_visitor_id", "consent", "url"],
      "properties": {
        "arenza_visitor_id": { "$ref": "#/$defs/visitorId" },
        "consent": { "const": true },
        "url": { "type": "string", "format": "uri", "pattern": "^https://", "maxLength": 2048 },
        "source": { "type": ["string", "null"], "maxLength": 128 },
        "referrer": { "type": ["string", "null"] }
      },
      "additionalProperties": false
    },
    "sessionResponse": {
      "type": "object",
      "required": ["session_token", "expires_in", "mode"],
      "properties": {
        "session_token": { "type": "string", "minLength": 1 },
        "expires_in": { "const": 900 },
        "mode": { "enum": ["measurement", "shadow"] }
      },
      "additionalProperties": false
    },
    "eventRequest": {
      "type": "object",
      "required": ["arenza_visitor_id"],
      "properties": {
        "arenza_visitor_id": { "$ref": "#/$defs/visitorId" },
        "properties": {
          "description": "Optional flat non-sensitive metadata. Accepted for SDK compatibility; not currently stored as customer-visible event labels or used as a conversion type.",
          "type": "object",
          "maxProperties": 20,
          "propertyNames": { "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$" },
          "additionalProperties": {
            "oneOf": [
              { "type": "string", "maxLength": 512 },
              { "type": "number" },
              { "type": "boolean" },
              { "type": "null" }
            ]
          }
        }
      },
      "additionalProperties": false
    },
    "eventResponse": {
      "oneOf": [
        {
          "type": "object",
          "required": ["accepted", "mode"],
          "properties": {
            "accepted": { "const": true },
            "mode": { "const": "measurement" }
          },
          "additionalProperties": false
        },
        {
          "type": "object",
          "required": ["accepted", "mode", "receipt_id", "duplicate"],
          "properties": {
            "accepted": { "const": true },
            "mode": { "const": "shadow" },
            "receipt_id": { "type": "string" },
            "duplicate": { "type": "boolean" }
          },
          "additionalProperties": false
        }
      ]
    }
  }
}
