Echolot
Reference

Dynamic values

Every dynamic value Echolot has, with its arguments and an example, grouped as the {{ list groups them.

A dynamic value is a function inside {{ }}: {{$uuid}}, {{$base64('heidi:alpenglow')}}, {{$responseJSONPath('auth/sign-in', '$.access_token')}}. Echolot works it out when the request is sent. Dynamic values work wherever variables do: the URL, headers, bodies, auth fields, messages and settings. For how to pick and edit them in the app, see dynamic values.

Writing them

  • A dynamic value starts with $: {{$timestamp}}. Without arguments the parentheses are optional.
  • Arguments go in parentheses, separated by commas: text in quotes ('…' or "…"), numbers, variable names without quotes, or other dynamic values.
  • Text arguments can hold tokens of their own: {{$base64('{{email}}:{{password}}')}}. }} inside quotes doesn't end the token.
  • Anything that doesn't parse stays as you wrote it and is reported, so a stray {{ never breaks a request.
{{$sha256('{{body}}', 'base64')}}
{{$date('yyyy-MM-dd', -86400, 'Europe/Zurich')}}
{{$hmacSha256(apiSecret, $timestamp)}}

Responses

These read the latest response of another saved request, given by its path (folder/request, as in auth/sign-in). Every one takes an optional last argument that says whether that request is sent first:

Last argumentMeans
'if-missing' (default)Send it first when it has no response yet.
'fresh'Send it first every time; in a run, once per run.
'latest'Never send it; use the latest response.
ValueArgumentsWhat it gives
$responseJSONPathRequest, JSONPathA value from the response body, chosen with JSONPath. {{$responseJSONPath('auth/sign-in', '$.access_token')}}
$responseKeyPathRequest, key pathA value chosen with a key path such as data.items.0.id. {{$responseKeyPath('orders/list-orders', 'items.0.id')}}
$responseJqRequest, jq filterWhat a jq filter makes of the body; several results come one per line. {{$responseJq('catalog/list-products', '.items[0].sku')}}
$responseXPathRequest, XPathA value from an XML response. {{$responseXPath('echo/xml', '/catalog/product[1]/@sku')}}
$responseRegexRequest, patternThe first match of a regular expression in the body: its first group if it has one. {{$responseRegex('echo/html', '<title>(\\w+)</title>')}}
$responseHeaderRequest, headerA response header. {{$responseHeader('orders/create-order', 'Location')}}
$responseCookieRequest, cookieThe value of a cookie the response set. {{$responseCookie('echo/set-cookie', 'flavour')}}
$responseStatusRequestThe status code. {{$responseStatus('auth/sign-in')}}
$responseBodyRequestThe whole body, as text. {{$responseBody('auth/who-am-i')}}
$responseBodyLengthRequestThe body's size in bytes. {{$responseBodyLength('catalog/export')}}
$responseRequest, queryAny of the above by the query's form: a JSONPath ($.token), an XPath (/a/b, or xpath:…), regex:…, jq:…, keypath:…, header:Name or cookie:Name. {{$response('auth/sign-in', 'header:Content-Type')}}

For example, Who am I could take its token straight from Sign in, sending it first if needed:

Authorization: Bearer {{$responseJSONPath('auth/sign-in', '$.access_token')}}

A request that reads another one's response in a circle is refused with the circle named. Response captures are the other way to carry values between requests.

Requests

These read a request as it would be sent, resolved. The first argument is a saved request's path, or empty ('') for the request being sent.

ValueArgumentsWhat it gives
$requestURLRequestIts URL, resolved. {{$requestURL('')}}
$requestMethodRequestIts method. {{$requestMethod('')}}
$requestHeaderRequest, headerA header, resolved, including what its auth adds. {{$requestHeader('', 'Content-Type')}}
$requestQueryRequest, parameterA query parameter of its URL, decoded. {{$requestQuery('', 'page')}}
$requestBodyRequestIts body, resolved, as text. {{$requestBody('')}}
$requestJSONPathRequest, JSONPathA value from its JSON body. {{$requestJSONPath('orders/create-order', '$.lines[0].sku')}}
$requestJqRequest, jq filterWhat a jq filter makes of its JSON body. {{$requestJq('', '.lines[0].quantity')}}
$requestVariableRequest, variableA variable as that request sees it. {{$requestVariable('auth/sign-in', 'email')}}

Signing a request with what it sends is the usual use:

X-Signature: {{$hmacSha256(apiSecret, $requestBody(''))}}

Encoding

ValueArgumentsWhat it gives
$base64TextThe text as Base64. {{$base64('heidi:alpenglow')}}
$base64DecodeBase64Base64 or Base64URL decoded to text. {{$base64Decode('aGVpZGk=')}}
$base64UrlTextThe text as Base64URL, without padding. {{$base64Url('{"alg":"none"}')}}
$urlEncodeTextThe text percent-encoded for a URL component. {{$urlEncode('ultralight tent')}}
$urlDecodeTextPercent-encoded text decoded; + stays +. {{$urlDecode('ultralight%20tent')}}
$hexTextThe text's UTF-8 bytes in hex. {{$hex('Grüezi')}}
$hexDecodeHexHex decoded to text. {{$hexDecode('6869')}}
$jsonEscapeTextThe text escaped to go inside a JSON string, without the quotes. {{$jsonEscape(note)}}
$newlinenoneA line feed (\n).
$crnoneA carriage return (\r).
$crlfnoneA carriage return and line feed (\r\n).
$tabnoneA tab.
$unescapeSequenceText with escape sequences turned into characters: \n, \r, \t, \0, \\, \xHH, \uHHHH. {{$unescape('café')}}
$basicAuthUser, passwordAn Authorization value for HTTP Basic: Basic and Base64 of user:password. {{$basicAuth(email, password)}}
$jwtPayload, secret, algorithm (optional)A JWT of the JSON payload, signed with the secret: HS256 unless you choose HS384 or HS512. {{$jwt('{"sub": "heidi"}', jwtSecret)}}

Hashes and signatures

Each hash takes the text and, optionally, the output: 'hex' (the default), 'base64' or 'base64url'. Each HMAC takes the key, the message and, optionally, the output.

ValueArgumentsWhat it gives
$md5Text, outputThe MD5 of the text. {{$md5('alpenglow')}}
$sha1Text, outputThe SHA-1. {{$sha1('alpenglow')}}
$sha224Text, outputThe SHA-224.
$sha256Text, outputThe SHA-256. {{$sha256($requestBody(''), 'base64')}}
$sha384Text, outputThe SHA-384.
$sha512Text, outputThe SHA-512.
$hmacMd5Key, message, outputThe HMAC-MD5 of the message with the key.
$hmacSha1Key, message, outputThe HMAC-SHA1.
$hmacSha224Key, message, outputThe HMAC-SHA224.
$hmacSha256Key, message, outputThe HMAC-SHA256. {{$hmacSha256(apiSecret, $timestamp)}}
$hmacSha384Key, message, outputThe HMAC-SHA384.
$hmacSha512Key, message, outputThe HMAC-SHA512.

Time

All of these are the moment the request is sent.

ValueArgumentsWhat it gives
$timestampnoneUnix time in seconds: 1793525000.
$timestampMsnoneUnix time in milliseconds: 1793525000123.
$isoTimestampnoneISO 8601 in UTC, with milliseconds: 2026-11-01T09:30:00.123Z.
$httpDatenoneAn HTTP date, for Date or If-Modified-Since: Sun, 01 Nov 2026 09:30:00 GMT.
$dateFormat, offset in seconds (optional), time zone (optional)The time in a Unicode date pattern, moved by the offset, in the time zone (UTC unless given). {{$date('yyyy-MM-dd')}}, {{$date('yyyy-MM-dd HH:mm', 3600, 'Europe/Zurich')}}

Random

A new value on every send.

ValueArgumentsWhat it gives
$uuidnoneA random UUID, in lower case. Also $guid and $randomUUID. {{$uuid}}
$randomIntMinimum, maximumA whole number between the two, both included. One argument is the maximum, from 0; none is 0 to 1000. {{$randomInt(1, 5)}}
$randomStringLength, characters (optional)Random characters, 16 unless given (up to 4096): letters and digits, or the characters given. {{$randomString(8, 'ABCDEF0123456789')}}
$randomHexBytesRandom bytes in hex, 16 unless given (up to 2048); twice as many digits. {{$randomHex(8)}}

Alpenglow's Create order sends Idempotency-Key: {{$uuid}}, so every order it places is a new one.

Fake data

Made-up values for request bodies, test data and mock routes: names, addresses, companies, prices, dates, lorem ipsum and more, new on every send. The names are Postman's dynamic variables, so collections that use them send real values here. In the {{ list they are under Fake Data, by group.

Arguments are optional; numbers go from -10^15 to 10^15. Mock bodies can also use $uuid (as $randomUUID), $randomInt, $randomString, $randomHex, $timestamp, $timestampMs and $isoTimestamp from Random and Time. From Terminal, echolot fake fills a template with them.

Common

ValueArgumentsWhat it gives
$randomFloatMinimum, Maximum, DecimalsA decimal number between the bounds (0 to 1000), with 2 decimals unless told otherwise.
$randomDigitsLengthA string of random digits, 6 unless a length is given.
$randomBooleannonetrue or false.
$randomElementChoicesOne of the arguments, chosen at random: $randomElement(active, paused, closed).
$randomAlphaNumericnoneOne letter or digit.
$randomColornoneA colour name: teal.
$randomHexColornoneA colour in hex: #3f8acb.
$randomAbbreviationnoneA technical abbreviation: SQL.

Names and jobs

ValueArgumentsWhat it gives
$randomFirstNamenoneA first name: Amelia.
$randomLastNamenoneA last name: Okafor.
$randomFullNamenoneA first and last name: Amelia Okafor.
$randomNamePrefixnoneMr., Ms., Dr.…
$randomNameSuffixnoneJr., PhD…
$randomJobAreanoneMobility, Security…
$randomJobDescriptornoneLead, Senior…
$randomJobTitlenoneSenior Security Engineer.
$randomJobTypenoneEngineer, Designer…

Internet

ValueArgumentsWhat it gives
$randomEmailnoneAn email address: amelia.okafor@gmail.com.
$randomExampleEmailnoneAn email address at example.com, example.net or example.org.
$randomUserNamenoneA user name: amelia_okafor42.
$randomPasswordnone15 random letters and digits.
$randomUrlnonehttps://northwind.io
$randomDomainNamenonenorthwind.io
$randomDomainSuffixnonecom, io, dev…
$randomDomainWordnonenorthwind
$randomIPnoneAn IPv4 address: 192.168.14.7.
$randomIPV6noneAn IPv6 address.
$randomMACAddressnoneA MAC address: 3a:f1:0c:5e:92:b4.
$randomProtocolnonehttp or https.
$randomSemvernoneA semantic version: 2.14.3.
$randomLocalenoneA locale: de_CH.
$randomUserAgentnoneA browser's User-Agent.

Addresses and places

ValueArgumentsWhat it gives
$randomStreetNamenoneMaple Avenue
$randomStreetAddressnone42 Maple Avenue
$randomCitynoneLisbon
$randomZipCodenoneA five-digit postal code. Also $randomZip.
$randomCountrynonePortugal
$randomCountryCodenoneAn ISO 3166 country code: PT.
$randomLatitudenoneA latitude: 38.7223.
$randomLongitudenoneA longitude: -9.1393.

Phone

ValueArgumentsWhat it gives
$randomPhoneNumbernoneA phone number: 555-201-4417.
$randomPhoneNumberExtnoneA phone number with a country code: +44 555-201-4417.

Companies

ValueArgumentsWhat it gives
$randomCompanyNamenoneNorthwind Labs
$randomCompanySuffixnoneInc, LLC, GmbH…
$randomBsnonestreamline seamless platforms
$randomBsAdjectivenoneseamless
$randomBsBuzznonestreamline
$randomBsNounnoneplatforms
$randomCatchPhrasenoneAdaptive real-time framework
$randomCatchPhraseAdjectivenoneAdaptive
$randomCatchPhraseDescriptornonereal-time
$randomCatchPhraseNounnoneframework

Finance

ValueArgumentsWhat it gives
$randomPriceMinimum, MaximumA price with two decimals, 1 to 1000 unless bounds are given.
$randomCurrencyCodenoneEUR
$randomCurrencyNamenoneEuro
$randomCurrencySymbolnone€
$randomBankAccountnoneAn 8-digit account number.
$randomBankAccountNamenoneSavings Account
$randomBankAccountIbannoneAn IBAN with valid check digits.
$randomBankAccountBicnoneA BIC (SWIFT code).
$randomCreditCardMasknoneThe last four digits of a card.
$randomTransactionTypenonedeposit, payment, refund…
$randomBitcoinnoneA made-up bitcoin address.

Shops and products

ValueArgumentsWhat it gives
$randomProductnoneChair
$randomProductNamenoneErgonomic Wooden Chair
$randomProductAdjectivenoneErgonomic
$randomProductMaterialnoneWooden
$randomDepartmentnoneGarden

Dates

ValueArgumentsWhat it gives
$randomDatePastnoneA moment in the past year, ISO 8601.
$randomDateFuturenoneA moment in the next year, ISO 8601.
$randomDateRecentnoneA moment in the past two days, ISO 8601.
$randomDatenoneA day in the past year: 2026-03-14.
$randomWeekdaynoneTuesday
$randomMonthnoneMarch

Words

ValueArgumentsWhat it gives
$randomWordnoneA word.
$randomWordsCountA few words, 3 unless a count is given.
$randomNounnonerouter
$randomVerbnonecompile
$randomIngverbnonecompiling
$randomAdjectivenonewireless
$randomPhrasenoneA short phrase made of the words above.

Lorem ipsum

ValueArgumentsWhat it gives
$randomLoremWordnonedolor
$randomLoremWordsCountLorem words, 3 unless a count is given.
$randomLoremSentencenoneOne sentence.
$randomLoremSentencesCountA few sentences, 2 to 6 unless a count is given.
$randomLoremParagraphnoneOne paragraph.
$randomLoremParagraphsCountParagraphs, 3 unless a count is given.
$randomLoremTextnoneA sentence or a few.
$randomLoremSlugnonedolor-sit-amet
$randomLoremLinesnoneA few sentences, one per line.

Files

ValueArgumentsWhat it gives
$randomFileNamenonerouter_matrix.pdf
$randomFileTypenoneimage, text, video…
$randomFileExtnonepdf
$randomCommonFileNamenoneA file name with a common extension.
$randomCommonFileTypenoneimage, video, text…
$randomCommonFileExtnonepng
$randomFilePathnone/var/reports/router_matrix.pdf
$randomDirectoryPathnone/var/reports
$randomMimeTypenoneapplication/pdf

Images

ValueArgumentsWhat it gives
$randomAvatarImagenoneThe address of an avatar picture.
$randomImageUrlnoneThe address of a 640×480 picture.
$randomAbstractImagenoneThe address of a 640×480 picture on the topic abstract. The other topics: $randomAnimalsImage, $randomBusinessImage, $randomCatsImage, $randomCityImage, $randomFoodImage, $randomNightlifeImage, $randomFashionImage, $randomPeopleImage, $randomNatureImage, $randomSportsImage, $randomTransportImage.
$randomImageDataUrinoneA small SVG picture as a data: URI.

Databases

ValueArgumentsWhat it gives
$randomDatabaseColumnnonecreatedAt
$randomDatabaseTypenonevarchar
$randomDatabaseCollationnoneutf8mb4_unicode_ci
$randomDatabaseEnginenoneInnoDB

Text

ValueArgumentsWhat it gives
$lowercaseTextThe text in lower case. {{$lowercase(email)}}
$uppercaseTextThe text in upper case. {{$uppercase(productId)}}
$trimTextThe text without spaces and line breaks at either end. {{$trim($responseBody('auth/who-am-i'))}}

Files and the system

ValueArgumentsWhat it gives
$filePathThe contents of a file: a path relative to the workspace, or an absolute one. {{$file('fixtures/order.json')}}
$envNameAn environment variable of the Echolot process. {{$env('HOME')}}

Dynamic values and agents

When an AI agent sends a request (through Echolot's MCP server or the Assistant), $env gives nothing, and $file reads only files inside the workspace. Secret values never reach the agent. See agents.

On this page