can1357/oh-my-pi · error · Error
Backblaze B2 bucket not found: ${bucketName}
Error message
Backblaze B2 bucket not found: ${bucketName} What it means
After iterating the b2_list_buckets response, if no bucket's bucketName matches the configured bucketName, the code throws `Backblaze B2 bucket not found: <name>`. The listing succeeded; the configured bucket simply does not exist (or is not visible to the key) on that B2 account.
Source
Thrown at packages/coding-agent/src/blob-broker/uploaders-object-storage.ts:514
bucketName: string,
): Promise<B2Bucket> {
const value = await b2Json(
config,
`${authorization.apiUrl}/b2api/v2/b2_list_buckets`,
authorization.authorizationToken,
{ accountId: authorization.accountId, bucketName },
);
const buckets = asRecord(value, "Backblaze B2 bucket listing").buckets;
if (!Array.isArray(buckets)) throw new Error("Backblaze B2 bucket listing omitted buckets");
for (const candidate of buckets) {
if (optionalStringField(candidate, "bucketName") !== bucketName) continue;
return {
bucketId: requiredStringField(candidate, "bucketId", "Backblaze B2 bucket"),
bucketName,
bucketType: requiredStringField(candidate, "bucketType", "Backblaze B2 bucket"),
};
}
throw new Error(`Backblaze B2 bucket not found: ${bucketName}`);
}
async function b2UploadTarget(
config: DestinationRuntimeConfig,
authorization: B2Authorization,
bucketId: string,
): Promise<B2UploadTarget> {
const value = await b2Json(
config,
`${authorization.apiUrl}/b2api/v2/b2_get_upload_url`,
authorization.authorizationToken,
{ bucketId },
);
return {
uploadUrl: requiredStringField(value, "uploadUrl", "Backblaze B2 upload URL"),
authorizationToken: requiredStringField(value, "authorizationToken", "Backblaze B2 upload URL"),
};
}View on GitHub (pinned to 9690622007)
Solutions
- Verify the bucket exists in the B2 web console under the account the key belongs to.
- Check for typos/case differences in the configured bucketName (names are case-sensitive).
- Regenerate or broaden the application key so it can list/see the target bucket, or use a key restricted to exactly that bucket.
- Point the destination config at the correct account/key for the environment you intend.
Example fix
// before
{ "provider": "b2", "bucketName": "my-images" } // actual bucket is "my_images"
// after
{ "provider": "b2", "bucketName": "my_images" } Defensive patterns
Strategy: validation
Validate before calling
import { S3Client, HeadBucketCommand } from "@aws-sdk/client-s3"; // or B2 native API
// before upload: verify bucket visibility with the same key
const listing = await b2ListBuckets(config);
if (!listing.buckets.some((b) => b.bucketName === configuredName)) {
throw new Error(`bucket '${configuredName}' not visible to this application key; create it or fix config`);
} Try / catch
try {
await publish(destination, request);
} catch (err) {
if (err instanceof Error && err.message.startsWith("Backblaze B2 bucket not found")) {
console.error(`${err.message} — verify bucket name and application key scope in the B2 console`);
} else throw err;
} Prevention
- verify bucket existence in the B2 console right after writing the destination config
- use a per-bucket application key so visibility matches intent
- check bucket name spelling/case (names are exact)
- re-validate configs after account migrations or bucket renames
When it happens
Trigger: b2_list_buckets returned a buckets array but none matched the configured bucketName — the bucket was deleted/renamed, belongs to a different B2 account, or the application key is restricted to other buckets (or a bucketId-only key that cannot see it).
Common situations: Typo in the bucket name in the destination config; bucket deleted after config was written; using a restricted master-less application key scoped to a different bucket; environment mismatch (staging config pointing at production account or vice versa).
Related errors
- Destination option ${key} must be a string
- Unsupported S3 destination: ${destination}
- ${context} returned an invalid JSON object
- ${context} omitted ${field}
- Backblaze B2 bucket listing omitted buckets
AI-assisted analysis of can1357/oh-my-pi@9690622007 (2026-08-31).
Data as JSON: /api/errors/f0b3c5e5ca970a9b.
Report an issue: GitHub.