Plugin Manifest Guide
Theplugin.manifest.json is the contract between your plugin and the TagadaPay platform. It defines what your plugin does, what data it needs, and what data it provides to other steps in a funnel.
Why the Manifest Matters
The manifest is critical for the Funnel Orchestrator to work correctly:- Parameter Propagation: Tells the orchestrator what data your plugin needs (requirements) and what data it provides (resources)
- Type Safety: Ensures data flows correctly between funnel steps
- URL Building: Defines pages and their paths for routing
- Feature Detection: Allows the platform to discover what your plugin can do
Basic Structure
Key Fields
- name: Display name shown in the CRM
- pluginId: Unique identifier for your plugin
- mode:
"direct-mode"for modern V2 plugins - category: Plugin category (checkout, upsell, thankyou, custom)
- configuration: References to configuration schemas and presets
- router: Routing configuration for the plugin
- requirements: SDK version requirements
Configuration System
The configuration system allows you to define customizable settings for your plugin that can be edited in the CRM.Configuration Structure
Configuration Files
schema.json - JSON Schema
Defines the structure and validation rules for your plugin configuration:
ui-schema.json - UI Hints
Provides hints for rendering the configuration editor in the CRM:
Preset Configs
Preset configuration files contain complete plugin configurations that users can select in the CRM:The CRM automatically loads and validates these configurations when deploying your plugin.
Static Resources System
Static resources allow you to configure plugin-specific data (like offer IDs, product IDs, etc.) in the CRM’s funnel editor that can be accessed at runtime.What Are Static Resources?
Static resources are configuration values that:- Are defined in the funnel step configuration in the CRM
- Can be different per deployment/funnel
- Are accessible via
context.staticin your plugin code - Don’t require URL parameters
Defining Static Resources in Manifest
Usetype: "static" in your requirements:
Accessing Static Resources in Code
Local Development: resources.static.json
For local development, create /config/resources.static.json to mock static resources:
Example Use Cases
Single Offer Upsell Page
offer.id = "offer_abc123" for this step. The page will always show this specific offer.
Multi-Product Bundle Page
products.ids = ["prod_1", "prod_2", "prod_3"]. Your plugin receives all product IDs.
Pages Definition
Pages define the routes your plugin exposes. The orchestrator uses this to build URLs and route users.Page Structure
Key Fields
- path: URL path for this page (can include path parameters like
:orderId) - features: Array of features this page provides
- remappable: Whether this page can be remapped to a different URL in the funnel editor
Resource Requirement Types
The modern manifest uses a flexiblerequirements array with a from field that specifies where data comes from:
1. Query Parameters (type: "query")
Data passed in the URL query string:
/checkout?checkoutToken=tok_abc123
2. Path Parameters (type: "path")
Data embedded in the URL path:
/thankyou/ord_abc123
3. Context Resources (type: "context")
Data from previous funnel steps (stored in session):
order.id from the session and includes it in the URL.
4. Static Resources (type: "static")
Data configured in the CRM funnel editor (not in URL):
Multi-Page Example (Complete Funnel)
Requirements: What Your Plugin Needs
Requirements tell the orchestrator what data your plugin needs to function. The orchestrator will:- Check if this data exists based on the
type(query, path, context, static) - Resolve it from the appropriate source
- Make it available to your plugin via the SDK
Requirement Structure
Each requirement has:- resource: The name of the resource (e.g.,
"order","offer","checkoutSession") - from: Array of sources that can provide this data
Data Flow by Type
Query Parameters (type: "query")
/checkout?checkoutToken=tok_abc123Access: Automatically handled by SDK, creates checkout session
Path Parameters (type: "path")
/thankyou/:orderId → /thankyou/ord_abc123Access: Via
context.order.id in your plugin
Context Resources (type: "context")
Access: Via
context.order.id in your plugin
Static Resources (type: "static")
Access: Via
context.static.offer.id in your plugin
The orchestrator automatically resolves all requirements before loading your page, ensuring all required
data is available.
Multiple Requirements
A page can have multiple requirements from different sources:- An
order.idfrom the session (previous checkout step) - An
offer.idfrom static configuration (CRM editor)
Resource Production: What Your Plugin Provides
Your plugin can produce resources that become available to subsequent funnel steps. While not explicitly declared in the modern manifest format, you emit resources via the SDK.Emitting Resources
When your plugin completes an action, emit resources via the funnel SDK:The orchestrator automatically stores these resources in the session and makes them available to subsequent
steps.
Accessing Resources in Next Steps
Resources emitted by previous steps are available viacontext:
Resource Naming Best Practices
Use semantic, descriptive names:Remappable Pages
Theremappable property determines whether a page can be remapped to a different URL in the funnel editor.
When to Use Remappable
remappable: true - Most pages should be remappable:
- Checkout pages
- Upsell pages
- Thank you pages
- Offer pages
/checkout → /buy-now).
remappable: false - Use for special routes:
- Wildcard routes (
/club/*) - API endpoints
- Utility pages
When a page is remapped, the SDK’s path remapping system automatically handles the URL translation. See the
Path Remapping Guide for details.
How the Orchestrator Uses the Manifest
1. Parameter Resolution
When navigating to a step, the orchestrator:2. URL Building
The orchestrator builds URLs using:- Mount Point ID: The funnel alias (e.g.,
my-funnel--store123.cdn.tagadapay.com) - Page Path: From manifest (e.g.,
/thankyou/:orderId) - Path Parameters: Resolved based on requirement type (query, path, context)
- Static Resources: Loaded from CRM configuration (not in URL)
3. Resource Propagation
The orchestrator maintains a session with all resources:Resource Naming Strategy
Use Descriptive Names
Choose names that clearly indicate what the resource represents:Generic vs Specific Resources
Generic Resources (Hot Context):- Use common names like
order,product,customer - Represent the “current” item in focus
- Can be overwritten by subsequent steps
- Use unique names like
mainOrder,upsellOrder - Never get overwritten
- Available for the entire funnel session
Advanced Patterns
Multiple Path Parameters
Combine multiple path parameters with context requirements:/order/ord_123/upsell/prod_456
Combining Query and Context
Mix query parameters (user input) with context (session data):/thankyou?orderId=ord_123&utm_source=facebook
Complete Example: Multi-Step Funnel
Native Checkout Plugin (Modern Format)
How Data Flows Through This Funnel
Step 1: Checkout
Step 2: Dynamic Offer (Context)
Step 3: Static Offer (Static + Context)
Step 4: Thank You
The orchestrator handles ALL parameter resolution, URL building, and resource propagation automatically!
Key Takeaways
- Query parameters (
type: "query") - User provides in URL - Path parameters (
type: "path") - Orchestrator embeds in URL from context - Context resources (
type: "context") - From previous steps, available in session - Static resources (
type: "static") - From CRM configuration, not in URL
context for the entire funnel session.
Validation & Best Practices
✅ Always Specify Resource Type
Be explicit about where data comes from:Clear type specification helps the orchestrator resolve data correctly.
❌ Don’t Mix Resource Types Incorrectly
✅ Use Static Resources for Configuration
Use static resources for values that should be configured in the CRM:This allows different funnels to show different offers without code changes.
✅ Make Pages Remappable
Most pages should be remappable for flexibility:remappable: false for wildcard routes or special functionality.
✅ Use Semantic Resource Names
✅ Test with resources.static.json
For local development, create/config/resources.static.json:
Debugging
Debug Context and Resources
Log the full context to see what’s available:Debug Static Resources
Check if your static resources are loading correctly:Remember:
resources.static.json only works in development (localhost, *.localhost, ngrok). In production,
static resources come from the CRM configuration.Check Requirement Types
Verify requirements are resolving correctly:Backend Logs
Check backend logs for orchestrator decisions:Summary
The manifest is your plugin’s contract with the platform:Core Concepts
- Configuration System - Define customizable settings with schemas and presets
- Static Resources - Configure plugin-specific data in the CRM (accessible via
context.static) - Define Pages - Specify routes, features, and whether they’re remappable
- Declare Requirements - Specify data needs using
type(query, path, context, static) - Emit Resources - Produce data via
funnel.next()for subsequent steps - Trust the Orchestrator - It handles parameter resolution, URL building, and resource propagation
Requirement Types Quick Reference
Context Resources Explained:
- Context resources are stored in the funnel session on the server
- They’re available via
context.{resource}without needing to be in the URL - The orchestrator may optionally include them in the URL for specific use cases (like when a path requires
:orderId)
Development Files
/config/schema.json- Configuration structure/config/ui-schema.json- CRM editor UI hints/config/*.config.json- Preset configurations/config/resources.static.json- Local dev only - Mock static resources
A well-defined manifest = Seamless funnel orchestration with static resources ✨
Next Steps
Funnel Resources
Learn about the resource system in detail
Build Your First Funnel
Follow our step-by-step tutorial
SDK API Reference
Explore all available SDK functions
Examples
See real-world examples
