@apicity/b2
Backblaze B2 S3-compatible object storage provider.
Runtime dependencies:
zod@^4.4.3— request schemas attached to every POST endpoint as.schema
Installation
npm install @apicity/b2
# or
pnpm add @apicity/b2Quick Start
import { createB2 } from "@apicity/b2";
const b2 = createB2({
accessKeyId: process.env.B2_ACCESS_KEY_ID!,
secretAccessKey: process.env.B2_SECRET_ACCESS_KEY!,
region: process.env.B2_REGION!,
endpoint: process.env.B2_ENDPOINT,
});@apicity/b2 bundles its S3-compatible signing, transport, response parsing, and schemas locally while exposing only Backblaze-supported calls.
API Reference
39 endpoints across 2 groups. Each method mirrors an upstream URL path.
buckets
PUT b2.buckets.create
PUT https://s3.us-west-004.backblazeb2.com/{bucket}
const res = await b2.buckets.create({ /* ... */ });Source: packages/provider/b2/src/b2.ts
DELETE b2.buckets.del
DELETE https://s3.us-west-004.backblazeb2.com/{bucket}
const res = await b2.buckets.del({ /* ... */ });Source: packages/provider/b2/src/b2.ts
DELETE b2.buckets.delCors
DELETE https://s3.us-west-004.backblazeb2.com/{bucket}?cors
const res = await b2.buckets.delCors({ /* ... */ });Source: packages/provider/b2/src/b2.ts
DELETE b2.buckets.delEncryption
DELETE https://s3.us-west-004.backblazeb2.com/{bucket}?encryption
const res = await b2.buckets.delEncryption({ /* ... */ });Source: packages/provider/b2/src/b2.ts
GET b2.buckets.getAcl
GET https://s3.us-west-004.backblazeb2.com/{bucket}?acl
const res = await b2.buckets.getAcl({ /* ... */ });Source: packages/provider/b2/src/b2.ts
GET b2.buckets.getCors
GET https://s3.us-west-004.backblazeb2.com/{bucket}?cors
const res = await b2.buckets.getCors({ /* ... */ });Source: packages/provider/b2/src/b2.ts
GET b2.buckets.getEncryption
GET https://s3.us-west-004.backblazeb2.com/{bucket}?encryption
const res = await b2.buckets.getEncryption({ /* ... */ });Source: packages/provider/b2/src/b2.ts
GET b2.buckets.getObjectLockConfiguration
GET https://s3.us-west-004.backblazeb2.com/{bucket}?object-lock
const res = await b2.buckets.getObjectLockConfiguration({ /* ... */ });Source: packages/provider/b2/src/b2.ts
GET b2.buckets.getVersioning
GET https://s3.us-west-004.backblazeb2.com/{bucket}?versioning
const res = await b2.buckets.getVersioning({ /* ... */ });Source: packages/provider/b2/src/b2.ts
HEAD b2.buckets.head
HEAD https://s3.us-west-004.backblazeb2.com/{bucket}
const res = await b2.buckets.head({ /* ... */ });Source: packages/provider/b2/src/b2.ts
GET b2.buckets.list
GET https://s3.us-west-004.backblazeb2.com/
const res = await b2.buckets.list({ /* ... */ });Source: packages/provider/b2/src/b2.ts
GET b2.buckets.location
GET https://s3.us-west-004.backblazeb2.com/{bucket}?location
const res = await b2.buckets.location({ /* ... */ });Source: packages/provider/b2/src/b2.ts
PUT b2.buckets.putAcl
PUT https://s3.us-west-004.backblazeb2.com/{bucket}?acl
const res = await b2.buckets.putAcl({ /* ... */ });Source: packages/provider/b2/src/b2.ts
PUT b2.buckets.putCors
PUT https://s3.us-west-004.backblazeb2.com/{bucket}?cors
const res = await b2.buckets.putCors({ /* ... */ });Source: packages/provider/b2/src/b2.ts
PUT b2.buckets.putEncryption
PUT https://s3.us-west-004.backblazeb2.com/{bucket}?encryption
const res = await b2.buckets.putEncryption({ /* ... */ });Source: packages/provider/b2/src/b2.ts
PUT b2.buckets.putObjectLockConfiguration
PUT https://s3.us-west-004.backblazeb2.com/{bucket}?object-lock
const res = await b2.buckets.putObjectLockConfiguration({ /* ... */ });Source: packages/provider/b2/src/b2.ts
objects
DELETE b2.objects.abortMultipartUpload
DELETE https://s3.us-west-004.backblazeb2.com/{bucket}/{key}{query}
const res = await b2.objects.abortMultipartUpload({ /* ... */ });Source: packages/provider/b2/src/b2.ts
POST b2.objects.completeMultipartUpload
POST https://s3.us-west-004.backblazeb2.com/{bucket}/{key}{query}
const res = await b2.objects.completeMultipartUpload({ /* ... */ });Source: packages/provider/b2/src/b2.ts
PUT b2.objects.copy
PUT https://s3.us-west-004.backblazeb2.com/{bucket}/{key}
const res = await b2.objects.copy({ /* ... */ });Source: packages/provider/b2/src/b2.ts
POST b2.objects.createMultipartUpload
POST https://s3.us-west-004.backblazeb2.com/{bucket}/{key}?uploads
const res = await b2.objects.createMultipartUpload({ /* ... */ });Source: packages/provider/b2/src/b2.ts
DELETE b2.objects.del
DELETE https://s3.us-west-004.backblazeb2.com/{bucket}/{key}{query}
const res = await b2.objects.del({ /* ... */ });Source: packages/provider/b2/src/b2.ts
POST b2.objects.delMany
POST https://s3.us-west-004.backblazeb2.com/{bucket}?delete
const res = await b2.objects.delMany({ /* ... */ });Source: packages/provider/b2/src/b2.ts
GET b2.objects.get
GET https://s3.us-west-004.backblazeb2.com/{bucket}/{key}{query}
const res = await b2.objects.get({ /* ... */ });Source: packages/provider/b2/src/b2.ts
GET b2.objects.getAcl
GET https://s3.us-west-004.backblazeb2.com/{bucket}/{key}?acl{query}
const res = await b2.objects.getAcl({ /* ... */ });Source: packages/provider/b2/src/b2.ts
GET b2.objects.getLegalHold
GET https://s3.us-west-004.backblazeb2.com/{bucket}/{key}?legal-hold{query}
const res = await b2.objects.getLegalHold({ /* ... */ });Source: packages/provider/b2/src/b2.ts
GET b2.objects.getRetention
GET https://s3.us-west-004.backblazeb2.com/{bucket}/{key}?retention{query}
const res = await b2.objects.getRetention({ /* ... */ });Source: packages/provider/b2/src/b2.ts
GET b2.objects.getStream
GET https://s3.us-west-004.backblazeb2.com/{bucket}/{key}{query}
const res = await b2.objects.getStream({ /* ... */ });Source: packages/provider/b2/src/b2.ts
HEAD b2.objects.head
HEAD https://s3.us-west-004.backblazeb2.com/{bucket}/{key}{query}
const res = await b2.objects.head({ /* ... */ });Source: packages/provider/b2/src/b2.ts
GET b2.objects.list
GET https://s3.us-west-004.backblazeb2.com/{bucket}?list-type=2{query}
const res = await b2.objects.list({ /* ... */ });Source: packages/provider/b2/src/b2.ts
GET b2.objects.listLegacy
GET https://s3.us-west-004.backblazeb2.com/{bucket}{query}
const res = await b2.objects.listLegacy({ /* ... */ });Source: packages/provider/b2/src/b2.ts
GET b2.objects.listMultipartUploads
GET https://s3.us-west-004.backblazeb2.com/{bucket}?uploads{query}
const res = await b2.objects.listMultipartUploads({ /* ... */ });Source: packages/provider/b2/src/b2.ts
GET b2.objects.listParts
GET https://s3.us-west-004.backblazeb2.com/{bucket}/{key}{query}
const res = await b2.objects.listParts({ /* ... */ });Source: packages/provider/b2/src/b2.ts
GET b2.objects.listVersions
GET https://s3.us-west-004.backblazeb2.com/{bucket}?versions{query}
const res = await b2.objects.listVersions({ /* ... */ });Source: packages/provider/b2/src/b2.ts
PUT b2.objects.put
PUT https://s3.us-west-004.backblazeb2.com/{bucket}/{key}
const res = await b2.objects.put({ /* ... */ });Source: packages/provider/b2/src/b2.ts
PUT b2.objects.putAcl
PUT https://s3.us-west-004.backblazeb2.com/{bucket}/{key}?acl{query}
const res = await b2.objects.putAcl({ /* ... */ });Source: packages/provider/b2/src/b2.ts
PUT b2.objects.putLegalHold
PUT https://s3.us-west-004.backblazeb2.com/{bucket}/{key}?legal-hold{query}
const res = await b2.objects.putLegalHold({ /* ... */ });Source: packages/provider/b2/src/b2.ts
PUT b2.objects.putRetention
PUT https://s3.us-west-004.backblazeb2.com/{bucket}/{key}?retention{query}
const res = await b2.objects.putRetention({ /* ... */ });Source: packages/provider/b2/src/b2.ts
PUT b2.objects.uploadPart
PUT https://s3.us-west-004.backblazeb2.com/{bucket}/{key}{query}
const res = await b2.objects.uploadPart({ /* ... */ });Source: packages/provider/b2/src/b2.ts
PUT b2.objects.uploadPartCopy
PUT https://s3.us-west-004.backblazeb2.com/{bucket}/{key}{query}
const res = await b2.objects.uploadPartCopy({ /* ... */ });Source: packages/provider/b2/src/b2.ts
Part of the apicity monorepo.
License
MIT — see LICENSE.