Decode a Base58 string
Post the string to the free Base58 decode API endpoint in a JSON body, under the data field.
curl -X POST https://aisenseapi.com/services/v1/base58_decode \
-H "Content-Type: application/json" \
-d '{"data":"JxF12TrwXzT5jvT"}'Hello worldA raw body works just as well. The whole body is read as the Base58 string, which saves you a JSON wrapper when you are piping output from another command.
curl -X POST https://aisenseapi.com/services/v1/base58_decode \
-H "Content-Type: text/plain" \
-d 'JxF12TrwXzT5jvT'Hello worldNeed the other direction? That is a separate call to the Base58 Encode API Endpoint.
The free Base58 decode API endpoint always returns an octet stream
Every successful response carries the same two headers. There are no variants.
content-type: application/octet-stream
content-disposition: attachment; filename="decoded_data.bin"This is where people get caught. The Accept header changes nothing. Ask for application/json and you still receive the octet stream, byte for byte, under the same attachment header.
Its closest sibling does not behave this way. The Base64 Decode API Endpoint reads Accept and can answer with text/plain or with a JSON object. Porting that client code straight across is the usual cause of a parse error here. Never expect JSON from a successful base58 decode.
Two things follow in practice. A browser offers a download instead of printing the result, so command line tools are the comfortable way to use this. And you should send the body somewhere useful rather than to your terminal: add -o out.bin, or pipe it into xxd.
Errors and the alphabet
Any character the 58 symbol alphabet does not contain fails the whole request. A stray 0, a capital O, a capital I, a lowercase l or a space is enough.
curl -X POST https://aisenseapi.com/services/v1/base58_decode \
-H "Content-Type: application/json" \
-d '{"data":"Hello0"}'{"error":"Invalid Base58 input."}| Field | Type | Description |
|---|---|---|
| error | string | Returned with HTTP 400 when the input contains a character outside the alphabet. |
The failure case is the one exception to the rule above. It arrives as HTTP 400 with Content-Type: application/json, so branch on the status code and only then read the body. A 200 is bytes. A 400 is JSON.
There is no lenient mode and no auto correction. The decoder will not quietly read a capital O as a zero for you, because guessing is exactly the failure base58 exists to prevent.
Leading zero bytes survive the round trip
Base58 treats its input as one large number rather than a stream of bytes. A leading zero byte adds nothing to a number, so it would disappear. The format handles this by writing one 1 for each leading zero byte, and the decoder puts them back.
curl -s -X POST https://aisenseapi.com/services/v1/base58_decode \
-H "Content-Type: application/json" \
-d '{"data":"116Wc"}' | xxd00000000: 0000 4869 ..HiThat is four bytes: two zero bytes, then Hi. The same rule explains why a Bitcoin mainnet address begins with a 1, since its version byte is zero. If you round trip fixed width binary, count the leading 1 characters instead of trusting a length.
Common uses
Inspecting a wallet address
Decode a Bitcoin address or another base58 key export to its raw bytes, then read the version byte, the payload and the checksum yourself.
Reading IPFS CIDv0 hashes
A CIDv0 is a base58 encoded multihash. Decode it to reach the hash function prefix and the digest without pulling in a full IPFS library.
Checking a pairing code
Confirm that a code someone read aloud or typed from a screenshot resolves to the bytes you expected.
Debugging a round trip
Pipe the output into xxd to see exactly what came back, padding and all, rather than guessing from a rendered string.
Privacy and limits
Base58 is an encoding, not encryption. Anyone holding the string can decode it. Never treat a base58 value as a secret.
Your data travels in the POST body, not the URL, so it never appears in a request path or a server access log. The free Base58 decode API endpoint shares the service-wide limit of 5000 requests per IP per 24 hours, and needs no key or account.