Transform - Encoding

Free Base58 Decode API Endpoint

The free Base58 decode API endpoint takes a Base58 string in a POST body and gives you the original bytes back. There is no key, no account and no signup. One thing sets it apart from the other decoders here, and it is worth knowing before you write a line of client code.

  • No API key
  • Always octet-stream
  • Ignores Accept
  • One POST request

Decode

POST/base58_decode

https://aisenseapi.com/services/v1/base58_decode

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 world

A 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 world

Need 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."}
FieldTypeDescription
errorstringReturned 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"}' | xxd
00000000: 0000 4869                                ..Hi

That 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.