Request Collection

The request collection is the primary configuration for Slumber. It defines which requests can be made, and how to make them. When running a slumber instance, a single collection file is loaded. If you want to work with multiple collections at once, you'll have to run multiple instances of Slumber.

Collection files are designed to be sharable, meaning you can commit them to your Git repo. The most common pattern is to create one collection per API repo, and check it into the repo so other developers of the API can use the same collection. This makes it easy for any new developer or user to learn how to use an API.

Format & Loading

A collection is defined as a YAML file. When you run slumber, it will search the current directory and its parents for the following default collection files, in order:

  • slumber.yml
  • slumber.yaml
  • .slumber.yml
  • .slumber.yaml

Whichever of those files is found first will be used. For any given directory, if no collection file is found there, it will recursively go up the directory tree until we find a collection file or hit the root directory. If you want to use a different file for your collection (e.g. if you want to store multiple collections in the same directory), you can override the auto-search with the --file (or -f) command line argument. E.g.:

slumber -f my-collection.yml


A request collection supports the following top-level fields:

profilesmapping[string, Profile]Static template values{}
requestsmapping[string, RequestRecipe]Requests Slumber can send{}
chainsmapping[string, Chain]Complex template values{}
.ignoreAnyExtra data to be ignored by Slumber (useful with YAML anchors)


    name: Local
      host: http://localhost:5000
      user_guid: abc123
    name: Production
      user_guid: abc123

    source: !file
      path: ./username.txt
    source: !prompt
      message: Password
    sensitive: true
    source: !request
      recipe: login
    selector: $.token

# Use YAML anchors for de-duplication (Anything under .ignore is ignored)
  base: &base
      Accept: application/json
      Content-Type: application/json

  login: !request
    <<: *base
    method: POST
    url: "{{host}}/anything/login"
    body: |
        "username": "{{chains.username}}",
        "password": "{{chains.password}}"

  # Folders can be used to keep your recipes organized
  users: !folder
      get_user: !request
        <<: *base
        name: Get User
        method: GET
        url: "{{host}}/anything/current-user"
        authentication: !bearer "{{chains.auth_token}}"

      update_user: !request
        <<: *base
        name: Update User
        method: PUT
        url: "{{host}}/anything/current-user"
        authentication: !bearer "{{chains.auth_token}}"
        body: >
          {"username": "Kenny"}