Create validation hook

Create Validation Hook

Overview

This API allows you to create custom JavaScript-based validation hooks that execute during the bulk content ingestion process. Validation hooks enable organizations to enforce specific business rules, verify metadata compliance, and perform complex data integrity checks that go beyond standard system validation.

Usage Requirements

To ensure successful hook creation and execution, please adhere to the following:

  • Content Encoding: The fileObject.file.content property must be a Base64 encoded string of your JavaScript logic.
  • File Naming: The filename should use the .js extension.
  • Logic Return: Your script must return a result object containing a boolean success property.
  • Size Limit: The encoded content must not exceed 1.5MB.

Hook Types

  • Pre-Validation Hooks (import_pre_validation_hook): These execute before the standard system validation. They are ideal for enforcing custom business rules, such as ensuring all articles contain specific metadata.
  • Post-Validation Hooks (import_post_validation_hook): These execute after the standard system validation. They have access to the validationResults from the system check, allowing you to block an import based on the severity of errors found.

Execution Environment

Hooks run in a secure, sandboxed JavaScript environment (ES5/ES6).

  • Prohibited: File system access (fs), network access (HTTP requests), and module loading (require).
  • Supported: Standard JavaScript logic, console.log() for debugging, and a specialized helpers utility library for safe data access.

Implementation Examples

Example: Pre-Validation Logic

This example demonstrates checking that every article contains a specific metadata field.

// Initialize result
var result = { success: true };

// Verify data exists
if (helpers.hasField(data, 'articles') && helpers.isNotEmpty(data.articles)) {
  
  var invalidArticles = [];
  
  for (var i = 0; i < data.articles.length; i++) {
    var article = data.articles[i];
    
    if (!helpers.hasField(article, 'name')) {
      invalidArticles.push({ index: i, issue: "Missing name" });
      continue;
    }

    // Custom Rule: Check if 'description' exists in metadata
    if (!helpers.hasField(article, 'metadata') || 
        !helpers.hasField(article.metadata, 'description') || 
        helpers.isEmpty(article.metadata.description)) {
          
      invalidArticles.push({ 
        name: article.name, 
        issue: "Missing required description metadata" 
      });
    }
  }
  
  if (invalidArticles.length > 0) {
    result = {
      success: false,
      error: 'Articles failed custom metadata validation',
      details: { count: invalidArticles.length, errors: invalidArticles }
    };
  }
}
result;

Example: Post-Validation Logic

This example checks the standard validation results. If there are standard errors, it logs them and fails the job explicitly.

var result = { success: true };

// Check if standard validation found errors
if (helpers.hasField(validationResults, 'errors') && validationResults.errors.length > 0) {
  
  var errorCount = validationResults.errors.length;
  console.log('Standard validation found ' + errorCount + ' errors.');

  var errorTypes = {};
  validationResults.errors.forEach(function(err) {
    var type = err.type || 'unknown';
    errorTypes[type] = (errorTypes[type] || 0) + 1;
  });

  result = {
    success: false,
    error: 'Standard validation failed with ' + errorCount + ' errors.',
    details: {
      summary: errorTypes,
      firstError: validationResults.errors[0].message
    }
  };
}
result;

Further Documentation

For more detailed context on available objects (data, metadata, helpers) and best practices, refer to the Validation Hook Guide.

SecurityoAuthUser
Request
Request Body schema: application/json
hookID
integer [ 1 .. 9999999999 ]

ID of hook

name
string [ 1 .. 255 ] characters ^[\w\-\s]+$

Name of the hook.

type
required
string
Enum: "import_pre_validation_hook" "import_post_validation_hook"
required
object (FileObject)
Responses
201

Hook created.

400

Bad Request

post/import/config/hooks
Request samples
application/json
{
  • "type": "import_post_validation_hook",
  • "fileObject": {
    }
}
Response samples
application/json
{
  • "code": "400-101",
  • "developerMessage": "Unsupported query parameter(s) supplied: '<query_parameter>'."
}