OpenCollection is a plain-YAML specification for executable API collections: requests, environments, variables, authentication, scripts and tests. Bruno created it, develops it in the open, and stores every collection in it.
info:name: Create Ordertype: httpseq: 2http:method: POSTurl: "{{baseUrl}}/orders"headers:- name: Authorizationvalue: Bearer {{token}}body:type: jsondata: |-{ "sku": "BRU-001", "quantity": 2 }runtime:scripts:- type: testscode: |-test("creates the order", () => {expect(res.status).to.equal(201);});
OpenCollection describes the working set an API team actually keeps: not just which endpoints exist, but the concrete requests, the environments they run against, and the checks that prove they work.
HTTP, GraphQL, gRPC and WebSocket requests with their method, URL, params, headers and body, exactly as you would send them.
Local, staging and production as separate files. Variables resolve at run time, and secrets stay out of the repo.
Bearer, basic, API key, OAuth 2.0, AWS Signature and more, set once on the collection and inherited down the tree.
Pre-request and post-response scripts, assertions and tests live next to the request they belong to.
A collection can be a tree of small files that diff cleanly in Git, or one bundled YAML file you can hand to anyone.
Validate collections in CI, generate types, or build your own tooling against a schema that is documented and versioned.
The two specifications are complementary. Most teams keep both: the contract in OpenAPI, and the runnable collection that exercises it in OpenCollection.
What does this API look like?
How do I call it, and did it work?
OpenAPI tells you the shape of the door. OpenCollection shows you how to walk through it.
Bruno is the reference implementation. Since Bruno 4.0, every new collection is OpenCollection YAML by default, and every Bruno surface reads the same files.
orders-api/├── opencollection.yml # collection root├── environments/│ ├── local.yml│ └── production.yml├── orders/│ ├── folder.yml # folder settings│ ├── create-order.yml│ └── get-order.yml└── users/└── get-user.yml
The format is not tied to Bruno. Any tool can read, write, validate or convert OpenCollection files using the published schema and packages.
The project home: an overview of the format and how it sits beside OpenAPI.
The human-readable spec, with every object and field described.
Browse the JSON Schema interactively, type by type.
The schema, TypeScript types and converters, published as MIT-licensed npm packages.
OpenCollection is a Bruno-built, community-supported project. The specification is free for anyone to implement.
Download Bruno and your first collection is OpenCollection YAML from the start. No account, no sync, no export step.