// workflows/new

Build a workflow.

Pick the capabilities, say where each field gets its value, and run it before you save it. Building one costs nothing: what an account changes is where it is kept. Every rule the server enforces is checked here as you type, so saving cannot fail for a reason you could not see.

This is the "New client billing check" example with its sample values filled in. It is not saved yet: change anything, test it, then save it as your own.
· What it is called
· What it asks for

Declare a value here when it changes from run to run. Steps read it by its key. Anything that never changes belongs in the step itself as a fixed value, not here. A workflow may declare up to 10 inputs, and none at all is fine.

· What it does

Steps run top to bottom, one after another. A step can use a fixed value, one of the inputs above, or the output of any step above it. Up to 12 steps.

Every one of its 4 steps is pure computation, so a test run in the builder happens on your own machine and costs nothing. Your input is not sent to us for it.

Run from your saved workflows, from your code or from an assistant, the work happens on our machines and is metered: 4 credits, one call per step across 4 steps.

Adding a step that needs our side, meaning anything touching a key we hold, a database, the network or a file, would move the whole run onto our servers and it would be charged there too.

· Step 1 of 4 · 1 credit

IBAN Validator

Check whether an IBAN is well formed: the mod-97 checksum, the country's own length, and the character layout each position must have. Splits the number into its parts, verifies the national check digit for twelve countries, and names the bank for Dutch IBANs. A format check, not a bank check.

Reads: iban from input "iban"

Gives back:valid yes/noiban textcountry textcountryName textcheckDigits textbankCode textaccountNumber textinstitution object, usable by every step below as “Output of an earlier step”
· Where each field comes from
iban (required)Text (String)

The IBAN to check. Spaces and lower case are fine. Example: NL91 ABNA 0417 1643 00

What this step gives back
{
  "valid": true,
  "iban": "NL91ABNA0417164300",
  "country": "NL",
  "countryName": "Netherlands",
  "checkDigits": "91",
  "bankCode": "ABNA",
  "accountNumber": "0417164300",
  "institution": {
    "name": "ABN AMRO",
    "kind": "bank"
  }
}

A later step reading this one can take the whole object, or a path into it such as valid.

· Step 2 of 4 · 1 credit

VAT Number Format Check

Check whether a VAT number matches the official format for its EU, GB or CH country. Syntax only, not registration.

Reads: vatNumber from input "vatNumber"

Gives back:input textnormalized textcountry textvalidFormat yes/nonote text, usable by every step below as “Output of an earlier step”
· Where each field comes from
vatNumber (required)Text (String)

The VAT number including its country prefix. Spaces and dots are ignored. Example: NL123456789B01

What this step gives back
{
  "input": "NL123456789B01",
  "normalized": "NL123456789B01",
  "country": "NL",
  "validFormat": true,
  "note": "Format matches the Dutch pattern."
}

A later step reading this one can take the whole object, or a path into it such as input.

· Step 3 of 4 · 1 credit

Email Validator

Check that an email address is syntactically valid and warn about likely typos in the domain.

Reads: email from input "billingEmail"

Gives back:valid yes/noemail textlocal textdomain textwarnings list, usable by every step below as “Output of an earlier step”
· Where each field comes from
email (required)Text (String)

The address to check. Example: user@gmial.com

What this step gives back
{
  "valid": true,
  "email": "user@gmial.com",
  "local": "user",
  "domain": "gmial.com",
  "warnings": [
    "Did you mean gmail.com?"
  ]
}

A later step reading this one can take the whole object, or a path into it such as valid.

· Step 4 of 4 · 1 credit

VAT Calculator

Add VAT to a net amount or extract the VAT already inside a gross amount, at any rate, rounded to cents.

Reads: amount from input "amount" · rate from input "rate" · mode is fixed

Gives back:net numbervat numbergross numberrate number
· Where each field comes from
amount (required)Number

The amount to work from: net when adding, gross when extracting. Example: 100

rate (required)Number

VAT percentage, 0 to 100. The Dutch high rate is 21. Example: 21

mode (optional)Text (String)

"add" (default) to add VAT on top, "extract" to split a gross amount. Example: add

What this step gives back
{
  "net": 100,
  "vat": 21,
  "gross": 121,
  "rate": 21
}

A later step reading this one can take the whole object, or a path into it such as net.

· Test it before you save

This runs the workflow exactly as written, without saving it. It uses the real capabilities, so what you see is what a later run will do. Inputs are prefilled from the examples you gave them.

Stays on your device

This runs in your browser. What you put in is never sent to ToolForte, so we could not read it if we wanted to.

One exception, so the sentence above stays true: when a run finishes here we record that it happened, which ready made workflow it came from if it came from one, how many steps it had and how long it took. Never what you put in, never what came back, and never anything written into the steps themselves. It is how we can tell which tools are worth keeping.

Runs in your browser. No credits, nothing sent to us.
Saved in this browser

This is saved by your browser on this device. It is not sent to ToolForte, so it is not on your other devices and we cannot recover it for you.

Clearing your browser data removes it, and so does the delete button here.

Leave without savingUnsaved changes.