> ## Documentation Index
> Fetch the complete documentation index at: https://www.renderjuice.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Renderjuice API Overview

> Learn how to authenticate, upload source files, create render jobs, and retrieve results via the Renderjuice API.

export const RequestAccessButton = () => {
  const handleClick = () => {
    if (typeof window !== 'undefined' && window.Intercom) {
      window.Intercom('showNewMessage', "Hello, I'm interested in requesting access to API & Webhooks for custom pipeline integration.");
    } else if (typeof window !== 'undefined') {
      setTimeout(() => {
        if (window.Intercom) {
          window.Intercom('show');
        }
      }, 100);
    }
  };
  return <div style={{
    margin: '8px 0'
  }}>
      <button onClick={handleClick} style={{
    backgroundColor: '#5B46D4',
    color: '#ffffff',
    padding: '6px 12px',
    border: 'none',
    borderRadius: '4px',
    cursor: 'pointer',
    fontSize: '14px',
    fontWeight: 500,
    fontFamily: 'inherit',
    transition: 'background-color 0.2s ease',
    display: 'inline-block'
  }} onMouseEnter={e => {
    e.currentTarget.style.backgroundColor = '#4A36C2';
  }} onMouseLeave={e => {
    e.currentTarget.style.backgroundColor = '#5B46D4';
  }}>
        Request Access
      </button>
    </div>;
};

<Callout icon="key" color="#FFC107" iconType="regular">
  **API & Webhooks** are available for studios requiring custom pipeline integration. To ensure we support your specific workflow, access is currently request-only.

  <RequestAccessButton />
</Callout>

<Tip>
  New to API workflow? Check out the [API guide](/docs/customizing-pipelines/api) for use cases, workflow patterns, and best practices.
</Tip>

Renderjuice's API exposes the same job ingestion, monitoring, and asset retrieval workflows available in the dashboard. Before calling any endpoint, you need an API key that is scoped to your workspace.

## Generate an API key

1. Sign in to the Renderjuice platform and make sure to be in the right workspace.
2. Navigate to **Profile & Settings → API Keys**.
3. Click **Create API Key**, give it a descriptive label (for example "render-bot") and choose the appropriate permissions.
4. Copy the key immediately—this is the only time it will be shown. Store it in a secrets manager; treat it like a password.

<Warning>
  Every key inherits full admin privileges to the workspace, so issue keys sparingly and rotate them if an integration no longer needs access.
</Warning>

## Authenticate requests

Include the key in the `Authorization` header using the `Bearer` scheme for every request:

```http theme={null}
GET https://api.renderjuice.com/api/external/v1/jobs
Authorization: Bearer RJ-ABC-XYZ...
Accept: application/json
```

## Upload-first workflow

Renderjuice's API uses four steps for source-file ingestion:

1. Request a presigned upload URL from Renderjuice.
2. Upload a small `.blend` or `.zip` file directly to object storage with a single `PUT`.
3. Create a job using the `slug` returned by the upload endpoint.
4. Validate, render, and download outputs using the existing job endpoints.

```mermaid theme={null}
sequenceDiagram
    participant Tool as Your Tool
    participant API as Renderjuice API
    participant Storage as Object Storage

    Tool->>API: POST /api/external/v1/uploads
    API-->>Tool: uploadUrl + slug + expiresAt
    Tool->>Storage: PUT source file bytes
    Tool->>API: POST /api/external/v1/jobs
    API-->>Tool: job in created status
    Tool->>API: POST /api/external/v1/jobs/:id/validate
    Tool->>API: POST /api/external/v1/jobs/:id/render
```

### Why upload comes first

`POST /jobs` turns an already-uploaded asset into a Renderjuice job. Create the job with the returned `slug`. You do not need to send the filename again.

### Core request flow

Request an upload URL:

```http theme={null}
POST https://api.renderjuice.com/api/external/v1/uploads
Authorization: Bearer RJ-ABC-XYZ...
Content-Type: application/json

{
  "fileName": "shot-010.zip",
  "fileType": "zip"
}
```

Receive an upload target:

```json theme={null}
{
  "uploadUrl": "https://storage.example.com/...",
  "slug": "quiet-lake-1234",
  "expiresAt": "2026-03-26T13:00:00.000Z"
}
```

Create a job from the uploaded asset:

```http theme={null}
POST https://api.renderjuice.com/api/external/v1/jobs
Authorization: Bearer RJ-ABC-XYZ...
Content-Type: application/json

{
  "slug": "quiet-lake-1234"
}
```

### Current constraints

* Small `.blend` and `.zip` uploads only
* Single-request uploads via presigned URL
* Presigned single-request uploads are limited to files smaller than 5 GiB
* Multipart and resumable uploads are out of scope
* Add-on uploads remain a separate workflow

<Tip>
  See the [API guide](/docs/customizing-pipelines/api) for the request and response shape, and the [job lifecycle guide](/docs/api/job-lifecycle) for the steps that follow job creation.
</Tip>

## Next steps

The API Reference tab covers:

* Requesting upload URLs and submitting jobs from uploaded assets.
* Polling job status and retrieving outputs.
* Monitoring job status and downloading outputs.
* Handling webhooks, retries, and errors.
* Rate limits, pagination, and other current constraints.

<Tip>
  If you need access for your team or want to onboard to a private beta endpoint, reach out to [support@renderjuice.com](mailto:support@renderjuice.com)
</Tip>
