Skip to main content
Upload files to Arweave through the In•Process API. Send a URL and the server fetches the file, uploads it to Arweave via Turbo, and returns an ar:// URI.
To upload directly from the client without routing through this API, see Upload Files to Arweave.

Endpoint

POST /upload

Authentication

MethodHeader
PrivyAuthorization: Bearer <privy_access_token>
API keyx-api-key: <api_key>
For OTP tokens, see Sign in with In•Process.

Upload tiers

TierCondition
FreeFiles under 5 MB — up to 11 uploads per month per artist
PaidFiles ≥ 5 MB, or uploads beyond the 11/month free quota
Paid uploads debit USDC from the artist’s smart wallet. If the balance is insufficient, the API returns 402 with required, available, and smart_wallet fields.

Example (TypeScript)

const UPLOAD_URL = "https://api.inprocess.world/api/upload";

export async function uploadFileViaInProcess(
  fileUrl: string,
  accessToken: string
): Promise<string> {
  const res = await fetch(UPLOAD_URL, {
    method: "POST",
    headers: {
      Authorization: `Bearer ${accessToken}`,
      "Content-Type": "application/json",
    },
    body: JSON.stringify({ url: fileUrl }),
  });

  if (!res.ok) {
    const { message } = await res.json();
    throw new Error(message ?? `HTTP ${res.status}`);
  }

  const { uri } = await res.json();
  return uri;
}
Use x-api-key instead of Authorization when integrating with an API key.

See also