Skip to content

REST API · OpenAPI 3.1 · MCP server

Every tool, for your code and your agents.

The checks behind each PayOps Kit page are a keyless REST API and a remote MCP server: the same code, the same answers. Nothing to sign up for and nothing stored.

  • No key, no account
  • About 120 requests a minute
  • Inputs never stored or logged

REST in one linehttps://payopskit.com/api/v1

GET checks one value; POST {"values": [...]} checks up to 500. JSON in, JSON out.

curl
curl -s 'https://payopskit.com/api/v1/iban/DE89370400440532013000'
curl
curl -s 'https://payopskit.com/api/v1/business-days?calendar=us-fed&op=add&date=2026-07-02&n=1'

Connect an agent over MCPhttps://payopskit.com/mcp

Streamable HTTP, stateless, no authentication. Add it to your client, then ask in plain words: “which bank is routing number 021000021?”

claude mcp add --transport http payops-kit https://payopskit.com/mcp

Claude Desktop and claude.ai: Settings → Connectors → Add custom connector, and paste the URL.

Machine-readable:OpenAPI 3.1 (/openapi.json)llms.txtAPI index (/api/v1)

MCP

12 tools, all read-only

Each tool returns its result as JSON text and as structuredContent. A parameter the tool can’t use comes back as a result with isError: true and a message saying what to change; arguments that don’t fit the input schema are a JSON-RPC -32602 error.

validate_routing_numberRead-only

Validate a US routing number

Validate a US ABA routing transit number (9 digits) with the 3-7-1 check-digit algorithm, or compute the check digit when given only the first 8 digits. Also decodes the Federal Reserve routing symbol (first two digits): 00 U.S. Government; 01–12 a Federal Reserve district (Reserve Bank and city); 21–32 thrift institutions; 61–72 electronic transactions; 80 traveler's checks; any other prefix is unassigned (invalid). For a valid number it also returns the bank (name, city/state, active or closed; a merged bank's number under the successor that holds it, the closed bank as formerly; source and as-of date) when the public data has it, else bank: null and bankLookup.reason: see lookup_bank_by_routing_number. A correct check digit does not prove the number is in use. Spaces and hyphens are ignored. The input is never stored or logged.

routing_numberrequired
8 digits (compute the check digit) or 9 digits (validate), e.g. "021000021".
tools/call over HTTP
curl -s -X POST 'https://payopskit.com/mcp' \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json, text/event-stream' \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"validate_routing_number","arguments":{"routing_number":"021000021"}}}'

REST twin: /api/v1/routing-number/{value}

lookup_bank_by_routing_numberRead-only

Look up the bank for a US routing number

Which bank a US ABA routing number belongs to: legal name, headquarters city and state, active or closed (with the closing date); a merged bank's number is named for the active successor that holds it now, with the closed bank as formerly. Also the brand and uses (wire, ACH, checks; states) the bank lists it for, and the source with its as-of date. The number is checked first (3-7-1 checksum; 8 digits complete it); an invalid one is not looked up. Data: primary routing numbers from FFIEC Call Reports joined to FDIC BankFind, plus the routing numbers banks publish on their own websites; NOT the Federal Reserve's E-Payments Routing Directory, so many valid numbers (a bank's other ACH or state numbers, acquired banks' numbers, credit unions) are missing: then bank is null and bankLookup says why (not_listed) and links the Fed directory. Confirm with the receiving bank or the Fed directory before sending funds. The input is never stored or logged.

routing_numberrequired
9 digits, e.g. "021000021" (8 digits: the check digit is computed first).
tools/call over HTTP
curl -s -X POST 'https://payopskit.com/mcp' \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json, text/event-stream' \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"lookup_bank_by_routing_number","arguments":{"routing_number":"021000021"}}}'

REST twin: /api/v1/routing-number/{value}

validate_ibanRead-only

Validate an IBAN

Validate an IBAN (electronic or print format; spaces allowed) against the SWIFT IBAN Registry: country code, length, BBAN structure and the ISO 7064 mod-97 check digits. Returns the electronic and print formats, the expected check digits, the country and its SEPA membership, the bank and branch codes where the registry positions are known, and every problem found. Valid means well formed — not that the account exists or can receive payments; national check digits inside the BBAN are not verified. The input is never stored or logged.

ibanrequired
The IBAN, e.g. "DE89 3704 0044 0532 0130 00".
tools/call over HTTP
curl -s -X POST 'https://payopskit.com/mcp' \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json, text/event-stream' \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"validate_iban","arguments":{"iban":"DE89370400440532013000"}}}'

REST twin: /api/v1/iban/{value}

compute_iban_check_digitsRead-only

Compute IBAN check digits

Compute the two IBAN check digits (ISO 7064 mod 97-10) for a country code and a BBAN — the domestic account identifier that follows the check digits — and return the complete IBAN in electronic and print formats. Reports an error when the country has no IBAN or the BBAN doesn't match the country's registry structure.

countryrequired
ISO 3166 country code of the IBAN, e.g. "DE".
bbanrequired
The BBAN, e.g. "370400440532013000" (spaces allowed).
tools/call over HTTP
curl -s -X POST 'https://payopskit.com/mcp' \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json, text/event-stream' \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"compute_iban_check_digits","arguments":{"country":"DE","bban":"370400440532013000"}}}'

REST twin: /api/v1/iban/check-digits

parse_bicRead-only

Parse a BIC / SWIFT code

Parse and format-check a BIC / SWIFT code (ISO 9362; 8 or 11 characters): institution code, ISO 3166 country, location code and branch code. Flags test & training BICs (location ends in 0), passive participants (ends in 1, not connected to the SWIFT network) and reverse billing (ends in 2); branch XXX or a BIC8 is the head office; returns both the BIC8 and BIC11 forms. Format check only: it cannot tell whether a BIC is registered (SWIFT's BIC directory is not used).

bicrequired
The BIC, e.g. "DEUTDEFF" or "DEUTDEFF500".
tools/call over HTTP
curl -s -X POST 'https://payopskit.com/mcp' \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json, text/event-stream' \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"parse_bic","arguments":{"bic":"DEUTDEFF500"}}}'

REST twin: /api/v1/bic/{value}

business_day_mathRead-only

Business-day arithmetic

Banking-day arithmetic on a bank holiday calendar. Calendars: us-fed (Federal Reserve Banks — FedACH and Fedwire; a Sunday holiday is observed Monday, a Saturday holiday is NOT observed), target2 (ECB TARGET closing days for EUR: Jan 1, Good Friday, Easter Monday, May 1, Dec 25, Dec 26), uk-ew (England & Wales bank holidays with substitute days). Operations: is-business-day; next / previous = the first business day strictly after / before date; add / subtract = move n business days (n 0–2000; add from Friday by 1 gives Monday); count = business days in (date, end_date], negative when end_date is earlier. Returns the answer, a one-line explanation and the holidays in range (the first 100; holidaysInRangeTotal counts them all). Unscheduled closures and future one-off proclamations are not known.

calendarrequired
Banking calendar: us-fed = Federal Reserve Banks (FedACH, Fedwire); target2 = ECB TARGET closing days (EUR); uk-ew = England & Wales bank holidays. One of: us-fed, target2, uk-ew.
operationrequired
What to compute. One of: is-business-day, next, previous, add, subtract, count.
daterequired
Start date, YYYY-MM-DD.
noptional
Business days to move (add, subtract).
end_dateoptional
The other end for count, YYYY-MM-DD.
tools/call over HTTP
curl -s -X POST 'https://payopskit.com/mcp' \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json, text/event-stream' \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"business_day_math","arguments":{"calendar":"us-fed","operation":"add","date":"2026-07-02","n":1}}}'

REST twin: /api/v1/business-days

list_bank_holidaysRead-only

List bank holidays

List the holidays (weekdays the calendar is closed) of a banking calendar for one year, with observed and substitute days, the holidays that close no weekday (for example a Fed holiday on a Saturday: the Federal Reserve Banks are open the Friday before) and the calendar caveats. Calendars: us-fed (years 1990–2099), target2 (2002–2099), uk-ew (1995–2099, with the known one-off proclamations).

calendarrequired
Banking calendar: us-fed = Federal Reserve Banks (FedACH, Fedwire); target2 = ECB TARGET closing days (EUR); uk-ew = England & Wales bank holidays. One of: us-fed, target2, uk-ew.
yearrequired
Calendar year, e.g. 2026.
tools/call over HTTP
curl -s -X POST 'https://payopskit.com/mcp' \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json, text/event-stream' \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"list_bank_holidays","arguments":{"calendar":"us-fed","year":2026}}}'

REST twin: /api/v1/holidays

ach_settlement_dateRead-only

ACH settlement date

When a US ACH entry settles on FedACH, from its submission time (Eastern Time wall clock; omitted = the current time in New York) and Effective Entry Date (default: the submission date). Applies the Same Day ACH windows (deposit deadlines 10:30 a.m., 2:45 p.m. and 4:45 p.m. ET; settlement 1:00, 5:00 and 6:00 p.m. ET), IAT ineligibility (sec_code) and the per-payment limit (amount): $1,000,000 per payment (rising to $10,000,000 for entries submitted on or after September 17, 2027). Earlier submission dates get the rules then in force: no Same Day ACH before September 23, 2016, two windows before March 19, 2021, a $25,000 limit before March 20, 2020 and $100,000 before March 18, 2022. Otherwise next-day or future-dated settlement at 8:30 a.m. ET, on the Federal Reserve banking calendar. Returns the settlement date and time, the window used, the state of each window, the limit applied and an explanation. Informational: ODFIs set earlier cutoffs; not a substitute for the Nacha Operating Rules, your ACH Operator schedule or your ODFI agreement.

submitted_atoptional
File submission time as Eastern Time wall clock, YYYY-MM-DDTHH:MM (no offset). Omitted = now.
effective_dateoptional
Effective Entry Date, YYYY-MM-DD. Default: the submission date.
amountoptional
Payment amount in USD (Same Day ACH limit check). Omitted = assumed within the limit.
sec_codeoptional
SEC code, e.g. "PPD"; IAT is not Same Day eligible.
tools/call over HTTP
curl -s -X POST 'https://payopskit.com/mcp' \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json, text/event-stream' \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"ach_settlement_date","arguments":{"submitted_at":"2026-10-29T10:15","effective_date":"2026-10-29","amount":"2500.00","sec_code":"PPD"}}}'

REST twin: /api/v1/ach/settlement

ach_return_deadlineRead-only

ACH return, NOC and reversal deadlines

ACH deadlines counted from a settlement date on the Federal Reserve banking calendar. With a return reason code (R01–R85): its return deadline — generally 2 banking days; 60 calendar days for extended returns (unauthorized consumer debits R05, R07, R10, R11, R37, R51, R53, and R33, R38, R52). With a NOC code (C01–C14, refused C61–C69): the NOC timing. Always also returns the standard return, extended return, NOC and reversal (5 banking days after settlement, Nacha Rules §2.8/§2.9) windows. For dishonored (R61, R62, R67–R70) and contested (R71–R77) codes pass the return's or dishonored return's settlement date: the four windows count from an original entry's, so windowsApply is then false. Informational, not a substitute for the Nacha Operating Rules or your ODFI agreement.

settlement_daterequired
Settlement date of the original entry; for dishonored codes (R61, R62, R67–R70) the return entry's; for contested codes (R71–R77) the dishonored return's. YYYY-MM-DD.
codeoptional
Return reason code (e.g. "R10") or NOC code (e.g. "C01").
tools/call over HTTP
curl -s -X POST 'https://payopskit.com/mcp' \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json, text/event-stream' \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"ach_return_deadline","arguments":{"settlement_date":"2026-10-29","code":"R10"}}}'

REST twin: /api/v1/ach/return-deadline

lookup_payment_codeRead-only

Look up a payment code

Look up or search payment codes: ACH return reason codes (R01–R85, with return timeframe and consumer/corporate notes), ACH NOC codes (C01–C14 and refused C61–C69), ACH SEC codes, ISO 20022 ExternalStatusReason1Code (a common set, e.g. AC01, AC04, AM04, MS03, RR04) and ISO 4217 currencies with minor units (alphabetic or numeric code). Pass code for an exact lookup, or query for a ranked text search ("insufficient funds"); set narrows either, and set alone lists the whole set (or its first limit rows when limit is given). limit caps search results (1–100, default 20).

codeoptional
Exact code, e.g. "R01", "C02", "PPD", "AM04", "USD" or "840".
queryoptional
Words to search for in codes, names and descriptions.
setoptional
Code set to search or list. One of: ach-return, ach-noc, ach-sec, iso20022-status, iso4217.
limitoptional
Most search results to return (default 20).
tools/call over HTTP
curl -s -X POST 'https://payopskit.com/mcp' \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json, text/event-stream' \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"lookup_payment_code","arguments":{"code":"R10"}}}'

REST twin: /api/v1/codes

validate_identifierRead-only

Validate a finance identifier

Check the structure and check digit of a finance identifier: LEI (ISO 17442, mod 97-10), ISIN (ISO 6166, including the embedded CUSIP or SEDOL of US, CA, GB and IE ISINs), CUSIP, SEDOL, or a Luhn number such as a payment card number. type defaults to auto-detection by shape. Card numbers are masked in the result (first 6 and last 4 digits) and never stored or logged — still, use test numbers, not live cards. Check digits only: it does not confirm that an identifier has been allocated.

valuerequired
The identifier, e.g. "US0378331005" or "529900T8BM49AURSDO55".
typeoptional
Identifier type; default auto. One of: auto, lei, isin, cusip, sedol, luhn.
tools/call over HTTP
curl -s -X POST 'https://payopskit.com/mcp' \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json, text/event-stream' \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"validate_identifier","arguments":{"value":"US0378331005"}}}'

REST twin: /api/v1/identifier/{value}

amount_to_wordsRead-only

Check amount in words

Write a US dollar amount in words for the legal line of a check — 1234.56 gives "One thousand two hundred thirty-four and 56/100 dollars" — and optionally cross-check words someone wrote against the figure (valid is false when they differ). Amounts from 0 to 999,999,999,999,999.99 with at most 2 decimals; never rounds. Send 10,000,000,000,000 or more as a string: a JSON number that large cannot carry its cents exactly.

amountrequired
The figure, e.g. "1234.56" or "$1,234.56". Send 10,000,000,000,000 or more as a string, not a number.
wordsoptional
Words to cross-check against the figure.
tools/call over HTTP
curl -s -X POST 'https://payopskit.com/mcp' \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json, text/event-stream' \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"amount_to_words","arguments":{"amount":"1234.56"}}}'

REST twin: /api/v1/check-amount

REST

Endpoints

Base URL https://payopskit.com/api/v1. Path segments are URL-encoded (a space is %20); query parameters use snake_case like the MCP arguments.

Meta

GET/api/v1

API index

Name, version, the docs, OpenAPI and MCP URLs, and every endpoint.

curl
curl -s 'https://payopskit.com/api/v1'

Routing numbers

GET/api/v1/routing-number/{value}

Validate a routing number

ABA 3-7-1 check digit (8 digits compute it), Federal Reserve routing symbol and district, and the bank (bank, bankLookup) from public FFIEC/FDIC data and banks' own published lists, not the Fed E-Payments Routing Directory: confirm with the receiving bank before sending funds.

valuepath · required
8 or 9 digits; spaces and hyphens are ignored.
curl
curl -s 'https://payopskit.com/api/v1/routing-number/021000021'

Same answer over MCP: validate_routing_number

POST/api/v1/routing-number

Validate routing numbers (batch)

Up to 500 values per request; results in input order, each with its bank. Banks are looked up for at most 40 different routing symbols (first four digits) per request; numbers past that get bank: null with bankLookup.reason "limit_reached".

valuesbody · required
JSON body: an array of 1–500 strings.
curl
curl -s -X POST 'https://payopskit.com/api/v1/routing-number' \
  -H 'Content-Type: application/json' \
  -d '{
  "values": [
    "021000021",
    "011000015",
    "02100002"
  ]
}'

Same answer over MCP: validate_routing_number

IBAN

GET/api/v1/iban/check-digits

Compute IBAN check digits

The two check digits for a country and BBAN, and the complete IBAN.

countryquery · required
ISO 3166 country code, e.g. DE.
bbanquery · required
The BBAN (domestic account identifier).
curl
curl -s 'https://payopskit.com/api/v1/iban/check-digits?country=DE&bban=370400440532013000'

Same answer over MCP: compute_iban_check_digits

GET/api/v1/iban/countries

IBAN country table

The SWIFT IBAN Registry countries: length, BBAN structure, SEPA membership, bank/branch positions, example.

curl
curl -s 'https://payopskit.com/api/v1/iban/countries'
GET/api/v1/iban/{value}

Validate an IBAN

Country, length, BBAN structure and mod-97 check digits; electronic and print formats; bank and branch codes.

valuepath · required
The IBAN; URL-encode spaces (%20) or leave them out.
curl
curl -s 'https://payopskit.com/api/v1/iban/DE89370400440532013000'

Same answer over MCP: validate_iban

POST/api/v1/iban

Validate IBANs (batch)

Up to 500 values per request; results in input order.

valuesbody · required
JSON body: an array of 1–500 strings.
curl
curl -s -X POST 'https://payopskit.com/api/v1/iban' \
  -H 'Content-Type: application/json' \
  -d '{
  "values": [
    "DE89370400440532013000",
    "GB29 NWBK 6016 1331 9268 19"
  ]
}'

Same answer over MCP: validate_iban

BIC

GET/api/v1/bic/{value}

Parse a BIC

Institution, country, location and branch codes; test, passive and head-office flags; BIC8 and BIC11.

valuepath · required
BIC8 or BIC11.
curl
curl -s 'https://payopskit.com/api/v1/bic/DEUTDEFF500'

Same answer over MCP: parse_bic

POST/api/v1/bic

Parse BICs (batch)

Up to 500 values per request; results in input order.

valuesbody · required
JSON body: an array of 1–500 strings.
curl
curl -s -X POST 'https://payopskit.com/api/v1/bic' \
  -H 'Content-Type: application/json' \
  -d '{
  "values": [
    "DEUTDEFF",
    "NWBKGB2L",
    "CHASUS33XXX"
  ]
}'

Same answer over MCP: parse_bic

Business days

GET/api/v1/business-days

Business-day arithmetic

is-business-day, next, previous, add, subtract or count on the us-fed, target2 or uk-ew calendar. count = business days in (date, end_date].

calendarquery · required
us-fed, target2 or uk-ew.
opquery · required
Operation (operation is accepted too).
datequery · required
YYYY-MM-DD.
nquery · optional
Business days to move (add, subtract): 0–2000.
end_datequery · optional
Other end for count, YYYY-MM-DD.
curl
curl -s 'https://payopskit.com/api/v1/business-days?calendar=us-fed&op=add&date=2026-07-02&n=1'

Same answer over MCP: business_day_math

GET/api/v1/holidays

Bank holidays for a year

Closing weekdays with observed and substitute days; format=ics answers an iCalendar file instead of JSON.

calendarquery · required
us-fed, target2 or uk-ew.
yearquery · required
Four-digit year.
formatquery · optional
json (default) or ics.
curl
curl -s 'https://payopskit.com/api/v1/holidays?calendar=us-fed&year=2026'

Same answer over MCP: list_bank_holidays

GET/api/v1/calendars

Supported calendars

Each calendar with its rules, caveats and year range.

curl
curl -s 'https://payopskit.com/api/v1/calendars'

ACH

GET/api/v1/ach/settlement

ACH settlement date

Same Day ACH window or next-day settlement on FedACH for a submission time (Eastern Time) and effective date, under the Same Day ACH rules in force on the submission date. Informational only.

submitted_atquery · optional
YYYY-MM-DDTHH:MM Eastern Time wall clock; omitted = now.
effective_datequery · optional
YYYY-MM-DD; default the submission date.
amountquery · optional
USD amount for the Same Day limit: $1,000,000 per payment ($10,000,000 for entries submitted on or after September 17, 2027).
sec_codequery · optional
SEC code; IAT is not Same Day eligible.
curl
curl -s 'https://payopskit.com/api/v1/ach/settlement?submitted_at=2026-10-29T10%3A15&effective_date=2026-10-29&amount=2500.00&sec_code=PPD'

Same answer over MCP: ach_settlement_date

GET/api/v1/ach/return-deadline

ACH return, NOC and reversal deadlines

The deadline for a return or NOC code, plus the standard, extended, NOC and reversal windows. For dishonored (R61, R62, R67–R70) and contested (R71–R77) codes pass the return's or dishonored return's settlement date; the four windows count from an original entry's, so windowsApply is then false. Informational only.

settlement_datequery · required
Settlement date of the original entry; for dishonored codes (R61, R62, R67–R70) the return entry's; for contested codes (R71–R77) the dishonored return's. YYYY-MM-DD.
codequery · optional
Return reason code (R01–R85) or NOC code (C01–C14, C61–C69).
curl
curl -s 'https://payopskit.com/api/v1/ach/return-deadline?settlement_date=2026-10-29&code=R10'

Same answer over MCP: ach_return_deadline

Codes

GET/api/v1/codes

Search payment codes

Ranked search over ACH return, NOC and SEC codes, ISO 20022 status reasons and ISO 4217 currencies.

qquery · optional
Search words (at most 200 characters); omit to list the set.
setquery · optional
Code set to search.
limitquery · optional
1–100, default 20; without q, the whole set is listed unless limit is given.
curl
curl -s 'https://payopskit.com/api/v1/codes?q=insufficient'

Same answer over MCP: lookup_payment_code

GET/api/v1/codes/{code}

Look up a payment code

Exact, case-insensitive match in every set (or one); 404 when no set has the code.

codepath · required
R01, C02, PPD, AM04, USD, 840, …
setquery · optional
Restrict to one code set.
curl
curl -s 'https://payopskit.com/api/v1/codes/R01'

Same answer over MCP: lookup_payment_code

Identifiers

GET/api/v1/identifier/{value}

Validate a finance identifier

LEI, ISIN, CUSIP, SEDOL or Luhn check digit, auto-detected by shape unless type is given. Card numbers are masked.

valuepath · required
The identifier.
typequery · optional
auto (default), lei, isin, cusip, sedol or luhn.
curl
curl -s 'https://payopskit.com/api/v1/identifier/US0378331005'

Same answer over MCP: validate_identifier

POST/api/v1/identifier

Validate identifiers (batch)

Up to 500 values per request; an optional type applies to all of them.

valuesbody · required
JSON body: an array of 1–500 strings.
typebody · optional
JSON body: auto (default), lei, isin, cusip, sedol or luhn, for every value.
curl
curl -s -X POST 'https://payopskit.com/api/v1/identifier' \
  -H 'Content-Type: application/json' \
  -d '{
  "values": [
    "529900T8BM49AURSDO55",
    "US0378331005",
    "037833100",
    "0263494"
  ]
}'

Same answer over MCP: validate_identifier

Check amount

GET/api/v1/check-amount

Amount in words

The legal line of a check for a USD amount; with words, a cross-check against the figure.

amountquery · required
USD amount, up to 2 decimals.
wordsquery · optional
Words to cross-check.
curl
curl -s 'https://payopskit.com/api/v1/check-amount?amount=1234.56'

Same answer over MCP: amount_to_words

Errors

One error shape

Every 4xx and 5xx under /api/v1 has the same body.

400 Bad Request
{
  "error": {
    "code": "invalid_date",
    "message": "date must be a real date in YYYY-MM-DD form, like 2026-07-03.",
    "param": "date"
  }
}
200
The check ran. An invalid value is still a 200 with "valid": false and the problems in "errors".
400
The request has to change: a missing or unusable parameter (missing_parameter, invalid_date, unknown_calendar, …), a body that isn’t JSON, or too many values.
404
No such endpoint, or no such payment code (GET /api/v1/codes/{code}).
405
Wrong method; the Allow header names the right one.
413
Request body over 64 KB.
429
Over about 120 requests a minute from one visitor; wait the Retry-After seconds.

Fair use

Limits and privacy

Rate limit

About 120 requests a minute per visitor (an IPv4 address or an IPv6 /64), REST and MCP together; each tools/call in an MCP batch counts as one. Beyond that: 429 with Retry-After.

Request size

Bodies up to 64 KB and 500 values per batch; MCP batch arrays up to 10 messages (none under protocol 2025-06-18). Banks are looked up for up to 40 routing symbols per request. OpenAPI and llms.txt are not rate-limited.

Nothing kept

Inputs are processed in memory for one response, then discarded: never stored, never logged. Only anonymous per-tool call counters exist.

Open CORS, no keys

Browsers may call the API, MCP, OpenAPI and llms.txt from any origin. The site’s pages keep their strict same-origin policy.

Informational answers

A valid format or check digit does not prove an account, BIC or identifier is live, and the ACH timing is not a substitute for the Nacha Operating Rules, your ACH Operator’s schedule or your ODFI agreement. Bank names for routing numbers come from public FFIEC/FDIC data and banks’ own published lists, each with its source and date, not from the Federal Reserve’s E-Payments Routing Directory: many valid numbers are missing (bank: null, bankLookup.reason: "not_listed"), and a number should be confirmed with the receiving bank before funds are sent. See the privacy page and the terms.