Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Explore ByteNite Docs to learn how to build, deploy, and run distributed apps—from quick scripts to complex pipelines—at cloud scale.
ByteNite’s serverless container platform is built for high-performance teams and developers who need fast startup times, flexible compute, and a simpler path to getting things done—without the headaches of traditional cloud infrastructure.
But we don’t just host containers. We’ve designed a distributed execution fabric that eliminates cold starts, streamlines app architecture, and gives you full control over your container environments—without the overhead of managing infrastructure.
With ByteNite, you can focus on building your app and leave the heavy lifting to us:
Write your core application and fan-out/fan-in logic in the programming language you know best.
Package your dependencies using any public or private Docker container image.
Define environments and hardware specs with a lightweight manifest file.
Submit jobs that are automatically partitioned, scheduled, and executed across pre-warmed cloud runners—powered by our proprietary distributed execution fabric.
Ready to dive in? This documentation site covers everything you need, from getting started to scaling complex workloads.
Our docs are here to guide you—from first steps to advanced workloads. Whether you’re exploring tutorials, learning about core system components, or diving into API references, you’ll find everything you need to build, manage, and scale apps on ByteNite.
We’ve broken down distributed computing into a few key components to make building and managing apps simpler. To get started, check out our guide, where you’ll dive into the typical processing job's lifecycle and get an overview of each stage, learning example use cases across different data types.
Here’s a quick rundown of a typical setup:
Partitioner – Pre-processes and splits your input data into manageable chunks.
App – Runs the core logic and handles the heavy lifting of your workload.
Assembler – Merges or cleans up the output once processing is complete.
If you’re new to ByteNite, a great place to start is with our tutorials. They walk you through real examples, so you can get hands-on experience and see how everything fits together.
While it’s tempting to jump straight into building your own applications, we recommend browsing the full system guides first. They’ll help you understand the bigger picture and the components that power ByteNite.
Once you’re comfortable with how ByteNite works, the next step is diving into the guides that help you build, launch, and manage your apps effectively.
You’ll learn how to structure your workloads using ByteNite’s modular components, connect your data sources, and run distributed jobs. After that, you’ll explore the API that ties everything together—allowing you to automate job launches, manage secrets, access logs, and more.
Head over to the guides below to get the full rundown:
ByteNite’s serverless computing platform offers APIs and interfaces designed to make app development and workload management smoother at every stage.
As a ByteNite user, you have access to all our services, fully documented right here.
Below, you’ll find our user-facing components, grouped into:
UIs – For interacting with your apps, monitoring jobs, and managing configurations.
APIs – For programmatic access to launch jobs, manage data, and integrate with your workflows.
Job lifecycle: an overview of ByteNite's end-to-end workflow
At ByteNite, a typical job follows this lifecycle:
Launch Phase: The customer initiates a job via the ByteNite API, specifying the data source and configuration details. The system pulls data from various cloud storage services (AWS S3, GCP, Azure, etc.).
Create Phase: This encompasses three stages:
App: Each chunk is processed independently by the user-defined App, running the core logic (e.g., AI inference, media transcoding, data transformation).
Assembler: The assembler collects the results from each parallel execution, performs optional post-processing, and generates the final output.
Launch Phase (continued): Once the job completes, the assembled output is written back to the designated data destination (cloud storage), and the job status is finalized.
This modular flow ensures scalability, fault tolerance, and flexibility, letting you focus on building impactful applications without worrying about the underlying infrastructure.
Many applications require a pre-processing step to clean, filter, or split data into manageable chunks before core processing. ByteNite’s Partitioning Engine handles this pre-processing and task fan-out, distributing your workload across multiple parallel workers.
Whether you’re working with structured tables, unstructured media files, or semi-structured logs, ByteNite’s partitioners support a variety of fan-out strategies.
Structured Data
- Sharding by row/item count - Sharding by date range or key
Semi-Structured Data
- Key extraction and object fan-out - Log file splitting by timestamp
Unstructured Data
Text/Code - Document splitting by section or size - Codebase sharding by file/module Image - Image tiling - Batch splitting for inference Audio - Time-based audio chunking - Silence detection-based chunking - Language segment splitting Video - Frame-based video chunking - Scene detection-based chunking - Resolution-specific splitting
Any
- Task replication for redundancy - Passthrough (no fan-out)
If your workflow doesn’t require splitting data into tasks, you can use a passthrough partitioner to skip the fan-out phase.
The App represents the core logic of your distributed job—this is where the heavy lifting happens. Whether it’s AI inference, media rendering, data transformation, or scientific computation, Apps execute these workloads in parallel across the data chunks produced by the partitioner.
You bring your container image with the necessary code and dependencies; ByteNite handles the rest: container orchestration, retries, scaling, and resource management.
AI/ML
- Model inference (e.g., object detection, language models) - Model training on distributed datasets - Feature extraction pipelines
Data Processing
- ETL (Extract, Transform, Load) operations - Batch processing of logs or events - Data anonymization or sanitization
Media Processing
- Audio transcription - Image classification or enhancement - Video transcoding or thumbnail generation
Scientific Computing
- Genomic sequence analysis - Simulation workloads - Complex mathematical computations
Other
- Web scraping at scale - Document parsing and conversion - File format conversions
After core processing, results from each task may need to be collected and aggregated. The Assembling Engine performs this fan-in and post-processing, allowing you to organize or transform the results before outputting them to the final destination.
This stage can be as simple as zipping files together or as complex as reassembling a video stream.
Structured Data
- Data merging based on keys - Sorted concatenation of CSV/JSON files
Semi-Structured Data
- Log file aggregation - Schema validation and merging
Unstructured Data
Text/Code - Document stitching (e.g., combining chapters) - Codebase reassembly Image - Batch packaging of images - Mosaic creation from tiles Audio - Concatenation of audio chunks - Index-based reassembly Video - Video stream stitching - Scene-ordered assembly of clips
Any
- File zipping - Passthrough (no fan-in)
If no post-processing is required, a passthrough assembler can output task results directly.

Build a simple "Hello, World" app on ByteNite.
Run a distributed image generation job using Pytorch and Diffusers on ByteNite.
Serve a quantized 17B Llama 4 Scout model using llama-cpp-python on ByteNite.
Scrape Amazon product data at scale using Playwright, extracting titles, prices, and buyer counts on ByteNite.




Overview of ByteNite's core components and functionalities
ByteNite's building blocks are designed to help you structure your distributed workloads into modular, reusable components. These components—Partitioners, Apps, and Assemblers—let you focus on your core logic without worrying about the complexities of distributed execution, fault tolerance, retries, or logging. We've got that covered.
At a high level, ByteNite breaks down a distributed job's lifecycle into three phases:
Partitioning Engine: Handles input downloading, pre-processing, and task creation.
App: Executes the core logic for each individual task.
Assembling Engine: Collects and merges the results from individual tasks.
Each component is fully customizable and versionable, enabling you to build flexible pipelines that fit your specific needs.
Explore the following guides to learn how to develop your own ByteNite Apps, Partitioning Engines, and Assembling Engines to create distributed workflows tailored to your needs.
Get all you need to begin running workloads on ByteNite and doing some Byte-magic!
Get an access code Currently, our platform is in beta and you'll need an access code to create an account. If you have one, use it when required during the sign-up process. Otherwise, you can Request an Access Code.
Sign up on Computing Platform To create an account on ByteNite, follow this link and fill out the form with your contact info and your access code: .
Having an account is sufficient for creating apps and start playing around with ByteNite. However, once your credits are over you’ll need an active billing account to keep launching jobs. Follow the steps below to add a payment method to your account and activate it.
Access your Billing page After registering and logging in, go to or navigate to the Billing page on the sidebar.
Add a payment method Locate the Payment Info card an navigate to the Customer Portal. Follow the steps to add a payment method to your account.
NOTE: Your payment information will be stored for manual top-ups as well as automatic top-ups triggered by the end of the current billing cycle. Make sure you have enough funds to cover your previous billing cycle's costs to avoid service interruptions.
If you have a coupon, you can redeem it on your billing page to add ByteChips to your balance.
Access your Billing page: After registering and logging in, go to or navigate to the Billing page on the sidebar.
Redeem a coupon: Go to the Account Balance card and click on "Redeem". Enter your coupon code in the corresponding field and complete the process. Ensure the amount has been added to your balance; refresh the page if needed.
We'd love to get you started with free credits to test our platform. If you haven't received free ByteChips upon signing up, and we'll grant you some.
For programmatic access to our API, you'll need an API key linked to your account. You can have multiple keys, each meant for a specific integration. Follow these steps to get a key:
Access your profile After registering and logging in, go to or click on your profile avatar located in the top right corner of the webpage.
Create a new API key On your profile page, locate and click the 'New API Key' button or link.
Configure your API key settings Provide a descriptive name for your API key, choose its validity duration, and enter the confirmation code sent to your email. After filling out the necessary details, click the 'Generate API Key' button.
One-time API key access
Please note that for security reasons your API key will only be visible and copyable right after you've generated it. Be sure to copy and securely store it immediately.
Note: The "key ID" is merely an identifier and differs from the actual key.
Managing your API keys If your key is no longer needed or is compromised, return to the API section in your profile. Find the key and click 'Revoke' to invalidate it.
An access token is required to authenticate all requests to the ByteNite API, except for OTP and access token requests.
To request an access token, send a request to the endpoint using your API key.
Access tokens have a default duration of 3600 seconds (i.e., 1 hour). Once expired, you must request a new one.
Here are some recommended tools to get started with ByteNite's.
Download & set up ByteNite Dev CLI:
Set up ByteNite API:
With ByteNite, you can save your output files to a temporary storage location on Google Cloud at no additional cost.
This temporary bucket is intended for short-term use and is automatically managed to ensure file security and accessibility. ByteNite generates a temporary authenticated direct access URL for each output file or folder, simplifying access to your results.
Files remain available for 48 hours after being saved in the temporary storage, after which they are permanently deleted. This setup is perfect for workflows requiring short-term file storage without ongoing management.
The temporary storage bucket is exclusively a data destination, designed for saving output files from your jobs. It cannot be used as a data origin for sourcing input files.
To set up a temporary bucket data destination, provide the following simple dataSource object in your API request (no params expected):
{
"dataSource": {
"dataSourceDescriptor": "bucket",
}
}Import ByteNite's OpenAPI Specification
Click the "Import" button at the top-left corner of the Postman interface.
In the Import modal, switch to the "Link" tab.
Paste one of ByteNite's Swagger JSON links into the URL field:
Jobs API:
Auth API:
Dev API:
Click "Continue".
Confirm and Create the Collection
Postman will analyze the Swagger JSON and prompt you to confirm the import.
Ensure one of the options "Postman Collection" or "OpenAPI 2.0 with a Postman Collection" are selected.
Click "Import" to generate the collection.
Repeat for each Swagger JSON file.
Review the Imported Collection
Navigate to the Collections tab in Postman.
Locate the newly created collections (ByteNite jobs API, ByteNite auth API, ByteNite dev API).
Expand the collection to see the organized endpoints and methods.
Configure Environment Variables (Optional) Environment variables in Postman are useful for storing values like API keys, names, and IDs that you frequently use in your requests. By using environment variables, you can manage these values centrally and reuse them across multiple requests.
Test the API
Select an endpoint from the collection.
Add the necessary headers, body, or parameters as specified in ByteNite's documentation.
Click "Send" to execute the request and view the response.
That’s it! You’ve successfully set up ByteNite’s API collections in Postman.
Additional Tips
Authentication: ByteNite APIs require authentication (Bearer tokens). Set up the required auth details under the Authorization tab for the collection or individual requests.
Collaboration: Share the imported collection with your team by clicking "Share Collection".
Documentation: Use Postman’s Documentation feature to add notes or examples to requests for easy reference.
The goal of this tutorial is to build a simple ByteNite app that outputs the string "Hello, World!" to a file. Use this tutorial if you're new to ByteNite and want to have a quick sense of the workflow.
Uploading input files directly from your computer makes it convenient to process local content for tests.
We require a 4-step process for uploading local files, which involves configuring a data source, retrieving a temporary upload URL, uploading the file, and notifying the server upon completion.
You can fetch files directly from a public URL pointing to the raw resource, which is especially useful for utilizing temporary access URLs generated by cloud storage providers not integrated with ByteNite.
Keep in mind that an HTTP source serves solely as a data origin, meaning it cannot be used as a data destination. This ensures that data fetched via HTTP can be read and processed, but not directly modified or uploaded back through this method.
In order to authorize your API calls, you will need an access token. For security, the only way to programmatically obtain an access token is by exchanging it for an API key. Learn how to:
✨ New Features
Introduced entity delete APIs for streamlined data management.
Added Server-Sent Events (SSE) for real-time task status updates in the backend.
⚡ Improvements
Renamed secrets and dataSourceDescriptor references from S3 to AWS for consistency across services.
⚡ Improvements
Updated backend API routing from v1/customer/ → v1/computing/, preparing for the deprecation of older endpoints.
Populated the username field for existing user records to improve identity consistency.
🐞 Fixes
Resolved issues related to template and engine import operations.
🗑️ Deprecations
Marked the /customer/stats endpoint as deprecated in favor of updated computing metrics APIs.
✨ New Features
Implemented a shared cache directory on GCS for worker VMs, allowing apps to access cached data via predefined environment variables.
✨ New Features
Introduced APIs/CLI commands for publishing and unpublishing apps, engines, and templates
Added public entity import functionality through both API and CLI commands
Added new API endpoints for browsing and uploading cache
Added support for username creation
⚡ Improvements
Improved task assignment to ensure correct distribution across CPU and GPU devices
🐞 Fixes
Fixed issues with validating data sources and destinations in templates
🗑️ Deprecations
Removed support for stale tasks
Deprecated job presets and schemas
✨ New Features
Added onboarding prompt displayed on first login to the computing UI platform
⚡ Improvements
Restructured jobs and templates table
Enabled job creation from either a template or from scratch
dataSourceDescriptor: file
@type:type.googleapis.com/bytenite.data_source.LocalFileDataSource
When setting up a data source, use the following dataSource object to begin the local upload workflow:
To configure your HTTP data source, specify a valid URL pointing to the raw resource in your dataSource object, as in the following example:
{
"dataSource": {
"dataSourceDescriptor": "url",
"params": {
"@type": "type.googleapis.com/bytenite.data_source.HttpDataSource",
"url": "https://storage.googleapis.com/video-test-public/input/bbb.mp4"
}
}
}temp_url = job_response.json()['job']['dataSource']['params']['tempUrl']my_file = '/local/path/to/my/file.obj'
with open(my_file, mode='rb') as f:
requests.put(temp_url, data=f, headers={'Content-Disposition': 'attachment'})response = requests.post(f'http://api.bytenite.com/v1/customer/jobs/uploadcompleted/{job_id}',
json={}, headers={'Authorization': access_token}){
"dataSource": {
"dataSourceDescriptor": "file",
"params": {
"@type": "type.googleapis.com/bytenite.data_source.LocalFileDataSource"
}
}
}Locate your pre-generated Python entry point (./hello-world/app/main.py) and add the code to the file.
We'll make the app perform a few simple steps:
Read a string from the input text file (chunk).
Convert the string to a case matching the input parameter 'case'.
Write the result to a text file in the task results directory.
The manifest and template files are automatically generated and located in your hello-world directory. Ensure they contain the correct configurations as shown below.
Note: We're using passthrough partitioning and assembling engines in this template, so there's no need to configure these components.
Let's launch a job with your new hello-world-template and test your app.
Send a POST request to the Job Create endpoint, including the following fields in the request body:
Then, launch your job and check the results.
Here's a Postman collection that you can use to run your Hello World job:
~15 min
Very Easy
Swagger Docs: https://api.bytenite.com/v1/auth/docs/
Specification: https://api.bytenite.com/v1/auth/docs/swagger.json
ByteNite uses OAuth2 for authentication and authorization. OAuth2 is a widely-used open standard that allows applications to securely access resources on behalf of a user without exposing their credentials.
The Dev CLI is a tool for developers to create and manage apps on ByteNite.
Follow these steps to install the ByteNite CLI on Ubuntu, Debian, or similar distributions.
Add the ByteNite Repository
Update Package Lists
Install the ByteNite CLI
If you encounter any issues during installation:
Make sure your system is up-to-date:
Verify the repository was correctly added:
Check if the package is available:
Add the Bytenite Tap
Install the CLI
Update Homebrew's formula list (including your tap)
Upgrade the bytenite package specifically
Download and run the latest Windows release from .
Check that the installation was successful by using:
To authenticate, run:
This will open an oAuth2 authentication page in your browser. The login is automatic if you're already logged in on ByteNite.
After successful authentication, credentials will be stored in the application support or configuration directory:
Linux: /$HOME/.config/bytenite-cli/auth-prod.json
Mac: /Users/[user]/Library/Application Support/bytenite-cli/auth-prod.json
Run the help command to get started with the ByteNite Dev CLI:
Authentication
Authenticate with OAuth2: bytenite auth
Version
Get Dev CLI Version: bytenite version
App Commands
App Command Info: bytenite app --help
Initialize New App: bytenite app new [app_name]
Push/Upload App: bytenite app push [app_folder]
Template Commands
Template Command Info: bytenite template --help
Initialize New Template: bytenite template new [template_id]
Push/Upload Template: bytenite template push [template_filepath]
Engine Commands
Engine Command Help: bytenite engine --help
Initialize New Engine: bytenite engine new [engine_name]
Push/Upload Engine: bytenite engine push [engine_folder]
A Job Template (or simply Template) combines Building Blocks into one configuration file for your jobs. It:
Provides instructions to the services that execute your job.
Ensures your app and data engines are connected correctly.
By default, ByteNite generates a job template when you start building a new app. This allows you to focus on developing your app without needing to configure the other components upfront.
However, since your app may expect specific data types or formats, you can create and customize a job template to link your app to the appropriate partitioning and assembling engines.
bytenite app new hello-worldls{
"name": "hello-world",
"version": "0.1",
"platform": "docker",
"description": "An app named hello-world",
"entrypoint": "main.py",
"platform_config": {
"container": "python:latest"
},
"device_requirements": {
"min_cpu": 2,
"min_memory": 2
}
}{
"id": "hello-world-template",
"description": "A template for hello-world",
"app": "hello-world",
"partitioner": "passthrough",
"assembler": "passthrough"
}bytenite app push hello-worldbytenite app activate hello-worldbytenite app get hello-worldbytenite template get hello-world-templatebytenite app pull [app_tag]Get App Details: bytenite app get [app_tag]
List Existing Apps: bytenite app list
Activate App: bytenite app activate [app_tag]
Deactivate App: bytenite app deactivate [app_tag]
Get App Status: bytenite app status [app_tag]
bytenite template pull [template_id]Get Template Details: bytenite template get [template_id]
List Existing Templates: bytenite template list
Pull/Download Engine: bytenite engine pull [engine_tag]
Get Engine Details: bytenite engine get [engine_tag]
List Existing Engines: bytenite engine list

Example:
You can either:
Define the fields manually as shown in the example, or
Generate a blank template using the ByteNite CLI:
When you create a new app, a template is generated automatically and is uploaded with the app.
If you prefer to manage templates separately, you can move your template out of the app folder and use the CLI to manage it independently.
Your template includes a user-defined id and an optional description. Use the app, partitioner, and assembler fields to specify which components should be used in jobs built from this template:
echo "deb [trusted=yes] https://storage.googleapis.com/bytenite-prod-apt-repo/debs ./" | sudo tee /etc/apt/sources.list.d/bytenite.listsudo apt updatesudo apt install bytenitesudo apt update && sudo apt upgradecat /etc/apt/sources.list.d/bytenite.listapt search bytenitebrew tap ByteNite2/bytenite-dev-cli https://github.com/ByteNite2/bytenite-dev-cli.gitbrew install bytenitebrew updatebrew upgrade bytenitebytenite versionbytenite authbytenite --help{
"id": "img-gen-diffusers-template",
"description": "A template for my img-gen-diffusers app",
"app": "img-gen-diffusers@1",
"partitioner": "replicate-fanout",
"assembler": "zipper",
}bytenite template new [template_name]An Assembler is a custom software program designed by the user to handle post-processing and fan-in operations on the ByteNite platform.
Additional Info:
AKA: Assembling Engine
Related Guides:
templateId
hello-world-template
dataSource
{
"dataSourceDescriptor": "url",
"params": {
"@type": "type.googleapis.com/bytenite.data_source.HttpDataSource",
"url": "https://storage.googleapis.com/video-test-public/hello-world-I.txt"
}
}dataDestination
{
"dataSourceDescriptor": "bucket"
}params
{
"app": {
"case": "upper"
}
}Alongside your entry point script, ByteNite injects your container with environment variables. These variables provide paths to your app’s input and output folders, cache directories for data sharing and persistence, as well as job parameters and secrets for secure configuration.
Configuring your app’s data flow using these variables ensures your job runs smoothly and interacts properly with ByteNite’s components.
This page explains how ByteNite’s environment works for your containers, focusing on two key areas:
Secret management: How secrets are made available to your app (data source/destination linking, environment variable injection, and API-based access).
Cache directories: How ByteNite provides built-in directories for storing and accessing data at runtime.
You’ll learn how to structure your platformConfig object within your manifest.json, what environment variables are available inside your container, and how these features impact your build and deployment process.
ByteNite supports multiple ways to provide secrets to your app, depending on your workflow:
How it works:
You link secrets to data sources/destinations (e.g., S3, GCS) during job submission (via UI or ).
The platformConfig's secrets property is typically not required for this approach.
The secret is referenced in the job’s , not in the platform config.
Example (platformConfig):
No need to reference secrets in
platformConfigfor data movement.
Build your container as usual.
ByteNite manages authentication and data transfer using the linked secrets, so your code never handles credentials.
When your job only needs to read or write data (like to S3 or GCS) and does not need to make custom API calls.
This method is simple and secure, as your code never sees the credentials and ByteNite manages all authentication and data transfer automatically.
How it works:
Use this when your app code needs to interact with external services (APIs, SDKs, databases) that require credentials at runtime.
ByteNite injects your secrets as environment variables so your code can securely access them.
Typical use cases:
Authenticating to external APIs (e.g., AWS, GCP, OpenRouter, Twilio, Hugging Face, etc.)
Connecting to managed databases or message queues
Using SDKs or CLI tools that expect credentials in environment variables
Example (platformConfig):
Once your manifest.json is configured, you can access the injected secrets in your code like shown below:
Example (Python):
Build/Deployment:
Build your container as usual.
Ensure your code reads secrets from environment variables.
Ensure the correct secret IDs are referenced in platformConfig.
When your code needs to make authenticated requests to external services, use cloud SDKs, or perform any operation that requires direct access to credentials at runtime.
In addition to secrets, ByteNite automatically injects cache directory environment variables (USER_CACHE_DIR and SHARED_CACHE_DIR) into your container at runtime. These directories are essential for storing user-specific data and accessing shared resources within your app environment.
For a full explanation of how these variables work, including usage examples and best practices, see the section.
Secrets: Use data source/destination linking for simple data movement, or environment variable injection for direct credential access in your code.
Cache Directories: Use USER_CACHE_DIR for user-specific, persistent storage; use SHARED_CACHE_DIR for global, read-only resources.
All these environment variables are automatically injected by ByteNite and available inside your container at runtime.
By understanding these environment variables and secret management approaches, you can configure your containers securely and efficiently, and make the most of the ByteNite platform.
Amazon S3 (Simple Storage Service) is a scalable, high-speed, web-based cloud storage service designed for online backup and archiving of data and applications. It offers secure, durable, and highly-scalable object storage, making it ideal for a wide range of use cases, from data lakes and mobile applications to backup and restore operations.
Follow the guide below to set up an account and get IAM credentials on AWS S3:
if __name__ == '__main__':
print("Python task started")
result_path = os.path.join(task_results_dir, 'processed_chunk.txt')
try:
# 1. Reading Inputs
# Expect a text file to be passed by the partitioner
with open(chunk_path, 'r', encoding="utf-8") as infile:
my_string = infile.read()
# 2. Handling Parameters
# Expect the job parameters to have a key named 'case', and the options to be "upper", "lower", and "title"
case = app_params['case']
# 3. Developing the Core Functionality
# Process the string based on the case parameter
if case == "upper":
my_string = my_string.upper()
elif case == "lower":
my_string = my_string.lower()
elif case == "title":
my_string = my_string.title()
else:
my_string = my_string
# 4. Saving Outputs
# Save the string directly into a text file to the default task results directory
with open(os.path.join(task_results_dir, "hello_world_processed.txt"), 'w', encoding="utf-8") as outfile:
outfile.write(my_string)
except Exception as e:
print("Python exception: ", e)
raise e
{
"container": "python:3.8-alpine",
"private_image": false
}{
"container": "python:3.8-alpine",
"private_image": false,
"secrets": ["MY_SECRET_ID"]
}# Retrieve the access & secret key for your secret
access_key = os.environ.get('MY_SECRET_ID_ACCESS_KEY')
secret_key = os.environ.get('MY_SECRET_ID_SECRET_KEY')Visit aws.amazon.com, click “Create an AWS Account”, and follow the steps to register. Provide payment information and verify your identity to activate the account.
Log in to the AWS Console, search for S3, and navigate to the S3 dashboard.
Click “Create Bucket” in the S3 dashboard.
Provide a unique bucket name and choose a region (e.g., us-east-1).
Keep public access blocked unless specific use cases require otherwise.
Finalize the setup by clicking “Create Bucket”.
In the AWS Console, search for IAM and go to Users.
Click “Add Users”, provide a username (e.g., s3-bytenite-user), and enable Programmatic Access.
Attach the AmazonS3FullAccess policy or create a custom policy for specific bucket access.
Complete the user creation process and download the Access Key ID and Secret Access Key.
Save these credentials securely; they will not be displayed again.
If your S3 bucket requires authentication for read or write access, set up a secret to store your S3 credentials securely with ByteNite (see )
Here's an example of a request body of the Secrets endpoint for saving S3 keys:
Set up your data source with S3 using the your previously configured S3 secret and the following params :
Here is an example S3 data source and destination request body:

The ByteNite Computing Platform GUI is a web interface that enables users to manage and monitor distributed computing jobs on ByteNite, allowing users to launch, track, and control their workloads.
In order to create a new job, from the Jobs page, click the "New Job" button at the top. Here, you'll have two options:
Start from Scratch - you'll manually configure all parameters, including:
Job Details - job name and description
App Details - deployed app references for your partitioner, app, and assembler (you may specify versioning to test specific versions of your app, partitioner and assembler, by default the most recent version of each will be used)
Use a Template - Alternatively, you can pick an existing template from your Templates table and click on it to create a new job. This will give you the option to create a job to either run later or immediately, using the preconfigured data source and destination, parameters, and configs you defined in your selected template.
You can launch a new job immediately after configuration in Start from Scratch by clicking Create & Run Job, as shown in the demo video in the section above. Alternatively, clicking Create Job allows you to save the job as a draft. You can later execute it using job actions from the Jobs page or the job overview by selecting Run Job.
You can additionally launch a job from a pre-saved template using Use a Template. Simply select the row of which template you would like to use and confirm that it is configured correctly. For more information on how to properly define your jobs, see the parameters in the Start from Scratch section above.
Remove jobs that are no longer needed, with confirmation prompts to prevent accidental deletion. This can be conducted through the Jobs page or through the red button on the top right of the specific job's Overview page.
View real-time statuses such as Running, Complete, and Failed, along with progress bars for each job on the Jobs page. More detailed, time-stamped task status tracking is available on the Job's Overview page.
Additionally, the Job Overview page includes a Logs section, which contains logs from the partitioner, app, and assembler processes. While the logs are presented comprehensively, they can be filtered for troubleshooting by categories: error, warning, info, debug, and unknown. These logs are also queryable and downloadable.
Tasks are the individual units of work that make up a job. Each job may consist of multiple tasks, which can be executed in parallel or sequence, depending on the workload.
Inspect the list of tasks associated with a job, breaking down their time-stamped state (Scheduled, Assigned, Received, Running, Completed) and price. Deeper insights are available at the individual task level, including the container stats, network stats, and device info.
Access detailed logs for each task by clicking into that specific Task ID to diagnose issues at a granular level.
The Templates page allows users to observe and reuse submitted job templates for common or recurring workloads. Templates help ensure consistency, reduce setup time, and minimize errors when launching similar jobs. For info on using templates for job setup, view Use a Template in the section above.
If you want to delete a template, simply select the ellipses at the end of the row of the desired template and click Delete.
The Security section houses both the pages for API Key and Secret Management:
The API Keys page allows users to securely generate and manage their personal API keys. These keys are essential credentials required to access the platform’s APIs, enabling programmatic interaction with ByteNite’s distributed computing services.
On this page, users can:
Create New API Keys: Generate unique API keys for use in scripts, applications, or integrations that need to interact with the ByteNite platform outside of the web interface.
View and Copy Existing Keys: Easily view your active API keys and copy them for use in your development environment or automation tools.
Revoke Keys: Revoke keys that are no longer needed.
The Secrets page lets you manage credentials used by your apps and engines across your jobs. ByteNite currently supports secret types from AWS, GCP, and Storj. All that's needed from you prior to setting up your secret is your Access Key and your Secret Key from that respective platform.
Each secret is assigned a unique Secret ID, defined by you, which you can reference in your environment variable configuration to inject credentials at runtime—eliminating the need to hardcode sensitive values.
For step-by-step instructions on using Secret IDs in environment variables, see: .
The Billing page is where users manage their transactions. It includes several key sections:
This section displays ByteChip usage over a selected month. Users can adjust the view to focus on a specific month or template.
Here, users can add ByteChips to their account via Top Up or Coupon Redemption. This section also allows users to view and copy their account ID, check both total and available balances, and see the amount due. Additionally, it includes a Customer Portal button for accessing the ByteNite Stripe integration.
This section lists all your transactions. It provides detailed information such as transaction type (Top Up, Coupon, Payment), description, costs in both ByteChips and USD, and the remaining balance.
The Contact Us page provides a simple way for users to reach the ByteNite team with questions, issues, or feedback. To submit a query, just fill out the following fields:
Email: Enter your email address so we can get back to you.
Summary: Provide a brief summary of your request or concern.
Description: Use this field to describe your issue or feedback in detail.
Once submitted, our team will review your message and respond as soon as possible.
The Documentation page will redirect you to page, where you can find detailed guides, feature overviews, and best practices for using the ByteNite Computing Platform.
The Developer CLI page will take you directly to the page, explaining setup instructions, usage examples, and advanced command references.
Google Cloud Storage offers a highly scalable, secure, and durable object storage service designed to handle unstructured data across various use cases. With a unified API and integration across Google Cloud services, it supports efficient data retrieval and storage management. Its tiered storage options—ranging from high-performance to cost-effective archival—make it a versatile solution. Beyond its native ecosystem, Google Cloud Storage is widely adopted for hybrid and multi-cloud strategies due to its interoperability and global availability.
Follow the guide below to set up an account and get HMAC credentials on GCP:
Storj is a decentralized cloud storage platform that offers secure, private, and cost-effective data storage. By distributing data across a global network of nodes, Storj ensures highly-available and resilient data access, while securing cost savings to up to 90% than traditional cloud providers.
Follow the guide below to set up an account and get S3-compatible access keys on Storj:
{
"secret": {
"id": "my_aws_secret",
"secretType": "s3",
"expiresAt": "2025-12-29T18:02:27.140Z",
"accessKey": "AKIAXXEXAMPLEEXAMPLEX",
"name": "My AWS Full Bucket Access"
},
"secretKey": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY"
}{
"dataSource": {
"dataSourceDescriptor": "s3",
"params": {
"@type": "type.googleapis.com/bytenite.data_source.S3DataSource",
"name": "/vids/big_buck_bunny.mp4",
"bucketName": "my-app-data-bucket-12345",
"cloudRegion": "us-east-2",
"secret_id": "my_aws_secret"
}
},
"dataDestination": {
"dataSourceDescriptor": "s3",
"params": {
"@type": "type.googleapis.com/bytenite.data_source.S3DataSource",
"name": "/vids/encoded/",
"bucketName": "my-app-data-bucket-12345",
"cloudRegion": "us-east-2",
"secret_id": "my_aws_secret"
}
}
}












1. Create a Google Cloud Account:
Visit the Google Cloud website and click on “Get started for free.”
Follow the prompts to set up your account, including verifying your email and providing billing information.
2. Access the Google Cloud Console:
Once your account is active, log in to the .
3. Create a Storage Bucket:
In the console, navigate to the Cloud Storage section.
Click on “Create bucket.”
Provide a globally unique name for your bucket.
Select a location for your bucket (e.g., “US”).
To allow ByteNite to interact securely with your Google Cloud Storage buckets, you need to create a service account and generate HMAC (Hash-based Message Authentication Code) credentials.
1. Create a Service Account:
In the Google Cloud Console, navigate to IAM & Admin > Service Accounts.
Click on “Create Service Account.”
Provide a name (e.g., bytenite-service-account) and an optional description.
Click “Create and Continue.”
2. Assign Permissions to the Service Account:
Assign the Storage Object Admin role to grant full control over objects in your buckets.
Click “Continue,” then “Done” to finish creating the service account.
3. Generate HMAC Credentials:
In the Google Cloud Console, navigate to Cloud Storage > Settings.
Open the Interoperability tab.
Under Service Account HMAC, click “Create a key for a service account.”
Select the service account you created earlier (bytenite-service-account).
Additional Notes:
For comprehensive details about creating buckets, refer to the official Google Cloud documentation on .
For detailed information on managing HMAC keys, consult the documentation on .
If your Google Cloud bucket requires authentication for read or write access, set up a secret to store your Service Account HMAC credentials securely with ByteNite (see 🔐 Setting up secrets)
Here's an example of a request body of the Secrets endpoint for saving Google Cloud keys:
Set up your data source with Google Cloud storage using the your previously configured gcp secret and the following params :
Here is an example Google Cloud data source and destination request body:

1. Create a Storj Account Using ByteNite's Referral Link:
Visit the link below to create an account on Storj
🔗 Unlock 25 GB Free Storage on Storj - ByteNite's Referral Link
Complete the registration process by verifying your email and setting up your password. You can start with a free trial or select a paid plan based on your needs.
2. Log in to the Storj Console:
Access your Storj console using your account credentials.
3. Create a Project:
Once logged in, click “New Project.”
Provide a project name (e.g., “My S3 Project”).
Click “Create Project” to finalize.
4. Create a Bucket:
Inside your project dashboard, navigate to the “Buckets” tab.
Click “New Bucket.”
Provide a bucket name (e.g., my-s3-bucket).
Optionally, configure additional settings such as default encryption or access permissions.
1. Navigate to API Keys:
Inside your project dashboard, click on the “Access Keys” tab in the navigation bar.
2. Generate an Access Grant:
Click “New Access Key.”
Select the "S3 Credentials" configuration checkbox.
Choose the scope of the access (e.g., full project access or limited to specific buckets).
3. Retrieve Your S3-Compatible Credentials:
Once the access grant is generated, the console will display the Access Key and Secret Key for S3 compatibility.
Save these credentials securely, as the Secret Key will not be shown again.
If your Storj bucket requires authentication for read or write access, set up a secret to store your S3-compatible credentials securely with ByteNite (see 🔐 Setting up secrets)
Here's an example of a request body of the Secrets endpoint for saving Storj keys:
Set up your data source with Storj using the your previously configured storj secret and the following params :
Here is an example Storj data source and destination request body:

Data storage methods supported by ByteNite
If your app needs data to function (which most do), it’s crucial to configure your data connections properly. This guide walks you through securely storing credentials, testing connections, and setting up your data sources.
ByteNite jobs can read and write from popular storage services, including Amazon S3 and Google Cloud Storage buckets.
{
"secret": {
"id": "my_gcp_secret",
"secretType": "gcp",
"expiresAt": "2025-12-29T18:02:27.140Z",
"accessKey": "GOOG1AB7QD3TY4NSFIZHD4KPB6LVB4F53UJGEZEMRJDXO5PUYDXAOSIKUFNI",
"name": "GCP Bucket Admin Project 'My App'"
},
"secretKey": "aBcDeFgHiJkLmNoPqRsTuVwXyZ1234567890+/ExAmPlEkEy"
}{
"dataSource": {
"dataSourceDescriptor": "gcp",
"params": {
"@type": "type.googleapis.com/bytenite.data_source.S3DataSource",
"name": "/vids/big_buck_bunny.mp4",
"bucketName": "my-app-data-bucket-12345",
"cloudRegion": "us-west2-b",
"secret_id": "my_gcp_secret"
}
},
"dataDestination": {
"dataSourceDescriptor": "gcp",
"params": {
"@type": "type.googleapis.com/bytenite.data_source.S3DataSource",
"name": "/vids/encoded/",
"bucketName": "my-app-data-bucket-12345",
"cloudRegion": "us-west2-b",
"secret_id": "my_gcp_secret"
}
}
}{
"secret": {
"id": "my_storj_secret",
"secretType": "storj",
"expiresAt": "2025-12-29T18:02:27.140Z",
"accessKey": "jwcxl2mccgasmhs1dcir5ex4mple",
"name": "Storj Full Access S3 Keys - Project 'My App'"
},
"secretKey": "jzwi4pcamnhyjpldu4my2cmfscmg55slex4mpleex4mpleex4mple"
}{
"dataSource": {
"dataSourceDescriptor": "storj",
"params": {
"@type": "type.googleapis.com/bytenite.data_source.S3DataSource",
"name": "/vids/big_buck_bunny.mp4",
"bucketName": "my-app-data-bucket-12345",
"cloudRegion": "global",
"secret_id": "my_storj_secret"
}
},
"dataDestination": {
"dataSourceDescriptor": "storj",
"params": {
"@type": "type.googleapis.com/bytenite.data_source.S3DataSource",
"name": "/vids/encoded/",
"bucketName": "my-app-data-bucket-12345",
"cloudRegion": "global",
"secret_id": "my_storj_secret"
}
}
}Click “Create Bucket” to complete the setup.
Choose a default storage class (e.g., “Standard”).
Set access control to “Uniform” to manage permissions uniformly at the bucket level.
Click “Create” to finalize the bucket setup.
Click “Create Key.”
The console will display the Access Key and Secret Key.
Important: Save these credentials securely, as the Secret Key will not be displayed again.
Data Sources connect your storage options to your ByteNite jobs.
Once configured, secrets and data sources work seamlessly across any job.
If you’re using an authenticated service like S3, you’ll store your credentials securely in your ByteNite account—keeping them out of your code.
Use the secretType field to select your secret provider (e.g., AWS, Google Cloud Storage).
ByteNite supports multiple providers. See: ☁️ Supported data source options.
Send a request to the Secrets endpoint to securely create and store your secret in your account.
This unlocks access to your data sources without hardcoding credentials.
Configure your secret request with the following parameters:
Here's an example of a secret request body:
To enable input and output with your current storage provider, configure your data sources. You’ll provide a dataSource object for both inputs (called Data Source) and outputs (called Data Destination). Once both are set, you can:
Test your dataSource object by sending a request to the /datasource/test endpoint.
Attach a Data Source to a job via the dataSource field in the /jobs endpoint.
Attach a Data Destination to a job via the dataDestination field in the /jobs endpoint.
About the dataSource Object
The fields below define the dataSource object. Please note:
The params object varies depending on the data source type.
For data sources requiring authentication (like S3), provide the secret ID for the required credentials in the params body.
Use the bypass data source descriptor if your app doesn’t require input or output (e.g., no input data or output files).
Here is a full dataSource object example:
Below is a list of currently supported data source connections and parameters for both inputs and outputs.
{
"secret": {
"id": "aws_full_s3_access_key",
"name": "John's AWS S3 Full Bucket Access",
"secretType": "s3",
"accessKey": "AKIAXXEXAMPLEEXAMPLEX",
"expiresAt": "2025-12-29T18:02:27.140Z"
},
"secretKey": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY"
}{
"dataSource": {
"dataSourceDescriptor": "s3",
"params": {
"@type": "type.googleapis.com/bytenite.data_source.S3DataSource",
"name": "/vids/big_buck_bunny.mp4",
"bucketName": "my-app-data-bucket-12345",
"cloudRegion": "us-east-2",
"secret_id": "aws_full_s3_access_key"
}
}
}secretType : aws
dataSourceDescriptor : aws
@type : type.googleapis.com/bytenite.data_source.S3DataSource
secretType : gcp
dataSourceDescriptor : gcp
@type : type.googleapis.com/bytenite.data_source.S3DataSource
secretType : storj
dataSourceDescriptor : storj
@type : type.googleapis.com/bytenite.data_source.S3DataSource
dataSourceDescriptor : url
@type: type.googleapis.com/bytenite.data_source.HttpDataSource
dataSourceDescriptor : file
@type: type.googleapis.com/bytenite.data_source.LocalFileDataSource
dataSourceDescriptor : bucket






{
"@type": "type.googleapis.com/bytenite.data_source.S3DataSource",
"name": "/vids/big_buck_bunny.mp4",
"bucketName": "my-app-data-bucket-12345",
"cloudRegion": "us-east-2",
"secret_id": "aws_full_s3_access_key"
}A general guide for submitting jobs via API
Once your Apps, Partitioning Engines, and Assembling Engines are ready, and you've linked them together using Job Templates, you're prepared to launch test and production jobs.
ByteNite utilizes an API to handle job requests — the Customer API— simplifying and standardizing the interaction with our server.
To begin using the API and familiarizing yourself with its endpoint, we recommend setting up a Postman collection. You can find more details at Create a Postman collection from ByteNite's OAS.
Below are the steps to configure and send a new job request, broken down and explained. You may refer to the official Jobs reference for a complete parameter list, response codes, and default code examples.
Link a data source and destination to your job, specifying input and output options as documented in the guide.
Connecting data sources is optional: if your app doesn't require any input data to work, or doesn't output data, you can specify a bypass data source descriptor.
If your app, partitioner, or assembler expect parameters, provide them at this step. Parameters are organized under three keys: app, partitioner, and assembler for clarity.
If your template includes parameter schemas, the parameters you submit here will be validated immediately, and any errors will be returned.
This page is under construction! Please come back later...
token
string
Your ByteNite access token
expiresIn
string
An expiration timeout in seconds
Authorization
string
An active ByteNite access token
templateId
string
ID of the job template used for this job
name
string
A descriptive name for your job
description
string
An optional description with more information
job
object
A job object, containing job metadata
↳ id
string
The job identifier (automatically generated)
Example:
https://api.bytenite.com/v1/customer/jobs/{jobId}/datasourceMain ref: Update
jobId
string
The jobIdof your new job
Authorization
string
An active ByteNite access token
dataSource
object
A data source object, containing a dataSourceDescriptor and optional params
dataDestination
object
A data source object, containing a dataSourceDescriptor and optional params
Example:
jobId
string
The jobIdof your new job
Authorization
string
An active ByteNite access token
app
object
A JSON object containing parameters as expected by your app
partitioner
object
A JSON object containing parameters as expected by your partitioning engine
assembler
object
A JSON object containing parameters as expected by your assembling engine
Example:
Main ref: Manage
jobId
string
The jobIdof your new job
Authorization
string
An active ByteNite access token
taskTimeout
integer
An optional timeout for tasks, in seconds. After this time, a task will be stopped.
jobTimeout
integer
An optional timeout for jobs, in seconds. After this time, the job and any running tasks will be stopped.
isTestJob
boolean
A flag for test jobs.
Example:
apiKey
string
Your ByteNite API Key
import requests
response = requests.post(
"https://api.bytenite.com/v1/auth/access_token",
json = {
"apiKey": "ey2WmEsSMK7wdxpK5MaEHXeWCD5KEJZ79Koe68yrHL4kdnnTXT01hu2iss43BdaCCMgJ3dBh2IOVCycTt1mwkT3QR1dLxRFpK7TW7ExvcuCXio6nKsGjk9dYY8nbsFffrUVvYSQYsuQoF3NIb8sS4MDyZfOgGKZL9z8x22cwrwEck7vIokVhQ9fyWRVU2vwRiX3X4bQFuqTkkWCi5Vfy8IkGkga7ZPMPb21FxqK6cHRJ3zmI1JZZoZZxERnQcWJTpZRyCP4SNTuRm3ueVDNntFqYWYYrseNLcCIS42MpR00Z9rI9I5xxuQD6VQvHVrpOaPucg1E4Vw54xXr2LKEy9uHcM5WUQHkdfhiXo6zyVbZMrbjLpepgeS4nEja="
}
)
token = response.json()["token"]response = requests.post(
"https://api.bytenite.com/v1/customer/jobs",
headers = {
"Authorization": token
},
json = {
"name": "My job with img-gen-diffusers template",
"templateId": "img-gen-diffusers"
}
)
jobId = response.json()["job"]["id"]response = requests.patch(
f"https://api.bytenite.com/v1/customer/jobs/{jobId}/datasource",
headers = {
"Authorization": token
},
json = {
"dataSource": {
"dataSourceDescriptor": "url",
"params": {
"@type": "type.googleapis.com/bytenite.data_source.HttpDataSource",
"url": "https://storage.googleapis.com/my-public-bucket/my-input-file.txt"
}
},
"dataDestination": {
"dataSourceDescriptor": "bucket"
}
}
)response = requests.patch(
f"https://api.bytenite.com/v1/customer/jobs/{jobId}/params",
headers = {
"Authorization": token
},
json = {
"partitioner": {
"numImages": 20
},
"app": {
"prompt": "A beautiful sunset over the jungle"
},
"assembler": {
"outExtension": "jpeg"
}
}
)response = requests.post(
f"https://api.bytenite.com/v1/customer/jobs/{jobId}/run",
headers = {
"Authorization": token
},
json = {
"taskTimeout": 3600,
"jobTimeout": 86400,
"isTestJob": True
}
)Redeem a promo code
Your ByteNite access token
hello-worldA successful response.
Returned when the users sends a malformed request.
Returned when the user is not authenticated.
Returned when the user does not have permission to access the resource.
Returned when the resource does not exist.
Returned when an error on the server occurred.
Returned when the resource is temporarily unavailable.
An unexpected error response.
Convert amount from currency to ByteChips
Your ByteNite access token
A successful response.
Returned when the users sends a malformed request.
Returned when the user is not authenticated.
Returned when the user does not have permission to access the resource.
Returned when the resource does not exist.
Returned when an error on the server occurred.
Returned when the resource is temporarily unavailable.
An unexpected error response.
Get paginated list of transactions
Your ByteNite access token
Number of rows to return per page.
Number of rows to skip before starting to collect the result set.
A successful response.
Returned when the users sends a malformed request.
Returned when the user is not authenticated.
Returned when the user does not have permission to access the resource.
Returned when the resource does not exist.
Returned when an error on the server occurred.
Returned when the resource is temporarily unavailable.
An unexpected error response.
post paginated list of transactions with filters
Your ByteNite access token
A successful response.
Returned when the users sends a malformed request.
Returned when the user is not authenticated.
Returned when the user does not have permission to access the resource.
Returned when the resource does not exist.
Returned when an error on the server occurred.
Returned when the resource is temporarily unavailable.
An unexpected error response.
Get CSV of all transactions
Your ByteNite access token
A successful response.
Returned when the users sends a malformed request.
Returned when the user is not authenticated.
Returned when the user does not have permission to access the resource.
Returned when the resource does not exist.
Returned when an error on the server occurred.
Returned when the resource is temporarily unavailable.
An unexpected error response.
Get wallet balance for current user
Your ByteNite access token
A successful response.
Returned when the users sends a malformed request.
Returned when the user is not authenticated.
Returned when the user does not have permission to access the resource.
Returned when the resource does not exist.
Returned when an error on the server occurred.
Returned when the resource is temporarily unavailable.
An unexpected error response.
An App is a versioned program that lets you run code on ByteNite.
Apps can be simple—just a single function—or complex systems with multiple libraries and functions.
This guide walks through the structure of an app’s directory and explains where (and how) to write your code so it integrates smoothly into a ByteNite app.
To create a new app directory in your local environment, execute the following command:
{
"id": "text",
"code": "text",
"amount": "text"
}POST /v1/wallet/redeem_coupon HTTP/1.1
Host: api.bytenite.com
Authorization: YOUR_API_KEY
Content-Type: application/json
Accept: */*
Content-Length: 28
{
"couponCode": "hello-world"
}GET /v1/wallet/exchange_rate HTTP/1.1
Host: api.bytenite.com
Authorization: YOUR_API_KEY
Accept: */*
{
"currency": "text",
"currencyAmount": 1,
"exchangeRate": 1,
"amount": 1
}{
"pagination": {
"total": 1,
"offset": 1,
"hasPrevious": true,
"hasNext": true
},
"data": [
{
"id": "18bea1a1-85c9-4652-a32f-4bad10c45d2b",
"createdAt": "2024-12-12T06:59:38.653263Z",
"accountFrom": "a946a5f3-f430-4f1d-ac58-165190436c7c",
"accountTo": "stripe-main",
"amount": 0.00022723,
"transactionType": "payment",
"relatedEntity": {
"type": "text",
"id": "text",
"name": "text"
},
"notes": "",
"transactionData": "",
"hash": "863078c0dcab8b7eea27ed1ec4ba19109208442147fb97050d71527591c035ce",
"relatedEntityData": {
"type": "payment",
"id": "33e247f5-5000-4476-8fb4-8fb34d733083",
"name": "",
"jobName": "Job 4ce85f9a-92ec-447a-8622-5ad684dcb880",
"jobId": "4ce85f9a-92ec-447a-8622-5ad684dcb880",
"description": "Top-up for Job 4ce85f9a-92ec-447a-8622-5ad684dcb880",
"currency": "USD",
"currencyAmount": 1000,
"exchangeRate": 1,
"couponCode": "COUPONCODE",
"jobTemplate": "4ce85f9a-92ec-447a-8622-5ad684dcb880"
},
"description": "Job 4ce85f9a-92ec-447a-8622-5ad684dcb880",
"balance": 0
}
]
}GET /v1/wallet/transactions HTTP/1.1
Host: api.bytenite.com
Authorization: YOUR_API_KEY
Accept: */*
{
"pagination": {
"total": 1,
"offset": 1,
"hasPrevious": true,
"hasNext": true
},
"data": [
{
"id": "18bea1a1-85c9-4652-a32f-4bad10c45d2b",
"createdAt": "2024-12-12T06:59:38.653263Z",
"accountFrom": "a946a5f3-f430-4f1d-ac58-165190436c7c",
"accountTo": "stripe-main",
"amount": 0.00022723,
"transactionType": "payment",
"relatedEntity": {
"type": "text",
"id": "text",
"name": "text"
},
"notes": "",
"transactionData": "",
"hash": "863078c0dcab8b7eea27ed1ec4ba19109208442147fb97050d71527591c035ce",
"relatedEntityData": {
"type": "payment",
"id": "33e247f5-5000-4476-8fb4-8fb34d733083",
"name": "",
"jobName": "Job 4ce85f9a-92ec-447a-8622-5ad684dcb880",
"jobId": "4ce85f9a-92ec-447a-8622-5ad684dcb880",
"description": "Top-up for Job 4ce85f9a-92ec-447a-8622-5ad684dcb880",
"currency": "USD",
"currencyAmount": 1000,
"exchangeRate": 1,
"couponCode": "COUPONCODE",
"jobTemplate": "4ce85f9a-92ec-447a-8622-5ad684dcb880"
},
"description": "Job 4ce85f9a-92ec-447a-8622-5ad684dcb880",
"balance": 0
}
]
}POST /v1/wallet/transactions/filter HTTP/1.1
Host: api.bytenite.com
Authorization: YOUR_API_KEY
Content-Type: application/json
Accept: */*
Content-Length: 216
{
"pagination": {
"limit": 1,
"offset": 1
},
"filters": [
{
"field": "text",
"condition": "FILTER_CONDITION_EQ",
"value": {
"@type": "type.googleapis.com/google.protobuf.Value",
"value": "value to filter (any type)"
}
}
],
"orderBy": "text"
}GET /v1/wallet/transactions/csv HTTP/1.1
Host: api.bytenite.com
Authorization: YOUR_API_KEY
Accept: */*
{
"csv": "text"
}GET /v1/wallet/balance HTTP/1.1
Host: api.bytenite.com
Authorization: YOUR_API_KEY
Accept: */*
{
"accountId": "18bea1a1-85c9-4652-a32f-4bad10c45d2b",
"totalBalance": 10019.4719491,
"availableBalance": 10019.4719491,
"amountDue": 50
}Directory Structure:
app/
Contains your application’s entry point (main.*), plus any additional scripts or libraries.
See: 👨🏽💻 Develop the main script.
manifest.json
Holds configurations, details, and app requirements.
See: 🔧 Configure app settings: manifest.json.
template.json
Defines your job template, which ties together your building blocks into a single configuration. This template can be optionally submitted with your app.
Learn more: #.
schema.json
Provides input parameter validation for your app using a JSON schema definition.
See:.
The manifest.json file holds the core details of your app—things like platform configuration, hardware requirements, the app’s name, and version.
Here’s a sample manifest:
How the manifest works
The manifest defines key settings your app depends on, including:
Platform configuration (e.g., Docker container + data source details)
Hardware requirements (e.g., minimum CPU and memory)
App metadata (name, version, description)
Since many apps rely on specific hardware or container setups, tweaking this file to align with your app’s needs is essential for reliable performance.
The following sections dive deeper into app versioning, platform settings, and hardware requirements—all centered around how to define them in your manifest.json.
Each app is identified by a name and a version, following the semantic versioning format "major.minor".
Unlimited versions: You can store and activate unlimited versions of your app, provided that each one has a unique (name, version) pair.
Uploading a new version: Uploading an app with a new (name, version) combination will create a new, independent record. This is helpful if you need to maintain separate versions for testing, staging, or production.
Updating versions: Uploading an app with an existing (name, version) pair will overwrite the current version with your updated code and configurations.
Use the name and version fields in the manifest to manage app uploads and ensure consistency across your deployments:
ByteNite supports containerized workloads by integrating with Docker images from Docker Hub. Docker lets you package your app’s dependencies, libraries, and runtime into a single, portable container—so your app runs consistently across environments.
To configure your app’s environment:
Define the platform type and the container image using the platform and platformConfig fields in your manifest.
Set your app’s minimum hardware requirements (like CPU and memory) using the deviceRequirements field.
These settings ensure your app runs in the right environment with the right resources. Learn more below.
To run your app on ByteNite, use the platform and platformConfig fields in the manifest to define the Docker container image your app should use.
The container image must be either publicly accessible or include the proper credentials if it’s private. It can be hosted on Docker Hub or any compatible container registry.
While there are many ready-to-use images, most apps require custom images tailored to specific dependencies, environment variables, or system configurations. Defining this ensures your app runs exactly how you need it.
In summary, these are the suggested steps to pair your ByteNite app with a Docker container image:
1. Build or choose a Docker image with all the necessary libraries and dependencies.
2. Develop your app’s logic outside the image—place your code in the app/ directory.
3. Upload your app using the ByteNite CLI, referencing your Docker image in the manifest file.
At ByteNite, we handle the infrastructure so you can focus on building your apps—not worrying about hardware.
To ensure smooth performance, you’ll define your app’s minimum hardware requirements, like the number of CPU cores and memory size. This helps ByteNite allocate machines that meet (or exceed) these requirements, making sure your app runs reliably.
You set these requirements in the deviceRequirements field of your manifest.json.
The entry point script powers your app’s core functionality—it reads input chunks, processes data, and returns results.
What your script can do is nearly limitless. You can run model inferences, process large datasets, render video frames, generate PDFs in bulk, or scrape the web. If it can run inside a container, it can run on ByteNite.
See: Examples of core processing use cases for common serverless job examples.
If needed, extend your entry point script by adding custom scripts or libraries to the app/ folder. These can be imported into your main script to support your logic.
The key requirement is how you handle inputs, parameters, and outputs. These must follow ByteNite’s conventions to ensure your workflow runs smoothly across distributed infrastructure.
How ByteNite Executes Your Script
ByteNite pulls the container image specified in your manifest.
It overrides the container’s original entry point and runs the ByteNite entry point script instead—your script inside the app/ folder.
This script must align with the programming language and libraries supported by your container image.
Important: Container Entrypoint ≠ ByteNite Entrypoint
When your app runs:
ByteNite launches the container based on your specified image.
Your container’s original entrypoint is overridden.
ByteNite runs its own entrypoint to execute the script inside the app/ folder.
This setup ensures your runtime environment stays flexible and modular—making it easier to iterate on your app’s logic without changing the container itself.
Alongside your entry point script, ByteNite injects your container with environment variables. These variables provide paths to your app’s input and output folders, cache directories for data sharing and persistence, as well as job parameters and secrets for secure configuration.
Configuring your app’s data flow using these variables ensures your job runs smoothly and interacts properly with ByteNite’s components.
Here are the six preset ByteNite App environment variables:
Here’s an example of a Python-based entry point script (main.py) that uses the environment variables we just covered.
If your app receives parameters, validating them ahead of time ensures they follow a defined structure. This helps prevent issues like missing keys or malformed data.
You can define a JSON Schema in the schema.json file inside your app directory.
Any input parameters submitted to the Jobs API will be checked against this schema before the job starts.
Example Schema
Here’s an example of a schema that requires a single input string (prompt) with a maximum length of 50 characters:
Why Use a Schema?
Prevents errors:
Ensures parameters meet your expected format before the job runs.
Generates UI:
The schema automatically creates a graphical interface in your Job Launch console, making it easy for you (or your users) to configure and launch jobs from the UI.
To get the most out of your ByteNite apps, keep the following principles in mind:
Your app code is executed by distributed task runners. Each task runs independently on a worker machine, based on how your data is partitioned. → Only include the logic that should run on a single worker—ByteNite handles all task distribution and resource orchestration for you.
Within each worker, your app can take advantage of multi-core architectures. You’re free to parallelize work across available CPU cores using threads or multiprocessing.
Avoid implementing custom distributed systems logic. ByteNite’s platform is designed to manage scaling, scheduling, and fault tolerance for you.
Ensure your data sources are properly configured via the Customer API (see ). Custom data ingestion or export logic within your app can lead to errors, inefficient performance, or increased container runtime—and ultimately, higher costs.
Incorporate robust error handling and logging. This is essential for monitoring, debugging, and improving the reliability of your app in production.
In summary:
✅ Do’s
Define the core functionality of your app.
Use multiple CPU cores to process subtasks in parallel within a single worker.
❌ Don’ts
Distribute tasks to other workers or machines. → Your app already runs within ByteNite’s distributed environment.
Read from or write to additional data sources directly. → Input/output is managed by ByteNite’s Partitioning and Assembling Engines.
⚠️ Use with Caution
Interact with external services or APIs only when necessary, and only if the required functionality cannot be handled by ByteNite’s Data Engines or built-in integrations.
bytenite app new [app_name]/[app_name]
├── app
│ ├── main.*
│ └── [scripts/libraries]
├── manifest.json
├── template.json
└── schema.json{
"name": "my-first-stable-diffusion-app",
"version": "0.4",
"description": "A stable diffusion app using HuggingFace's diffusers",
"platform": "docker",
"entrypoint": "main.py",
"platform_config": {
"container": "huggingface/diffusers-pytorch-cuda:latest",
"private_image": true,
"username": "alex_rivers6241",
"token":"dckr_pat_HgNOmERVLDm1YBSvAJELJeGOOAM",
"secrets":["MY_GCS_SECRET"]
},
"device_requirements": {
"min_cpu": 2,
"min_memory": 2,
"gpu": ["NVIDIA A100-SXM4-40GB", "NVIDIA GeForce RTX 4090"]
}
}# === BYTENITE APP - MAIN SCRIPT ===
# Documentation: https://docs.bytenite.com/create-with-bytenite/building-blocks/apps
# == Imports and Environment Variables ==
try:
import json
import os
except ImportError as e:
raise ImportError(f"Required library is missing: {e}")
# Path to the directory containing a single data chunk, passed by your partitioner.
# Note: This folder is automatically created and contains only one chunk. You don't need to create or manage it.
task_dir = os.getenv('TASK_DIR')
if not task_dir:
raise ValueError("TASK_DIR environment variable is not set or is invalid.")
chunk_path = os.path.join(task_dir, 'data.bin')
# Path to the folder where your app's task results must be saved. The assembler will access these files across all runs of your app.
# Note: The folder is automatically created and passed to your app. There is no required output format—just ensure your assembler can read the files.
task_results_dir = os.getenv('TASK_RESULTS_DIR')
if not task_results_dir:
raise ValueError("TASK_RESULTS_DIR environment variable is not set or is invalid.")
# App parameters imported from the job request (located under "params" -> "app").
app_params_raw = os.getenv('APP_PARAMS')
if not app_params_raw:
raise ValueError("APP_PARAMS environment variable is not set or is empty.")
try:
app_params = json.loads(app_params_raw)
except json.JSONDecodeError as e:
raise ValueError(f"APP_PARAMS environment variable contains invalid JSON: {e}")
if __name__ == '__main__':
print("Python task started")
result_path = os.path.join(task_results_dir, 'processed_chunk.txt')
try:
# --------------
# 1. Reading Inputs
# Example: Expect a text file to be passed by the partitioner
with open(chunk_path, 'r', encoding="utf-8") as infile:
my_string = infile.read()
# --------------
# 2. Handling Parameters
# Example: Expect the job parameters to have a key named 'case', and the options to be "upper", "lower", and "title"
case = app_params['case']
# --------------
# 3. Developing the Core Functionality
# Example: Process the string based on the case parameter
if case == "upper":
my_string = my_string.upper()
elif case == "lower":
my_string = my_string.lower()
elif case == "title":
my_string = my_string.title()
else:
my_string = my_string
# --------------
# 4. Saving Outputs
# Example: Save the string directly into a text file to the default task results directory
with open(os.path.join(task_results_dir, "hello_world_processed.txt"), 'w', encoding="utf-8") as outfile:
outfile.write(my_string)
except Exception as e:
print("Python exception: ", e)
raise e
{
"$id": "db://image-generation-simple-inputs",
"definitions": {
"input": {
"type": "string",
"description": "A prompt for image generation",
"maxLength": 50
}
},
"properties": {
"prompt": {
"$ref": "#/definitions/input"
}
},
"required": ["prompt"],
"title": "Stable Diffusion App Schema"
}{
"container": "huggingface/transformers-pytorch-cpu:latest",
"private_image": true,
"username": "alex_rivers6241",
"token":"dckr_pat_HgNOmERVLDm1YBSvAJELJeGOOAM",
"secrets": ["MY_S3_KEY"]
}task_dir = os.getenv('TASK_DIR')
chunk_path = os.path.join(task_dir, 'data.bin')task_results_dir = os.getenv('TASK_RESULTS_DIR')shared_cache_dir = os.getenv('SHARED_CACHE_DIR')
model_path = os.path.join(shared_cache_dir, 'Llama-4-Scout-17B-16E-Instruct-Q4_K_M-00001-of-00002.gguf')user_cache_dir = os.getenv('USER_CACHE_DIR')
file_path = os.path.join(user_cache_dir, 'intermediate_results.npy')app_params = json.loads(os.getenv('APP_PARAMS'))access_key = os.environ.get('{{secret_id}}_ACCESS_KEY')
secret_key = os.environ.get('{{secret_id}}_SECRET_KEY')secret_key = os.environ.get('{{secret_id}}')Save a secret for data sources/destinations usage
Your ByteNite access token
Your data source's secret key.
wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEYA successful response.
Returned when the users sends a malformed request.
Returned when the user is not authenticated.
Returned when the user does not have permission to access the resource.
Returned when the resource does not exist.
Returned when an error on the server occurred.
Returned when the resource is temporarily unavailable.
An unexpected error response.
List available secrets
Your ByteNite access token
The type of the secret
A successful response.
Returned when the users sends a malformed request.
Returned when the user is not authenticated.
Returned when the user does not have permission to access the resource.
Returned when the resource does not exist.
Returned when an error on the server occurred.
Returned when the resource is temporarily unavailable.
An unexpected error response.
Remove a secret
Your ByteNite access token
The type of the secret
The ID of the secret
A successful response.
Returned when the users sends a malformed request.
Returned when the user is not authenticated.
Returned when the user does not have permission to access the resource.
Returned when the resource does not exist.
Returned when an error on the server occurred.
Returned when the resource is temporarily unavailable.
An unexpected error response.
Get id, email, name, image and activation status
Your ByteNite access token
A successful response.
Returned when the users sends a malformed request.
Returned when the user is not authenticated.
Returned when the user does not have permission to access the resource.
Returned when the resource does not exist.
Returned when an error on the server occurred.
Returned when the resource is temporarily unavailable.
An unexpected error response.
Set editable user info
Your ByteNite access token
JohnDoejohndoeA successful response.
Returned when the users sends a malformed request.
Returned when the user is not authenticated.
Returned when the user does not have permission to access the resource.
Returned when the resource does not exist.
Returned when an error on the server occurred.
Returned when the resource is temporarily unavailable.
An unexpected error response.
Get all issued api keys for user
Your ByteNite access token
A successful response.
Returned when the users sends a malformed request.
Returned when the user is not authenticated.
Returned when the user does not have permission to access the resource.
Returned when the resource does not exist.
Returned when an error on the server occurred.
Returned when the resource is temporarily unavailable.
An unexpected error response.
Revoke an API key
Your ByteNite access token
A successful response.
Returned when the users sends a malformed request.
Returned when the user is not authenticated.
Returned when the user does not have permission to access the resource.
Returned when the resource does not exist.
Returned when an error on the server occurred.
Returned when the resource is temporarily unavailable.
An unexpected error response.
Exchange an API key for an oAuth2 access token
The actual API key that you have received from the API key request.
eyJjcnYiOiJQLTM4NCIsImQiOiJyM1VFQ21naUNiNjI1c19CZWc3emdULUlCajJUOUZW...A successful response.
Returned when the users sends a malformed request.
Returned when the user is not authenticated.
Returned when the user does not have permission to access the resource.
Returned when the resource does not exist.
Returned when an error on the server occurred.
Returned when the resource is temporarily unavailable.
An unexpected error response.
Log out current user and invalidates token
Your ByteNite access token
A successful response.
Returned when the users sends a malformed request.
Returned when the user is not authenticated.
Returned when the user does not have permission to access the resource.
Returned when the resource does not exist.
Returned when an error on the server occurred.
Returned when the resource is temporarily unavailable.
An unexpected error response.
Check if the user is already logged in, if the user can skip login a redirect url is returned
Your ByteNite access token
A successful response.
Returned when the users sends a malformed request.
Returned when the user is not authenticated.
Returned when the user does not have permission to access the resource.
Returned when the resource does not exist.
Returned when an error on the server occurred.
Returned when the resource is temporarily unavailable.
An unexpected error response.
Server software version
Your ByteNite access token
A successful response.
Returned when the users sends a malformed request.
Returned when the user is not authenticated.
Returned when the user does not have permission to access the resource.
Returned when the resource does not exist.
Returned when an error on the server occurred.
Returned when the resource is temporarily unavailable.
An unexpected error response.
{
"ok": false,
"requestId": "xyz-123",
"message": "Request failed",
"error": {
"code": 404,
"message": "Not Found",
"description": "The requested resource was not found"
}
}POST /v1/auth/secrets HTTP/1.1
Host: api.bytenite.com
Authorization: YOUR_API_KEY
Content-Type: application/json
Accept: */*
Content-Length: 242
{
"secret": {
"id": "s3-secret",
"secretType": "s3",
"expiresAt": "2025-12-29T18:02:27.140Z",
"accessKey": "AKIAIOSFODNN7EXAMPLE",
"params": {
"ANY_ADDITIONAL_PROPERTY": "text"
},
"name": "My S3 Secret"
},
"secretKey": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY"
}GET /v1/auth/secrets HTTP/1.1
Host: api.bytenite.com
Authorization: YOUR_API_KEY
Accept: */*
{
"secrets": [
{
"id": "s3-secret",
"secretType": "s3",
"expiresAt": "2025-12-29T18:02:27.140Z",
"accessKey": "AKIAIOSFODNN7EXAMPLE",
"params": {
"ANY_ADDITIONAL_PROPERTY": "text"
},
"name": "My S3 Secret"
}
]
}DELETE /v1/auth/secrets/{secretType}/{id} HTTP/1.1
Host: api.bytenite.com
Authorization: YOUR_API_KEY
Accept: */*
{
"ok": false,
"requestId": "xyz-123",
"message": "Request failed",
"error": {
"code": 404,
"message": "Not Found",
"description": "The requested resource was not found"
}
}{
"user": {
"id": "acc2e66f-fa31-4e73-9c49-eedee36fcf32",
"createdAt": "2020-01-01T00:00:00Z",
"lastLogin": "2020-01-01T00:00:00Z",
"displayName": "John Doe",
"email": "[email protected]",
"settings": {},
"photoUrl": "https://example.com/photo.jpg",
"providerId": "google",
"emailVerified": true,
"customClaims": {
"role": "admin"
},
"role": "ROLE_NONE",
"firstName": "John",
"lastName": "Doe",
"contactInfo": {
"company": "ByteNite",
"jobTitle": "Software Engineer",
"phoneNumber": "1234567890",
"address1": "1234 Main St",
"address2": "Apt 123",
"city": "San Francisco",
"state": "CA",
"zip": "94107",
"country": "United States"
},
"disabled": false,
"isOnboarded": true,
"onboardingInfo": [
{
"step": 1,
"answer": {}
}
],
"userName": "johndoe"
}
}GET /v1/auth/user HTTP/1.1
Host: api.bytenite.com
Authorization: YOUR_API_KEY
Accept: */*
{
"user": {
"id": "acc2e66f-fa31-4e73-9c49-eedee36fcf32",
"createdAt": "2020-01-01T00:00:00Z",
"lastLogin": "2020-01-01T00:00:00Z",
"displayName": "John Doe",
"email": "[email protected]",
"settings": {},
"photoUrl": "https://example.com/photo.jpg",
"providerId": "google",
"emailVerified": true,
"customClaims": {
"role": "admin"
},
"role": "ROLE_NONE",
"firstName": "John",
"lastName": "Doe",
"contactInfo": {
"company": "ByteNite",
"jobTitle": "Software Engineer",
"phoneNumber": "1234567890",
"address1": "1234 Main St",
"address2": "Apt 123",
"city": "San Francisco",
"state": "CA",
"zip": "94107",
"country": "United States"
},
"disabled": false,
"isOnboarded": true,
"onboardingInfo": [
{
"step": 1,
"answer": {}
}
],
"userName": "johndoe"
}
}PATCH /v1/auth/user HTTP/1.1
Host: api.bytenite.com
Authorization: YOUR_API_KEY
Content-Type: application/json
Accept: */*
Content-Length: 318
{
"contactInfo": {
"company": "ByteNite",
"jobTitle": "Software Engineer",
"phoneNumber": "1234567890",
"address1": "1234 Main St",
"address2": "Apt 123",
"city": "San Francisco",
"state": "CA",
"zip": "94107",
"country": "United States"
},
"firstName": "John",
"lastName": "Doe",
"userName": "johndoe",
"onboardingInfo": [
{
"step": 1,
"answer": {}
}
]
}GET /v1/auth/api_keys HTTP/1.1
Host: api.bytenite.com
Authorization: YOUR_API_KEY
Accept: */*
{
"apiKeys": [
{
"id": "acc2e66f-fa31-4e73-9c49-eedee36fcf32",
"name": "My API key",
"issuedAt": "2025-12-09T19:56:17.981Z",
"expiresAt": "2025-12-09T19:56:17.981Z",
"userId": "acc2e66f-fa31-4e73-9c49-eedee36fcf32",
"revoked": true,
"fingerprint": "text"
}
]
}POST /v1/auth/api_keys/{id}/revoke HTTP/1.1
Host: api.bytenite.com
Authorization: YOUR_API_KEY
Accept: */*
{
"ok": false,
"requestId": "xyz-123",
"message": "Request failed",
"error": {
"code": 404,
"message": "Not Found",
"description": "The requested resource was not found"
}
}GET /v1/auth/info HTTP/1.1
Host: api.bytenite.com
Authorization: YOUR_API_KEY
Accept: */*
{
"version": {
"major": 1,
"minor": 0,
"tag": 0
}
}{
"token": "eyJjcnYiOiJQLTM4NCIsImQiOiJyM1VFQ21naUNiNjI1c19CZWc3emdULUlCajJUOUZW...",
"expiresIn": "3600",
"scope": "text"
}POST /v1/auth/access_token HTTP/1.1
Host: api.bytenite.com
Content-Type: application/json
Accept: */*
Content-Length: 84
{
"apiKey": "eyJjcnYiOiJQLTM4NCIsImQiOiJyM1VFQ21naUNiNjI1c19CZWc3emdULUlCajJUOUZW..."
}POST /v1/auth/signout HTTP/1.1
Host: api.bytenite.com
Authorization: YOUR_API_KEY
Content-Type: application/json
Accept: */*
Content-Length: 2
{}GET /v1/auth/skip HTTP/1.1
Host: api.bytenite.com
Authorization: YOUR_API_KEY
Accept: */*
{
"skip": true,
"redirectTo": "text"
}{
"ok": false,
"requestId": "xyz-123",
"message": "Request failed",
"error": {
"code": 404,
"message": "Not Found",
"description": "The requested resource was not found"
}
}Run a job
Your ByteNite access token
The id associated with your job.
A successful response.
Returned when the users sends a malformed request.
Returned when the user is not authenticated.
Returned when the user does not have permission to access the resource.
Returned when the resource does not exist.
Returned when an error on the server occurred.
Returned when the resource is temporarily unavailable.
An unexpected error response.
Abort running job (an incomplete job that is yet to start will be deleted)
Your ByteNite access token
The id associated with your job.
A successful response.
Returned when the users sends a malformed request.
Returned when the user is not authenticated.
Returned when the user does not have permission to access the resource.
Returned when the resource does not exist.
Returned when an error on the server occurred.
Returned when the resource is temporarily unavailable.
An unexpected error response.
Delete a job
Your ByteNite access token
The id associated with your job.
A successful response.
Returned when the users sends a malformed request.
Returned when the user is not authenticated.
Returned when the user does not have permission to access the resource.
Returned when the resource does not exist.
Returned when an error on the server occurred.
Returned when the resource is temporarily unavailable.
An unexpected error response.
Listen events
Your ByteNite access token
A successful response.(streaming responses)
Returned when the users sends a malformed request.
Returned when the user is not authenticated.
Returned when the user does not have permission to access the resource.
Returned when the resource does not exist.
Returned when an error on the server occurred.
Returned when the resource is temporarily unavailable.
An unexpected error response.
Set a job datasource
Your ByteNite access token
The id associated with your job.
A successful response.
Returned when the users sends a malformed request.
Returned when the user is not authenticated.
Returned when the user does not have permission to access the resource.
Returned when the resource does not exist.
Returned when an error on the server occurred.
Returned when the resource is temporarily unavailable.
An unexpected error response.
Set or update job specific parameters
Your ByteNite access token
The id associated with your job.
[Deprecated] Preset configuration. This field is no longer in use.
Sets parameters for the partitioning engine.
Sets parameters for the assembling engine.
Sets parameters for the application..
A successful response.
Returned when the users sends a malformed request.
Returned when the user is not authenticated.
Returned when the user does not have permission to access the resource.
Returned when the resource does not exist.
Returned when an error on the server occurred.
Returned when the resource is temporarily unavailable.
An unexpected error response.
Set a job name
Your ByteNite access token
The id associated with your job.
My JobA successful response.
Returned when the users sends a malformed request.
Returned when the user is not authenticated.
Returned when the user does not have permission to access the resource.
Returned when the resource does not exist.
Returned when an error on the server occurred.
Returned when the resource is temporarily unavailable.
An unexpected error response.
Set or update execution parameters/configurations
Your ByteNite access token
The id associated with your job.
A successful response.
Returned when the users sends a malformed request.
Returned when the user is not authenticated.
Returned when the user does not have permission to access the resource.
Returned when the resource does not exist.
Returned when an error on the server occurred.
Returned when the resource is temporarily unavailable.
An unexpected error response.
Test and get information about a data source connection
Your ByteNite access token
A successful response.
Returned when the users sends a malformed request.
Returned when the user is not authenticated.
Returned when the user does not have permission to access the resource.
Returned when the resource does not exist.
Returned when an error on the server occurred.
Returned when the resource is temporarily unavailable.
An unexpected error response.
Get job properties
Your ByteNite access token
The id associated with your job.
A successful response.
Returned when the users sends a malformed request.
Returned when the user is not authenticated.
Returned when the user does not have permission to access the resource.
Returned when the resource does not exist.
Returned when an error on the server occurred.
Returned when the resource is temporarily unavailable.
An unexpected error response.
Get job results
Your ByteNite access token
The id associated with your job.
A successful response.
Returned when the users sends a malformed request.
Returned when the user is not authenticated.
Returned when the user does not have permission to access the resource.
Returned when the resource does not exist.
Returned when an error on the server occurred.
Returned when the resource is temporarily unavailable.
An unexpected error response.
Get all jobs for user with optional filters
Your ByteNite access token
Number of rows to return per page.
Number of rows to skip before starting to collect the result set.
A successful response.
Returned when the users sends a malformed request.
Returned when the user is not authenticated.
Returned when the user does not have permission to access the resource.
Returned when the resource does not exist.
Returned when an error on the server occurred.
Returned when the resource is temporarily unavailable.
An unexpected error response.
Get all jobs for user and filter them
Your ByteNite access token
A successful response.
Returned when the users sends a malformed request.
Returned when the user is not authenticated.
Returned when the user does not have permission to access the resource.
Returned when the resource does not exist.
Returned when an error on the server occurred.
Returned when the resource is temporarily unavailable.
An unexpected error response.
Get available job templates
Your ByteNite access token
Number of rows to return per page.
Number of rows to skip before starting to collect the result set.
Field to order the results by. Defaults to 'created_at'.
A successful response.
Returned when the users sends a malformed request.
Returned when the user is not authenticated.
Returned when the user does not have permission to access the resource.
Returned when the resource does not exist.
Returned when an error on the server occurred.
Returned when the resource is temporarily unavailable.
An unexpected error response.
Create a new computing job on ByteNite.
Your ByteNite access token
Mnemonic name for the job.
Identifier of the application template used for this job.
Textual description of the job.
A successful response.
Returned when the users sends a malformed request.
Returned when the user is not authenticated.
Returned when the user does not have permission to access the resource.
Returned when the resource does not exist.
Returned when an error on the server occurred.
Returned when the resource is temporarily unavailable.
An unexpected error response.
Get the number of running tasks for the jobs
Your ByteNite access token
Get the running tasks for the provided jobs.
["a5189ec6-6658-49e6-9960-99ed15b63f4d","b1234abc-1234-5678-9101-abcdef123456"]A successful response.
Returned when the users sends a malformed request.
Returned when the user is not authenticated.
Returned when the user does not have permission to access the resource.
Returned when the resource does not exist.
Returned when an error on the server occurred.
Returned when the resource is temporarily unavailable.
An unexpected error response.
Set a job local file upload completed
Your ByteNite access token
The id associated with your job.
A successful response.
Returned when the users sends a malformed request.
Returned when the user is not authenticated.
Returned when the user does not have permission to access the resource.
Returned when the resource does not exist.
Returned when an error on the server occurred.
Returned when the resource is temporarily unavailable.
An unexpected error response.
Get logs for the provided filters
Your ByteNite access token
a5189ec6-6658-49e6-9960-99ed15b63f4d["a5189ec6-6658-49e6-9960-99ed15b63f4d","b1234abc-1234-5678-9101-abcdef123456"]A successful response.
Returned when the users sends a malformed request.
Returned when the user is not authenticated.
Returned when the user does not have permission to access the resource.
Returned when the resource does not exist.
Returned when an error on the server occurred.
Returned when the resource is temporarily unavailable.
An unexpected error response.
Server software version and important messages
Your ByteNite access token
A successful response.
Returned when the users sends a malformed request.
Returned when the user is not authenticated.
Returned when the user does not have permission to access the resource.
Returned when the resource does not exist.
Returned when an error on the server occurred.
Returned when the resource is temporarily unavailable.
An unexpected error response.
{
"ok": false,
"requestId": "xyz-123",
"message": "Request failed",
"error": {
"code": 404,
"message": "Not Found",
"description": "The requested resource was not found"
}
}POST /v1/customer/jobs/{jobId}/run HTTP/1.1
Host: api.bytenite.com
Authorization: YOUR_API_KEY
Content-Type: application/json
Accept: */*
Content-Length: 60
{
"config": {
"taskTimeout": 1,
"jobTimeout": 1,
"isTestJob": true
}
}POST /v1/customer/jobs/{jobId}/abort HTTP/1.1
Host: api.bytenite.com
Authorization: YOUR_API_KEY
Accept: */*
{
"ok": false,
"requestId": "xyz-123",
"message": "Request failed",
"error": {
"code": 404,
"message": "Not Found",
"description": "The requested resource was not found"
}
}DELETE /v1/customer/jobs/{jobId} HTTP/1.1
Host: api.bytenite.com
Authorization: YOUR_API_KEY
Accept: */*
{
"ok": false,
"requestId": "xyz-123",
"message": "Request failed",
"error": {
"code": 404,
"message": "Not Found",
"description": "The requested resource was not found"
}
}GET /v1/customer/events HTTP/1.1
Host: api.bytenite.com
Authorization: YOUR_API_KEY
Accept: */*
{
"result": {
"event": "text",
"data": {
"@type": "text",
"ANY_ADDITIONAL_PROPERTY": "anything"
}
},
"error": {
"code": 1,
"message": "text",
"details": [
{
"@type": "text",
"ANY_ADDITIONAL_PROPERTY": "anything"
}
]
}
}{
"filename": "text",
"path": "text",
"size": "text",
"properties": {
"ANY_ADDITIONAL_PROPERTY": "text"
},
"tempUrl": "text",
"files": {
"name": "text",
"path": "text",
"directories": [
{
"name": "text",
"path": "text",
"directories": [
{
"name": "text",
"path": "text",
"directories": "[Circular Reference]",
"files": [
{
"id": "text",
"name": "text",
"path": "text",
"size": "text"
}
]
}
],
"files": [
{
"id": "text",
"name": "text",
"path": "text",
"size": "text"
}
]
}
],
"files": [
{
"id": "text",
"name": "text",
"path": "text",
"size": "text"
}
]
}
}POST /v1/customer/datasource/test HTTP/1.1
Host: api.bytenite.com
Authorization: YOUR_API_KEY
Content-Type: application/json
Accept: */*
Content-Length: 124
{
"dataSource": {
"dataSourceDescriptor": "s3",
"params": {
"@type": "text",
"ANY_ADDITIONAL_PROPERTY": "anything"
}
},
"listFiles": true
}GET /v1/customer/jobs/templates HTTP/1.1
Host: api.bytenite.com
Authorization: YOUR_API_KEY
Accept: */*
{
"pagination": {
"total": 1,
"offset": 1,
"hasPrevious": true,
"hasNext": true
},
"data": [
{
"id": "text",
"owner": "text",
"description": "text",
"app": "text",
"partitioner": "text",
"assembler": "text"
}
]
}{
"job": {
"id": "text",
"templateId": "text",
"name": "text",
"config": {
"taskTimeout": 1,
"jobTimeout": 1,
"isTestJob": true
},
"priority": "EXECUTION_PRIORITY_UNDEFINED",
"startAt": "2025-12-09T19:56:17.981Z",
"submittedAt": "2025-12-09T19:56:17.981Z",
"startedAt": "2025-12-09T19:56:17.981Z",
"endedAt": "2025-12-09T19:56:17.981Z",
"regions": {
"blacklist": [
"text"
],
"whitelist": [
"text"
]
},
"state": "JOB_STATE_NEW",
"dataSource": {
"dataSourceDescriptor": "s3",
"params": {
"@type": "text",
"ANY_ADDITIONAL_PROPERTY": "anything"
}
},
"params": {
"preset": "text",
"partitioner": {},
"assembler": {},
"app": {}
},
"dataDestination": {
"dataSourceDescriptor": "s3",
"params": {
"@type": "text",
"ANY_ADDITIONAL_PROPERTY": "anything"
}
},
"duration": 1,
"deletedAt": "2025-12-09T19:56:17.981Z",
"createdAt": "2025-12-09T19:56:17.981Z",
"paymentAmount": 1,
"numUnitsEstimation": "text",
"numChunks": 1,
"errorMessage": "text",
"description": "text",
"stateTimestamps": {
"ANY_ADDITIONAL_PROPERTY": "2025-12-09T19:56:17.981Z"
},
"appId": "text",
"templateInfo": {
"id": "text",
"owner": "text",
"description": "text",
"app": "text",
"partitioner": "text",
"assembler": "text"
}
},
"templateInfo": {
"id": "text",
"owner": "text",
"description": "text",
"app": "text",
"partitioner": "text",
"assembler": "text"
}
}{
"job": {
"id": "text",
"templateId": "text",
"name": "text",
"config": {
"taskTimeout": 1,
"jobTimeout": 1,
"isTestJob": true
},
"priority": "EXECUTION_PRIORITY_UNDEFINED",
"startAt": "2025-12-09T19:56:17.981Z",
"submittedAt": "2025-12-09T19:56:17.981Z",
"startedAt": "2025-12-09T19:56:17.981Z",
"endedAt": "2025-12-09T19:56:17.981Z",
"regions": {
"blacklist": [
"text"
],
"whitelist": [
"text"
]
},
"state": "JOB_STATE_NEW",
"dataSource": {
"dataSourceDescriptor": "s3",
"params": {
"@type": "text",
"ANY_ADDITIONAL_PROPERTY": "anything"
}
},
"params": {
"preset": "text",
"partitioner": {},
"assembler": {},
"app": {}
},
"dataDestination": {
"dataSourceDescriptor": "s3",
"params": {
"@type": "text",
"ANY_ADDITIONAL_PROPERTY": "anything"
}
},
"duration": 1,
"deletedAt": "2025-12-09T19:56:17.981Z",
"createdAt": "2025-12-09T19:56:17.981Z",
"paymentAmount": 1,
"numUnitsEstimation": "text",
"numChunks": 1,
"errorMessage": "text",
"description": "text",
"stateTimestamps": {
"ANY_ADDITIONAL_PROPERTY": "2025-12-09T19:56:17.981Z"
},
"appId": "text",
"templateInfo": {
"id": "text",
"owner": "text",
"description": "text",
"app": "text",
"partitioner": "text",
"assembler": "text"
}
},
"templateInfo": {
"id": "text",
"owner": "text",
"description": "text",
"app": "text",
"partitioner": "text",
"assembler": "text"
}
}{
"job": {
"id": "text",
"templateId": "text",
"name": "text",
"config": {
"taskTimeout": 1,
"jobTimeout": 1,
"isTestJob": true
},
"priority": "EXECUTION_PRIORITY_UNDEFINED",
"startAt": "2025-12-09T19:56:17.981Z",
"submittedAt": "2025-12-09T19:56:17.981Z",
"startedAt": "2025-12-09T19:56:17.981Z",
"endedAt": "2025-12-09T19:56:17.981Z",
"regions": {
"blacklist": [
"text"
],
"whitelist": [
"text"
]
},
"state": "JOB_STATE_NEW",
"dataSource": {
"dataSourceDescriptor": "s3",
"params": {
"@type": "text",
"ANY_ADDITIONAL_PROPERTY": "anything"
}
},
"params": {
"preset": "text",
"partitioner": {},
"assembler": {},
"app": {}
},
"dataDestination": {
"dataSourceDescriptor": "s3",
"params": {
"@type": "text",
"ANY_ADDITIONAL_PROPERTY": "anything"
}
},
"duration": 1,
"deletedAt": "2025-12-09T19:56:17.981Z",
"createdAt": "2025-12-09T19:56:17.981Z",
"paymentAmount": 1,
"numUnitsEstimation": "text",
"numChunks": 1,
"errorMessage": "text",
"description": "text",
"stateTimestamps": {
"ANY_ADDITIONAL_PROPERTY": "2025-12-09T19:56:17.981Z"
},
"appId": "text",
"templateInfo": {
"id": "text",
"owner": "text",
"description": "text",
"app": "text",
"partitioner": "text",
"assembler": "text"
}
},
"templateInfo": {
"id": "text",
"owner": "text",
"description": "text",
"app": "text",
"partitioner": "text",
"assembler": "text"
}
}{
"job": {
"id": "text",
"templateId": "text",
"name": "text",
"config": {
"taskTimeout": 1,
"jobTimeout": 1,
"isTestJob": true
},
"priority": "EXECUTION_PRIORITY_UNDEFINED",
"startAt": "2025-12-09T19:56:17.981Z",
"submittedAt": "2025-12-09T19:56:17.981Z",
"startedAt": "2025-12-09T19:56:17.981Z",
"endedAt": "2025-12-09T19:56:17.981Z",
"regions": {
"blacklist": [
"text"
],
"whitelist": [
"text"
]
},
"state": "JOB_STATE_NEW",
"dataSource": {
"dataSourceDescriptor": "s3",
"params": {
"@type": "text",
"ANY_ADDITIONAL_PROPERTY": "anything"
}
},
"params": {
"preset": "text",
"partitioner": {},
"assembler": {},
"app": {}
},
"dataDestination": {
"dataSourceDescriptor": "s3",
"params": {
"@type": "text",
"ANY_ADDITIONAL_PROPERTY": "anything"
}
},
"duration": 1,
"deletedAt": "2025-12-09T19:56:17.981Z",
"createdAt": "2025-12-09T19:56:17.981Z",
"paymentAmount": 1,
"numUnitsEstimation": "text",
"numChunks": 1,
"errorMessage": "text",
"description": "text",
"stateTimestamps": {
"ANY_ADDITIONAL_PROPERTY": "2025-12-09T19:56:17.981Z"
},
"appId": "text",
"templateInfo": {
"id": "text",
"owner": "text",
"description": "text",
"app": "text",
"partitioner": "text",
"assembler": "text"
}
},
"templateInfo": {
"id": "text",
"owner": "text",
"description": "text",
"app": "text",
"partitioner": "text",
"assembler": "text"
}
}PATCH /v1/customer/jobs/{jobId}/datasource HTTP/1.1
Host: api.bytenite.com
Authorization: YOUR_API_KEY
Content-Type: application/json
Accept: */*
Content-Length: 218
{
"dataSource": {
"dataSourceDescriptor": "s3",
"params": {
"@type": "text",
"ANY_ADDITIONAL_PROPERTY": "anything"
}
},
"dataDestination": {
"dataSourceDescriptor": "s3",
"params": {
"@type": "text",
"ANY_ADDITIONAL_PROPERTY": "anything"
}
}
}PATCH /v1/customer/jobs/{jobId}/params HTTP/1.1
Host: api.bytenite.com
Authorization: YOUR_API_KEY
Content-Type: application/json
Accept: */*
Content-Length: 58
{
"preset": "text",
"partitioner": {},
"assembler": {},
"app": {}
}PATCH /v1/customer/jobs/{jobId}/jobname HTTP/1.1
Host: api.bytenite.com
Authorization: YOUR_API_KEY
Content-Type: application/json
Accept: */*
Content-Length: 8
"My Job"PATCH /v1/customer/jobs/{jobId}/configs HTTP/1.1
Host: api.bytenite.com
Authorization: YOUR_API_KEY
Content-Type: application/json
Accept: */*
Content-Length: 49
{
"taskTimeout": 1,
"jobTimeout": 1,
"isTestJob": true
}{
"pagination": {
"total": 1,
"offset": 1,
"hasPrevious": true,
"hasNext": true
},
"data": [
{
"id": "text",
"templateId": "text",
"name": "text",
"config": {
"taskTimeout": 1,
"jobTimeout": 1,
"isTestJob": true
},
"priority": "EXECUTION_PRIORITY_UNDEFINED",
"startAt": "2025-12-09T19:56:17.981Z",
"submittedAt": "2025-12-09T19:56:17.981Z",
"startedAt": "2025-12-09T19:56:17.981Z",
"endedAt": "2025-12-09T19:56:17.981Z",
"regions": {
"blacklist": [
"text"
],
"whitelist": [
"text"
]
},
"state": "JOB_STATE_NEW",
"dataSource": {
"dataSourceDescriptor": "s3",
"params": {
"@type": "text",
"ANY_ADDITIONAL_PROPERTY": "anything"
}
},
"params": {
"preset": "text",
"partitioner": {},
"assembler": {},
"app": {}
},
"dataDestination": {
"dataSourceDescriptor": "s3",
"params": {
"@type": "text",
"ANY_ADDITIONAL_PROPERTY": "anything"
}
},
"duration": 1,
"deletedAt": "2025-12-09T19:56:17.981Z",
"createdAt": "2025-12-09T19:56:17.981Z",
"paymentAmount": 1,
"numUnitsEstimation": "text",
"numChunks": 1,
"errorMessage": "text",
"description": "text",
"stateTimestamps": {
"ANY_ADDITIONAL_PROPERTY": "2025-12-09T19:56:17.981Z"
},
"appId": "text",
"templateInfo": {
"id": "text",
"owner": "text",
"description": "text",
"app": "text",
"partitioner": "text",
"assembler": "text"
}
}
]
}GET /v1/customer/jobs/{jobId} HTTP/1.1
Host: api.bytenite.com
Authorization: YOUR_API_KEY
Accept: */*
{
"job": {
"id": "text",
"templateId": "text",
"name": "text",
"config": {
"taskTimeout": 1,
"jobTimeout": 1,
"isTestJob": true
},
"priority": "EXECUTION_PRIORITY_UNDEFINED",
"startAt": "2025-12-09T19:56:17.981Z",
"submittedAt": "2025-12-09T19:56:17.981Z",
"startedAt": "2025-12-09T19:56:17.981Z",
"endedAt": "2025-12-09T19:56:17.981Z",
"regions": {
"blacklist": [
"text"
],
"whitelist": [
"text"
]
},
"state": "JOB_STATE_NEW",
"dataSource": {
"dataSourceDescriptor": "s3",
"params": {
"@type": "text",
"ANY_ADDITIONAL_PROPERTY": "anything"
}
},
"params": {
"preset": "text",
"partitioner": {},
"assembler": {},
"app": {}
},
"dataDestination": {
"dataSourceDescriptor": "s3",
"params": {
"@type": "text",
"ANY_ADDITIONAL_PROPERTY": "anything"
}
},
"duration": 1,
"deletedAt": "2025-12-09T19:56:17.981Z",
"createdAt": "2025-12-09T19:56:17.981Z",
"paymentAmount": 1,
"numUnitsEstimation": "text",
"numChunks": 1,
"errorMessage": "text",
"description": "text",
"stateTimestamps": {
"ANY_ADDITIONAL_PROPERTY": "2025-12-09T19:56:17.981Z"
},
"appId": "text",
"templateInfo": {
"id": "text",
"owner": "text",
"description": "text",
"app": "text",
"partitioner": "text",
"assembler": "text"
}
},
"templateInfo": {
"id": "text",
"owner": "text",
"description": "text",
"app": "text",
"partitioner": "text",
"assembler": "text"
}
}GET /v1/customer/jobs/{jobId}/results HTTP/1.1
Host: api.bytenite.com
Authorization: YOUR_API_KEY
Accept: */*
{
"results": [
{
"name": "text",
"link": "text"
}
]
}GET /v1/customer/jobs HTTP/1.1
Host: api.bytenite.com
Authorization: YOUR_API_KEY
Accept: */*
{
"pagination": {
"total": 1,
"offset": 1,
"hasPrevious": true,
"hasNext": true
},
"data": [
{
"id": "text",
"templateId": "text",
"name": "text",
"config": {
"taskTimeout": 1,
"jobTimeout": 1,
"isTestJob": true
},
"priority": "EXECUTION_PRIORITY_UNDEFINED",
"startAt": "2025-12-09T19:56:17.981Z",
"submittedAt": "2025-12-09T19:56:17.981Z",
"startedAt": "2025-12-09T19:56:17.981Z",
"endedAt": "2025-12-09T19:56:17.981Z",
"regions": {
"blacklist": [
"text"
],
"whitelist": [
"text"
]
},
"state": "JOB_STATE_NEW",
"dataSource": {
"dataSourceDescriptor": "s3",
"params": {
"@type": "text",
"ANY_ADDITIONAL_PROPERTY": "anything"
}
},
"params": {
"preset": "text",
"partitioner": {},
"assembler": {},
"app": {}
},
"dataDestination": {
"dataSourceDescriptor": "s3",
"params": {
"@type": "text",
"ANY_ADDITIONAL_PROPERTY": "anything"
}
},
"duration": 1,
"deletedAt": "2025-12-09T19:56:17.981Z",
"createdAt": "2025-12-09T19:56:17.981Z",
"paymentAmount": 1,
"numUnitsEstimation": "text",
"numChunks": 1,
"errorMessage": "text",
"description": "text",
"stateTimestamps": {
"ANY_ADDITIONAL_PROPERTY": "2025-12-09T19:56:17.981Z"
},
"appId": "text",
"templateInfo": {
"id": "text",
"owner": "text",
"description": "text",
"app": "text",
"partitioner": "text",
"assembler": "text"
}
}
]
}POST /v1/customer/jobs/filter HTTP/1.1
Host: api.bytenite.com
Authorization: YOUR_API_KEY
Content-Type: application/json
Accept: */*
Content-Length: 216
{
"pagination": {
"limit": 1,
"offset": 1
},
"filters": [
{
"field": "text",
"condition": "FILTER_CONDITION_EQ",
"value": {
"@type": "type.googleapis.com/google.protobuf.Value",
"value": "value to filter (any type)"
}
}
],
"orderBy": "text"
}{
"jobsRunningTasks": {
"a5189ec6-6658-49e6-9960-99ed15b63f4d": 2,
"b1234abc-1234-5678-9101-abcdef123456": 1
}
}POST /v1/customer/jobs/runningTasks HTTP/1.1
Host: api.bytenite.com
Authorization: YOUR_API_KEY
Content-Type: application/json
Accept: */*
Content-Length: 91
{
"jobsIds": [
"a5189ec6-6658-49e6-9960-99ed15b63f4d",
"b1234abc-1234-5678-9101-abcdef123456"
]
}PATCH /v1/customer/jobs/{jobId}/uploadcompleted HTTP/1.1
Host: api.bytenite.com
Authorization: YOUR_API_KEY
Accept: */*
{
"ok": false,
"requestId": "xyz-123",
"message": "Request failed",
"error": {
"code": 404,
"message": "Not Found",
"description": "The requested resource was not found"
}
}GET /v1/customer/info HTTP/1.1
Host: api.bytenite.com
Authorization: YOUR_API_KEY
Accept: */*
{
"version": {
"major": 1,
"minor": 0,
"tag": 0
},
"messages": {
"ANY_ADDITIONAL_PROPERTY": "text"
}
}POST /v1/customer/jobs HTTP/1.1
Host: api.bytenite.com
Authorization: YOUR_API_KEY
Content-Type: application/json
Accept: */*
Content-Length: 55
{
"name": "My job",
"templateId": "[email protected]"
}{
"job": {
"id": "text",
"templateId": "text",
"name": "text",
"config": {
"taskTimeout": 1,
"jobTimeout": 1,
"isTestJob": true
},
"priority": "EXECUTION_PRIORITY_UNDEFINED",
"startAt": "2025-12-09T19:56:17.981Z",
"submittedAt": "2025-12-09T19:56:17.981Z",
"startedAt": "2025-12-09T19:56:17.981Z",
"endedAt": "2025-12-09T19:56:17.981Z",
"regions": {
"blacklist": [
"text"
],
"whitelist": [
"text"
]
},
"state": "JOB_STATE_NEW",
"dataSource": {
"dataSourceDescriptor": "s3",
"params": {
"@type": "text",
"ANY_ADDITIONAL_PROPERTY": "anything"
}
},
"params": {
"preset": "text",
"partitioner": {},
"assembler": {},
"app": {}
},
"dataDestination": {
"dataSourceDescriptor": "s3",
"params": {
"@type": "text",
"ANY_ADDITIONAL_PROPERTY": "anything"
}
},
"duration": 1,
"deletedAt": "2025-12-09T19:56:17.981Z",
"createdAt": "2025-12-09T19:56:17.981Z",
"paymentAmount": 1,
"numUnitsEstimation": "text",
"numChunks": 1,
"errorMessage": "text",
"description": "text",
"stateTimestamps": {
"ANY_ADDITIONAL_PROPERTY": "2025-12-09T19:56:17.981Z"
},
"appId": "text",
"templateInfo": {
"id": "text",
"owner": "text",
"description": "text",
"app": "text",
"partitioner": "text",
"assembler": "text"
}
},
"templateInfo": {
"id": "text",
"owner": "text",
"description": "text",
"app": "text",
"partitioner": "text",
"assembler": "text"
}
}POST /v1/customer/logs HTTP/1.1
Host: api.bytenite.com
Authorization: YOUR_API_KEY
Content-Type: application/json
Accept: */*
Content-Length: 48
{
"jobId": "238cecbf-ca05-4a79-ac62-fd89f92684ee"
}{
"partitioner": [
{
"log": "sample-log-message from loki",
"timestamp": "2025-12-09T19:56:17.981Z",
"level": "INFO",
"container": "main"
}
],
"assembler": [
{
"log": "sample-log-message from loki",
"timestamp": "2025-12-09T19:56:17.981Z",
"level": "INFO",
"container": "main"
}
],
"taskrunner": {
"ANY_ADDITIONAL_PROPERTY": {
"logs": [
{
"log": "sample-log-message from loki",
"timestamp": "2025-12-09T19:56:17.981Z",
"level": "INFO",
"container": "main"
}
]
}
}
}Activate a distributed app
Your ByteNite access token
Unique tag of the app
A successful response.
Returned when the users sends a malformed request.
Returned when the user is not authenticated.
Returned when the user does not have permission to access the resource.
Returned when the resource does not exist.
Returned when an error on the server occurred.
Returned when the resource is temporarily unavailable.
An unexpected error response.
Activate a distributed app
Your ByteNite access token
Unique tag of the app
A successful response.
Returned when the users sends a malformed request.
Returned when the user is not authenticated.
Returned when the user does not have permission to access the resource.
Returned when the resource does not exist.
Returned when an error on the server occurred.
Returned when the resource is temporarily unavailable.
An unexpected error response.
Server software version and important messages
Your ByteNite access token
A successful response.
Returned when the users sends a malformed request.
Returned when the user is not authenticated.
Returned when the user does not have permission to access the resource.
Returned when the resource does not exist.
Returned when an error on the server occurred.
Returned when the resource is temporarily unavailable.
An unexpected error response.
List all distributed apps created by the user.
Use this endpoint to fetch apps created by the user.
Your ByteNite access token
Field name to sort apps by (e.g., createdAt).
Number of rows to return per page.
Number of rows to skip before starting to collect the result set.
Filter public apps only
A successful response.
Returned when the users sends a malformed request.
Returned when the user is not authenticated.
Returned when the user does not have permission to access the resource.
Returned when the resource does not exist.
Returned when an error on the server occurred.
Returned when the resource is temporarily unavailable.
An unexpected error response.
Get the latest app de
Your ByteNite access token
Unique tag of the app
A successful response.
Returned when the users sends a malformed request.
Returned when the user is not authenticated.
Returned when the user does not have permission to access the resource.
Returned when the resource does not exist.
Returned when an error on the server occurred.
Returned when the resource is temporarily unavailable.
An unexpected error response.
Get status of app
Your ByteNite access token
Unique tag of the app
A successful response.
Returned when the users sends a malformed request.
Returned when the user is not authenticated.
Returned when the user does not have permission to access the resource.
Returned when the resource does not exist.
Returned when an error on the server occurred.
Returned when the resource is temporarily unavailable.
An unexpected error response.
Upload a template to the server
Your ByteNite access token
The templates specific to each app are stored in this table.
User name of the template owner.
aliceA successful response.
Returned when the users sends a malformed request.
Returned when the user is not authenticated.
Returned when the user does not have permission to access the resource.
Returned when the resource does not exist.
Returned when an error on the server occurred.
Returned when the resource is temporarily unavailable.
An unexpected error response.
Get a template by id
Your ByteNite access token
A successful response.
Returned when the users sends a malformed request.
Returned when the user is not authenticated.
Returned when the user does not have permission to access the resource.
Returned when the resource does not exist.
Returned when an error on the server occurred.
Returned when the resource is temporarily unavailable.
An unexpected error response.
List all templates created by the user
Your ByteNite access token
Field name to sort apps by (e.g., createdAt).
Number of rows to return per page.
Number of rows to skip before starting to collect the result set.
Filter public templates only
A successful response.
Returned when the users sends a malformed request.
Returned when the user is not authenticated.
Returned when the user does not have permission to access the resource.
Returned when the resource does not exist.
Returned when an error on the server occurred.
Returned when the resource is temporarily unavailable.
An unexpected error response.
Get download link for an app
Your ByteNite access token
Unique tag of the app
A successful response.
Returned when the users sends a malformed request.
Returned when the user is not authenticated.
Returned when the user does not have permission to access the resource.
Returned when the resource does not exist.
Returned when an error on the server occurred.
Returned when the resource is temporarily unavailable.
An unexpected error response.
Upload a engine to the server
Your ByteNite access token
A successful response.
Returned when the users sends a malformed request.
Returned when the user is not authenticated.
Returned when the user does not have permission to access the resource.
Returned when the resource does not exist.
Returned when an error on the server occurred.
Returned when the resource is temporarily unavailable.
An unexpected error response.
Download an Engine
Your ByteNite access token
A successful response.
Returned when the users sends a malformed request.
Returned when the user is not authenticated.
Returned when the user does not have permission to access the resource.
Returned when the resource does not exist.
Returned when an error on the server occurred.
Returned when the resource is temporarily unavailable.
An unexpected error response.
Activate an Engine
Your ByteNite access token
A successful response.
Returned when the users sends a malformed request.
Returned when the user is not authenticated.
Returned when the user does not have permission to access the resource.
Returned when the resource does not exist.
Returned when an error on the server occurred.
Returned when the resource is temporarily unavailable.
An unexpected error response.
Deactivate an Engine
Your ByteNite access token
A successful response.
Returned when the users sends a malformed request.
Returned when the user is not authenticated.
Returned when the user does not have permission to access the resource.
Returned when the resource does not exist.
Returned when an error on the server occurred.
Returned when the resource is temporarily unavailable.
An unexpected error response.
Upload a distributed app to the server
Your ByteNite access token
A successful response.
Returned when the users sends a malformed request.
Returned when the user is not authenticated.
Returned when the user does not have permission to access the resource.
Returned when the resource does not exist.
Returned when an error on the server occurred.
Returned when the resource is temporarily unavailable.
An unexpected error response.
List all engines owned by the user
Your ByteNite access token
Field name to sort apps by (e.g., createdAt).
Number of rows to return per page.
Number of rows to skip before starting to collect the result set.
Filter public engines only
A successful response.
Returned when the users sends a malformed request.
Returned when the user is not authenticated.
Returned when the user does not have permission to access the resource.
Returned when the resource does not exist.
Returned when an error on the server occurred.
Returned when the resource is temporarily unavailable.
An unexpected error response.
Get an engine by tag
Your ByteNite access token
A successful response.
Returned when the users sends a malformed request.
Returned when the user is not authenticated.
Returned when the user does not have permission to access the resource.
Returned when the resource does not exist.
Returned when an error on the server occurred.
Returned when the resource is temporarily unavailable.
An unexpected error response.
Get status of engine
Your ByteNite access token
A successful response.
Returned when the users sends a malformed request.
Returned when the user is not authenticated.
Returned when the user does not have permission to access the resource.
Returned when the resource does not exist.
Returned when an error on the server occurred.
Returned when the resource is temporarily unavailable.
An unexpected error response.
POST /v1/dev/apps/{appTag}/activate HTTP/1.1
Host: api.bytenite.com
Authorization: YOUR_API_KEY
Accept: */*
{
"ok": false,
"requestId": "xyz-123",
"message": "Request failed",
"error": {
"code": 404,
"message": "Not Found",
"description": "The requested resource was not found"
}
}POST /v1/dev/apps/{appTag}/deactivate HTTP/1.1
Host: api.bytenite.com
Authorization: YOUR_API_KEY
Accept: */*
{
"ok": false,
"requestId": "xyz-123",
"message": "Request failed",
"error": {
"code": 404,
"message": "Not Found",
"description": "The requested resource was not found"
}
}GET /v1/dev/info HTTP/1.1
Host: api.bytenite.com
Authorization: YOUR_API_KEY
Accept: */*
{
"version": {
"major": 1,
"minor": 0,
"tag": 0
},
"messages": {
"ANY_ADDITIONAL_PROPERTY": "text"
}
}GET /v1/dev/apps HTTP/1.1
Host: api.bytenite.com
Authorization: YOUR_API_KEY
Accept: */*
{
"apps": [
{
"id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"name": "video-transcoding",
"version": "1.0",
"owner": "b7aac91d-7e62-4923-898f-5c6d9ea48927",
"status": "active",
"deviceRequirements": {
"minCpu": 1,
"minMemory": 2,
"gpu": [
"tesla t4",
"nvidia a100-sxm4-40gb"
]
},
"isPublic": true,
"createdAt": "2025-12-09T19:56:17.981Z",
"updatedAt": "2025-12-09T19:56:17.981Z",
"platform": "docker",
"hash": "Plv5qqtm1jPtm8Brq4jMj9u/zSJMQV85fl62UNxltcM=",
"link": "text",
"platformConfig": {
"container": "python:latest",
"privateImage": true,
"username": "text",
"token": "text",
"secrets": [
"text"
]
},
"entrypoint": "main.py",
"revision": "text",
"description": "text",
"userName": "alice"
}
],
"pagination": {
"total": 1,
"offset": 1,
"hasPrevious": true,
"hasNext": true
}
}GET /v1/dev/apps/{appTag} HTTP/1.1
Host: api.bytenite.com
Authorization: YOUR_API_KEY
Accept: */*
{
"app": {
"id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"name": "video-transcoding",
"version": "1.0",
"owner": "b7aac91d-7e62-4923-898f-5c6d9ea48927",
"status": "active",
"deviceRequirements": {
"minCpu": 1,
"minMemory": 2,
"gpu": [
"tesla t4",
"nvidia a100-sxm4-40gb"
]
},
"isPublic": true,
"createdAt": "2025-12-09T19:56:17.981Z",
"updatedAt": "2025-12-09T19:56:17.981Z",
"platform": "docker",
"hash": "Plv5qqtm1jPtm8Brq4jMj9u/zSJMQV85fl62UNxltcM=",
"link": "text",
"platformConfig": {
"container": "python:latest",
"privateImage": true,
"username": "text",
"token": "text",
"secrets": [
"text"
]
},
"entrypoint": "main.py",
"revision": "text",
"description": "text",
"userName": "alice"
}
}GET /v1/dev/apps/{appTag}/status HTTP/1.1
Host: api.bytenite.com
Authorization: YOUR_API_KEY
Accept: */*
{
"ok": false,
"requestId": "xyz-123",
"message": "Request failed",
"error": {
"code": 404,
"message": "Not Found",
"description": "The requested resource was not found"
}
}{
"ok": false,
"requestId": "xyz-123",
"message": "Request failed",
"error": {
"code": 404,
"message": "Not Found",
"description": "The requested resource was not found"
}
}POST /v1/dev/templates HTTP/1.1
Host: api.bytenite.com
Authorization: YOUR_API_KEY
Content-Type: application/json
Accept: */*
Content-Length: 562
{
"id": "text",
"createdAt": "2025-12-09T19:56:17.981Z",
"updatedAt": "2025-12-09T19:56:17.981Z",
"isPublic": true,
"partitioner": "text",
"assembler": "text",
"dataSource": {
"dataSourceDescriptor": "s3",
"params": {
"@type": "text",
"ANY_ADDITIONAL_PROPERTY": "anything"
}
},
"dataDestination": {
"dataSourceDescriptor": "s3",
"params": {
"@type": "text",
"ANY_ADDITIONAL_PROPERTY": "anything"
}
},
"params": {
"partitioner": {},
"app": {},
"assembler": {}
},
"config": {
"taskTimeout": 1,
"jobTimeout": 1,
"isTestJob": true,
"maxTaskRetries": 1
},
"userName": "alice",
"description": "text",
"app": "text",
"owner": "text"
}GET /v1/dev/templates/{id} HTTP/1.1
Host: api.bytenite.com
Authorization: YOUR_API_KEY
Accept: */*
{
"id": "text",
"createdAt": "2025-12-09T19:56:17.981Z",
"updatedAt": "2025-12-09T19:56:17.981Z",
"isPublic": true,
"partitioner": "text",
"assembler": "text",
"dataSource": {
"dataSourceDescriptor": "s3",
"params": {
"@type": "text",
"ANY_ADDITIONAL_PROPERTY": "anything"
}
},
"dataDestination": {
"dataSourceDescriptor": "s3",
"params": {
"@type": "text",
"ANY_ADDITIONAL_PROPERTY": "anything"
}
},
"params": {
"partitioner": {},
"app": {},
"assembler": {}
},
"config": {
"taskTimeout": 1,
"jobTimeout": 1,
"isTestJob": true,
"maxTaskRetries": 1
},
"userName": "alice",
"description": "text",
"app": "text",
"owner": "text"
}GET /v1/dev/templates HTTP/1.1
Host: api.bytenite.com
Authorization: YOUR_API_KEY
Accept: */*
{
"templates": [
{
"id": "text",
"createdAt": "2025-12-09T19:56:17.981Z",
"updatedAt": "2025-12-09T19:56:17.981Z",
"isPublic": true,
"partitioner": "text",
"assembler": "text",
"dataSource": {
"dataSourceDescriptor": "s3",
"params": {
"@type": "text",
"ANY_ADDITIONAL_PROPERTY": "anything"
}
},
"dataDestination": {
"dataSourceDescriptor": "s3",
"params": {
"@type": "text",
"ANY_ADDITIONAL_PROPERTY": "anything"
}
},
"params": {
"partitioner": {},
"app": {},
"assembler": {}
},
"config": {
"taskTimeout": 1,
"jobTimeout": 1,
"isTestJob": true,
"maxTaskRetries": 1
},
"userName": "alice",
"description": "text",
"app": "text",
"owner": "text"
}
],
"pagination": {
"total": 1,
"offset": 1,
"hasPrevious": true,
"hasNext": true
}
}GET /v1/dev/apps/{appTag}/download HTTP/1.1
Host: api.bytenite.com
Authorization: YOUR_API_KEY
Accept: */*
{
"ok": false,
"requestId": "xyz-123",
"message": "Request failed",
"error": {
"code": 404,
"message": "Not Found",
"description": "The requested resource was not found"
}
}POST /v1/dev/engines HTTP/1.1
Host: api.bytenite.com
Authorization: YOUR_API_KEY
Accept: */*
{
"id": "text",
"name": "text",
"version": "text",
"owner": "text",
"type": "text",
"status": "text",
"description": "text",
"hash": "text",
"link": "text",
"entrypoint": "text",
"revision": 1,
"createdAt": "2025-12-09T19:56:17.981Z",
"updatedAt": "2025-12-09T19:56:17.981Z",
"deletedAt": "2025-12-09T19:56:17.981Z",
"platform": "text",
"platformConfig": {
"container": "python:latest",
"privateImage": true,
"username": "text",
"token": "text",
"secrets": [
"text"
]
},
"deviceRequirements": {
"minCpu": 1,
"minMemory": 2,
"gpu": [
"tesla t4",
"nvidia a100-sxm4-40gb"
]
},
"isPublic": true,
"userName": "alice"
}GET /v1/dev/engines/{engineTag}/download HTTP/1.1
Host: api.bytenite.com
Authorization: YOUR_API_KEY
Accept: */*
{
"engineId": "text",
"engineTag": "text",
"engineData": "text",
"engineLink": "text",
"engineStatus": "text"
}POST /v1/dev/engines/{engineTag}/activate HTTP/1.1
Host: api.bytenite.com
Authorization: YOUR_API_KEY
Accept: */*
{
"engineId": "text",
"engineTag": "text",
"engineData": "text",
"engineLink": "text",
"engineStatus": "text"
}POST /v1/dev/engines/{engineTag}/deactivate HTTP/1.1
Host: api.bytenite.com
Authorization: YOUR_API_KEY
Accept: */*
{
"engineId": "text",
"engineTag": "text",
"engineData": "text",
"engineLink": "text",
"engineStatus": "text"
}GET /v1/dev/engines HTTP/1.1
Host: api.bytenite.com
Authorization: YOUR_API_KEY
Accept: */*
{
"engines": [
{
"id": "text",
"name": "text",
"version": "text",
"owner": "text",
"type": "text",
"status": "text",
"description": "text",
"hash": "text",
"link": "text",
"entrypoint": "text",
"revision": 1,
"createdAt": "2025-12-09T19:56:17.981Z",
"updatedAt": "2025-12-09T19:56:17.981Z",
"deletedAt": "2025-12-09T19:56:17.981Z",
"platform": "text",
"platformConfig": {
"container": "python:latest",
"privateImage": true,
"username": "text",
"token": "text",
"secrets": [
"text"
]
},
"deviceRequirements": {
"minCpu": 1,
"minMemory": 2,
"gpu": [
"tesla t4",
"nvidia a100-sxm4-40gb"
]
},
"isPublic": true,
"userName": "alice"
}
],
"pagination": {
"total": 1,
"offset": 1,
"hasPrevious": true,
"hasNext": true
}
}GET /v1/dev/engines/{engineTag} HTTP/1.1
Host: api.bytenite.com
Authorization: YOUR_API_KEY
Accept: */*
{
"id": "text",
"name": "text",
"version": "text",
"owner": "text",
"type": "text",
"status": "text",
"description": "text",
"hash": "text",
"link": "text",
"entrypoint": "text",
"revision": 1,
"createdAt": "2025-12-09T19:56:17.981Z",
"updatedAt": "2025-12-09T19:56:17.981Z",
"deletedAt": "2025-12-09T19:56:17.981Z",
"platform": "text",
"platformConfig": {
"container": "python:latest",
"privateImage": true,
"username": "text",
"token": "text",
"secrets": [
"text"
]
},
"deviceRequirements": {
"minCpu": 1,
"minMemory": 2,
"gpu": [
"tesla t4",
"nvidia a100-sxm4-40gb"
]
},
"isPublic": true,
"userName": "alice"
}GET /v1/dev/engines/{engineTag}/status HTTP/1.1
Host: api.bytenite.com
Authorization: YOUR_API_KEY
Accept: */*
{
"engineId": "text",
"engineTag": "text",
"engineData": "text",
"engineLink": "text",
"engineStatus": "text"
}POST /v1/dev/apps HTTP/1.1
Host: api.bytenite.com
Authorization: YOUR_API_KEY
Content-Type: application/json
Accept: */*
Content-Length: 15
{
"data": "text"
}{
"id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"name": "video-transcoding",
"version": "1.0",
"owner": "b7aac91d-7e62-4923-898f-5c6d9ea48927",
"status": "active",
"deviceRequirements": {
"minCpu": 1,
"minMemory": 2,
"gpu": [
"tesla t4",
"nvidia a100-sxm4-40gb"
]
},
"isPublic": true,
"createdAt": "2025-12-09T19:56:17.981Z",
"updatedAt": "2025-12-09T19:56:17.981Z",
"platform": "docker",
"hash": "Plv5qqtm1jPtm8Brq4jMj9u/zSJMQV85fl62UNxltcM=",
"link": "text",
"platformConfig": {
"container": "python:latest",
"privateImage": true,
"username": "text",
"token": "text",
"secrets": [
"text"
]
},
"entrypoint": "main.py",
"revision": "text",
"description": "text",
"userName": "alice"
}