# Base64 Transcode — strict, both alphabets, per-item errors (`telyvar/text-base64-transcode`) Actor

Encodes and decodes base64 in either alphabet. Decoding is strict: input that is not well-formed base64 is refused with a reason and a position, instead of being silently repaired into bytes you did not send.

- **URL**: https://apify.com/telyvar/text-base64-transcode.md
- **Developed by:** [Alessandro Raffa](https://apify.com/telyvar) (community)
- **Categories:** Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.20 / 1,000 item transcodeds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Base64 Transcode — strict, both alphabets, per-item errors

Encodes and decodes base64 in either alphabet. Decoding is strict: input that is not well-formed base64 is refused with a reason and a position, instead of being silently repaired into bytes you did not send.

Called as `text.base64.transcode`.

### What it accepts

One direction, one alphabet, and the strings to transcode. Every item gets its own result: a bad item is reported and not billed, and it does not stop the ones after it.

| Field | Type | Meaning |
| --- | --- | --- |
| `direction` | string | Encode turns text into base64. Decode turns base64 back into text, and refuses anything that is not well-formed. |
| `alphabet` | string | Standard uses + and / and pads with =. URL-safe uses - and \_ and no padding, which is what makes the value usable in a query string or a filename. Decoding refuses the other alphabet's characters, so a mismatch is an error rather than a surprise. |
| `items` | array | The strings to transcode, in order. Results carry the index they came from. At most 2,000 per call: at 50 ms an item that is 102 seconds, inside the platform's hard 300-second window for a synchronous call. A larger job is several calls, which is deliberate. |

### What you pay for

An item that fails is not billed, and one bad item does not stop the ones after it. Every item is charged as it is delivered, one at a time, so a spending limit stops the run at the limit rather than one batch past it.

### What would end it

Either the channel absorbs it as a free built-in function, or monthly revenue falls below the cost of keeping it running for two months in a row. Neither is a prediction: both are thresholds checked at every review.

Written before it happens, on purpose. A capability that quietly stops being worth running costs its buyers more than one that says in advance how it ends.

***

Generated from this capability's own manifest by `tools/site/build.mjs`. Do not edit it by hand: the next build overwrites it, and `pnpm site:check` fails while it disagrees with the manifest.

# Actor input Schema

## `direction` (type: `string`):

Encode turns text into base64. Decode turns base64 back into text, and refuses anything that is not well-formed.

## `alphabet` (type: `string`):

Standard uses + and / and pads with =. URL-safe uses - and \_ and no padding, which is what makes the value usable in a query string or a filename. Decoding refuses the other alphabet's characters, so a mismatch is an error rather than a surprise.

## `items` (type: `array`):

The strings to transcode, in order. Results carry the index they came from. At most 2,000 per call: at 50 ms an item that is 102 seconds, inside the platform's hard 300-second window for a synchronous call. A larger job is several calls, which is deliberate.

## Actor input object example

```json
{
  "direction": "decode",
  "alphabet": "standard",
  "items": [
    "VGVseXZhcg==",
    "VGVseXZhc$==",
    "VGVseXZhcg="
  ]
}
```

# Actor output Schema

## `results` (type: `string`):

One row per item in the order they were given, each carrying its index. A failed item is written here too, with the rule it broke and the position, so a caller can tell an item that could not be transcoded from one that was never reached.

## `report` (type: `string`):

delivered, succeeded, failed, notAttempted and stoppedEarly. notAttempted above zero with stoppedEarly true is a complete answer, not a truncated one: the caller's spending limit stopped the work and the run says how many it never reached.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "direction": "decode",
    "alphabet": "standard",
    "items": [
        "VGVseXZhcg==",
        "VGVseXZhc$==",
        "VGVseXZhcg="
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("telyvar/text-base64-transcode").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "direction": "decode",
    "alphabet": "standard",
    "items": [
        "VGVseXZhcg==",
        "VGVseXZhc$==",
        "VGVseXZhcg=",
    ],
}

# Run the Actor and wait for it to finish
run = client.actor("telyvar/text-base64-transcode").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "direction": "decode",
  "alphabet": "standard",
  "items": [
    "VGVseXZhcg==",
    "VGVseXZhc$==",
    "VGVseXZhcg="
  ]
}' |
apify call telyvar/text-base64-transcode --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,telyvar/text-base64-transcode"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/KOPa2FKhgNXteHei1/builds/GRBr8hcFptp4ygpr3/openapi.json
