Skip to content

Formatrica - Public API Documentation

Version: 1.1.2 Last Updated: 2026-07-15

This document describes the public WordPress hook API (do_action / apply_filters) available in the Formatrica plugin.

Scope note Every hook below ships in the free edition (and therefore also in Pro). Hooks that belong to Pro-only features — payments, PDF documents, licensing, and the Pro integrations (HubSpot, Salesforce, Twilio) — are intentionally not covered by this reference.


Table of Contents

  1. Actions (Hooks)
  2. Filters

Actions (Hooks)

Form Submission Lifecycle

formatrica_before_submission

Fires before a form submission is processed (before validation and sanitization).

php
do_action(
    'formatrica_before_submission',
    int $form_id,
    array $form,
    array $request_data,
    array $context
);

Parameters:

  • $form_id (int) - Form ID
  • $form (array) - Form configuration (includes fields, settings, title, etc.)
  • $request_data (array) - Raw POST data
  • $context (array) - Submission context (ip_address, user_agent, etc.)

Example:

php
add_action('formatrica_before_submission', function($form_id, $form, $data, $context) {
    // Log submission attempt
    error_log("Form {$form_id} ({$form['title']}) submission from IP: {$context['ip_address']}");
}, 10, 4);

formatrica_after_submission

Fires after a submission is successfully processed.

php
do_action(
    'formatrica_after_submission',
    int $form_id,
    array $sanitised,
    array $result,
    array $form,
    array $context
);

Parameters:

  • $form_id (int) - Form ID
  • $sanitised (array) - Sanitized submission data (field values)
  • $result (array) - Processing result with keys:
    • success (bool) - Whether submission succeeded
    • message (string) - Success/error message
    • data (array) - Contains submission_id (int|null) and fields (array)
    • email (array) - Email delivery result
  • $form (array) - Form configuration
  • $context (array) - Submission context (ip_address, user_agent, etc.)

Example:

php
add_action('formatrica_after_submission', function($form_id, $sanitised, $result, $form, $context) {
    // Access submission ID (null if storage disabled)
    $submission_id = $result['data']['submission_id'] ?? null;

    // Custom notification for specific form
    if ($form_id === 5) {
        wp_mail('admin@example.com', 'VIP Form Submitted', print_r($sanitised, true));
    }
}, 10, 5);

Integration Hooks

formatrica_integration_dispatch

Fires when a form has an enabled integration that core does not handle itself. Use it to implement custom integrations.

php
do_action(
    'formatrica_integration_dispatch',
    string $integration_id,
    array $settings,
    array $form,
    array $payload,
    array $context,
    array $field_meta
);

Parameters:

  • $integration_id (string) - The integration key as stored in the form config
  • $settings (array) - The integration's saved settings for this form
  • $form (array) - Form configuration
  • $payload (array) - Submitted field values
  • $context (array) - Submission context
  • $field_meta (array) - Field metadata (labels, types) for the submitted fields

Example - Custom CRM Integration:

php
add_action('formatrica_integration_dispatch', function($id, $settings, $form, $payload, $context, $meta) {
    if ($id !== 'my_custom_crm') {
        return;
    }

    wp_remote_post('https://mycrm.com/api/leads', [
        'body' => wp_json_encode($payload),
        'headers' => ['Authorization' => 'Bearer ' . $settings['api_key']],
    ]);
}, 10, 6);

formatrica_wp_post_created

Fires after the WordPress Post integration creates a post from a submission.

php
do_action(
    'formatrica_wp_post_created',
    int $post_id,
    array $form,
    array $payload
);

Parameters:

  • $post_id (int) - The created post ID
  • $form (array) - Form configuration
  • $payload (array) - Submitted field values

formatrica_webhook_failed

Fires when an outbound integration HTTP request fails (network error, non-2xx response, or blocked endpoint).

php
do_action(
    'formatrica_webhook_failed',
    array $error,
    array $form,
    array $payload
);

Parameters:

  • $error (array) - Error details with keys:
    • endpoint (string) - The requested URL
    • integration (string) - Integration key (e.g. webhook, slack, mailchimp)
    • error (string) - Error message
    • context (array) - Submission context
  • $form (array) - Form configuration
  • $payload (array) - Submitted field values

Example:

php
add_action('formatrica_webhook_failed', function($error, $form, $payload) {
    wp_mail(
        get_option('admin_email'),
        'Form integration failed',
        sprintf('%s failed for %s: %s', $error['integration'], $error['endpoint'], $error['error'])
    );
}, 10, 3);

User Registration

formatrica_user_registered

Fires after a user-registration form creates a WordPress user.

php
do_action(
    'formatrica_user_registered',
    int $user_id,
    array $data
);

Parameters:

  • $user_id (int) - The new user's ID
  • $data (array) - The form submission data

Logging

formatrica_debug_log

Fires whenever the plugin emits a debug/diagnostic message. Nothing is written anywhere by default — attach a listener to route messages to your own logger.

php
do_action(
    'formatrica_debug_log',
    string $message
);

Example:

php
add_action('formatrica_debug_log', function($message) {
    if (defined('WP_DEBUG') && WP_DEBUG) {
        error_log('[Formatrica] ' . $message);
    }
});

Filters

Submission Processing

formatrica_submission_request

Filter the raw request data before validation and sanitization.

php
apply_filters(
    'formatrica_submission_request',
    array $request_data,
    int $form_id,
    array $form,
    array $context
);

formatrica_sanitized_submission

Filter the sanitized field values after validation, before storage, email, and integrations run.

php
apply_filters(
    'formatrica_sanitized_submission',
    array $sanitised,
    int $form_id,
    array $form,
    array $request_data,
    array $context
);

Example:

php
add_filter('formatrica_sanitized_submission', function($sanitised, $form_id) {
    // Normalise a phone field on form 7
    if ($form_id === 7 && isset($sanitised['phone'])) {
        $sanitised['phone'] = preg_replace('/[^0-9+]/', '', $sanitised['phone']);
    }
    return $sanitised;
}, 10, 2);

formatrica_min_submission_time

Filter the anti-bot minimum time (in seconds) a form must be on screen before a submission is accepted. Default 2.

php
apply_filters(
    'formatrica_min_submission_time',
    int $seconds,
    int $form_id
);

formatrica_recaptcha_v3_min_score

Filter the minimum reCAPTCHA v3 score a submission must reach. Default 0.5; scores below the threshold are rejected.

php
apply_filters(
    'formatrica_recaptcha_v3_min_score',
    float $threshold,
    int $form_id
);

formatrica_field_display_text

Filter a field value's plain-text display form before it is used in text-first outputs (plain-text emails, Slack messages, integration summaries). $meta is the field's submission metadata (name, label, type, value, …).

php
apply_filters(
    'formatrica_field_display_text',
    mixed $value,
    array $meta
);

File Uploads

formatrica_max_upload_size

Filter the maximum upload size in bytes for a file field. The default comes from the field's Max file size setting (1–50 MB, default 5 MB).

php
apply_filters(
    'formatrica_max_upload_size',
    int $max_size,
    array $field
);

formatrica_max_image_dimension

Filter the maximum image width/height in pixels for uploaded images. Default 4096.

php
apply_filters(
    'formatrica_max_image_dimension',
    int $max_dimension,
    array $field
);

formatrica_allowed_file_types

Filter the allowed MIME types for file uploads. Defaults: JPEG, PNG, GIF, WebP, PDF, DOC, DOCX, XLS, XLSX, TXT, CSV.

php
apply_filters(
    'formatrica_allowed_file_types',
    array $mime_types,
    array $field
);

Example:

php
add_filter('formatrica_allowed_file_types', function($types, $field) {
    $types[] = 'application/zip';
    return $types;
}, 10, 2);

Integration Payloads

Each outbound integration passes its request body through a filter before sending. All payload filters share the same signature:

php
apply_filters(
    'formatrica_{integration}_payload',
    array $body,
    array $form,
    array $payload,
    array $context,
    array $field_meta
);

Parameters:

  • $body (array) - The request body about to be sent to the service
  • $form (array) - Form configuration
  • $payload (array) - Submitted field values
  • $context (array) - Submission context
  • $field_meta (array) - Field metadata (labels, types)

formatrica_webhook_payload

Applies to Zapier, Make, and custom webhook requests.

Example:

php
add_filter('formatrica_webhook_payload', function($body, $form) {
    $body['site'] = home_url();
    return $body;
}, 10, 2);

formatrica_slack_payload

Applies to Slack notification messages.

formatrica_mailchimp_payload

Applies to Mailchimp subscribe requests.

formatrica_brevo_payload

Applies to Brevo contact requests.


formatrica_webhook_extra_headers

Filter the extra HTTP headers sent with an outbound webhook request. Default []. Return an associative header => value array; useful for authenticating webhook receivers.

php
apply_filters(
    'formatrica_webhook_extra_headers',
    array $headers,
    string $integration_id,
    array $settings
);

Email Rendering

formatrica_email_template_style

Filter the notification email's template style before the HTML body is built. Keys: accent (hex colour), font (CSS font stack), show_title (bool), show_metadata (bool), intro_text, footer_text. $options is the form's config options array.

php
apply_filters(
    'formatrica_email_template_style',
    array $style,
    array $options
);

formatrica_email_field_display_html

Override the pre-escaped HTML for a single field's value cell in the notification email table. Return null (default) for the standard escaped rendering, or an HTML string to replace it — the returned string is printed as-is, so escape it yourself.

php
apply_filters(
    'formatrica_email_field_display_html',
    ?string $html,
    array $field
);

Frontend Styling

formatrica_frontend_theme_css

Append extra CSS to the inline frontend theme stylesheet. Default ''.

php
apply_filters(
    'formatrica_frontend_theme_css',
    string $css
);

formatrica_theme_preset_class

Filter the CSS class applied to the form wrapper for the form's theme preset. Default '' (classic look). $preset is the preset id from the form's theme settings.

php
apply_filters(
    'formatrica_theme_preset_class',
    string $class,
    string $preset
);

WordPress Post Integration

formatrica_wp_post_args

Filter the wp_insert_post() arguments before the WordPress Post integration creates a post.

php
apply_filters(
    'formatrica_wp_post_args',
    array $postarr,
    array $form,
    array $payload,
    array $settings,
    array $context
);

Example:

php
add_filter('formatrica_wp_post_args', function($postarr, $form) {
    // Force specific category
    if ($form['id'] === 10) {
        $postarr['post_category'] = [5, 12];
    }
    return $postarr;
}, 10, 2);

Admin

formatrica_duplicate_title

Filter the title given to a duplicated form. Default: {original title} (Copy).

php
apply_filters(
    'formatrica_duplicate_title',
    string $title,
    array $original
);

Support & Contributing


Last Updated: July 15, 2026 Plugin Version: 1.1.2