BUILD WITH THE COMMUNITY
One library. Your interface.
Bring approved Borderlands 4 item collections into your website, desktop app, bot, or SDK mod. Public reads need no account or API key. Keep your own design and decide how users import items.
Start with two requests
Base URL: https://msbt-community-library.screename53.workers.dev/api/v1
| Request | What you get |
|---|---|
GET /folders?q=Vex&offset=0 | Search titles and creators. Up to 25 results and a next offset. |
GET /folders/{id} | The approved collection, its ordered items, relative folder paths, and SHA-256 digest. |
Read the returned next value for pagination; stop when it is null. Collections may change while paging. Public browser requests work from any origin without cookies. Administrative and submission routes are separate.
JavaScript: browser or Node 20+
Copy the downloaded client into your project. In a browser, load it with a script tag. In Node, use const CommunityLibrary = require('./community-library.js').
<script src="community-library.js"></script>
<script>
async function loadCollection() {
const library = new CommunityLibrary();
const page = await library.list({ query: 'Vex' });
if (!page.folders.length) return;
const result = await library.get(page.folders[0].id);
// result.folder.items: { name, folder, serial }[]
// Render text with textContent; import only after user confirmation.
console.log(result.folder, library.shareLink(result.id));
}
loadCollection().catch(console.error);
</script>
The client verifies the digest before returning a folder, caps downloads, sets a timeout, and rejects redirects. Errors include a status property when there is an HTTP response.
Python: no dependencies
Copy community_library.py next to your code. In a game mod, fetch on a background thread and pass results to the game thread before touching UI or Unreal objects.
import community_library as library
page = library.list_folders('Vex')
if page['folders']:
result = library.get_folder(page['folders'][0]['id'])
for item in result['folder']['items']:
print(item['name'], item['folder'], item['serial'])Item titles and screenshots
Folder responses include item_details, keyed by the SHA-256 hash of the complete, case-sensitive item code. Use the GZO title when present, otherwise keep the saved item name. Display image_url for the uploaded screenshot or exact-match GZO image. Keep title_source and image_source visible as credit. These optional details are separate from the original folder and its integrity digest.
Missing or conflicting matches stay blank. Imported image links can become unavailable if their source is withdrawn.
Integration rules
- Preserve serial case, duplicates, item order, names, and nested paths. Folder paths are labels; never use them as filesystem paths.
- Only approved collections are public. A private, missing, rejected, or withdrawn folder returns 404. Imported copies belong to the user and should not be silently overwritten.
- The service currently allows 120 read requests per minute per IP, shared across clients and read routes. Do not poll constantly. On 429, wait at least 60 seconds; use bounded backoff for network failures and 503 responses.
- Folder content is limited to 16 MiB. Page item previews rather than rendering thousands of rows at once.
- Codes are format-checked, not proven legitimate or safe to equip. The digest detects changed contents; it does not verify the creator’s identity.
- This v1 API is read-only. It cannot publish, edit, delete, approve, or grant team access. Keep admin credentials out of integrations.
Admin access
Sign in to the admin portal with your individual account. The owner assigns access: reviewers approve or reject; editors also edit; admins also delete; the owner manages the team. A new account has no team permissions.
Password changes are available. Email verification and forgotten-password recovery are not configured yet.