Attest tools · dev_utils

Developer utilities: cron, regex, UUID, slug and JSON

a task needs one of the small developer answers that would otherwise cost a round trip to a web tool: the next times a cron expression fires (in a named time zone and in UTC, with a plain-English reading and a note on…

Free per successful callPOST /api/v1/dev

Bearer key · JSON

POST /api/v1/dev

curl -s -X POST https://getattest.com.au/api/v1/dev \
  -H "authorization: Bearer $ATTEST_API_KEY" \
  -H "content-type: application/json" \
  -d '{"operation":"slugify","text":"Attest Tools: one key, one balance"}'

Send the key as a bearer token in the authorization header. One key and one credit balance cover every service, including Attest Capture. A failed call is refunded automatically. No key yet? POST /api/v1/keys issues one with 25 free credits and no signup — see the key guide.

Captured 2026-09-21

Example

This request was run against the running service on 2026-09-21 and the response below is what came back, unedited.

Request JSON

{
  "operation": "slugify",
  "text": "Attest Tools: one key, one balance"
}

Captured response JSON

{
  "call_id": "5a728f7c-b49b-4ce9-be77-f87b9fc6d800",
  "operation": "slugify",
  "slug": "attest-tools-one-key-one-balance",
  "unicode_slug": "attest-tools-one-key-one-balance",
  "separator": "-",
  "max_length": 80,
  "length": 32,
  "truncated": false,
  "source_length": 34,
  "non_latin_scripts": [],
  "limits": {
    "max_text_length": 10000,
    "max_slug_length": 1000
  },
  "source": "Unicode normalisation from this runtime's ICU (Unicode 16.0), plus the transliteration map in lib/dev_utils-slug.mjs.",
  "notes": [
    "Accents are folded with Unicode NFKD (é to e, ½ to 1-2); letters with no decomposition (ß, æ, ø, đ, þ, ł) use a small built-in map. Symbols are removed rather than spelled out, so \"Tom & Jerry\" becomes tom-jerry, not tom-and-jerry."
  ],
  "notice": "General information only, computed from the caller's own input. Nothing sent here is stored.",
  "checked_at": "2026-09-20T16:55:56.819Z",
  "credits_charged": 0,
  "credits_remaining": 9996
}

For agents

Use when

Use this when a task needs one of the small developer answers that would otherwise cost a round trip to a web tool: the next times a cron expression fires (in a named time zone and in UTC, with a plain-English reading and a note on which non-standard extensions it uses), what a regular expression matches in a piece of text (run on RE2, so no pattern can backtrack its way into exponential time, and a pattern whose compiled program is too large for the input it was given is refused rather than run), fresh UUIDs (version 4, or time-ordered version 7), a URL slug for a title, or JSON pretty-printed, minified or key-sorted with the line and column of a syntax error. Free, and no data is kept.

15 fields

Input

Scroll the table horizontally to see all fields.

Field / Type / Required / What it does
FieldTypeRequiredWhat it does
operationstringRequiredOne of cron_next_runs, regex_test, uuid, slugify, json_format. Each one reads its own further fields.
expressionstringOptionalThe cron expression, for cron_next_runs.
timezonestringOptionalIANA time zone name for cron_next_runs, such as Europe/London. Defaults to UTC.
startstringOptionalISO instant to start the cron walk from, for cron_next_runs.
countintegerOptionalHow many cron runs, or how many UUIDs, to return.
patternstringOptionalThe regular expression, for regex_test. Run on RE2.
flagsstringOptionalDistinct letters from i, m, s and u, for regex_test.
inputstringOptionalThe text to run the pattern over, for regex_test.
limitintegerOptionalMaximum matches to return, for regex_test.
versionintegerOptional4 (random) or 7 (time-ordered), for uuid. Defaults to 4.
textstringOptionalThe title to slugify, or the JSON document to format.
max_lengthintegerOptionalCap on the slug length, for slugify.
separatorstringOptionalThe slug separator. Defaults to a hyphen.
indentintegerOptionalSpaces per level for json_format; 0 minifies.
sort_keysbooleanOptionalSort object keys, for json_format.

HTTP 200

Response

Every successful response also carries call_id (your receipt for the charge), credits_charged and credits_remaining.

Scroll the table horizontally to see all fields.

Field / What it holds
FieldWhat it holds
operationThe operation that ran.
next_runsThe next fire times, in the named zone and in UTC (cron_next_runs).
normalizedThe cron expression as the parser read it (cron_next_runs).
matchesThe matches found, with their groups and offsets (regex_test).
engineThe regex engine and version that ran the pattern (regex_test).
program_sizeThe compiled program size RE2 produced, which is what the cost guard measures (regex_test).
uuidsThe generated UUIDs (uuid).
slugThe ASCII slug (slugify).
unicode_slugThe slug with non-Latin scripts kept (slugify).
textThe formatted JSON document (json_format).
limitsThe caps this operation applied.
noticeThat the answer is computed from the caller's own input and nothing is stored.

Machine-readable failures

Errors

Errors return JSON such as {"error":"invalid_api_key"}. A failed call is refunded automatically.

Scroll the table horizontally to see all fields.

Code / Status / Meaning
CodeStatusMeaning
operation_required400No operation was named; the response lists the supported ones.
invalid_operation400operation is not one of the supported names.
invalid_cron400expression is not a cron expression the parser accepts.
invalid_timezone400timezone is not an IANA time zone name.
invalid_start400start is not an ISO instant with a zone.
invalid_pattern400pattern is not valid RE2 syntax.
unsupported_regex400The pattern uses lookaround, backreferences, atomic groups or possessive quantifiers, which RE2 does not have.
pattern_too_costly400The compiled program multiplied by the input length is past the work cap; the pattern is refused rather than run.
invalid_flags400flags is not a string of distinct supported letters.
invalid_version400version is not 4 or 7.
invalid_json400text is not valid JSON; the response carries the line and column.
json_too_deep400The JSON document nests deeper than the cap.
output_too_large400The formatted document is larger than the response cap.

On every service

Scroll the table horizontally to see all fields.

Code / Status / Meaning
CodeStatusMeaning
invalid_api_key401The authorization header is missing or the key is unknown.
insufficient_credits402The balance is below this call's cost. The response carries credits_required and credits_remaining.
rate_limit_exceeded429Free keys share 10 calls a minute across every service. The response carries limit and window_seconds.
services_unavailable503The credit store could not be reached. Retry once after 30 seconds.

Where the answer comes from

Source and scope

cron-parser 5.10.1 (MIT) over the IANA time zone database built into the runtime; RE2 via re2js 2.8.6 (MIT).

Attest reports what it read, with the source it read it from. It is general information, not advice, and not a legal record.

All Attest tools · Service list as JSON · OpenAPI

Same key as every Attest tool

One key. One balance. Free a call.

Issue a free key, then use it here, on Attest Capture and on every other tool in the box.

Get a free key