BPToolBox

Blue Precision Toolbox is a comprehensive tool for data transformation between different formats, such as JSON and Text. These complement Make scenarios to allow for tailored solutions without the need for complex functions. Notable functions include JSON restructuring tools such as Pathing with Expressions and Re-Typing JSON to convert to correct data types, such as numeric and boolean types.

What Blue Precision ToolBox modules are available in the Make platform

  • JSON : Match JSON Path Pattern, Minify JSON, Re-Type JSON, Escape JSON, Unescape JSON
  • Text : Extract Text Matches, Extract Regex Matches, Generate Random String

Connect BPToolBox to Make

  1. To establish the connection in Make, insert a Blue Precision ToolBox module into a scenario. Under Connection, click “Create a connection”.
  2. The Create a Connection dialog appears.
Create a connection
  1. In the Connection name field, enter a name to identify the connection.
  2. Enter your Registered BPT App License Key.
  1. Click Save.

Build BPToolBox Scenarios

After connecting the app, you can perform the following actions:

JSON

Match JSON Path Pattern

Extract JSON by Path

This module contains the following fields

FieldUsage
ConnectionSelect the required connection from the drop-down.If no connection exists, create a Connection.
JSON String or Object *Value can be a JSON String or an Object (Required)
Expression *JSON Path Expression (Required)
Return Relative Path *When set to true, it will also return the relative Path in response*.* Default is false (Required) (Advanced)
Parse Response *This structures the output data so that it’s easy to map. All mappable items will be available after you run the module once. Default is true (Required) (Advanced)
Return error if JSON Path request fails *This will return an empty payload rather than an error if set to false. Default is true (Required) (Advanced)

This module takes the JSON String or Object and uses a relative path syntax that follows https://restfulapi.net/json-jsonpath/ . Response can be changed to include the inputted path or allow for JSON be parsed so it can be used with other modules effectively.

Responses where invalid JSON is supplied will return with nothing if scenario is set that Module doesn’t throw an error on failure.

Minify JSON

Minifies JSON input. Accepts objects or JSON strings.

This module contains the following fields

FieldUsage
ConnectionSelect the required connection from the drop-down.If no connection exists, create a Connection.
JSON String or Object *JSON value to retype. Use a JSON string. If you map an object/collection from another module, Make will typically serialize it to JSON for this field. (Required)
Return error if Minify JSON request fails *This will return an empty payload rather than an error if set to false. Default is true (Required) (Advanced)

This module takes the JSON String or Object and compress data effectively reducing amount of data.

Responses where invalid JSON is supplied will return with nothing if scenario is set that Module doesn’t throw an error on failure.

Re-Type JSON

Accepts an object or JSON string. Converts string values to proper types.

This module contains the following fields

FieldUsage
ConnectionSelect the required connection from the drop-down.If no connection exists, create a Connection.
JSON String or Object *JSON value to retype. Use a JSON string. If you map an object/collection from another module, Make will typically serialize it to JSON for this field. (Required)
Convert numbers *Convert numeric strings (e.g. “42”, “3.14”, “1e3”) into numbers. Default is true. (Required)
Convert booleans *Convert “true” and “false” into boolean values. Default is true. (Required)
Convert null *Convert “null” into null. Default is true. (Required)
Ignore fieldsArray of JSONPath-like selectors to skip retyping at those paths. Supported patterns: $.a.b.c, $.items[0].id, $.items[*].id. (Advanced)
Parse Response *This structures the output data so that it’s easy to map. All mappable items will be available after you run the module once. Default is true. (Required) (Advanced)
Return error if Re-Type JSON request fails *This will return an empty payload rather than error if set to false. Default is true. (Required) (Advanced)

The module takes JSON string or object and corrects numbers, booleans and nulls from being string.

This will output the response as either an object that has been parsed or JSON String and uses JSON Pathing to allow for ignoring any fields that should remain as string for example some numeric id can be used as string also. Please see Match JSON Path Pattern for more on JSON Pathing.

Escape JSON

Escape JSON input. Accepts objects or JSON strings.

This module contains the following fields

FieldUsage
ConnectionSelect the required connection from the drop-down.If no connection exists, create a Connection.
JSON String or Object *JSON value to retype. Use a JSON string. If you map an object/collection from another module, Make will typically serialize it to JSON for this field. (Required)
Return error if Escape JSON request fails *This will return an empty payload rather than an error if set to false. Default is true (Required) (Advanced)

This module takes the JSON String or Object and escapes the JSON accordingly.

Unescape JSON

Unescape JSON input. Accepts only JSON string.

This module contains the following fields

FieldUsage
ConnectionSelect the required connection from the drop-down.If no connection exists, create a Connection.
JSON String or Object *JSON value to retype. Use a JSON string. If you map an object/collection from another module, Make will typically serialize it to JSON for this field. (Required)
Parse Response *This structures the output data so that it’s easy to map. All mappable items will be available after you run the module once. (Required) (Advanced)
Return error if Escape JSON request fails *This will return an empty payload rather than an error if set to false. Default is true (Required) (Advanced)

This module takes an escaped JSON string (for example, a JSON value that has been stored inside another JSON field or passed as a string) and converts it back into proper JSON.

If Parse Response is enabled, the output is a parsed object you can map directly in later modules.
If Parse Response is disabled, the module returns a clean JSON string.

Use this when:

  • An API or previous module returns JSON as a string (with lots of backslashes)
  • You have run Escape JSON earlier in the scenario and now need to restore it
  • You need to turn a string field into mappable JSON fields for later modules

Example – Convert an escaped JSON string to a parsed object

JSON String or Object

"{\"id\": \"123\", \"amount\": \"42.50\", \"paid\": \"false\"}"

Settings

  • Parse Response: true
  • Return error if Escape JSON request fails: true

Result (parsed object)

{
  "id": "123",
  "amount": "42.50",
  "paid": "false"
}

You can now:

  • Map id, amount, and paid directly into other modules, or
  • Chain this with Re-Type JSON to convert "42.50" to a number and "false" to a boolean

Text

Extract Text Matches

Extracts one or more values from text by finding everything between a start and end string.

This module contains the following fields

FieldUsage
ConnectionSelect the required connection from the drop-down.If no connection exists, create a Connection.
Text to search *The full text to search within. This can be plain text, a URL, or mapped output from another module. (Required)
Start string *The starting string that marks where extraction should begin. Each occurrence creates a new match. (Required)
End mode *Choose whether the End value is a single string or a list of strings to try in order.Default to Single end string (Required)
End stringThe ending string that marks where extraction should stop (for example “&”). Leave blank to extract to the end of the text.
Include in resultControls which parts are included in the extracted value. Allowed values are:- Start string- End string- WrapperUsers can select multiple options to be returned in the response.
Use Wrapper *Optional wrapper tokens surrounding the extracted value, such as quotes or HTML tags. (Required)
Open *Wrapper opening string (for example ’ or ). (Required)
Close *Wrapper closing string (for example ’ or ). (Required)
Case insensitiveIf enabled, the start and end strings will be matched without considering letter case. (Required) (Advanced)
Return Input ValuesIf enabled, this will return the input values in the response (Required) (Advanced)

This module extracts specific parts of text using clear start and end markers.

Use it when you need predictable text extraction without writing regular expressions.

Common use cases include:

  • Extracting IDs from URLs, such as Invoice IDs, Order IDs, or User IDs
  • Reading query parameters from API or webhook URLs
  • Pulling values wrapped in quotes, brackets, or HTML tags
  • Extracting repeated values from structured logs or emails
  • Cleaning mapped text before sending it to another module

How it works at a high level:

  • You define a Start string where extraction begins
  • You optionally define an End string where extraction stops
  • You can remove or preserve surrounding wrappers such as quotes or HTML
  • Each occurrence of the start string produces one result

Example 1 – Extract an Invoice ID from a URL

Goal
Extract the InvoiceID value from a Xero URL, without quotes or extra characters.

Form setup

Text to search

https://go.xero.com/AccountsPayable/View.aspx?InvoiceID='c45832ad-2cab-4f53-a4c9-24db38052893'&testParm2='test2'

Start string

InvoiceID=

End mode

  • Single end string

End string

&

Include in result

  • None

Use Wrapper

  • Yes

Open

'

Close

'

Case insensitive

  • False

Return Input Values

  • False

Result

c45832ad-2cab-4f53-a4c9-24db38052893

Example 2 – Include the quotes in the result

Goal
Extract the InvoiceID and keep the surrounding quotes.

Differences from Example 1

Only one change.

Include in result

  • Wrapper

Result

'c45832ad-2cab-4f53-a4c9-24db38052893'

Example 3 – Extract everything after “?”

Goal
Get the full query string from a URL.

Form setup

Text to search

https://go.xero.com/AccountsPayable/View.aspx?InvoiceID='c45832ad-2cab-4f53-a4c9-24db38052893'&testParm2='test2'

Start string

?

End mode

  • Single end string

End string

  • Leave empty

Include in result

  • None

Use Wrapper

  • No

Result

InvoiceID='c45832ad-2cab-4f53-a4c9-24db38052893'&testParm2='test2'

Example 4 – Simple parameter without quotes

Goal
Extract a parameter value that is not wrapped.

Form setup

Text to search

https://go.xero.com/AccountsPayable/View.aspx?InvoiceID=c45832ad-2cab-4f53-a4c9-24db38052893&testParm2=test2

Start string

InvoiceID=

End mode

  • Single end string

End string

&

Use Wrapper

  • No

Result

c45832ad-2cab-4f53-a4c9-24db38052893

Example 5 – Multiple matches with HTML wrappers

Goal
Extract values inside <div> tags from multiple lines.

Form setup

Text to search

Param 1:<div>Test Output 1</div>
Param 2:<div>Test Output 2</div>

Start string

Param

End mode

  • Single end string

End string

  • New line

Use Wrapper

  • Yes

Open

<div>

Close

</div>

Result

Test Output 1
Test Output 2

Extract Regex Matches

Extracts one or more values from text by finding everything between a start and end string.

This module contains the following fields

FieldUsage
ConnectionSelect the required connection from the drop-down.If no connection exists, create a Connection.
Regex Patterns *Define one or more regex patterns. Each pattern runs independently and returns all matches found in its input text. Output is returned as a collection keyed by Pattern Name (or pattern_# if blank). (Required)
Pattern NameOptional identifier for this pattern. Used as the key in the output. If blank, pattern_1, pattern_2, etc. will be used.
Text to Search *The text to run the regex against. Supports multi-line input. (Required)
Regex Pattern *Regex pattern WITHOUT surrounding slashes. Example: [?&]a=([^&#]*) . (Required) https://regex101.com/ for testing regex patterns
Regex FlagsOptional regex flags. Global matching (g) is always enabled.- Case-insensitive- Multiline- Dot matches newlineMulti-select options listed.
Value to Return *Choose whether the output value should be the full match or a specific capture group. (Required)
Group Number *Capture group number to return (1 = first capture group). (Required)
Limit MatchesMaximum number of matches to return for this pattern. Leave empty for no limit.
Output OptionsAdds optional convenience fields (config or values) to each pattern’s output. (Advanced)

Finds one or more values in text using regular expressions (regex).
Use this when start/end strings are not enough, or when you only want part of a match (for example, a query parameter value, a number, or text inside tags).

Each pattern runs independently on its own input text. All matches are returned and grouped under the Pattern Name (or pattern_1, pattern_2, and so on if left blank), making them easy to map in Make.

Use Extract Text Matches when you have fixed start and end strings.
Use Extract Regex Matches when:

  • Text formats vary or contain optional parts
  • You need to validate content (digits only, specific formats, etc.)
  • You only want part of a larger match via capture groups

Example 1 – Extract all numbers from text

Goal
Collect every number that appears in the text.

Text to search

Order 123 shipped in 2024 with ref 456

Regex pattern

\d+

Key settings

  • Pattern Name: numbers
  • Value to Return: Full match
  • Limit Matches: leave empty (return all)

Result values

  • 123
  • 2024
  • 456

Use this when you want all IDs, amounts, or code‑like numbers from a sentence, log line, or description.

Example 2 – Extract a query parameter value

Goal
Get just the InvoiceID value from a URL, regardless of other parameters.

Text to search

https://go.xero.com/AccountsPayable/View.aspx?InvoiceID=585b5a83-1263-4af0-a9c0-c9f21f8b7b4f&testParm2=test2

Regex pattern

InvoiceID=([^\s&#]+)

Key settings

  • Pattern Name: invoiceId
  • Value to Return: Capture group
  • Group Number: 1 (the part inside (...))
  • Regex Flags: optional i (case‑insensitive)

Result values

  • 585b5a83-1263-4af0-a9c0-c9f21f8b7b4f

Use this pattern for other parameters by replacing InvoiceID with the parameter name you need.

Example 3 – Extract content inside HTML tags across lines

Goal
Get the inner text of a <div> tag, even when it spans multiple lines.

Text to search

Header
<div>Line 1
Line 2</div>
Footer

Regex pattern

<div>(.*?)<\/div>

Key settings

  • Pattern Name: divInner
  • Value to Return: Capture group
  • Group Number: 1
  • Regex Flags: i, m, s
    • i – case‑insensitive tag match
    • m – multiline anchors
    • s – dot matches newline (so . can cross line breaks)

Result values

  • Line 1\nLine 2

Use this approach to pull content out of other tags such as <span>, <p>, or custom wrappers.

Example 4 – Handling missing capture groups

Goal
Show what happens if you ask for a capture group that does not exist in the pattern.

Text to search

Order 123 shipped

Regex pattern

\d+

This pattern matches numbers but does not define any capture groups (…).

Key settings

  • Pattern Name: missingGroup
  • Value to Return: Capture group
  • Group Number: 1

Result behaviour

  • The match (123) is still found
  • The selected value is null because group 1 does not exist
  • An error message is included for this pattern explaining that the requested group is missing

This helps you understand why a value might be empty even though the pattern itself matches.

Example 5 – Invalid regex pattern

Goal
Show what happens when the regex itself is invalid.

Text to search

hello

Regex pattern

(

This is not a valid pattern because the opening bracket is never closed.

Key settings

  • Pattern Name: badRegex
  • Value to Return: Full match
  • (Optional) Enable Output Options to include config details in the result

Result behaviour

  • No matches are returned
  • An error message is included describing why the pattern is invalid

This is useful when you are building or testing new patterns and want clear feedback on errors.

Generate Random String

Generate Randomised String given letters, numbers and special chars for password, api keys and testing.

This module contains the following fields

FieldUsage
ConnectionSelect the required connection from the drop-down.If no connection exists, create a Connection.
Use Lowercase *Use letters [a-z] .Default as True. (Required)
Use Uppercase *Use Letters [A-Z]. Default as False. (Required)
Use Numbers *Use Numbers [0-9]. Default as False.(Required)
Use Special Characters *Set Special Character to be in random string. Default as false. (Required) (Advanced)See Special chars for setting up chars.
Special charsWhen Use Special Characters * is set, allows only the following special characters: ! @ # $ % ^ & * ( ) - _ = + [ ] { } ; : , . < > ?. Each character is optional, can appear at most once, and can be in any order.Defaults are !@#$%^&*()-_=+[]{};:,.<>?.
Length of String *How many characters required for generated string (Required)
Output FieldsOptional list of metadata fields to include in the output. Allowed values: “length” (returns the generated string length), “flags” (returns which character types were enabled), “specialChars” (returns the special character set used), “charset” (returns the full character pool used for generation), “charsetLength” (returns the size of the character pool). Leave empty to omit metadata.(Advanced)

Generates a randomised string using letters, numbers, and/or special characters. This is ideal for creating secure passwords, API keys, tokens, test data, or any other value where you need a non‑guessable, configurable string.
You control exactly which character types are allowed (lowercase, uppercase, numbers, special characters) and the total length, so you can match password policies or API constraints. Optional output fields can also return metadata (such as which flags were used or the final character set) to help with debugging or auditing.

Typical use cases include:

  • Generating unique passwords or temporary access codes for users
  • Creating API keys, client secrets, or webhook tokens
  • Producing random IDs or reference codes for testing environments
  • Creating sample data for load or regression tests

Example – Generate a 16‑character password

Goal
Generate a secure 16‑character password containing lowercase, uppercase, numbers, and special characters.

Settings

  • Use Lowercase: true
  • Use Uppercase: true
  • Use Numbers: true
  • Use Special Characters: true
  • Special chars: !@#$%^&*()-_=+[]{};:,.<>? (leave as default)
  • Length of String: 16
  • Output Fields: length, flags

Example result

  • Generated string: aZ7@kP9!dq3#Lm2%
  • Output metadata:
    • length: 16
    • flags: { "lowercase": true, "uppercase": true, "numbers": true, "specialCharacters": true }

You can then map the generated string into password fields, API secrets, or any other module that needs a secure random value.